Merge remote-tracking branch 'origin/master' into gs-master
Conflicts: .travis.yml Gemfile.lock README.md app/controllers/settings/follower_domains_controller.rb app/controllers/statuses_controller.rb app/javascript/mastodon/locales/ja.json app/lib/feed_manager.rb app/models/media_attachment.rb app/models/mute.rb app/models/status.rb app/services/mute_service.rb app/views/home/index.html.haml app/views/stream_entries/_simple_status.html.haml config/locales/ca.yml config/locales/en.yml config/locales/es.yml config/locales/fr.yml config/locales/nl.yml config/locales/pl.yml config/locales/pt-BR.yml config/themes.ymlmain
commit
c816701550
|
@ -0,0 +1,191 @@
|
|||
version: 2
|
||||
|
||||
aliases:
|
||||
- &defaults
|
||||
docker:
|
||||
- image: circleci/ruby:2.5.1-stretch-node
|
||||
environment: &ruby_environment
|
||||
BUNDLE_APP_CONFIG: ./.bundle/
|
||||
DB_HOST: localhost
|
||||
DB_USER: root
|
||||
RAILS_ENV: test
|
||||
PARALLEL_TEST_PROCESSORS: 4
|
||||
ALLOW_NOPAM: true
|
||||
working_directory: ~/projects/mastodon/
|
||||
|
||||
- &attach_workspace
|
||||
attach_workspace:
|
||||
at: ~/projects/
|
||||
|
||||
- &persist_to_workspace
|
||||
persist_to_workspace:
|
||||
root: ~/projects/
|
||||
paths:
|
||||
- ./mastodon/
|
||||
|
||||
- &restore_ruby_dependencies
|
||||
restore_cache:
|
||||
keys:
|
||||
- v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
|
||||
- v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-
|
||||
- v2-ruby-dependencies-
|
||||
|
||||
- &install_steps
|
||||
steps:
|
||||
- checkout
|
||||
- *attach_workspace
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v1-node-dependencies-{{ checksum "yarn.lock" }}
|
||||
- v1-node-dependencies-
|
||||
- run: yarn install --frozen-lockfile
|
||||
- save_cache:
|
||||
key: v1-node-dependencies-{{ checksum "yarn.lock" }}
|
||||
paths:
|
||||
- ./node_modules/
|
||||
|
||||
- *persist_to_workspace
|
||||
|
||||
- &install_system_dependencies
|
||||
run:
|
||||
name: Install system dependencies
|
||||
command: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
|
||||
|
||||
- &install_ruby_dependencies
|
||||
steps:
|
||||
- *attach_workspace
|
||||
|
||||
- *install_system_dependencies
|
||||
|
||||
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
|
||||
- *restore_ruby_dependencies
|
||||
- run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production
|
||||
- save_cache:
|
||||
key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
|
||||
paths:
|
||||
- ./.bundle/
|
||||
- ./vendor/bundle/
|
||||
|
||||
- &test_steps
|
||||
steps:
|
||||
- *attach_workspace
|
||||
|
||||
- *install_system_dependencies
|
||||
- run: sudo apt-get install -y ffmpeg
|
||||
|
||||
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
|
||||
- *restore_ruby_dependencies
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
- precompiled-assets-{{ .Branch }}-{{ .Revision }}
|
||||
- precompiled-assets-{{ .Branch }}-
|
||||
- precompiled-assets-
|
||||
|
||||
- run:
|
||||
name: Prepare Tests
|
||||
command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
|
||||
- run:
|
||||
name: Run Tests
|
||||
command: bundle exec parallel_test ./spec/ --group-by filesize --type rspec
|
||||
|
||||
jobs:
|
||||
install:
|
||||
<<: *defaults
|
||||
<<: *install_steps
|
||||
|
||||
install-ruby2.5:
|
||||
<<: *defaults
|
||||
<<: *install_ruby_dependencies
|
||||
|
||||
install-ruby2.4:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/ruby:2.4.4-stretch-node
|
||||
environment: *ruby_environment
|
||||
<<: *install_ruby_dependencies
|
||||
|
||||
build:
|
||||
<<: *defaults
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- *install_system_dependencies
|
||||
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
|
||||
- *restore_ruby_dependencies
|
||||
- run: ./bin/rails assets:precompile
|
||||
- save_cache:
|
||||
key: precompiled-assets-{{ .Branch }}-{{ .Revision }}
|
||||
paths:
|
||||
- ./public/assets
|
||||
- ./public/packs-test/
|
||||
|
||||
test-ruby2.5:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/ruby:2.5.1-stretch-node
|
||||
environment: *ruby_environment
|
||||
- image: circleci/postgres:10.3-alpine
|
||||
environment:
|
||||
POSTGRES_USER: root
|
||||
- image: circleci/redis:4.0.9-alpine
|
||||
<<: *test_steps
|
||||
|
||||
test-ruby2.4:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/ruby:2.4.4-stretch-node
|
||||
environment: *ruby_environment
|
||||
- image: circleci/postgres:10.3-alpine
|
||||
environment:
|
||||
POSTGRES_USER: root
|
||||
- image: circleci/redis:4.0.9-alpine
|
||||
<<: *test_steps
|
||||
|
||||
test-webui:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/node:8.11.1-stretch
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- run: yarn test:jest
|
||||
|
||||
check-i18n:
|
||||
<<: *defaults
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
|
||||
- *restore_ruby_dependencies
|
||||
- run: bundle exec i18n-tasks check-normalized
|
||||
- run: bundle exec i18n-tasks unused
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
build-and-test:
|
||||
jobs:
|
||||
- install
|
||||
- install-ruby2.5:
|
||||
requires:
|
||||
- install
|
||||
- install-ruby2.4:
|
||||
requires:
|
||||
- install
|
||||
- build:
|
||||
requires:
|
||||
- install-ruby2.5
|
||||
- test-ruby2.5:
|
||||
requires:
|
||||
- install-ruby2.5
|
||||
- build
|
||||
- test-ruby2.4:
|
||||
requires:
|
||||
- install-ruby2.4
|
||||
- build
|
||||
- test-webui:
|
||||
requires:
|
||||
- install
|
||||
- check-i18n:
|
||||
requires:
|
||||
- install-ruby2.5
|
|
@ -217,3 +217,10 @@ STREAMING_CLUSTER_NUM=1
|
|||
# SAML_UID_ATTRIBUTE="urn:oid:0.9.2342.19200300.100.1.1"
|
||||
# SAML_ATTRIBUTES_STATEMENTS_VERIFIED=
|
||||
# SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL=
|
||||
|
||||
# Use HTTP proxy for outgoing request (optional)
|
||||
# http_proxy=http://gateway.local:8118
|
||||
# Access control for hidden service.
|
||||
# ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
|
||||
# If you use transparent proxy to access to hidden service, uncomment following for skipping private address check.
|
||||
# HIDDEN_SERVICE_VIA_TRANSPARENT_PROXY=true
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# Node.js
|
||||
NODE_ENV=test
|
||||
# Federation
|
||||
LOCAL_DOMAIN=cb6e6126.ngrok.io
|
||||
LOCAL_HTTPS=true
|
||||
|
|
38
Gemfile
38
Gemfile
|
@ -3,7 +3,7 @@
|
|||
source 'https://rubygems.org'
|
||||
ruby '>= 2.3.0', '< 2.6.0'
|
||||
|
||||
gem 'pkg-config', '~> 1.2'
|
||||
gem 'pkg-config', '~> 1.3'
|
||||
|
||||
gem 'puma', '~> 3.11'
|
||||
gem 'rails', '~> 5.2.0'
|
||||
|
@ -11,11 +11,11 @@ gem 'rails', '~> 5.2.0'
|
|||
gem 'hamlit-rails', '~> 0.2'
|
||||
gem 'pg', '~> 1.0'
|
||||
gem 'pghero', '~> 2.1'
|
||||
gem 'dotenv-rails', '~> 2.2'
|
||||
gem 'dotenv-rails', '~> 2.2', '< 2.3'
|
||||
|
||||
gem 'aws-sdk-s3', '~> 1.8', require: false
|
||||
gem 'aws-sdk-s3', '~> 1.9', require: false
|
||||
gem 'fog-core', '~> 1.45'
|
||||
gem 'fog-local', '~> 0.4', require: false
|
||||
gem 'fog-local', '~> 0.5', require: false
|
||||
gem 'fog-openstack', '~> 0.1', require: false
|
||||
gem 'paperclip', '~> 6.0'
|
||||
gem 'paperclip-av-transcoder', '~> 0.6'
|
||||
|
@ -31,7 +31,7 @@ gem 'iso-639'
|
|||
gem 'chewy', '~> 5.0'
|
||||
gem 'cld3', '~> 3.2.0'
|
||||
gem 'devise', '~> 4.4'
|
||||
gem 'devise-two-factor', '~> 3.0', git: 'https://github.com/ykzts/devise-two-factor.git', branch: 'rails-5.2'
|
||||
gem 'devise-two-factor', '~> 3.0'
|
||||
|
||||
group :pam_authentication, optional: true do
|
||||
gem 'devise_pam_authenticatable2', '~> 9.1'
|
||||
|
@ -50,18 +50,18 @@ gem 'hiredis', '~> 0.6'
|
|||
gem 'redis-namespace', '~> 1.5'
|
||||
gem 'html2text'
|
||||
gem 'htmlentities', '~> 4.3'
|
||||
gem 'http', '~> 3.0'
|
||||
gem 'http', '~> 3.2'
|
||||
gem 'http_accept_language', '~> 2.1'
|
||||
gem 'httplog', '~> 1.0'
|
||||
gem 'idn-ruby', require: 'idn'
|
||||
gem 'kaminari', '~> 1.1'
|
||||
gem 'link_header', '~> 0.0'
|
||||
gem 'mime-types', '~> 3.1'
|
||||
gem 'mime-types', '~> 3.1', require: 'mime/types/columnar'
|
||||
gem 'nokogiri', '~> 1.8'
|
||||
gem 'nsa', '~> 0.2'
|
||||
gem 'oj', '~> 3.4'
|
||||
gem 'oj', '~> 3.5'
|
||||
gem 'ostatus2', '~> 2.0'
|
||||
gem 'ox', '~> 2.8'
|
||||
gem 'ox', '~> 2.9'
|
||||
gem 'pundit', '~> 1.1'
|
||||
gem 'premailer-rails'
|
||||
gem 'rack-attack', '~> 5.2'
|
||||
|
@ -72,7 +72,6 @@ gem 'rails-settings-cached', '~> 0.6'
|
|||
gem 'redis', '~> 4.0', require: ['redis', 'redis/connection/hiredis']
|
||||
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||
gem 'rqrcode', '~> 0.10'
|
||||
gem 'ruby-oembed', '~> 0.12', require: 'oembed'
|
||||
gem 'ruby-progressbar', '~> 1.4'
|
||||
gem 'sanitize', '~> 4.6'
|
||||
gem 'sidekiq', '~> 5.1'
|
||||
|
@ -84,20 +83,21 @@ gem 'simple_form', '~> 4.0'
|
|||
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
|
||||
gem 'stoplight', '~> 2.1.3'
|
||||
gem 'strong_migrations', '~> 0.2'
|
||||
gem 'tty-command'
|
||||
gem 'tty-prompt'
|
||||
gem 'tty-command', '~> 0.8', require: false
|
||||
gem 'tty-prompt', '~> 0.16', require: false
|
||||
gem 'twitter-text', '~> 1.14'
|
||||
gem 'tzinfo-data', '~> 1.2018'
|
||||
gem 'webpacker', '~> 3.4'
|
||||
gem 'webpush'
|
||||
|
||||
gem 'json-ld-preloaded', '~> 2.2'
|
||||
gem 'json-ld', '~> 2.2'
|
||||
gem 'rdf-normalize', '~> 0.3'
|
||||
|
||||
group :development, :test do
|
||||
gem 'fabrication', '~> 2.20'
|
||||
gem 'fuubar', '~> 2.2'
|
||||
gem 'i18n-tasks', '~> 0.9', require: false
|
||||
gem 'pry-byebug', '~> 3.6'
|
||||
gem 'pry-rails', '~> 0.3'
|
||||
gem 'rspec-rails', '~> 3.7'
|
||||
end
|
||||
|
@ -113,7 +113,8 @@ group :test do
|
|||
gem 'microformats', '~> 4.0'
|
||||
gem 'rails-controller-testing', '~> 1.0'
|
||||
gem 'rspec-sidekiq', '~> 3.0'
|
||||
gem 'simplecov', '~> 0.14', require: false
|
||||
gem 'rspec-retry', '~> 0.5', require: false
|
||||
gem 'simplecov', '~> 0.16', require: false
|
||||
gem 'webmock', '~> 3.3'
|
||||
gem 'parallel_tests', '~> 2.21'
|
||||
end
|
||||
|
@ -127,18 +128,21 @@ group :development do
|
|||
gem 'letter_opener', '~> 1.4'
|
||||
gem 'letter_opener_web', '~> 1.3'
|
||||
gem 'memory_profiler'
|
||||
gem 'rubocop', require: false
|
||||
gem 'rubocop', '~> 0.55', require: false
|
||||
gem 'brakeman', '~> 4.2', require: false
|
||||
gem 'bundler-audit', '~> 0.6', require: false
|
||||
gem 'scss_lint', '~> 0.55', require: false
|
||||
gem 'scss_lint', '~> 0.57', require: false
|
||||
|
||||
gem 'capistrano', '~> 3.10'
|
||||
gem 'capistrano-rails', '~> 1.3'
|
||||
gem 'capistrano-rbenv', '~> 2.1'
|
||||
gem 'capistrano-yarn', '~> 2.0'
|
||||
|
||||
gem 'derailed_benchmarks'
|
||||
gem 'stackprof'
|
||||
end
|
||||
|
||||
group :production do
|
||||
gem 'lograge', '~> 0.9'
|
||||
gem 'lograge', '~> 0.10'
|
||||
gem 'redis-rails', '~> 5.0'
|
||||
end
|
||||
|
|
166
Gemfile.lock
166
Gemfile.lock
|
@ -1,15 +1,3 @@
|
|||
GIT
|
||||
remote: https://github.com/ykzts/devise-two-factor.git
|
||||
revision: f60492b29c174d4c959ac02406392f8eb9c4d374
|
||||
branch: rails-5.2
|
||||
specs:
|
||||
devise-two-factor (3.0.2)
|
||||
activesupport (< 5.3)
|
||||
attr_encrypted (>= 1.3, < 4, != 2)
|
||||
devise (~> 4.0)
|
||||
railties (< 5.3)
|
||||
rotp (~> 2.0)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
|
@ -64,7 +52,7 @@ GEM
|
|||
public_suffix (>= 2.0.2, < 4.0)
|
||||
airbrussh (1.3.0)
|
||||
sshkit (>= 1.6.1, != 1.7.0)
|
||||
annotate (2.7.2)
|
||||
annotate (2.7.3)
|
||||
activerecord (>= 3.2, < 6.0)
|
||||
rake (>= 10.4, < 13.0)
|
||||
arel (9.0.0)
|
||||
|
@ -73,20 +61,21 @@ GEM
|
|||
encryptor (~> 3.0.0)
|
||||
av (0.9.0)
|
||||
cocaine (~> 0.5.3)
|
||||
aws-partitions (1.70.0)
|
||||
aws-sdk-core (3.17.0)
|
||||
aws-partitions (1.80.0)
|
||||
aws-sdk-core (3.19.0)
|
||||
aws-partitions (~> 1.0)
|
||||
aws-sigv4 (~> 1.0)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.5.0)
|
||||
aws-sdk-core (~> 3)
|
||||
aws-sigv4 (~> 1.0)
|
||||
aws-sdk-s3 (1.8.2)
|
||||
aws-sdk-s3 (1.9.1)
|
||||
aws-sdk-core (~> 3)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.0)
|
||||
aws-sigv4 (1.0.2)
|
||||
bcrypt (3.1.11)
|
||||
benchmark-ips (2.7.2)
|
||||
better_errors (2.4.0)
|
||||
coderay (>= 1.0.0)
|
||||
erubi (>= 1.0.0)
|
||||
|
@ -96,7 +85,7 @@ GEM
|
|||
bootsnap (1.3.0)
|
||||
msgpack (~> 1.0)
|
||||
brakeman (4.2.1)
|
||||
browser (2.5.2)
|
||||
browser (2.5.3)
|
||||
builder (3.2.3)
|
||||
bullet (5.7.5)
|
||||
activesupport (>= 3.0.0)
|
||||
|
@ -104,7 +93,8 @@ GEM
|
|||
bundler-audit (0.6.0)
|
||||
bundler (~> 1.2)
|
||||
thor (~> 0.18)
|
||||
capistrano (3.10.1)
|
||||
byebug (10.0.2)
|
||||
capistrano (3.10.2)
|
||||
airbrussh (>= 1.0.0)
|
||||
i18n
|
||||
rake (>= 10.0.0)
|
||||
|
@ -150,18 +140,32 @@ GEM
|
|||
css_parser (1.6.0)
|
||||
addressable
|
||||
debug_inspector (0.0.3)
|
||||
derailed_benchmarks (1.3.4)
|
||||
benchmark-ips (~> 2)
|
||||
get_process_mem (~> 0)
|
||||
heapy (~> 0)
|
||||
memory_profiler (~> 0)
|
||||
rack (>= 1)
|
||||
rake (> 10, < 13)
|
||||
thor (~> 0.19)
|
||||
devise (4.4.3)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 6.0)
|
||||
responders
|
||||
warden (~> 1.2.3)
|
||||
devise-two-factor (3.0.3)
|
||||
activesupport (< 5.3)
|
||||
attr_encrypted (>= 1.3, < 4, != 2)
|
||||
devise (~> 4.0)
|
||||
railties (< 5.3)
|
||||
rotp (~> 2.0)
|
||||
devise_pam_authenticatable2 (9.1.0)
|
||||
devise (>= 4.0.0)
|
||||
rpam2 (~> 4.0)
|
||||
diff-lcs (1.3)
|
||||
docile (1.1.5)
|
||||
domain_name (0.5.20170404)
|
||||
docile (1.3.0)
|
||||
domain_name (0.5.20180417)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
doorkeeper (4.3.2)
|
||||
railties (>= 4.2)
|
||||
|
@ -172,29 +176,29 @@ GEM
|
|||
easy_translate (0.5.1)
|
||||
thread
|
||||
thread_safe
|
||||
elasticsearch (6.0.1)
|
||||
elasticsearch-api (= 6.0.1)
|
||||
elasticsearch-transport (= 6.0.1)
|
||||
elasticsearch-api (6.0.1)
|
||||
elasticsearch (6.0.2)
|
||||
elasticsearch-api (= 6.0.2)
|
||||
elasticsearch-transport (= 6.0.2)
|
||||
elasticsearch-api (6.0.2)
|
||||
multi_json
|
||||
elasticsearch-dsl (0.1.5)
|
||||
elasticsearch-transport (6.0.1)
|
||||
elasticsearch-transport (6.0.2)
|
||||
faraday
|
||||
multi_json
|
||||
encryptor (3.0.0)
|
||||
equatable (0.5.0)
|
||||
erubi (1.7.1)
|
||||
et-orbi (1.0.9)
|
||||
et-orbi (1.1.0)
|
||||
tzinfo
|
||||
excon (0.60.0)
|
||||
excon (0.62.0)
|
||||
fabrication (2.20.1)
|
||||
faker (1.8.7)
|
||||
i18n (>= 0.7)
|
||||
faraday (0.14.0)
|
||||
faraday (0.15.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
fast_blank (1.0.0)
|
||||
fastimage (2.1.1)
|
||||
ffi (1.9.21)
|
||||
ffi (1.9.23)
|
||||
fog-core (1.45.0)
|
||||
builder
|
||||
excon (~> 0.58)
|
||||
|
@ -202,9 +206,9 @@ GEM
|
|||
fog-json (1.0.2)
|
||||
fog-core (~> 1.0)
|
||||
multi_json (~> 1.10)
|
||||
fog-local (0.4.0)
|
||||
fog-core (~> 1.27)
|
||||
fog-openstack (0.1.23)
|
||||
fog-local (0.5.0)
|
||||
fog-core (>= 1.27, < 3.0)
|
||||
fog-openstack (0.1.25)
|
||||
fog-core (~> 1.40)
|
||||
fog-json (>= 1.0)
|
||||
ipaddress (>= 0.8)
|
||||
|
@ -212,6 +216,7 @@ GEM
|
|||
fuubar (2.3.1)
|
||||
rspec-core (~> 3.0)
|
||||
ruby-progressbar (~> 1.4)
|
||||
get_process_mem (0.2.1)
|
||||
globalid (0.4.1)
|
||||
activesupport (>= 4.2.0)
|
||||
goldfinger (2.1.0)
|
||||
|
@ -232,6 +237,7 @@ GEM
|
|||
concurrent-ruby (~> 1.0)
|
||||
hashdiff (0.3.7)
|
||||
hashie (3.5.7)
|
||||
heapy (0.1.3)
|
||||
highline (1.7.10)
|
||||
hiredis (0.6.1)
|
||||
hitimes (1.2.6)
|
||||
|
@ -239,20 +245,20 @@ GEM
|
|||
html2text (0.2.1)
|
||||
nokogiri (~> 1.6)
|
||||
htmlentities (4.3.4)
|
||||
http (3.0.0)
|
||||
http (3.2.0)
|
||||
addressable (~> 2.3)
|
||||
http-cookie (~> 1.0)
|
||||
http-form_data (>= 2.0.0.pre.pre2, < 3)
|
||||
http-form_data (~> 2.0)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
http-form_data (2.0.0)
|
||||
http-form_data (2.1.0)
|
||||
http_accept_language (2.1.1)
|
||||
http_parser.rb (0.6.0)
|
||||
httplog (1.0.2)
|
||||
colorize (~> 0.8)
|
||||
rack (>= 1.0)
|
||||
i18n (1.0.0)
|
||||
i18n (1.0.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n-tasks (0.9.21)
|
||||
activesupport (>= 4.0.2)
|
||||
|
@ -267,15 +273,11 @@ GEM
|
|||
idn-ruby (0.1.0)
|
||||
ipaddress (0.8.3)
|
||||
iso-639 (0.2.8)
|
||||
jmespath (1.3.1)
|
||||
jmespath (1.4.0)
|
||||
json (2.1.0)
|
||||
json-ld (2.2.1)
|
||||
multi_json (~> 1.12)
|
||||
rdf (>= 2.2.8, < 4.0)
|
||||
json-ld-preloaded (2.2.3)
|
||||
json-ld (>= 2.2, < 4.0)
|
||||
multi_json (~> 1.12)
|
||||
rdf (>= 2.2, < 4.0)
|
||||
jsonapi-renderer (0.2.0)
|
||||
jwt (2.1.0)
|
||||
kaminari (1.1.1)
|
||||
|
@ -299,7 +301,7 @@ GEM
|
|||
letter_opener (~> 1.0)
|
||||
railties (>= 3.2)
|
||||
link_header (0.0.8)
|
||||
lograge (0.9.0)
|
||||
lograge (0.10.0)
|
||||
actionpack (>= 4)
|
||||
activesupport (>= 4)
|
||||
railties (>= 4)
|
||||
|
@ -343,7 +345,7 @@ GEM
|
|||
concurrent-ruby (~> 1.0.0)
|
||||
sidekiq (>= 3.5.0)
|
||||
statsd-ruby (~> 1.2.0)
|
||||
oj (3.4.0)
|
||||
oj (3.5.1)
|
||||
omniauth (1.8.1)
|
||||
hashie (>= 3.4.6, < 3.6.0)
|
||||
rack (>= 1.6.2, < 3)
|
||||
|
@ -359,7 +361,7 @@ GEM
|
|||
addressable (~> 2.5)
|
||||
http (~> 3.0)
|
||||
nokogiri (~> 1.8)
|
||||
ox (2.8.2)
|
||||
ox (2.9.2)
|
||||
paperclip (6.0.0)
|
||||
activemodel (>= 4.2.0)
|
||||
activesupport (>= 4.2.0)
|
||||
|
@ -370,7 +372,7 @@ GEM
|
|||
av (~> 0.9.0)
|
||||
paperclip (>= 2.5.2)
|
||||
parallel (1.12.1)
|
||||
parallel_tests (2.21.1)
|
||||
parallel_tests (2.21.3)
|
||||
parallel
|
||||
parser (2.5.1.0)
|
||||
ast (~> 2.4.0)
|
||||
|
@ -380,7 +382,7 @@ GEM
|
|||
pg (1.0.0)
|
||||
pghero (2.1.0)
|
||||
activerecord
|
||||
pkg-config (1.2.9)
|
||||
pkg-config (1.3.0)
|
||||
posix-spawn (0.3.13)
|
||||
powerpack (0.1.1)
|
||||
premailer (1.11.1)
|
||||
|
@ -394,10 +396,13 @@ GEM
|
|||
pry (0.11.3)
|
||||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.9.0)
|
||||
pry-byebug (3.6.0)
|
||||
byebug (~> 10.0)
|
||||
pry (~> 0.10)
|
||||
pry-rails (0.3.6)
|
||||
pry (>= 0.10.4)
|
||||
public_suffix (3.0.2)
|
||||
puma (3.11.3)
|
||||
puma (3.11.4)
|
||||
pundit (1.1.0)
|
||||
activesupport (>= 3.0.0)
|
||||
rack (2.0.4)
|
||||
|
@ -446,10 +451,10 @@ GEM
|
|||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (3.0.0)
|
||||
rake (12.3.1)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rdf (3.0.1)
|
||||
rdf (3.0.2)
|
||||
hamster (~> 3.0)
|
||||
link_header (~> 0.0, >= 0.0.8)
|
||||
rdf-normalize (0.3.3)
|
||||
|
@ -471,9 +476,9 @@ GEM
|
|||
redis-actionpack (>= 5.0, < 6)
|
||||
redis-activesupport (>= 5.0, < 6)
|
||||
redis-store (>= 1.2, < 2)
|
||||
redis-store (1.4.1)
|
||||
redis-store (1.5.0)
|
||||
redis (>= 2.2, < 5)
|
||||
request_store (1.4.0)
|
||||
request_store (1.4.1)
|
||||
rack (>= 1.4)
|
||||
responders (2.4.0)
|
||||
actionpack (>= 4.2.0, < 5.3)
|
||||
|
@ -498,18 +503,19 @@ GEM
|
|||
rspec-expectations (~> 3.7.0)
|
||||
rspec-mocks (~> 3.7.0)
|
||||
rspec-support (~> 3.7.0)
|
||||
rspec-retry (0.5.7)
|
||||
rspec-core (> 3.3)
|
||||
rspec-sidekiq (3.0.3)
|
||||
rspec-core (~> 3.0, >= 3.0.0)
|
||||
sidekiq (>= 2.4.0)
|
||||
rspec-support (3.7.1)
|
||||
rubocop (0.52.1)
|
||||
rubocop (0.55.0)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.4.0.2, < 3.0)
|
||||
parser (>= 2.5)
|
||||
powerpack (~> 0.1)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (~> 1.0, >= 1.0.1)
|
||||
ruby-oembed (0.12.0)
|
||||
ruby-progressbar (1.9.0)
|
||||
ruby-saml (1.7.2)
|
||||
nokogiri (>= 1.5.10)
|
||||
|
@ -520,14 +526,14 @@ GEM
|
|||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.4.4)
|
||||
nokogumbo (~> 1.4)
|
||||
sass (3.5.5)
|
||||
sass (3.5.6)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
scss_lint (0.56.0)
|
||||
scss_lint (0.57.0)
|
||||
rake (>= 0.9, < 13)
|
||||
sass (~> 3.5.3)
|
||||
sass (~> 3.5.5)
|
||||
sidekiq (5.1.3)
|
||||
concurrent-ruby (~> 1.0)
|
||||
connection_pool (~> 2.2, >= 2.2.0)
|
||||
|
@ -549,8 +555,8 @@ GEM
|
|||
simple_form (4.0.0)
|
||||
actionpack (> 4)
|
||||
activemodel (> 4)
|
||||
simplecov (0.15.1)
|
||||
docile (~> 1.1.0)
|
||||
simplecov (0.16.1)
|
||||
docile (~> 1.1)
|
||||
json (>= 1.8, < 3)
|
||||
simplecov-html (~> 0.10.0)
|
||||
simplecov-html (0.10.2)
|
||||
|
@ -564,6 +570,7 @@ GEM
|
|||
sshkit (1.16.0)
|
||||
net-scp (>= 1.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
stackprof (0.2.11)
|
||||
statsd-ruby (1.2.1)
|
||||
stoplight (2.1.3)
|
||||
streamio-ffmpeg (3.0.2)
|
||||
|
@ -582,10 +589,10 @@ GEM
|
|||
timers (4.1.2)
|
||||
hitimes
|
||||
tty-color (0.4.2)
|
||||
tty-command (0.7.0)
|
||||
tty-command (0.8.0)
|
||||
pastel (~> 0.7.0)
|
||||
tty-cursor (0.5.0)
|
||||
tty-prompt (0.15.0)
|
||||
tty-prompt (0.16.0)
|
||||
necromancer (~> 0.4.0)
|
||||
pastel (~> 0.7.0)
|
||||
timers (~> 4.0)
|
||||
|
@ -605,7 +612,7 @@ GEM
|
|||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.5)
|
||||
unicode-display_width (1.3.0)
|
||||
unicode-display_width (1.3.2)
|
||||
uniform_notifier (1.11.0)
|
||||
warden (1.2.7)
|
||||
rack (>= 1.0)
|
||||
|
@ -635,7 +642,7 @@ DEPENDENCIES
|
|||
active_record_query_trace (~> 1.5)
|
||||
addressable (~> 2.5)
|
||||
annotate (~> 2.7)
|
||||
aws-sdk-s3 (~> 1.8)
|
||||
aws-sdk-s3 (~> 1.9)
|
||||
better_errors (~> 2.4)
|
||||
binding_of_caller (~> 0.7)
|
||||
bootsnap (~> 1.3)
|
||||
|
@ -652,17 +659,18 @@ DEPENDENCIES
|
|||
chewy (~> 5.0)
|
||||
cld3 (~> 3.2.0)
|
||||
climate_control (~> 0.2)
|
||||
derailed_benchmarks
|
||||
devise (~> 4.4)
|
||||
devise-two-factor (~> 3.0)!
|
||||
devise-two-factor (~> 3.0)
|
||||
devise_pam_authenticatable2 (~> 9.1)
|
||||
doorkeeper (~> 4.3)
|
||||
dotenv-rails (~> 2.2)
|
||||
dotenv-rails (~> 2.2, < 2.3)
|
||||
fabrication (~> 2.20)
|
||||
faker (~> 1.8)
|
||||
fast_blank (~> 1.0)
|
||||
fastimage
|
||||
fog-core (~> 1.45)
|
||||
fog-local (~> 0.4)
|
||||
fog-local (~> 0.5)
|
||||
fog-openstack (~> 0.1)
|
||||
fuubar (~> 2.2)
|
||||
goldfinger (~> 2.1)
|
||||
|
@ -670,18 +678,18 @@ DEPENDENCIES
|
|||
hiredis (~> 0.6)
|
||||
html2text
|
||||
htmlentities (~> 4.3)
|
||||
http (~> 3.0)
|
||||
http (~> 3.2)
|
||||
http_accept_language (~> 2.1)
|
||||
httplog (~> 1.0)
|
||||
i18n-tasks (~> 0.9)
|
||||
idn-ruby
|
||||
iso-639
|
||||
json-ld-preloaded (~> 2.2)
|
||||
json-ld (~> 2.2)
|
||||
kaminari (~> 1.1)
|
||||
letter_opener (~> 1.4)
|
||||
letter_opener_web (~> 1.3)
|
||||
link_header (~> 0.0)
|
||||
lograge (~> 0.9)
|
||||
lograge (~> 0.10)
|
||||
mario-redis-lock (~> 1.2)
|
||||
memory_profiler
|
||||
microformats (~> 4.0)
|
||||
|
@ -689,21 +697,22 @@ DEPENDENCIES
|
|||
net-ldap (~> 0.10)
|
||||
nokogiri (~> 1.8)
|
||||
nsa (~> 0.2)
|
||||
oj (~> 3.4)
|
||||
oj (~> 3.5)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-cas (~> 1.1)
|
||||
omniauth-saml (~> 1.10)
|
||||
ostatus2 (~> 2.0)
|
||||
ox (~> 2.8)
|
||||
ox (~> 2.9)
|
||||
paperclip (~> 6.0)
|
||||
paperclip-av-transcoder (~> 0.6)
|
||||
parallel_tests (~> 2.21)
|
||||
pg (~> 1.0)
|
||||
pghero (~> 2.1)
|
||||
pkg-config (~> 1.2)
|
||||
pkg-config (~> 1.3)
|
||||
posix-spawn
|
||||
premailer-rails
|
||||
private_address_check (~> 0.4.1)
|
||||
pry-byebug (~> 3.6)
|
||||
pry-rails (~> 0.3)
|
||||
puma (~> 3.11)
|
||||
pundit (~> 1.1)
|
||||
|
@ -720,25 +729,26 @@ DEPENDENCIES
|
|||
redis-rails (~> 5.0)
|
||||
rqrcode (~> 0.10)
|
||||
rspec-rails (~> 3.7)
|
||||
rspec-retry (~> 0.5)
|
||||
rspec-sidekiq (~> 3.0)
|
||||
rubocop
|
||||
ruby-oembed (~> 0.12)
|
||||
rubocop (~> 0.55)
|
||||
ruby-progressbar (~> 1.4)
|
||||
sanitize (~> 4.6)
|
||||
scss_lint (~> 0.55)
|
||||
scss_lint (~> 0.57)
|
||||
sidekiq (~> 5.1)
|
||||
sidekiq-bulk (~> 0.1.1)
|
||||
sidekiq-scheduler (~> 2.2)
|
||||
sidekiq-unique-jobs (~> 5.0)
|
||||
simple-navigation (~> 4.0)
|
||||
simple_form (~> 4.0)
|
||||
simplecov (~> 0.14)
|
||||
simplecov (~> 0.16)
|
||||
sprockets-rails (~> 3.2)
|
||||
stackprof
|
||||
stoplight (~> 2.1.3)
|
||||
streamio-ffmpeg (~> 3.0)
|
||||
strong_migrations (~> 0.2)
|
||||
tty-command
|
||||
tty-prompt
|
||||
tty-command (~> 0.8)
|
||||
tty-prompt (~> 0.16)
|
||||
twitter-text (~> 1.14)
|
||||
tzinfo-data (~> 1.2018)
|
||||
webmock (~> 3.3)
|
||||
|
|
|
@ -21,6 +21,7 @@ class AccountsController < ApplicationController
|
|||
@pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
|
||||
@statuses = filtered_status_page(params)
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
unless @statuses.empty?
|
||||
@older_url = older_url if @statuses.last.id > filtered_statuses.last.id
|
||||
@newer_url = newer_url if @statuses.first.id < filtered_statuses.first.id
|
||||
|
@ -32,6 +33,11 @@ class AccountsController < ApplicationController
|
|||
render xml: OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, @entries.reject { |entry| entry.status.nil? }))
|
||||
end
|
||||
|
||||
format.rss do
|
||||
@statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status)
|
||||
render xml: RSS::AccountSerializer.render(@account, @statuses)
|
||||
end
|
||||
|
||||
format.json do
|
||||
skip_session!
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ module Admin
|
|||
def create
|
||||
authorize :status, :update?
|
||||
|
||||
@form = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account))
|
||||
@form = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account, action: action_from_button))
|
||||
flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
|
||||
|
||||
redirect_to admin_report_path(@report)
|
||||
|
@ -35,7 +35,17 @@ module Admin
|
|||
end
|
||||
|
||||
def form_status_batch_params
|
||||
params.require(:form_status_batch).permit(:action, status_ids: [])
|
||||
params.require(:form_status_batch).permit(status_ids: [])
|
||||
end
|
||||
|
||||
def action_from_button
|
||||
if params[:nsfw_on]
|
||||
'nsfw_on'
|
||||
elsif params[:nsfw_off]
|
||||
'nsfw_off'
|
||||
elsif params[:delete]
|
||||
'delete'
|
||||
end
|
||||
end
|
||||
|
||||
def set_report
|
||||
|
|
|
@ -11,9 +11,9 @@ module Admin
|
|||
|
||||
def show
|
||||
authorize @report, :show?
|
||||
|
||||
@report_note = @report.notes.new
|
||||
@report_notes = @report.notes.latest
|
||||
@report_history = @report.history
|
||||
@report_notes = (@report.notes.latest + @report.history).sort_by(&:created_at)
|
||||
@form = Form::StatusBatch.new
|
||||
end
|
||||
|
||||
|
|
|
@ -66,8 +66,10 @@ class Api::BaseController < ApplicationController
|
|||
end
|
||||
|
||||
def require_user!
|
||||
if current_user
|
||||
if current_user && !current_user.disabled?
|
||||
set_user_activity
|
||||
elsif current_user
|
||||
render json: { error: 'Your login is currently disabled' }, status: 403
|
||||
else
|
||||
render json: { error: 'This method requires an authenticated user' }, status: 422
|
||||
end
|
||||
|
|
|
@ -21,7 +21,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
|
|||
private
|
||||
|
||||
def account_params
|
||||
params.permit(:display_name, :note, :avatar, :header, :locked)
|
||||
params.permit(:display_name, :note, :avatar, :header, :locked, fields_attributes: [:name, :value])
|
||||
end
|
||||
|
||||
def user_settings_params
|
||||
|
|
|
@ -5,6 +5,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||
before_action -> { doorkeeper_authorize! :follow }, only: [:follow, :unfollow, :block, :unblock, :mute, :unmute]
|
||||
before_action :require_user!, except: [:show]
|
||||
before_action :set_account
|
||||
before_action :check_account_suspension, only: [:show]
|
||||
|
||||
respond_to :json
|
||||
|
||||
|
@ -54,4 +55,8 @@ class Api::V1::AccountsController < Api::BaseController
|
|||
def relationships(**options)
|
||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id, options)
|
||||
end
|
||||
|
||||
def check_account_suspension
|
||||
gone if @account.suspended?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ class Api::V1::StatusesController < Api::BaseController
|
|||
|
||||
def context
|
||||
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(DEFAULT_STATUSES_LIMIT, current_account)
|
||||
descendants_results = @status.descendants(current_account)
|
||||
descendants_results = @status.descendants(DEFAULT_STATUSES_LIMIT, current_account)
|
||||
loaded_ancestors = cache_collection(ancestors_results, Status)
|
||||
loaded_descendants = cache_collection(descendants_results, Status)
|
||||
|
||||
|
|
|
@ -9,9 +9,12 @@ class Api::Web::EmbedsController < Api::Web::BaseController
|
|||
status = StatusFinder.new(params[:url]).status
|
||||
render json: status, serializer: OEmbedSerializer, width: 400
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
oembed = OEmbed::Providers.get(params[:url])
|
||||
render json: Oj.dump(oembed.fields)
|
||||
rescue OEmbed::NotFound
|
||||
oembed = FetchOEmbedService.new.call(params[:url])
|
||||
|
||||
if oembed
|
||||
render json: oembed
|
||||
else
|
||||
render json: {}, status: :not_found
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -29,10 +29,14 @@ module Localized
|
|||
end
|
||||
|
||||
def preferred_locale
|
||||
http_accept_language.preferred_language_from(I18n.available_locales)
|
||||
http_accept_language.preferred_language_from(available_locales)
|
||||
end
|
||||
|
||||
def compatible_locale
|
||||
http_accept_language.compatible_language_from(I18n.available_locales)
|
||||
http_accept_language.compatible_language_from(available_locales)
|
||||
end
|
||||
|
||||
def available_locales
|
||||
I18n.available_locales.reverse
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,9 @@ class StatusesController < ApplicationController
|
|||
include SignatureAuthentication
|
||||
include Authorization
|
||||
|
||||
ANCESTORS_LIMIT = 20
|
||||
ANCESTORS_LIMIT = 40
|
||||
DESCENDANTS_LIMIT = 60
|
||||
DESCENDANTS_DEPTH_LIMIT = 20
|
||||
|
||||
layout 'public'
|
||||
|
||||
|
@ -20,9 +22,8 @@ class StatusesController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.html do
|
||||
use_pack 'public'
|
||||
@ancestors = @status.reply? ? cache_collection(@status.ancestors(ANCESTORS_LIMIT, current_account), Status) : []
|
||||
@next_ancestor = @ancestors.size < ANCESTORS_LIMIT ? nil : @ancestors.shift
|
||||
@descendants = cache_collection(@status.descendants(current_account), Status)
|
||||
set_ancestors
|
||||
set_descendants
|
||||
|
||||
render 'stream_entries/show'
|
||||
end
|
||||
|
@ -53,10 +54,77 @@ class StatusesController < ApplicationController
|
|||
|
||||
private
|
||||
|
||||
def create_descendant_thread(depth, statuses)
|
||||
if depth < DESCENDANTS_DEPTH_LIMIT
|
||||
{ statuses: statuses }
|
||||
else
|
||||
next_status = statuses.pop
|
||||
{ statuses: statuses, next_status: next_status }
|
||||
end
|
||||
end
|
||||
|
||||
def set_account
|
||||
@account = Account.find_local!(params[:account_username])
|
||||
end
|
||||
|
||||
def set_ancestors
|
||||
@ancestors = @status.reply? ? cache_collection(@status.ancestors(ANCESTORS_LIMIT, current_account), Status) : []
|
||||
@next_ancestor = @ancestors.size < ANCESTORS_LIMIT ? nil : @ancestors.shift
|
||||
end
|
||||
|
||||
def set_descendants
|
||||
@max_descendant_thread_id = params[:max_descendant_thread_id]&.to_i
|
||||
@since_descendant_thread_id = params[:since_descendant_thread_id]&.to_i
|
||||
|
||||
descendants = cache_collection(
|
||||
@status.descendants(
|
||||
DESCENDANTS_LIMIT,
|
||||
current_account,
|
||||
@max_descendant_thread_id,
|
||||
@since_descendant_thread_id,
|
||||
DESCENDANTS_DEPTH_LIMIT
|
||||
),
|
||||
Status
|
||||
)
|
||||
|
||||
@descendant_threads = []
|
||||
|
||||
if descendants.present?
|
||||
statuses = [descendants.first]
|
||||
depth = 1
|
||||
|
||||
descendants.drop(1).each_with_index do |descendant, index|
|
||||
if descendants[index].id == descendant.in_reply_to_id
|
||||
depth += 1
|
||||
statuses << descendant
|
||||
else
|
||||
@descendant_threads << create_descendant_thread(depth, statuses)
|
||||
|
||||
@descendant_threads.reverse_each do |descendant_thread|
|
||||
statuses = descendant_thread[:statuses]
|
||||
|
||||
index = statuses.find_index do |thread_status|
|
||||
thread_status.id == descendant.in_reply_to_id
|
||||
end
|
||||
|
||||
if index.present?
|
||||
depth += index - statuses.size
|
||||
break
|
||||
end
|
||||
|
||||
depth -= statuses.size
|
||||
end
|
||||
|
||||
statuses = [descendant]
|
||||
end
|
||||
end
|
||||
|
||||
@descendant_threads << create_descendant_thread(depth, statuses)
|
||||
end
|
||||
|
||||
@max_descendant_thread_id = @descendant_threads.pop[:statuses].first.id if descendants.size >= DESCENDANTS_LIMIT
|
||||
end
|
||||
|
||||
def set_link_headers
|
||||
response.headers['Link'] = LinkHeader.new(
|
||||
[
|
||||
|
|
|
@ -24,6 +24,7 @@ class StreamEntriesController < ApplicationController
|
|||
skip_session!
|
||||
expires_in 3.minutes, public: true
|
||||
end
|
||||
|
||||
render xml: OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.entry(@stream_entry, true))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class TagsController < ApplicationController
|
||||
PAGE_SIZE = 20
|
||||
|
||||
before_action :set_body_classes
|
||||
before_action :set_instance_presenter
|
||||
|
||||
|
@ -14,8 +16,15 @@ class TagsController < ApplicationController
|
|||
@initial_state_json = serializable_resource.to_json
|
||||
end
|
||||
|
||||
format.rss do
|
||||
@statuses = Status.as_tag_timeline(@tag).limit(PAGE_SIZE)
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
render xml: RSS::TagSerializer.render(@tag, @statuses)
|
||||
end
|
||||
|
||||
format.json do
|
||||
@statuses = Status.as_tag_timeline(@tag, current_account, params[:local]).paginate_by_max_id(20, params[:max_id])
|
||||
@statuses = Status.as_tag_timeline(@tag, current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
render json: collection_presenter,
|
||||
|
|
|
@ -1,4 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Admin::AccountModerationNotesHelper
|
||||
def admin_account_link_to(account)
|
||||
link_to admin_account_path(account.id), class: name_tag_classes(account) do
|
||||
safe_join([
|
||||
image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'),
|
||||
content_tag(:span, account.acct, class: 'username'),
|
||||
], ' ')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def name_tag_classes(account)
|
||||
classes = ['name-tag']
|
||||
classes << 'suspended' if account.suspended?
|
||||
classes.join(' ')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -63,4 +63,8 @@ module ApplicationHelper
|
|||
def opengraph(property, content)
|
||||
tag(:meta, content: content, property: property)
|
||||
end
|
||||
|
||||
def react_component(name, props = {})
|
||||
content_tag(:div, nil, data: { component: name.to_s.camelcase, props: Oj.dump(props) })
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,6 +5,10 @@ module JsonLdHelper
|
|||
haystack.is_a?(Array) ? haystack.include?(needle) : haystack == needle
|
||||
end
|
||||
|
||||
def equals_or_includes_any?(haystack, needles)
|
||||
needles.any? { |needle| equals_or_includes?(haystack, needle) }
|
||||
end
|
||||
|
||||
def first_of_value(value)
|
||||
value.is_a?(Array) ? value.first : value
|
||||
end
|
||||
|
@ -44,7 +48,7 @@ module JsonLdHelper
|
|||
end
|
||||
|
||||
def canonicalize(json)
|
||||
graph = RDF::Graph.new << JSON::LD::API.toRdf(json)
|
||||
graph = RDF::Graph.new << JSON::LD::API.toRdf(json, documentLoader: method(:load_jsonld_context))
|
||||
graph.dump(:normalize)
|
||||
end
|
||||
|
||||
|
@ -86,4 +90,19 @@ module JsonLdHelper
|
|||
request.add_headers('Accept' => 'application/activity+json, application/ld+json')
|
||||
request
|
||||
end
|
||||
|
||||
def load_jsonld_context(url, _options = {}, &_block)
|
||||
json = Rails.cache.fetch("jsonld:context:#{url}", expires_in: 30.days, raw: true) do
|
||||
request = Request.new(:get, url)
|
||||
request.add_headers('Accept' => 'application/ld+json')
|
||||
|
||||
request.perform do |res|
|
||||
raise JSON::LD::JsonLdError::LoadingDocumentFailed unless res.code == 200 && res.mime_type == 'application/ld+json'
|
||||
res.body_with_limit
|
||||
end
|
||||
end
|
||||
|
||||
doc = JSON::LD::API::RemoteDocument.new(url, json)
|
||||
block_given? ? yield(doc) : doc
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,12 +7,14 @@ module SettingsHelper
|
|||
bg: 'Български',
|
||||
ca: 'Català',
|
||||
de: 'Deutsch',
|
||||
el: 'Ελληνικά',
|
||||
eo: 'Esperanto',
|
||||
es: 'Español',
|
||||
eu: 'Euskara',
|
||||
fa: 'فارسی',
|
||||
gl: 'Galego',
|
||||
fi: 'Suomi',
|
||||
fr: 'Français',
|
||||
gl: 'Galego',
|
||||
he: 'עברית',
|
||||
hr: 'Hrvatski',
|
||||
hu: 'Magyar',
|
||||
|
@ -33,6 +35,7 @@ module SettingsHelper
|
|||
sr: 'Српски',
|
||||
'sr-Latn': 'Srpski (latinica)',
|
||||
sv: 'Svenska',
|
||||
te: 'తెలుగు',
|
||||
th: 'ภาษาไทย',
|
||||
tr: 'Türkçe',
|
||||
uk: 'Українська',
|
||||
|
|
|
@ -12,17 +12,17 @@ module StreamEntriesHelper
|
|||
prepend_str = [
|
||||
[
|
||||
number_to_human(account.statuses_count, strip_insignificant_zeros: true),
|
||||
t('accounts.posts'),
|
||||
I18n.t('accounts.posts'),
|
||||
].join(' '),
|
||||
|
||||
[
|
||||
number_to_human(account.following_count, strip_insignificant_zeros: true),
|
||||
t('accounts.following'),
|
||||
I18n.t('accounts.following'),
|
||||
].join(' '),
|
||||
|
||||
[
|
||||
number_to_human(account.followers_count, strip_insignificant_zeros: true),
|
||||
t('accounts.followers'),
|
||||
I18n.t('accounts.followers'),
|
||||
].join(' '),
|
||||
].join(', ')
|
||||
|
||||
|
@ -40,16 +40,16 @@ module StreamEntriesHelper
|
|||
end
|
||||
end
|
||||
|
||||
text = attachments.to_a.reject { |_, value| value.zero? }.map { |key, value| t("statuses.attached.#{key}", count: value) }.join(' · ')
|
||||
text = attachments.to_a.reject { |_, value| value.zero? }.map { |key, value| I18n.t("statuses.attached.#{key}", count: value) }.join(' · ')
|
||||
|
||||
return if text.blank?
|
||||
|
||||
t('statuses.attached.description', attached: text)
|
||||
I18n.t('statuses.attached.description', attached: text)
|
||||
end
|
||||
|
||||
def status_text_summary(status)
|
||||
return if status.spoiler_text.blank?
|
||||
t('statuses.content_warning', warning: status.spoiler_text)
|
||||
I18n.t('statuses.content_warning', warning: status.spoiler_text)
|
||||
end
|
||||
|
||||
def status_description(status)
|
||||
|
@ -113,6 +113,19 @@ module StreamEntriesHelper
|
|||
end
|
||||
end
|
||||
|
||||
def fa_visibility_icon(status)
|
||||
case status.visibility
|
||||
when 'public'
|
||||
fa_icon 'globe fw'
|
||||
when 'unlisted'
|
||||
fa_icon 'unlock-alt fw'
|
||||
when 'private'
|
||||
fa_icon 'lock fw'
|
||||
when 'direct'
|
||||
fa_icon 'envelope fw'
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def simplified_text(text)
|
||||
|
|
|
@ -26,6 +26,7 @@ delegate(document, batchCheckboxClassName, 'change', () => {
|
|||
const checkAllElement = document.querySelector('#batch_checkbox_all');
|
||||
if (checkAllElement) {
|
||||
checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
|
||||
checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import { throttle } from 'lodash';
|
|||
import { search as emojiSearch } from '../features/emoji/emoji_mart_search_light';
|
||||
import { tagHistory } from '../settings';
|
||||
import { useEmoji } from './emojis';
|
||||
import resizeImage from '../utils/resize_image';
|
||||
import { importFetchedAccounts } from './importer';
|
||||
import { updateTimeline } from './timelines';
|
||||
import { showAlertForError } from './alerts';
|
||||
|
@ -182,18 +183,14 @@ export function uploadCompose(files) {
|
|||
|
||||
dispatch(uploadComposeRequest());
|
||||
|
||||
let data = new FormData();
|
||||
data.append('file', files[0]);
|
||||
resizeImage(files[0]).then(file => {
|
||||
const data = new FormData();
|
||||
data.append('file', file);
|
||||
|
||||
api(getState).post('/api/v1/media', data, {
|
||||
onUploadProgress: function (e) {
|
||||
dispatch(uploadComposeProgress(e.loaded, e.total));
|
||||
},
|
||||
}).then(function (response) {
|
||||
dispatch(uploadComposeSuccess(response.data));
|
||||
}).catch(function (error) {
|
||||
dispatch(uploadComposeFail(error));
|
||||
});
|
||||
return api(getState).post('/api/v1/media', data, {
|
||||
onUploadProgress: ({ loaded, total }) => dispatch(uploadComposeProgress(loaded, total)),
|
||||
}).then(({ data }) => dispatch(uploadComposeSuccess(data)));
|
||||
}).catch(error => dispatch(uploadComposeFail(error)));
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import api from '../../api';
|
||||
import { decode as decodeBase64 } from '../../utils/base64';
|
||||
import { pushNotificationsSetting } from '../../settings';
|
||||
import { setBrowserSupport, setSubscription, clearSubscription } from './setter';
|
||||
import { me } from '../../initial_state';
|
||||
|
@ -10,13 +11,7 @@ const urlBase64ToUint8Array = (base64String) => {
|
|||
.replace(/\-/g, '+')
|
||||
.replace(/_/g, '/');
|
||||
|
||||
const rawData = window.atob(base64);
|
||||
const outputArray = new Uint8Array(rawData.length);
|
||||
|
||||
for (let i = 0; i < rawData.length; ++i) {
|
||||
outputArray[i] = rawData.charCodeAt(i);
|
||||
}
|
||||
return outputArray;
|
||||
return decodeBase64(base64);
|
||||
};
|
||||
|
||||
const getApplicationServerKey = () => document.querySelector('[name="applicationServerKey"]').getAttribute('content');
|
||||
|
|
|
@ -5,6 +5,7 @@ import includes from 'array-includes';
|
|||
import assign from 'object-assign';
|
||||
import values from 'object.values';
|
||||
import isNaN from 'is-nan';
|
||||
import { decode as decodeBase64 } from './utils/base64';
|
||||
|
||||
if (!Array.prototype.includes) {
|
||||
includes.shim();
|
||||
|
@ -21,3 +22,23 @@ if (!Object.values) {
|
|||
if (!Number.isNaN) {
|
||||
Number.isNaN = isNaN;
|
||||
}
|
||||
|
||||
if (!HTMLCanvasElement.prototype.toBlob) {
|
||||
const BASE64_MARKER = ';base64,';
|
||||
|
||||
Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
|
||||
value(callback, type = 'image/png', quality) {
|
||||
const dataURL = this.toDataURL(type, quality);
|
||||
let data;
|
||||
|
||||
if (dataURL.indexOf(BASE64_MARKER) >= 0) {
|
||||
const [, base64] = dataURL.split(BASE64_MARKER);
|
||||
data = decodeBase64(base64);
|
||||
} else {
|
||||
[, data] = dataURL.split(',');
|
||||
}
|
||||
|
||||
callback(new Blob([data], { type }));
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
|
@ -84,9 +84,17 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
|
|||
return;
|
||||
}
|
||||
|
||||
if (e.which === 229 || e.isComposing) {
|
||||
// Ignore key events during text composition
|
||||
// e.key may be a name of the physical key even in this case (e.x. Safari / Chrome on Mac)
|
||||
return;
|
||||
}
|
||||
|
||||
switch(e.key) {
|
||||
case 'Escape':
|
||||
if (!suggestionsHidden) {
|
||||
if (suggestions.size === 0 || suggestionsHidden) {
|
||||
document.querySelector('.ui').parentElement.focus();
|
||||
} else {
|
||||
e.preventDefault();
|
||||
this.setState({ suggestionsHidden: true });
|
||||
}
|
||||
|
@ -125,16 +133,6 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
|
|||
this.props.onKeyDown(e);
|
||||
}
|
||||
|
||||
onKeyUp = e => {
|
||||
if (e.key === 'Escape' && this.state.suggestionsHidden) {
|
||||
document.querySelector('.ui').parentElement.focus();
|
||||
}
|
||||
|
||||
if (this.props.onKeyUp) {
|
||||
this.props.onKeyUp(e);
|
||||
}
|
||||
}
|
||||
|
||||
onBlur = () => {
|
||||
this.setState({ suggestionsHidden: true });
|
||||
}
|
||||
|
@ -186,7 +184,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { value, suggestions, disabled, placeholder, autoFocus } = this.props;
|
||||
const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus } = this.props;
|
||||
const { suggestionsHidden } = this.state;
|
||||
const style = { direction: 'ltr' };
|
||||
|
||||
|
@ -208,7 +206,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
|
|||
value={value}
|
||||
onChange={this.onChange}
|
||||
onKeyDown={this.onKeyDown}
|
||||
onKeyUp={this.onKeyUp}
|
||||
onKeyUp={onKeyUp}
|
||||
onBlur={this.onBlur}
|
||||
onPaste={this.onPaste}
|
||||
style={style}
|
||||
|
|
|
@ -63,7 +63,7 @@ class DropdownMenu extends React.PureComponent {
|
|||
|
||||
if (typeof action === 'function') {
|
||||
e.preventDefault();
|
||||
action();
|
||||
action(e);
|
||||
} else if (to) {
|
||||
e.preventDefault();
|
||||
this.context.router.history.push(to);
|
||||
|
|
|
@ -20,7 +20,7 @@ const dateFormatOptions = {
|
|||
};
|
||||
|
||||
const shortDateFormatOptions = {
|
||||
month: 'numeric',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
};
|
||||
|
||||
|
@ -66,12 +66,17 @@ export default class RelativeTimestamp extends React.Component {
|
|||
static propTypes = {
|
||||
intl: PropTypes.object.isRequired,
|
||||
timestamp: PropTypes.string.isRequired,
|
||||
year: PropTypes.number.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
now: this.props.intl.now(),
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
year: (new Date()).getFullYear(),
|
||||
};
|
||||
|
||||
shouldComponentUpdate (nextProps, nextState) {
|
||||
// As of right now the locale doesn't change without a new page load,
|
||||
// but we might as well check in case that ever changes.
|
||||
|
@ -114,7 +119,7 @@ export default class RelativeTimestamp extends React.Component {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { timestamp, intl } = this.props;
|
||||
const { timestamp, intl, year } = this.props;
|
||||
|
||||
const date = new Date(timestamp);
|
||||
const delta = this.state.now - date.getTime();
|
||||
|
@ -123,7 +128,7 @@ export default class RelativeTimestamp extends React.Component {
|
|||
|
||||
if (delta < 10 * SECOND) {
|
||||
relativeTime = intl.formatMessage(messages.just_now);
|
||||
} else if (delta < 3 * DAY) {
|
||||
} else if (delta < 7 * DAY) {
|
||||
if (delta < MINUTE) {
|
||||
relativeTime = intl.formatMessage(messages.seconds, { number: Math.floor(delta / SECOND) });
|
||||
} else if (delta < HOUR) {
|
||||
|
@ -133,8 +138,10 @@ export default class RelativeTimestamp extends React.Component {
|
|||
} else {
|
||||
relativeTime = intl.formatMessage(messages.days, { number: Math.floor(delta / DAY) });
|
||||
}
|
||||
} else {
|
||||
} else if (date.getFullYear() === year) {
|
||||
relativeTime = intl.formatDate(date, shortDateFormatOptions);
|
||||
} else {
|
||||
relativeTime = intl.formatDate(date, { ...shortDateFormatOptions, year: 'numeric' });
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -35,6 +35,7 @@ export default class ScrollableList extends PureComponent {
|
|||
|
||||
state = {
|
||||
fullscreen: null,
|
||||
mouseOver: false,
|
||||
};
|
||||
|
||||
intersectionObserverWrapper = new IntersectionObserverWrapper();
|
||||
|
@ -71,7 +72,7 @@ export default class ScrollableList extends PureComponent {
|
|||
const someItemInserted = React.Children.count(prevProps.children) > 0 &&
|
||||
React.Children.count(prevProps.children) < React.Children.count(this.props.children) &&
|
||||
this.getFirstChildKey(prevProps) !== this.getFirstChildKey(this.props);
|
||||
if (someItemInserted && this.node.scrollTop > 0) {
|
||||
if (someItemInserted && this.node.scrollTop > 0 || this.state.mouseOver) {
|
||||
return this.node.scrollHeight - this.node.scrollTop;
|
||||
} else {
|
||||
return null;
|
||||
|
@ -139,6 +140,14 @@ export default class ScrollableList extends PureComponent {
|
|||
this.props.onLoadMore();
|
||||
}
|
||||
|
||||
handleMouseEnter = () => {
|
||||
this.setState({ mouseOver: true });
|
||||
}
|
||||
|
||||
handleMouseLeave = () => {
|
||||
this.setState({ mouseOver: false });
|
||||
}
|
||||
|
||||
render () {
|
||||
const { children, scrollKey, trackScroll, shouldUpdateScroll, isLoading, hasMore, prepend, emptyMessage, onLoadMore } = this.props;
|
||||
const { fullscreen } = this.state;
|
||||
|
@ -149,7 +158,7 @@ export default class ScrollableList extends PureComponent {
|
|||
|
||||
if (isLoading || childrenCount > 0 || !emptyMessage) {
|
||||
scrollableArea = (
|
||||
<div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>
|
||||
<div className={classNames('scrollable', { fullscreen })} ref={this.setRef} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<div role='feed' className='item-list'>
|
||||
{prepend}
|
||||
|
||||
|
|
|
@ -114,12 +114,12 @@ export default class Status extends ImmutablePureComponent {
|
|||
this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`);
|
||||
}
|
||||
|
||||
handleHotkeyMoveUp = () => {
|
||||
this.props.onMoveUp(this.props.status.get('id'));
|
||||
handleHotkeyMoveUp = e => {
|
||||
this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured'));
|
||||
}
|
||||
|
||||
handleHotkeyMoveDown = () => {
|
||||
this.props.onMoveDown(this.props.status.get('id'));
|
||||
handleHotkeyMoveDown = e => {
|
||||
this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured'));
|
||||
}
|
||||
|
||||
handleHotkeyToggleHidden = () => {
|
||||
|
@ -233,7 +233,7 @@ export default class Status extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<HotKeys handlers={handlers}>
|
||||
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0}>
|
||||
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null}>
|
||||
{prepend}
|
||||
|
||||
<div className={classNames('status', `status-${status.get('visibility')}`, { muted: this.props.muted })} data-id={status.get('id')}>
|
||||
|
|
|
@ -153,7 +153,9 @@ export default class StatusActionBar extends ImmutablePureComponent {
|
|||
if (publicStatus) {
|
||||
menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });
|
||||
} else {
|
||||
menu.push({ text: intl.formatMessage(status.get('reblog') ? messages.reblog_private : messages.cancel_reblog_private), action: this.handleReblogClick });
|
||||
if (status.get('visibility') === 'private') {
|
||||
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });
|
||||
}
|
||||
}
|
||||
|
||||
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
|
||||
|
|
|
@ -30,13 +30,25 @@ export default class StatusList extends ImmutablePureComponent {
|
|||
trackScroll: true,
|
||||
};
|
||||
|
||||
handleMoveUp = id => {
|
||||
const elementIndex = this.props.statusIds.indexOf(id) - 1;
|
||||
getFeaturedStatusCount = () => {
|
||||
return this.props.featuredStatusIds ? this.props.featuredStatusIds.size : 0;
|
||||
}
|
||||
|
||||
getCurrentStatusIndex = (id, featured) => {
|
||||
if (featured) {
|
||||
return this.props.featuredStatusIds.indexOf(id);
|
||||
} else {
|
||||
return this.props.statusIds.indexOf(id) + this.getFeaturedStatusCount();
|
||||
}
|
||||
}
|
||||
|
||||
handleMoveUp = (id, featured) => {
|
||||
const elementIndex = this.getCurrentStatusIndex(id, featured) - 1;
|
||||
this._selectChild(elementIndex);
|
||||
}
|
||||
|
||||
handleMoveDown = id => {
|
||||
const elementIndex = this.props.statusIds.indexOf(id) + 1;
|
||||
handleMoveDown = (id, featured) => {
|
||||
const elementIndex = this.getCurrentStatusIndex(id, featured) + 1;
|
||||
this._selectChild(elementIndex);
|
||||
}
|
||||
|
||||
|
|
|
@ -162,12 +162,12 @@ class EmojiPickerMenu extends React.PureComponent {
|
|||
static defaultProps = {
|
||||
style: {},
|
||||
loading: true,
|
||||
placement: 'bottom',
|
||||
frequentlyUsedEmojis: [],
|
||||
};
|
||||
|
||||
state = {
|
||||
modifierOpen: false,
|
||||
placement: null,
|
||||
};
|
||||
|
||||
handleDocumentClick = e => {
|
||||
|
@ -298,7 +298,7 @@ export default class EmojiPickerDropdown extends React.PureComponent {
|
|||
this.dropdown = c;
|
||||
}
|
||||
|
||||
onShowDropdown = () => {
|
||||
onShowDropdown = ({ target }) => {
|
||||
this.setState({ active: true });
|
||||
|
||||
if (!EmojiPicker) {
|
||||
|
@ -313,6 +313,9 @@ export default class EmojiPickerDropdown extends React.PureComponent {
|
|||
this.setState({ loading: false });
|
||||
});
|
||||
}
|
||||
|
||||
const { top } = target.getBoundingClientRect();
|
||||
this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
|
||||
}
|
||||
|
||||
onHideDropdown = () => {
|
||||
|
@ -324,7 +327,7 @@ export default class EmojiPickerDropdown extends React.PureComponent {
|
|||
if (this.state.active) {
|
||||
this.onHideDropdown();
|
||||
} else {
|
||||
this.onShowDropdown();
|
||||
this.onShowDropdown(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -346,7 +349,7 @@ export default class EmojiPickerDropdown extends React.PureComponent {
|
|||
render () {
|
||||
const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props;
|
||||
const title = intl.formatMessage(messages.emoji);
|
||||
const { active, loading } = this.state;
|
||||
const { active, loading, placement } = this.state;
|
||||
|
||||
return (
|
||||
<div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>
|
||||
|
@ -358,7 +361,7 @@ export default class EmojiPickerDropdown extends React.PureComponent {
|
|||
/>
|
||||
</div>
|
||||
|
||||
<Overlay show={active} placement='bottom' target={this.findTarget}>
|
||||
<Overlay show={active} placement={placement} target={this.findTarget}>
|
||||
<EmojiPickerMenu
|
||||
custom_emojis={this.props.custom_emojis}
|
||||
loading={loading}
|
||||
|
|
|
@ -51,7 +51,7 @@ export default class ReplyIndicator extends ImmutablePureComponent {
|
|||
return (
|
||||
<div className='reply-indicator'>
|
||||
<div className='reply-indicator__header'>
|
||||
<div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} /></div>
|
||||
<div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} inverted /></div>
|
||||
|
||||
<a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='reply-indicator__display-name'>
|
||||
<div className='reply-indicator__display-avatar'><Avatar account={status.get('account')} size={24} /></div>
|
||||
|
|
|
@ -123,7 +123,9 @@ export default class ActionBar extends React.PureComponent {
|
|||
if (publicStatus) {
|
||||
menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });
|
||||
} else {
|
||||
menu.push({ text: intl.formatMessage(status.get('reblog') ? messages.reblog_private : messages.cancel_reblog_private), action: this.handleReblogClick });
|
||||
if (status.get('visibility') === 'private') {
|
||||
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });
|
||||
}
|
||||
}
|
||||
|
||||
menu.push(null);
|
||||
|
|
|
@ -12,12 +12,13 @@ function importExtraPolyfills() {
|
|||
|
||||
function loadPolyfills() {
|
||||
const needsBasePolyfills = !(
|
||||
Array.prototype.includes &&
|
||||
HTMLCanvasElement.prototype.toBlob &&
|
||||
window.Intl &&
|
||||
Number.isNaN &&
|
||||
Object.assign &&
|
||||
Object.values &&
|
||||
Number.isNaN &&
|
||||
window.Symbol &&
|
||||
Array.prototype.includes
|
||||
window.Symbol
|
||||
);
|
||||
|
||||
// Latest version of Firefox and Safari do not have IntersectionObserver.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"account.block": "حظر @{name}",
|
||||
"account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}",
|
||||
"account.blocked": "محظور",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.direct": "رسالة خاصة إلى @{name}",
|
||||
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
|
||||
"account.domain_blocked": "النطاق مخفي",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "كتم إخطارات @{name}",
|
||||
"account.muted": "مكتوم",
|
||||
"account.posts": "التبويقات",
|
||||
"account.posts_with_replies": "تبويقات تحتوي على رُدود",
|
||||
"account.posts_with_replies": "التبويقات و الردود",
|
||||
"account.report": "أبلغ عن @{name}",
|
||||
"account.requested": "في انتظار الموافقة",
|
||||
"account.share": "مشاركة @{name}'s profile",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "إلغاء الكتم عن @{name}",
|
||||
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
|
||||
"account.view_full_profile": "عرض الملف الشخصي كاملا",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
|
||||
"alert.unexpected.title": "المعذرة !",
|
||||
"boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة",
|
||||
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
|
||||
"bundle_column_error.retry": "إعادة المحاولة",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "إعادة المحاولة",
|
||||
"column.blocks": "الحسابات المحجوبة",
|
||||
"column.community": "الخيط العام المحلي",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "الرسائل المباشرة",
|
||||
"column.domain_blocks": "النطاقات المخفية",
|
||||
"column.favourites": "المفضلة",
|
||||
"column.follow_requests": "طلبات المتابعة",
|
||||
"column.home": "الرئيسية",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "فك التدبيس",
|
||||
"column_subheading.navigation": "التصفح",
|
||||
"column_subheading.settings": "الإعدادات",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "لن يَظهر هذا التبويق إلا للمستخدمين المذكورين.",
|
||||
"compose_form.hashtag_warning": "هذا التبويق لن يُدرَج تحت أي وسم كان بما أنه غير مُدرَج. لا يُسمح بالبحث إلّا عن التبويقات العمومية عن طريق الوسوم.",
|
||||
"compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.",
|
||||
"compose_form.lock_disclaimer.lock": "مقفل",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "رموز",
|
||||
"emoji_button.travel": "أماكن و أسفار",
|
||||
"empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
|
||||
"empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
|
||||
"empty_column.home": "إنك لا تتبع بعد أي شخص إلى حد الآن. زر {public} أو استخدام حقل البحث لكي تبدأ على التعرف على مستخدمين آخرين.",
|
||||
"empty_column.home.public_timeline": "الخيط العام",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "لذِكر الناشر",
|
||||
"keyboard_shortcuts.reply": "للردّ",
|
||||
"keyboard_shortcuts.search": "للتركيز على البحث",
|
||||
"keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير",
|
||||
"keyboard_shortcuts.toot": "لتحرير تبويق جديد",
|
||||
"keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث",
|
||||
"keyboard_shortcuts.up": "للإنتقال إلى أعلى القائمة",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
|
||||
"navigation_bar.blocks": "الحسابات المحجوبة",
|
||||
"navigation_bar.community_timeline": "الخيط العام المحلي",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "الرسائل المباشِرة",
|
||||
"navigation_bar.domain_blocks": "النطاقات المخفية",
|
||||
"navigation_bar.edit_profile": "تعديل الملف الشخصي",
|
||||
"navigation_bar.favourites": "المفضلة",
|
||||
"navigation_bar.follow_requests": "طلبات المتابعة",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, one {result} و {results}}",
|
||||
"standalone.public_title": "نظرة على ...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "إلغاء الترقية",
|
||||
"status.cannot_reblog": "تعذرت ترقية هذا المنشور",
|
||||
"status.delete": "إحذف",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "رسالة خاصة إلى @{name}",
|
||||
"status.embed": "إدماج",
|
||||
"status.favourite": "أضف إلى المفضلة",
|
||||
"status.load_more": "حمّل المزيد",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "الرئيسية",
|
||||
"tabs_bar.local_timeline": "المحلي",
|
||||
"tabs_bar.notifications": "الإخطارات",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "البحث",
|
||||
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
||||
"upload_area.title": "إسحب ثم أفلت للرفع",
|
||||
"upload_button.label": "إضافة وسائط",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"account.block": "Bloca @{name}",
|
||||
"account.block_domain": "Amaga-ho tot de {domain}",
|
||||
"account.blocked": "Bloquejat",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.direct": "Missatge directe @{name}",
|
||||
"account.disclaimer_full": "La informació següent pot reflectir incompleta el perfil de l'usuari.",
|
||||
"account.domain_blocked": "Domini ocult",
|
||||
"account.edit_profile": "Edita el perfil",
|
||||
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Notificacions desactivades de @{name}",
|
||||
"account.muted": "Silenciat",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots amb respostes",
|
||||
"account.posts_with_replies": "Toots i respostes",
|
||||
"account.report": "Informe @{name}",
|
||||
"account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment",
|
||||
"account.share": "Comparteix el perfil de @{name}",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "Treure silenci de @{name}",
|
||||
"account.unmute_notifications": "Activar notificacions de @{name}",
|
||||
"account.view_full_profile": "Mostra el perfil complet",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "S'ha produït un error inesperat.",
|
||||
"alert.unexpected.title": "Vaja!",
|
||||
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
|
||||
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
||||
"bundle_column_error.retry": "Torna-ho a provar",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Torna-ho a provar",
|
||||
"column.blocks": "Usuaris blocats",
|
||||
"column.community": "Línia de temps local",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Missatges directes",
|
||||
"column.domain_blocks": "Dominis ocults",
|
||||
"column.favourites": "Favorits",
|
||||
"column.follow_requests": "Peticions per seguir-te",
|
||||
"column.home": "Inici",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "No fixis",
|
||||
"column_subheading.navigation": "Navegació",
|
||||
"column_subheading.settings": "Configuració",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Aquest toot només serà visible per a tots els usuaris esmentats.",
|
||||
"compose_form.hashtag_warning": "Aquest toot no es mostrarà en cap etiqueta ja que no està llistat. Només els toots públics poden ser cercats per etiqueta.",
|
||||
"compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges a seguidors.",
|
||||
"compose_form.lock_disclaimer.lock": "blocat",
|
||||
|
@ -68,7 +68,7 @@
|
|||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Mèdia marcat com a sensible",
|
||||
"compose_form.sensitive.unmarked": "Mèdia no està marcat com a sensible",
|
||||
"compose_form.spoiler.marked": "Text ocult sota l'avís",
|
||||
"compose_form.spoiler.marked": "Text es ocult sota l'avís",
|
||||
"compose_form.spoiler.unmarked": "Text no ocult",
|
||||
"compose_form.spoiler_placeholder": "Escriu l'avís aquí",
|
||||
"confirmation_modal.cancel": "Cancel·la",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Símbols",
|
||||
"emoji_button.travel": "Viatges i Llocs",
|
||||
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per fer rodar la pilota!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.",
|
||||
"empty_column.hashtag": "Encara no hi ha res amb aquesta etiqueta.",
|
||||
"empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.",
|
||||
"empty_column.home.public_timeline": "la línia de temps pública",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "per esmentar l'autor",
|
||||
"keyboard_shortcuts.reply": "respondre",
|
||||
"keyboard_shortcuts.search": "per centrar la cerca",
|
||||
"keyboard_shortcuts.toggle_hidden": "per a mostrar/amagar text sota CW",
|
||||
"keyboard_shortcuts.toot": "per a començar un toot nou de trinca",
|
||||
"keyboard_shortcuts.unfocus": "descentrar l'area de composició de text/cerca",
|
||||
"keyboard_shortcuts.up": "moure amunt en la llista",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
|
||||
"navigation_bar.blocks": "Usuaris bloquejats",
|
||||
"navigation_bar.community_timeline": "Línia de temps Local",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Missatges directes",
|
||||
"navigation_bar.domain_blocks": "Dominis ocults",
|
||||
"navigation_bar.edit_profile": "Editar perfil",
|
||||
"navigation_bar.favourites": "Favorits",
|
||||
"navigation_bar.follow_requests": "Sol·licituds de seguiment",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, un {result} altres {results}}",
|
||||
"standalone.public_title": "Una mirada a l'interior ...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Desfer l'impuls",
|
||||
"status.cannot_reblog": "Aquesta publicació no pot ser retootejada",
|
||||
"status.delete": "Esborrar",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Missatge directe @{name}",
|
||||
"status.embed": "Incrustar",
|
||||
"status.favourite": "Favorit",
|
||||
"status.load_more": "Carrega més",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Fixat en el perfil",
|
||||
"status.pinned": "Toot fixat",
|
||||
"status.reblog": "Impuls",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Impulsar a l'audiència original",
|
||||
"status.reblogged_by": "{name} ha retootejat",
|
||||
"status.reply": "Respondre",
|
||||
"status.replyAll": "Respondre al tema",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Inici",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notificacions",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Cerca",
|
||||
"ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
|
||||
"upload_area.title": "Arrossega i deixa anar per carregar",
|
||||
"upload_button.label": "Afegir multimèdia",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Benachrichtigungen von @{name} verbergen",
|
||||
"account.muted": "Stummgeschaltet",
|
||||
"account.posts": "Beiträge",
|
||||
"account.posts_with_replies": "Beiträge mit Antworten",
|
||||
"account.posts_with_replies": "Beiträge und Antworten",
|
||||
"account.report": "@{name} melden",
|
||||
"account.requested": "Warte auf Erlaubnis. Klicke zum Abbrechen",
|
||||
"account.share": "Profil von @{name} teilen",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "@{name} nicht mehr stummschalten",
|
||||
"account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
|
||||
"account.view_full_profile": "Vollständiges Profil anzeigen",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
|
||||
"alert.unexpected.title": "Hoppla!",
|
||||
"boost_modal.combo": "Du kannst {combo} drücken, um dies beim nächsten Mal zu überspringen",
|
||||
"bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
|
||||
"bundle_column_error.retry": "Erneut versuchen",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Erneut versuchen",
|
||||
"column.blocks": "Blockierte Profile",
|
||||
"column.community": "Lokale Zeitleiste",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Direktnachrichten",
|
||||
"column.domain_blocks": "Versteckte Domains",
|
||||
"column.favourites": "Favoriten",
|
||||
"column.follow_requests": "Folgeanfragen",
|
||||
"column.home": "Startseite",
|
||||
|
@ -59,17 +59,17 @@
|
|||
"column_header.unpin": "Lösen",
|
||||
"column_subheading.navigation": "Navigation",
|
||||
"column_subheading.settings": "Einstellungen",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.",
|
||||
"compose_form.hashtag_warning": "Dieser Beitrag wird nicht unter einen dieser Hashtags sichtbar sein, solange er ungelistet ist. Bei einer Suche kann er nicht gefunden werden.",
|
||||
"compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
|
||||
"compose_form.lock_disclaimer.lock": "gesperrt",
|
||||
"compose_form.placeholder": "Worüber möchtest du schreiben?",
|
||||
"compose_form.publish": "Tröt",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.sensitive.marked": "Medien sind als heikel markiert",
|
||||
"compose_form.sensitive.unmarked": "Medien sind nicht als heikel markiert",
|
||||
"compose_form.spoiler.marked": "Text ist hinter einer Warnung versteckt",
|
||||
"compose_form.spoiler.unmarked": "Text ist nicht versteckt",
|
||||
"compose_form.spoiler_placeholder": "Inhaltswarnung",
|
||||
"confirmation_modal.cancel": "Abbrechen",
|
||||
"confirmations.block.confirm": "Blockieren",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Symbole",
|
||||
"emoji_button.travel": "Reisen und Orte",
|
||||
"empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
|
||||
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
|
||||
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
|
||||
"empty_column.home.public_timeline": "die öffentliche Zeitleiste",
|
||||
|
@ -130,11 +130,12 @@
|
|||
"keyboard_shortcuts.enter": "um den Status zu öffnen",
|
||||
"keyboard_shortcuts.favourite": "um zu favorisieren",
|
||||
"keyboard_shortcuts.heading": "Tastenkombinationen",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.hotkey": "Tastenkürzel",
|
||||
"keyboard_shortcuts.legend": "um diese Übersicht anzuzeigen",
|
||||
"keyboard_shortcuts.mention": "um Autor_in zu erwähnen",
|
||||
"keyboard_shortcuts.reply": "um zu antworten",
|
||||
"keyboard_shortcuts.search": "um die Suche zu fokussieren",
|
||||
"keyboard_shortcuts.toggle_hidden": "um den Text hinter einer Inhaltswarnung zu verstecken oder ihn anzuzeigen",
|
||||
"keyboard_shortcuts.toot": "um einen neuen Toot zu beginnen",
|
||||
"keyboard_shortcuts.unfocus": "um das Textfeld/die Suche nicht mehr zu fokussieren",
|
||||
"keyboard_shortcuts.up": "sich in der Liste hinauf bewegen",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
|
||||
"navigation_bar.blocks": "Blockierte Profile",
|
||||
"navigation_bar.community_timeline": "Lokale Zeitleiste",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Direktnachrichten",
|
||||
"navigation_bar.domain_blocks": "Versteckte Domains",
|
||||
"navigation_bar.edit_profile": "Profil bearbeiten",
|
||||
"navigation_bar.favourites": "Favoriten",
|
||||
"navigation_bar.follow_requests": "Folgeanfragen",
|
||||
|
@ -190,8 +191,8 @@
|
|||
"onboarding.page_four.home": "Die Startseite zeigt dir Beiträge von Leuten, denen du folgst.",
|
||||
"onboarding.page_four.notifications": "Wenn jemand mit dir interagiert, bekommst du eine Mitteilung.",
|
||||
"onboarding.page_one.federation": "Mastodon ist ein soziales Netzwerk, das aus unabhängigen Servern besteht. Diese Server nennen wir auch Instanzen.",
|
||||
"onboarding.page_one.full_handle": "Your full handle",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.full_handle": "Dein vollständiger Benutzername",
|
||||
"onboarding.page_one.handle_hint": "Das ist das, was du deinen Freunden sagst, um nach dir zu suchen.",
|
||||
"onboarding.page_one.welcome": "Willkommen bei Mastodon!",
|
||||
"onboarding.page_six.admin": "Für deine Instanz ist {admin} zuständig.",
|
||||
"onboarding.page_six.almost_done": "Fast fertig …",
|
||||
|
@ -214,50 +215,50 @@
|
|||
"privacy.public.short": "Öffentlich",
|
||||
"privacy.unlisted.long": "Nicht in öffentlichen Zeitleisten anzeigen",
|
||||
"privacy.unlisted.short": "Nicht gelistet",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"regeneration_indicator.label": "Laden…",
|
||||
"regeneration_indicator.sublabel": "Deine Heimzeitleiste wird gerade vorbereitet!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.just_now": "jetzt",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Abbrechen",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "An {target} weiterleiten",
|
||||
"report.forward_hint": "Dieses Konto ist von einem anderen Server. Soll eine anonymisierte Kopie des Berichts auch dorthin geschickt werden?",
|
||||
"report.hint": "Der Bericht wird an die Moderatoren deiner Instanz geschickt. Du kannst hier eine Erklärung angeben, warum du dieses Konto meldest:",
|
||||
"report.placeholder": "Zusätzliche Kommentare",
|
||||
"report.submit": "Absenden",
|
||||
"report.target": "{target} melden",
|
||||
"search.placeholder": "Suche",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.search_format": "Fortgeschrittenes Suchformat",
|
||||
"search_popout.tips.full_text": "Simpler Text gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, als auch passende Nutzernamen, Anzeigenamen oder Hashtags.",
|
||||
"search_popout.tips.hashtag": "Hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_popout.tips.text": "Einfacher Text gibt Anzeigenamen, Benutzernamen und Hashtags zurück",
|
||||
"search_popout.tips.user": "Nutzer",
|
||||
"search_results.accounts": "Personen",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.statuses": "Beiträge",
|
||||
"search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}",
|
||||
"standalone.public_title": "Ein kleiner Einblick …",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Nicht mehr teilen",
|
||||
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
|
||||
"status.delete": "Löschen",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Direktnachricht @{name}",
|
||||
"status.embed": "Einbetten",
|
||||
"status.favourite": "Favorisieren",
|
||||
"status.load_more": "Weitere laden",
|
||||
"status.media_hidden": "Medien versteckt",
|
||||
"status.mention": "@{name} erwähnen",
|
||||
"status.more": "Mehr",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute": "@{name} stummschalten",
|
||||
"status.mute_conversation": "Thread stummschalten",
|
||||
"status.open": "Diesen Beitrag öffnen",
|
||||
"status.pin": "Im Profil anheften",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Angehefteter Beitrag",
|
||||
"status.reblog": "Teilen",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "An das eigentliche Publikum teilen",
|
||||
"status.reblogged_by": "{name} teilte",
|
||||
"status.reply": "Antworten",
|
||||
"status.replyAll": "Auf Thread antworten",
|
||||
|
@ -266,21 +267,21 @@
|
|||
"status.sensitive_warning": "Heikle Inhalte",
|
||||
"status.share": "Teilen",
|
||||
"status.show_less": "Weniger anzeigen",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_less_all": "Zeige weniger für alles",
|
||||
"status.show_more": "Mehr anzeigen",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.show_more_all": "Zeige mehr für alles",
|
||||
"status.unmute_conversation": "Stummschaltung von Thread aufheben",
|
||||
"status.unpin": "Vom Profil lösen",
|
||||
"tabs_bar.federated_timeline": "Föderation",
|
||||
"tabs_bar.home": "Startseite",
|
||||
"tabs_bar.local_timeline": "Lokal",
|
||||
"tabs_bar.notifications": "Mitteilungen",
|
||||
"tabs_bar.search": "Search",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"tabs_bar.search": "Suchen",
|
||||
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
||||
"upload_area.title": "Zum Hochladen hereinziehen",
|
||||
"upload_button.label": "Mediendatei hinzufügen",
|
||||
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Zuschneiden",
|
||||
"upload_form.undo": "Entfernen",
|
||||
"upload_progress.label": "Wird hochgeladen …",
|
||||
"video.close": "Video schließen",
|
||||
|
|
|
@ -0,0 +1,296 @@
|
|||
{
|
||||
"account.block": "Απόκλεισε τον/την @{name}",
|
||||
"account.block_domain": "Απόκρυψε τα πάντα από τον/την",
|
||||
"account.blocked": "Αποκλεισμένος/η",
|
||||
"account.direct": "Απευθείας μήνυμα προς @{name}",
|
||||
"account.disclaimer_full": "Οι παρακάτω πληροφορίες μπορει να μην αντανακλούν το προφίλ του χρήστη επαρκως.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Επεξεργάσου το προφίλ",
|
||||
"account.follow": "Ακολούθησε",
|
||||
"account.followers": "Ακόλουθοι",
|
||||
"account.follows": "Ακολουθεί",
|
||||
"account.follows_you": "Σε ακολουθεί",
|
||||
"account.hide_reblogs": "Απόκρυψη προωθήσεων από τον/την @{name}",
|
||||
"account.media": "Πολυμέσα",
|
||||
"account.mention": "Ανέφερε τον/την @{name}",
|
||||
"account.moved_to": "{name} μετακόμισε στο:",
|
||||
"account.mute": "Σώπασε τον/την @{name}",
|
||||
"account.mute_notifications": "Σώπασε τις ειδοποιήσεις από τον/την @{name}",
|
||||
"account.muted": "Αποσιωπημένος/η",
|
||||
"account.posts": "Τουτ",
|
||||
"account.posts_with_replies": "Τουτ και απαντήσεις",
|
||||
"account.report": "Ανέφερε τον/την @{name}",
|
||||
"account.requested": "Εκκρεμεί έγκριση. Κάνε κλικ για να ακυρώσεις το αίτημα ακολούθησης",
|
||||
"account.share": "Μοιράσου το προφίλ του/της @{name}",
|
||||
"account.show_reblogs": "Δείξε τις προωθήσεις του/της @{name}",
|
||||
"account.unblock": "Unblock @{name}",
|
||||
"account.unblock_domain": "Αποκάλυψε το {domain}",
|
||||
"account.unfollow": "Unfollow",
|
||||
"account.unmute": "Unmute @{name}",
|
||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"account.view_full_profile": "Δες το πλήρες προφίλ",
|
||||
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
|
||||
"alert.unexpected.title": "Εεπ!",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
|
||||
"bundle_column_error.retry": "Δοκίμασε ξανά",
|
||||
"bundle_column_error.title": "Σφάλμα δικτύου",
|
||||
"bundle_modal_error.close": "Κλείσε",
|
||||
"bundle_modal_error.message": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
|
||||
"bundle_modal_error.retry": "Δοκίμασε ξανά",
|
||||
"column.blocks": "Αποκλεισμένοι χρήστες",
|
||||
"column.community": "Τοπική ροή",
|
||||
"column.direct": "Απευθείας μηνύματα",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.favourites": "Αγαπημένα",
|
||||
"column.follow_requests": "Αιτήματα παρακολούθησης",
|
||||
"column.home": "Αρχική",
|
||||
"column.lists": "Λίστες",
|
||||
"column.mutes": "Αποσιωπημένοι χρήστες",
|
||||
"column.notifications": "Ειδοποιήσεις",
|
||||
"column.pins": "Καρφιτσωμένα τουτ",
|
||||
"column.public": "Ομοσπονδιακή ροή",
|
||||
"column_back_button.label": "Πίσω",
|
||||
"column_header.hide_settings": "Απόκρυψη ρυθμίσεων",
|
||||
"column_header.moveLeft_settings": "Μεταφορά κολώνας αριστερά",
|
||||
"column_header.moveRight_settings": "Μεταφορά κολώνας δεξιά",
|
||||
"column_header.pin": "Καρφίτσωμα",
|
||||
"column_header.show_settings": "Εμφάνιση ρυθμίσεων",
|
||||
"column_header.unpin": "Ξεκαρφίτσωμα",
|
||||
"column_subheading.navigation": "Πλοήγηση",
|
||||
"column_subheading.settings": "Ρυθμίσεις",
|
||||
"compose_form.direct_message_warning": "Αυτό το τουτ θα εμφανίζεται μόνο σε όλους τους αναφερόμενους χρήστες.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
|
||||
"compose_form.lock_disclaimer.lock": "κλειδωμένος",
|
||||
"compose_form.placeholder": "Τι σκέφτεσαι;",
|
||||
"compose_form.publish": "Τουτ",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Το πολυμέσο έχει σημειωθεί ως ευαίσθητο",
|
||||
"compose_form.sensitive.unmarked": "Το πολυμέσο δεν έχει σημειωθεί ως ευαίσθητο",
|
||||
"compose_form.spoiler.marked": "Κείμενο κρυμμένο πίσω από προειδοποίηση",
|
||||
"compose_form.spoiler.unmarked": "Κείμενο μη κρυμμένο",
|
||||
"compose_form.spoiler_placeholder": "Γράψε την προειδοποίησή σου εδώ",
|
||||
"confirmation_modal.cancel": "Άκυρο",
|
||||
"confirmations.block.confirm": "Απόκλεισε",
|
||||
"confirmations.block.message": "Σίγουρα θες να αποκλείσεις τον/την {name};",
|
||||
"confirmations.delete.confirm": "Διέγραψε",
|
||||
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την κατάσταση;",
|
||||
"confirmations.delete_list.confirm": "Διέγραψε",
|
||||
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
|
||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||
"confirmations.mute.confirm": "Mute",
|
||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"embed.preview": "Here is what it will look like:",
|
||||
"emoji_button.activity": "Activity",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.flags": "Flags",
|
||||
"emoji_button.food": "Food & Drink",
|
||||
"emoji_button.label": "Insert emoji",
|
||||
"emoji_button.nature": "Nature",
|
||||
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Objects",
|
||||
"emoji_button.people": "People",
|
||||
"emoji_button.recent": "Frequently used",
|
||||
"emoji_button.search": "Search...",
|
||||
"emoji_button.search_results": "Search results",
|
||||
"emoji_button.symbols": "Symbols",
|
||||
"emoji_button.travel": "Travel & Places",
|
||||
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.hashtag": "There is nothing in this hashtag yet.",
|
||||
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
|
||||
"empty_column.home.public_timeline": "the public timeline",
|
||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
||||
"follow_request.authorize": "Authorize",
|
||||
"follow_request.reject": "Reject",
|
||||
"getting_started.appsshort": "Apps",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Getting started",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
||||
"getting_started.userguide": "User Guide",
|
||||
"home.column_settings.advanced": "Advanced",
|
||||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.filter_regex": "Filter out by regular expressions",
|
||||
"home.column_settings.show_reblogs": "Show boosts",
|
||||
"home.column_settings.show_replies": "Show replies",
|
||||
"home.settings": "Column settings",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Description",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"loading_indicator.label": "Loading...",
|
||||
"media_gallery.toggle_visible": "Toggle visibility",
|
||||
"missing_indicator.label": "Not found",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"navigation_bar.blocks": "Blocked users",
|
||||
"navigation_bar.community_timeline": "Local timeline",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.edit_profile": "Edit profile",
|
||||
"navigation_bar.favourites": "Favourites",
|
||||
"navigation_bar.follow_requests": "Follow requests",
|
||||
"navigation_bar.info": "Extended information",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.logout": "Logout",
|
||||
"navigation_bar.mutes": "Muted users",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.preferences": "Preferences",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
"notifications.column_settings.favourite": "Favourites:",
|
||||
"notifications.column_settings.follow": "New followers:",
|
||||
"notifications.column_settings.mention": "Mentions:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.push_meta": "This device",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Show in column",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
"onboarding.done": "Done",
|
||||
"onboarding.next": "Next",
|
||||
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
|
||||
"onboarding.page_four.home": "The home timeline shows posts from people you follow.",
|
||||
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
|
||||
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
|
||||
"onboarding.page_one.full_handle": "Your full handle",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.welcome": "Welcome to Mastodon!",
|
||||
"onboarding.page_six.admin": "Your instance's admin is {admin}.",
|
||||
"onboarding.page_six.almost_done": "Almost done...",
|
||||
"onboarding.page_six.appetoot": "Bon Appetoot!",
|
||||
"onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
|
||||
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
|
||||
"onboarding.page_six.guidelines": "community guidelines",
|
||||
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
|
||||
"onboarding.page_six.various_app": "mobile apps",
|
||||
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
|
||||
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
|
||||
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
|
||||
"onboarding.skip": "Skip",
|
||||
"privacy.change": "Adjust status privacy",
|
||||
"privacy.direct.long": "Post to mentioned users only",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.private.long": "Post to followers only",
|
||||
"privacy.private.short": "Followers-only",
|
||||
"privacy.public.long": "Post to public timelines",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.long": "Do not show in public timelines",
|
||||
"privacy.unlisted.short": "Unlisted",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Cancel",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.placeholder": "Additional comments",
|
||||
"report.submit": "Submit",
|
||||
"report.target": "Report {target}",
|
||||
"search.placeholder": "Search",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
||||
"standalone.public_title": "A look inside...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "This post cannot be boosted",
|
||||
"status.delete": "Delete",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.favourite": "Favourite",
|
||||
"status.load_more": "Load more",
|
||||
"status.media_hidden": "Media hidden",
|
||||
"status.mention": "Mention @{name}",
|
||||
"status.more": "More",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute_conversation": "Mute conversation",
|
||||
"status.open": "Expand this status",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.reblog": "Boost",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblogged_by": "{name} boosted",
|
||||
"status.reply": "Reply",
|
||||
"status.replyAll": "Reply to thread",
|
||||
"status.report": "Report @{name}",
|
||||
"status.sensitive_toggle": "Click to view",
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
"tabs_bar.search": "Search",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.undo": "Undo",
|
||||
"upload_progress.label": "Uploading...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.unmute": "Unmute sound"
|
||||
}
|
|
@ -138,6 +138,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "por mencii la aŭtoron",
|
||||
"keyboard_shortcuts.reply": "por respondi",
|
||||
"keyboard_shortcuts.search": "por fokusigi la serĉilon",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "por komenci tute novan mesaĝon",
|
||||
"keyboard_shortcuts.unfocus": "por malfokusigi la tekstujon aŭ la serĉilon",
|
||||
"keyboard_shortcuts.up": "por iri supren en la listo",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "para mencionar al autor",
|
||||
"keyboard_shortcuts.reply": "para responder",
|
||||
"keyboard_shortcuts.search": "para poner el foco en la búsqueda",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "para comenzar un nuevo toot",
|
||||
"keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda",
|
||||
"keyboard_shortcuts.up": "para ir hacia arriba en la lista",
|
||||
|
|
|
@ -0,0 +1,296 @@
|
|||
{
|
||||
"account.block": "Blokeatu @{name}",
|
||||
"account.block_domain": "{domain}(e)ko guztia ezkutatu",
|
||||
"account.blocked": "Blokeatuta",
|
||||
"account.direct": "@{name}(e)ri mezu zuzena bidali",
|
||||
"account.disclaimer_full": "Baliteke beheko informazioak erabiltzailearen profilaren zati bat baino ez erakustea.",
|
||||
"account.domain_blocked": "Ezkutatutako domeinua",
|
||||
"account.edit_profile": "Profila aldatu",
|
||||
"account.follow": "Jarraitu",
|
||||
"account.followers": "Jarraitzaileak",
|
||||
"account.follows": "Jarraitzen",
|
||||
"account.follows_you": "Jarraitzen dizu",
|
||||
"account.hide_reblogs": "@{name}(e)k sustatutakoak ezkutatu",
|
||||
"account.media": "Media",
|
||||
"account.mention": "@{name} aipatu",
|
||||
"account.moved_to": "{name} hona lekualdatu da:",
|
||||
"account.mute": "@{name} isilarazi",
|
||||
"account.mute_notifications": "@{name}(e)ren jakinarazpenak isilarazi",
|
||||
"account.muted": "Isilarazita",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots and replies",
|
||||
"account.report": "@{name} salatu",
|
||||
"account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
|
||||
"account.share": "@{name}(e)ren profila elkarbanatu",
|
||||
"account.show_reblogs": "@{name}(e)k sustatutakoak erakutsi",
|
||||
"account.unblock": "@{name} desblokeatu",
|
||||
"account.unblock_domain": "Berriz erakutsi {domain}",
|
||||
"account.unfollow": "Jarraitzeari utzi",
|
||||
"account.unmute": "Unmute @{name}",
|
||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"account.view_full_profile": "View full profile",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
"bundle_column_error.title": "Network error",
|
||||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.favourites": "Favourites",
|
||||
"column.follow_requests": "Follow requests",
|
||||
"column.home": "Home",
|
||||
"column.lists": "Lists",
|
||||
"column.mutes": "Muted users",
|
||||
"column.notifications": "Notifications",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.public": "Federated timeline",
|
||||
"column_back_button.label": "Back",
|
||||
"column_header.hide_settings": "Hide settings",
|
||||
"column_header.moveLeft_settings": "Move column to the left",
|
||||
"column_header.moveRight_settings": "Move column to the right",
|
||||
"column_header.pin": "Pin",
|
||||
"column_header.show_settings": "Show settings",
|
||||
"column_header.unpin": "Unpin",
|
||||
"column_subheading.navigation": "Navigation",
|
||||
"column_subheading.settings": "Settings",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
|
||||
"compose_form.lock_disclaimer.lock": "locked",
|
||||
"compose_form.placeholder": "What is on your mind?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Write your warning here",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
"confirmations.block.message": "Are you sure you want to block {name}?",
|
||||
"confirmations.delete.confirm": "Delete",
|
||||
"confirmations.delete.message": "Are you sure you want to delete this status?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||
"confirmations.mute.confirm": "Mute",
|
||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"embed.preview": "Here is what it will look like:",
|
||||
"emoji_button.activity": "Activity",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.flags": "Flags",
|
||||
"emoji_button.food": "Food & Drink",
|
||||
"emoji_button.label": "Insert emoji",
|
||||
"emoji_button.nature": "Nature",
|
||||
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Objects",
|
||||
"emoji_button.people": "People",
|
||||
"emoji_button.recent": "Frequently used",
|
||||
"emoji_button.search": "Search...",
|
||||
"emoji_button.search_results": "Search results",
|
||||
"emoji_button.symbols": "Symbols",
|
||||
"emoji_button.travel": "Travel & Places",
|
||||
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.hashtag": "There is nothing in this hashtag yet.",
|
||||
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
|
||||
"empty_column.home.public_timeline": "the public timeline",
|
||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
||||
"follow_request.authorize": "Authorize",
|
||||
"follow_request.reject": "Reject",
|
||||
"getting_started.appsshort": "Apps",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Getting started",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
||||
"getting_started.userguide": "User Guide",
|
||||
"home.column_settings.advanced": "Advanced",
|
||||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.filter_regex": "Filter out by regular expressions",
|
||||
"home.column_settings.show_reblogs": "Show boosts",
|
||||
"home.column_settings.show_replies": "Show replies",
|
||||
"home.settings": "Column settings",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Description",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"loading_indicator.label": "Loading...",
|
||||
"media_gallery.toggle_visible": "Toggle visibility",
|
||||
"missing_indicator.label": "Not found",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"navigation_bar.blocks": "Blocked users",
|
||||
"navigation_bar.community_timeline": "Local timeline",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.edit_profile": "Edit profile",
|
||||
"navigation_bar.favourites": "Favourites",
|
||||
"navigation_bar.follow_requests": "Follow requests",
|
||||
"navigation_bar.info": "Extended information",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.logout": "Logout",
|
||||
"navigation_bar.mutes": "Muted users",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.preferences": "Preferences",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
"notifications.column_settings.favourite": "Favourites:",
|
||||
"notifications.column_settings.follow": "New followers:",
|
||||
"notifications.column_settings.mention": "Mentions:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.push_meta": "This device",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Show in column",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
"onboarding.done": "Done",
|
||||
"onboarding.next": "Next",
|
||||
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
|
||||
"onboarding.page_four.home": "The home timeline shows posts from people you follow.",
|
||||
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
|
||||
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
|
||||
"onboarding.page_one.full_handle": "Your full handle",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.welcome": "Welcome to Mastodon!",
|
||||
"onboarding.page_six.admin": "Your instance's admin is {admin}.",
|
||||
"onboarding.page_six.almost_done": "Almost done...",
|
||||
"onboarding.page_six.appetoot": "Bon Appetoot!",
|
||||
"onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
|
||||
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
|
||||
"onboarding.page_six.guidelines": "community guidelines",
|
||||
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
|
||||
"onboarding.page_six.various_app": "mobile apps",
|
||||
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
|
||||
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
|
||||
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
|
||||
"onboarding.skip": "Skip",
|
||||
"privacy.change": "Adjust status privacy",
|
||||
"privacy.direct.long": "Post to mentioned users only",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.private.long": "Post to followers only",
|
||||
"privacy.private.short": "Followers-only",
|
||||
"privacy.public.long": "Post to public timelines",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.long": "Do not show in public timelines",
|
||||
"privacy.unlisted.short": "Unlisted",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Cancel",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.placeholder": "Additional comments",
|
||||
"report.submit": "Submit",
|
||||
"report.target": "Report {target}",
|
||||
"search.placeholder": "Search",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
||||
"standalone.public_title": "A look inside...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "This post cannot be boosted",
|
||||
"status.delete": "Delete",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.favourite": "Favourite",
|
||||
"status.load_more": "Load more",
|
||||
"status.media_hidden": "Media hidden",
|
||||
"status.mention": "Mention @{name}",
|
||||
"status.more": "More",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute_conversation": "Mute conversation",
|
||||
"status.open": "Expand this status",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.reblog": "Boost",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblogged_by": "{name} boosted",
|
||||
"status.reply": "Reply",
|
||||
"status.replyAll": "Reply to thread",
|
||||
"status.report": "Report @{name}",
|
||||
"status.sensitive_toggle": "Click to view",
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
"tabs_bar.search": "Search",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.undo": "Undo",
|
||||
"upload_progress.label": "Uploading...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.unmute": "Unmute sound"
|
||||
}
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "برای نامبردن از نویسنده",
|
||||
"keyboard_shortcuts.reply": "برای پاسخدادن",
|
||||
"keyboard_shortcuts.search": "برای فعالکردن جستجو",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "برای آغاز یک بوق تازه",
|
||||
"keyboard_shortcuts.unfocus": "برای برداشتن توجه از نوشتن/جستجو",
|
||||
"keyboard_shortcuts.up": "برای بالا رفتن در فهرست",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "mainitse julkaisija",
|
||||
"keyboard_shortcuts.reply": "vastaa",
|
||||
"keyboard_shortcuts.search": "siirry hakukenttään",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "ala kirjoittaa uutta tuuttausta",
|
||||
"keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä",
|
||||
"keyboard_shortcuts.up": "siirry listassa ylöspäin",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"account.block": "Bloquer @{name}",
|
||||
"account.block_domain": "Tout masquer venant de {domain}",
|
||||
"account.blocked": "Bloqué",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.direct": "Message direct @{name}",
|
||||
"account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
|
||||
"account.domain_blocked": "Domaine caché",
|
||||
"account.edit_profile": "Modifier le profil",
|
||||
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Ignorer les notifications de @{name}",
|
||||
"account.muted": "Silencé",
|
||||
"account.posts": "Pouets",
|
||||
"account.posts_with_replies": "Pouets avec réponses",
|
||||
"account.posts_with_replies": "Pouets et réponses",
|
||||
"account.report": "Signaler",
|
||||
"account.requested": "En attente d'approbation. Cliquez pour annuler la requête",
|
||||
"account.share": "Partager le profil de @{name}",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "Ne plus masquer",
|
||||
"account.unmute_notifications": "Réactiver les notifications de @{name}",
|
||||
"account.view_full_profile": "Afficher le profil complet",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "Une erreur non-attendue s'est produite.",
|
||||
"alert.unexpected.title": "Oups !",
|
||||
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
|
||||
"bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.",
|
||||
"bundle_column_error.retry": "Réessayer",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Réessayer",
|
||||
"column.blocks": "Comptes bloqués",
|
||||
"column.community": "Fil public local",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Messages directs",
|
||||
"column.domain_blocks": "Domaines cachés",
|
||||
"column.favourites": "Favoris",
|
||||
"column.follow_requests": "Demandes de suivi",
|
||||
"column.home": "Accueil",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Retirer",
|
||||
"column_subheading.navigation": "Navigation",
|
||||
"column_subheading.settings": "Paramètres",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Ce pouet sera uniquement visible à tous les utilisateurs mentionnés.",
|
||||
"compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non-listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.",
|
||||
"compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.",
|
||||
"compose_form.lock_disclaimer.lock": "verrouillé",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Symboles",
|
||||
"emoji_button.travel": "Lieux & Voyages",
|
||||
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Vous n'avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s'affichera ici.",
|
||||
"empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.",
|
||||
"empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à d’autres personnes.",
|
||||
"empty_column.home.public_timeline": "le fil public",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "pour mentionner l'auteur",
|
||||
"keyboard_shortcuts.reply": "pour répondre",
|
||||
"keyboard_shortcuts.search": "pour cibler la recherche",
|
||||
"keyboard_shortcuts.toggle_hidden": "pour afficher/cacher un texte derrière CW",
|
||||
"keyboard_shortcuts.toot": "pour démarrer un tout nouveau pouet",
|
||||
"keyboard_shortcuts.unfocus": "pour recentrer composer textarea/search",
|
||||
"keyboard_shortcuts.up": "pour remonter dans la liste",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Masquer les notifications de cette personne ?",
|
||||
"navigation_bar.blocks": "Comptes bloqués",
|
||||
"navigation_bar.community_timeline": "Fil public local",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Messages directs",
|
||||
"navigation_bar.domain_blocks": "Domaines cachés",
|
||||
"navigation_bar.edit_profile": "Modifier le profil",
|
||||
"navigation_bar.favourites": "Favoris",
|
||||
"navigation_bar.follow_requests": "Demandes de suivi",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
|
||||
"standalone.public_title": "Un aperçu …",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Dé-booster",
|
||||
"status.cannot_reblog": "Cette publication ne peut être boostée",
|
||||
"status.delete": "Effacer",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Message direct @{name}",
|
||||
"status.embed": "Intégrer",
|
||||
"status.favourite": "Ajouter aux favoris",
|
||||
"status.load_more": "Charger plus",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Épingler sur le profil",
|
||||
"status.pinned": "Pouet épinglé",
|
||||
"status.reblog": "Partager",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Booster vers l'audience originale",
|
||||
"status.reblogged_by": "{name} a partagé :",
|
||||
"status.reply": "Répondre",
|
||||
"status.replyAll": "Répondre au fil",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Accueil",
|
||||
"tabs_bar.local_timeline": "Fil public local",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Chercher",
|
||||
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
|
||||
"upload_area.title": "Glissez et déposez pour envoyer",
|
||||
"upload_button.label": "Joindre un média",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Acalar as notificacións de @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.posts_with_replies": "Toots e respostas",
|
||||
"account.report": "Informar sobre @{name}",
|
||||
"account.requested": "Agardando aceptación. Pulse para cancelar a solicitude de seguimento",
|
||||
"account.share": "Compartir o perfil de @{name}",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "para mencionar o autor",
|
||||
"keyboard_shortcuts.reply": "para responder",
|
||||
"keyboard_shortcuts.search": "para centrar a busca",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "escribir un toot novo",
|
||||
"keyboard_shortcuts.unfocus": "quitar o foco do área de escritura/busca",
|
||||
"keyboard_shortcuts.up": "ir hacia arriba na lista",
|
||||
|
@ -242,7 +243,7 @@
|
|||
"standalone.public_title": "Ollada dentro...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "Esta mensaxe non pode ser promocionada",
|
||||
"status.cannot_reblog": "Esta mensaxe non pode ser promovida",
|
||||
"status.delete": "Eliminar",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Incrustar",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "לאזכר את המחבר(ת)",
|
||||
"keyboard_shortcuts.reply": "לענות",
|
||||
"keyboard_shortcuts.search": "להתמקד בחלון החיפוש",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "להתחיל חיצרוץ חדש",
|
||||
"keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש",
|
||||
"keyboard_shortcuts.up": "לנוע במעלה הרשימה",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "szerző megjelenítése",
|
||||
"keyboard_shortcuts.reply": "válaszolás",
|
||||
"keyboard_shortcuts.search": "kereső kiemelése",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "új tülk megkezdése",
|
||||
"keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele",
|
||||
"keyboard_shortcuts.up": "fennebb helyezés a listában",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "հեղինակին նշելու համար",
|
||||
"keyboard_shortcuts.reply": "պատասխանելու համար",
|
||||
"keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "թարմ թութ սկսելու համար",
|
||||
"keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար",
|
||||
"keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "untuk fokus mencari",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"account.block": "Blocca @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Bloccato",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
|
@ -17,8 +17,8 @@
|
|||
"account.mute": "Silenzia @{name}",
|
||||
"account.mute_notifications": "Mute notifications from @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Posts",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.posts": "Toot",
|
||||
"account.posts_with_replies": "Toot con risposte",
|
||||
"account.report": "Segnala @{name}",
|
||||
"account.requested": "In attesa di approvazione",
|
||||
"account.share": "Share @{name}'s profile",
|
||||
|
@ -105,7 +105,7 @@
|
|||
"empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.",
|
||||
"empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.",
|
||||
"empty_column.home.public_timeline": "la timeline pubblica",
|
||||
"empty_column.list": "There is nothing in this list yet.",
|
||||
"empty_column.list": "Non c'è niente in questo elenco ancora. Quando i membri di questo elenco postano nuovi stati, questi appariranno qui.",
|
||||
"empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
|
||||
"empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio.",
|
||||
"follow_request.authorize": "Autorizza",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "@{name}さんのミュートを解除",
|
||||
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
|
||||
"account.view_full_profile": "全ての情報を見る",
|
||||
"alert.unexpected.message": "不明なエラーが発生しました",
|
||||
"alert.unexpected.title": "エラー",
|
||||
"alert.unexpected.message": "不明なエラーが発生しました。",
|
||||
"alert.unexpected.title": "エラー!",
|
||||
"boost_modal.combo": "次からは{combo}を押せばスキップできます",
|
||||
"bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
|
||||
"bundle_column_error.retry": "再試行",
|
||||
|
@ -104,7 +104,7 @@
|
|||
"emoji_button.symbols": "記号",
|
||||
"emoji_button.travel": "旅行と場所",
|
||||
"empty_column.community": "ローカルタイムラインはまだ使われていません。何か書いてみましょう!",
|
||||
"empty_column.direct": "あなたはまだダイレクトメッセージを受け取っていません。あなたが送ったり受け取ったりすると、ここに表示されます。",
|
||||
"empty_column.direct": "ダイレクトメッセージはまだありません。ダイレクトメッセージをやりとりすると、ここに表示されます。",
|
||||
"empty_column.hashtag": "このハッシュタグはまだ使われていません。",
|
||||
"empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。",
|
||||
"empty_column.home.public_timeline": "連合タイムライン",
|
||||
|
@ -138,6 +138,7 @@
|
|||
"keyboard_shortcuts.mention": "メンション",
|
||||
"keyboard_shortcuts.reply": "返信",
|
||||
"keyboard_shortcuts.search": "検索欄に移動",
|
||||
"keyboard_shortcuts.toggle_hidden": "CWで隠れた文を見る/隠す",
|
||||
"keyboard_shortcuts.toot": "新規トゥート",
|
||||
"keyboard_shortcuts.unfocus": "トゥート入力欄・検索欄から離れる",
|
||||
"keyboard_shortcuts.up": "カラム内一つ上に移動",
|
||||
|
@ -159,7 +160,7 @@
|
|||
"mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?",
|
||||
"navigation_bar.blocks": "ブロックしたユーザー",
|
||||
"navigation_bar.community_timeline": "ローカルタイムライン",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.direct": "ダイレクトメッセージ",
|
||||
"navigation_bar.domain_blocks": "非表示にしたドメイン",
|
||||
"navigation_bar.edit_profile": "プロフィールを編集",
|
||||
"navigation_bar.favourites": "お気に入り",
|
||||
|
@ -245,7 +246,7 @@
|
|||
"search_results.total": "{count, number}件の結果",
|
||||
"standalone.public_title": "今こんな話をしています...",
|
||||
"status.block": "@{name}さんをブロック",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "ブースト解除",
|
||||
"status.cannot_reblog": "この投稿はブーストできません",
|
||||
"status.delete": "削除",
|
||||
"status.direct": "@{name}さんにダイレクトメッセージ",
|
||||
|
@ -261,7 +262,7 @@
|
|||
"status.pin": "プロフィールに固定表示",
|
||||
"status.pinned": "固定されたトゥート",
|
||||
"status.reblog": "ブースト",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "ブースト",
|
||||
"status.reblogged_by": "{name}さんがブースト",
|
||||
"status.reply": "返信",
|
||||
"status.replyAll": "全員に返信",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"account.block": "@{name}을 차단",
|
||||
"account.block_domain": "{domain} 전체를 숨김",
|
||||
"account.blocked": "차단 됨",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.direct": "@{name}으로부터의 다이렉트 메시지",
|
||||
"account.disclaimer_full": "여기 있는 정보는 유저의 프로파일을 정확히 반영하지 못 할 수도 있습니다.",
|
||||
"account.domain_blocked": "도메인 숨겨짐",
|
||||
"account.edit_profile": "프로필 편집",
|
||||
|
@ -12,7 +12,7 @@
|
|||
"account.follows_you": "날 팔로우합니다",
|
||||
"account.hide_reblogs": "@{name}의 부스트를 숨기기",
|
||||
"account.media": "미디어",
|
||||
"account.mention": "답장",
|
||||
"account.mention": "@{name}에게 글쓰기",
|
||||
"account.moved_to": "{name}는 계정을 이동했습니다:",
|
||||
"account.mute": "@{name} 뮤트",
|
||||
"account.mute_notifications": "@{name}의 알림을 뮤트",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "멘션",
|
||||
"keyboard_shortcuts.reply": "답장",
|
||||
"keyboard_shortcuts.search": "검색창에 포커스",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "새 툿 작성",
|
||||
"keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
|
||||
"keyboard_shortcuts.up": "리스트에서 위로 이동",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Negeer meldingen van @{name}",
|
||||
"account.muted": "Genegeerd",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots met reacties",
|
||||
"account.posts_with_replies": "Toots en reacties",
|
||||
"account.report": "Rapporteer @{name}",
|
||||
"account.requested": "Wacht op goedkeuring. Klik om het volgverzoek te annuleren",
|
||||
"account.share": "Profiel van @{name} delen",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "@{name} niet meer negeren",
|
||||
"account.unmute_notifications": "@{name} meldingen niet meer negeren",
|
||||
"account.view_full_profile": "Volledig profiel tonen",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "Er deed zich een onverwachte fout voor",
|
||||
"alert.unexpected.title": "Oeps!",
|
||||
"boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
|
||||
"bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
|
||||
"bundle_column_error.retry": "Opnieuw proberen",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Opnieuw proberen",
|
||||
"column.blocks": "Geblokkeerde gebruikers",
|
||||
"column.community": "Lokale tijdlijn",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Directe berichten",
|
||||
"column.domain_blocks": "Verborgen domeinen",
|
||||
"column.favourites": "Favorieten",
|
||||
"column.follow_requests": "Volgverzoeken",
|
||||
"column.home": "Start",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Losmaken",
|
||||
"column_subheading.navigation": "Navigatie",
|
||||
"column_subheading.settings": "Instellingen",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Deze toot zal alleen zichtbaar zijn voor alle vermelde gebruikers.",
|
||||
"compose_form.hashtag_warning": "Deze toot valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare toots kunnen via hashtags gevonden worden.",
|
||||
"compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en toots zien die je alleen aan volgers hebt gericht.",
|
||||
"compose_form.lock_disclaimer.lock": "besloten",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Symbolen",
|
||||
"emoji_button.travel": "Reizen en plekken",
|
||||
"empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.",
|
||||
"empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
|
||||
"empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.",
|
||||
"empty_column.home.public_timeline": "de globale tijdlijn",
|
||||
|
@ -127,7 +127,7 @@
|
|||
"keyboard_shortcuts.compose": "om het tekstvak voor toots te focussen",
|
||||
"keyboard_shortcuts.description": "Omschrijving",
|
||||
"keyboard_shortcuts.down": "om naar beneden door de lijst te bewegen",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.enter": "om toot volledig te tonen",
|
||||
"keyboard_shortcuts.favourite": "om als favoriet te markeren",
|
||||
"keyboard_shortcuts.heading": "Sneltoetsen",
|
||||
"keyboard_shortcuts.hotkey": "Sneltoets",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "om de auteur te vermelden",
|
||||
"keyboard_shortcuts.reply": "om te reageren",
|
||||
"keyboard_shortcuts.search": "om het zoekvak te focussen",
|
||||
"keyboard_shortcuts.toggle_hidden": "om tekst achter een waarschuwing (CW) te tonen/verbergen",
|
||||
"keyboard_shortcuts.toot": "om een nieuwe toot te starten",
|
||||
"keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen",
|
||||
"keyboard_shortcuts.up": "om omhoog te bewegen in de lijst",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Verberg meldingen van deze persoon?",
|
||||
"navigation_bar.blocks": "Geblokkeerde gebruikers",
|
||||
"navigation_bar.community_timeline": "Lokale tijdlijn",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Directe berichten",
|
||||
"navigation_bar.domain_blocks": "Verborgen domeinen",
|
||||
"navigation_bar.edit_profile": "Profiel bewerken",
|
||||
"navigation_bar.favourites": "Favorieten",
|
||||
"navigation_bar.follow_requests": "Volgverzoeken",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}",
|
||||
"standalone.public_title": "Een kijkje binnenin...",
|
||||
"status.block": "Blokkeer @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Niet meer boosten",
|
||||
"status.cannot_reblog": "Deze toot kan niet geboost worden",
|
||||
"status.delete": "Verwijderen",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Directe toot @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.favourite": "Favoriet",
|
||||
"status.load_more": "Meer laden",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Aan profielpagina vastmaken",
|
||||
"status.pinned": "Vastgemaakte toot",
|
||||
"status.reblog": "Boost",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
|
||||
"status.reblogged_by": "{name} boostte",
|
||||
"status.reply": "Reageren",
|
||||
"status.replyAll": "Reageer op iedereen",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Start",
|
||||
"tabs_bar.local_timeline": "Lokaal",
|
||||
"tabs_bar.notifications": "Meldingen",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Zoeken",
|
||||
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
|
||||
"upload_area.title": "Hierin slepen om te uploaden",
|
||||
"upload_button.label": "Media toevoegen",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "å nevne forfatter",
|
||||
"keyboard_shortcuts.reply": "for å svare",
|
||||
"keyboard_shortcuts.search": "å fokusere søk",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "å starte en helt ny tut",
|
||||
"keyboard_shortcuts.unfocus": "å ufokusere komponerings-/søkefeltet",
|
||||
"keyboard_shortcuts.up": "å flytte opp i listen",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Rescondre las notificacions de @{name}",
|
||||
"account.muted": "Mes en silenci",
|
||||
"account.posts": "Tuts",
|
||||
"account.posts_with_replies": "Tuts amb responsas",
|
||||
"account.posts_with_replies": "Tuts e responsas",
|
||||
"account.report": "Senhalar @{name}",
|
||||
"account.requested": "Invitacion mandada. Clicatz per anullar",
|
||||
"account.share": "Partejar lo perfil a @{name}",
|
||||
|
@ -29,8 +29,8 @@
|
|||
"account.unmute": "Quitar de rescondre @{name}",
|
||||
"account.unmute_notifications": "Mostrar las notificacions de @{name}",
|
||||
"account.view_full_profile": "Veire lo perfil complèt",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"alert.unexpected.message": "Una error s’es producha.",
|
||||
"alert.unexpected.title": "Ops !",
|
||||
"boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven",
|
||||
"bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.",
|
||||
"bundle_column_error.retry": "Tornar ensajar",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Tornar ensajar",
|
||||
"column.blocks": "Personas blocadas",
|
||||
"column.community": "Flux public local",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Messatges dirèctes",
|
||||
"column.domain_blocks": "Domenis blocats",
|
||||
"column.favourites": "Favorits",
|
||||
"column.follow_requests": "Demandas d’abonament",
|
||||
"column.home": "Acuèlh",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Despenjar",
|
||||
"column_subheading.navigation": "Navigacion",
|
||||
"column_subheading.settings": "Paramètres",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Aqueste tut serà pas que visibile pel monde mencionat.",
|
||||
"compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap etiqueta estant qu’es pas listat. Òm pas cercar que los tuts publics per etiqueta.",
|
||||
"compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.",
|
||||
"compose_form.lock_disclaimer.lock": "clavat",
|
||||
|
@ -73,13 +73,13 @@
|
|||
"compose_form.spoiler_placeholder": "Escrivètz l’avertiment aquí",
|
||||
"confirmation_modal.cancel": "Anullar",
|
||||
"confirmations.block.confirm": "Blocar",
|
||||
"confirmations.block.message": "Sètz segur de voler blocar {name} ?",
|
||||
"confirmations.block.message": "Volètz vertadièrament blocar {name} ?",
|
||||
"confirmations.delete.confirm": "Escafar",
|
||||
"confirmations.delete.message": "Sètz segur de voler escafar l’estatut ?",
|
||||
"confirmations.delete.message": "Volètz vertadièrament escafar l’estatut ?",
|
||||
"confirmations.delete_list.confirm": "Suprimir",
|
||||
"confirmations.delete_list.message": "Sètz segur de voler suprimir aquesta lista per totjorn ?",
|
||||
"confirmations.delete_list.message": "Volètz vertadièrament suprimir aquesta lista per totjorn ?",
|
||||
"confirmations.domain_block.confirm": "Amagar tot lo domeni",
|
||||
"confirmations.domain_block.message": "Sètz segur segur de voler blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.",
|
||||
"confirmations.domain_block.message": "Volètz vertadièrament blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.",
|
||||
"confirmations.mute.confirm": "Rescondre",
|
||||
"confirmations.mute.message": "Sètz segur de voler rescondre {name} ?",
|
||||
"confirmations.unfollow.confirm": "Quitar de sègre",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Simbòls",
|
||||
"emoji_button.travel": "Viatges & lòcs",
|
||||
"empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Avètz pas encara de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
|
||||
"empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.",
|
||||
"empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.",
|
||||
"empty_column.home.public_timeline": "lo flux public",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "mencionar l’autor",
|
||||
"keyboard_shortcuts.reply": "respondre",
|
||||
"keyboard_shortcuts.search": "anar a la recèrca",
|
||||
"keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments",
|
||||
"keyboard_shortcuts.toot": "començar un estatut tot novèl",
|
||||
"keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca",
|
||||
"keyboard_shortcuts.up": "far montar dins la lista",
|
||||
|
@ -156,7 +157,7 @@
|
|||
"mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?",
|
||||
"navigation_bar.blocks": "Personas blocadas",
|
||||
"navigation_bar.community_timeline": "Flux public local",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.direct": "Messatges dirèctes",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.edit_profile": "Modificar lo perfil",
|
||||
"navigation_bar.favourites": "Favorits",
|
||||
|
@ -235,16 +236,16 @@
|
|||
"search_popout.tips.status": "estatut",
|
||||
"search_popout.tips.text": "Lo tèxt brut tòrna escais, noms d’utilizaire e etiquetas correspondents",
|
||||
"search_popout.tips.user": "utilizaire",
|
||||
"search_results.accounts": "Monde",
|
||||
"search_results.accounts": "Gents",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"search_results.statuses": "Tuts",
|
||||
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
|
||||
"standalone.public_title": "Una ulhada dedins…",
|
||||
"status.block": "Blocar @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Quitar de partejar",
|
||||
"status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
|
||||
"status.delete": "Escafar",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Messatge per @{name}",
|
||||
"status.embed": "Embarcar",
|
||||
"status.favourite": "Apondre als favorits",
|
||||
"status.load_more": "Cargar mai",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Penjar al perfil",
|
||||
"status.pinned": "Tut penjat",
|
||||
"status.reblog": "Partejar",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Partejar al l’audiéncia d’origina",
|
||||
"status.reblogged_by": "{name} a partejat",
|
||||
"status.reply": "Respondre",
|
||||
"status.replyAll": "Respondre a la conversacion",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Acuèlh",
|
||||
"tabs_bar.local_timeline": "Flux public local",
|
||||
"tabs_bar.notifications": "Notificacions",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Recèrcas",
|
||||
"ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
|
||||
"upload_area.title": "Lisatz e depausatz per mandar",
|
||||
"upload_button.label": "Ajustar un mèdia",
|
||||
|
|
|
@ -106,8 +106,8 @@
|
|||
"empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!",
|
||||
"empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Jeżeli wyślesz lub otrzymasz jakąś, będzie tu widoczna.",
|
||||
"empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy!",
|
||||
"empty_column.home": "Nie śledzisz nikogo. Odwiedź publiczną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
|
||||
"empty_column.home.public_timeline": "publiczna oś czasu",
|
||||
"empty_column.home": "Nie śledzisz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
|
||||
"empty_column.home.public_timeline": "globalna oś czasu",
|
||||
"empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.",
|
||||
"empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.",
|
||||
"empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych instancji, aby to wyświetlić",
|
||||
|
@ -173,7 +173,7 @@
|
|||
"navigation_bar.mutes": "Wyciszeni użytkownicy",
|
||||
"navigation_bar.pins": "Przypięte wpisy",
|
||||
"navigation_bar.preferences": "Preferencje",
|
||||
"navigation_bar.public_timeline": "Oś czasu federacji",
|
||||
"navigation_bar.public_timeline": "Globalna oś czasu",
|
||||
"notification.favourite": "{name} dodał Twój wpis do ulubionych",
|
||||
"notification.follow": "{name} zaczął Cię śledzić",
|
||||
"notification.mention": "{name} wspomniał o tobie",
|
||||
|
@ -191,7 +191,7 @@
|
|||
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
||||
"onboarding.done": "Gotowe",
|
||||
"onboarding.next": "Dalej",
|
||||
"onboarding.page_five.public_timelines": "Lokalna oś czasu zawiera wszystkie publiczne wpisy z {domain}. Federalna oś czasu wyświetla publiczne wpisy śledzonych przez członków {domain}. Są to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.",
|
||||
"onboarding.page_five.public_timelines": "Lokalna oś czasu zawiera wszystkie publiczne wpisy z {domain}. Globalna oś czasu wyświetla publiczne wpisy śledzonych przez członków {domain}. Są to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.",
|
||||
"onboarding.page_four.home": "Główna oś czasu wyświetla publiczne wpisy.",
|
||||
"onboarding.page_four.notifications": "Kolumna powiadomień wyświetla, gdy ktoś dokonuje interakcji z tobą.",
|
||||
"onboarding.page_one.federation": "Mastodon jest siecią niezależnych serwerów połączonych w jeden portal społecznościowy. Nazywamy te serwery instancjami.",
|
||||
|
@ -251,7 +251,7 @@
|
|||
"status.delete": "Usuń",
|
||||
"status.direct": "Wyślij wiadomość bezpośrednią do @{name}",
|
||||
"status.embed": "Osadź",
|
||||
"status.favourite": "Ulubione",
|
||||
"status.favourite": "Dodaj do ulubionych",
|
||||
"status.load_more": "Załaduj więcej",
|
||||
"status.media_hidden": "Zawartość multimedialna ukryta",
|
||||
"status.mention": "Wspomnij o @{name}",
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
"account.unmute": "Não silenciar @{name}",
|
||||
"account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
|
||||
"account.view_full_profile": "Ver perfil completo",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.message": "Um erro inesperado ocorreu.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez",
|
||||
"bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Tente novamente",
|
||||
"column.blocks": "Usuários bloqueados",
|
||||
"column.community": "Local",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Mensagens diretas",
|
||||
"column.domain_blocks": "Domínios escondidos",
|
||||
"column.favourites": "Favoritos",
|
||||
"column.follow_requests": "Seguidores pendentes",
|
||||
"column.home": "Página inicial",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Desafixar",
|
||||
"column_subheading.navigation": "Navegação",
|
||||
"column_subheading.settings": "Configurações",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Este toot só será visível a todos os usuários mencionados.",
|
||||
"compose_form.hashtag_warning": "Esse toot não será listado em nenhuma hashtag por ser não listado. Somente toots públicos podem ser pesquisados por hashtag.",
|
||||
"compose_form.lock_disclaimer": "A sua conta não está {locked}. Qualquer pessoa pode te seguir e visualizar postagens direcionadas a apenas seguidores.",
|
||||
"compose_form.lock_disclaimer.lock": "trancada",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Símbolos",
|
||||
"emoji_button.travel": "Viagens & Lugares",
|
||||
"empty_column.community": "A timeline local está vazia. Escreva algo publicamente para começar!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Você não tem nenhuma mensagem direta ainda. Quando você enviar ou receber uma, as mensagens aparecerão por aqui.",
|
||||
"empty_column.hashtag": "Ainda não há qualquer conteúdo com essa hashtag.",
|
||||
"empty_column.home": "Você ainda não segue usuário algum. Visite a timeline {public} ou use o buscador para procurar e conhecer outros usuários.",
|
||||
"empty_column.home.public_timeline": "global",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "para mencionar o autor",
|
||||
"keyboard_shortcuts.reply": "para responder",
|
||||
"keyboard_shortcuts.search": "para focar a pesquisa",
|
||||
"keyboard_shortcuts.toggle_hidden": "mostrar/esconder o texto com aviso de conteúdo",
|
||||
"keyboard_shortcuts.toot": "para compor um novo toot",
|
||||
"keyboard_shortcuts.unfocus": "para remover o foco da área de composição/pesquisa",
|
||||
"keyboard_shortcuts.up": "para mover para cima na lista",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Esconder notificações deste usuário?",
|
||||
"navigation_bar.blocks": "Usuários bloqueados",
|
||||
"navigation_bar.community_timeline": "Local",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Mensagens diretas",
|
||||
"navigation_bar.domain_blocks": "Domínios escondidos",
|
||||
"navigation_bar.edit_profile": "Editar perfil",
|
||||
"navigation_bar.favourites": "Favoritos",
|
||||
"navigation_bar.follow_requests": "Seguidores pendentes",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
|
||||
"standalone.public_title": "Dê uma espiada...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Retirar o compartilhamento",
|
||||
"status.cannot_reblog": "Esta postagem não pode ser compartilhada",
|
||||
"status.delete": "Excluir",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Enviar mensagem direta à @{name}",
|
||||
"status.embed": "Incorporar",
|
||||
"status.favourite": "Adicionar aos favoritos",
|
||||
"status.load_more": "Carregar mais",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Fixar no perfil",
|
||||
"status.pinned": "Toot fixado",
|
||||
"status.reblog": "Compartilhar",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Compartilhar com a audiência original",
|
||||
"status.reblogged_by": "{name} compartilhou",
|
||||
"status.reply": "Responder",
|
||||
"status.replyAll": "Responder à sequência",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Página inicial",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notificações",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Buscar",
|
||||
"ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
|
||||
"upload_area.title": "Arraste e solte para enviar",
|
||||
"upload_button.label": "Adicionar mídia",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "para mencionar o autor",
|
||||
"keyboard_shortcuts.reply": "para responder",
|
||||
"keyboard_shortcuts.search": "para focar na pesquisa",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "para compor um novo post",
|
||||
"keyboard_shortcuts.unfocus": "para remover o foco da área de publicação/pesquisa",
|
||||
"keyboard_shortcuts.up": "para mover para cima na lista",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "упомянуть автора поста",
|
||||
"keyboard_shortcuts.reply": "ответить",
|
||||
"keyboard_shortcuts.search": "перейти к поиску",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "начать писать новый пост",
|
||||
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
|
||||
"keyboard_shortcuts.up": "вверх по списку",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"account.block": "Blokovať @{name}",
|
||||
"account.block_domain": "Ukryť všetko z {domain}",
|
||||
"account.blocked": "Blokovaný/á",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.direct": "Súkromná správa pre @{name}",
|
||||
"account.disclaimer_full": "Inofrmácie nižšie nemusia byť úplným odrazom uživateľovho účtu.",
|
||||
"account.domain_blocked": "Doména ukrytá",
|
||||
"account.edit_profile": "Upraviť profil",
|
||||
|
@ -29,7 +29,7 @@
|
|||
"account.unmute": "Prestať ignorovať @{name}",
|
||||
"account.unmute_notifications": "Odtĺmiť notifikácie od @{name}",
|
||||
"account.view_full_profile": "Pozri celý profil",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.message": "Vyskytla sa neočakávaná chyba.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"boost_modal.combo": "Nabudúce môžete kliknúť {combo} aby ste preskočili",
|
||||
"bundle_column_error.body": "Nastala chyba pri načítaní tohto komponentu.",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Skúsiť znova",
|
||||
"column.blocks": "Blokovaní užívatelia",
|
||||
"column.community": "Lokálna časová os",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Súkromné správy",
|
||||
"column.domain_blocks": "Skryté domény",
|
||||
"column.favourites": "Obľúbené",
|
||||
"column.follow_requests": "Žiadosti o sledovanie",
|
||||
"column.home": "Domov",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Odopnúť",
|
||||
"column_subheading.navigation": "Navigácia",
|
||||
"column_subheading.settings": "Nastavenia",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi.",
|
||||
"compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.",
|
||||
"compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
|
||||
"compose_form.lock_disclaimer.lock": "zamknutý",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Symboly",
|
||||
"emoji_button.travel": "Cestovanie a miesta",
|
||||
"empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.",
|
||||
"empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.",
|
||||
"empty_column.home": "Vaša lokálna osa je zatiaľ prázdna! Pre začiatok pozrite {public} alebo použite vyhľadávanie a nájdite tak ostatných používateľov.",
|
||||
"empty_column.home.public_timeline": "verejná časová os",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "spomenúť autora",
|
||||
"keyboard_shortcuts.reply": "odpovedať",
|
||||
"keyboard_shortcuts.search": "zamerať sa na vyhľadávanie",
|
||||
"keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW",
|
||||
"keyboard_shortcuts.toot": "začať úplne novú hlášku",
|
||||
"keyboard_shortcuts.unfocus": "nesústrediť sa na písaciu plochu, alebo hľadanie",
|
||||
"keyboard_shortcuts.up": "posunúť sa vyššie v zozname",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?",
|
||||
"navigation_bar.blocks": "Blokovaní užívatelia",
|
||||
"navigation_bar.community_timeline": "Lokálna časová os",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Súkromné správy",
|
||||
"navigation_bar.domain_blocks": "Skryté domény",
|
||||
"navigation_bar.edit_profile": "Upraviť profil",
|
||||
"navigation_bar.favourites": "Obľúbené",
|
||||
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
|
||||
|
@ -244,7 +245,7 @@
|
|||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý",
|
||||
"status.delete": "Zmazať",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Súkromná správa @{name}",
|
||||
"status.embed": "Vložiť",
|
||||
"status.favourite": "Páči sa mi",
|
||||
"status.load_more": "Zobraz viac",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Domov",
|
||||
"tabs_bar.local_timeline": "Lokálna",
|
||||
"tabs_bar.notifications": "Notifikácie",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Hľadaj",
|
||||
"ui.beforeunload": "Čo máte rozpísané sa stratí, ak opustíte Mastodon.",
|
||||
"upload_area.title": "Ťahaj a pusti pre nahratie",
|
||||
"upload_button.label": "Pridať médiá",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "da pomenete autora",
|
||||
"keyboard_shortcuts.reply": "da odgovorite",
|
||||
"keyboard_shortcuts.search": "da se prebacite na pretragu",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "da započnete skroz novi tut",
|
||||
"keyboard_shortcuts.unfocus": "da ne budete više na pretrazi/pravljenju novog tuta",
|
||||
"keyboard_shortcuts.up": "da se pomerite na gore u listi",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "да поменете аутора",
|
||||
"keyboard_shortcuts.reply": "да одговорите",
|
||||
"keyboard_shortcuts.search": "да се пребаците на претрагу",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "да започнете скроз нови тут",
|
||||
"keyboard_shortcuts.unfocus": "да не будете више на претрази/прављењу новог тута",
|
||||
"keyboard_shortcuts.up": "да се померите на горе у листи",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"account.mute_notifications": "Stäng av notifieringar från @{name}",
|
||||
"account.muted": "Nertystad",
|
||||
"account.posts": "Inlägg",
|
||||
"account.posts_with_replies": "Toots med svar",
|
||||
"account.posts_with_replies": "Toots och svar",
|
||||
"account.report": "Rapportera @{name}",
|
||||
"account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan",
|
||||
"account.share": "Dela @{name}'s profil",
|
||||
|
@ -29,7 +29,7 @@
|
|||
"account.unmute": "Ta bort tystad @{name}",
|
||||
"account.unmute_notifications": "Återaktivera notifikationer från @{name}",
|
||||
"account.view_full_profile": "Visa hela profilen",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.message": "Ett oväntat fel uppstod.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång",
|
||||
"bundle_column_error.body": "Något gick fel när du laddade denna komponent.",
|
||||
|
@ -40,8 +40,8 @@
|
|||
"bundle_modal_error.retry": "Försök igen",
|
||||
"column.blocks": "Blockerade användare",
|
||||
"column.community": "Lokal tidslinje",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.direct": "Direktmeddelande",
|
||||
"column.domain_blocks": "Dolda domäner",
|
||||
"column.favourites": "Favoriter",
|
||||
"column.follow_requests": "Följ förfrågningar",
|
||||
"column.home": "Hem",
|
||||
|
@ -59,7 +59,7 @@
|
|||
"column_header.unpin": "Ångra fäst",
|
||||
"column_subheading.navigation": "Navigation",
|
||||
"column_subheading.settings": "Inställningar",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning": "Denna toot kommer endast vara synlig för nämnda användare.",
|
||||
"compose_form.hashtag_warning": "Denna toot kommer inte att listas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.",
|
||||
"compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vemsomhelst kan följa dig och även se dina inlägg skrivna för endast dina följare.",
|
||||
"compose_form.lock_disclaimer.lock": "låst",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"emoji_button.symbols": "Symboler",
|
||||
"emoji_button.travel": "Resor & Platser",
|
||||
"empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.",
|
||||
"empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
|
||||
"empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.",
|
||||
"empty_column.home.public_timeline": "den publika tidslinjen",
|
||||
|
@ -113,7 +113,7 @@
|
|||
"getting_started.appsshort": "Appar",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Kom igång",
|
||||
"getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem på GitHub på {github}.",
|
||||
"getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.",
|
||||
"getting_started.userguide": "Användarguide",
|
||||
"home.column_settings.advanced": "Avancerad",
|
||||
"home.column_settings.basic": "Grundläggande",
|
||||
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "att nämna författaren",
|
||||
"keyboard_shortcuts.reply": "att svara",
|
||||
"keyboard_shortcuts.search": "att fokusera sökfältet",
|
||||
"keyboard_shortcuts.toggle_hidden": "att visa/gömma text bakom CW",
|
||||
"keyboard_shortcuts.toot": "att börja en helt ny toot",
|
||||
"keyboard_shortcuts.unfocus": "att avfokusera komponera text fält / sökfält",
|
||||
"keyboard_shortcuts.up": "att flytta upp i listan",
|
||||
|
@ -156,8 +157,8 @@
|
|||
"mute_modal.hide_notifications": "Dölj notifikationer från denna användare?",
|
||||
"navigation_bar.blocks": "Blockerade användare",
|
||||
"navigation_bar.community_timeline": "Lokal tidslinje",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Direktmeddelanden",
|
||||
"navigation_bar.domain_blocks": "Dolda domäner",
|
||||
"navigation_bar.edit_profile": "Redigera profil",
|
||||
"navigation_bar.favourites": "Favoriter",
|
||||
"navigation_bar.follow_requests": "Följförfrågningar",
|
||||
|
@ -205,7 +206,7 @@
|
|||
"onboarding.page_three.search": "Använd sökfältet för att hitta personer och titta på hashtags, till exempel {illustration} och {introductions}. För att leta efter en person som inte befinner sig i detta fall använd deras fulla handhavande.",
|
||||
"onboarding.page_two.compose": "Skriv inlägg från skrivkolumnen. Du kan ladda upp bilder, ändra integritetsinställningar och lägga till varningar med ikonerna nedan.",
|
||||
"onboarding.skip": "Hoppa över",
|
||||
"privacy.change": "Justera status sekretess",
|
||||
"privacy.change": "Justera sekretess",
|
||||
"privacy.direct.long": "Skicka endast till nämnda användare",
|
||||
"privacy.direct.short": "Direkt",
|
||||
"privacy.private.long": "Skicka endast till följare",
|
||||
|
@ -241,10 +242,10 @@
|
|||
"search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
|
||||
"standalone.public_title": "En titt inuti...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cancel_reblog_private": "Ta bort knuff",
|
||||
"status.cannot_reblog": "Detta inlägg kan inte knuffas",
|
||||
"status.delete": "Ta bort",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.direct": "Direktmeddela @{name}",
|
||||
"status.embed": "Bädda in",
|
||||
"status.favourite": "Favorit",
|
||||
"status.load_more": "Ladda fler",
|
||||
|
@ -257,7 +258,7 @@
|
|||
"status.pin": "Fäst i profil",
|
||||
"status.pinned": "Fäst toot",
|
||||
"status.reblog": "Knuff",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblog_private": "Knuffa till de ursprungliga åhörarna",
|
||||
"status.reblogged_by": "{name} knuffade",
|
||||
"status.reply": "Svara",
|
||||
"status.replyAll": "Svara på tråden",
|
||||
|
@ -275,7 +276,7 @@
|
|||
"tabs_bar.home": "Hem",
|
||||
"tabs_bar.local_timeline": "Lokal",
|
||||
"tabs_bar.notifications": "Meddelanden",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Sök",
|
||||
"ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.",
|
||||
"upload_area.title": "Dra & släpp för att ladda upp",
|
||||
"upload_button.label": "Lägg till media",
|
||||
|
|
|
@ -0,0 +1,296 @@
|
|||
{
|
||||
"account.block": "Block @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
"account.follow": "Follow",
|
||||
"account.followers": "Followers",
|
||||
"account.follows": "Follows",
|
||||
"account.follows_you": "Follows you",
|
||||
"account.hide_reblogs": "Hide boosts from @{name}",
|
||||
"account.media": "Media",
|
||||
"account.mention": "Mention @{name}",
|
||||
"account.moved_to": "{name} has moved to:",
|
||||
"account.mute": "Mute @{name}",
|
||||
"account.mute_notifications": "Mute notifications from @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots and replies",
|
||||
"account.report": "Report @{name}",
|
||||
"account.requested": "Awaiting approval. Click to cancel follow request",
|
||||
"account.share": "Share @{name}'s profile",
|
||||
"account.show_reblogs": "Show boosts from @{name}",
|
||||
"account.unblock": "Unblock @{name}",
|
||||
"account.unblock_domain": "Unhide {domain}",
|
||||
"account.unfollow": "Unfollow",
|
||||
"account.unmute": "Unmute @{name}",
|
||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"account.view_full_profile": "View full profile",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
"bundle_column_error.title": "Network error",
|
||||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.favourites": "Favourites",
|
||||
"column.follow_requests": "Follow requests",
|
||||
"column.home": "Home",
|
||||
"column.lists": "Lists",
|
||||
"column.mutes": "Muted users",
|
||||
"column.notifications": "Notifications",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.public": "Federated timeline",
|
||||
"column_back_button.label": "Back",
|
||||
"column_header.hide_settings": "Hide settings",
|
||||
"column_header.moveLeft_settings": "Move column to the left",
|
||||
"column_header.moveRight_settings": "Move column to the right",
|
||||
"column_header.pin": "Pin",
|
||||
"column_header.show_settings": "Show settings",
|
||||
"column_header.unpin": "Unpin",
|
||||
"column_subheading.navigation": "Navigation",
|
||||
"column_subheading.settings": "Settings",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
|
||||
"compose_form.lock_disclaimer.lock": "locked",
|
||||
"compose_form.placeholder": "What is on your mind?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Write your warning here",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
"confirmations.block.message": "Are you sure you want to block {name}?",
|
||||
"confirmations.delete.confirm": "Delete",
|
||||
"confirmations.delete.message": "Are you sure you want to delete this status?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||
"confirmations.mute.confirm": "Mute",
|
||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"embed.preview": "Here is what it will look like:",
|
||||
"emoji_button.activity": "Activity",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.flags": "Flags",
|
||||
"emoji_button.food": "Food & Drink",
|
||||
"emoji_button.label": "Insert emoji",
|
||||
"emoji_button.nature": "Nature",
|
||||
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Objects",
|
||||
"emoji_button.people": "People",
|
||||
"emoji_button.recent": "Frequently used",
|
||||
"emoji_button.search": "Search...",
|
||||
"emoji_button.search_results": "Search results",
|
||||
"emoji_button.symbols": "Symbols",
|
||||
"emoji_button.travel": "Travel & Places",
|
||||
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.hashtag": "There is nothing in this hashtag yet.",
|
||||
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
|
||||
"empty_column.home.public_timeline": "the public timeline",
|
||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
||||
"follow_request.authorize": "Authorize",
|
||||
"follow_request.reject": "Reject",
|
||||
"getting_started.appsshort": "Apps",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Getting started",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
||||
"getting_started.userguide": "User Guide",
|
||||
"home.column_settings.advanced": "Advanced",
|
||||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.filter_regex": "Filter out by regular expressions",
|
||||
"home.column_settings.show_reblogs": "Show boosts",
|
||||
"home.column_settings.show_replies": "Show replies",
|
||||
"home.settings": "Column settings",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Description",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"loading_indicator.label": "Loading...",
|
||||
"media_gallery.toggle_visible": "Toggle visibility",
|
||||
"missing_indicator.label": "Not found",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"navigation_bar.blocks": "Blocked users",
|
||||
"navigation_bar.community_timeline": "Local timeline",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.edit_profile": "Edit profile",
|
||||
"navigation_bar.favourites": "Favourites",
|
||||
"navigation_bar.follow_requests": "Follow requests",
|
||||
"navigation_bar.info": "Extended information",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.logout": "Logout",
|
||||
"navigation_bar.mutes": "Muted users",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.preferences": "Preferences",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
"notifications.column_settings.favourite": "Favourites:",
|
||||
"notifications.column_settings.follow": "New followers:",
|
||||
"notifications.column_settings.mention": "Mentions:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.push_meta": "This device",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Show in column",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
"onboarding.done": "Done",
|
||||
"onboarding.next": "Next",
|
||||
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
|
||||
"onboarding.page_four.home": "The home timeline shows posts from people you follow.",
|
||||
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
|
||||
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
|
||||
"onboarding.page_one.full_handle": "Your full handle",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.welcome": "Welcome to Mastodon!",
|
||||
"onboarding.page_six.admin": "Your instance's admin is {admin}.",
|
||||
"onboarding.page_six.almost_done": "Almost done...",
|
||||
"onboarding.page_six.appetoot": "Bon Appetoot!",
|
||||
"onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
|
||||
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
|
||||
"onboarding.page_six.guidelines": "community guidelines",
|
||||
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
|
||||
"onboarding.page_six.various_app": "mobile apps",
|
||||
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
|
||||
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
|
||||
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
|
||||
"onboarding.skip": "Skip",
|
||||
"privacy.change": "Adjust status privacy",
|
||||
"privacy.direct.long": "Post to mentioned users only",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.private.long": "Post to followers only",
|
||||
"privacy.private.short": "Followers-only",
|
||||
"privacy.public.long": "Post to public timelines",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.long": "Do not show in public timelines",
|
||||
"privacy.unlisted.short": "Unlisted",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Cancel",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.placeholder": "Additional comments",
|
||||
"report.submit": "Submit",
|
||||
"report.target": "Report {target}",
|
||||
"search.placeholder": "Search",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
||||
"standalone.public_title": "A look inside...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "This post cannot be boosted",
|
||||
"status.delete": "Delete",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.favourite": "Favourite",
|
||||
"status.load_more": "Load more",
|
||||
"status.media_hidden": "Media hidden",
|
||||
"status.mention": "Mention @{name}",
|
||||
"status.more": "More",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute_conversation": "Mute conversation",
|
||||
"status.open": "Expand this status",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.reblog": "Boost",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblogged_by": "{name} boosted",
|
||||
"status.reply": "Reply",
|
||||
"status.replyAll": "Reply to thread",
|
||||
"status.report": "Report @{name}",
|
||||
"status.sensitive_toggle": "Click to view",
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
"tabs_bar.search": "Search",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.undo": "Undo",
|
||||
"upload_progress.label": "Uploading...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.unmute": "Unmute sound"
|
||||
}
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[
|
||||
]
|
|
@ -0,0 +1,2 @@
|
|||
[
|
||||
]
|
|
@ -0,0 +1,2 @@
|
|||
[
|
||||
]
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "提及嘟文作者",
|
||||
"keyboard_shortcuts.reply": "回复嘟文",
|
||||
"keyboard_shortcuts.search": "选择搜索框",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "发送新嘟文",
|
||||
"keyboard_shortcuts.unfocus": "取消输入",
|
||||
"keyboard_shortcuts.up": "在列表中让光标上移",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "提及作者",
|
||||
"keyboard_shortcuts.reply": "回覆",
|
||||
"keyboard_shortcuts.search": "把標示移動到搜索",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "新的推文",
|
||||
"keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索",
|
||||
"keyboard_shortcuts.up": "在列表往上移動",
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
"keyboard_shortcuts.mention": "到提到的作者",
|
||||
"keyboard_shortcuts.reply": "到回應",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
|
|
|
@ -105,7 +105,7 @@ export default function notifications(state = initialState, action) {
|
|||
return expandNormalizedNotifications(state, action.notifications, action.next);
|
||||
case ACCOUNT_BLOCK_SUCCESS:
|
||||
case ACCOUNT_MUTE_SUCCESS:
|
||||
return filterNotifications(state, action.relationship);
|
||||
return action.relationship.muting_notifications ? filterNotifications(state, action.relationship) : state;
|
||||
case NOTIFICATIONS_CLEAR:
|
||||
return state.set('items', ImmutableList()).set('hasMore', false);
|
||||
case TIMELINE_DELETE:
|
||||
|
|
|
@ -34,7 +34,7 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial) =>
|
|||
mMap.update('items', ImmutableList(), oldIds => {
|
||||
const newIds = statuses.map(status => status.get('id'));
|
||||
const lastIndex = oldIds.findLastIndex(id => id !== null && compareId(id, newIds.last()) >= 0) + 1;
|
||||
const firstIndex = oldIds.take(lastIndex).findLastIndex(id => id !== null && compareId(id, newIds.first()) >= 0);
|
||||
const firstIndex = oldIds.take(lastIndex).findLastIndex(id => id !== null && compareId(id, newIds.first()) > 0);
|
||||
|
||||
if (firstIndex < 0) {
|
||||
return (isPartial ? newIds.unshift(null) : newIds).concat(oldIds.skip(lastIndex));
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
import * as base64 from '../base64';
|
||||
|
||||
describe('base64', () => {
|
||||
describe('decode', () => {
|
||||
it('returns a uint8 array', () => {
|
||||
const arr = base64.decode('dGVzdA==');
|
||||
expect(arr).toEqual(new Uint8Array([116, 101, 115, 116]));
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
export const decode = base64 => {
|
||||
const rawData = window.atob(base64);
|
||||
const outputArray = new Uint8Array(rawData.length);
|
||||
|
||||
for (let i = 0; i < rawData.length; ++i) {
|
||||
outputArray[i] = rawData.charCodeAt(i);
|
||||
}
|
||||
|
||||
return outputArray;
|
||||
};
|
|
@ -0,0 +1,66 @@
|
|||
const MAX_IMAGE_DIMENSION = 1280;
|
||||
|
||||
const getImageUrl = inputFile => new Promise((resolve, reject) => {
|
||||
if (window.URL && URL.createObjectURL) {
|
||||
try {
|
||||
resolve(URL.createObjectURL(inputFile));
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const reader = new FileReader();
|
||||
reader.onerror = (...args) => reject(...args);
|
||||
reader.onload = ({ target }) => resolve(target.result);
|
||||
|
||||
reader.readAsDataURL(inputFile);
|
||||
});
|
||||
|
||||
const loadImage = inputFile => new Promise((resolve, reject) => {
|
||||
getImageUrl(inputFile).then(url => {
|
||||
const img = new Image();
|
||||
|
||||
img.onerror = (...args) => reject(...args);
|
||||
img.onload = () => resolve(img);
|
||||
|
||||
img.src = url;
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
export default inputFile => new Promise((resolve, reject) => {
|
||||
if (!inputFile.type.match(/image.*/) || inputFile.type === 'image/gif') {
|
||||
resolve(inputFile);
|
||||
return;
|
||||
}
|
||||
|
||||
loadImage(inputFile).then(img => {
|
||||
const canvas = document.createElement('canvas');
|
||||
const { width, height } = img;
|
||||
|
||||
let newWidth, newHeight;
|
||||
|
||||
if (width < MAX_IMAGE_DIMENSION && height < MAX_IMAGE_DIMENSION) {
|
||||
resolve(inputFile);
|
||||
return;
|
||||
}
|
||||
|
||||
if (width > height) {
|
||||
newHeight = height * MAX_IMAGE_DIMENSION / width;
|
||||
newWidth = MAX_IMAGE_DIMENSION;
|
||||
} else if (height > width) {
|
||||
newWidth = width * MAX_IMAGE_DIMENSION / height;
|
||||
newHeight = MAX_IMAGE_DIMENSION;
|
||||
} else {
|
||||
newWidth = MAX_IMAGE_DIMENSION;
|
||||
newHeight = MAX_IMAGE_DIMENSION;
|
||||
}
|
||||
|
||||
canvas.width = newWidth;
|
||||
canvas.height = newHeight;
|
||||
|
||||
canvas.getContext('2d').drawImage(img, 0, 0, newWidth, newHeight);
|
||||
|
||||
canvas.toBlob(resolve, inputFile.type);
|
||||
}).catch(reject);
|
||||
});
|
|
@ -0,0 +1,3 @@
|
|||
@import 'contrast/variables';
|
||||
@import 'application';
|
||||
@import 'contrast/diff';
|
|
@ -0,0 +1,14 @@
|
|||
// components.scss
|
||||
.compose-form {
|
||||
.compose-form__modifiers {
|
||||
.compose-form__upload {
|
||||
&-description {
|
||||
input {
|
||||
&::placeholder {
|
||||
opacity: 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
// Dependent colors
|
||||
$black: #000000;
|
||||
|
||||
$classic-base-color: #282c37;
|
||||
$classic-primary-color: #9baec8;
|
||||
$classic-secondary-color: #d9e1e8;
|
||||
$classic-highlight-color: #2b90d9;
|
||||
|
||||
$ui-base-color: $classic-base-color !default;
|
||||
$ui-primary-color: $classic-primary-color !default;
|
||||
$ui-secondary-color: $classic-secondary-color !default;
|
||||
|
||||
// Differences
|
||||
$ui-highlight-color: #2b5fd9;
|
||||
|
||||
$darker-text-color: lighten($ui-primary-color, 20%) !default;
|
||||
$dark-text-color: lighten($ui-primary-color, 12%) !default;
|
||||
$secondary-text-color: lighten($ui-secondary-color, 6%) !default;
|
||||
$highlight-text-color: $classic-highlight-color !default;
|
||||
$action-button-color: #8d9ac2;
|
||||
|
||||
$inverted-text-color: $black !default;
|
||||
$lighter-text-color: darken($ui-base-color,6%) !default;
|
||||
$light-text-color: darken($ui-primary-color, 40%) !default;
|
|
@ -225,7 +225,7 @@ $small-breakpoint: 960px;
|
|||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
color: transparentize($darker-text-color, 0.1);
|
||||
color: lighten($darker-text-color, 10%);
|
||||
}
|
||||
|
||||
h1 {
|
||||
|
@ -234,14 +234,14 @@ $small-breakpoint: 960px;
|
|||
line-height: 30px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
|
||||
small {
|
||||
font-family: 'mastodon-font-sans-serif', sans-serif;
|
||||
display: block;
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
color: opacify($darker-text-color, 0.1);
|
||||
color: lighten($darker-text-color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -251,7 +251,7 @@ $small-breakpoint: 960px;
|
|||
line-height: 26px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
h3 {
|
||||
|
@ -260,7 +260,7 @@ $small-breakpoint: 960px;
|
|||
line-height: 24px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
h4 {
|
||||
|
@ -269,7 +269,7 @@ $small-breakpoint: 960px;
|
|||
line-height: 24px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
h5 {
|
||||
|
@ -278,7 +278,7 @@ $small-breakpoint: 960px;
|
|||
line-height: 24px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
h6 {
|
||||
|
@ -287,7 +287,7 @@ $small-breakpoint: 960px;
|
|||
line-height: 24px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
ul,
|
||||
|
@ -405,7 +405,7 @@ $small-breakpoint: 960px;
|
|||
font-size: 14px;
|
||||
|
||||
&:hover {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -517,7 +517,7 @@ $small-breakpoint: 960px;
|
|||
|
||||
span {
|
||||
&:last-child {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -559,7 +559,7 @@ $small-breakpoint: 960px;
|
|||
a,
|
||||
span {
|
||||
font-weight: 400;
|
||||
color: opacify($darker-text-color, 0.1);
|
||||
color: darken($darker-text-color, 10%);
|
||||
}
|
||||
|
||||
a {
|
||||
|
@ -775,7 +775,7 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
p a {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
h1 {
|
||||
|
@ -787,7 +787,7 @@ $small-breakpoint: 960px;
|
|||
color: $darker-text-color;
|
||||
|
||||
span {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -896,7 +896,7 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
a {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
@ -980,7 +980,7 @@ $small-breakpoint: 960px;
|
|||
.footer-links {
|
||||
padding-bottom: 50px;
|
||||
text-align: right;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
|
@ -995,7 +995,7 @@ $small-breakpoint: 960px;
|
|||
&__footer {
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
|
|
|
@ -178,7 +178,7 @@
|
|||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
padding: 0 15px;
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
|
@ -256,7 +256,7 @@
|
|||
.current {
|
||||
background: $simple-background-color;
|
||||
border-radius: 100px;
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
cursor: default;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
@ -268,7 +268,7 @@
|
|||
.older,
|
||||
.newer {
|
||||
text-transform: uppercase;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
.older {
|
||||
|
@ -293,7 +293,7 @@
|
|||
|
||||
.disabled {
|
||||
cursor: default;
|
||||
color: opacify($lighter-text-color, 0.1);
|
||||
color: lighten($inverted-text-color, 10%);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 700px) {
|
||||
|
@ -332,7 +332,7 @@
|
|||
width: 335px;
|
||||
background: $simple-background-color;
|
||||
border-radius: 4px;
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
margin: 0 5px 10px;
|
||||
position: relative;
|
||||
|
||||
|
@ -344,7 +344,7 @@
|
|||
overflow: hidden;
|
||||
height: 100px;
|
||||
border-radius: 4px 4px 0 0;
|
||||
background-color: opacify($lighter-text-color, 0.04);
|
||||
background-color: lighten($inverted-text-color, 4%);
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
position: relative;
|
||||
|
@ -422,7 +422,7 @@
|
|||
.account__header__content {
|
||||
padding: 10px 15px;
|
||||
padding-top: 15px;
|
||||
color: transparentize($lighter-text-color, 0.1);
|
||||
color: $lighter-text-color;
|
||||
word-wrap: break-word;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
@ -434,7 +434,7 @@
|
|||
.nothing-here {
|
||||
width: 100%;
|
||||
display: block;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
|
@ -493,7 +493,7 @@
|
|||
|
||||
span {
|
||||
font-size: 14px;
|
||||
color: $inverted-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -508,7 +508,7 @@
|
|||
|
||||
.account__header__content {
|
||||
font-size: 14px;
|
||||
color: $darker-text-color;
|
||||
color: $inverted-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -586,7 +586,7 @@
|
|||
font-weight: 500;
|
||||
text-align: center;
|
||||
width: 94px;
|
||||
color: opacify($darker-text-color, 0.1);
|
||||
color: $secondary-text-color;
|
||||
background: rgba(darken($ui-base-color, 8%), 0.5);
|
||||
}
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@
|
|||
padding-left: 25px;
|
||||
|
||||
h2 {
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
font-weight: 400;
|
||||
|
@ -98,7 +98,7 @@
|
|||
}
|
||||
|
||||
h3 {
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
font-weight: 400;
|
||||
|
@ -109,7 +109,7 @@
|
|||
text-transform: uppercase;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: $primary-text-color;
|
||||
color: $darker-text-color;
|
||||
padding-bottom: 8px;
|
||||
margin-bottom: 8px;
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
|
@ -117,7 +117,7 @@
|
|||
|
||||
h6 {
|
||||
font-size: 16px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
line-height: 28px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@
|
|||
& > p {
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
margin-bottom: 20px;
|
||||
|
||||
strong {
|
||||
|
@ -141,14 +141,15 @@
|
|||
}
|
||||
|
||||
hr {
|
||||
margin: 20px 0;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
border-bottom: 1px solid $ui-base-color;
|
||||
border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
|
||||
margin: 20px 0;
|
||||
|
||||
&.section-break {
|
||||
margin: 30px 0;
|
||||
border-bottom: 2px solid $ui-base-lighter-color;
|
||||
&.spacer {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,7 +292,7 @@
|
|||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
|
||||
@each $lang in $cjk-langs {
|
||||
&:lang(#{$lang}) {
|
||||
|
@ -335,34 +336,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.report-note__comment {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.report-note__form {
|
||||
margin-bottom: 20px;
|
||||
|
||||
.report-note__textarea {
|
||||
box-sizing: border-box;
|
||||
border: 0;
|
||||
padding: 7px 4px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 16px;
|
||||
color: $inverted-text-color;
|
||||
display: block;
|
||||
width: 100%;
|
||||
outline: 0;
|
||||
font-family: inherit;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.report-note__buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.report-note__button {
|
||||
margin: 0 0 5px 5px;
|
||||
}
|
||||
.simple_form.new_report_note {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.batch-form-box {
|
||||
|
@ -390,13 +365,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.batch-checkbox,
|
||||
.batch-checkbox-all {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
|
@ -416,7 +384,7 @@
|
|||
}
|
||||
|
||||
.log-entry {
|
||||
margin-bottom: 8px;
|
||||
margin-bottom: 20px;
|
||||
line-height: 20px;
|
||||
|
||||
&__header {
|
||||
|
@ -452,7 +420,7 @@
|
|||
}
|
||||
|
||||
&__timestamp {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
&__extras {
|
||||
|
@ -469,7 +437,7 @@
|
|||
&__icon {
|
||||
font-size: 28px;
|
||||
margin-right: 10px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
&__icon__overlay {
|
||||
|
@ -496,7 +464,7 @@
|
|||
a,
|
||||
.username,
|
||||
.target {
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
@ -506,7 +474,7 @@
|
|||
}
|
||||
|
||||
.diff-neutral {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
.diff-new {
|
||||
|
@ -514,9 +482,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
a.name-tag,
|
||||
.name-tag {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-decoration: none;
|
||||
color: $secondary-text-color;
|
||||
|
||||
.avatar {
|
||||
display: block;
|
||||
|
@ -528,4 +499,52 @@
|
|||
.username {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
&.suspended {
|
||||
.username {
|
||||
text-decoration: line-through;
|
||||
color: lighten($error-red, 12%);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
filter: grayscale(100%);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.speech-bubble {
|
||||
margin-bottom: 20px;
|
||||
border-left: 4px solid $ui-highlight-color;
|
||||
|
||||
&.positive {
|
||||
border-left-color: $success-green;
|
||||
}
|
||||
|
||||
&.negative {
|
||||
border-left-color: lighten($error-red, 12%);
|
||||
}
|
||||
|
||||
&__bubble {
|
||||
padding: 16px;
|
||||
padding-left: 14px;
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
border-radius: 4px 4px 4px 0;
|
||||
position: relative;
|
||||
font-weight: 500;
|
||||
|
||||
a {
|
||||
color: $darker-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
&__owner {
|
||||
padding: 8px;
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
time {
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
h1 {
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
color: $primary-text-color;
|
||||
color: $darker-text-color;
|
||||
font-weight: 500;
|
||||
margin-bottom: 20px;
|
||||
padding: 0 10px;
|
||||
|
@ -20,7 +20,7 @@
|
|||
|
||||
small {
|
||||
font-weight: 400;
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
img {
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background-color: lighten($ui-highlight-color, 4%);
|
||||
background-color: lighten($ui-highlight-color, 10%);
|
||||
transition: all 200ms ease-out;
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@
|
|||
}
|
||||
|
||||
&.button-secondary {
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
background: transparent;
|
||||
padding: 3px 15px;
|
||||
border: 1px solid $ui-primary-color;
|
||||
|
@ -92,7 +92,7 @@
|
|||
&:focus,
|
||||
&:hover {
|
||||
border-color: lighten($ui-primary-color, 4%);
|
||||
color: lighten($ui-primary-color, 4%);
|
||||
color: lighten($darker-text-color, 4%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -149,18 +149,18 @@
|
|||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
color: transparentize($lighter-text-color, 0.07);
|
||||
color: darken($lighter-text-color, 7%);
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: opacify($lighter-text-color, 0.07);
|
||||
color: lighten($lighter-text-color, 7%);
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: $highlight-text-color;
|
||||
|
||||
&.disabled {
|
||||
color: opacify($lighter-text-color, 0.13);
|
||||
color: lighten($highlight-text-color, 13%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -193,12 +193,12 @@
|
|||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
color: opacify($lighter-text-color, 0.07);
|
||||
color: darken($lighter-text-color, 7%);
|
||||
transition: color 200ms ease-out;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: transparentize($lighter-text-color, 0.2);
|
||||
color: lighten($lighter-text-color, 20%);
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
|
@ -349,7 +349,7 @@
|
|||
box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4);
|
||||
background: $ui-secondary-color;
|
||||
border-radius: 0 0 4px 4px;
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
font-size: 14px;
|
||||
padding: 6px;
|
||||
|
||||
|
@ -457,7 +457,7 @@
|
|||
|
||||
input {
|
||||
background: transparent;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
@ -471,8 +471,8 @@
|
|||
}
|
||||
|
||||
&::placeholder {
|
||||
opacity: 0.54;
|
||||
color: $darker-text-color;
|
||||
opacity: 0.75;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -556,7 +556,6 @@
|
|||
}
|
||||
|
||||
.emojione {
|
||||
display: inline-block;
|
||||
font-size: inherit;
|
||||
vertical-align: middle;
|
||||
object-fit: contain;
|
||||
|
@ -588,7 +587,7 @@
|
|||
}
|
||||
|
||||
.reply-indicator__display-name {
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
line-height: 24px;
|
||||
|
@ -643,14 +642,14 @@
|
|||
}
|
||||
|
||||
a {
|
||||
color: $ui-secondary-color;
|
||||
color: $secondary-text-color;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
|
||||
.fa {
|
||||
color: lighten($action-button-color, 7%);
|
||||
color: lighten($dark-text-color, 7%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -665,7 +664,7 @@
|
|||
}
|
||||
|
||||
.fa {
|
||||
color: $action-button-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -702,7 +701,7 @@
|
|||
border-radius: 2px;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
font-weight: 700;
|
||||
font-size: 11px;
|
||||
padding: 0 6px;
|
||||
|
@ -769,7 +768,7 @@
|
|||
|
||||
&.light {
|
||||
.status__relative-time {
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
|
||||
.status__display-name {
|
||||
|
@ -782,7 +781,7 @@
|
|||
}
|
||||
|
||||
span {
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -816,13 +815,13 @@
|
|||
}
|
||||
|
||||
.status__relative-time {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.status__display-name {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
.status__info .status__display-name {
|
||||
|
@ -873,14 +872,14 @@
|
|||
|
||||
.status__prepend {
|
||||
margin-left: 68px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
padding: 8px 0;
|
||||
padding-bottom: 2px;
|
||||
font-size: 14px;
|
||||
position: relative;
|
||||
|
||||
.status__display-name strong {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
> span {
|
||||
|
@ -942,7 +941,7 @@
|
|||
|
||||
.detailed-status__meta {
|
||||
margin-top: 15px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
@ -1006,6 +1005,15 @@
|
|||
padding: 10px;
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
|
||||
&.compact {
|
||||
padding: 0;
|
||||
border-bottom: 0;
|
||||
|
||||
.account__avatar-wrapper {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.account__display-name {
|
||||
flex: 1 1 auto;
|
||||
display: block;
|
||||
|
@ -1029,7 +1037,6 @@
|
|||
.account__avatar {
|
||||
@include avatar-radius();
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
|
||||
&-inline {
|
||||
display: inline-block;
|
||||
|
@ -1038,6 +1045,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
a .account__avatar {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.account__avatar-overlay {
|
||||
@include avatar-size(48px);
|
||||
|
||||
|
@ -1079,7 +1090,7 @@
|
|||
}
|
||||
|
||||
.account__header__username {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1089,7 +1100,7 @@
|
|||
}
|
||||
|
||||
.account__header__content {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
.account__header__display-name {
|
||||
|
@ -1117,7 +1128,7 @@
|
|||
.account__disclaimer {
|
||||
padding: 10px;
|
||||
border-top: 1px solid lighten($ui-base-color, 8%);
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
|
||||
strong {
|
||||
font-weight: 500;
|
||||
|
@ -1286,7 +1297,7 @@
|
|||
.status__display-name,
|
||||
.reply-indicator__display-name,
|
||||
.detailed-status__display-name,
|
||||
.account__display-name {
|
||||
a.account__display-name {
|
||||
&:hover strong {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -1304,7 +1315,7 @@
|
|||
}
|
||||
|
||||
.detailed-status__display-name {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
display: block;
|
||||
line-height: 24px;
|
||||
margin-bottom: 15px;
|
||||
|
@ -1339,11 +1350,11 @@
|
|||
.muted {
|
||||
.status__content p,
|
||||
.status__content a {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
.status__display-name strong {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
.status__avatar {
|
||||
|
@ -1351,11 +1362,11 @@
|
|||
}
|
||||
|
||||
a.status__content__spoiler-link {
|
||||
background: $darker-text-color;
|
||||
color: lighten($ui-base-color, 4%);
|
||||
background: $ui-base-lighter-color;
|
||||
color: $inverted-text-color;
|
||||
|
||||
&:hover {
|
||||
background: transparentize($darker-text-color, 0.07);
|
||||
background: lighten($ui-base-lighter-color, 7%);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
@ -1366,7 +1377,7 @@
|
|||
padding: 8px 0;
|
||||
padding-bottom: 0;
|
||||
cursor: default;
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
font-size: 15px;
|
||||
position: relative;
|
||||
|
||||
|
@ -1477,7 +1488,7 @@
|
|||
color: $darker-text-color;
|
||||
|
||||
strong {
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
a {
|
||||
|
@ -1591,7 +1602,7 @@
|
|||
&:hover,
|
||||
&:active {
|
||||
background: $ui-highlight-color;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
@ -1644,7 +1655,7 @@
|
|||
|
||||
&:hover {
|
||||
background: $ui-highlight-color;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1656,7 +1667,7 @@
|
|||
.static-content {
|
||||
padding: 10px;
|
||||
padding-top: 20px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
|
||||
h1 {
|
||||
font-size: 16px;
|
||||
|
@ -1743,7 +1754,7 @@
|
|||
display: block;
|
||||
flex: 1 1 auto;
|
||||
padding: 15px 5px 13px;
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
|
@ -2155,7 +2166,7 @@
|
|||
|
||||
.column-subheading {
|
||||
background: $ui-base-color;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
padding: 8px 20px;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
|
@ -2178,11 +2189,11 @@
|
|||
flex: 1 0 auto;
|
||||
|
||||
p {
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
|
||||
a {
|
||||
color: opacify($darker-text-color, 0.07);
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2263,7 +2274,7 @@
|
|||
font-size: 14px;
|
||||
border: 1px solid lighten($ui-base-color, 8%);
|
||||
border-radius: 4px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
margin-top: 14px;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
|
@ -2343,7 +2354,7 @@ a.status-card {
|
|||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 5px;
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
@ -2357,7 +2368,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.status-card__description {
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
}
|
||||
|
||||
.status-card__host {
|
||||
|
@ -2401,7 +2412,7 @@ a.status-card {
|
|||
|
||||
.load-more {
|
||||
display: block;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
font-size: inherit;
|
||||
|
@ -2425,7 +2436,7 @@ a.status-card {
|
|||
text-align: center;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: opacify($darker-text-color, 0.07);
|
||||
color: $dark-text-color;
|
||||
background: $ui-base-color;
|
||||
cursor: default;
|
||||
display: flex;
|
||||
|
@ -2465,7 +2476,7 @@ a.status-card {
|
|||
strong {
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
|
||||
span {
|
||||
|
@ -2553,13 +2564,13 @@ a.status-card {
|
|||
.column-header__button {
|
||||
background: lighten($ui-base-color, 4%);
|
||||
border: 0;
|
||||
color: $ui-primary-color;
|
||||
color: $darker-text-color;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
padding: 0 15px;
|
||||
|
||||
&:hover {
|
||||
color: lighten($ui-primary-color, 7%);
|
||||
color: lighten($darker-text-color, 7%);
|
||||
}
|
||||
|
||||
&.active {
|
||||
|
@ -2640,7 +2651,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.loading-indicator {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
text-transform: uppercase;
|
||||
|
@ -2737,7 +2748,7 @@ a.status-card {
|
|||
&:active,
|
||||
&:focus {
|
||||
padding: 0;
|
||||
color: transparentize($darker-text-color, 0.07);
|
||||
color: lighten($darker-text-color, 8%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2861,7 +2872,7 @@ a.status-card {
|
|||
|
||||
.empty-column-indicator,
|
||||
.error-column {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
background: $ui-base-color;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
|
@ -3063,7 +3074,7 @@ a.status-card {
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
border: 2px dashed $ui-base-lighter-color;
|
||||
|
@ -3161,7 +3172,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.privacy-dropdown__option {
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
|
@ -3283,7 +3294,7 @@ a.status-card {
|
|||
font-size: 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
color: $ui-secondary-color;
|
||||
color: $secondary-text-color;
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
|
||||
|
@ -3319,7 +3330,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.search-results__header {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
background: lighten($ui-base-color, 2%);
|
||||
border-bottom: 1px solid darken($ui-base-color, 4%);
|
||||
padding: 15px 10px;
|
||||
|
@ -3367,13 +3378,13 @@ a.status-card {
|
|||
.search-results__hashtag {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
color: darken($primary-text-color, 4%);
|
||||
color: $secondary-text-color;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
color: $primary-text-color;
|
||||
color: lighten($secondary-text-color, 4%);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
@ -3638,7 +3649,7 @@ a.status-card {
|
|||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
color: transparentize($lighter-text-color, 0.04);
|
||||
color: darken($lighter-text-color, 4%);
|
||||
background-color: darken($ui-secondary-color, 16%);
|
||||
}
|
||||
|
||||
|
@ -3732,7 +3743,7 @@ a.status-card {
|
|||
strong {
|
||||
font-weight: 500;
|
||||
background: $ui-base-color;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
padding: 3px 6px;
|
||||
|
@ -3792,7 +3803,7 @@ a.status-card {
|
|||
|
||||
&__case {
|
||||
background: $ui-base-color;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-weight: 500;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
|
@ -3809,7 +3820,7 @@ a.status-card {
|
|||
|
||||
.figure {
|
||||
background: darken($ui-base-color, 8%);
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
|
@ -3921,7 +3932,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.status__content__spoiler-link {
|
||||
color: lighten($ui-secondary-color, 8%);
|
||||
color: lighten($secondary-text-color, 8%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4026,6 +4037,10 @@ a.status-card {
|
|||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
|
||||
.status__content a {
|
||||
color: $highlight-text-color;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
max-height: 10vh;
|
||||
}
|
||||
|
@ -4151,7 +4166,7 @@ a.status-card {
|
|||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
color: transparentize($lighter-text-color, 0.04);
|
||||
color: darken($lighter-text-color, 4%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4232,7 +4247,7 @@ a.status-card {
|
|||
|
||||
&__icon {
|
||||
flex: 0 0 auto;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
padding: 8px 18px;
|
||||
cursor: default;
|
||||
border-right: 1px solid lighten($ui-base-color, 8%);
|
||||
|
@ -4262,7 +4277,7 @@ a.status-card {
|
|||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
font-weight: 500;
|
||||
|
||||
&:hover {
|
||||
|
@ -4281,7 +4296,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.fa {
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4317,7 +4332,7 @@ a.status-card {
|
|||
cursor: zoom-in;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: $ui-secondary-color;
|
||||
color: $secondary-text-color;
|
||||
line-height: 0;
|
||||
|
||||
&,
|
||||
|
@ -4431,6 +4446,8 @@ a.status-card {
|
|||
video {
|
||||
max-width: 100% !important;
|
||||
max-height: 100% !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4488,7 +4505,7 @@ a.status-card {
|
|||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
color: transparentize($darker-text-color, 0.07);
|
||||
color: lighten($darker-text-color, 7%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4693,7 +4710,7 @@ a.status-card {
|
|||
&:active,
|
||||
&:focus {
|
||||
outline: 0;
|
||||
color: transparentize($darker-text-color, 0.07);
|
||||
color: $secondary-text-color;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
|
@ -4733,7 +4750,7 @@ a.status-card {
|
|||
position: relative;
|
||||
|
||||
&.active {
|
||||
color: transparentize($darker-text-color, 0.07);
|
||||
color: $secondary-text-color;
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
|
@ -4768,12 +4785,12 @@ a.status-card {
|
|||
padding: 10px 14px;
|
||||
padding-bottom: 14px;
|
||||
margin-top: 10px;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
||||
|
||||
h4 {
|
||||
text-transform: uppercase;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 10px;
|
||||
|
@ -4805,7 +4822,7 @@ noscript {
|
|||
div {
|
||||
font-size: 14px;
|
||||
margin: 30px auto;
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
max-width: 400px;
|
||||
|
||||
a {
|
||||
|
@ -4958,7 +4975,7 @@ noscript {
|
|||
&__message {
|
||||
position: relative;
|
||||
margin-left: 58px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
padding: 8px 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 4px;
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
|
||||
.name {
|
||||
flex: 1 1 auto;
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
width: calc(100% - 88px);
|
||||
|
||||
.username {
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
color: opacify($lighter-text-color, 0.04);
|
||||
color: darken($lighter-text-color, 4%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,7 @@
|
|||
font-size: 14px;
|
||||
text-align: center;
|
||||
padding-top: 70px;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
|
||||
.emoji-mart-category-label {
|
||||
display: none;
|
||||
|
|
|
@ -248,7 +248,7 @@ code {
|
|||
}
|
||||
|
||||
&:required:valid {
|
||||
border-bottom-color: lighten($error-red, 12%);
|
||||
border-bottom-color: $valid-value-color;
|
||||
}
|
||||
|
||||
&:active,
|
||||
|
@ -266,7 +266,7 @@ code {
|
|||
input[type=text],
|
||||
input[type=email],
|
||||
input[type=password] {
|
||||
border-bottom-color: lighten($error-red, 12%);
|
||||
border-bottom-color: $valid-value-color;
|
||||
}
|
||||
|
||||
.error {
|
||||
|
@ -356,7 +356,7 @@ code {
|
|||
padding: 7px 4px;
|
||||
padding-bottom: 9px;
|
||||
font-size: 16px;
|
||||
color: $darker-text-color;
|
||||
color: $dark-text-color;
|
||||
font-family: inherit;
|
||||
pointer-events: none;
|
||||
cursor: default;
|
||||
|
@ -446,7 +446,7 @@ code {
|
|||
}
|
||||
|
||||
strong {
|
||||
color: $primary-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-weight: 500;
|
||||
|
||||
@each $lang in $cjk-langs {
|
||||
|
@ -483,7 +483,7 @@ code {
|
|||
|
||||
.qr-alternative {
|
||||
margin-bottom: 20px;
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
flex: 150px;
|
||||
|
||||
samp {
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
padding: 14px;
|
||||
border-radius: 4px;
|
||||
background: rgba(darken($ui-base-color, 7%), 0.8);
|
||||
color: $darker-text-color;
|
||||
color: $secondary-text-color;
|
||||
font-weight: 400;
|
||||
margin-bottom: 20px;
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
display: block;
|
||||
max-width: 100%;
|
||||
padding-right: 25px;
|
||||
color: $lighter-text-color;
|
||||
color: $inverted-text-color;
|
||||
}
|
||||
|
||||
.status__avatar {
|
||||
|
@ -134,7 +134,7 @@
|
|||
|
||||
span {
|
||||
font-size: 14px;
|
||||
color: $inverted-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@
|
|||
|
||||
span {
|
||||
font-size: 14px;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -225,7 +225,7 @@
|
|||
|
||||
.detailed-status__meta {
|
||||
margin-top: 15px;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
|
||||
|
@ -270,7 +270,7 @@
|
|||
padding-left: (48px + 14px * 2);
|
||||
padding-bottom: 0;
|
||||
margin-bottom: -4px;
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
font-size: 14px;
|
||||
position: relative;
|
||||
|
||||
|
@ -280,7 +280,7 @@
|
|||
}
|
||||
|
||||
.status__display-name.muted strong {
|
||||
color: $lighter-text-color;
|
||||
color: $light-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -293,7 +293,7 @@
|
|||
}
|
||||
|
||||
.more {
|
||||
color: $classic-primary-color;
|
||||
color: $darker-text-color;
|
||||
display: block;
|
||||
padding: 14px;
|
||||
text-align: center;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
vertical-align: top;
|
||||
border-top: 1px solid $ui-base-color;
|
||||
text-align: left;
|
||||
background: darken($ui-base-color, 4%);
|
||||
}
|
||||
|
||||
& > thead > tr > th {
|
||||
|
@ -48,12 +49,41 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.inline-table > tbody > tr:nth-child(odd) > td,
|
||||
&.inline-table > tbody > tr:nth-child(odd) > th {
|
||||
&.inline-table {
|
||||
& > tbody > tr:nth-child(odd) {
|
||||
& > td,
|
||||
& > th {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
& > tbody > tr:first-child {
|
||||
& > td,
|
||||
& > th {
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.batch-table {
|
||||
& > thead > tr > th {
|
||||
background: $ui-base-color;
|
||||
border-top: 1px solid darken($ui-base-color, 8%);
|
||||
border-bottom: 1px solid darken($ui-base-color, 8%);
|
||||
|
||||
&:first-child {
|
||||
border-radius: 4px 0 0;
|
||||
border-left: 1px solid darken($ui-base-color, 8%);
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 4px 0 0;
|
||||
border-right: 1px solid darken($ui-base-color, 8%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.table-wrapper {
|
||||
overflow: auto;
|
||||
margin-bottom: 20px;
|
||||
|
@ -63,6 +93,13 @@ samp {
|
|||
font-family: 'mastodon-font-monospace', monospace;
|
||||
}
|
||||
|
||||
button.table-action-link {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
button.table-action-link,
|
||||
a.table-action-link {
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
|
@ -79,4 +116,77 @@ a.table-action-link {
|
|||
font-weight: 400;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.batch-table {
|
||||
&__toolbar,
|
||||
&__row {
|
||||
display: flex;
|
||||
|
||||
&__select {
|
||||
box-sizing: border-box;
|
||||
padding: 8px 16px;
|
||||
cursor: pointer;
|
||||
min-height: 100%;
|
||||
|
||||
input {
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
&__actions,
|
||||
&__content {
|
||||
padding: 8px 0;
|
||||
padding-right: 16px;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
}
|
||||
|
||||
&__toolbar {
|
||||
border: 1px solid darken($ui-base-color, 8%);
|
||||
background: $ui-base-color;
|
||||
border-radius: 4px 0 0;
|
||||
height: 47px;
|
||||
align-items: center;
|
||||
|
||||
&__actions {
|
||||
text-align: right;
|
||||
padding-right: 16px - 5px;
|
||||
}
|
||||
}
|
||||
|
||||
&__row {
|
||||
border: 1px solid darken($ui-base-color, 8%);
|
||||
border-top: 0;
|
||||
background: darken($ui-base-color, 4%);
|
||||
|
||||
&:hover {
|
||||
background: darken($ui-base-color, 2%);
|
||||
}
|
||||
|
||||
&:nth-child(even) {
|
||||
background: $ui-base-color;
|
||||
|
||||
&:hover {
|
||||
background: lighten($ui-base-color, 2%);
|
||||
}
|
||||
}
|
||||
|
||||
&__content {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.status__content {
|
||||
padding-top: 0;
|
||||
|
||||
strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,12 +17,6 @@ $base-shadow-color: $black !default;
|
|||
$base-overlay-background: $black !default;
|
||||
$base-border-color: $white !default;
|
||||
$simple-background-color: $white !default;
|
||||
$primary-text-color: $white !default;
|
||||
$darker-text-color: rgba($primary-text-color, 0.7) !default;
|
||||
$highlight-text-color: $classic-highlight-color !default;
|
||||
$inverted-text-color: $black !default;
|
||||
$lighter-text-color: rgba($inverted-text-color, 0.7) !default;
|
||||
$action-button-color: #8d9ac2;
|
||||
$valid-value-color: $success-green !default;
|
||||
$error-value-color: $error-red !default;
|
||||
|
||||
|
@ -31,7 +25,19 @@ $ui-base-color: $classic-base-color !default; // Darkest
|
|||
$ui-base-lighter-color: lighten($ui-base-color, 26%) !default; // Lighter darkest
|
||||
$ui-primary-color: $classic-primary-color !default; // Lighter
|
||||
$ui-secondary-color: $classic-secondary-color !default; // Lightest
|
||||
$ui-highlight-color: #2b5fd9;
|
||||
$ui-highlight-color: $classic-highlight-color !default;
|
||||
|
||||
// Variables for texts
|
||||
$primary-text-color: $white !default;
|
||||
$darker-text-color: $ui-primary-color !default;
|
||||
$dark-text-color: $ui-base-lighter-color !default;
|
||||
$secondary-text-color: $ui-secondary-color !default;
|
||||
$highlight-text-color: $ui-highlight-color !default;
|
||||
$action-button-color: $ui-base-lighter-color !default;
|
||||
// For texts on inverted backgrounds
|
||||
$inverted-text-color: $ui-base-color !default;
|
||||
$lighter-text-color: $ui-base-lighter-color !default;
|
||||
$light-text-color: $ui-primary-color !default;
|
||||
|
||||
// Language codes that uses CJK fonts
|
||||
$cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue