fix mess footer

This commit is contained in:
Baptiste Lemoine 2020-02-01 17:29:30 +01:00
commit c246d20d80
489 changed files with 21846 additions and 6315 deletions

View File

@ -3,7 +3,7 @@ version: 2
aliases: aliases:
- &defaults - &defaults
docker: docker:
- image: circleci/ruby:2.6-stretch-node - image: circleci/ruby:2.7-buster-node
environment: &ruby_environment environment: &ruby_environment
BUNDLE_APP_CONFIG: ./.bundle/ BUNDLE_APP_CONFIG: ./.bundle/
DB_HOST: localhost DB_HOST: localhost
@ -39,7 +39,6 @@ aliases:
steps: steps:
- checkout - checkout
- *attach_workspace - *attach_workspace
- restore_cache: - restore_cache:
keys: keys:
- v1-node-dependencies-{{ checksum "yarn.lock" }} - v1-node-dependencies-{{ checksum "yarn.lock" }}
@ -49,7 +48,6 @@ aliases:
key: v1-node-dependencies-{{ checksum "yarn.lock" }} key: v1-node-dependencies-{{ checksum "yarn.lock" }}
paths: paths:
- ./node_modules/ - ./node_modules/
- *persist_to_workspace - *persist_to_workspace
- &install_system_dependencies - &install_system_dependencies
@ -58,16 +56,25 @@ aliases:
command: | command: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
## TODO: FIX THESE BUSTER DEPENDANCES
sudo wget http://ftp.au.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u3_amd64.deb
sudo dpkg -i libicu57_57.1-6+deb9u3_amd64.deb
sudo wget http://ftp.au.debian.org/debian/pool/main/p/protobuf/libprotobuf10_3.0.0-9_amd64.deb
sudo dpkg -i libprotobuf10_3.0.0-9_amd64.deb
- &install_ruby_dependencies - &install_ruby_dependencies
steps: steps:
- *attach_workspace - *attach_workspace
- *install_system_dependencies - *install_system_dependencies
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- *restore_ruby_dependencies - *restore_ruby_dependencies
- run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production && bundle clean - run: bundle config set clean 'true'
- run: bundle config set deployment 'true'
- run: bundle config set with 'pam_authentication'
- run: bundle config set without 'development production'
- run: bundle config set frozen 'true'
- run: bundle install --jobs 16 --retry 3 && bundle clean
- save_cache: - save_cache:
key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }} key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
paths: paths:
@ -82,10 +89,8 @@ aliases:
- &test_steps - &test_steps
steps: steps:
- *attach_workspace - *attach_workspace
- *install_system_dependencies - *install_system_dependencies
- run: sudo apt-get install -y ffmpeg - run: sudo apt-get install -y ffmpeg
- run: - run:
name: Prepare Tests name: Prepare Tests
command: ./bin/rails parallel:create parallel:load_schema parallel:prepare command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
@ -98,21 +103,21 @@ jobs:
<<: *defaults <<: *defaults
<<: *install_steps <<: *install_steps
install-ruby2.7:
<<: *defaults
<<: *install_ruby_dependencies
install-ruby2.6: install-ruby2.6:
<<: *defaults <<: *defaults
docker:
- image: circleci/ruby:2.6-buster-node
environment: *ruby_environment
<<: *install_ruby_dependencies <<: *install_ruby_dependencies
install-ruby2.5: install-ruby2.5:
<<: *defaults <<: *defaults
docker: docker:
- image: circleci/ruby:2.5-stretch-node - image: circleci/ruby:2.5-buster-node
environment: *ruby_environment
<<: *install_ruby_dependencies
install-ruby2.4:
<<: *defaults
docker:
- image: circleci/ruby:2.4-stretch-node
environment: *ruby_environment environment: *ruby_environment
<<: *install_ruby_dependencies <<: *install_ruby_dependencies
@ -128,10 +133,40 @@ jobs:
- ./mastodon/public/assets - ./mastodon/public/assets
- ./mastodon/public/packs-test/ - ./mastodon/public/packs-test/
test-migrations:
<<: *defaults
docker:
- image: circleci/ruby:2.7-buster-node
environment: *ruby_environment
- image: circleci/postgres:10.6-alpine
environment:
POSTGRES_USER: root
- image: circleci/redis:5-alpine
steps:
- *attach_workspace
- *install_system_dependencies
- run:
name: Create database
command: ./bin/rails parallel:create
- run:
name: Run migrations
command: ./bin/rails parallel:migrate
test-ruby2.7:
<<: *defaults
docker:
- image: circleci/ruby:2.7-buster-node
environment: *ruby_environment
- image: circleci/postgres:10.6-alpine
environment:
POSTGRES_USER: root
- image: circleci/redis:5-alpine
<<: *test_steps
test-ruby2.6: test-ruby2.6:
<<: *defaults <<: *defaults
docker: docker:
- image: circleci/ruby:2.6-stretch-node - image: circleci/ruby:2.6-buster-node
environment: *ruby_environment environment: *ruby_environment
- image: circleci/postgres:10.6-alpine - image: circleci/postgres:10.6-alpine
environment: environment:
@ -142,18 +177,7 @@ jobs:
test-ruby2.5: test-ruby2.5:
<<: *defaults <<: *defaults
docker: docker:
- image: circleci/ruby:2.5-stretch-node - image: circleci/ruby:2.5-buster-node
environment: *ruby_environment
- image: circleci/postgres:10.6-alpine
environment:
POSTGRES_USER: root
- image: circleci/redis:5-alpine
<<: *test_steps
test-ruby2.4:
<<: *defaults
docker:
- image: circleci/ruby:2.4-stretch-node
environment: *ruby_environment environment: *ruby_environment
- image: circleci/postgres:10.6-alpine - image: circleci/postgres:10.6-alpine
environment: environment:
@ -164,7 +188,7 @@ jobs:
test-webui: test-webui:
<<: *defaults <<: *defaults
docker: docker:
- image: circleci/node:12.9-stretch - image: circleci/node:12-buster
steps: steps:
- *attach_workspace - *attach_workspace
- run: ./bin/retry yarn test:jest - run: ./bin/retry yarn test:jest
@ -184,20 +208,27 @@ workflows:
build-and-test: build-and-test:
jobs: jobs:
- install - install
- install-ruby2.7:
requires:
- install
- install-ruby2.6: - install-ruby2.6:
requires: requires:
- install - install
- install-ruby2.7
- install-ruby2.5: - install-ruby2.5:
requires: requires:
- install - install
- install-ruby2.6 - install-ruby2.7
- install-ruby2.4:
requires:
- install
- install-ruby2.6
- build: - build:
requires: requires:
- install-ruby2.6 - install-ruby2.7
- test-migrations:
requires:
- install-ruby2.7
- test-ruby2.7:
requires:
- install-ruby2.7
- build
- test-ruby2.6: - test-ruby2.6:
requires: requires:
- install-ruby2.6 - install-ruby2.6
@ -206,13 +237,9 @@ workflows:
requires: requires:
- install-ruby2.5 - install-ruby2.5
- build - build
- test-ruby2.4:
requires:
- install-ruby2.4
- build
- test-webui: - test-webui:
requires: requires:
- install - install
- check-i18n: - check-i18n:
requires: requires:
- install-ruby2.6 - install-ruby2.7

View File

@ -231,8 +231,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
# Optional SAML authentication (cf. omniauth-saml) # Optional SAML authentication (cf. omniauth-saml)
# SAML_ENABLED=true # SAML_ENABLED=true
# SAML_ACS_URL= # SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback
# SAML_ISSUER=http://localhost:3000/auth/auth/saml/callback # SAML_ISSUER=https://example.com
# SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO # SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO
# SAML_IDP_CERT= # SAML_IDP_CERT=
# SAML_IDP_CERT_FINGERPRINT= # SAML_IDP_CERT_FINGERPRINT=

View File

@ -226,8 +226,8 @@ STREAMING_CLUSTER_NUM=1
# Optional SAML authentication (cf. omniauth-saml) # Optional SAML authentication (cf. omniauth-saml)
# SAML_ENABLED=true # SAML_ENABLED=true
# SAML_ACS_URL= # SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback
# SAML_ISSUER=http://localhost:3000/auth/auth/saml/callback # SAML_ISSUER=https://example.com
# SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO # SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO
# SAML_IDP_CERT= # SAML_IDP_CERT=
# SAML_IDP_CERT_FINGERPRINT= # SAML_IDP_CERT_FINGERPRINT=
@ -250,3 +250,13 @@ STREAMING_CLUSTER_NUM=1
# http_proxy=http://gateway.local:8118 # http_proxy=http://gateway.local:8118
# Access control for hidden service. # Access control for hidden service.
# ALLOW_ACCESS_TO_HIDDEN_SERVICE=true # ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
# Authorized fetch mode (optional)
# Require remote servers to authentify when fetching toots, see
# https://docs.joinmastodon.org/admin/config/#authorized_fetch
# AUTHORIZED_FETCH=true
# Whitelist mode (optional)
# Only allow federation with whitelisted domains, see
# https://docs.joinmastodon.org/admin/config/#whitelist_mode
# WHITELIST_MODE=true

2
.nvmrc
View File

@ -1 +1 @@
8 12

View File

@ -3,6 +3,162 @@ Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## Unreleased
### Added
- Add bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/7107), [Gargron](https://github.com/tootsuite/mastodon/pull/12494), [Gomasy](https://github.com/tootsuite/mastodon/pull/12381))
- Add announcements ([Gargron](https://github.com/tootsuite/mastodon/pull/12662), [Gargron](https://github.com/tootsuite/mastodon/pull/12967), [Gargron](https://github.com/tootsuite/mastodon/pull/12970), [Gargron](https://github.com/tootsuite/mastodon/pull/12963), [Gargron](https://github.com/tootsuite/mastodon/pull/12950), [Gargron](https://github.com/tootsuite/mastodon/pull/12990), [Gargron](https://github.com/tootsuite/mastodon/pull/12949), [Gargron](https://github.com/tootsuite/mastodon/pull/12989), [Gargron](https://github.com/tootsuite/mastodon/pull/12964), [Gargron](https://github.com/tootsuite/mastodon/pull/12965), [ThibG](https://github.com/tootsuite/mastodon/pull/12958), [ThibG](https://github.com/tootsuite/mastodon/pull/12957), [Gargron](https://github.com/tootsuite/mastodon/pull/12955), [ThibG](https://github.com/tootsuite/mastodon/pull/12946), [ThibG](https://github.com/tootsuite/mastodon/pull/12954))
- Add number animations in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12948), [Gargron](https://github.com/tootsuite/mastodon/pull/12971))
- Add `kab`, `is`, `kn`, `mr`, `ur` to available locales ([Gargron](https://github.com/tootsuite/mastodon/pull/12882), [BoFFire](https://github.com/tootsuite/mastodon/pull/12962), [Gargron](https://github.com/tootsuite/mastodon/pull/12379))
- Add profile filter category ([ThibG](https://github.com/tootsuite/mastodon/pull/12918))
- Add ability to add oneself to lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12271))
- Add hint how to contribute translations to preferences page ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12736))
- Add signatures to statuses in archive takeout ([noellabo](https://github.com/tootsuite/mastodon/pull/12649))
- Add support for `magnet:` and `xmpp` links ([ThibG](https://github.com/tootsuite/mastodon/pull/12905), [ThibG](https://github.com/tootsuite/mastodon/pull/12709))
- Add `follow_request` notification type ([ThibG](https://github.com/tootsuite/mastodon/pull/12198))
- Add ability to filter reports by account domain in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12154))
- Add link to search for users connected from the same IP address to admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12157))
- Add link to reports targeting a specific domain in admin view ([ThibG](https://github.com/tootsuite/mastodon/pull/12513))
- Add support for EventSource streaming in web UI ([BenLubar](https://github.com/tootsuite/mastodon/pull/12887))
- Add hotkey for opening media attachments in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12498), [Kjwon15](https://github.com/tootsuite/mastodon/pull/12546))
- Add relationship-based options to status dropdowns in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12377), [ThibG](https://github.com/tootsuite/mastodon/pull/12535), [Gargron](https://github.com/tootsuite/mastodon/pull/12430))
- Add support for submitting media description with `ctrl`+`enter` in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12272))
- Add download button to audio and video players in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12179))
- Add setting for whether to crop images in timelines in web UI ([duxovni](https://github.com/tootsuite/mastodon/pull/12126))
- Add support for `Event` activities ([tcitworld](https://github.com/tootsuite/mastodon/pull/12637))
- Add basic support for `Group` actors ([noellabo](https://github.com/tootsuite/mastodon/pull/12071))
- Add `S3_OVERRIDE_PATH_STYLE` environment variable ([Gargron](https://github.com/tootsuite/mastodon/pull/12594))
- Add `S3_OPEN_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/12459))
- Add `LDAP_MAIL` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12053))
- Add `LDAP_UID_CONVERSION_ENABLED` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12461))
- Add `--remote-only` option to `tootctl emoji purge` ([ThibG](https://github.com/tootsuite/mastodon/pull/12810))
- Add `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/12568), [Gargron](https://github.com/tootsuite/mastodon/pull/12571))
- Add `tootctl media lookup` command ([irlcatgirl](https://github.com/tootsuite/mastodon/pull/12283))
- Add cache for OEmbed endpoints to avoid extra HTTP requests ([Gargron](https://github.com/tootsuite/mastodon/pull/12403))
- Add support for KaiOS arrow navigation to public pages ([nolanlawson](https://github.com/tootsuite/mastodon/pull/12251))
- Add `discoverable` to accounts in REST API ([trwnh](https://github.com/tootsuite/mastodon/pull/12508))
- Add admin setting to disable default follows ([ArisuOngaku](https://github.com/tootsuite/mastodon/pull/12566))
- Add support for LDAP and PAM in the OAuth password grant strategy ([ntl-purism](https://github.com/tootsuite/mastodon/pull/12390))
- Allow support for `Accept`/`Reject` activities with a non-embedded object ([puckipedia](https://github.com/tootsuite/mastodon/pull/12199))
### Changed
- Change `last_status_at` to be a date, not datetime in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12966))
- Change followers page to relationships page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12927), [Gargron](https://github.com/tootsuite/mastodon/pull/12934))
- Change reported media attachments to always be hidden in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12879), [ThibG](https://github.com/tootsuite/mastodon/pull/12907))
- Change string from "Disable" to "Disable login" in admin UI ([nileshkumar](https://github.com/tootsuite/mastodon/pull/12201))
- Change report page structure in admin UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12615))
- Change swipe sensitivity to be lower on small screens in web UI ([umonaca](https://github.com/tootsuite/mastodon/pull/12168))
- Change audio/video playback to stop playback when out of view in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12486))
- Change media description label based on upload type in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12270))
- Change large numbers to render without decimal units in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12706))
- Change "Add a choice" button to be disabled rather than hidden when poll limit reached in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12319), [hinaloe](https://github.com/tootsuite/mastodon/pull/12544))
- Change `tootctl statuses remove` to keep statuses favourited or bookmarked by local users ([ThibG](https://github.com/tootsuite/mastodon/pull/11267), [Gomasy](https://github.com/tootsuite/mastodon/pull/12818))
- Change domain block behavior to update user records (fast) before deleting data (slower) ([ThibG](https://github.com/tootsuite/mastodon/pull/12247))
- Change behaviour to strip audio metadata on uploads ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12171))
- Change accepted length of remote media descriptions from 420 to 1,500 characters ([ThibG](https://github.com/tootsuite/mastodon/pull/12262))
- Change preferences pages structure ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12497), [mayaeh](https://github.com/tootsuite/mastodon/pull/12517), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12801), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12797), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12799), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12793))
- Change format of titles in RSS ([devkral](https://github.com/tootsuite/mastodon/pull/8596))
- Change favourite icon animation from spring-based motion to CSS animation in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12175))
- Change minimum required Node.js version to 10, and default to 12 ([Shleeble](https://github.com/tootsuite/mastodon/pull/12791), [mkody](https://github.com/tootsuite/mastodon/pull/12906), [Shleeble](https://github.com/tootsuite/mastodon/pull/12703))
- Change spam check to exempt server staff ([ThibG](https://github.com/tootsuite/mastodon/pull/12874))
- Change to fallback to to `Create` audience when `object` has no defined audience ([ThibG](https://github.com/tootsuite/mastodon/pull/12249))
- Change Twemoji library to 12.1.3 in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/12342))
- Change blocked users to be hidden from following/followers lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12733))
### Removed
- Remove unused dependencies ([ykzts](https://github.com/tootsuite/mastodon/pull/12861), [mayaeh](https://github.com/tootsuite/mastodon/pull/12826), [ThibG](https://github.com/tootsuite/mastodon/pull/12822), [ykzts](https://github.com/tootsuite/mastodon/pull/12533))
### Fixed
- Fix some translatable strings being used wrongly ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12569), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12589), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12502), [mayaeh](https://github.com/tootsuite/mastodon/pull/12231))
- Fix headline of public timeline page when set to local-only ([ykzts](https://github.com/tootsuite/mastodon/pull/12224))
- Fix space between tabs not being spread evenly in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12944), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12961), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12446))
- Fix interactive delays in database migrations with no TTY ([Gargron](https://github.com/tootsuite/mastodon/pull/12969))
- Fix status overflowing in report dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12959))
- Fix unlocalized dropdown button title in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12947))
- Fix media attachments without file being uploadable ([Gargron](https://github.com/tootsuite/mastodon/pull/12562))
- Fix unfollow confirmations in profile directory in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12922))
- Fix duplicate `description` meta tag on accounts public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/12923))
- Fix slow query of federated timeline ([notozeki](https://github.com/tootsuite/mastodon/pull/12886))
- Fix not all of account's active IPs showing up in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12909), [Gargron](https://github.com/tootsuite/mastodon/pull/12943))
- Fix search by IP not using alternative browser sessions in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12904))
- Fix “X new items” not showing up for slow mode on empty timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12875))
- Fix OEmbed endpoint being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12864))
- Fix proofs API being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12495))
- Fix Ruby 2.7 incompatibilities ([ThibG](https://github.com/tootsuite/mastodon/pull/12831), [ThibG](https://github.com/tootsuite/mastodon/pull/12824), [Shleeble](https://github.com/tootsuite/mastodon/pull/12759), [zunda](https://github.com/tootsuite/mastodon/pull/12769))
- Fix invalid poll votes being accepted in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12601))
- Fix old migrations failing because of strong migrations update ([ThibG](https://github.com/tootsuite/mastodon/pull/12787), [ThibG](https://github.com/tootsuite/mastodon/pull/12692))
- Fix reuse of detailed status components in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12792))
- Fix base64-encoded file uploads not being possible in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/12748), [Gargron](https://github.com/tootsuite/mastodon/pull/12857))
- Fix resource_owner_from_credentials in Doorkeeper initializer ([Gargron](https://github.com/tootsuite/mastodon/pull/12743))
- Fix error due to missing authentication call in filters controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12746))
- Fix uncaught unknown format error in host meta controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12747))
- Fix URL search not returning private toots user has access to ([ThibG](https://github.com/tootsuite/mastodon/pull/12742), [ThibG](https://github.com/tootsuite/mastodon/pull/12336))
- Fix cache digesting log noise on status embeds ([Gargron](https://github.com/tootsuite/mastodon/pull/12750))
- Fix slowness due to layout thrashing when reloading a large set of statuses in web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12661), [panarom](https://github.com/tootsuite/mastodon/pull/12744), [Gargron](https://github.com/tootsuite/mastodon/pull/12712))
- Fix error when fetching followers/following from REST API when user has network hidden ([Gargron](https://github.com/tootsuite/mastodon/pull/12716))
- Fix IDN mentions not being processed, IDN domains not being rendered ([Gargron](https://github.com/tootsuite/mastodon/pull/12715))
- Fix error when searching for empty phrase ([Gargron](https://github.com/tootsuite/mastodon/pull/12711))
- Fix backups stopping due to read timeouts ([chr-1x](https://github.com/tootsuite/mastodon/pull/12281))
- Fix batch actions on non-pending tags in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12537))
- Fix sample `SAML_ACS_URL`, `SAML_ISSUER` ([orlea](https://github.com/tootsuite/mastodon/pull/12669))
- Fix manual scrolling issue on Firefox/Windows in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12648))
- Fix archive takeout failing if total dump size exceeds 2GB ([scd31](https://github.com/tootsuite/mastodon/pull/12602), [Gargron](https://github.com/tootsuite/mastodon/pull/12653))
- Fix custom emoji category creation silently erroring out on duplicate category ([ThibG](https://github.com/tootsuite/mastodon/pull/12647))
- Fix link crawler not specifying preferred content type ([ThibG](https://github.com/tootsuite/mastodon/pull/12646))
- Fix featured hashtag setting page erroring out instead of rejecting invalid tags ([ThibG](https://github.com/tootsuite/mastodon/pull/12436))
- Fix tooltip messages of single/multiple-choice polls switcher being reversed in web UI ([acid-chicken](https://github.com/tootsuite/mastodon/pull/12616))
- Fix typo in help text of `tootctl statuses remove` ([trwnh](https://github.com/tootsuite/mastodon/pull/12603))
- Fix generic HTTP 500 error on duplicate records ([Gargron](https://github.com/tootsuite/mastodon/pull/12563))
- Fix old migration failing with new status default scope ([ThibG](https://github.com/tootsuite/mastodon/pull/12493))
- Fix errors when using search API with no query ([Gargron](https://github.com/tootsuite/mastodon/pull/12541), [trwnh](https://github.com/tootsuite/mastodon/pull/12549))
- Fix poll options not being selectable via keyboard in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12538))
- Fix conversations not having an unread indicator in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12506))
- Fix lost focus when modals open/close in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12437))
- Fix pending upload count not being decremented on error in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12499))
- Fix empty poll options not being removed on remote poll update ([ThibG](https://github.com/tootsuite/mastodon/pull/12484))
- Fix OCR with delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12465))
- Fix blur behind closed registration message ([ThibG](https://github.com/tootsuite/mastodon/pull/12442))
- Fix OEmbed discovery not handling different URL variants in query ([Gargron](https://github.com/tootsuite/mastodon/pull/12439))
- Fix link crawler crashing on `<a>` tags without `href` ([ThibG](https://github.com/tootsuite/mastodon/pull/12159))
- Fix whitelisted subdomains being ignored in whitelist mode ([noiob](https://github.com/tootsuite/mastodon/pull/12435))
- Fix broken audit log in whitelist mode in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12303))
- Fix unread indicator not honoring "Only media" option in local and federated timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12330))
- Fix error when rebuilding home feeds ([dariusk](https://github.com/tootsuite/mastodon/pull/12324))
- Fix relationship caches being broken as result of a follow request ([ThibG](https://github.com/tootsuite/mastodon/pull/12299))
- Fix more items than the limit being uploadable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12300))
- Fix various issues with account migration ([ThibG](https://github.com/tootsuite/mastodon/pull/12301))
- Fix filtered out items being counted as pending items in slow mode in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12266))
- Fix notification filters not applying to poll options ([ThibG](https://github.com/tootsuite/mastodon/pull/12269))
- Fix notification message for user's own poll saying it's a poll they voted on in web UI ([ykzts](https://github.com/tootsuite/mastodon/pull/12219))
- Fix polls with an expiration not showing up as expired in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12222))
- Fix volume slider having an offset between cursor and slider in Chromium in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12158))
- Fix Vagrant image not accepting connections ([shrft](https://github.com/tootsuite/mastodon/pull/12180))
- Fix batch actions being hidden on small screens in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12183))
- Fix incoming federation not working in whitelist mode ([ThibG](https://github.com/tootsuite/mastodon/pull/12185))
- Fix error when passing empty `source` param to `PUT /api/v1/accounts/update_credentials` ([jglauche](https://github.com/tootsuite/mastodon/pull/12259))
- Fix HTTP-based streaming API being cacheable by proxies ([BenLubar](https://github.com/tootsuite/mastodon/pull/12945))
- Fix users being able to register while `tootctl self-destruct` is in progress ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12877))
- Fix microformats detection in link crawler not ignoring `h-card` links ([nightpool](https://github.com/tootsuite/mastodon/pull/12189))
- Fix outline on full-screen video in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12176))
- Fix TLD domain blocks not being editable ([ThibG](https://github.com/tootsuite/mastodon/pull/12805))
- Fix Nanobox deploy hooks ([danhunsaker](https://github.com/tootsuite/mastodon/pull/12663))
- Fix needlessly complicated SQL query when performing account search amongst followings ([ThibG](https://github.com/tootsuite/mastodon/pull/12302))
- Fix favourites count not updating when unfavouriting in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12140))
- Fix occasional crash on scroll in Chromium in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12274))
- Fix intersection observer not working in single-column mode web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12735))
- Fix voting issue with remote polls that contain trailing spaces ([ThibG](https://github.com/tootsuite/mastodon/pull/12515))
- Fix dynamic elements not working in pgHero due to CSP rules ([ykzts](https://github.com/tootsuite/mastodon/pull/12489))
- Fix overly verbose backtraces when delivering ActivityPub payloads ([zunda](https://github.com/tootsuite/mastodon/pull/12798))
### Security
- Fix OEmbed leaking information about existence of non-public statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/12930))
- Fix password change/reset not immediately invalidating other sessions ([Gargron](https://github.com/tootsuite/mastodon/pull/12928))
- Fix settings pages being cacheable by the browser ([Gargron](https://github.com/tootsuite/mastodon/pull/12714))
## [3.0.1] - 2019-10-10 ## [3.0.1] - 2019-10-10
### Added ### Added

View File

@ -4,7 +4,7 @@ FROM ubuntu:18.04 as build-dep
SHELL ["bash", "-c"] SHELL ["bash", "-c"]
# Install Node v12 (LTS) # Install Node v12 (LTS)
ENV NODE_VER="12.13.1" ENV NODE_VER="12.14.0"
RUN echo "Etc/UTC" > /etc/localtime && \ RUN echo "Etc/UTC" > /etc/localtime && \
apt update && \ apt update && \
apt -y install wget python && \ apt -y install wget python && \
@ -58,7 +58,9 @@ RUN npm install -g yarn && \
COPY Gemfile* package.json yarn.lock /opt/mastodon/ COPY Gemfile* package.json yarn.lock /opt/mastodon/
RUN cd /opt/mastodon && \ RUN cd /opt/mastodon && \
bundle install -j$(nproc) --deployment --without development test && \ bundle config set deployment 'true' && \
bundle config set without 'development test' && \
bundle install -j$(nproc) && \
yarn install --pure-lockfile yarn install --pure-lockfile
FROM ubuntu:18.04 FROM ubuntu:18.04

46
Gemfile
View File

@ -1,22 +1,26 @@
# frozen_string_literal: true # frozen_string_literal: true
source 'https://rubygems.org' source 'https://rubygems.org'
ruby '>= 2.4.0', '< 2.7.0' ruby '>= 2.4.0', '< 3.0.0'
gem 'pkg-config', '~> 1.4' gem 'pkg-config', '~> 1.4'
gem 'puma', '~> 4.3' gem 'puma', '~> 4.3'
gem 'rails', '~> 5.2.4' gem 'rails', '~> 5.2.4'
gem 'sprockets', '~> 3.7' gem 'sprockets', '~> 3.7.2'
gem 'thor', '~> 0.20' gem 'thor', '~> 0.20'
gem 'rack', '~> 2.1.2'
gem 'thwait', '~> 0.1.0'
gem 'e2mmap', '~> 0.1.0'
gem 'hamlit-rails', '~> 0.2' gem 'hamlit-rails', '~> 0.2'
gem 'pg', '~> 1.1' gem 'pg', '~> 1.2'
gem 'makara', '~> 0.4' gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.4' gem 'pghero', '~> 2.4'
gem 'dotenv-rails', '~> 2.7' gem 'dotenv-rails', '~> 2.7'
gem 'aws-sdk-s3', '~> 1.59', require: false gem 'aws-sdk-s3', '~> 1.60', require: false
gem 'fog-core', '<= 2.1.0' gem 'fog-core', '<= 2.1.0'
gem 'fog-openstack', '~> 0.3', require: false gem 'fog-openstack', '~> 0.3', require: false
gem 'paperclip', '~> 6.0' gem 'paperclip', '~> 6.0'
@ -31,7 +35,7 @@ gem 'browser'
gem 'charlock_holmes', '~> 0.7.7' gem 'charlock_holmes', '~> 0.7.7'
gem 'iso-639' gem 'iso-639'
gem 'chewy', '~> 5.1' gem 'chewy', '~> 5.1'
gem 'cld3', '~> 3.2.4' gem 'cld3', '~> 3.2.6'
gem 'devise', '~> 4.7' gem 'devise', '~> 4.7'
gem 'devise-two-factor', '~> 3.1' gem 'devise-two-factor', '~> 3.1'
@ -50,23 +54,22 @@ gem 'fast_blank', '~> 1.0'
gem 'fastimage' gem 'fastimage'
gem 'goldfinger', '~> 2.1' gem 'goldfinger', '~> 2.1'
gem 'hiredis', '~> 0.6' gem 'hiredis', '~> 0.6'
gem 'redis-namespace', '~> 1.5' gem 'redis-namespace', '~> 1.7'
gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b' gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b'
gem 'htmlentities', '~> 4.3' gem 'htmlentities', '~> 4.3'
gem 'http', '~> 3.3' gem 'http', '~> 4.3'
gem 'http_accept_language', '~> 2.1' gem 'http_accept_language', '~> 2.1'
gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2', submodules: true gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2', submodules: true
gem 'httplog', '~> 1.3' gem 'httplog', '~> 1.4'
gem 'idn-ruby', require: 'idn' gem 'idn-ruby', require: 'idn'
gem 'kaminari', '~> 1.1' gem 'kaminari', '~> 1.1'
gem 'link_header', '~> 0.0' gem 'link_header', '~> 0.0'
gem 'mime-types', '~> 3.3', require: 'mime/types/columnar' gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar'
gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532' gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
gem 'nokogiri', '~> 1.10' gem 'nokogiri', '~> 1.10'
gem 'nsa', '~> 0.2' gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.9' gem 'oj', '~> 3.10'
gem 'ostatus2', '~> 2.0' gem 'ox', '~> 2.12'
gem 'ox', '~> 2.11'
gem 'parslet' gem 'parslet'
gem 'parallel', '~> 1.19' gem 'parallel', '~> 1.19'
gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
@ -78,7 +81,7 @@ gem 'rails-i18n', '~> 5.1'
gem 'rails-settings-cached', '~> 0.6' gem 'rails-settings-cached', '~> 0.6'
gem 'redis', '~> 4.1', require: ['redis', 'redis/connection/hiredis'] gem 'redis', '~> 4.1', require: ['redis', 'redis/connection/hiredis']
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'rqrcode', '~> 0.10' gem 'rqrcode', '~> 1.1'
gem 'ruby-progressbar', '~> 1.10' gem 'ruby-progressbar', '~> 1.10'
gem 'sanitize', '~> 5.1' gem 'sanitize', '~> 5.1'
gem 'sidekiq', '~> 5.2' gem 'sidekiq', '~> 5.2'
@ -97,9 +100,9 @@ gem 'tzinfo-data', '~> 1.2019'
gem 'webpacker', '~> 4.2' gem 'webpacker', '~> 4.2'
gem 'webpush' gem 'webpush'
gem 'json-ld', git: 'https://github.com/ruby-rdf/json-ld.git', ref: 'e742697a0906e74e8bb777ef98137bc3955d981d' gem 'json-ld'
gem 'json-ld-preloaded', '~> 3.0' gem 'json-ld-preloaded', '~> 3.0'
gem 'rdf-normalize', '~> 0.3' gem 'rdf-normalize', '~> 0.4'
group :development, :test do group :development, :test do
gem 'fabrication', '~> 2.21' gem 'fabrication', '~> 2.21'
@ -115,14 +118,14 @@ group :production, :test do
end end
group :test do group :test do
gem 'capybara', '~> 3.29' gem 'capybara', '~> 3.30'
gem 'climate_control', '~> 0.2' gem 'climate_control', '~> 0.2'
gem 'faker', '~> 2.8' gem 'faker', '~> 2.10'
gem 'microformats', '~> 4.1' gem 'microformats', '~> 4.2'
gem 'rails-controller-testing', '~> 1.0' gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.0' gem 'rspec-sidekiq', '~> 3.0'
gem 'simplecov', '~> 0.17', require: false gem 'simplecov', '~> 0.17', require: false
gem 'webmock', '~> 3.7' gem 'webmock', '~> 3.8'
gem 'parallel_tests', '~> 2.30' gem 'parallel_tests', '~> 2.30'
end end
@ -131,11 +134,11 @@ group :development do
gem 'annotate', '~> 3.0' gem 'annotate', '~> 3.0'
gem 'better_errors', '~> 2.5' gem 'better_errors', '~> 2.5'
gem 'binding_of_caller', '~> 0.7' gem 'binding_of_caller', '~> 0.7'
gem 'bullet', '~> 6.0' gem 'bullet', '~> 6.1'
gem 'letter_opener', '~> 1.7' gem 'letter_opener', '~> 1.7'
gem 'letter_opener_web', '~> 1.3' gem 'letter_opener_web', '~> 1.3'
gem 'memory_profiler' gem 'memory_profiler'
gem 'rubocop', '~> 0.77', require: false gem 'rubocop', '~> 0.79', require: false
gem 'rubocop-rails', '~> 2.4', require: false gem 'rubocop-rails', '~> 2.4', require: false
gem 'brakeman', '~> 4.7', require: false gem 'brakeman', '~> 4.7', require: false
gem 'bundler-audit', '~> 0.6', require: false gem 'bundler-audit', '~> 0.6', require: false
@ -145,7 +148,6 @@ group :development do
gem 'capistrano-rbenv', '~> 2.1' gem 'capistrano-rbenv', '~> 2.1'
gem 'capistrano-yarn', '~> 2.0' gem 'capistrano-yarn', '~> 2.0'
gem 'derailed_benchmarks'
gem 'stackprof' gem 'stackprof'
end end

View File

@ -13,19 +13,6 @@ GIT
specs: specs:
posix-spawn (0.3.13) posix-spawn (0.3.13)
GIT
remote: https://github.com/ruby-rdf/json-ld.git
revision: e742697a0906e74e8bb777ef98137bc3955d981d
ref: e742697a0906e74e8bb777ef98137bc3955d981d
specs:
json-ld (3.0.2)
htmlentities (~> 4.3)
json-canonicalization (~> 0.1)
link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.13)
rack (>= 1.6, < 3.0)
rdf (~> 3.0, >= 3.0.8)
GIT GIT
remote: https://github.com/tmm1/http_parser.rb remote: https://github.com/tmm1/http_parser.rb
revision: 54b17ba8c7d8d20a16dfc65d1775241833219cf2 revision: 54b17ba8c7d8d20a16dfc65d1775241833219cf2
@ -44,25 +31,25 @@ GIT
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (5.2.4) actioncable (5.2.4.1)
actionpack (= 5.2.4) actionpack (= 5.2.4.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailer (5.2.4) actionmailer (5.2.4.1)
actionpack (= 5.2.4) actionpack (= 5.2.4.1)
actionview (= 5.2.4) actionview (= 5.2.4.1)
activejob (= 5.2.4) activejob (= 5.2.4.1)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (5.2.4) actionpack (5.2.4.1)
actionview (= 5.2.4) actionview (= 5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
rack (~> 2.0) rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.4) actionview (5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
@ -73,27 +60,27 @@ GEM
case_transform (>= 0.2) case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3) jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.7) active_record_query_trace (1.7)
activejob (5.2.4) activejob (5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.2.4) activemodel (5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
activerecord (5.2.4) activerecord (5.2.4.1)
activemodel (= 5.2.4) activemodel (= 5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
arel (>= 9.0) arel (>= 9.0)
activestorage (5.2.4) activestorage (5.2.4.1)
actionpack (= 5.2.4) actionpack (= 5.2.4.1)
activerecord (= 5.2.4) activerecord (= 5.2.4.1)
marcel (~> 0.3.1) marcel (~> 0.3.1)
activesupport (5.2.4) activesupport (5.2.4.1)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
addressable (2.7.0) addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0) public_suffix (>= 2.0.2, < 5.0)
airbrussh (1.3.4) airbrussh (1.4.0)
sshkit (>= 1.6.1, != 1.7.0) sshkit (>= 1.6.1, != 1.7.0)
annotate (3.0.3) annotate (3.0.3)
activerecord (>= 3.2, < 7.0) activerecord (>= 3.2, < 7.0)
@ -105,37 +92,36 @@ GEM
av (0.9.0) av (0.9.0)
cocaine (~> 0.5.3) cocaine (~> 0.5.3)
aws-eventstream (1.0.3) aws-eventstream (1.0.3)
aws-partitions (1.251.0) aws-partitions (1.261.0)
aws-sdk-core (3.84.0) aws-sdk-core (3.86.0)
aws-eventstream (~> 1.0, >= 1.0.2) aws-eventstream (~> 1.0, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0) aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
jmespath (~> 1.0) jmespath (~> 1.0)
aws-sdk-kms (1.26.0) aws-sdk-kms (1.27.0)
aws-sdk-core (~> 3, >= 3.71.0) aws-sdk-core (~> 3, >= 3.71.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.59.0) aws-sdk-s3 (1.60.1)
aws-sdk-core (~> 3, >= 3.83.0) aws-sdk-core (~> 3, >= 3.83.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sigv4 (1.1.0) aws-sigv4 (1.1.0)
aws-eventstream (~> 1.0, >= 1.0.2) aws-eventstream (~> 1.0, >= 1.0.2)
bcrypt (3.1.12) bcrypt (3.1.12)
benchmark-ips (2.7.2)
better_errors (2.5.1) better_errors (2.5.1)
coderay (>= 1.0.0) coderay (>= 1.0.0)
erubi (>= 1.0.0) erubi (>= 1.0.0)
rack (>= 0.9.0) rack (>= 0.9.0)
binding_of_caller (0.8.0) binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1) debug_inspector (>= 0.0.1)
blurhash (0.1.3) blurhash (0.1.4)
ffi (~> 1.10.0) ffi (~> 1.10.0)
bootsnap (1.4.5) bootsnap (1.4.5)
msgpack (~> 1.0) msgpack (~> 1.0)
brakeman (4.7.2) brakeman (4.7.2)
browser (2.7.1) browser (3.0.3)
builder (3.2.4) builder (3.2.4)
bullet (6.0.2) bullet (6.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.11) uniform_notifier (~> 1.11)
bundler-audit (0.6.1) bundler-audit (0.6.1)
@ -153,12 +139,12 @@ GEM
capistrano-rails (1.4.0) capistrano-rails (1.4.0)
capistrano (~> 3.1) capistrano (~> 3.1)
capistrano-bundler (~> 1.1) capistrano-bundler (~> 1.1)
capistrano-rbenv (2.1.4) capistrano-rbenv (2.1.6)
capistrano (~> 3.1) capistrano (~> 3.1)
sshkit (~> 1.3) sshkit (~> 1.3)
capistrano-yarn (2.0.2) capistrano-yarn (2.0.2)
capistrano (~> 3.0) capistrano (~> 3.0)
capybara (3.29.0) capybara (3.30.0)
addressable addressable
mini_mime (>= 0.1.3) mini_mime (>= 0.1.3)
nokogiri (~> 1.8) nokogiri (~> 1.8)
@ -173,9 +159,9 @@ GEM
activesupport (>= 4.0) activesupport (>= 4.0)
elasticsearch (>= 2.0.0) elasticsearch (>= 2.0.0)
elasticsearch-dsl elasticsearch-dsl
chunky_png (1.3.10) chunky_png (1.3.11)
cld3 (3.2.4) cld3 (3.2.6)
ffi (>= 1.1.0, < 1.11.0) ffi (>= 1.1.0, < 1.12.0)
climate_control (0.2.0) climate_control (0.2.0)
cocaine (0.5.8) cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
@ -184,19 +170,10 @@ GEM
connection_pool (2.2.2) connection_pool (2.2.2)
crack (0.4.3) crack (0.4.3)
safe_yaml (~> 1.0.0) safe_yaml (~> 1.0.0)
crass (1.0.5) crass (1.0.6)
css_parser (1.7.0) css_parser (1.7.1)
addressable addressable
debug_inspector (0.0.3) debug_inspector (0.0.3)
derailed_benchmarks (1.4.2)
benchmark-ips (~> 2)
get_process_mem (~> 0)
heapy (~> 0)
memory_profiler (~> 0)
rack (>= 1)
rake (> 10, < 14)
ruby-statistics (>= 2.1)
thor (~> 0.19)
devise (4.7.1) devise (4.7.1)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
@ -216,7 +193,7 @@ GEM
discard (1.1.0) discard (1.1.0)
activerecord (>= 4.2, < 7) activerecord (>= 4.2, < 7)
docile (1.3.2) docile (1.3.2)
domain_name (0.5.20180417) domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0) unf (>= 0.0.5, < 1.0.0)
doorkeeper (5.2.3) doorkeeper (5.2.3)
railties (>= 5) railties (>= 5)
@ -224,6 +201,7 @@ GEM
dotenv-rails (2.7.5) dotenv-rails (2.7.5)
dotenv (= 2.7.5) dotenv (= 2.7.5)
railties (>= 3.2, < 6.1) railties (>= 3.2, < 6.1)
e2mmap (0.1.0)
elasticsearch (7.3.0) elasticsearch (7.3.0)
elasticsearch-api (= 7.3.0) elasticsearch-api (= 7.3.0)
elasticsearch-transport (= 7.3.0) elasticsearch-transport (= 7.3.0)
@ -240,13 +218,16 @@ GEM
tzinfo tzinfo
excon (0.71.0) excon (0.71.0)
fabrication (2.21.0) fabrication (2.21.0)
faker (2.8.1) faker (2.10.1)
i18n (>= 1.6, < 1.8) i18n (>= 1.6, < 2)
faraday (0.15.4) faraday (1.0.0)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
fast_blank (1.0.0) fast_blank (1.0.0)
fastimage (2.1.7) fastimage (2.1.7)
ffi (1.10.0) ffi (1.10.0)
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
fog-core (2.1.0) fog-core (2.1.0)
builder builder
excon (~> 0.58) excon (~> 0.58)
@ -266,17 +247,15 @@ GEM
fuubar (2.5.0) fuubar (2.5.0)
rspec-core (~> 3.0) rspec-core (~> 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
get_process_mem (0.2.5)
ffi (~> 1.0)
globalid (0.4.2) globalid (0.4.2)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
goldfinger (2.1.0) goldfinger (2.1.1)
addressable (~> 2.5) addressable (~> 2.5)
http (~> 3.0) http (~> 4.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
oj (~> 3.0) oj (~> 3.0)
hamlit (2.9.3) hamlit (2.11.0)
temple (>= 0.8.0) temple (>= 0.8.2)
thor thor
tilt tilt
hamlit-rails (0.2.3) hamlit-rails (0.2.3)
@ -288,26 +267,27 @@ GEM
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
hashdiff (1.0.0) hashdiff (1.0.0)
hashie (3.6.0) hashie (3.6.0)
heapy (0.1.4) highline (2.0.3)
highline (2.0.1)
hiredis (0.6.3) hiredis (0.6.3)
hkdf (0.3.0) hkdf (0.3.0)
htmlentities (4.3.4) htmlentities (4.3.4)
http (3.3.0) http (4.3.0)
addressable (~> 2.3) addressable (~> 2.3)
http-cookie (~> 1.0) http-cookie (~> 1.0)
http-form_data (~> 2.0) http-form_data (~> 2.2)
http_parser.rb (~> 0.6.0) http-parser (~> 1.2.0)
http-cookie (1.0.3) http-cookie (1.0.3)
domain_name (~> 0.5) domain_name (~> 0.5)
http-form_data (2.1.1) http-form_data (2.2.0)
http-parser (1.2.1)
ffi-compiler (>= 1.0, < 2.0)
http_accept_language (2.1.1) http_accept_language (2.1.1)
httplog (1.3.3) httplog (1.4.0)
rack (>= 1.0) rack (>= 1.0)
rainbow (>= 2.0.0) rainbow (>= 2.0.0)
i18n (1.7.0) i18n (1.8.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
i18n-tasks (0.9.29) i18n-tasks (0.9.30)
activesupport (>= 4.0.2) activesupport (>= 4.0.2)
ast (>= 2.1.0) ast (>= 2.1.0)
erubi erubi
@ -322,8 +302,15 @@ GEM
iso-639 (0.2.8) iso-639 (0.2.8)
jaro_winkler (1.5.4) jaro_winkler (1.5.4)
jmespath (1.4.0) jmespath (1.4.0)
json (2.2.0) json (2.3.0)
json-canonicalization (0.1.0) json-canonicalization (0.2.0)
json-ld (3.1.0)
htmlentities (~> 4.3)
json-canonicalization (~> 0.1)
link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.14)
rack (~> 2.0)
rdf (~> 3.1)
json-ld-preloaded (3.0.6) json-ld-preloaded (3.0.6)
json-ld (~> 3.0) json-ld (~> 3.0)
multi_json (~> 1.12) multi_json (~> 1.12)
@ -369,16 +356,16 @@ GEM
redis (>= 3.0.5) redis (>= 3.0.5)
memory_profiler (0.9.14) memory_profiler (0.9.14)
method_source (0.9.2) method_source (0.9.2)
microformats (4.1.0) microformats (4.2.0)
json (~> 2.1) json (~> 2.2)
nokogiri (~> 1.8, >= 1.8.3) nokogiri (~> 1.10)
mime-types (3.3) mime-types (3.3.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2019.0904) mime-types-data (3.2019.1009)
mimemagic (0.3.3) mimemagic (0.3.3)
mini_mime (1.0.2) mini_mime (1.0.2)
mini_portile2 (2.4.0) mini_portile2 (2.4.0)
minitest (5.13.0) minitest (5.14.0)
msgpack (1.3.1) msgpack (1.3.1)
multi_json (1.14.1) multi_json (1.14.1)
multipart-post (2.1.1) multipart-post (2.1.1)
@ -397,7 +384,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5) sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0) statsd-ruby (~> 1.4, >= 1.4.0)
oj (3.9.2) oj (3.10.1)
omniauth (1.9.0) omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0) hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
@ -409,11 +396,7 @@ GEM
omniauth (~> 1.3, >= 1.3.2) omniauth (~> 1.3, >= 1.3.2)
ruby-saml (~> 1.7) ruby-saml (~> 1.7)
orm_adapter (0.5.0) orm_adapter (0.5.0)
ostatus2 (2.0.3) ox (2.12.1)
addressable (~> 2.5)
http (~> 3.0)
nokogiri (~> 1.8)
ox (2.11.0)
paperclip (6.0.0) paperclip (6.0.0)
activemodel (>= 4.2.0) activemodel (>= 4.2.0)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
@ -424,15 +407,15 @@ GEM
av (~> 0.9.0) av (~> 0.9.0)
paperclip (>= 2.5.2) paperclip (>= 2.5.2)
parallel (1.19.1) parallel (1.19.1)
parallel_tests (2.30.0) parallel_tests (2.30.1)
parallel parallel
parser (2.6.5.0) parser (2.7.0.2)
ast (~> 2.4.0) ast (~> 2.4.0)
parslet (1.8.2) parslet (1.8.2)
pastel (0.7.3) pastel (0.7.3)
equatable (~> 0.6) equatable (~> 0.6)
tty-color (~> 0.5) tty-color (~> 0.5)
pg (1.1.4) pg (1.2.2)
pghero (2.4.1) pghero (2.4.1)
activerecord (>= 5) activerecord (>= 5)
pkg-config (1.4.0) pkg-config (1.4.0)
@ -452,16 +435,16 @@ GEM
pry (~> 0.10) pry (~> 0.10)
pry-rails (0.3.9) pry-rails (0.3.9)
pry (>= 0.10.4) pry (>= 0.10.4)
public_suffix (4.0.1) public_suffix (4.0.3)
puma (4.3.1) puma (4.3.1)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.1.0) pundit (2.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.1.6) raabro (1.1.6)
rack (2.0.8) rack (2.1.2)
rack-attack (6.2.1) rack-attack (6.2.2)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rack-cors (1.1.0) rack-cors (1.1.1)
rack (>= 2.0.0) rack (>= 2.0.0)
rack-protection (2.0.7) rack-protection (2.0.7)
rack rack
@ -469,18 +452,18 @@ GEM
rack rack
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rails (5.2.4) rails (5.2.4.1)
actioncable (= 5.2.4) actioncable (= 5.2.4.1)
actionmailer (= 5.2.4) actionmailer (= 5.2.4.1)
actionpack (= 5.2.4) actionpack (= 5.2.4.1)
actionview (= 5.2.4) actionview (= 5.2.4.1)
activejob (= 5.2.4) activejob (= 5.2.4.1)
activemodel (= 5.2.4) activemodel (= 5.2.4.1)
activerecord (= 5.2.4) activerecord (= 5.2.4.1)
activestorage (= 5.2.4) activestorage (= 5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 5.2.4) railties (= 5.2.4.1)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.4) rails-controller-testing (1.0.4)
actionpack (>= 5.0.1.x) actionpack (>= 5.0.1.x)
@ -496,19 +479,19 @@ GEM
railties (>= 5.0, < 6) railties (>= 5.0, < 6)
rails-settings-cached (0.6.6) rails-settings-cached (0.6.6)
rails (>= 4.2.0) rails (>= 4.2.0)
railties (5.2.4) railties (5.2.4.1)
actionpack (= 5.2.4) actionpack (= 5.2.4.1)
activesupport (= 5.2.4) activesupport (= 5.2.4.1)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0) thor (>= 0.19.0, < 2.0)
rainbow (3.0.0) rainbow (3.0.0)
rake (13.0.1) rake (13.0.1)
rdf (3.0.13) rdf (3.1.1)
hamster (~> 3.0) hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.3.3) rdf-normalize (0.4.0)
rdf (>= 2.2, < 4.0) rdf (~> 3.1)
redis (4.1.3) redis (4.1.3)
redis-actionpack (5.0.2) redis-actionpack (5.0.2)
actionpack (>= 4.0, < 6) actionpack (>= 4.0, < 6)
@ -517,7 +500,7 @@ GEM
redis-activesupport (5.0.4) redis-activesupport (5.0.4)
activesupport (>= 3, < 6) activesupport (>= 3, < 6)
redis-store (>= 1.3, < 2) redis-store (>= 1.3, < 2)
redis-namespace (1.6.0) redis-namespace (1.7.0)
redis (>= 3.0.4) redis (>= 3.0.4)
redis-rack (2.0.4) redis-rack (2.0.4)
rack (>= 1.5, < 3) rack (>= 1.5, < 3)
@ -529,15 +512,17 @@ GEM
redis-store (1.5.0) redis-store (1.5.0)
redis (>= 2.2, < 5) redis (>= 2.2, < 5)
regexp_parser (1.6.0) regexp_parser (1.6.0)
request_store (1.4.1) request_store (1.5.0)
rack (>= 1.4) rack (>= 1.4)
responders (3.0.0) responders (3.0.0)
actionpack (>= 5.0) actionpack (>= 5.0)
railties (>= 5.0) railties (>= 5.0)
rotp (2.1.2) rotp (2.1.2)
rpam2 (4.0.2) rpam2 (4.0.2)
rqrcode (0.10.1) rqrcode (1.1.2)
chunky_png (~> 1.0) chunky_png (~> 1.0)
rqrcode_core (~> 0.1)
rqrcode_core (0.1.1)
rspec-core (3.9.0) rspec-core (3.9.0)
rspec-support (~> 3.9.0) rspec-support (~> 3.9.0)
rspec-expectations (3.9.0) rspec-expectations (3.9.0)
@ -558,20 +543,19 @@ GEM
rspec-core (~> 3.0, >= 3.0.0) rspec-core (~> 3.0, >= 3.0.0)
sidekiq (>= 2.4.0) sidekiq (>= 2.4.0)
rspec-support (3.9.0) rspec-support (3.9.0)
rubocop (0.77.0) rubocop (0.79.0)
jaro_winkler (~> 1.5.1) jaro_winkler (~> 1.5.1)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 2.6) parser (>= 2.7.0.1)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7) unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.4.0) rubocop-rails (2.4.1)
rack (>= 1.1) rack (>= 1.1)
rubocop (>= 0.72.0) rubocop (>= 0.72.0)
ruby-progressbar (1.10.1) ruby-progressbar (1.10.1)
ruby-saml (1.9.0) ruby-saml (1.9.0)
nokogiri (>= 1.5.10) nokogiri (>= 1.5.10)
ruby-statistics (2.1.1)
rufus-scheduler (3.5.2) rufus-scheduler (3.5.2)
fugit (~> 1.1, >= 1.1.5) fugit (~> 1.1, >= 1.1.5)
safe_yaml (1.0.5) safe_yaml (1.0.5)
@ -615,21 +599,22 @@ GEM
sshkit (1.20.0) sshkit (1.20.0)
net-scp (>= 1.1.2) net-scp (>= 1.1.2)
net-ssh (>= 2.8.0) net-ssh (>= 2.8.0)
stackprof (0.2.14) stackprof (0.2.15)
statsd-ruby (1.4.0) statsd-ruby (1.4.0)
stoplight (2.2.0) stoplight (2.2.0)
streamio-ffmpeg (3.0.2) streamio-ffmpeg (3.0.2)
multi_json (~> 1.8) multi_json (~> 1.8)
strong_migrations (0.5.0) strong_migrations (0.5.1)
activerecord (>= 5) activerecord (>= 5)
temple (0.8.1) temple (0.8.2)
terminal-table (1.8.0) terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1) unicode-display_width (~> 1.1, >= 1.1.1)
terrapin (0.6.0) terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
thor (0.20.3) thor (0.20.3)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.0.9) thwait (0.1.0)
tilt (2.0.10)
tty-color (0.5.0) tty-color (0.5.0)
tty-command (0.9.0) tty-command (0.9.0)
pastel (~> 0.7.0) pastel (~> 0.7.0)
@ -645,18 +630,18 @@ GEM
tty-screen (0.7.0) tty-screen (0.7.0)
twitter-text (1.14.7) twitter-text (1.14.7)
unf (~> 0.1.0) unf (~> 0.1.0)
tzinfo (1.2.5) tzinfo (1.2.6)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo-data (1.2019.3) tzinfo-data (1.2019.3)
tzinfo (>= 1.0.0) tzinfo (>= 1.0.0)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.5) unf_ext (0.0.7.6)
unicode-display_width (1.6.0) unicode-display_width (1.6.1)
uniform_notifier (1.12.1) uniform_notifier (1.13.0)
warden (1.2.8) warden (1.2.8)
rack (>= 2.0.6) rack (>= 2.0.6)
webmock (3.7.6) webmock (3.8.0)
addressable (>= 2.3.6) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0) hashdiff (>= 0.4.0, < 2.0.0)
@ -682,35 +667,35 @@ DEPENDENCIES
active_record_query_trace (~> 1.7) active_record_query_trace (~> 1.7)
addressable (~> 2.7) addressable (~> 2.7)
annotate (~> 3.0) annotate (~> 3.0)
aws-sdk-s3 (~> 1.59) aws-sdk-s3 (~> 1.60)
better_errors (~> 2.5) better_errors (~> 2.5)
binding_of_caller (~> 0.7) binding_of_caller (~> 0.7)
blurhash (~> 0.1) blurhash (~> 0.1)
bootsnap (~> 1.4) bootsnap (~> 1.4)
brakeman (~> 4.7) brakeman (~> 4.7)
browser browser
bullet (~> 6.0) bullet (~> 6.1)
bundler-audit (~> 0.6) bundler-audit (~> 0.6)
capistrano (~> 3.11) capistrano (~> 3.11)
capistrano-rails (~> 1.4) capistrano-rails (~> 1.4)
capistrano-rbenv (~> 2.1) capistrano-rbenv (~> 2.1)
capistrano-yarn (~> 2.0) capistrano-yarn (~> 2.0)
capybara (~> 3.29) capybara (~> 3.30)
charlock_holmes (~> 0.7.7) charlock_holmes (~> 0.7.7)
chewy (~> 5.1) chewy (~> 5.1)
cld3 (~> 3.2.4) cld3 (~> 3.2.6)
climate_control (~> 0.2) climate_control (~> 0.2)
concurrent-ruby concurrent-ruby
connection_pool connection_pool
derailed_benchmarks
devise (~> 4.7) devise (~> 4.7)
devise-two-factor (~> 3.1) devise-two-factor (~> 3.1)
devise_pam_authenticatable2 (~> 9.2) devise_pam_authenticatable2 (~> 9.2)
discard (~> 1.1) discard (~> 1.1)
doorkeeper (~> 5.2) doorkeeper (~> 5.2)
dotenv-rails (~> 2.7) dotenv-rails (~> 2.7)
e2mmap (~> 0.1.0)
fabrication (~> 2.21) fabrication (~> 2.21)
faker (~> 2.8) faker (~> 2.10)
fast_blank (~> 1.0) fast_blank (~> 1.0)
fastimage fastimage
fog-core (<= 2.1.0) fog-core (<= 2.1.0)
@ -721,14 +706,14 @@ DEPENDENCIES
health_check! health_check!
hiredis (~> 0.6) hiredis (~> 0.6)
htmlentities (~> 4.3) htmlentities (~> 4.3)
http (~> 3.3) http (~> 4.3)
http_accept_language (~> 2.1) http_accept_language (~> 2.1)
http_parser.rb (~> 0.6)! http_parser.rb (~> 0.6)!
httplog (~> 1.3) httplog (~> 1.4)
i18n-tasks (~> 0.9) i18n-tasks (~> 0.9)
idn-ruby idn-ruby
iso-639 iso-639
json-ld! json-ld
json-ld-preloaded (~> 3.0) json-ld-preloaded (~> 3.0)
kaminari (~> 1.1) kaminari (~> 1.1)
letter_opener (~> 1.7) letter_opener (~> 1.7)
@ -738,24 +723,23 @@ DEPENDENCIES
makara (~> 0.4) makara (~> 0.4)
mario-redis-lock (~> 1.2) mario-redis-lock (~> 1.2)
memory_profiler memory_profiler
microformats (~> 4.1) microformats (~> 4.2)
mime-types (~> 3.3) mime-types (~> 3.3.1)
net-ldap (~> 0.16) net-ldap (~> 0.16)
nilsimsa! nilsimsa!
nokogiri (~> 1.10) nokogiri (~> 1.10)
nsa (~> 0.2) nsa (~> 0.2)
oj (~> 3.9) oj (~> 3.10)
omniauth (~> 1.9) omniauth (~> 1.9)
omniauth-cas (~> 1.1) omniauth-cas (~> 1.1)
omniauth-saml (~> 1.10) omniauth-saml (~> 1.10)
ostatus2 (~> 2.0) ox (~> 2.12)
ox (~> 2.11)
paperclip (~> 6.0) paperclip (~> 6.0)
paperclip-av-transcoder (~> 0.6) paperclip-av-transcoder (~> 0.6)
parallel (~> 1.19) parallel (~> 1.19)
parallel_tests (~> 2.30) parallel_tests (~> 2.30)
parslet parslet
pg (~> 1.1) pg (~> 1.2)
pghero (~> 2.4) pghero (~> 2.4)
pkg-config (~> 1.4) pkg-config (~> 1.4)
posix-spawn! posix-spawn!
@ -765,20 +749,21 @@ DEPENDENCIES
pry-rails (~> 0.3) pry-rails (~> 0.3)
puma (~> 4.3) puma (~> 4.3)
pundit (~> 2.1) pundit (~> 2.1)
rack (~> 2.1.2)
rack-attack (~> 6.2) rack-attack (~> 6.2)
rack-cors (~> 1.1) rack-cors (~> 1.1)
rails (~> 5.2.4) rails (~> 5.2.4)
rails-controller-testing (~> 1.0) rails-controller-testing (~> 1.0)
rails-i18n (~> 5.1) rails-i18n (~> 5.1)
rails-settings-cached (~> 0.6) rails-settings-cached (~> 0.6)
rdf-normalize (~> 0.3) rdf-normalize (~> 0.4)
redis (~> 4.1) redis (~> 4.1)
redis-namespace (~> 1.5) redis-namespace (~> 1.7)
redis-rails (~> 5.0) redis-rails (~> 5.0)
rqrcode (~> 0.10) rqrcode (~> 1.1)
rspec-rails (~> 3.9) rspec-rails (~> 3.9)
rspec-sidekiq (~> 3.0) rspec-sidekiq (~> 3.0)
rubocop (~> 0.77) rubocop (~> 0.79)
rubocop-rails (~> 2.4) rubocop-rails (~> 2.4)
ruby-progressbar (~> 1.10) ruby-progressbar (~> 1.10)
sanitize (~> 5.1) sanitize (~> 5.1)
@ -789,23 +774,24 @@ DEPENDENCIES
simple-navigation (~> 4.1) simple-navigation (~> 4.1)
simple_form (~> 5.0) simple_form (~> 5.0)
simplecov (~> 0.17) simplecov (~> 0.17)
sprockets (~> 3.7) sprockets (~> 3.7.2)
sprockets-rails (~> 3.2) sprockets-rails (~> 3.2)
stackprof stackprof
stoplight (~> 2.2.0) stoplight (~> 2.2.0)
streamio-ffmpeg (~> 3.0) streamio-ffmpeg (~> 3.0)
strong_migrations (~> 0.5) strong_migrations (~> 0.5)
thor (~> 0.20) thor (~> 0.20)
thwait (~> 0.1.0)
tty-command (~> 0.9) tty-command (~> 0.9)
tty-prompt (~> 0.20) tty-prompt (~> 0.20)
twitter-text (~> 1.14) twitter-text (~> 1.14)
tzinfo-data (~> 1.2019) tzinfo-data (~> 1.2019)
webmock (~> 3.7) webmock (~> 3.8)
webpacker (~> 4.2) webpacker (~> 4.2)
webpush webpush
RUBY VERSION RUBY VERSION
ruby 2.6.5p114 ruby 2.6.4p104
BUNDLED WITH BUNDLED WITH
1.17.3 2.1.4

View File

@ -70,7 +70,7 @@ Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Strea
- **PostgreSQL** 9.5+ - **PostgreSQL** 9.5+
- **Redis** - **Redis**
- **Ruby** 2.4+ - **Ruby** 2.4+
- **Node.js** 8+ - **Node.js** 10.13+
The repository includes deployment configurations for **Docker and docker-compose**, but also a few specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**stand-alone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. The repository includes deployment configurations for **Docker and docker-compose**, but also a few specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**stand-alone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
@ -86,7 +86,7 @@ You can open issues for bugs you've found or features you think are missing. You
## License ## License
Copyright (C) 2016-2019 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md)) Copyright (C) 2016-2020 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md))
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

2
Vagrantfile vendored
View File

@ -12,7 +12,7 @@ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main' sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
# Add repo for NodeJS # Add repo for NodeJS
curl -sL https://deb.nodesource.com/setup_8.x | sudo bash - curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
# Add firewall rule to redirect 80 to PORT and save # Add firewall rule to redirect 80 to PORT and save
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]} sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}

View File

@ -109,21 +109,7 @@ module Admin
end end
def filter_params def filter_params
params.permit( params.slice(*AccountFilter::KEYS).permit(*AccountFilter::KEYS)
:local,
:remote,
:by_domain,
:active,
:pending,
:disabled,
:silenced,
:suspended,
:username,
:display_name,
:email,
:ip,
:staff
)
end end
end end
end end

View File

@ -0,0 +1,88 @@
# frozen_string_literal: true
class Admin::AnnouncementsController < Admin::BaseController
before_action :set_announcements, only: :index
before_action :set_announcement, except: [:index, :new, :create]
def index
authorize :announcement, :index?
end
def new
authorize :announcement, :create?
@announcement = Announcement.new
end
def create
authorize :announcement, :create?
@announcement = Announcement.new(resource_params)
if @announcement.save
PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
log_action :create, @announcement
redirect_to admin_announcements_path, notice: @announcement.published? ? I18n.t('admin.announcements.published_msg') : I18n.t('admin.announcements.scheduled_msg')
else
render :new
end
end
def edit
authorize :announcement, :update?
end
def update
authorize :announcement, :update?
if @announcement.update(resource_params)
PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
log_action :update, @announcement
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.updated_msg')
else
render :edit
end
end
def publish
authorize :announcement, :update?
@announcement.publish!
PublishScheduledAnnouncementWorker.perform_async(@announcement.id)
log_action :update, @announcement
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.published_msg')
end
def unpublish
authorize :announcement, :update?
@announcement.unpublish!
UnpublishAnnouncementWorker.perform_async(@announcement.id)
log_action :update, @announcement
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.unpublished_msg')
end
def destroy
authorize :announcement, :destroy?
@announcement.destroy!
UnpublishAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
log_action :destroy, @announcement
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.destroyed_msg')
end
private
def set_announcements
@announcements = AnnouncementFilter.new(filter_params).results.page(params[:page])
end
def set_announcement
@announcement = Announcement.find(params[:id])
end
def filter_params
params.slice(*AnnouncementFilter::KEYS).permit(*AnnouncementFilter::KEYS)
end
def resource_params
params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day)
end
end

View File

@ -2,10 +2,6 @@
module Admin module Admin
class CustomEmojisController < BaseController class CustomEmojisController < BaseController
include ObfuscateFilename
obfuscate_filename [:custom_emoji, :image]
def index def index
authorize :custom_emoji, :index? authorize :custom_emoji, :index?
@ -52,7 +48,7 @@ module Admin
end end
def filter_params def filter_params
params.slice(:local, :remote, :by_domain, :shortcode, :page).permit(:local, :remote, :by_domain, :shortcode, :page) params.slice(:page, *CustomEmojiFilter::KEYS).permit(:page, *CustomEmojiFilter::KEYS)
end end
def action_from_button def action_from_button

View File

@ -1,18 +0,0 @@
# frozen_string_literal: true
module Admin
class FollowersController < BaseController
before_action :set_account
PER_PAGE = 40
def index
authorize :account, :index?
@followers = @account.followers.local.recent.page(params[:page]).per(PER_PAGE)
end
def set_account
@account = Account.find(params[:account_id])
end
end
end

View File

@ -62,7 +62,7 @@ module Admin
end end
def filter_params def filter_params
params.permit(:limited, :by_domain) params.slice(*InstanceFilter::KEYS).permit(*InstanceFilter::KEYS)
end end
end end
end end

View File

@ -47,7 +47,7 @@ module Admin
end end
def filter_params def filter_params
params.permit(:available, :expired) params.slice(*InviteFilter::KEYS).permit(*InviteFilter::KEYS)
end end
end end
end end

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
module Admin
class RelationshipsController < BaseController
before_action :set_account
PER_PAGE = 40
def index
authorize :account, :index?
@accounts = RelationshipFilter.new(@account, filter_params).results.page(params[:page]).per(PER_PAGE)
end
private
def set_account
@account = Account.find(params[:account_id])
end
def filter_params
params.slice(*RelationshipFilter::KEYS).permit(*RelationshipFilter::KEYS)
end
end
end

View File

@ -52,12 +52,7 @@ module Admin
end end
def filter_params def filter_params
params.permit( params.slice(*ReportFilter::KEYS).permit(*ReportFilter::KEYS)
:account_id,
:resolved,
:target_account_id,
:by_target_domain
)
end end
def set_report def set_report

View File

@ -73,7 +73,7 @@ module Admin
end end
def filter_params def filter_params
params.slice(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name).permit(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name) params.slice(:page, *TagFilter::KEYS).permit(:page, *TagFilter::KEYS)
end end
def tag_params def tag_params

View File

@ -85,7 +85,7 @@ class Api::BaseController < ApplicationController
end end
def require_authenticated_user! def require_authenticated_user!
render json: { error: 'This API requires an authenticated user' }, status: 401 unless current_user render json: { error: 'This method requires an authenticated user' }, status: 401 unless current_user
end end
def require_user! def require_user!

View File

@ -1,15 +1,25 @@
# frozen_string_literal: true # frozen_string_literal: true
class Api::OEmbedController < Api::BaseController class Api::OEmbedController < Api::BaseController
respond_to :json skip_before_action :require_authenticated_user!
before_action :set_status
before_action :require_public_status!
def show def show
@status = status_finder.status
render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default
end end
private private
def set_status
@status = status_finder.status
end
def require_public_status!
not_found if @status.hidden?
end
def status_finder def status_finder
StatusFinder.new(params[:url]) StatusFinder.new(params[:url])
end end

View File

@ -21,11 +21,13 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController
def load_accounts def load_accounts
return [] if hide_results? return [] if hide_results?
default_accounts.merge(paginated_follows).to_a scope = default_accounts
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
scope.merge(paginated_follows).to_a
end end
def hide_results? def hide_results?
(@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account)) (@account.user_hides_network? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
end end
def default_accounts def default_accounts

View File

@ -21,11 +21,13 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController
def load_accounts def load_accounts
return [] if hide_results? return [] if hide_results?
default_accounts.merge(paginated_follows).to_a scope = default_accounts
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
scope.merge(paginated_follows).to_a
end end
def hide_results? def hide_results?
(@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account)) (@account.user_hides_network? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
end end
def default_accounts def default_accounts

View File

@ -0,0 +1,29 @@
# frozen_string_literal: true
class Api::V1::Announcements::ReactionsController < Api::BaseController
before_action -> { doorkeeper_authorize! :write, :'write:favourites' }
before_action :require_user!
before_action :set_announcement
before_action :set_reaction, except: :update
def update
@announcement.announcement_reactions.create!(account: current_account, name: params[:id])
render_empty
end
def destroy
@reaction.destroy!
render_empty
end
private
def set_reaction
@reaction = @announcement.announcement_reactions.where(account: current_account).find_by!(name: params[:id])
end
def set_announcement
@announcement = Announcement.published.find(params[:announcement_id])
end
end

View File

@ -0,0 +1,33 @@
# frozen_string_literal: true
class Api::V1::AnnouncementsController < Api::BaseController
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: :dismiss
before_action :require_user!
before_action :set_announcements, only: :index
before_action :set_announcement, except: :index
def index
render json: @announcements, each_serializer: REST::AnnouncementSerializer
end
def dismiss
AnnouncementMute.create!(account: current_account, announcement: @announcement)
render_empty
end
private
def set_announcements
@announcements = begin
scope = Announcement.published
scope.merge!(Announcement.without_muted(current_account)) unless truthy_param?(:with_dismissed)
scope.chronological
end
end
def set_announcement
@announcement = Announcement.published.find(params[:id])
end
end

View File

@ -4,9 +4,6 @@ class Api::V1::MediaController < Api::BaseController
before_action -> { doorkeeper_authorize! :write, :'write:media' } before_action -> { doorkeeper_authorize! :write, :'write:media' }
before_action :require_user! before_action :require_user!
include ObfuscateFilename
obfuscate_filename :file
respond_to :json respond_to :json
def create def create

View File

@ -17,7 +17,9 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::BaseController
private private
def load_accounts def load_accounts
default_accounts.merge(paginated_favourites).to_a scope = default_accounts
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
scope.merge(paginated_favourites).to_a
end end
def default_accounts def default_accounts

View File

@ -17,7 +17,9 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController
private private
def load_accounts def load_accounts
default_accounts.merge(paginated_statuses).to_a scope = default_accounts
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
scope.merge(paginated_statuses).to_a
end end
def default_accounts def default_accounts

View File

@ -24,6 +24,7 @@ class ApplicationController < ActionController::Base
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
rescue_from ActionController::UnknownFormat, with: :not_acceptable rescue_from ActionController::UnknownFormat, with: :not_acceptable
rescue_from ActionController::ParameterMissing, with: :bad_request rescue_from ActionController::ParameterMissing, with: :bad_request
rescue_from Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
rescue_from ActiveRecord::RecordNotFound, with: :not_found rescue_from ActiveRecord::RecordNotFound, with: :not_found
rescue_from Mastodon::NotPermittedError, with: :forbidden rescue_from Mastodon::NotPermittedError, with: :forbidden
rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
@ -136,6 +137,9 @@ class ApplicationController < ActionController::Base
end end
def respond_with_error(code) def respond_with_error(code)
render "errors/#{code}", layout: 'error', status: code, formats: [:html] respond_to do |format|
format.any { render "errors/#{code}", layout: 'error', status: code, formats: [:html] }
format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code }
end
end end
end end

View File

@ -6,6 +6,12 @@ class Auth::PasswordsController < Devise::PasswordsController
layout 'auth' layout 'auth'
def update
super do |resource|
resource.session_activations.destroy_all if resource.errors.empty?
end
end
private private
def check_validity_of_reset_password_token def check_validity_of_reset_password_token

View File

@ -10,6 +10,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :set_instance_presenter, only: [:new, :create, :update] before_action :set_instance_presenter, only: [:new, :create, :update]
before_action :set_body_classes, only: [:new, :create, :edit, :update] before_action :set_body_classes, only: [:new, :create, :edit, :update]
before_action :require_not_suspended!, only: [:update] before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
skip_before_action :require_functional!, only: [:edit, :update] skip_before_action :require_functional!, only: [:edit, :update]
@ -21,10 +22,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController
not_found not_found
end end
def update
super do |resource|
resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password?
end
end
protected protected
def update_resource(resource, params) def update_resource(resource, params)
params[:password] = nil if Devise.pam_authentication && resource.encrypted_password.blank? params[:password] = nil if Devise.pam_authentication && resource.encrypted_password.blank?
super super
end end
@ -109,4 +117,8 @@ class Auth::RegistrationsController < Devise::RegistrationsController
def require_not_suspended! def require_not_suspended!
forbidden if current_account.suspended? forbidden if current_account.suspended?
end end
def set_cache_headers
response.headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate'
end
end end

View File

@ -1,16 +0,0 @@
# frozen_string_literal: true
module ObfuscateFilename
extend ActiveSupport::Concern
class_methods do
def obfuscate_filename(path)
before_action do
file = params.dig(*path)
next if file.nil?
file.original_filename = SecureRandom.hex(8) + File.extname(file.original_filename)
end
end
end
end

View File

@ -1,10 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
class FiltersController < ApplicationController class FiltersController < ApplicationController
include Authorization
layout 'admin' layout 'admin'
before_action :authenticate_user!
before_action :set_filters, only: :index before_action :set_filters, only: :index
before_action :set_filter, only: [:edit, :update, :destroy] before_action :set_filter, only: [:edit, :update, :destroy]
before_action :set_body_classes before_action :set_body_classes

View File

@ -18,7 +18,6 @@ class FollowerAccountsController < ApplicationController
next if @account.user_hides_network? next if @account.user_hides_network?
follows follows
@relationships = AccountRelationshipsPresenter.new(follows.map(&:account_id), current_user.account_id) if user_signed_in?
end end
format.json do format.json do
@ -37,7 +36,11 @@ class FollowerAccountsController < ApplicationController
private private
def follows def follows
@follows ||= Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account) return @follows if defined?(@follows)
scope = Follow.where(target_account: @account)
scope = scope.where.not(account_id: current_account.excluded_from_timeline_account_ids) if user_signed_in?
@follows = scope.recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account)
end end
def page_requested? def page_requested?

View File

@ -18,7 +18,6 @@ class FollowingAccountsController < ApplicationController
next if @account.user_hides_network? next if @account.user_hides_network?
follows follows
@relationships = AccountRelationshipsPresenter.new(follows.map(&:target_account_id), current_user.account_id) if user_signed_in?
end end
format.json do format.json do
@ -37,7 +36,11 @@ class FollowingAccountsController < ApplicationController
private private
def follows def follows
@follows ||= Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account) return @follows if defined?(@follows)
scope = Follow.where(account: @account)
scope = scope.where.not(target_account_id: current_account.excluded_from_timeline_account_ids) if user_signed_in?
@follows = scope.recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account)
end end
def page_requested? def page_requested?

View File

@ -5,6 +5,7 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
before_action :store_current_location before_action :store_current_location
before_action :authenticate_resource_owner! before_action :authenticate_resource_owner!
before_action :set_cache_headers
include Localized include Localized
@ -27,4 +28,8 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
def truthy_param?(key) def truthy_param?(key)
ActiveModel::Type::Boolean.new.cast(params[key]) ActiveModel::Type::Boolean.new.cast(params[key])
end end
def set_cache_headers
response.headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate'
end
end end

View File

@ -19,53 +19,13 @@ class RelationshipsController < ApplicationController
rescue ActionController::ParameterMissing rescue ActionController::ParameterMissing
# Do nothing # Do nothing
ensure ensure
redirect_to relationships_path(current_params) redirect_to relationships_path(filter_params)
end end
private private
def set_accounts def set_accounts
@accounts = relationships_scope.page(params[:page]).per(40) @accounts = RelationshipFilter.new(current_account, filter_params).results.page(params[:page]).per(40)
end
def relationships_scope
scope = begin
if following_relationship?
current_account.following.eager_load(:account_stat).reorder(nil)
else
current_account.followers.eager_load(:account_stat).reorder(nil)
end
end
scope.merge!(Follow.recent) if params[:order].blank? || params[:order] == 'recent'
scope.merge!(Account.by_recent_status) if params[:order] == 'active'
scope.merge!(mutual_relationship_scope) if mutual_relationship?
scope.merge!(moved_account_scope) if params[:status] == 'moved'
scope.merge!(primary_account_scope) if params[:status] == 'primary'
scope.merge!(by_domain_scope) if params[:by_domain].present?
scope.merge!(dormant_account_scope) if params[:activity] == 'dormant'
scope
end
def mutual_relationship_scope
Account.where(id: current_account.following)
end
def moved_account_scope
Account.where.not(moved_to_account_id: nil)
end
def primary_account_scope
Account.where(moved_to_account_id: nil)
end
def dormant_account_scope
AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago)))
end
def by_domain_scope
Account.where(domain: params[:by_domain])
end end
def form_account_batch_params def form_account_batch_params
@ -84,8 +44,8 @@ class RelationshipsController < ApplicationController
params[:relationship] == 'followed_by' params[:relationship] == 'followed_by'
end end
def current_params def filter_params
params.slice(:page, :status, :relationship, :by_domain, :activity, :order).permit(:page, :status, :relationship, :by_domain, :activity, :order) params.slice(:page, *RelationshipFilter::KEYS).permit(:page, *RelationshipFilter::KEYS)
end end
def action_from_button def action_from_button

View File

@ -2,10 +2,15 @@
class Settings::BaseController < ApplicationController class Settings::BaseController < ApplicationController
before_action :set_body_classes before_action :set_body_classes
before_action :set_cache_headers
private private
def set_body_classes def set_body_classes
@body_classes = 'admin' @body_classes = 'admin'
end end
def set_cache_headers
response.headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate'
end
end end

View File

@ -1,16 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
class Settings::ProfilesController < Settings::BaseController class Settings::ProfilesController < Settings::BaseController
include ObfuscateFilename
layout 'admin' layout 'admin'
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_account before_action :set_account
obfuscate_filename [:account, :avatar]
obfuscate_filename [:account, :header]
def show def show
@account.build_fields @account.build_fields
end end

View File

@ -46,7 +46,7 @@ class StatusesController < ApplicationController
end end
def embed def embed
raise ActiveRecord::RecordNotFound if @status.hidden? return not_found if @status.hidden?
expires_in 180, public: true expires_in 180, public: true
response.headers['X-Frame-Options'] = 'ALLOWALL' response.headers['X-Frame-Options'] = 'ALLOWALL'
@ -68,7 +68,7 @@ class StatusesController < ApplicationController
@status = @account.statuses.find(params[:id]) @status = @account.statuses.find(params[:id])
authorize @status, :show? authorize @status, :show?
rescue Mastodon::NotPermittedError rescue Mastodon::NotPermittedError
raise ActiveRecord::RecordNotFound not_found
end end
def set_instance_presenter def set_instance_presenter

View File

@ -8,12 +8,8 @@ module WellKnown
def show def show
@webfinger_template = "#{webfinger_url}?resource={uri}" @webfinger_template = "#{webfinger_url}?resource={uri}"
respond_to do |format|
format.xml { render content_type: 'application/xrd+xml' }
end
expires_in 3.days, public: true expires_in 3.days, public: true
render content_type: 'application/xrd+xml', formats: [:xml]
end end
end end
end end

View File

@ -3,7 +3,7 @@
module AccountsHelper module AccountsHelper
def display_name(account, **options) def display_name(account, **options)
if options[:custom_emojify] if options[:custom_emojify]
Formatter.instance.format_display_name(account, options) Formatter.instance.format_display_name(account, **options)
else else
account.display_name.presence || account.username account.display_name.presence || account.username
end end
@ -13,7 +13,7 @@ module AccountsHelper
if account.local? if account.local?
"@#{account.acct}@#{Rails.configuration.x.local_domain}" "@#{account.acct}@#{Rails.configuration.x.local_domain}"
else else
"@#{account.acct}" "@#{account.pretty_acct}"
end end
end end

View File

@ -22,6 +22,8 @@ module Admin::ActionLogsHelper
log.recorded_changes.slice('severity', 'reject_media') log.recorded_changes.slice('severity', 'reject_media')
elsif log.target_type == 'Status' && log.action == :update elsif log.target_type == 'Status' && log.action == :update
log.recorded_changes.slice('sensitive') log.recorded_changes.slice('sensitive')
elsif log.target_type == 'Announcement' && log.action == :update
log.recorded_changes.slice('text', 'starts_at', 'ends_at', 'all_day')
end end
end end
@ -52,6 +54,8 @@ module Admin::ActionLogsHelper
'pencil' 'pencil'
when 'AccountWarning' when 'AccountWarning'
'warning' 'warning'
when 'Announcement'
'bullhorn'
end end
end end
@ -94,6 +98,8 @@ module Admin::ActionLogsHelper
link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record) link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record)
when 'AccountWarning' when 'AccountWarning'
link_to record.target_account.acct, admin_account_path(record.target_account_id) link_to record.target_account.acct, admin_account_path(record.target_account_id)
when 'Announcement'
link_to "##{record.id}", edit_admin_announcement_path(record.id)
end end
end end
@ -111,6 +117,8 @@ module Admin::ActionLogsHelper
else else
I18n.t('admin.action_logs.deleted_status') I18n.t('admin.action_logs.deleted_status')
end end
when 'Announcement'
"##{attributes['id']}"
end end
end end
end end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
module Admin::AnnouncementsHelper
def time_range(announcement)
if announcement.all_day?
safe_join([l(announcement.starts_at.to_date), ' - ', l(announcement.ends_at.to_date)])
else
safe_join([l(announcement.starts_at), ' - ', l(announcement.ends_at)])
end
end
end

View File

@ -1,15 +1,16 @@
# frozen_string_literal: true # frozen_string_literal: true
module Admin::FilterHelper module Admin::FilterHelper
ACCOUNT_FILTERS = %i(local remote by_domain active pending silenced suspended username display_name email ip staff).freeze FILTERS = [
REPORT_FILTERS = %i(resolved account_id target_account_id by_target_domain).freeze AccountFilter::KEYS,
INVITE_FILTER = %i(available expired).freeze CustomEmojiFilter::KEYS,
CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze ReportFilter::KEYS,
TAGS_FILTERS = %i(directory reviewed unreviewed pending_review popular active name).freeze TagFilter::KEYS,
INSTANCES_FILTERS = %i(limited by_domain).freeze InstanceFilter::KEYS,
FOLLOWERS_FILTERS = %i(relationship status by_domain activity order).freeze InviteFilter::KEYS,
RelationshipFilter::KEYS,
FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS + INVITE_FILTER + CUSTOM_EMOJI_FILTERS + TAGS_FILTERS + INSTANCES_FILTERS + FOLLOWERS_FILTERS AnnouncementFilter::KEYS,
].flatten.freeze
def filter_link_to(text, link_to_params, link_class_params = link_to_params) def filter_link_to(text, link_to_params, link_class_params = link_to_params)
new_url = filtered_url_for(link_to_params) new_url = filtered_url_for(link_to_params)

View File

@ -13,13 +13,13 @@ module RoutingHelper
end end
def full_asset_url(source, **options) def full_asset_url(source, **options)
source = ActionController::Base.helpers.asset_url(source, options) unless use_storage? source = ActionController::Base.helpers.asset_url(source, **options) unless use_storage?
URI.join(root_url, source).to_s URI.join(root_url, source).to_s
end end
def full_pack_url(source, **options) def full_pack_url(source, **options)
full_asset_url(asset_pack_path(source, options)) full_asset_url(asset_pack_path(source, **options))
end end
private private

View File

@ -32,9 +32,11 @@ module SettingsHelper
hy: 'Հայերեն', hy: 'Հայերեն',
id: 'Bahasa Indonesia', id: 'Bahasa Indonesia',
io: 'Ido', io: 'Ido',
is: 'Íslenska',
it: 'Italiano', it: 'Italiano',
ja: '日本語', ja: '日本語',
ka: 'ქართული', ka: 'ქართული',
kab: 'Taqbaylit',
kk: 'Қазақша', kk: 'Қазақша',
kn: 'ಕನ್ನಡ', kn: 'ಕನ್ನಡ',
ko: '한국어', ko: '한국어',

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,150 @@
import api from '../api';
import { normalizeAnnouncement } from './importer/normalizer';
export const ANNOUNCEMENTS_FETCH_REQUEST = 'ANNOUNCEMENTS_FETCH_REQUEST';
export const ANNOUNCEMENTS_FETCH_SUCCESS = 'ANNOUNCEMENTS_FETCH_SUCCESS';
export const ANNOUNCEMENTS_FETCH_FAIL = 'ANNOUNCEMENTS_FETCH_FAIL';
export const ANNOUNCEMENTS_UPDATE = 'ANNOUNCEMENTS_UPDATE';
export const ANNOUNCEMENTS_DELETE = 'ANNOUNCEMENTS_DELETE';
export const ANNOUNCEMENTS_REACTION_ADD_REQUEST = 'ANNOUNCEMENTS_REACTION_ADD_REQUEST';
export const ANNOUNCEMENTS_REACTION_ADD_SUCCESS = 'ANNOUNCEMENTS_REACTION_ADD_SUCCESS';
export const ANNOUNCEMENTS_REACTION_ADD_FAIL = 'ANNOUNCEMENTS_REACTION_ADD_FAIL';
export const ANNOUNCEMENTS_REACTION_REMOVE_REQUEST = 'ANNOUNCEMENTS_REACTION_REMOVE_REQUEST';
export const ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS = 'ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS';
export const ANNOUNCEMENTS_REACTION_REMOVE_FAIL = 'ANNOUNCEMENTS_REACTION_REMOVE_FAIL';
export const ANNOUNCEMENTS_REACTION_UPDATE = 'ANNOUNCEMENTS_REACTION_UPDATE';
export const ANNOUNCEMENTS_TOGGLE_SHOW = 'ANNOUNCEMENTS_TOGGLE_SHOW';
const noOp = () => {};
export const fetchAnnouncements = (done = noOp) => (dispatch, getState) => {
dispatch(fetchAnnouncementsRequest());
api(getState).get('/api/v1/announcements').then(response => {
dispatch(fetchAnnouncementsSuccess(response.data.map(x => normalizeAnnouncement(x))));
}).catch(error => {
dispatch(fetchAnnouncementsFail(error));
}).finally(() => {
done();
});
};
export const fetchAnnouncementsRequest = () => ({
type: ANNOUNCEMENTS_FETCH_REQUEST,
skipLoading: true,
});
export const fetchAnnouncementsSuccess = announcements => ({
type: ANNOUNCEMENTS_FETCH_SUCCESS,
announcements,
skipLoading: true,
});
export const fetchAnnouncementsFail= error => ({
type: ANNOUNCEMENTS_FETCH_FAIL,
error,
skipLoading: true,
skipAlert: true,
});
export const updateAnnouncements = announcement => ({
type: ANNOUNCEMENTS_UPDATE,
announcement: normalizeAnnouncement(announcement),
});
export const addReaction = (announcementId, name) => (dispatch, getState) => {
const announcement = getState().getIn(['announcements', 'items']).find(x => x.get('id') === announcementId);
let alreadyAdded = false;
if (announcement) {
const reaction = announcement.get('reactions').find(x => x.get('name') === name);
if (reaction && reaction.get('me')) {
alreadyAdded = true;
}
}
if (!alreadyAdded) {
dispatch(addReactionRequest(announcementId, name, alreadyAdded));
}
api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => {
dispatch(addReactionSuccess(announcementId, name, alreadyAdded));
}).catch(err => {
if (!alreadyAdded) {
dispatch(addReactionFail(announcementId, name, err));
}
});
};
export const addReactionRequest = (announcementId, name) => ({
type: ANNOUNCEMENTS_REACTION_ADD_REQUEST,
id: announcementId,
name,
skipLoading: true,
});
export const addReactionSuccess = (announcementId, name) => ({
type: ANNOUNCEMENTS_REACTION_ADD_SUCCESS,
id: announcementId,
name,
skipLoading: true,
});
export const addReactionFail = (announcementId, name, error) => ({
type: ANNOUNCEMENTS_REACTION_ADD_FAIL,
id: announcementId,
name,
error,
skipLoading: true,
});
export const removeReaction = (announcementId, name) => (dispatch, getState) => {
dispatch(removeReactionRequest(announcementId, name));
api(getState).delete(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => {
dispatch(removeReactionSuccess(announcementId, name));
}).catch(err => {
dispatch(removeReactionFail(announcementId, name, err));
});
};
export const removeReactionRequest = (announcementId, name) => ({
type: ANNOUNCEMENTS_REACTION_REMOVE_REQUEST,
id: announcementId,
name,
skipLoading: true,
});
export const removeReactionSuccess = (announcementId, name) => ({
type: ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS,
id: announcementId,
name,
skipLoading: true,
});
export const removeReactionFail = (announcementId, name, error) => ({
type: ANNOUNCEMENTS_REACTION_REMOVE_FAIL,
id: announcementId,
name,
error,
skipLoading: true,
});
export const updateReaction = reaction => ({
type: ANNOUNCEMENTS_REACTION_UPDATE,
reaction,
});
export const toggleShowAnnouncements = () => ({
type: ANNOUNCEMENTS_TOGGLE_SHOW,
});
export const deleteAnnouncement = id => ({
type: ANNOUNCEMENTS_DELETE,
id,
});

View File

@ -76,7 +76,6 @@ export function normalizeStatus(status, normalOldStatus) {
export function normalizePoll(poll) { export function normalizePoll(poll) {
const normalPoll = { ...poll }; const normalPoll = { ...poll };
const emojiMap = makeEmojiMap(normalPoll); const emojiMap = makeEmojiMap(normalPoll);
normalPoll.options = poll.options.map((option, index) => ({ normalPoll.options = poll.options.map((option, index) => ({
@ -87,3 +86,12 @@ export function normalizePoll(poll) {
return normalPoll; return normalPoll;
} }
export function normalizeAnnouncement(announcement) {
const normalAnnouncement = { ...announcement };
const emojiMap = makeEmojiMap(normalAnnouncement);
normalAnnouncement.contentHtml = emojify(normalAnnouncement.content, emojiMap);
return normalAnnouncement;
}

View File

@ -157,9 +157,9 @@ export function expandNotifications({ maxId } = {}, done = noOp) {
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
fetchRelatedRelationships(dispatch, response.data); fetchRelatedRelationships(dispatch, response.data);
done();
}).catch(error => { }).catch(error => {
dispatch(expandNotificationsFail(error, isLoadingMore)); dispatch(expandNotificationsFail(error, isLoadingMore));
}).finally(() => {
done(); done();
}); });
}; };
@ -188,6 +188,7 @@ export function expandNotificationsFail(error, isLoadingMore) {
type: NOTIFICATIONS_EXPAND_FAIL, type: NOTIFICATIONS_EXPAND_FAIL,
error, error,
skipLoading: !isLoadingMore, skipLoading: !isLoadingMore,
skipAlert: !isLoadingMore,
}; };
}; };

View File

@ -27,6 +27,8 @@ export const STATUS_UNMUTE_SUCCESS = 'STATUS_UNMUTE_SUCCESS';
export const STATUS_UNMUTE_FAIL = 'STATUS_UNMUTE_FAIL'; export const STATUS_UNMUTE_FAIL = 'STATUS_UNMUTE_FAIL';
export const STATUS_REVEAL = 'STATUS_REVEAL'; export const STATUS_REVEAL = 'STATUS_REVEAL';
export const STATUS_COLLAPSE = 'STATUS_COLLAPSE';
export const STATUS_HIDE = 'STATUS_HIDE'; export const STATUS_HIDE = 'STATUS_HIDE';
export const REDRAFT = 'REDRAFT'; export const REDRAFT = 'REDRAFT';
@ -320,3 +322,11 @@ export function revealStatus(ids) {
ids, ids,
}; };
} }
export function toggleStatusCollapse(id, isCollapsed) {
return {
type: STATUS_COLLAPSE,
id,
isCollapsed,
};
}

View File

@ -8,6 +8,12 @@ import {
} from './timelines'; } from './timelines';
import { updateNotifications, expandNotifications } from './notifications'; import { updateNotifications, expandNotifications } from './notifications';
import { updateConversations } from './conversations'; import { updateConversations } from './conversations';
import {
fetchAnnouncements,
updateAnnouncements,
updateReaction as updateAnnouncementsReaction,
deleteAnnouncement,
} from './announcements';
import { fetchFilters } from './filters'; import { fetchFilters } from './filters';
import { getLocale } from '../locales'; import { getLocale } from '../locales';
@ -44,6 +50,15 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null,
case 'filters_changed': case 'filters_changed':
dispatch(fetchFilters()); dispatch(fetchFilters());
break; break;
case 'announcement':
dispatch(updateAnnouncements(JSON.parse(data.payload)));
break;
case 'announcement.reaction':
dispatch(updateAnnouncementsReaction(JSON.parse(data.payload)));
break;
case 'announcement.delete':
dispatch(deleteAnnouncement(data.payload));
break;
} }
}, },
}; };
@ -51,7 +66,9 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null,
} }
const refreshHomeTimelineAndNotification = (dispatch, done) => { const refreshHomeTimelineAndNotification = (dispatch, done) => {
dispatch(expandHomeTimeline({}, () => dispatch(expandNotifications({}, done)))); dispatch(expandHomeTimeline({}, () =>
dispatch(expandNotifications({}, () =>
dispatch(fetchAnnouncements(done))))));
}; };
export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification); export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification);

View File

@ -98,9 +98,9 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
const next = getLinks(response).refs.find(link => link.rel === 'next'); const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedStatuses(response.data)); dispatch(importFetchedStatuses(response.data));
dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems)); dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
done();
}).catch(error => { }).catch(error => {
dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
}).finally(() => {
done(); done();
}); });
}; };

View File

@ -0,0 +1,65 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedNumber } from 'react-intl';
import TransitionMotion from 'react-motion/lib/TransitionMotion';
import spring from 'react-motion/lib/spring';
import { reduceMotion } from 'mastodon/initial_state';
export default class AnimatedNumber extends React.PureComponent {
static propTypes = {
value: PropTypes.number.isRequired,
};
state = {
direction: 1,
};
componentWillReceiveProps (nextProps) {
if (nextProps.value > this.props.value) {
this.setState({ direction: 1 });
} else if (nextProps.value < this.props.value) {
this.setState({ direction: -1 });
}
}
willEnter = () => {
const { direction } = this.state;
return { y: -1 * direction };
}
willLeave = () => {
const { direction } = this.state;
return { y: spring(1 * direction, { damping: 35, stiffness: 400 }) };
}
render () {
const { value } = this.props;
const { direction } = this.state;
if (reduceMotion) {
return <FormattedNumber value={value} />;
}
const styles = [{
key: `${value}`,
data: value,
style: { y: spring(0, { damping: 35, stiffness: 400 }) },
}];
return (
<TransitionMotion styles={styles} willEnter={this.willEnter} willLeave={this.willLeave}>
{items => (
<span className='animated-number'>
{items.map(({ key, data, style }) => (
<span key={key} style={{ position: (direction * style.y) > 0 ? 'absolute' : 'static', transform: `translateY(${style.y * 100}%)` }}><FormattedNumber value={data} /></span>
))}
</span>
)}
</TransitionMotion>
);
}
}

View File

@ -58,7 +58,7 @@ export default class ErrorBoundary extends React.PureComponent {
<div> <div>
<p className='error-boundary__error'><FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /></p> <p className='error-boundary__error'><FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /></p>
<p><FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /></p> <p><FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /></p>
<p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied && 'copied'}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p> <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p>
</div> </div>
</div> </div>
); );

View File

@ -23,6 +23,7 @@ class Item extends React.PureComponent {
onClick: PropTypes.func.isRequired, onClick: PropTypes.func.isRequired,
displayWidth: PropTypes.number, displayWidth: PropTypes.number,
visible: PropTypes.bool.isRequired, visible: PropTypes.bool.isRequired,
autoplay: PropTypes.bool,
}; };
static defaultProps = { static defaultProps = {
@ -48,9 +49,13 @@ class Item extends React.PureComponent {
} }
} }
getAutoPlay() {
return this.props.autoplay || autoPlayGif;
}
hoverToPlay () { hoverToPlay () {
const { attachment } = this.props; const { attachment } = this.props;
return !autoPlayGif && attachment.get('type') === 'gifv'; return !this.getAutoPlay() && attachment.get('type') === 'gifv';
} }
handleClick = (e) => { handleClick = (e) => {
@ -201,7 +206,7 @@ class Item extends React.PureComponent {
</a> </a>
); );
} else if (attachment.get('type') === 'gifv') { } else if (attachment.get('type') === 'gifv') {
const autoPlay = !isIOS() && autoPlayGif; const autoPlay = !isIOS() && this.getAutoPlay();
thumbnail = ( thumbnail = (
<div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}> <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>
@ -248,6 +253,7 @@ class MediaGallery extends React.PureComponent {
defaultWidth: PropTypes.number, defaultWidth: PropTypes.number,
cacheWidth: PropTypes.func, cacheWidth: PropTypes.func,
visible: PropTypes.bool, visible: PropTypes.bool,
autoplay: PropTypes.bool,
onToggleVisibility: PropTypes.func, onToggleVisibility: PropTypes.func,
}; };
@ -297,7 +303,7 @@ class MediaGallery extends React.PureComponent {
} }
render () { render () {
const { media, intl, sensitive, height, defaultWidth, standalone } = this.props; const { media, intl, sensitive, height, defaultWidth, standalone, autoplay } = this.props;
const { visible } = this.state; const { visible } = this.state;
const width = this.state.width || defaultWidth; const width = this.state.width || defaultWidth;
@ -320,9 +326,9 @@ class MediaGallery extends React.PureComponent {
const uncached = media.every(attachment => attachment.get('type') === 'unknown'); const uncached = media.every(attachment => attachment.get('type') === 'unknown');
if (standalone && this.isFullSizeEligible()) { if (standalone && this.isFullSizeEligible()) {
children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} visible={visible} />; children = <Item standalone autoplay={autoplay} onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} visible={visible} />;
} else { } else {
children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} visible={visible || uncached} />); children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} autoplay={autoplay} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} visible={visible || uncached} />);
} }
if (uncached) { if (uncached) {

View File

@ -3,6 +3,7 @@ import { injectIntl, defineMessages } from 'react-intl';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
const messages = defineMessages({ const messages = defineMessages({
today: { id: 'relative_time.today', defaultMessage: 'today' },
just_now: { id: 'relative_time.just_now', defaultMessage: 'now' }, just_now: { id: 'relative_time.just_now', defaultMessage: 'now' },
seconds: { id: 'relative_time.seconds', defaultMessage: '{number}s' }, seconds: { id: 'relative_time.seconds', defaultMessage: '{number}s' },
minutes: { id: 'relative_time.minutes', defaultMessage: '{number}m' }, minutes: { id: 'relative_time.minutes', defaultMessage: '{number}m' },
@ -65,12 +66,14 @@ const getUnitDelay = units => {
} }
}; };
export const timeAgoString = (intl, date, now, year) => { export const timeAgoString = (intl, date, now, year, timeGiven = true) => {
const delta = now - date.getTime(); const delta = now - date.getTime();
let relativeTime; let relativeTime;
if (delta < 10 * SECOND) { if (delta < DAY && !timeGiven) {
relativeTime = intl.formatMessage(messages.today);
} else if (delta < 10 * SECOND) {
relativeTime = intl.formatMessage(messages.just_now); relativeTime = intl.formatMessage(messages.just_now);
} else if (delta < 7 * DAY) { } else if (delta < 7 * DAY) {
if (delta < MINUTE) { if (delta < MINUTE) {
@ -91,12 +94,14 @@ export const timeAgoString = (intl, date, now, year) => {
return relativeTime; return relativeTime;
}; };
const timeRemainingString = (intl, date, now) => { const timeRemainingString = (intl, date, now, timeGiven = true) => {
const delta = date.getTime() - now; const delta = date.getTime() - now;
let relativeTime; let relativeTime;
if (delta < 10 * SECOND) { if (delta < DAY && !timeGiven) {
relativeTime = intl.formatMessage(messages.today);
} else if (delta < 10 * SECOND) {
relativeTime = intl.formatMessage(messages.moments_remaining); relativeTime = intl.formatMessage(messages.moments_remaining);
} else if (delta < MINUTE) { } else if (delta < MINUTE) {
relativeTime = intl.formatMessage(messages.seconds_remaining, { number: Math.floor(delta / SECOND) }); relativeTime = intl.formatMessage(messages.seconds_remaining, { number: Math.floor(delta / SECOND) });
@ -173,8 +178,9 @@ class RelativeTimestamp extends React.Component {
render () { render () {
const { timestamp, intl, year, futureDate } = this.props; const { timestamp, intl, year, futureDate } = this.props;
const timeGiven = timestamp.includes('T');
const date = new Date(timestamp); const date = new Date(timestamp);
const relativeTime = futureDate ? timeRemainingString(intl, date, this.state.now) : timeAgoString(intl, date, this.state.now, year); const relativeTime = futureDate ? timeRemainingString(intl, date, this.state.now, timeGiven) : timeAgoString(intl, date, this.state.now, year, timeGiven);
return ( return (
<time dateTime={timestamp} title={intl.formatDate(date, dateFormatOptions)}> <time dateTime={timestamp} title={intl.formatDate(date, dateFormatOptions)}>

View File

@ -208,10 +208,13 @@ export default class ScrollableList extends PureComponent {
} }
attachIntersectionObserver () { attachIntersectionObserver () {
this.intersectionObserverWrapper.connect({ let nodeOptions = {
root: this.node, root: this.node,
rootMargin: '300% 0px', rootMargin: '300% 0px',
}); };
this.intersectionObserverWrapper
.connect(this.props.bindToDocument ? {} : nodeOptions);
} }
detachIntersectionObserver () { detachIntersectionObserver () {
@ -293,7 +296,7 @@ export default class ScrollableList extends PureComponent {
</div> </div>
</div> </div>
); );
} else if (isLoading || childrenCount > 0 || hasMore || !emptyMessage) { } else if (isLoading || childrenCount > 0 || numPending > 0 || hasMore || !emptyMessage) {
scrollableArea = ( scrollableArea = (
<div className={classNames('scrollable', { fullscreen })} ref={this.setRef} onMouseMove={this.handleMouseMove}> <div className={classNames('scrollable', { fullscreen })} ref={this.setRef} onMouseMove={this.handleMouseMove}>
<div role='feed' className='item-list'> <div role='feed' className='item-list'>

View File

@ -200,7 +200,11 @@ class Status extends ImmutablePureComponent {
handleExpandedToggle = () => { handleExpandedToggle = () => {
this.props.onToggleHidden(this._properStatus()); this.props.onToggleHidden(this._properStatus());
}; }
handleCollapsedToggle = isCollapsed => {
this.props.onToggleCollapsed(this._properStatus(), isCollapsed);
}
renderLoadingMediaGallery() { renderLoadingMediaGallery() {
return (<div return (<div

View File

@ -23,11 +23,11 @@ export default class StatusContent extends React.PureComponent {
onExpandedToggle: PropTypes.func, onExpandedToggle: PropTypes.func,
onClick: PropTypes.func, onClick: PropTypes.func,
collapsable: PropTypes.bool, collapsable: PropTypes.bool,
onCollapsedToggle: PropTypes.func,
}; };
state = { state = {
hidden: true, hidden: true,
collapsed: null, // `collapsed: null` indicates that an element doesn't need collapsing, while `true` or `false` indicates that it does (and is/isn't).
}; };
_updateStatusLinks () { _updateStatusLinks () {
@ -62,14 +62,16 @@ export default class StatusContent extends React.PureComponent {
link.setAttribute('rel', 'noopener noreferrer'); link.setAttribute('rel', 'noopener noreferrer');
} }
if ( if (this.props.status.get('collapsed', null) === null) {
this.props.collapsable let collapsed =
&& this.props.onClick this.props.collapsable
&& this.state.collapsed === null && this.props.onClick
&& node.clientHeight > MAX_HEIGHT && node.clientHeight > MAX_HEIGHT
&& this.props.status.get('spoiler_text').length === 0 && this.props.status.get('spoiler_text').length === 0;
) {
this.setState({ collapsed: true }); if(this.props.onCollapsedToggle) this.props.onCollapsedToggle(collapsed);
this.props.status.set('collapsed', collapsed);
} }
} }
@ -178,6 +180,7 @@ export default class StatusContent extends React.PureComponent {
} }
const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
const renderReadMore = this.props.onClick && status.get('collapsed');
const content = { __html: status.get('contentHtml') }; const content = { __html: status.get('contentHtml') };
const spoilerContent = { __html: status.get('spoilerHtml') }; const spoilerContent = { __html: status.get('spoilerHtml') };
@ -185,7 +188,7 @@ export default class StatusContent extends React.PureComponent {
const classNames = classnames('status__content', { const classNames = classnames('status__content', {
'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-action': this.props.onClick && this.context.router,
'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--with-spoiler': status.get('spoiler_text').length > 0,
'status__content--collapsed': this.state.collapsed === true, 'status__content--collapsed': renderReadMore,
}); });
if (isRtl(status.get('search_index'))) { if (isRtl(status.get('search_index'))) {
@ -237,7 +240,7 @@ export default class StatusContent extends React.PureComponent {
</div>, </div>,
]; ];
if (this.state.collapsed) { if (renderReadMore) {
output.push(readMoreButton); output.push(readMoreButton);
} }

View File

@ -23,6 +23,7 @@ import {
deleteStatus, deleteStatus,
hideStatus, hideStatus,
revealStatus, revealStatus,
toggleStatusCollapse,
} from '../actions/statuses'; } from '../actions/statuses';
import { import {
unmuteAccount, unmuteAccount,
@ -190,6 +191,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
} }
}, },
onToggleCollapsed (status, isCollapsed) {
dispatch(toggleStatusCollapse(status.get('id'), isCollapsed));
},
onBlockDomain (domain) { onBlockDomain (domain) {
dispatch(openModal('CONFIRM', { dispatch(openModal('CONFIRM', {
message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />, message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />,

View File

@ -115,6 +115,7 @@ class AccountTimeline extends ImmutablePureComponent {
shouldUpdateScroll={shouldUpdateScroll} shouldUpdateScroll={shouldUpdateScroll}
emptyMessage={emptyMessage} emptyMessage={emptyMessage}
bindToDocument={!multiColumn} bindToDocument={!multiColumn}
timelineId='account'
/> />
</Column> </Column>
); );

View File

@ -37,15 +37,14 @@ class Audio extends React.PureComponent {
volume: 0.5, volume: 0.5,
}; };
// hard coded in components.scss // Hard coded in components.scss
// any way to get ::before values programatically? // Any way to get ::before values programatically?
volWidth = 50;
volWidth = 50;
volOffset = 70; volOffset = 70;
volHandleOffset = v => { volHandleOffset = v => {
const offset = v * this.volWidth + this.volOffset; const offset = v * this.volWidth + this.volOffset;
return (offset > 110) ? 110 : offset; return (offset > 110) ? 110 : offset;
} }
@ -61,6 +60,8 @@ class Audio extends React.PureComponent {
if (this.waveform) { if (this.waveform) {
this._updateWaveform(); this._updateWaveform();
} }
window.addEventListener('scroll', this.handleScroll);
} }
componentDidUpdate (prevProps) { componentDidUpdate (prevProps) {
@ -70,6 +71,8 @@ class Audio extends React.PureComponent {
} }
componentWillUnmount () { componentWillUnmount () {
window.removeEventListener('scroll', this.handleScroll);
if (this.wavesurfer) { if (this.wavesurfer) {
this.wavesurfer.destroy(); this.wavesurfer.destroy();
this.wavesurfer = null; this.wavesurfer = null;
@ -128,16 +131,15 @@ class Audio extends React.PureComponent {
this.loaded = true; this.loaded = true;
} }
this.wavesurfer.play(); this.setState({ paused: false }, () => this.wavesurfer.play());
this.setState({ paused: false });
} else { } else {
this.wavesurfer.pause(); this.setState({ paused: true }, () => this.wavesurfer.pause());
this.setState({ paused: true });
} }
} }
toggleMute = () => { toggleMute = () => {
this.wavesurfer.setMute(!this.state.muted); const muted = !this.state.muted;
this.setState({ muted }, () => this.wavesurfer.setMute(muted));
} }
handleVolumeMouseDown = e => { handleVolumeMouseDown = e => {
@ -176,6 +178,19 @@ class Audio extends React.PureComponent {
} }
}, 60); }, 60);
handleScroll = throttle(() => {
if (!this.waveform || !this.wavesurfer) {
return;
}
const { top, height } = this.waveform.getBoundingClientRect();
const inView = (top <= (window.innerHeight || document.documentElement.clientHeight)) && (top + height >= 0);
if (!this.state.paused && !inView) {
this.setState({ paused: true }, () => this.wavesurfer.pause());
}
}, 150, { trailing: true })
render () { render () {
const { height, intl, alt, editable } = this.props; const { height, intl, alt, editable } = this.props;
const { paused, muted, volume, currentTime } = this.state; const { paused, muted, volume, currentTime } = this.state;

View File

@ -290,6 +290,7 @@ class EmojiPickerDropdown extends React.PureComponent {
onPickEmoji: PropTypes.func.isRequired, onPickEmoji: PropTypes.func.isRequired,
onSkinTone: PropTypes.func.isRequired, onSkinTone: PropTypes.func.isRequired,
skinTone: PropTypes.number.isRequired, skinTone: PropTypes.number.isRequired,
button: PropTypes.node,
}; };
state = { state = {
@ -350,18 +351,18 @@ class EmojiPickerDropdown extends React.PureComponent {
} }
render () { render () {
const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props; const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props;
const title = intl.formatMessage(messages.emoji); const title = intl.formatMessage(messages.emoji);
const { active, loading, placement } = this.state; const { active, loading, placement } = this.state;
return ( return (
<div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}> <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>
<div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}> <div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>
<img {button || <img
className={classNames('emojione', { 'pulse-loading': active && loading })} className={classNames('emojione', { 'pulse-loading': active && loading })}
alt='🙂' alt='🙂'
src={`${assetHost}/emoji/1f602.svg`} src={`${assetHost}/emoji/1f602.svg`}
/> />}
</div> </div>
<Overlay show={active} placement={placement} target={this.findTarget}> <Overlay show={active} placement={placement} target={this.findTarget}>

View File

@ -22,6 +22,7 @@ const messages = defineMessages({
requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' },
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
}); });
const makeMapStateToProps = () => { const makeMapStateToProps = () => {

View File

@ -5,11 +5,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator'; import LoadingIndicator from '../../components/loading_indicator';
import { import { expandFollowers, fetchAccount, fetchFollowers } from '../../actions/accounts';
fetchAccount,
fetchFollowers,
expandFollowers,
} from '../../actions/accounts';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import AccountContainer from '../../containers/account_container'; import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column'; import Column from '../ui/components/column';
@ -19,34 +15,34 @@ import ScrollableList from '../../components/scrollable_list';
import MissingIndicator from 'mastodon/components/missing_indicator'; import MissingIndicator from 'mastodon/components/missing_indicator';
const mapStateToProps = (state, props) => ({ const mapStateToProps = (state, props) => ({
isAccount: !!state.getIn(['accounts', props.params.accountId]), isAccount : !!state.getIn(['accounts', props.params.accountId]),
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']), accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), hasMore : !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), blockedBy : state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
}); });
export default @connect(mapStateToProps) export default @connect(mapStateToProps)
class Followers extends ImmutablePureComponent { class Followers extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params : PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired, dispatch : PropTypes.func.isRequired,
shouldUpdateScroll: PropTypes.func, shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list, accountIds : ImmutablePropTypes.list,
hasMore: PropTypes.bool, hasMore : PropTypes.bool,
blockedBy: PropTypes.bool, blockedBy : PropTypes.bool,
isAccount: PropTypes.bool, isAccount : PropTypes.bool,
multiColumn: PropTypes.bool, multiColumn : PropTypes.bool,
}; };
componentWillMount () { componentWillMount() {
if (!this.props.accountIds) { if (!this.props.accountIds) {
this.props.dispatch(fetchAccount(this.props.params.accountId)); this.props.dispatch(fetchAccount(this.props.params.accountId));
this.props.dispatch(fetchFollowers(this.props.params.accountId)); this.props.dispatch(fetchFollowers(this.props.params.accountId));
} }
} }
componentWillReceiveProps (nextProps) { componentWillReceiveProps(nextProps) {
if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) { if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {
this.props.dispatch(fetchAccount(nextProps.params.accountId)); this.props.dispatch(fetchAccount(nextProps.params.accountId));
this.props.dispatch(fetchFollowers(nextProps.params.accountId)); this.props.dispatch(fetchFollowers(nextProps.params.accountId));
@ -57,29 +53,35 @@ class Followers extends ImmutablePureComponent {
this.props.dispatch(expandFollowers(this.props.params.accountId)); this.props.dispatch(expandFollowers(this.props.params.accountId));
}, 300, { leading: true }); }, 300, { leading: true });
render () { render() {
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props; const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props;
if (!isAccount) { if (!isAccount) {
return ( return (
<Column> <Column >
<MissingIndicator /> <MissingIndicator />
</Column> </Column >
); );
} }
if (!accountIds) { if (!accountIds) {
return ( return (
<Column> <Column >
<LoadingIndicator /> <LoadingIndicator />
</Column> </Column >
); );
} }
const emptyMessage = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />; const emptyMessage = blockedBy ? <FormattedMessage
id='empty_column.account_unavailable'
defaultMessage='Profile unavailable'
/> : <FormattedMessage
id='account.followers.empty'
defaultMessage='No one follows this user yet.'
/>;
return ( return (
<Column> <Column >
<ColumnBackButton multiColumn={multiColumn} /> <ColumnBackButton multiColumn={multiColumn} />
<ScrollableList <ScrollableList
@ -87,16 +89,23 @@ class Followers extends ImmutablePureComponent {
hasMore={hasMore} hasMore={hasMore}
onLoadMore={this.handleLoadMore} onLoadMore={this.handleLoadMore}
shouldUpdateScroll={shouldUpdateScroll} shouldUpdateScroll={shouldUpdateScroll}
prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} prepend={<HeaderContainer
accountId={this.props.params.accountId}
hideTabs
/>}
alwaysPrepend alwaysPrepend
emptyMessage={emptyMessage} emptyMessage={emptyMessage}
bindToDocument={!multiColumn} bindToDocument={!multiColumn}
> >
{blockedBy ? [] : accountIds.map(id => {blockedBy ? [] : accountIds.map(id =>
<AccountContainer key={id} id={id} withNote={false} /> <AccountContainer
key={id}
id={id}
withNote={false}
/>,
)} )}
</ScrollableList> </ScrollableList >
</Column> </Column >
); );
} }

View File

@ -0,0 +1,404 @@
import React from 'react';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ReactSwipeableViews from 'react-swipeable-views';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import IconButton from 'mastodon/components/icon_button';
import Icon from 'mastodon/components/icon';
import { defineMessages, injectIntl, FormattedMessage, FormattedDate } from 'react-intl';
import { autoPlayGif, reduceMotion } from 'mastodon/initial_state';
import elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg';
import { mascot } from 'mastodon/initial_state';
import unicodeMapping from 'mastodon/features/emoji/emoji_unicode_mapping_light';
import classNames from 'classnames';
import EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_picker_dropdown_container';
import AnimatedNumber from 'mastodon/components/animated_number';
import TransitionMotion from 'react-motion/lib/TransitionMotion';
import spring from 'react-motion/lib/spring';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
previous: { id: 'lightbox.previous', defaultMessage: 'Previous' },
next: { id: 'lightbox.next', defaultMessage: 'Next' },
});
class Content extends ImmutablePureComponent {
static contextTypes = {
router: PropTypes.object,
};
static propTypes = {
announcement: ImmutablePropTypes.map.isRequired,
};
setRef = c => {
this.node = c;
}
componentDidMount () {
this._updateLinks();
this._updateEmojis();
}
componentDidUpdate () {
this._updateLinks();
this._updateEmojis();
}
_updateEmojis () {
const node = this.node;
if (!node || autoPlayGif) {
return;
}
const emojis = node.querySelectorAll('.custom-emoji');
for (var i = 0; i < emojis.length; i++) {
let emoji = emojis[i];
if (emoji.classList.contains('status-emoji')) {
continue;
}
emoji.classList.add('status-emoji');
emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);
emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);
}
}
_updateLinks () {
const node = this.node;
if (!node) {
return;
}
const links = node.querySelectorAll('a');
for (var i = 0; i < links.length; ++i) {
let link = links[i];
if (link.classList.contains('status-link')) {
continue;
}
link.classList.add('status-link');
let mention = this.props.announcement.get('mentions').find(item => link.href === item.get('url'));
if (mention) {
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
link.setAttribute('title', mention.get('acct'));
} else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {
link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false);
} else {
link.setAttribute('title', link.href);
link.classList.add('unhandled-link');
}
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
}
}
onMentionClick = (mention, e) => {
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/accounts/${mention.get('id')}`);
}
}
onHashtagClick = (hashtag, e) => {
hashtag = hashtag.replace(/^#/, '');
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/timelines/tag/${hashtag}`);
}
}
handleEmojiMouseEnter = ({ target }) => {
target.src = target.getAttribute('data-original');
}
handleEmojiMouseLeave = ({ target }) => {
target.src = target.getAttribute('data-static');
}
render () {
const { announcement } = this.props;
return (
<div
className='announcements__item__content'
ref={this.setRef}
dangerouslySetInnerHTML={{ __html: announcement.get('contentHtml') }}
/>
);
}
}
const assetHost = process.env.CDN_HOST || '';
class Emoji extends React.PureComponent {
static propTypes = {
emoji: PropTypes.string.isRequired,
emojiMap: ImmutablePropTypes.map.isRequired,
hovered: PropTypes.bool.isRequired,
};
render () {
const { emoji, emojiMap, hovered } = this.props;
if (unicodeMapping[emoji]) {
const { filename, shortCode } = unicodeMapping[this.props.emoji];
const title = shortCode ? `:${shortCode}:` : '';
return (
<img
draggable='false'
className='emojione'
alt={emoji}
title={title}
src={`${assetHost}/emoji/${filename}.svg`}
/>
);
} else if (emojiMap.get(emoji)) {
const filename = (autoPlayGif || hovered) ? emojiMap.getIn([emoji, 'url']) : emojiMap.getIn([emoji, 'static_url']);
const shortCode = `:${emoji}:`;
return (
<img
draggable='false'
className='emojione custom-emoji'
alt={shortCode}
title={shortCode}
src={filename}
/>
);
} else {
return null;
}
}
}
class Reaction extends ImmutablePureComponent {
static propTypes = {
announcementId: PropTypes.string.isRequired,
reaction: ImmutablePropTypes.map.isRequired,
addReaction: PropTypes.func.isRequired,
removeReaction: PropTypes.func.isRequired,
emojiMap: ImmutablePropTypes.map.isRequired,
style: PropTypes.object,
};
state = {
hovered: false,
};
handleClick = () => {
const { reaction, announcementId, addReaction, removeReaction } = this.props;
if (reaction.get('me')) {
removeReaction(announcementId, reaction.get('name'));
} else {
addReaction(announcementId, reaction.get('name'));
}
}
handleMouseEnter = () => this.setState({ hovered: true })
handleMouseLeave = () => this.setState({ hovered: false })
render () {
const { reaction } = this.props;
let shortCode = reaction.get('name');
if (unicodeMapping[shortCode]) {
shortCode = unicodeMapping[shortCode].shortCode;
}
return (
<button className={classNames('reactions-bar__item', { active: reaction.get('me') })} onClick={this.handleClick} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} title={`:${shortCode}:`} style={this.props.style}>
<span className='reactions-bar__item__emoji'><Emoji hovered={this.state.hovered} emoji={reaction.get('name')} emojiMap={this.props.emojiMap} /></span>
<span className='reactions-bar__item__count'><AnimatedNumber value={reaction.get('count')} /></span>
</button>
);
}
}
class ReactionsBar extends ImmutablePureComponent {
static propTypes = {
announcementId: PropTypes.string.isRequired,
reactions: ImmutablePropTypes.list.isRequired,
addReaction: PropTypes.func.isRequired,
removeReaction: PropTypes.func.isRequired,
emojiMap: ImmutablePropTypes.map.isRequired,
};
handleEmojiPick = data => {
const { addReaction, announcementId } = this.props;
addReaction(announcementId, data.native.replace(/:/g, ''));
}
willEnter () {
return { scale: reduceMotion ? 1 : 0 };
}
willLeave () {
return { scale: reduceMotion ? 0 : spring(0, { stiffness: 170, damping: 26 }) };
}
render () {
const { reactions } = this.props;
const visibleReactions = reactions.filter(x => x.get('count') > 0);
const styles = visibleReactions.map(reaction => ({
key: reaction.get('name'),
data: reaction,
style: { scale: reduceMotion ? 1 : spring(1, { stiffness: 150, damping: 13 }) },
})).toArray();
return (
<TransitionMotion styles={styles} willEnter={this.willEnter} willLeave={this.willLeave}>
{items => (
<div className={classNames('reactions-bar', { 'reactions-bar--empty': visibleReactions.isEmpty() })}>
{items.map(({ key, data, style }) => (
<Reaction
key={key}
reaction={data}
style={{ transform: `scale(${style.scale})`, position: style.scale < 0.5 ? 'absolute' : 'static' }}
announcementId={this.props.announcementId}
addReaction={this.props.addReaction}
removeReaction={this.props.removeReaction}
emojiMap={this.props.emojiMap}
/>
))}
{visibleReactions.size < 8 && <EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} button={<Icon id='plus' />} />}
</div>
)}
</TransitionMotion>
);
}
}
class Announcement extends ImmutablePureComponent {
static propTypes = {
announcement: ImmutablePropTypes.map.isRequired,
emojiMap: ImmutablePropTypes.map.isRequired,
addReaction: PropTypes.func.isRequired,
removeReaction: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
render () {
const { announcement } = this.props;
const startsAt = announcement.get('starts_at') && new Date(announcement.get('starts_at'));
const endsAt = announcement.get('ends_at') && new Date(announcement.get('ends_at'));
const now = new Date();
const hasTimeRange = startsAt && endsAt;
const skipYear = hasTimeRange && startsAt.getFullYear() === endsAt.getFullYear() && endsAt.getFullYear() === now.getFullYear();
const skipEndDate = hasTimeRange && startsAt.getDate() === endsAt.getDate() && startsAt.getMonth() === endsAt.getMonth() && startsAt.getFullYear() === endsAt.getFullYear();
const skipTime = announcement.get('all_day');
return (
<div className='announcements__item'>
<strong className='announcements__item__range'>
<FormattedMessage id='announcement.announcement' defaultMessage='Announcement' />
{hasTimeRange && <span> · <FormattedDate value={startsAt} hour12={false} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} hour12={false} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}
</strong>
<Content announcement={announcement} />
<ReactionsBar
reactions={announcement.get('reactions')}
announcementId={announcement.get('id')}
addReaction={this.props.addReaction}
removeReaction={this.props.removeReaction}
emojiMap={this.props.emojiMap}
/>
</div>
);
}
}
export default @injectIntl
class Announcements extends ImmutablePureComponent {
static propTypes = {
announcements: ImmutablePropTypes.list,
emojiMap: ImmutablePropTypes.map.isRequired,
addReaction: PropTypes.func.isRequired,
removeReaction: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
state = {
index: 0,
};
handleChangeIndex = index => {
this.setState({ index: index % this.props.announcements.size });
}
handleNextClick = () => {
this.setState({ index: (this.state.index + 1) % this.props.announcements.size });
}
handlePrevClick = () => {
this.setState({ index: (this.props.announcements.size + this.state.index - 1) % this.props.announcements.size });
}
render () {
const { announcements, intl } = this.props;
const { index } = this.state;
if (announcements.isEmpty()) {
return null;
}
return (
<div className='announcements'>
<img className='announcements__mastodon' alt='' draggable='false' src={mascot || elephantUIPlane} />
<div className='announcements__container'>
<ReactSwipeableViews animateHeight={!reduceMotion} adjustHeight={reduceMotion} index={index} onChangeIndex={this.handleChangeIndex}>
{announcements.map(announcement => (
<Announcement
key={announcement.get('id')}
announcement={announcement}
emojiMap={this.props.emojiMap}
addReaction={this.props.addReaction}
removeReaction={this.props.removeReaction}
intl={intl}
/>
))}
</ReactSwipeableViews>
{announcements.size > 1 && (
<div className='announcements__pagination'>
<IconButton disabled={announcements.size === 1} title={intl.formatMessage(messages.previous)} icon='chevron-left' onClick={this.handlePrevClick} size={13} />
<span>{index + 1} / {announcements.size}</span>
<IconButton disabled={announcements.size === 1} title={intl.formatMessage(messages.next)} icon='chevron-right' onClick={this.handleNextClick} size={13} />
</div>
)}
</div>
</div>
);
}
}

View File

@ -0,0 +1,19 @@
import { connect } from 'react-redux';
import { addReaction, removeReaction } from 'mastodon/actions/announcements';
import Announcements from '../components/announcements';
import { createSelector } from 'reselect';
import { Map as ImmutableMap } from 'immutable';
const customEmojiMap = createSelector([state => state.get('custom_emojis')], items => items.reduce((map, emoji) => map.set(emoji.get('shortcode'), emoji), ImmutableMap()));
const mapStateToProps = state => ({
announcements: state.getIn(['announcements', 'items']),
emojiMap: customEmojiMap(state),
});
const mapDispatchToProps = dispatch => ({
addReaction: (id, name) => dispatch(addReaction(id, name)),
removeReaction: (id, name) => dispatch(removeReaction(id, name)),
});
export default connect(mapStateToProps, mapDispatchToProps)(Announcements);

View File

@ -1,5 +1,5 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { fetchTrends } from '../../../actions/trends'; import { fetchTrends } from 'mastodon/actions/trends';
import Trends from '../components/trends'; import Trends from '../components/trends';
const mapStateToProps = state => ({ const mapStateToProps = state => ({

View File

@ -9,14 +9,23 @@ import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container'; import ColumnSettingsContainer from './containers/column_settings_container';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { fetchAnnouncements, toggleShowAnnouncements } from 'mastodon/actions/announcements';
import AnnouncementsContainer from 'mastodon/features/getting_started/containers/announcements_container';
import classNames from 'classnames';
import IconWithBadge from 'mastodon/components/icon_with_badge';
const messages = defineMessages({ const messages = defineMessages({
title: { id: 'column.home', defaultMessage: 'Home' }, title: { id: 'column.home', defaultMessage: 'Home' },
show_announcements: { id: 'home.show_announcements', defaultMessage: 'Show announcements' },
hide_announcements: { id: 'home.hide_announcements', defaultMessage: 'Hide announcements' },
}); });
const mapStateToProps = state => ({ const mapStateToProps = state => ({
hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0, hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0,
isPartial: state.getIn(['timelines', 'home', 'isPartial']), isPartial: state.getIn(['timelines', 'home', 'isPartial']),
hasAnnouncements: !state.getIn(['announcements', 'items']).isEmpty(),
unreadAnnouncements: state.getIn(['announcements', 'unread']).size,
showAnnouncements: state.getIn(['announcements', 'show']),
}); });
export default @connect(mapStateToProps) export default @connect(mapStateToProps)
@ -31,6 +40,9 @@ class HomeTimeline extends React.PureComponent {
isPartial: PropTypes.bool, isPartial: PropTypes.bool,
columnId: PropTypes.string, columnId: PropTypes.string,
multiColumn: PropTypes.bool, multiColumn: PropTypes.bool,
hasAnnouncements: PropTypes.bool,
unreadAnnouncements: PropTypes.number,
showAnnouncements: PropTypes.bool,
}; };
handlePin = () => { handlePin = () => {
@ -61,6 +73,7 @@ class HomeTimeline extends React.PureComponent {
} }
componentDidMount () { componentDidMount () {
this.props.dispatch(fetchAnnouncements());
this._checkIfReloadNeeded(false, this.props.isPartial); this._checkIfReloadNeeded(false, this.props.isPartial);
} }
@ -93,10 +106,31 @@ class HomeTimeline extends React.PureComponent {
} }
} }
handleToggleAnnouncementsClick = (e) => {
e.stopPropagation();
this.props.dispatch(toggleShowAnnouncements());
}
render () { render () {
const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props; const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props;
const pinned = !!columnId; const pinned = !!columnId;
let announcementsButton = null;
if (hasAnnouncements) {
announcementsButton = (
<button
className={classNames('column-header__button', { 'active': showAnnouncements })}
title={intl.formatMessage(showAnnouncements ? messages.hide_announcements : messages.show_announcements)}
aria-label={intl.formatMessage(showAnnouncements ? messages.hide_announcements : messages.show_announcements)}
aria-pressed={showAnnouncements ? 'true' : 'false'}
onClick={this.handleToggleAnnouncementsClick}
>
<IconWithBadge id='bullhorn' count={unreadAnnouncements} />
</button>
);
}
return ( return (
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
<ColumnHeader <ColumnHeader
@ -108,6 +142,8 @@ class HomeTimeline extends React.PureComponent {
onClick={this.handleHeaderClick} onClick={this.handleHeaderClick}
pinned={pinned} pinned={pinned}
multiColumn={multiColumn} multiColumn={multiColumn}
extraButton={announcementsButton}
appendContent={hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}
> >
<ColumnSettingsContainer /> <ColumnSettingsContainer />
</ColumnHeader> </ColumnHeader>

View File

@ -6,7 +6,7 @@ import DisplayName from '../../../components/display_name';
import StatusContent from '../../../components/status_content'; import StatusContent from '../../../components/status_content';
import MediaGallery from '../../../components/media_gallery'; import MediaGallery from '../../../components/media_gallery';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { FormattedDate, FormattedNumber } from 'react-intl'; import { FormattedDate } from 'react-intl';
import Card from './card'; import Card from './card';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import Video from '../../video'; import Video from '../../video';
@ -14,6 +14,7 @@ import Audio from '../../audio';
import scheduleIdleTask from '../../ui/util/schedule_idle_task'; import scheduleIdleTask from '../../ui/util/schedule_idle_task';
import classNames from 'classnames'; import classNames from 'classnames';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
import AnimatedNumber from 'mastodon/components/animated_number';
export default class DetailedStatus extends ImmutablePureComponent { export default class DetailedStatus extends ImmutablePureComponent {
@ -172,7 +173,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
<Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'> <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>
<Icon id={reblogIcon} /> <Icon id={reblogIcon} />
<span className='detailed-status__reblogs'> <span className='detailed-status__reblogs'>
<FormattedNumber value={status.get('reblogs_count')} /> <AnimatedNumber value={status.get('reblogs_count')} />
</span> </span>
</Link> </Link>
); );
@ -181,7 +182,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
<a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}> <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>
<Icon id={reblogIcon} /> <Icon id={reblogIcon} />
<span className='detailed-status__reblogs'> <span className='detailed-status__reblogs'>
<FormattedNumber value={status.get('reblogs_count')} /> <AnimatedNumber value={status.get('reblogs_count')} />
</span> </span>
</a> </a>
); );
@ -192,7 +193,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
<Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'> <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>
<Icon id='star' /> <Icon id='star' />
<span className='detailed-status__favorites'> <span className='detailed-status__favorites'>
<FormattedNumber value={status.get('favourites_count')} /> <AnimatedNumber value={status.get('favourites_count')} />
</span> </span>
</Link> </Link>
); );
@ -201,7 +202,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
<a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}> <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>
<Icon id='star' /> <Icon id='star' />
<span className='detailed-status__favorites'> <span className='detailed-status__favorites'>
<FormattedNumber value={status.get('favourites_count')} /> <AnimatedNumber value={status.get('favourites_count')} />
</span> </span>
</a> </a>
); );

View File

@ -561,6 +561,7 @@ class Status extends ImmutablePureComponent {
aria-label={textForScreenReader(intl, status, false)} aria-label={textForScreenReader(intl, status, false)}
> >
<DetailedStatus <DetailedStatus
key={`details-${status.get('id')}`}
status={status} status={status}
onOpenVideo={this.handleOpenVideo} onOpenVideo={this.handleOpenVideo}
onOpenMedia={this.handleOpenMedia} onOpenMedia={this.handleOpenMedia}
@ -571,6 +572,7 @@ class Status extends ImmutablePureComponent {
/> />
<ActionBar <ActionBar
key={`action-bar-${status.get('id')}`}
status={status} status={status}
onReply={this.handleReplyClick} onReply={this.handleReplyClick}
onFavourite={this.handleFavouriteClick} onFavourite={this.handleFavouriteClick}

View File

@ -31,7 +31,6 @@ import NavigationPanel from './navigation_panel';
import detectPassiveEvents from 'detect-passive-events'; import detectPassiveEvents from 'detect-passive-events';
import { scrollRight } from '../../../scroll'; import { scrollRight } from '../../../scroll';
import LinkFooter from './link_footer';
const componentMap = { const componentMap = {
'COMPOSE' : Compose, 'COMPOSE' : Compose,
@ -222,6 +221,7 @@ class ColumnsArea extends ImmutablePureComponent {
<div className='columns-area__panels__pane columns-area__panels__pane--compositional'> <div className='columns-area__panels__pane columns-area__panels__pane--compositional'>
<div className='columns-area__panels__pane__inner'> <div className='columns-area__panels__pane__inner'>
<ComposePanel /> <ComposePanel />
</div > </div >
</div > </div >
@ -235,7 +235,7 @@ class ColumnsArea extends ImmutablePureComponent {
<NavigationPanel /> <NavigationPanel />
</div > </div >
</div > </div >
<LinkFooter withHotkeys />
{floatingActionButton} {floatingActionButton}
</div > </div >
); );

View File

@ -3,14 +3,17 @@ import SearchContainer from 'mastodon/features/compose/containers/search_contain
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container'; import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
import NavigationContainer from 'mastodon/features/compose/containers/navigation_container'; import NavigationContainer from 'mastodon/features/compose/containers/navigation_container';
import InstantMessaging from './messaging/instantMessaging'; import InstantMessaging from './messaging/instantMessaging';
import LinkFooter from './link_footer';
const showIM = false; const showIM = false;
const ComposePanel = () => ( const ComposePanel = () => (
<div className='compose-panel'> <div className='compose-panel'>
<SearchContainer openInRoute /> <SearchContainer openInRoute />
<NavigationContainer /> <NavigationContainer />
<ComposeFormContainer singleColumn /> <ComposeFormContainer singleColumn />
<LinkFooter withHotkeys />
{showIM && ( {showIM && (
<InstantMessaging /> <InstantMessaging />
)} )}

View File

@ -2,7 +2,7 @@ import { connect } from 'react-redux';
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom'; import { Link, NavLink } from 'react-router-dom';
import { invitesEnabled, repository, source_url, version } from 'mastodon/initial_state'; import { invitesEnabled, repository, source_url, version } from 'mastodon/initial_state';
import { logOut } from 'mastodon/utils/log_out'; import { logOut } from 'mastodon/utils/log_out';
import { openModal } from 'mastodon/actions/modal'; import { openModal } from 'mastodon/actions/modal';
@ -30,15 +30,20 @@ export default @injectIntl
class LinkFooter extends React.PureComponent { class LinkFooter extends React.PureComponent {
static propTypes = { static propTypes = {
enableChristmasSnow: PropTypes.bool, enableChristmasSnow : PropTypes.bool,
snowActive : PropTypes.bool, minimumWeekToShowSnow: PropTypes.number,
withHotkeys : PropTypes.bool, snowActive : PropTypes.bool,
snow : PropTypes.func, withHotkeys : PropTypes.bool,
onLogout : PropTypes.func.isRequired, snow : PropTypes.func,
intl : PropTypes.object.isRequired, themeIsDark : PropTypes.bool,
theme : PropTypes.string,
onLogout : PropTypes.func.isRequired,
intl : PropTypes.object.isRequired,
}; };
static defaultProps = { static defaultProps = {
enableChristmasSnow: true, enableChristmasSnow : true,
themeIsDark : true,
minimumWeekToShowSnow: 48,
}; };
handleLogoutClick = e => { handleLogoutClick = e => {
@ -59,10 +64,12 @@ class LinkFooter extends React.PureComponent {
var weekNumber = (new Date()).getWeek(); var weekNumber = (new Date()).getWeek();
// display snow during the last two weeks of the year // display snow during the last two weeks of the year
console.log('week', weekNumber); const shouldWeDisplaySnow = (weekNumber > props.minimumWeekToShowSnow) && props.enableChristmasSnow;
const shouldWeDisplaySnow = (weekNumber > 48) && props.enableChristmasSnow;
this.state = { enableChristmasSnow: shouldWeDisplaySnow }; this.state = {
enableChristmasSnow: shouldWeDisplaySnow,
theme : props.theme,
};
// make snow effect // make snow effect
if (shouldWeDisplaySnow) { if (shouldWeDisplaySnow) {
@ -70,7 +77,6 @@ class LinkFooter extends React.PureComponent {
.then((snowstorm) => { .then((snowstorm) => {
Window.snowstorm = snowstorm.default; Window.snowstorm = snowstorm.default;
this.state.snow = Window.snowstorm; this.state.snow = Window.snowstorm;
console.log('this.state.snow ', this.state.snow);
// snowstorm.start(); // snowstorm.start();
this.state.snowActive = true; this.state.snowActive = true;
}) })
@ -80,16 +86,14 @@ class LinkFooter extends React.PureComponent {
} }
toggleSnow = () => { toggleSnow = () => {
console.log('toggle snow');
if (this.state.snow) { if (this.state.snow) {
if (this.state.snowActive) { if (this.state.snowActive) {
this.state.snow.stop(); this.state.snow.stop();
this.state.snowActive = false; this.state.enableChristmasSnow = false;
} else { } else {
this.state.snow.start(); this.state.snow.start();
this.state.snowActive = true; this.state.enableChristmasSnow = true;
} }
} }
}; };
@ -98,30 +102,50 @@ class LinkFooter extends React.PureComponent {
} }
render() { render() {
const HashTagNavlinks = ['Mastoart', 'OpenStreetMaps', 'Ironèmes', 'vélo'];
const { withHotkeys } = this.props; const { withHotkeys } = this.props;
var snowClasses = this.props.snowActive ? 'snow-button active' : 'snow-button '; var snowClasses = this.props.enableChristmasSnow ? 'snow-button active' : 'snow-button ';
const navToTags = HashTagNavlinks.map(element => {
return (
<li
className='tag-element btn-small btn'
key={element}
>
<NavLink
exact
activeClassName='active'
to={'/timelines/tag/' + element}
title='Mastoart'
>
#{element}
</NavLink >
</li >
);
});
return ( return (
<div className='getting-started__footer hide-on-smaller-screens'> <div className='links-started__footer desktop-only'>
<div className='extras'> <div className='extras'>
{/*// TODO*/} {/*<button className='mod-theme btn btn-block btn-small btn-primary pull-left'>*/}
{/*<button className='mod-theme btn btn-block'>*/} {/* {this.themeIsDark ? (*/}
{/* {themeIsDark ? (*/}
{/* <span*/} {/* <span*/}
{/* onClick={this.changeTheme('light')}*/} {/* onClick={this.setState('theme', 'light')}*/}
{/* title='set light'*/} {/* title='set light'*/}
{/* >*/} {/* >*/}
{/* <i className='fa fa-pencil-o' />*/} {/* <i className='fa fa-pencil-o' /> to light*/}
{/* </span >*/} {/* </span >*/}
{/* ) : (*/} {/* ) : (*/}
{/* <span*/} {/* <span*/}
{/* onClick={this.changeTheme('dark')}*/} {/* onClick={*/}
{/* this.changeTheme*/}
{/* }*/}
{/* title='set dark'*/} {/* title='set dark'*/}
{/* >*/} {/* >*/}
{/* <i className='fa fa-pencil' />*/} {/* <i className='fa fa-pencil' /> to dark*/}
{/* </span >*/} {/* </span >*/}
{/* )}*/} {/* )}*/}
{/*</button >*/} {/*</button >*/}
@ -138,122 +162,122 @@ class LinkFooter extends React.PureComponent {
/> />
</div > </div >
<div > Joyeuses fêtes!</div > <div > Joyeuses fêtes!</div >
{isStaff && (
<a href='/admin/tags?pending_review=1'>
<i className='fa fa-fire' />
Trending hashtags</a >
)}
<br />
<div className='external-utilities'>
<a href='https://mastodon.cipherbliss.com/@tykayn'>
<i className='fa fa-paper-plane' />
contactez nous
</a >
<a href='https://liberapay.com/cipherbliss'><i className='fa fa-coffee' /> Supportez Cipherbliss</a >
<a href='https://peertube.cipherbliss.com'> <i className='fa fa-play ' /> Videos</a >
<a href='https://framadate.org/'> <i className='fa fa-calendar' /> FramaDate</a >
<a href='https://framapad.org/'> <i className='fa fa-file-text' /> Pad</a >
<a href='https://framagit.org/tykayn/mastodon'> <i className='fa fa-gitlab' /> Source</a >
<hr />
<a href='/web/timelines/tag/vélo'> <i className='fa fa-bicycle' /> #vélo</a >
<a href='/web/timelines/tag/openstreetmap'> <i className='fa fa-map-o' /> #OpenStreetMap</a >
<a href='/web/timelines/tag/mastoart'> <i className='fa fa-paint-brush' /> #Mastoart</a >
<a href='/web/timelines/tag/ironèmes'> <i className='fa fa-file-text-o' /> #ironèmes</a >
</div >
</div > </div >
)} )}
{isStaff && (
<span className='staff-actions'>
<NavLink
exact
activeClassName='active'
to={'/tk-example/'}
title='tk example link'
>
example link
</NavLink >
<a
className='btn-warning'
href='/admin/tags?pending_review=1'
>
<i className='fa fa-fire' />
Trending hashtags
</a >
<a
className='btn-warning'
href='/admin/accounts'
>
<i className='fa fa-users' />
Comptes
</a >
</span >
)}
<br />
<div className='external-utilities'>
<a href='https://mastodon.cipherbliss.com/@tykayn'>
<i className='fa fa-paper-plane' />
contactez nous
</a >
<a href='https://liberapay.com/cipherbliss'><i className='fa fa-coffee' /> Supportez
Cipherbliss</a >
<a href='https://peertube.cipherbliss.com'> <i className='fa fa-play ' /> Videos</a >
<a href='https://framadate.org/'> <i className='fa fa-calendar' /> FramaDate</a >
<a href='https://framapad.org/'> <i className='fa fa-file-text' /> Pad</a >
<a href='https://framagit.org/tykayn/mastodon'> <i className='fa fa-gitlab' /> Source</a >
<hr />
<div className='suggested-tags'>
<ul >
{navToTags}
</ul >
</div >
</div >
</div > </div >
<ul > <ul >
{invitesEnabled && <li ><a {invitesEnabled && <li ><a
href='/invites' href='/invites'
target='_blank' target='_blank'
><FormattedMessage ><FormattedMessage
id='getting_started.invite' id='getting_started.invite'
defaultMessage='Invite people' defaultMessage='Invite people'
/> ·</a > /></a > · </li >}
</li >} {withHotkeys && <li >
{withHotkeys && <li ><Link to='/keyboard-shortcuts'> <Link to='/keyboard-shortcuts'><FormattedMessage
<FormattedMessage
id='navigation_bar.keyboard_shortcuts' id='navigation_bar.keyboard_shortcuts'
defaultMessage='Hotkeys' defaultMessage='Hotkeys'
/> · /></Link > · </li >}
</Link > <li ><a href='/auth/edit'><FormattedMessage
</li >} id='getting_started.security'
<li > defaultMessage='Security'
<a href='/auth/edit'> /></a > ·
<FormattedMessage
id='getting_started.security'
defaultMessage='Security'
/> ·
</a >
</li > </li >
<li > <li ><a
<a href='/about/more'
href='/about/more' target='_blank'
target='_blank' ><FormattedMessage
><FormattedMessage id='navigation_bar.info'
id='navigation_bar.info' defaultMessage='About this server'
defaultMessage='About this server' /></a > ·
/> ·
</a >
</li > </li >
<li > <li ><a
<a href='https://joinmastodon.org/apps'
href='https://joinmastodon.org/apps' target='_blank'
target='_blank' ><FormattedMessage
><FormattedMessage id='navigation_bar.apps'
id='navigation_bar.apps' defaultMessage='Mobile apps'
defaultMessage='Mobile apps' /></a > ·
/> ·
</a >
</li > </li >
<li > <li ><a
<a href='/terms'
href='/terms' target='_blank'
target='_blank' ><FormattedMessage
> id='getting_started.terms'
<FormattedMessage defaultMessage='Terms of service'
id='getting_started.terms' /></a > ·
defaultMessage='Terms of service'
/> ·</a >
</li > </li >
<li > <li ><a
<a href='/settings/applications'
href='/settings/applications' target='_blank'
target='_blank' ><FormattedMessage
><FormattedMessage id='getting_started.developers'
id='getting_started.developers' defaultMessage='Developers'
defaultMessage='Developers' /></a > ·
/> ·
</a >
</li > </li >
<li > <li ><a
<a href='https://docs.joinmastodon.org'
href='https://docs.joinmastodon.org' target='_blank'
target='_blank' ><FormattedMessage
> id='getting_started.documentation'
<FormattedMessage defaultMessage='Documentation'
id='getting_started.documentation' /></a > ·
defaultMessage='Documentation'
/>
</a > ·
</li >
<li >
<a
href='/auth/sign_out'
onClick={this.handleLogoutClick}
>
<FormattedMessage
id='navigation_bar.logout'
defaultMessage='Logout'
/>
</a >
</li > </li >
<li ><a
href='/auth/sign_out'
onClick={this.handleLogoutClick}
><FormattedMessage
id='navigation_bar.logout'
defaultMessage='Logout'
/></a ></li >
</ul > </ul >
<p > <p >

View File

@ -211,7 +211,6 @@ class MediaModal extends ImmutablePureComponent {
style={swipeableViewsStyle} style={swipeableViewsStyle}
containerStyle={containerStyle} containerStyle={containerStyle}
onChangeIndex={this.handleSwipe} onChangeIndex={this.handleSwipe}
onSwitching={this.handleSwitching}
index={index} index={index}
> >
{content} {content}

View File

@ -124,12 +124,14 @@ class Video extends React.PureComponent {
revealed: this.props.visible !== undefined ? this.props.visible : (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all'), revealed: this.props.visible !== undefined ? this.props.visible : (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all'),
}; };
// hard coded in components.scss // Hard-coded in components.scss
// any way to get ::before values programatically? // Any way to get ::before values programatically?
volWidth = 50; volWidth = 50;
volOffset = 70; volOffset = 70;
volHandleOffset = v => { volHandleOffset = v => {
const offset = v * this.volWidth + this.volOffset; const offset = v * this.volWidth + this.volOffset;
return (offset > 110) ? 110 : offset; return (offset > 110) ? 110 : offset;
} }
@ -138,6 +140,7 @@ class Video extends React.PureComponent {
if (c) { if (c) {
if (this.props.cacheWidth) this.props.cacheWidth(this.player.offsetWidth); if (this.props.cacheWidth) this.props.cacheWidth(this.player.offsetWidth);
this.setState({ this.setState({
containerWidth: c.offsetWidth, containerWidth: c.offsetWidth,
}); });
@ -205,12 +208,14 @@ class Video extends React.PureComponent {
const x = (e.clientX - rect.left) / this.volWidth; //x position within the element. const x = (e.clientX - rect.left) / this.volWidth; //x position within the element.
if(!isNaN(x)) { if(!isNaN(x)) {
var slideamt = x; let slideamt = x;
if(x > 1) { if(x > 1) {
slideamt = 1; slideamt = 1;
} else if(x < 0) { } else if(x < 0) {
slideamt = 0; slideamt = 0;
} }
this.video.volume = slideamt; this.video.volume = slideamt;
this.setState({ volume: slideamt }); this.setState({ volume: slideamt });
} }
@ -252,9 +257,9 @@ class Video extends React.PureComponent {
togglePlay = () => { togglePlay = () => {
if (this.state.paused) { if (this.state.paused) {
this.video.play(); this.setState({ paused: false }, () => this.video.play());
} else { } else {
this.video.pause(); this.setState({ paused: true }, () => this.video.pause());
} }
} }
@ -272,12 +277,16 @@ class Video extends React.PureComponent {
document.addEventListener('mozfullscreenchange', this.handleFullscreenChange, true); document.addEventListener('mozfullscreenchange', this.handleFullscreenChange, true);
document.addEventListener('MSFullscreenChange', this.handleFullscreenChange, true); document.addEventListener('MSFullscreenChange', this.handleFullscreenChange, true);
window.addEventListener('scroll', this.handleScroll);
if (this.props.blurhash) { if (this.props.blurhash) {
this._decode(); this._decode();
} }
} }
componentWillUnmount () { componentWillUnmount () {
window.removeEventListener('scroll', this.handleScroll);
document.removeEventListener('fullscreenchange', this.handleFullscreenChange, true); document.removeEventListener('fullscreenchange', this.handleFullscreenChange, true);
document.removeEventListener('webkitfullscreenchange', this.handleFullscreenChange, true); document.removeEventListener('webkitfullscreenchange', this.handleFullscreenChange, true);
document.removeEventListener('mozfullscreenchange', this.handleFullscreenChange, true); document.removeEventListener('mozfullscreenchange', this.handleFullscreenChange, true);
@ -294,6 +303,7 @@ class Video extends React.PureComponent {
if (prevState.revealed && !this.state.revealed && this.video) { if (prevState.revealed && !this.state.revealed && this.video) {
this.video.pause(); this.video.pause();
} }
if (prevProps.blurhash !== this.props.blurhash && this.props.blurhash) { if (prevProps.blurhash !== this.props.blurhash && this.props.blurhash) {
this._decode(); this._decode();
} }
@ -313,6 +323,19 @@ class Video extends React.PureComponent {
} }
} }
handleScroll = throttle(() => {
if (!this.video) {
return;
}
const { top, height } = this.video.getBoundingClientRect();
const inView = (top <= (window.innerHeight || document.documentElement.clientHeight)) && (top + height >= 0);
if (!this.state.paused && !inView) {
this.setState({ paused: true }, () => this.video.pause());
}
}, 150, { trailing: true })
handleFullscreenChange = () => { handleFullscreenChange = () => {
this.setState({ fullscreen: isFullscreen() }); this.setState({ fullscreen: isFullscreen() });
} }
@ -326,8 +349,11 @@ class Video extends React.PureComponent {
} }
toggleMute = () => { toggleMute = () => {
this.video.muted = !this.video.muted; const muted = !this.video.muted;
this.setState({ muted: this.video.muted });
this.setState({ muted }, () => {
this.video.muted = muted;
});
} }
toggleReveal = () => { toggleReveal = () => {
@ -430,7 +456,6 @@ class Video extends React.PureComponent {
src={src} src={src}
poster={preview} poster={preview}
preload={preload} preload={preload}
loop
role='button' role='button'
tabIndex='0' tabIndex='0'
aria-label={alt} aria-label={alt}
@ -495,13 +520,8 @@ class Video extends React.PureComponent {
{(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
{(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>}
{onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>}
<button type='button' aria-label={intl.formatMessage(messages.download)}> <button type='button' aria-label={intl.formatMessage(messages.download)}><a className='video-player__download__icon' href={this.props.src} download><Icon id={'download'} fixedWidth /></a></button>
<a className='video-player__download__icon' href={this.props.src} download>
<Icon id={'download'} fixedWidth />
</a>
</button>
<button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,18 +1,19 @@
{ {
"account.add_or_remove_from_list": "أضفه أو أزله من القائمة", "account.add_or_remove_from_list": "أضفه أو أزله من القائمة",
"account.badges.bot": "روبوت", "account.badges.bot": "روبوت",
"account.badges.group": "Group",
"account.block": "حظر @{name}", "account.block": "حظر @{name}",
"account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}", "account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}",
"account.blocked": "محظور", "account.blocked": "محظور",
"account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.cancel_follow_request": "إلغاء طلب المتابَعة",
"account.direct": "رسالة خاصة إلى @{name}", "account.direct": "رسالة خاصة إلى @{name}",
"account.domain_blocked": "النطاق مخفي", "account.domain_blocked": "النطاق مخفي",
"account.edit_profile": "تعديل الملف التعريفي", "account.edit_profile": "تعديل الملف الشخصي",
"account.endorse": "أوصِ به على صفحتك", "account.endorse": "أوصِ به على صفحتك",
"account.follow": "تابِع", "account.follow": "تابِع",
"account.followers": "مُتابِعون", "account.followers": "مُتابِعون",
"account.followers.empty": "لا أحد يتبع هذا الحساب بعد.", "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.",
"account.follows": "يتبع", "account.follows": "يتابع",
"account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.", "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.",
"account.follows_you": "يتابعك", "account.follows_you": "يتابعك",
"account.hide_reblogs": "إخفاء ترقيات @{name}", "account.hide_reblogs": "إخفاء ترقيات @{name}",
@ -39,9 +40,10 @@
"account.unmute": "إلغاء الكتم عن @{name}", "account.unmute": "إلغاء الكتم عن @{name}",
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}", "account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
"alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.", "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited", "alert.rate_limited.title": "المعدل محدود",
"alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.", "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
"alert.unexpected.title": "المعذرة!", "alert.unexpected.title": "المعذرة!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} في الأسبوع", "autosuggest_hashtag.per_week": "{count} في الأسبوع",
"boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة", "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة",
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_modal_error.retry": "إعادة المحاولة", "bundle_modal_error.retry": "إعادة المحاولة",
"column.blocks": "الحسابات المحجوبة", "column.blocks": "الحسابات المحجوبة",
"column.bookmarks": "الفواصل المرجعية",
"column.community": "الخيط العام المحلي", "column.community": "الخيط العام المحلي",
"column.direct": "الرسائل المباشرة", "column.direct": "الرسائل المباشرة",
"column.directory": "استعراض الملفات التعريفية", "column.directory": "استعراض الملفات التعريفية",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "مدة استطلاع الرأي", "compose_form.poll.duration": "مدة استطلاع الرأي",
"compose_form.poll.option_placeholder": "الخيار {number}", "compose_form.poll.option_placeholder": "الخيار {number}",
"compose_form.poll.remove_option": "إزالة هذا الخيار", "compose_form.poll.remove_option": "إزالة هذا الخيار",
"compose_form.poll.switch_to_multiple": "عدّل استطلاع الرأي وغيّره لإتاحة الخيارات المتعددة",
"compose_form.poll.switch_to_single": "عدّل استطلاع الرأي وغيّره لإتاحة خيار واحد فقط",
"compose_form.publish": "بوّق", "compose_form.publish": "بوّق",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "تحديد الوسائط كحساسة", "compose_form.sensitive.hide": "تحديد الوسائط كحساسة",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "ليس هناك تبويقات!", "empty_column.account_timeline": "ليس هناك تبويقات!",
"empty_column.account_unavailable": "الملف التعريفي غير متوفر", "empty_column.account_unavailable": "الملف التعريفي غير متوفر",
"empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.",
"empty_column.bookmarked_statuses": "ليس لديك أية تبويقات في الفواصل المرجعية بعد. عندما ستقوم بإضافة البعض منها، ستظهر هنا.",
"empty_column.community": "الخط العام المحلي فارغ. أكتب شيئا ما للعامة كبداية!", "empty_column.community": "الخط العام المحلي فارغ. أكتب شيئا ما للعامة كبداية!",
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.", "empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
"empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.", "empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.",
@ -153,8 +159,8 @@
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
"empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات", "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات",
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
"follow_request.authorize": "ترخيص", "follow_request.authorize": "ترخيص",
"follow_request.reject": "رفض", "follow_request.reject": "رفض",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "لفتح قائمة المستخدِمين المكتومين", "keyboard_shortcuts.muted": "لفتح قائمة المستخدِمين المكتومين",
"keyboard_shortcuts.my_profile": "لفتح ملفك التعريفي", "keyboard_shortcuts.my_profile": "لفتح ملفك التعريفي",
"keyboard_shortcuts.notifications": "لفتح عمود الإشعارات", "keyboard_shortcuts.notifications": "لفتح عمود الإشعارات",
"keyboard_shortcuts.open_media": "لفتح الوسائط",
"keyboard_shortcuts.pinned": "لفتح قائمة التبويقات المدبسة", "keyboard_shortcuts.pinned": "لفتح قائمة التبويقات المدبسة",
"keyboard_shortcuts.profile": "لفتح الملف التعريفي للناشر", "keyboard_shortcuts.profile": "لفتح الملف التعريفي للناشر",
"keyboard_shortcuts.reply": "للردّ", "keyboard_shortcuts.reply": "للردّ",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
"navigation_bar.apps": "تطبيقات الأجهزة المحمولة", "navigation_bar.apps": "تطبيقات الأجهزة المحمولة",
"navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.blocks": "الحسابات المحجوبة",
"navigation_bar.bookmarks": "الفواصل المرجعية",
"navigation_bar.community_timeline": "الخيط العام المحلي", "navigation_bar.community_timeline": "الخيط العام المحلي",
"navigation_bar.compose": "تحرير تبويق جديد", "navigation_bar.compose": "تحرير تبويق جديد",
"navigation_bar.direct": "الرسائل المباشِرة", "navigation_bar.direct": "الرسائل المباشِرة",
@ -273,7 +281,9 @@
"navigation_bar.security": "الأمان", "navigation_bar.security": "الأمان",
"notification.favourite": "أُعجِب {name} بمنشورك", "notification.favourite": "أُعجِب {name} بمنشورك",
"notification.follow": "{name} يتابعك", "notification.follow": "{name} يتابعك",
"notification.follow_request": "لقد طلب {name} متابعتك",
"notification.mention": "{name} ذكرك", "notification.mention": "{name} ذكرك",
"notification.own_poll": "انتهى استطلاعك للرأي",
"notification.poll": "لقد إنتها تصويت شاركت فيه", "notification.poll": "لقد إنتها تصويت شاركت فيه",
"notification.reblog": "{name} قام بترقية تبويقك", "notification.reblog": "{name} قام بترقية تبويقك",
"notifications.clear": "امسح الإخطارات", "notifications.clear": "امسح الإخطارات",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "شريط الفلترة السريعة", "notifications.column_settings.filter_bar.category": "شريط الفلترة السريعة",
"notifications.column_settings.filter_bar.show": "اظهِره", "notifications.column_settings.filter_bar.show": "اظهِره",
"notifications.column_settings.follow": "متابعُون جُدُد:", "notifications.column_settings.follow": "متابعُون جُدُد:",
"notifications.column_settings.follow_request": "الطلبات الجديد لِمتابَعتك:",
"notifications.column_settings.mention": "الإشارات:", "notifications.column_settings.mention": "الإشارات:",
"notifications.column_settings.poll": "نتائج استطلاع الرأي:", "notifications.column_settings.poll": "نتائج استطلاع الرأي:",
"notifications.column_settings.push": "الإخطارات المدفوعة", "notifications.column_settings.push": "الإخطارات المدفوعة",
@ -344,6 +355,7 @@
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
"status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف",
"status.block": "احجب @{name}", "status.block": "احجب @{name}",
"status.bookmark": "أضفه إلى الفواصل المرجعية",
"status.cancel_reblog_private": "إلغاء الترقية", "status.cancel_reblog_private": "إلغاء الترقية",
"status.cannot_reblog": "تعذرت ترقية هذا المنشور", "status.cannot_reblog": "تعذرت ترقية هذا المنشور",
"status.copy": "نسخ رابط المنشور", "status.copy": "نسخ رابط المنشور",
@ -368,6 +380,7 @@
"status.reblogged_by": "رقّاه {name}", "status.reblogged_by": "رقّاه {name}",
"status.reblogs.empty": "لم يقم أي أحد بترقية هذا التبويق بعد. عندما يقوم أحدهم بذلك سوف تظهر هنا.", "status.reblogs.empty": "لم يقم أي أحد بترقية هذا التبويق بعد. عندما يقوم أحدهم بذلك سوف تظهر هنا.",
"status.redraft": "إزالة و إعادة الصياغة", "status.redraft": "إزالة و إعادة الصياغة",
"status.remove_bookmark": "احذفه مِن الفواصل المرجعية",
"status.reply": "ردّ", "status.reply": "ردّ",
"status.replyAll": "رُد على الخيط", "status.replyAll": "رُد على الخيط",
"status.report": "ابلِغ عن @{name}", "status.report": "ابلِغ عن @{name}",
@ -400,18 +413,21 @@
"upload_button.label": "إضافة وسائط ({formats})", "upload_button.label": "إضافة وسائط ({formats})",
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
"upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع",
"upload_form.description": "وصف للمعاقين بصريا", "upload_form.description": "وصف للمعاقين بصريا",
"upload_form.edit": "تعديل", "upload_form.edit": "تعديل",
"upload_form.undo": "حذف", "upload_form.undo": "حذف",
"upload_form.video_description": "وصف للمعاقين بصريا أو لِذي قِصر السمع",
"upload_modal.analyzing_picture": "جارٍ فحص الصورة…", "upload_modal.analyzing_picture": "جارٍ فحص الصورة…",
"upload_modal.apply": "طبّق", "upload_modal.apply": "طبّق",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "اكتشف النص مِن الصورة", "upload_modal.detect_text": "اكتشف النص مِن الصورة",
"upload_modal.edit_media": "تعديل الوسائط", "upload_modal.edit_media": "تعديل الوسائط",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.",
"upload_modal.preview_label": "معاينة ({ratio})", "upload_modal.preview_label": "معاينة ({ratio})",
"upload_progress.label": "يرفع...", "upload_progress.label": "يرفع...",
"video.close": "إغلاق الفيديو", "video.close": "إغلاق الفيديو",
"video.download": "تنزيل الملف",
"video.exit_fullscreen": "الخروج من وضع الشاشة المليئة", "video.exit_fullscreen": "الخروج من وضع الشاشة المليئة",
"video.expand": "توسيع الفيديو", "video.expand": "توسيع الفيديو",
"video.fullscreen": "ملء الشاشة", "video.fullscreen": "ملء الشاشة",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Add or Remove from lists", "account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Robó", "account.badges.bot": "Robó",
"account.badges.group": "Group",
"account.block": "Bloquiar a @{name}", "account.block": "Bloquiar a @{name}",
"account.block_domain": "Anubrir tolo de {domain}", "account.block_domain": "Anubrir tolo de {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
@ -21,15 +22,15 @@
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mentar a @{name}", "account.mention": "Mentar a @{name}",
"account.moved_to": "{name} has moved to:", "account.moved_to": "{name} mudóse a:",
"account.mute": "Silenciar a @{name}", "account.mute": "Silenciar a @{name}",
"account.mute_notifications": "Mute notifications from @{name}", "account.mute_notifications": "Mute notifications from @{name}",
"account.muted": "Muted", "account.muted": "Muted",
"account.never_active": "Never", "account.never_active": "Enxamás",
"account.posts": "Toots", "account.posts": "Barritos",
"account.posts_with_replies": "Toots y rempuestes", "account.posts_with_replies": "Barritos y rempuestes",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Awaiting approval", "account.requested": "Esperando pola aprobación. Calca pa encaboxar la solicitú de siguimientu",
"account.share": "Share @{name}'s profile", "account.share": "Share @{name}'s profile",
"account.show_reblogs": "Show boosts from @{name}", "account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Desbloquiar a @{name}", "account.unblock": "Desbloquiar a @{name}",
@ -41,16 +42,18 @@
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited", "alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "Asocedió un fallu inesperáu.", "alert.unexpected.message": "Asocedió un fallu inesperáu.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Meca!",
"autosuggest_hashtag.per_week": "{count} per week", "announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} per selmana",
"boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Asocedió daqué malo mentanto se cargaba esti componente.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
"bundle_column_error.title": "Network error", "bundle_column_error.title": "Network error",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Asocedió daqué malo mentanto se cargaba esti componente.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Try again",
"column.blocks": "Usuarios bloquiaos", "column.blocks": "Usuarios bloquiaos",
"column.bookmarks": "Marcadores",
"column.community": "Llinia temporal llocal", "column.community": "Llinia temporal llocal",
"column.direct": "Mensaxes direutos", "column.direct": "Mensaxes direutos",
"column.directory": "Browse profiles", "column.directory": "Browse profiles",
@ -61,7 +64,7 @@
"column.lists": "Llistes", "column.lists": "Llistes",
"column.mutes": "Usuarios silenciaos", "column.mutes": "Usuarios silenciaos",
"column.notifications": "Avisos", "column.notifications": "Avisos",
"column.pins": "Toots fixaos", "column.pins": "Barritos fixaos",
"column.public": "Llinia temporal federada", "column.public": "Llinia temporal federada",
"column_back_button.label": "Atrás", "column_back_button.label": "Atrás",
"column_header.hide_settings": "Hide settings", "column_header.hide_settings": "Hide settings",
@ -71,25 +74,27 @@
"column_header.show_settings": "Show settings", "column_header.show_settings": "Show settings",
"column_header.unpin": "Desfixar", "column_header.unpin": "Desfixar",
"column_subheading.settings": "Axustes", "column_subheading.settings": "Axustes",
"community.column_settings.media_only": "Media only", "community.column_settings.media_only": "Namái multimedia",
"compose_form.direct_message_warning": "Esti toot namái va unviase a los usuarios mentaos.", "compose_form.direct_message_warning": "Esti barritu namái va unviase a los usuarios mentaos.",
"compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.direct_message_warning_learn_more": "Learn more",
"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.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": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked", "compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "¿En qué pienses?", "compose_form.placeholder": "¿En qué pienses?",
"compose_form.poll.add_option": "Add a choice", "compose_form.poll.add_option": "Amestar una escoyeta",
"compose_form.poll.duration": "Poll duration", "compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}", "compose_form.poll.option_placeholder": "Escoyeta {number}",
"compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive", "compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia", "compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia",
"compose_form.spoiler.unmarked": "El testu va anubrise", "compose_form.spoiler.unmarked": "El testu nun va anubrise",
"compose_form.spoiler_placeholder": "Escribi equí l'avertencia", "compose_form.spoiler_placeholder": "Escribi equí l'alvertencia",
"confirmation_modal.cancel": "Encaboxar", "confirmation_modal.cancel": "Encaboxar",
"confirmations.block.block_and_report": "Block & Report", "confirmations.block.block_and_report": "Block & Report",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Block",
@ -106,7 +111,7 @@
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
"confirmations.mute.message": "¿De xuru que quies silenciar a {name}?", "confirmations.mute.message": "¿De xuru que quies silenciar a {name}?",
"confirmations.redraft.confirm": "Desaniciar y reeditar", "confirmations.redraft.confirm": "Desaniciar y reeditar",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", "confirmations.redraft.message": "¿De xuru que quies desaniciar esti estáu y reeditalu? Van perdese los favoritos y comparticiones, y les rempuestes al toot orixinal van quedar güérfanes.",
"confirmations.reply.confirm": "Reply", "confirmations.reply.confirm": "Reply",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Unfollow",
@ -115,80 +120,81 @@
"conversation.mark_as_read": "Mark as read", "conversation.mark_as_read": "Mark as read",
"conversation.open": "View conversation", "conversation.open": "View conversation",
"conversation.with": "With {names}", "conversation.with": "With {names}",
"directory.federated": "From known fediverse", "directory.federated": "Dende'l fediversu",
"directory.local": "From {domain} only", "directory.local": "Dende {domain} namái",
"directory.new_arrivals": "New arrivals", "directory.new_arrivals": "Cuentes nueves",
"directory.recently_active": "Recently active", "directory.recently_active": "Recently active",
"embed.instructions": "Empotra esti estáu nun sitiu web copiando'l códigu d'embaxo.", "embed.instructions": "Empotra esti estáu nun sitiu web copiando'l códigu d'embaxo.",
"embed.preview": "Asina ye como va vese:", "embed.preview": "Asina ye cómo va vese:",
"emoji_button.activity": "Actividaes", "emoji_button.activity": "Actividaes",
"emoji_button.custom": "Custom", "emoji_button.custom": "Custom",
"emoji_button.flags": "Banderes", "emoji_button.flags": "Banderes",
"emoji_button.food": "Comida y bébora", "emoji_button.food": "Comida y bébora",
"emoji_button.label": "Insert emoji", "emoji_button.label": "Inxertar un fustaxe",
"emoji_button.nature": "Natura", "emoji_button.nature": "Natura",
"emoji_button.not_found": "¡Nun hai fustaxes! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "¡Nun hai fustaxes! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Oxetos", "emoji_button.objects": "Oxetos",
"emoji_button.people": "Xente", "emoji_button.people": "Xente",
"emoji_button.recent": "Úsase davezu", "emoji_button.recent": "Úsase davezu",
"emoji_button.search": "Guetar...", "emoji_button.search": "Guetar",
"emoji_button.search_results": "Search results", "emoji_button.search_results": "Search results",
"emoji_button.symbols": "Símbolos", "emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viaxes y llugares", "emoji_button.travel": "Viaxes y llugares",
"empty_column.account_timeline": "No toots here!", "empty_column.account_timeline": "¡Equí nun hai barritos!",
"empty_column.account_unavailable": "Profile unavailable", "empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "Entá nun bloquiesti a dengún usuariu.", "empty_column.blocks": "Entá nun bloquiesti a dengún usuariu.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí.", "empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí.",
"empty_column.domain_blocks": "Entá nun hai dominios anubríos.", "empty_column.domain_blocks": "Entá nun hai dominios anubríos.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
"empty_column.follow_requests": "Entá nun tienes denguna solicitú de siguimientu. Cuando recibas una, va amosase equí.", "empty_column.follow_requests": "Entá nun tienes denguna solicitú de siguimientu. Cuando recibas una, va amosase equí.",
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "Entá nun hai nada nesta etiqueta.",
"empty_column.home": "¡Tienes la llinia temporal balera! Visita {public} o usa la gueta pa entamar y conocer a otros usuarios.", "empty_column.home": "¡Tienes la llinia temporal balera! Visita {public} o usa la gueta pa entamar y conocer a otros usuarios.",
"empty_column.home.public_timeline": "la llinia temporal pública", "empty_column.home.public_timeline": "la llinia temporal pública",
"empty_column.list": "Entá nun hai nada nesta llista. Cuando los miembros d'esta llista espublicen estaos nuevos, van apaecer equí.", "empty_column.list": "Entá nun hai nada nesta llista. Cuando los miembros d'esta llista espublicen estaos nuevos, van apaecer equí.",
"empty_column.lists": "Entá nun tienes denguna llista. Cuando crees una, va amosase equí.", "empty_column.lists": "Entá nun tienes denguna llista. Cuando crees una, va amosase equí.",
"empty_column.mutes": "Entá nun silenciesti a dengún usuariu.", "empty_column.mutes": "Entá nun silenciesti a dengún usuariu.",
"empty_column.notifications": "Entá nun tienes dengún avisu. Interactua con otros p'aniciar la conversación.", "empty_column.notifications": "Entá nun tienes dengún avisu. Interactúa con otros p'aniciar la conversación.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "¡Equí nun hai nada! Escribi daqué público o sigui a usuarios d'otros sirvidores pa rellenar esto",
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation": "Pola mor d'un fallu nel códigu o un problema de compatibilidá del restolador, esta páxina nun pudo amosase correutamente.",
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue", "errors.unexpected_crash.report_issue": "Report issue",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
"follow_request.reject": "Refugar", "follow_request.reject": "Refugar",
"getting_started.developers": "Desendolcadores", "getting_started.developers": "Desendolcadores",
"getting_started.directory": "Profile directory", "getting_started.directory": "Direutoriu de perfiles",
"getting_started.documentation": "Documentación", "getting_started.documentation": "Documentación",
"getting_started.heading": "Entamu", "getting_started.heading": "Entamu",
"getting_started.invite": "Convidar xente", "getting_started.invite": "Convidar a persones",
"getting_started.open_source_notice": "Mastodon ye software de códigu abiertu. Pues collaborar o informar de fallos en {github} (GitHub).", "getting_started.open_source_notice": "Mastodon ye software de códigu abiertu. Pues collaborar o informar de fallos en GitHub: {github}.",
"getting_started.security": "Seguranza", "getting_started.security": "Axustes de la cuenta",
"getting_started.terms": "Términos del serviciu", "getting_started.terms": "Términos del serviciu",
"hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.all": "y {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}", "hashtag.column_header.tag_mode.none": "ensin {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found", "hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…", "hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_settings.tag_mode.all": "All of these", "hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.column_settings.tag_toggle": "Incluyir les etiquetes adicionales d'esta columna",
"home.column_settings.basic": "Basic", "home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Amosar toots compartíos", "home.column_settings.show_reblogs": "Amosar toots compartíos",
"home.column_settings.show_replies": "Amosar rempuestes", "home.column_settings.show_replies": "Amosar rempuestes",
"intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.days": "{number, plural, one {# día} other {# díes}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}",
"introduction.federation.action": "Next", "introduction.federation.action": "Next",
"introduction.federation.federated.headline": "Federated", "introduction.federation.federated.headline": "Federated",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", "introduction.federation.federated.text": "Los espublizamientos públicos de los demás sirvidores del fediversu van apaecer na llinia temporal federada.",
"introduction.federation.home.headline": "Home", "introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local", "introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!", "introduction.interactions.action": "¡Finar el tutorial!",
"introduction.interactions.favourite.headline": "Favourite", "introduction.interactions.favourite.headline": "Favourite",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost", "introduction.interactions.reblog.headline": "Boost",
@ -196,18 +202,18 @@
"introduction.interactions.reply.headline": "Reply", "introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!", "introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps", "introduction.welcome.headline": "Primeros pasos",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "introduction.welcome.text": "¡Afáyate nel fediversu! Nun momentu vas ser a tresmitir mensaxes y falar colos collacios d'una montonera de sirvidores. Pero esti sirvidor, {domain}, ye especial: agospia'l to perfil, asina qu'alcuérdate de cómo se llama.",
"keyboard_shortcuts.back": "pa dir p'atrás", "keyboard_shortcuts.back": "pa dir p'atrás",
"keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos", "keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos",
"keyboard_shortcuts.boost": "pa compartir un toot", "keyboard_shortcuts.boost": "pa compartir un toot",
"keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.compose": "pa enfocar l'área de composición",
"keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "p'abrir la columna de los mensaxes direutos", "keyboard_shortcuts.direct": "p'abrir la columna de los mensaxes direutos",
"keyboard_shortcuts.down": "pa baxar na llista", "keyboard_shortcuts.down": "pa baxar na llista",
"keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourite": "p'amestar a Favoritos",
"keyboard_shortcuts.favourites": "p'abrir la llista de favoritos", "keyboard_shortcuts.favourites": "p'abrir la llista de favoritos",
"keyboard_shortcuts.federated": "p'abrir la llinia temporal federada", "keyboard_shortcuts.federated": "p'abrir la llinia temporal federada",
"keyboard_shortcuts.heading": "Atayos del tecláu", "keyboard_shortcuts.heading": "Atayos del tecláu",
@ -217,18 +223,19 @@
"keyboard_shortcuts.local": "p'abrir la llinia temporal llocal", "keyboard_shortcuts.local": "p'abrir la llinia temporal llocal",
"keyboard_shortcuts.mention": "pa mentar al autor", "keyboard_shortcuts.mention": "pa mentar al autor",
"keyboard_shortcuts.muted": "p'abrir la llista d'usuarios silenciaos", "keyboard_shortcuts.muted": "p'abrir la llista d'usuarios silenciaos",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "p'abrir el to perfil",
"keyboard_shortcuts.notifications": "p'abrir la columna d'avisos", "keyboard_shortcuts.notifications": "p'abrir la columna d'avisos",
"keyboard_shortcuts.pinned": "p'abrir la llista de toots fixaos", "keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "p'abrir la llista de barritos fixaos",
"keyboard_shortcuts.profile": "p'abrir el perfil del autor", "keyboard_shortcuts.profile": "p'abrir el perfil del autor",
"keyboard_shortcuts.reply": "pa responder", "keyboard_shortcuts.reply": "pa responder",
"keyboard_shortcuts.requests": "p'abrir la llista de solicitúes de siguimientu", "keyboard_shortcuts.requests": "p'abrir la llista de solicitúes de siguimientu",
"keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.search": "pa enfocar la gueta",
"keyboard_shortcuts.start": "p'abrir la columna «entamar»", "keyboard_shortcuts.start": "p'abrir la columna «entamar»",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media", "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toot": "p'apenzar un toot nuevu", "keyboard_shortcuts.toot": "p'apenzar un barritu nuevu",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.unfocus": "pa desenfocar l'área de composición/gueta",
"keyboard_shortcuts.up": "pa xubir na llista", "keyboard_shortcuts.up": "pa xubir na llista",
"lightbox.close": "Close", "lightbox.close": "Close",
"lightbox.next": "Siguiente", "lightbox.next": "Siguiente",
@ -243,14 +250,15 @@
"lists.new.title_placeholder": "Títulu nuevu de la llista", "lists.new.title_placeholder": "Títulu nuevu de la llista",
"lists.search": "Guetar ente la xente que sigues", "lists.search": "Guetar ente la xente que sigues",
"lists.subheading": "Les tos llistes", "lists.subheading": "Les tos llistes",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
"loading_indicator.label": "Cargando...", "loading_indicator.label": "Cargando",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Nun s'alcontró", "missing_indicator.label": "Nun s'alcontró",
"missing_indicator.sublabel": "Esti recursu nun pudo alcontrase", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase",
"mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.apps": "Aplicaciones pa móviles", "navigation_bar.apps": "Aplicaciones pa móviles",
"navigation_bar.blocks": "Usuarios bloquiaos", "navigation_bar.blocks": "Usuarios bloquiaos",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Llinia temporal llocal", "navigation_bar.community_timeline": "Llinia temporal llocal",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Mensaxes direutos", "navigation_bar.direct": "Mensaxes direutos",
@ -267,13 +275,15 @@
"navigation_bar.logout": "Zarrar sesión", "navigation_bar.logout": "Zarrar sesión",
"navigation_bar.mutes": "Usuarios silenciaos", "navigation_bar.mutes": "Usuarios silenciaos",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",
"navigation_bar.pins": "Toots fixaos", "navigation_bar.pins": "Barritos fixaos",
"navigation_bar.preferences": "Preferencies", "navigation_bar.preferences": "Preferencies",
"navigation_bar.public_timeline": "Llinia temporal federada", "navigation_bar.public_timeline": "Llinia temporal federada",
"navigation_bar.security": "Seguranza", "navigation_bar.security": "Seguranza",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} siguióte", "notification.follow": "{name} siguióte",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentóte", "notification.mention": "{name} mentóte",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended", "notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} compartió'l to estáu", "notification.reblog": "{name} compartió'l to estáu",
"notifications.clear": "Llimpiar avisos", "notifications.clear": "Llimpiar avisos",
@ -282,19 +292,20 @@
"notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.favourite": "Favoritos:",
"notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.advanced": "Display all categories",
"notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show", "notifications.column_settings.filter_bar.show": "Amosar",
"notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow": "Siguidores nuevos:",
"notifications.column_settings.follow_request": "Solicitúes de siguimientu nueves:",
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.poll": "Poll results:", "notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.reblog": "Toots compartíos:", "notifications.column_settings.reblog": "Barritos compartíos:",
"notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.show": "Amosar en columna",
"notifications.column_settings.sound": "Reproducir soníu", "notifications.column_settings.sound": "Reproducir un soníu",
"notifications.filter.all": "All", "notifications.filter.all": "All",
"notifications.filter.boosts": "Boosts", "notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favourites", "notifications.filter.favourites": "Favourites",
"notifications.filter.follows": "Follows", "notifications.filter.follows": "Follows",
"notifications.filter.mentions": "Mentions", "notifications.filter.mentions": "Menciones",
"notifications.filter.polls": "Poll results", "notifications.filter.polls": "Poll results",
"notifications.group": "{count} avisos", "notifications.group": "{count} avisos",
"poll.closed": "Closed", "poll.closed": "Closed",
@ -312,11 +323,11 @@
"privacy.private.short": "Namái siguidores", "privacy.private.short": "Namái siguidores",
"privacy.public.long": "Post to public timelines", "privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public", "privacy.public.short": "Public",
"privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.long": "Nun apaez nes llinies temporales públiques",
"privacy.unlisted.short": "Unlisted", "privacy.unlisted.short": "Nun llistar",
"refresh": "Refresh", "refresh": "Refresh",
"regeneration_indicator.label": "Cargando…", "regeneration_indicator.label": "Cargando…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!", "regeneration_indicator.sublabel": "¡Tamos tresnando'l feed d'Aniciu!",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.hours": "{number}h", "relative_time.hours": "{number}h",
"relative_time.just_now": "agora", "relative_time.just_now": "agora",
@ -325,7 +336,7 @@
"reply_indicator.cancel": "Encaboxar", "reply_indicator.cancel": "Encaboxar",
"report.forward": "Forward to {target}", "report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "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.hint": "L'informe va unviase a los llendadores del to sirvidor. Embaxo, pues desplicar por qué informes d'esta cuenta:",
"report.placeholder": "Comentarios adicionales", "report.placeholder": "Comentarios adicionales",
"report.submit": "Submit", "report.submit": "Submit",
"report.target": "Report {target}", "report.target": "Report {target}",
@ -338,12 +349,13 @@
"search_popout.tips.user": "usuariu", "search_popout.tips.user": "usuariu",
"search_results.accounts": "Xente", "search_results.accounts": "Xente",
"search_results.hashtags": "Etiquetes", "search_results.hashtags": "Etiquetes",
"search_results.statuses": "Toots", "search_results.statuses": "Barritos",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Esti sirvidor de Mastodon tien activada la gueta de barritos pol so conteníu.",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}", "search_results.total": "{count, number} {count, plural, one {resultáu} other {resultaos}}",
"status.admin_account": "Open moderation interface for @{name}", "status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface", "status.admin_status": "Open this status in the moderation interface",
"status.block": "Bloquiar a @{name}", "status.block": "Bloquiar a @{name}",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Dexar de compartir", "status.cancel_reblog_private": "Dexar de compartir",
"status.cannot_reblog": "Esti artículu nun pue compartise", "status.cannot_reblog": "Esti artículu nun pue compartise",
"status.copy": "Copy link to status", "status.copy": "Copy link to status",
@ -354,20 +366,21 @@
"status.favourite": "Favourite", "status.favourite": "Favourite",
"status.filtered": "Filtered", "status.filtered": "Filtered",
"status.load_more": "Cargar más", "status.load_more": "Cargar más",
"status.media_hidden": "Mediu anubríu", "status.media_hidden": "Multimedia anubrida",
"status.mention": "Mentar a @{name}", "status.mention": "Mentar a @{name}",
"status.more": "Más", "status.more": "Más",
"status.mute": "Silenciar a @{name}", "status.mute": "Silenciar a @{name}",
"status.mute_conversation": "Silenciar la conversación", "status.mute_conversation": "Silenciar la conversación",
"status.open": "Espander esti estáu", "status.open": "Espander esti estáu",
"status.pin": "Fixar nel perfil", "status.pin": "Fixar nel perfil",
"status.pinned": "Toot fixáu", "status.pinned": "Barritu fixáu",
"status.read_more": "Read more", "status.read_more": "Read more",
"status.reblog": "Compartir", "status.reblog": "Compartir",
"status.reblog_private": "Compartir cola audiencia orixinal", "status.reblog_private": "Compartir cola audiencia orixinal",
"status.reblogged_by": "{name} compartió", "status.reblogged_by": "{name} compartió",
"status.reblogs.empty": "Naide nun compartió esti toot entá. Cuando daquién lo faiga, va amosase equí.", "status.reblogs.empty": "Naide nun compartió esti barritu entá. Cuando daquién lo faiga, va amosase equí.",
"status.redraft": "Desaniciar y reeditar", "status.redraft": "Desaniciar y reeditar",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Reply to thread", "status.replyAll": "Reply to thread",
"status.report": "Report @{name}", "status.report": "Report @{name}",
@ -377,7 +390,7 @@
"status.show_less_all": "Show less for all", "status.show_less_all": "Show less for all",
"status.show_more": "Amosar más", "status.show_more": "Amosar más",
"status.show_more_all": "Show more for all", "status.show_more_all": "Show more for all",
"status.show_thread": "Show thread", "status.show_thread": "Amosar el filu",
"status.uncached_media_warning": "Not available", "status.uncached_media_warning": "Not available",
"status.unmute_conversation": "Unmute conversation", "status.unmute_conversation": "Unmute conversation",
"status.unpin": "Desfixar del perfil", "status.unpin": "Desfixar del perfil",
@ -388,30 +401,33 @@
"tabs_bar.local_timeline": "Llocal", "tabs_bar.local_timeline": "Llocal",
"tabs_bar.notifications": "Avisos", "tabs_bar.notifications": "Avisos",
"tabs_bar.search": "Search", "tabs_bar.search": "Search",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.days": "{number, plural, one {# día} other {# díes}} que queden",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {persones}} falando",
"trends.trending_now": "Trending now", "trends.trending_now": "Trending now",
"ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Descripción pa discapacitaos visuales", "upload_form.description": "Descripción pa discapacitaos visuales",
"upload_form.edit": "Edit", "upload_form.edit": "Editar",
"upload_form.undo": "Desaniciar", "upload_form.undo": "Desaniciar",
"upload_modal.analyzing_picture": "Analyzing picture…", "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.apply": "Apply", "upload_modal.analyzing_picture": "Analizando la semeya…",
"upload_modal.apply": "Aplicar",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture", "upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media", "upload_modal.edit_media": "Edición",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})", "upload_modal.preview_label": "Previsualización ({ratio})",
"upload_progress.label": "Xubiendo...", "upload_progress.label": "Xubiendo",
"video.close": "Zarrar el videu", "video.close": "Zarrar el videu",
"video.download": "Download file",
"video.exit_fullscreen": "Colar de la pantalla completa", "video.exit_fullscreen": "Colar de la pantalla completa",
"video.expand": "Espander el videu", "video.expand": "Espander el videu",
"video.fullscreen": "Pantalla completa", "video.fullscreen": "Pantalla completa",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Добави или премахни от списъците", "account.add_or_remove_from_list": "Добави или премахни от списъците",
"account.badges.bot": "бот", "account.badges.bot": "бот",
"account.badges.group": "Group",
"account.block": "Блокирай", "account.block": "Блокирай",
"account.block_domain": "скрий всичко от (домейн)", "account.block_domain": "скрий всичко от (домейн)",
"account.blocked": "Блокирани", "account.blocked": "Блокирани",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Rate limited", "alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} per week", "autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "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.body": "Something went wrong while loading this component.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Something went wrong while loading this component.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Try again",
"column.blocks": "Blocked users", "column.blocks": "Blocked users",
"column.bookmarks": "Bookmarks",
"column.community": "Local timeline", "column.community": "Local timeline",
"column.direct": "Direct messages", "column.direct": "Direct messages",
"column.directory": "Browse profiles", "column.directory": "Browse profiles",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Poll duration", "compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}", "compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Раздумай", "compose_form.publish": "Раздумай",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive", "compose_form.sensitive.hide": "Mark media as sensitive",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "No toots here!", "empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable", "empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.", "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
"empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.domain_blocks": "There are no hidden domains yet.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.reply": "to reply",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.apps": "Mobile apps", "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages", "navigation_bar.direct": "Direct messages",
@ -273,7 +281,9 @@
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.favourite": "{name} хареса твоята публикация", "notification.favourite": "{name} хареса твоята публикация",
"notification.follow": "{name} те последва", "notification.follow": "{name} те последва",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} те спомена", "notification.mention": "{name} те спомена",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended", "notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} сподели твоята публикация", "notification.reblog": "{name} сподели твоята публикация",
"notifications.clear": "Clear notifications", "notifications.clear": "Clear notifications",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show", "notifications.column_settings.filter_bar.show": "Show",
"notifications.column_settings.follow": "Нови последователи:", "notifications.column_settings.follow": "Нови последователи:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.mention": "Споменавания:", "notifications.column_settings.mention": "Споменавания:",
"notifications.column_settings.poll": "Poll results:", "notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
@ -344,6 +355,7 @@
"status.admin_account": "Open moderation interface for @{name}", "status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface", "status.admin_status": "Open this status in the moderation interface",
"status.block": "Block @{name}", "status.block": "Block @{name}",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted", "status.cannot_reblog": "This post cannot be boosted",
"status.copy": "Copy link to status", "status.copy": "Copy link to status",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} сподели", "status.reblogged_by": "{name} сподели",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft", "status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Отговор", "status.reply": "Отговор",
"status.replyAll": "Reply to thread", "status.replyAll": "Reply to thread",
"status.report": "Report @{name}", "status.report": "Report @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Добави медия", "upload_button.label": "Добави медия",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.edit": "Edit", "upload_form.edit": "Edit",
"upload_form.undo": "Отмяна", "upload_form.undo": "Отмяна",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply", "upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Preview ({ratio})", "upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…", "upload_progress.label": "Uploading…",
"video.close": "Close video", "video.close": "Close video",
"video.download": "Download file",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video", "video.expand": "Expand video",
"video.fullscreen": "Full screen", "video.fullscreen": "Full screen",

View File

@ -1,56 +1,59 @@
{ {
"account.add_or_remove_from_list": "তালিকা হতে মুছুন অথবা যুক্ত করুন", "account.add_or_remove_from_list": "তালিকাতে যুক্ত বা অপসারণ করুন",
"account.badges.bot": "বট", "account.badges.bot": "বট",
"account.badges.group": "Group",
"account.block": "@{name} কে ব্লক করুন", "account.block": "@{name} কে ব্লক করুন",
"account.block_domain": "{domain} থেকে সব লুকান", "account.block_domain": "{domain} থেকে সব আড়াল করুন",
"account.blocked": "ব্লককৃত", "account.blocked": "অবরুদ্ধ",
"account.cancel_follow_request": "অসুসারণ অনুরোধ বাতিল করুন", "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন",
"account.direct": "@{name} কে সরাসরি বার্তা", "account.direct": "@{name} কে সরাসরি বার্তা",
"account.domain_blocked": "ডোমেন লুকানো আছে", "account.domain_blocked": "ডোমেন গোপন করুন",
"account.edit_profile": "প্রোফাইল সম্পাদন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন",
"account.endorse": "নিজের পাতায় দেখান", "account.endorse": "নিজের পাতায় দেখান",
"account.follow": "অনুসরণ করুন", "account.follow": "অনুসরণ করুন",
"account.followers": "অনুসরণকার", "account.followers": "অনুসরণকার",
"account.followers.empty": "এই ব্যবহারকারীকে কেও এখনো অনুসরণ করে না।", "account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.",
"account.follows": "যাদেরকে অনুসরণ করেন", "account.follows": "যাদেরকে অনুসরণ করেন",
"account.follows.empty": "এই ব্যবহারকারী কাওকে এখনো অনুসরণ করেন না।", "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.",
"account.follows_you": "আপনাকে অনুসরণ করে", "account.follows_you": "আপনাকে অনুসরণ করে",
"account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন",
"account.last_status": "শেষ সক্রিয় ছিল", "account.last_status": "শেষ সক্রিয় ছিল",
"account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিে", "account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিে",
"account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।", "account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।",
"account.media": "মিডিয়া", "account.media": "মিডিয়া",
"account.mention": "@{name} কে উল্লেখ করুন", "account.mention": "@{name} কে উল্লেখ করুন",
"account.moved_to": "{name} কে এখানে সরানো হয়েছে:", "account.moved_to": "{name} কে এখানে সরানো হয়েছে:",
"account.mute": "@{name} কে নিঃশব্দ করুন", "account.mute": "@{name} কে নিঃশব্দ করুন",
"account.mute_notifications": "@{name}র প্রজ্ঞাপন আপনার কাছ থেকে সরিয়ে ফেলুন", "account.mute_notifications": "@{name} র প্রজ্ঞাপন আপনার কাছে নিঃশব্দ করুন",
"account.muted": "সরানো আছে", "account.muted": "নিঃশব্দ",
"account.never_active": "কখনও নয়", "account.never_active": "কখনও নয়",
"account.posts": "টুট", "account.posts": "টুট",
"account.posts_with_replies": "টুট এবং মতামত", "account.posts_with_replies": "টুট এবং মতামত",
"account.report": "@{name} কে রিপোর্ট করতে", "account.report": "@{name} কে রিপোর্ট করুন",
"account.requested": "অনুমতির অপেক্ষায় আছে। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন", "account.requested": "অনুমতির অপেক্ষা। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন",
"account.share": "@{name}র পাতা অন্যদের দেখান", "account.share": "@{name} র প্রোফাইল অন্যদের দেখান",
"account.show_reblogs": "@{name}র সমর্থনগুলো দেখুন", "account.show_reblogs": "@{name} র সমর্থনগুলো দেখান",
"account.unblock": "@{name}র কার্যকলাপ আবার দেখুন", "account.unblock": "@{name} র কার্যকলাপ দেখুন",
"account.unblock_domain": "{domain} থেকে আবার দেখুন", "account.unblock_domain": "{domain} কে আবার দেখুন",
"account.unendorse": "আপনার নিজের পাতায় এটা না দেখাতে", "account.unendorse": "আপনার নিজের পাতায় এটা দেখবেন না",
"account.unfollow": "অনুসরণ না করতে", "account.unfollow": "অনুসরণ না করতে",
"account.unmute": "@{name}র কার্যকলাপ আবার দেখুন", "account.unmute": "@{name} র কার্যকলাপ আবার দেখুন",
"account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন", "account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন",
"alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।",
"alert.rate_limited.title": "হার সীমিত", "alert.rate_limited.title": "হার সীমিত",
"alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।", "alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.",
"alert.unexpected.title": "ওহো!", "alert.unexpected.title": "ওহো!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}",
"boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন", "boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না",
"bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.",
"bundle_column_error.retry": "আবার চেষ্টা করুন", "bundle_column_error.retry": "আবার চেষ্টা করুন",
"bundle_column_error.title": "নেটওয়ার্কের সমস্যা হচ্ছে", "bundle_column_error.title": "নেটওয়ার্কের সমস্যা",
"bundle_modal_error.close": "বন্ধ করুন", "bundle_modal_error.close": "বন্ধ করুন",
"bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।", "bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।.",
"bundle_modal_error.retry": "আবার চেষ্টা করুন", "bundle_modal_error.retry": "আবার চেষ্টা করুন",
"column.blocks": "যাদের ব্লক করে রাখা হয়েছে", "column.blocks": "যাদের ব্লক করা হয়েছে",
"column.bookmarks": "Bookmarks",
"column.community": "স্থানীয় সময়সারি", "column.community": "স্থানীয় সময়সারি",
"column.direct": "সরাসরি লেখা", "column.direct": "সরাসরি লেখা",
"column.directory": "প্রোফাইল ব্রাউজ করুন", "column.directory": "প্রোফাইল ব্রাউজ করুন",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "ভোটগ্রহনের সময়", "compose_form.poll.duration": "ভোটগ্রহনের সময়",
"compose_form.poll.option_placeholder": "বিকল্প {number}", "compose_form.poll.option_placeholder": "বিকল্প {number}",
"compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন", "compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "টুট", "compose_form.publish": "টুট",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে", "compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "এখানে কোনো টুট নেই!", "empty_column.account_timeline": "এখানে কোনো টুট নেই!",
"empty_column.account_unavailable": "নিজস্ব পাতা নেই", "empty_column.account_unavailable": "নিজস্ব পাতা নেই",
"empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।", "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!", "empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!",
"empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।", "empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।",
"empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।", "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে", "keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে",
"keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে", "keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে",
"keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে", "keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে", "keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে",
"keyboard_shortcuts.profile": "লেখকের পাতা দেখতে", "keyboard_shortcuts.profile": "লেখকের পাতা দেখতে",
"keyboard_shortcuts.reply": "মতামত দিতে", "keyboard_shortcuts.reply": "মতামত দিতে",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?", "mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?",
"navigation_bar.apps": "মোবাইলের আপ্প", "navigation_bar.apps": "মোবাইলের আপ্প",
"navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী", "navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "স্থানীয় সময়রেখা", "navigation_bar.community_timeline": "স্থানীয় সময়রেখা",
"navigation_bar.compose": "নতুন টুট লিখুন", "navigation_bar.compose": "নতুন টুট লিখুন",
"navigation_bar.direct": "সরাসরি লেখাগুলি", "navigation_bar.direct": "সরাসরি লেখাগুলি",
@ -273,7 +281,9 @@
"navigation_bar.security": "নিরাপত্তা", "navigation_bar.security": "নিরাপত্তা",
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন", "notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন", "notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
"notification.own_poll": "আপনার পোল শেষ হয়েছে",
"notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে", "notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে",
"notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন", "notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন",
"notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে", "notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ", "notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ",
"notifications.column_settings.filter_bar.show": "দেখানো", "notifications.column_settings.filter_bar.show": "দেখানো",
"notifications.column_settings.follow": "নতুন অনুসরণকারীরা:", "notifications.column_settings.follow": "নতুন অনুসরণকারীরা:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:", "notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:",
"notifications.column_settings.poll": "নির্বাচনের ফলাফল:", "notifications.column_settings.poll": "নির্বাচনের ফলাফল:",
"notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি", "notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি",
@ -344,6 +355,7 @@
"status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন",
"status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন",
"status.block": "@{name} কে ব্লক করুন", "status.block": "@{name} কে ব্লক করুন",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "সমর্থন বাতিল করতে", "status.cancel_reblog_private": "সমর্থন বাতিল করতে",
"status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা", "status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা",
"status.copy": "লেখাটির লিংক কপি করতে", "status.copy": "লেখাটির লিংক কপি করতে",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} সমর্থন দিয়েছে", "status.reblogged_by": "{name} সমর্থন দিয়েছে",
"status.reblogs.empty": "এখনো কেও এটাতে সমর্থন দেয়নি। যখন কেও দেয়, সেটা তখন এখানে দেখা যাবে।", "status.reblogs.empty": "এখনো কেও এটাতে সমর্থন দেয়নি। যখন কেও দেয়, সেটা তখন এখানে দেখা যাবে।",
"status.redraft": "মুছে আবার নতুন করে লিখতে", "status.redraft": "মুছে আবার নতুন করে লিখতে",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "মতামত জানাতে", "status.reply": "মতামত জানাতে",
"status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে", "status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে",
"status.report": "@{name} কে রিপোর্ট করতে", "status.report": "@{name} কে রিপোর্ট করতে",
@ -400,9 +413,11 @@
"upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।", "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।", "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে", "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
"upload_form.edit": "সম্পাদন", "upload_form.edit": "সম্পাদন",
"upload_form.undo": "মুছে ফেলতে", "upload_form.undo": "মুছে ফেলতে",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…", "upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…",
"upload_modal.apply": "প্রয়োগ করুন", "upload_modal.apply": "প্রয়োগ করুন",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "পূর্বরূপ({ratio})", "upload_modal.preview_label": "পূর্বরূপ({ratio})",
"upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...", "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...",
"video.close": "ভিডিওটি বন্ধ করতে", "video.close": "ভিডিওটি বন্ধ করতে",
"video.download": "ফাইলটি ডাউনলোড করুন",
"video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে", "video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে",
"video.expand": "ভিডিওটি বড়ো করতে", "video.expand": "ভিডিওটি বড়ো করতে",
"video.fullscreen": "পূর্ণ পর্দা করতে", "video.fullscreen": "পূর্ণ পর্দা করতে",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Ouzhpenn pe lemel ag ar listennadoù", "account.add_or_remove_from_list": "Ouzhpenn pe lemel ag ar listennadoù",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Strollad",
"account.block": "Stankañ @{name}", "account.block": "Stankañ @{name}",
"account.block_domain": "Kuzh kement tra a {domain}", "account.block_domain": "Kuzh kement tra a {domain}",
"account.blocked": "Stanket", "account.blocked": "Stanket",
@ -13,7 +14,7 @@
"account.followers": "Heilour·ezed·ion", "account.followers": "Heilour·ezed·ion",
"account.followers.empty": "Den na heul an implijour-mañ c'hoazh.", "account.followers.empty": "Den na heul an implijour-mañ c'hoazh.",
"account.follows": "Koumanantoù", "account.follows": "Koumanantoù",
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "An implijer-mañ na heul ket den ebet.",
"account.follows_you": "Ho heul", "account.follows_you": "Ho heul",
"account.hide_reblogs": "Kuzh toudoù skignet gant @{name}", "account.hide_reblogs": "Kuzh toudoù skignet gant @{name}",
"account.last_status": "Oberiantiz zivezhañ", "account.last_status": "Oberiantiz zivezhañ",
@ -29,21 +30,22 @@
"account.posts": "Toudoù", "account.posts": "Toudoù",
"account.posts_with_replies": "Toudoù ha respontoù", "account.posts_with_replies": "Toudoù ha respontoù",
"account.report": "Disklêriañ @{name}", "account.report": "Disklêriañ @{name}",
"account.requested": "Awaiting approval", "account.requested": "É c'hortoz bout aprouet. Clikit da nullañ ar pedad heuliañ",
"account.share": "Skignañ profil @{name}", "account.share": "Skignañ profil @{name}",
"account.show_reblogs": "Diskouez toudoù a @{name}", "account.show_reblogs": "Diskouez toudoù a @{name}",
"account.unblock": "Distankañ @{name}", "account.unblock": "Distankañ @{name}",
"account.unblock_domain": "Diguzh {domain}", "account.unblock_domain": "Diguzh {domain}",
"account.unendorse": "Don't feature on profile", "account.unendorse": "Paouez da lakaat war-wel war ar profil",
"account.unfollow": "Diheuliañ", "account.unfollow": "Diheuliañ",
"account.unmute": "Diguzhat @{name}", "account.unmute": "Diguzhat @{name}",
"account.unmute_notifications": "Diguzhat kemennoù a @{name}", "account.unmute_notifications": "Diguzhat kemennoù a @{name}",
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.message": "Klaskit en-dro a-benn {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited", "alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.", "alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.",
"alert.unexpected.title": "C'hem !", "alert.unexpected.title": "C'hem !",
"announcement.announcement": "Kemenn",
"autosuggest_hashtag.per_week": "{count} bep sizhun", "autosuggest_hashtag.per_week": "{count} bep sizhun",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "Ar wezh kentañ e c'halliot gwaskañ war {combo} evit tremen hebiou",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Klask endro", "bundle_column_error.retry": "Klask endro",
"bundle_column_error.title": "Fazi rouedad", "bundle_column_error.title": "Fazi rouedad",
@ -51,65 +53,68 @@
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Something went wrong while loading this component.",
"bundle_modal_error.retry": "Klask endro", "bundle_modal_error.retry": "Klask endro",
"column.blocks": "Implijour·ezed·ion stanket", "column.blocks": "Implijour·ezed·ion stanket",
"column.bookmarks": "Sinedoù",
"column.community": "Red-amzer lec'hel", "column.community": "Red-amzer lec'hel",
"column.direct": "Kemennadoù prevez", "column.direct": "Kemennadoù prevez",
"column.directory": "Mont a-dreuz ar profiloù", "column.directory": "Mont a-dreuz ar profiloù",
"column.domain_blocks": "Domani kuzhet", "column.domain_blocks": "Domani kuzhet",
"column.favourites": "Favourites", "column.favourites": "Ar re vuiañ-karet",
"column.follow_requests": "Follow requests", "column.follow_requests": "Pedadoù heuliañ",
"column.home": "Home", "column.home": "Degemer",
"column.lists": "Lists", "column.lists": "Listennoù",
"column.mutes": "Muted users", "column.mutes": "Implijer·ion·ezed kuzhet",
"column.notifications": "Notifications", "column.notifications": "Kemennoù",
"column.pins": "Pinned toot", "column.pins": "Toudoù spilhennet",
"column.public": "Federated timeline", "column.public": "Red-amzer kevreet",
"column_back_button.label": "Back", "column_back_button.label": "Distro",
"column_header.hide_settings": "Hide settings", "column_header.hide_settings": "Kuzhat an arventennoù",
"column_header.moveLeft_settings": "Move column to the left", "column_header.moveLeft_settings": "Move column to the left",
"column_header.moveRight_settings": "Move column to the right", "column_header.moveRight_settings": "Move column to the right",
"column_header.pin": "Pin", "column_header.pin": "Spilhennañ",
"column_header.show_settings": "Show settings", "column_header.show_settings": "Diskouez an arventennoù",
"column_header.unpin": "Unpin", "column_header.unpin": "Dispilhennañ",
"column_subheading.settings": "Settings", "column_subheading.settings": "Arventennoù",
"community.column_settings.media_only": "Media only", "community.column_settings.media_only": "Nemet Mediaoù",
"compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning": "An toud-mañ a vo kaset nemet d'an implijer·ion·ezed meneget.",
"compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.direct_message_warning_learn_more": "Gouiet hiroc'h",
"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.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": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked", "compose_form.lock_disclaimer.lock": "prennet",
"compose_form.placeholder": "What is on your mind?", "compose_form.placeholder": "Petra eh oc'h é soñjal a-barzh ?",
"compose_form.poll.add_option": "Add a choice", "compose_form.poll.add_option": "Ouzhpenniñ un dibab",
"compose_form.poll.duration": "Poll duration", "compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}", "compose_form.poll.option_placeholder": "Dibab {number}",
"compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.remove_option": "Lemel an dibab-mañ",
"compose_form.publish": "Toot", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.publish_loud": "{publish}!", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Toudañ",
"compose_form.publish_loud": "{publish} !",
"compose_form.sensitive.hide": "Mark media as sensitive", "compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not 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.marked": "Text is hidden behind warning",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "N'eo ket kuzhet an destenn",
"compose_form.spoiler_placeholder": "Write your warning here", "compose_form.spoiler_placeholder": "Write your warning here",
"confirmation_modal.cancel": "Cancel", "confirmation_modal.cancel": "Nullañ",
"confirmations.block.block_and_report": "Block & Report", "confirmations.block.block_and_report": "Block & Report",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Block",
"confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.block.message": "Are you sure you want to block {name}?",
"confirmations.delete.confirm": "Delete", "confirmations.delete.confirm": "Dilemel",
"confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.confirm": "Dilemel",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.delete_list.message": "Ha sur eo hoc'h eus c'hoant da zilemel ar roll-mañ da vat ?",
"confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.confirm": "Kuzhat an domani a-bezh",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.logout.confirm": "Log out", "confirmations.logout.confirm": "Digevreañ",
"confirmations.logout.message": "Are you sure you want to log out?", "confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.mute.confirm": "Mute", "confirmations.mute.confirm": "Kuzhat",
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
"confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.mute.message": "Ha sur oc'h e fell deoc'h kuzhaat {name} ?",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Diverkañ ha skrivañ en-dro",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"confirmations.reply.confirm": "Reply", "confirmations.reply.confirm": "Respont",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Diheuliañ",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
"conversation.delete": "Delete conversation", "conversation.delete": "Delete conversation",
"conversation.mark_as_read": "Mark as read", "conversation.mark_as_read": "Mark as read",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "No toots here!", "empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable", "empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.", "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
"empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.domain_blocks": "There are no hidden domains yet.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.reply": "to reply",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.apps": "Mobile apps", "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages", "navigation_bar.direct": "Direct messages",
@ -273,7 +281,9 @@
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended", "notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your status", "notification.reblog": "{name} boosted your status",
"notifications.clear": "Clear notifications", "notifications.clear": "Clear notifications",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show", "notifications.column_settings.filter_bar.show": "Show",
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "New followers:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.poll": "Poll results:", "notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
@ -344,6 +355,7 @@
"status.admin_account": "Open moderation interface for @{name}", "status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface", "status.admin_status": "Open this status in the moderation interface",
"status.block": "Block @{name}", "status.block": "Block @{name}",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted", "status.cannot_reblog": "This post cannot be boosted",
"status.copy": "Copy link to status", "status.copy": "Copy link to status",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} boosted", "status.reblogged_by": "{name} boosted",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft", "status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Reply", "status.reply": "Reply",
"status.replyAll": "Reply to thread", "status.replyAll": "Reply to thread",
"status.report": "Report @{name}", "status.report": "Report @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Add media ({formats})", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.edit": "Edit", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply", "upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Preview ({ratio})", "upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…", "upload_progress.label": "Uploading…",
"video.close": "Close video", "video.close": "Close video",
"video.download": "Download file",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video", "video.expand": "Expand video",
"video.fullscreen": "Full screen", "video.fullscreen": "Full screen",

View File

@ -1,14 +1,15 @@
{ {
"account.add_or_remove_from_list": "Afegir o Treure de les llistes", "account.add_or_remove_from_list": "Afegir o Treure de les llistes",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Grup",
"account.block": "Bloqueja @{name}", "account.block": "Bloqueja @{name}",
"account.block_domain": "Amaga-ho tot de {domain}", "account.block_domain": "Amaga-ho tot de {domain}",
"account.blocked": "Bloquejat", "account.blocked": "Bloquejat",
"account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment",
"account.direct": "Missatge directe @{name}", "account.direct": "Missatge directe @{name}",
"account.domain_blocked": "Domini ocult", "account.domain_blocked": "Domini ocult",
"account.edit_profile": "Editar el perfil", "account.edit_profile": "Edita el perfil",
"account.endorse": "Recomanar en el teu perfil", "account.endorse": "Recomana en el teu perfil",
"account.follow": "Segueix", "account.follow": "Segueix",
"account.followers": "Seguidors", "account.followers": "Seguidors",
"account.followers.empty": "Encara ningú no segueix aquest usuari.", "account.followers.empty": "Encara ningú no segueix aquest usuari.",
@ -26,15 +27,15 @@
"account.mute_notifications": "Notificacions desactivades de @{name}", "account.mute_notifications": "Notificacions desactivades de @{name}",
"account.muted": "Silenciat", "account.muted": "Silenciat",
"account.never_active": "Mai", "account.never_active": "Mai",
"account.posts": "Toots", "account.posts": "Tuts",
"account.posts_with_replies": "Toots i respostes", "account.posts_with_replies": "Tuts i respostes",
"account.report": "Informe @{name}", "account.report": "Informar sobre @{name}",
"account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment", "account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment",
"account.share": "Comparteix el perfil de @{name}", "account.share": "Comparteix el perfil de @{name}",
"account.show_reblogs": "Mostra els impulsos de @{name}", "account.show_reblogs": "Mostra els impulsos de @{name}",
"account.unblock": "Desbloca @{name}", "account.unblock": "Desbloqueja @{name}",
"account.unblock_domain": "Mostra {domain}", "account.unblock_domain": "Mostra {domain}",
"account.unendorse": "No es mostren al perfil", "account.unendorse": "No recomanar en el perfil",
"account.unfollow": "Deixa de seguir", "account.unfollow": "Deixa de seguir",
"account.unmute": "Treure silenci de @{name}", "account.unmute": "Treure silenci de @{name}",
"account.unmute_notifications": "Activar notificacions de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}",
@ -42,8 +43,9 @@
"alert.rate_limited.title": "Límit de freqüència", "alert.rate_limited.title": "Límit de freqüència",
"alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.message": "S'ha produït un error inesperat.",
"alert.unexpected.title": "Vaja!", "alert.unexpected.title": "Vaja!",
"announcement.announcement": "Anunci",
"autosuggest_hashtag.per_week": "{count} per setmana", "autosuggest_hashtag.per_week": "{count} per setmana",
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop", "boost_modal.combo": "Pots prémer {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.body": "S'ha produït un error en carregar aquest component.",
"bundle_column_error.retry": "Torna-ho a provar", "bundle_column_error.retry": "Torna-ho a provar",
"bundle_column_error.title": "Error de connexió", "bundle_column_error.title": "Error de connexió",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "S'ha produït un error en carregar aquest component.", "bundle_modal_error.message": "S'ha produït un error en carregar aquest component.",
"bundle_modal_error.retry": "Torna-ho a provar", "bundle_modal_error.retry": "Torna-ho a provar",
"column.blocks": "Usuaris bloquejats", "column.blocks": "Usuaris bloquejats",
"column.bookmarks": "Marcadors",
"column.community": "Línia de temps local", "column.community": "Línia de temps local",
"column.direct": "Missatges directes", "column.direct": "Missatges directes",
"column.directory": "Navega els perfils", "column.directory": "Navega els perfils",
@ -61,7 +64,7 @@
"column.lists": "Llistes", "column.lists": "Llistes",
"column.mutes": "Usuaris silenciats", "column.mutes": "Usuaris silenciats",
"column.notifications": "Notificacions", "column.notifications": "Notificacions",
"column.pins": "Toots fixats", "column.pins": "Tuts fixats",
"column.public": "Línia de temps federada", "column.public": "Línia de temps federada",
"column_back_button.label": "Enrere", "column_back_button.label": "Enrere",
"column_header.hide_settings": "Amaga la configuració", "column_header.hide_settings": "Amaga la configuració",
@ -72,9 +75,9 @@
"column_header.unpin": "No fixis", "column_header.unpin": "No fixis",
"column_subheading.settings": "Configuració", "column_subheading.settings": "Configuració",
"community.column_settings.media_only": "Només multimèdia", "community.column_settings.media_only": "Només multimèdia",
"compose_form.direct_message_warning": "Aquest toot només serà enviat als usuaris esmentats.", "compose_form.direct_message_warning": "Aquest tut només serà enviat als usuaris esmentats.",
"compose_form.direct_message_warning_learn_more": "Aprèn més", "compose_form.direct_message_warning_learn_more": "Aprèn més",
"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.hashtag_warning": "Aquesta tut no es mostrarà en cap etiqueta ja que no està llistat. Només els tuts 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": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges a seguidors.",
"compose_form.lock_disclaimer.lock": "bloquejat", "compose_form.lock_disclaimer.lock": "bloquejat",
"compose_form.placeholder": "En què penses?", "compose_form.placeholder": "En què penses?",
@ -82,7 +85,9 @@
"compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.duration": "Durada de l'enquesta",
"compose_form.poll.option_placeholder": "Opció {number}", "compose_form.poll.option_placeholder": "Opció {number}",
"compose_form.poll.remove_option": "Elimina aquesta opció", "compose_form.poll.remove_option": "Elimina aquesta opció",
"compose_form.publish": "Toot", "compose_form.poll.switch_to_multiple": "Canvia lenquesta per a permetre diverses opcions",
"compose_form.poll.switch_to_single": "Canvia lenquesta per a permetre una única opció",
"compose_form.publish": "Tut",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marcar mèdia com a sensible", "compose_form.sensitive.hide": "Marcar mèdia com a sensible",
"compose_form.sensitive.marked": "Mèdia marcat com a sensible", "compose_form.sensitive.marked": "Mèdia marcat com a sensible",
@ -95,18 +100,18 @@
"confirmations.block.confirm": "Bloqueja", "confirmations.block.confirm": "Bloqueja",
"confirmations.block.message": "Estàs segur que vols bloquejar a {name}?", "confirmations.block.message": "Estàs segur que vols bloquejar a {name}?",
"confirmations.delete.confirm": "Suprimeix", "confirmations.delete.confirm": "Suprimeix",
"confirmations.delete.message": "Estàs segur que vols suprimir aquest toot?", "confirmations.delete.message": "Estàs segur que vols suprimir aquest tut?",
"confirmations.delete_list.confirm": "Suprimeix", "confirmations.delete_list.confirm": "Suprimeix",
"confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?", "confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?",
"confirmations.domain_block.confirm": "Amaga tot el domini", "confirmations.domain_block.confirm": "Amaga tot el domini",
"confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut daquest domini en cap de les línies públiques ni en les notificacions. Els teus seguidors daquest domini seran eliminats.", "confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut daquest domini en cap de les línies de temps ni en les notificacions. Els teus seguidors daquest domini seran eliminats.",
"confirmations.logout.confirm": "Tancar sessió", "confirmations.logout.confirm": "Tancar sessió",
"confirmations.logout.message": "Segur que vols tancar la sessió?", "confirmations.logout.message": "Segur que vols tancar la sessió?",
"confirmations.mute.confirm": "Silencia", "confirmations.mute.confirm": "Silencia",
"confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen però encara els permetrà veure les teves i seguir-te.", "confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen però encara els permetrà veure les teves i seguir-te.",
"confirmations.mute.message": "Estàs segur que vols silenciar {name}?", "confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
"confirmations.redraft.confirm": "Esborrar i refer", "confirmations.redraft.confirm": "Esborrar i refer",
"confirmations.redraft.message": "Estàs segur que vols esborrar aquest toot i tornar a redactar-lo? Perderàs totes els impulsos i favorits, i les respostes al toot original es quedaran orfes.", "confirmations.redraft.message": "Estàs segur que vols esborrar aquest tut i tornar a redactar-lo? Perdràs tots els impulsos i favorits, i les respostes al tut original es quedaran orfes.",
"confirmations.reply.confirm": "Respon", "confirmations.reply.confirm": "Respon",
"confirmations.reply.message": "Responen ara es sobreescriurà el missatge que estàs editant. Estàs segur que vols continuar?", "confirmations.reply.message": "Responen ara es sobreescriurà el missatge que estàs editant. Estàs segur que vols continuar?",
"confirmations.unfollow.confirm": "Deixa de seguir", "confirmations.unfollow.confirm": "Deixa de seguir",
@ -119,8 +124,8 @@
"directory.local": "Només de {domain}", "directory.local": "Només de {domain}",
"directory.new_arrivals": "Arribades noves", "directory.new_arrivals": "Arribades noves",
"directory.recently_active": "Recentment actius", "directory.recently_active": "Recentment actius",
"embed.instructions": "Incrusta aquest toot al lloc web copiant el codi a continuació.", "embed.instructions": "Incrusta aquest tut al lloc web copiant el codi a continuació.",
"embed.preview": "Aquí tenim quin aspecte tindrá:", "embed.preview": "Aquí tenim quin aspecte tindrà:",
"emoji_button.activity": "Activitat", "emoji_button.activity": "Activitat",
"emoji_button.custom": "Personalitzat", "emoji_button.custom": "Personalitzat",
"emoji_button.flags": "Banderes", "emoji_button.flags": "Banderes",
@ -135,19 +140,20 @@
"emoji_button.search_results": "Resultats de la cerca", "emoji_button.search_results": "Resultats de la cerca",
"emoji_button.symbols": "Símbols", "emoji_button.symbols": "Símbols",
"emoji_button.travel": "Viatges i Llocs", "emoji_button.travel": "Viatges i Llocs",
"empty_column.account_timeline": "No hi ha toots aquí!", "empty_column.account_timeline": "No hi ha tuts aquí!",
"empty_column.account_unavailable": "Perfil no disponible", "empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Encara no has bloquejat cap usuari.", "empty_column.blocks": "Encara no has bloquejat cap usuari.",
"empty_column.bookmarked_statuses": "Encara no tens marcat cap tut. Quan marquis un apareixerà aquí.",
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per a fer rodar la pilota!", "empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per a fer rodar la pilota!",
"empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.", "empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.",
"empty_column.domain_blocks": "Encara no hi ha dominis ocults.", "empty_column.domain_blocks": "Encara no hi ha dominis ocults.",
"empty_column.favourited_statuses": "Encara no tens cap toot favorit. Quan en tinguis, apareixerà aquí.", "empty_column.favourited_statuses": "Encara no has marcat com a favorit cap tut. Quan en facis, apareixerà aquí.",
"empty_column.favourites": "Encara ningú ha marcat aquest toot com a favorit. Quan algú ho faci, apareixera aquí.", "empty_column.favourites": "Ningú no ha marcat aquest tut com a preferit encara. Quan algú ho faci, apareixerà aquí.",
"empty_column.follow_requests": "Encara no teniu cap petició de seguiment. Quan rebis una, apareixerà aquí.", "empty_column.follow_requests": "Encara no tens cap petició de seguiment. Quan rebis una, apareixerà aquí.",
"empty_column.hashtag": "Encara no hi ha res en aquesta etiqueta.", "empty_column.hashtag": "Encara no hi ha res en 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": "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", "empty_column.home.public_timeline": "la línia de temps pública",
"empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous toots, apareixeran aquí.", "empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous tuts, apareixeran aquí.",
"empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.", "empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.",
"empty_column.mutes": "Encara no has silenciat cap usuari.", "empty_column.mutes": "Encara no has silenciat cap usuari.",
"empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
@ -163,7 +169,7 @@
"getting_started.documentation": "Documentació", "getting_started.documentation": "Documentació",
"getting_started.heading": "Començant", "getting_started.heading": "Començant",
"getting_started.invite": "Convida gent", "getting_started.invite": "Convida gent",
"getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir o informar de problemes a GitHub a {github}.", "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir-hi o informar de problemes a GitHub a {github}.",
"getting_started.security": "Seguretat", "getting_started.security": "Seguretat",
"getting_started.terms": "Termes del servei", "getting_started.terms": "Termes del servei",
"hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.all": "i {additional}",
@ -176,8 +182,8 @@
"hashtag.column_settings.tag_mode.none": "Cap daquests", "hashtag.column_settings.tag_mode.none": "Cap daquests",
"hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna",
"home.column_settings.basic": "Bàsic", "home.column_settings.basic": "Bàsic",
"home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_reblogs": "Mostra els impulsos",
"home.column_settings.show_replies": "Mostrar respostes", "home.column_settings.show_replies": "Mostra les respostes",
"intervals.full.days": "{number, plural, one {# dia} other {# dies}}", "intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
@ -190,27 +196,27 @@
"introduction.federation.local.text": "Les publicacions públiques de les persones del teu mateix servidor apareixeran a la línia de temps local.", "introduction.federation.local.text": "Les publicacions públiques de les persones del teu mateix servidor apareixeran a la línia de temps local.",
"introduction.interactions.action": "Finalitza el tutorial!", "introduction.interactions.action": "Finalitza el tutorial!",
"introduction.interactions.favourite.headline": "Favorit", "introduction.interactions.favourite.headline": "Favorit",
"introduction.interactions.favourite.text": "Pots desar un toot per a més tard i deixar que l'autor sàpiga que t'ha agradat, marcant-lo com a favorit.", "introduction.interactions.favourite.text": "Pots desar un tut per a més tard i deixar que l'autor sàpiga que t'ha agradat, marcant-lo com a favorit.",
"introduction.interactions.reblog.headline": "Impuls", "introduction.interactions.reblog.headline": "Impuls",
"introduction.interactions.reblog.text": "Pots compartir amb els teus seguidors els toots d'altres usuaris, impulsant-los.", "introduction.interactions.reblog.text": "Pots compartir amb els teus seguidors els tuts d'altres usuaris, impulsant-los.",
"introduction.interactions.reply.headline": "Respondre", "introduction.interactions.reply.headline": "Respondre",
"introduction.interactions.reply.text": "Pots respondre als toots d'altres persones i als teus propis, que els unirà en una conversa.", "introduction.interactions.reply.text": "Pots respondre als tuts d'altres persones i als teus propis, que els unirà en una conversa.",
"introduction.welcome.action": "Som-hi!", "introduction.welcome.action": "Som-hi!",
"introduction.welcome.headline": "Primers passos", "introduction.welcome.headline": "Primers passos",
"introduction.welcome.text": "Benvingut al fedivers! En uns moments podràs emetre missatges i conversar amb els teus amics en una gran varietat de servidors. Però aquest servidor, {domain}, és especial: allotja el teu perfil així que recorda el seu nom.", "introduction.welcome.text": "Benvingut al fedivers! En uns moments podràs emetre missatges i conversar amb els teus amics en una gran varietat de servidors. Però aquest servidor, {domain}, és especial: allotja el teu perfil així que recorda el seu nom.",
"keyboard_shortcuts.back": "navegar enrera", "keyboard_shortcuts.back": "navegar enrere",
"keyboard_shortcuts.blocked": "per obrir la llista d'usuaris bloquejats", "keyboard_shortcuts.blocked": "per obrir la llista d'usuaris bloquejats",
"keyboard_shortcuts.boost": "impulsar", "keyboard_shortcuts.boost": "impulsar",
"keyboard_shortcuts.column": "per a centrar un toot en una de les columnes", "keyboard_shortcuts.column": "per a centrar un tut en una de les columnes",
"keyboard_shortcuts.compose": "per centrar l'area de composició de text", "keyboard_shortcuts.compose": "per centrar l'àrea de composició de text",
"keyboard_shortcuts.description": "Descripció", "keyboard_shortcuts.description": "Descripció",
"keyboard_shortcuts.direct": "per obrir la columna de missatges directes", "keyboard_shortcuts.direct": "per obrir la columna de missatges directes",
"keyboard_shortcuts.down": "per baixar en la llista", "keyboard_shortcuts.down": "per baixar en la llista",
"keyboard_shortcuts.enter": "ampliar el toot", "keyboard_shortcuts.enter": "per a obrir el tut",
"keyboard_shortcuts.favourite": "afavorir", "keyboard_shortcuts.favourite": "afavorir",
"keyboard_shortcuts.favourites": "per obrir la llista de favorits", "keyboard_shortcuts.favourites": "per obrir la llista de favorits",
"keyboard_shortcuts.federated": "per obrir la línia de temps federada", "keyboard_shortcuts.federated": "per obrir la línia de temps federada",
"keyboard_shortcuts.heading": "Dreçeres de teclat", "keyboard_shortcuts.heading": "Dreceres de teclat",
"keyboard_shortcuts.home": "per a obrir la línia de temps Inici", "keyboard_shortcuts.home": "per a obrir la línia de temps Inici",
"keyboard_shortcuts.hotkey": "Tecla d'accés directe", "keyboard_shortcuts.hotkey": "Tecla d'accés directe",
"keyboard_shortcuts.legend": "per a mostrar aquesta llegenda", "keyboard_shortcuts.legend": "per a mostrar aquesta llegenda",
@ -219,16 +225,17 @@
"keyboard_shortcuts.muted": "per a obrir la llista d'usuaris silenciats", "keyboard_shortcuts.muted": "per a obrir la llista d'usuaris silenciats",
"keyboard_shortcuts.my_profile": "per a obrir el teu perfil", "keyboard_shortcuts.my_profile": "per a obrir el teu perfil",
"keyboard_shortcuts.notifications": "per a obrir la columna de notificacions", "keyboard_shortcuts.notifications": "per a obrir la columna de notificacions",
"keyboard_shortcuts.pinned": "per a obrir la llista de toots fixats", "keyboard_shortcuts.open_media": "obrir mèdia",
"keyboard_shortcuts.pinned": "per a obrir la llista de tuts fixats",
"keyboard_shortcuts.profile": "per a obrir el perfil de l'autor", "keyboard_shortcuts.profile": "per a obrir el perfil de l'autor",
"keyboard_shortcuts.reply": "respondre", "keyboard_shortcuts.reply": "respondre",
"keyboard_shortcuts.requests": "per a obrir la llista de sol·licituds de seguiment", "keyboard_shortcuts.requests": "per a obrir la llista de sol·licituds de seguiment",
"keyboard_shortcuts.search": "per a centrar la cerca", "keyboard_shortcuts.search": "per a centrar la cerca",
"keyboard_shortcuts.start": "per a obrir la columna \"Començar\"", "keyboard_shortcuts.start": "per a obrir la columna \"Començar\"",
"keyboard_shortcuts.toggle_hidden": "per a mostrar/amagar text sota CW", "keyboard_shortcuts.toggle_hidden": "per a mostrar o amagar text sota CW",
"keyboard_shortcuts.toggle_sensitivity": "per a mostrar/amagar mèdia", "keyboard_shortcuts.toggle_sensitivity": "per a mostrar o amagar contingut multimèdia",
"keyboard_shortcuts.toot": "per a començar un toot nou de trinca", "keyboard_shortcuts.toot": "per a començar un tut nou de trinca",
"keyboard_shortcuts.unfocus": "descentrar l'area de composició de text/cerca", "keyboard_shortcuts.unfocus": "descentrar l'àrea de composició de text/cerca",
"keyboard_shortcuts.up": "moure amunt en la llista", "keyboard_shortcuts.up": "moure amunt en la llista",
"lightbox.close": "Tancar", "lightbox.close": "Tancar",
"lightbox.next": "Següent", "lightbox.next": "Següent",
@ -251,13 +258,14 @@
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?", "mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
"navigation_bar.apps": "Apps mòbils", "navigation_bar.apps": "Apps mòbils",
"navigation_bar.blocks": "Usuaris bloquejats", "navigation_bar.blocks": "Usuaris bloquejats",
"navigation_bar.bookmarks": "Marcadors",
"navigation_bar.community_timeline": "Línia de temps Local", "navigation_bar.community_timeline": "Línia de temps Local",
"navigation_bar.compose": "Redacta nou toot", "navigation_bar.compose": "Redacta un nou tut",
"navigation_bar.direct": "Missatges directes", "navigation_bar.direct": "Missatges directes",
"navigation_bar.discover": "Descobreix", "navigation_bar.discover": "Descobreix",
"navigation_bar.domain_blocks": "Dominis ocults", "navigation_bar.domain_blocks": "Dominis ocults",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
"navigation_bar.favourites": "Favorits", "navigation_bar.favourites": "Preferits",
"navigation_bar.filters": "Paraules silenciades", "navigation_bar.filters": "Paraules silenciades",
"navigation_bar.follow_requests": "Sol·licituds de seguiment", "navigation_bar.follow_requests": "Sol·licituds de seguiment",
"navigation_bar.follows_and_followers": "Seguits i seguidors", "navigation_bar.follows_and_followers": "Seguits i seguidors",
@ -267,29 +275,32 @@
"navigation_bar.logout": "Tancar sessió", "navigation_bar.logout": "Tancar sessió",
"navigation_bar.mutes": "Usuaris silenciats", "navigation_bar.mutes": "Usuaris silenciats",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",
"navigation_bar.pins": "Toots fixats", "navigation_bar.pins": "Tuts fixats",
"navigation_bar.preferences": "Preferències", "navigation_bar.preferences": "Preferències",
"navigation_bar.public_timeline": "Línia de temps federada", "navigation_bar.public_timeline": "Línia de temps federada",
"navigation_bar.security": "Seguretat", "navigation_bar.security": "Seguretat",
"notification.favourite": "{name} ha afavorit el teu estat", "notification.favourite": "{name} ha afavorit el teu estat",
"notification.follow": "{name} et segueix", "notification.follow": "{name} et segueix",
"notification.follow_request": "{name} ha sol·licitat seguir-te",
"notification.mention": "{name} t'ha esmentat", "notification.mention": "{name} t'ha esmentat",
"notification.own_poll": "La teva enquesta ha finalitzat",
"notification.poll": "Ha finalitzat una enquesta en la que has votat", "notification.poll": "Ha finalitzat una enquesta en la que has votat",
"notification.reblog": "{name} ha impulsat el teu estat", "notification.reblog": "{name} ha impulsat el teu estat",
"notifications.clear": "Netejar notificacions", "notifications.clear": "Netejar notificacions",
"notifications.clear_confirmation": "Estàs segur que vols esborrar permanenment totes les teves notificacions?", "notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?",
"notifications.column_settings.alert": "Notificacions d'escriptori", "notifications.column_settings.alert": "Notificacions d'escriptori",
"notifications.column_settings.favourite": "Favorits:", "notifications.column_settings.favourite": "Preferits:",
"notifications.column_settings.filter_bar.advanced": "Mostra totes les categories", "notifications.column_settings.filter_bar.advanced": "Mostra totes les categories",
"notifications.column_settings.filter_bar.category": "Barra ràpida de filtres", "notifications.column_settings.filter_bar.category": "Barra ràpida de filtres",
"notifications.column_settings.filter_bar.show": "Mostra", "notifications.column_settings.filter_bar.show": "Mostra",
"notifications.column_settings.follow": "Nous seguidors:", "notifications.column_settings.follow": "Nous seguidors:",
"notifications.column_settings.follow_request": "Nova sol·licitud de seguiment:",
"notifications.column_settings.mention": "Mencions:", "notifications.column_settings.mention": "Mencions:",
"notifications.column_settings.poll": "Resultats de lenquesta:", "notifications.column_settings.poll": "Resultats de lenquesta:",
"notifications.column_settings.push": "Notificacions push", "notifications.column_settings.push": "Notificacions push",
"notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.reblog": "Impulsos:",
"notifications.column_settings.show": "Mostrar en la columna", "notifications.column_settings.show": "Mostra en la columna",
"notifications.column_settings.sound": "Reproduïr so", "notifications.column_settings.sound": "Reproduir so",
"notifications.filter.all": "Tots", "notifications.filter.all": "Tots",
"notifications.filter.boosts": "Impulsos", "notifications.filter.boosts": "Impulsos",
"notifications.filter.favourites": "Favorits", "notifications.filter.favourites": "Favorits",
@ -333,20 +344,21 @@
"search_popout.search_format": "Format de cerca avançada", "search_popout.search_format": "Format de cerca avançada",
"search_popout.tips.full_text": "Text simple recupera publicacions que has escrit, les marcades com a favorites, les impulsades o en les que has estat esmentat, així com usuaris, noms d'usuari i etiquetes.", "search_popout.tips.full_text": "Text simple recupera publicacions que has escrit, les marcades com a favorites, les impulsades o en les que has estat esmentat, així com usuaris, noms d'usuari i etiquetes.",
"search_popout.tips.hashtag": "etiqueta", "search_popout.tips.hashtag": "etiqueta",
"search_popout.tips.status": "estat", "search_popout.tips.status": "tut",
"search_popout.tips.text": "El text simple retorna coincidències amb els noms de visualització, els noms d'usuari i les etiquetes", "search_popout.tips.text": "El text simple retorna coincidències amb els noms de visualització, els noms d'usuari i les etiquetes",
"search_popout.tips.user": "usuari", "search_popout.tips.user": "usuari",
"search_results.accounts": "Gent", "search_results.accounts": "Gent",
"search_results.hashtags": "Etiquetes", "search_results.hashtags": "Etiquetes",
"search_results.statuses": "Toots", "search_results.statuses": "Tuts",
"search_results.statuses_fts_disabled": "La cerca de toots pel seu contingut no està habilitada en aquest servidor Mastodon.", "search_results.statuses_fts_disabled": "La cerca de tuts pel seu contingut no està habilitada en aquest servidor Mastodon.",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_account": "Obre l'interfície de moderació per a @{name}",
"status.admin_status": "Obre aquest toot a la interfície de moderació", "status.admin_status": "Obre aquest tut a la interfície de moderació",
"status.block": "Bloqueja @{name}", "status.block": "Bloqueja @{name}",
"status.bookmark": "Marcador",
"status.cancel_reblog_private": "Desfer l'impuls", "status.cancel_reblog_private": "Desfer l'impuls",
"status.cannot_reblog": "Aquesta publicació no pot ser impulsada", "status.cannot_reblog": "Aquesta publicació no pot ser impulsada",
"status.copy": "Copia l'enllaç al toot", "status.copy": "Copia l'enllaç al tut",
"status.delete": "Esborrar", "status.delete": "Esborrar",
"status.detailed_status": "Visualització detallada de la conversa", "status.detailed_status": "Visualització detallada de la conversa",
"status.direct": "Missatge directe @{name}", "status.direct": "Missatge directe @{name}",
@ -361,13 +373,14 @@
"status.mute_conversation": "Silenciar conversació", "status.mute_conversation": "Silenciar conversació",
"status.open": "Ampliar aquest estat", "status.open": "Ampliar aquest estat",
"status.pin": "Fixat en el perfil", "status.pin": "Fixat en el perfil",
"status.pinned": "Toot fixat", "status.pinned": "Tut fixat",
"status.read_more": "Llegir més", "status.read_more": "Llegir més",
"status.reblog": "Impuls", "status.reblog": "Impuls",
"status.reblog_private": "Impulsar a l'audiència original", "status.reblog_private": "Impulsar a l'audiència original",
"status.reblogged_by": "{name} ha impulsat", "status.reblogged_by": "{name} ha impulsat",
"status.reblogs.empty": "Encara ningú no ha impulsat aquest toot. Quan algú ho faci, apareixeran aquí.", "status.reblogs.empty": "Encara ningú no ha impulsat aquest tut. Quan algú ho faci, apareixeran aquí.",
"status.redraft": "Esborrar i reescriure", "status.redraft": "Esborrar i reescriure",
"status.remove_bookmark": "Suprimeix el marcador",
"status.reply": "Respondre", "status.reply": "Respondre",
"status.replyAll": "Respondre al tema", "status.replyAll": "Respondre al tema",
"status.report": "Informar sobre @{name}", "status.report": "Informar sobre @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.", "upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
"upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.", "upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.",
"upload_form.audio_description": "Descriviu per a les persones amb pèrdua auditiva",
"upload_form.description": "Descriure els problemes visuals", "upload_form.description": "Descriure els problemes visuals",
"upload_form.edit": "Edita", "upload_form.edit": "Edita",
"upload_form.undo": "Esborra", "upload_form.undo": "Esborra",
"upload_form.video_description": "Descriu per a les persones amb pèrdua auditiva o deficiència visual",
"upload_modal.analyzing_picture": "Analitzant imatge…", "upload_modal.analyzing_picture": "Analitzant imatge…",
"upload_modal.apply": "Aplica", "upload_modal.apply": "Aplica",
"upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul", "upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Previsualitza ({ratio})", "upload_modal.preview_label": "Previsualitza ({ratio})",
"upload_progress.label": "Pujant...", "upload_progress.label": "Pujant...",
"video.close": "Tancar el vídeo", "video.close": "Tancar el vídeo",
"video.download": "Descarrega larxiu",
"video.exit_fullscreen": "Sortir de pantalla completa", "video.exit_fullscreen": "Sortir de pantalla completa",
"video.expand": "Ampliar el vídeo", "video.expand": "Ampliar el vídeo",
"video.fullscreen": "Pantalla completa", "video.fullscreen": "Pantalla completa",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Aghjunghje o toglie da e liste", "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Gruppu",
"account.block": "Bluccà @{name}", "account.block": "Bluccà @{name}",
"account.block_domain": "Piattà tuttu da {domain}", "account.block_domain": "Piattà tuttu da {domain}",
"account.blocked": "Bluccatu", "account.blocked": "Bluccatu",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Ghjettu limitatu", "alert.rate_limited.title": "Ghjettu limitatu",
"alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.", "alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.",
"alert.unexpected.title": "Uups!", "alert.unexpected.title": "Uups!",
"announcement.announcement": "Annunziu",
"autosuggest_hashtag.per_week": "{count} per settimana", "autosuggest_hashtag.per_week": "{count} per settimana",
"boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta", "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta",
"bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.", "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "C'hè statu un prublemu caricandu st'elementu.", "bundle_modal_error.message": "C'hè statu un prublemu caricandu st'elementu.",
"bundle_modal_error.retry": "Pruvà torna", "bundle_modal_error.retry": "Pruvà torna",
"column.blocks": "Utilizatori bluccati", "column.blocks": "Utilizatori bluccati",
"column.bookmarks": "Segnalibri",
"column.community": "Linea pubblica lucale", "column.community": "Linea pubblica lucale",
"column.direct": "Missaghji diretti", "column.direct": "Missaghji diretti",
"column.directory": "Percorre i prufili", "column.directory": "Percorre i prufili",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Durata di u scandagliu", "compose_form.poll.duration": "Durata di u scandagliu",
"compose_form.poll.option_placeholder": "Scelta {number}", "compose_form.poll.option_placeholder": "Scelta {number}",
"compose_form.poll.remove_option": "Toglie sta scelta", "compose_form.poll.remove_option": "Toglie sta scelta",
"compose_form.poll.switch_to_multiple": "Cambià u scandagliu per accittà parechje scelte",
"compose_form.poll.switch_to_single": "Cambià u scandagliu per ùn accittà ch'una scelta",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Indicà u media cum'è sensibile", "compose_form.sensitive.hide": "Indicà u media cum'è sensibile",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Nisun statutu quì!", "empty_column.account_timeline": "Nisun statutu quì!",
"empty_column.account_unavailable": "Prufile micca dispunibule", "empty_column.account_unavailable": "Prufile micca dispunibule",
"empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.", "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.",
"empty_column.bookmarked_statuses": "Ùn avete manc'un segnalibru. Quandu aghjunghjerate unu, sarà mustratu quì.",
"empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!", "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!",
"empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.", "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.",
"empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.", "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "per apre a lista di l'utilizatori piattati", "keyboard_shortcuts.muted": "per apre a lista di l'utilizatori piattati",
"keyboard_shortcuts.my_profile": "per apre u vostru prufile", "keyboard_shortcuts.my_profile": "per apre u vostru prufile",
"keyboard_shortcuts.notifications": "per apre a culonna di nutificazione", "keyboard_shortcuts.notifications": "per apre a culonna di nutificazione",
"keyboard_shortcuts.open_media": "per apre i media",
"keyboard_shortcuts.pinned": "per apre a lista di statuti puntarulati", "keyboard_shortcuts.pinned": "per apre a lista di statuti puntarulati",
"keyboard_shortcuts.profile": "per apre u prufile di l'autore", "keyboard_shortcuts.profile": "per apre u prufile di l'autore",
"keyboard_shortcuts.reply": "risponde", "keyboard_shortcuts.reply": "risponde",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?", "mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?",
"navigation_bar.apps": "Applicazione per u telefuninu", "navigation_bar.apps": "Applicazione per u telefuninu",
"navigation_bar.blocks": "Utilizatori bluccati", "navigation_bar.blocks": "Utilizatori bluccati",
"navigation_bar.bookmarks": "Segnalibri",
"navigation_bar.community_timeline": "Linea pubblica lucale", "navigation_bar.community_timeline": "Linea pubblica lucale",
"navigation_bar.compose": "Scrive un novu statutu", "navigation_bar.compose": "Scrive un novu statutu",
"navigation_bar.direct": "Missaghji diretti", "navigation_bar.direct": "Missaghji diretti",
@ -273,7 +281,9 @@
"navigation_bar.security": "Sicurità", "navigation_bar.security": "Sicurità",
"notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti", "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
"notification.follow": "{name} v'hà seguitatu", "notification.follow": "{name} v'hà seguitatu",
"notification.follow_request": "{name} vole abbunassi à u vostru contu",
"notification.mention": "{name} v'hà mintuvatu", "notification.mention": "{name} v'hà mintuvatu",
"notification.own_poll": "U vostru scandagliu hè compiu",
"notification.poll": "Un scandagliu induve avete vutatu hè finitu", "notification.poll": "Un scandagliu induve avete vutatu hè finitu",
"notification.reblog": "{name} hà spartutu u vostru statutu", "notification.reblog": "{name} hà spartutu u vostru statutu",
"notifications.clear": "Purgà e nutificazione", "notifications.clear": "Purgà e nutificazione",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Barra di ricerca pronta", "notifications.column_settings.filter_bar.category": "Barra di ricerca pronta",
"notifications.column_settings.filter_bar.show": "Mustrà", "notifications.column_settings.filter_bar.show": "Mustrà",
"notifications.column_settings.follow": "Abbunati novi:", "notifications.column_settings.follow": "Abbunati novi:",
"notifications.column_settings.follow_request": "Nove dumande d'abbunamentu:",
"notifications.column_settings.mention": "Minzione:", "notifications.column_settings.mention": "Minzione:",
"notifications.column_settings.poll": "Risultati:", "notifications.column_settings.poll": "Risultati:",
"notifications.column_settings.push": "Nutificazione Push", "notifications.column_settings.push": "Nutificazione Push",
@ -344,6 +355,7 @@
"status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}",
"status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione",
"status.block": "Bluccà @{name}", "status.block": "Bluccà @{name}",
"status.bookmark": "Segnalibru",
"status.cancel_reblog_private": "Ùn sparte più", "status.cancel_reblog_private": "Ùn sparte più",
"status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu", "status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu",
"status.copy": "Cupià ligame indè u statutu", "status.copy": "Cupià ligame indè u statutu",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} hà spartutu", "status.reblogged_by": "{name} hà spartutu",
"status.reblogs.empty": "Per avà nisunu hà spartutu u statutu. Quandu qualch'unu u sparterà, u so contu sarà mustratu quì.", "status.reblogs.empty": "Per avà nisunu hà spartutu u statutu. Quandu qualch'unu u sparterà, u so contu sarà mustratu quì.",
"status.redraft": "Sguassà è riscrive", "status.redraft": "Sguassà è riscrive",
"status.remove_bookmark": "Toglie segnalibru",
"status.reply": "Risponde", "status.reply": "Risponde",
"status.replyAll": "Risponde à tutti", "status.replyAll": "Risponde à tutti",
"status.report": "Palisà @{name}", "status.report": "Palisà @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
"upload_form.audio_description": "Discrizzione per i ciochi",
"upload_form.description": "Discrive per i malvistosi", "upload_form.description": "Discrive per i malvistosi",
"upload_form.edit": "Mudificà", "upload_form.edit": "Mudificà",
"upload_form.undo": "Sguassà", "upload_form.undo": "Sguassà",
"upload_form.video_description": "Discrizzione per i ciochi o cechi",
"upload_modal.analyzing_picture": "Analisi di u ritrattu…", "upload_modal.analyzing_picture": "Analisi di u ritrattu…",
"upload_modal.apply": "Affettà", "upload_modal.apply": "Affettà",
"upload_modal.description_placeholder": "Chì tempi brevi ziu, quandu solfeghji", "upload_modal.description_placeholder": "Chì tempi brevi ziu, quandu solfeghji",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Vista ({ratio})", "upload_modal.preview_label": "Vista ({ratio})",
"upload_progress.label": "Caricamentu...", "upload_progress.label": "Caricamentu...",
"video.close": "Chjudà a video", "video.close": "Chjudà a video",
"video.download": "Scaricà fugliale",
"video.exit_fullscreen": "Caccià u pienu screnu", "video.exit_fullscreen": "Caccià u pienu screnu",
"video.expand": "Ingrandà a video", "video.expand": "Ingrandà a video",
"video.fullscreen": "Pienu screnu", "video.fullscreen": "Pienu screnu",

View File

@ -1,14 +1,15 @@
{ {
"account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů", "account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Skupina",
"account.block": "Zablokovat uživatele @{name}", "account.block": "Zablokovat uživatele @{name}",
"account.block_domain": "Skrýt vše z {domain}", "account.block_domain": "Skrýt vše ze serveru {domain}",
"account.blocked": "Blokován/a", "account.blocked": "Blokováno",
"account.cancel_follow_request": "Zrušit požadavek o sledování", "account.cancel_follow_request": "Zrušit žádost o sledování",
"account.direct": "Poslat přímou zprávu uživateli @{name}", "account.direct": "Poslat uživateli @{name} přímou zprávu",
"account.domain_blocked": "Doména skryta", "account.domain_blocked": "Doména skryta",
"account.edit_profile": "Upravit profil", "account.edit_profile": "Upravit profil",
"account.endorse": "Představit na profilu", "account.endorse": "Zvýraznit na profilu",
"account.follow": "Sledovat", "account.follow": "Sledovat",
"account.followers": "Sledující", "account.followers": "Sledující",
"account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
@ -21,42 +22,44 @@
"account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.",
"account.media": "Média", "account.media": "Média",
"account.mention": "Zmínit uživatele @{name}", "account.mention": "Zmínit uživatele @{name}",
"account.moved_to": "{name} se přesunul/a na:", "account.moved_to": "Uživatel {name} se přesunul na:",
"account.mute": "Skrýt uživatele @{name}", "account.mute": "Skrýt uživatele @{name}",
"account.mute_notifications": "Skrýt oznámení od uživatele @{name}", "account.mute_notifications": "Skrýt oznámení od uživatele @{name}",
"account.muted": "Skryt/a", "account.muted": "Uživatel skryt",
"account.never_active": "Nikdy", "account.never_active": "Nikdy",
"account.posts": "Tooty", "account.posts": "Tooty",
"account.posts_with_replies": "Tooty a odpovědi", "account.posts_with_replies": "Tooty a odpovědi",
"account.report": "Nahlásit uživatele @{name}", "account.report": "Nahlásit uživatele @{name}",
"account.requested": "Čekám na schválení. Kliknutím zrušíte požadavek o sledování", "account.requested": "Čeká na schválení. Kliknutím žádost o sledování zrušíte",
"account.share": "Sdílet profil uživatele @{name}", "account.share": "Sdílet profil uživatele @{name}",
"account.show_reblogs": "Zobrazit boosty od uživatele @{name}", "account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
"account.unblock": "Odblokovat uživatele @{name}", "account.unblock": "Odblokovat uživatele @{name}",
"account.unblock_domain": "Odkrýt doménu {domain}", "account.unblock_domain": "Odkrýt doménu {domain}",
"account.unendorse": "Nepředstavit na profilu", "account.unendorse": "Nezvýrazňovat na profilu",
"account.unfollow": "Přestat sledovat", "account.unfollow": "Přestat sledovat",
"account.unmute": "Odkrýt uživatele @{name}", "account.unmute": "Odkrýt uživatele @{name}",
"account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}", "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}",
"alert.rate_limited.message": "Prosím zkuste to znovu za {retry_time, time, medium}.", "alert.rate_limited.message": "Zkuste to prosím znovu za {retry_time, time, medium}.",
"alert.rate_limited.title": "Rychlost omezena", "alert.rate_limited.title": "Rychlost omezena",
"alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.message": "Objevila se neočekávaná chyba.",
"alert.unexpected.title": "Jejda!", "alert.unexpected.title": "Jejda!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} za týden", "autosuggest_hashtag.per_week": "{count} za týden",
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
"bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.", "bundle_column_error.body": "Při načítání této komponenty se něco pokazilo.",
"bundle_column_error.retry": "Zkuste to znovu", "bundle_column_error.retry": "Zkuste to znovu",
"bundle_column_error.title": "Chyba sítě", "bundle_column_error.title": "Chyba sítě",
"bundle_modal_error.close": "Zavřít", "bundle_modal_error.close": "Zavřít",
"bundle_modal_error.message": "Při načítání tohoto komponentu se něco pokazilo.", "bundle_modal_error.message": "Při načítání této komponenty se něco pokazilo.",
"bundle_modal_error.retry": "Zkusit znovu", "bundle_modal_error.retry": "Zkusit znovu",
"column.blocks": "Blokovaní uživatelé", "column.blocks": "Blokovaní uživatelé",
"column.bookmarks": "Záložky",
"column.community": "Místní časová osa", "column.community": "Místní časová osa",
"column.direct": "Přímé zprávy", "column.direct": "Přímé zprávy",
"column.directory": "Prozkoumat profily", "column.directory": "Prozkoumat profily",
"column.domain_blocks": "Skryté domény", "column.domain_blocks": "Skryté domény",
"column.favourites": "Oblíbené", "column.favourites": "Oblíbené",
"column.follow_requests": "Požadavky o sledování", "column.follow_requests": "Žádosti o sledování",
"column.home": "Domů", "column.home": "Domů",
"column.lists": "Seznamy", "column.lists": "Seznamy",
"column.mutes": "Skrytí uživatelé", "column.mutes": "Skrytí uživatelé",
@ -75,13 +78,15 @@
"compose_form.direct_message_warning": "Tento toot bude odeslán pouze zmíněným uživatelům.", "compose_form.direct_message_warning": "Tento toot bude odeslán pouze zmíněným uživatelům.",
"compose_form.direct_message_warning_learn_more": "Zjistit více", "compose_form.direct_message_warning_learn_more": "Zjistit více",
"compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.", "compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.",
"compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledující.", "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky učené pouze pro sledující.",
"compose_form.lock_disclaimer.lock": "uzamčen", "compose_form.lock_disclaimer.lock": "uzamčen",
"compose_form.placeholder": "Co se vám honí hlavou?", "compose_form.placeholder": "Co se vám honí hlavou?",
"compose_form.poll.add_option": "Přidat volbu", "compose_form.poll.add_option": "Přidat volbu",
"compose_form.poll.duration": "Délka ankety", "compose_form.poll.duration": "Doba trvání ankety",
"compose_form.poll.option_placeholder": "Volba {number}", "compose_form.poll.option_placeholder": "Volba {number}",
"compose_form.poll.remove_option": "Odstranit tuto volbu", "compose_form.poll.remove_option": "Odstranit tuto volbu",
"compose_form.poll.switch_to_multiple": "Povolit u ankety výběr více možností",
"compose_form.poll.switch_to_single": "Povolit u ankety výběr jediné možnosti",
"compose_form.publish": "Tootnout", "compose_form.publish": "Tootnout",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Označit média jako citlivá", "compose_form.sensitive.hide": "Označit média jako citlivá",
@ -93,30 +98,30 @@
"confirmation_modal.cancel": "Zrušit", "confirmation_modal.cancel": "Zrušit",
"confirmations.block.block_and_report": "Blokovat a nahlásit", "confirmations.block.block_and_report": "Blokovat a nahlásit",
"confirmations.block.confirm": "Blokovat", "confirmations.block.confirm": "Blokovat",
"confirmations.block.message": "Jste si jistý/á, že chcete zablokovat uživatele {name}?", "confirmations.block.message": "Opravdu chcete zablokovat uživatele {name}?",
"confirmations.delete.confirm": "Smazat", "confirmations.delete.confirm": "Smazat",
"confirmations.delete.message": "Jste si jistý/á, že chcete smazat tento toot?", "confirmations.delete.message": "Opravdu chcete smazat tento toot?",
"confirmations.delete_list.confirm": "Smazat", "confirmations.delete_list.confirm": "Smazat",
"confirmations.delete_list.message": "Jste si jistý/á, že chcete tento seznam navždy smazat?", "confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
"confirmations.domain_block.confirm": "Skrýt celou doménu", "confirmations.domain_block.confirm": "Skrýt celou doménu",
"confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.", "confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
"confirmations.logout.confirm": "Odhlásit", "confirmations.logout.confirm": "Odhlásit",
"confirmations.logout.message": "Jste si jistý/á, že se chcete odhlásit?", "confirmations.logout.message": "Opravdu se chcete odhlásit?",
"confirmations.mute.confirm": "Skrýt", "confirmations.mute.confirm": "Skrýt",
"confirmations.mute.explanation": "Tohle skryje jeho příspěvky a příspěvky, které ho zmiňují, ale uživatel pořád bude moci vidět vaše příspěvky a sledovat vás.", "confirmations.mute.explanation": "Tohle skryje uživatelovi příspěvky a příspěvky, které ho zmiňují, ale uživatel stále uvidí vaše příspěvky a může vás sledovat.",
"confirmations.mute.message": "Jste si jistý/á, že chcete skrýt uživatele {name}?", "confirmations.mute.message": "Opravdu chcete uživatele {name} skrýt?",
"confirmations.redraft.confirm": "Smazat a přepsat", "confirmations.redraft.confirm": "Smazat a přepsat",
"confirmations.redraft.message": "Jste si jistý/á, že chcete smazat a přepsat tento toot? Oblíbení a boosty budou ztraceny a odpovědi na původní příspěvek budou opuštěny.", "confirmations.redraft.message": "Jste si jistý/á, že chcete smazat a přepsat tento toot? Oblíbení a boosty budou ztraceny a odpovědi na původní příspěvek budou opuštěny.",
"confirmations.reply.confirm": "Odpovědět", "confirmations.reply.confirm": "Odpovědět",
"confirmations.reply.message": "Odpovězením nyní přepíšete zprávu, kterou aktuálně píšete. Jste si jistý/á, že chcete pokračovat?", "confirmations.reply.message": "Odpověď přepíše vaši rozepsanou zprávu. Opravdu chcete pokračovat?",
"confirmations.unfollow.confirm": "Přestat sledovat", "confirmations.unfollow.confirm": "Přestat sledovat",
"confirmations.unfollow.message": "jste si jistý/á, že chcete přestat sledovat uživatele {name}?", "confirmations.unfollow.message": "Opravdu chcete uživatele {name} přestat sledovat?",
"conversation.delete": "Smazat konverzaci", "conversation.delete": "Smazat konverzaci",
"conversation.mark_as_read": "Označit jako přečtenou", "conversation.mark_as_read": "Označit jako přečtenou",
"conversation.open": "Zobrazit konverzaci", "conversation.open": "Zobrazit konverzaci",
"conversation.with": "S {names}", "conversation.with": "S {names}",
"directory.federated": "Ze známého fedivesmíru", "directory.federated": "Ze známého fedivesmíru",
"directory.local": "Pouze z {domain}", "directory.local": "Pouze z domény {domain}",
"directory.new_arrivals": "Nově příchozí", "directory.new_arrivals": "Nově příchozí",
"directory.recently_active": "Nedávno aktivní", "directory.recently_active": "Nedávno aktivní",
"embed.instructions": "Pro přidání tootu na vaši webovou stránku zkopírujte níže uvedený kód.", "embed.instructions": "Pro přidání tootu na vaši webovou stránku zkopírujte níže uvedený kód.",
@ -127,33 +132,34 @@
"emoji_button.food": "Jídla a nápoje", "emoji_button.food": "Jídla a nápoje",
"emoji_button.label": "Vložit emoji", "emoji_button.label": "Vložit emoji",
"emoji_button.nature": "Příroda", "emoji_button.nature": "Příroda",
"emoji_button.not_found": "Žádná emoji!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "Žádné emoji! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Předměty", "emoji_button.objects": "Předměty",
"emoji_button.people": "Lidé", "emoji_button.people": "Lidé",
"emoji_button.recent": "Často používaná", "emoji_button.recent": "Často používané",
"emoji_button.search": "Hledat…", "emoji_button.search": "Hledat…",
"emoji_button.search_results": "Výsledky hledání", "emoji_button.search_results": "Výsledky hledání",
"emoji_button.symbols": "Symboly", "emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestování a místa", "emoji_button.travel": "Cestování a místa",
"empty_column.account_timeline": "Tady nejsou žádné tooty!", "empty_column.account_timeline": "Nejsou tu žádné tooty!",
"empty_column.account_unavailable": "Profil nedostupný", "empty_column.account_unavailable": "Profil nedostupný",
"empty_column.blocks": "Ještě jste nezablokoval/a žádného uživatele.", "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.",
"empty_column.bookmarked_statuses": "Ještě nemáte v záložkách žádné tooty. Pokud si do nich nějaký přidáte, zobrazí se zde.",
"empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!", "empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
"empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.", "empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.",
"empty_column.domain_blocks": "Ještě nejsou žádné skryté domény.", "empty_column.domain_blocks": "Ještě nemáte žádné skryté domény.",
"empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené tooty. Pokud si nějaký oblíbíte, zobrazí se zde.", "empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené tooty. Pokud si nějaký oblíbíte, zobrazí se zde.",
"empty_column.favourites": "Tento toot si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.", "empty_column.favourites": "Tento toot si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.",
"empty_column.follow_requests": "Ještě nemáte žádné požadavky o sledování. Pokud nějaký obdržíte, zobrazí se zde.", "empty_column.follow_requests": "Ještě nemáte žádné žádosti o sledování. Pokud nějakou obdržíte, zobrazí se zde.",
"empty_column.hashtag": "Pod tímto hashtagem ještě nic není.", "empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
"empty_column.home": "Vaše domovská časová osa je prázdná! Začněte navštívením {public} nebo použijte hledání a seznamte se s dalšími uživateli.", "empty_column.home": "Vaše domovská časová osa je prázdná! Začněte návštěvou {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
"empty_column.home.public_timeline": "veřejné časové osy", "empty_column.home.public_timeline": "veřejné časové osy",
"empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové tooty, objeví se zde.", "empty_column.list": "V tomto seznamu ještě nic není. Pokud nějaký člen z tohoto seznamu napíše nový toot, objeví se zde.",
"empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.", "empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.",
"empty_column.mutes": "Ještě jste neskryl/a žádné uživatele.", "empty_column.mutes": "Ještě jste neskryli žádného uživatele.",
"empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.", "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.",
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo", "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.", "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.",
"error.unexpected_crash.next_steps": "Zkuste obnovit stránku. Pokud to nepomůže, budete možná moci dále používat Mastodon pomocí jiného prohlížeče nebo nativní aplikace.", "error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.",
"errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
"errors.unexpected_crash.report_issue": "Nahlásit problém", "errors.unexpected_crash.report_issue": "Nahlásit problém",
"follow_request.authorize": "Autorizovat", "follow_request.authorize": "Autorizovat",
@ -163,13 +169,13 @@
"getting_started.documentation": "Dokumentace", "getting_started.documentation": "Dokumentace",
"getting_started.heading": "Začínáme", "getting_started.heading": "Začínáme",
"getting_started.invite": "Pozvat lidi", "getting_started.invite": "Pozvat lidi",
"getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.", "getting_started.open_source_notice": "Mastodon je otevřený software. Přispět do jeho vývoje nebo hlásit chyby můžete na GitHubu {github}.",
"getting_started.security": "Nastavení účtu", "getting_started.security": "Nastavení účtu",
"getting_started.terms": "Podmínky používání", "getting_started.terms": "Podmínky používání",
"hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.all": "a {additional}",
"hashtag.column_header.tag_mode.any": "nebo {additional}", "hashtag.column_header.tag_mode.any": "nebo {additional}",
"hashtag.column_header.tag_mode.none": "bez {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}",
"hashtag.column_settings.select.no_options_message": "Žádné návrhy nenalezeny", "hashtag.column_settings.select.no_options_message": "Nenalezeny žádné návrhy",
"hashtag.column_settings.select.placeholder": "Zadejte hashtagy…", "hashtag.column_settings.select.placeholder": "Zadejte hashtagy…",
"hashtag.column_settings.tag_mode.all": "Všechny z těchto", "hashtag.column_settings.tag_mode.all": "Všechny z těchto",
"hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto",
@ -178,14 +184,14 @@
"home.column_settings.basic": "Základní", "home.column_settings.basic": "Základní",
"home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_reblogs": "Zobrazit boosty",
"home.column_settings.show_replies": "Zobrazit odpovědi", "home.column_settings.show_replies": "Zobrazit odpovědi",
"intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}", "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}",
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}",
"introduction.federation.action": "Další", "introduction.federation.action": "Další",
"introduction.federation.federated.headline": "Federovaná", "introduction.federation.federated.headline": "Federovaná",
"introduction.federation.federated.text": "Veřejné příspěvky z jiných serverů ve fedivesmíru se zobrazí na federované časové ose.", "introduction.federation.federated.text": "Veřejné příspěvky z jiných serverů ve fedivesmíru se zobrazí na federované časové ose.",
"introduction.federation.home.headline": "Domů", "introduction.federation.home.headline": "Domů",
"introduction.federation.home.text": "Příspěvky od lidí, které sledujete, se objeví ve vašem domovském proudu. Můžete sledovat kohokoliv na jakémkoliv serveru!", "introduction.federation.home.text": "Příspěvky od lidí, které sledujete, se objeví ve vašem domovském kanálu. Můžete sledovat kohokoliv na jakémkoliv serveru!",
"introduction.federation.local.headline": "Místní", "introduction.federation.local.headline": "Místní",
"introduction.federation.local.text": "Veřejné příspěvky od lidí ze stejného serveru jako vy se zobrazí na místní časové ose.", "introduction.federation.local.text": "Veřejné příspěvky od lidí ze stejného serveru jako vy se zobrazí na místní časové ose.",
"introduction.interactions.action": "Dokončit tutoriál!", "introduction.interactions.action": "Dokončit tutoriál!",
@ -197,39 +203,40 @@
"introduction.interactions.reply.text": "Můžete odpovídat na tooty jiných lidí i vaše vlastní, což je propojí do konverzace.", "introduction.interactions.reply.text": "Můžete odpovídat na tooty jiných lidí i vaše vlastní, což je propojí do konverzace.",
"introduction.welcome.action": "Jdeme na to!", "introduction.welcome.action": "Jdeme na to!",
"introduction.welcome.headline": "První kroky", "introduction.welcome.headline": "První kroky",
"introduction.welcome.text": "Vítejte ve fedivesmíru! Za malou chvíli budete moci posílat zprávy a povídat si se svými přátely přes širokou škálu serverů. Tento server, {domain}, je však speciální—je na něm váš profil, proto si zapamatujte jeho jméno.", "introduction.welcome.text": "Vítejte ve fedivesmíru! Za malou chvíli budete moci posílat zprávy a povídat si se svými přáteli z mnoha serverů. Tento server {domain}, je však speciální — je na něm váš profil a proto si zapamatujte jeho jméno.",
"keyboard_shortcuts.back": "k návratu zpět", "keyboard_shortcuts.back": "návrat zpět",
"keyboard_shortcuts.blocked": "k otevření seznamu blokovaných uživatelů", "keyboard_shortcuts.blocked": "otevřít seznam blokovaných uživatelů",
"keyboard_shortcuts.boost": "k boostnutí", "keyboard_shortcuts.boost": "boost",
"keyboard_shortcuts.column": "k zaměření na toot v jednom ze sloupců", "keyboard_shortcuts.column": "zaměření na toot v jednom ze sloupců",
"keyboard_shortcuts.compose": "k zaměření na psací prostor", "keyboard_shortcuts.compose": "zaměření na oblast pro psaní",
"keyboard_shortcuts.description": "Popis", "keyboard_shortcuts.description": "Popis",
"keyboard_shortcuts.direct": "k otevření sloupce s přímými zprávami", "keyboard_shortcuts.direct": "otevření sloupce s přímými zprávami",
"keyboard_shortcuts.down": "k posunutí dolů v seznamu", "keyboard_shortcuts.down": "posunutí dolů v seznamu",
"keyboard_shortcuts.enter": "k otevření tootu", "keyboard_shortcuts.enter": "otevření tootu",
"keyboard_shortcuts.favourite": "k oblíbení", "keyboard_shortcuts.favourite": "oblíbení",
"keyboard_shortcuts.favourites": "k otevření seznamu oblíbených", "keyboard_shortcuts.favourites": "otevření seznamu oblíbených",
"keyboard_shortcuts.federated": "k otevření federované časové osy", "keyboard_shortcuts.federated": "otevření federované časové osy",
"keyboard_shortcuts.heading": "Klávesové zkratky", "keyboard_shortcuts.heading": "Klávesové zkratky",
"keyboard_shortcuts.home": "k otevření domovské časové osy", "keyboard_shortcuts.home": "otevření domovské časové osy",
"keyboard_shortcuts.hotkey": "Klávesová zkratka", "keyboard_shortcuts.hotkey": "Klávesová zkratka",
"keyboard_shortcuts.legend": "k zobrazení této legendy", "keyboard_shortcuts.legend": "zobrazení této legendy",
"keyboard_shortcuts.local": "k otevření místní časové osy", "keyboard_shortcuts.local": "otevření místní časové osy",
"keyboard_shortcuts.mention": "ke zmínění autora", "keyboard_shortcuts.mention": "zmínění autora",
"keyboard_shortcuts.muted": "k otevření seznamu skrytých uživatelů", "keyboard_shortcuts.muted": "otevření seznamu skrytých uživatelů",
"keyboard_shortcuts.my_profile": "k otevření vašeho profilu", "keyboard_shortcuts.my_profile": "otevření vašeho profilu",
"keyboard_shortcuts.notifications": "k otevření sloupce s oznámeními", "keyboard_shortcuts.notifications": "otevření sloupce s oznámeními",
"keyboard_shortcuts.pinned": "k otevření seznamu připnutých tootů", "keyboard_shortcuts.open_media": "otevření médií",
"keyboard_shortcuts.profile": "k otevření autorova profilu", "keyboard_shortcuts.pinned": "otevření seznamu připnutých tootů",
"keyboard_shortcuts.reply": "k odpovězení", "keyboard_shortcuts.profile": "otevření autorova profilu",
"keyboard_shortcuts.requests": "k otevření seznamu požadavků o sledování", "keyboard_shortcuts.reply": "odpovědět",
"keyboard_shortcuts.search": "k zaměření na hledání", "keyboard_shortcuts.requests": "otevření seznamu požadavků o sledování",
"keyboard_shortcuts.start": "k otevření sloupce „začínáme“", "keyboard_shortcuts.search": "zaměření na hledání",
"keyboard_shortcuts.toggle_hidden": "k zobrazení/skrytí textu za varováním o obsahu", "keyboard_shortcuts.start": "otevření sloupce „začínáme“",
"keyboard_shortcuts.toggle_sensitivity": "k zobrazení/skrytí médií", "keyboard_shortcuts.toggle_hidden": "zobrazení/skrytí textu za varováním o obsahu",
"keyboard_shortcuts.toot": "k napsání úplně nového tootu", "keyboard_shortcuts.toggle_sensitivity": "zobrazení/skrytí médií",
"keyboard_shortcuts.unfocus": "ke zrušení zaměření na psací prostor/hledání", "keyboard_shortcuts.toot": "napsání úplně nového tootu",
"keyboard_shortcuts.up": "k posunutí nahoru v seznamu", "keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání",
"keyboard_shortcuts.up": "posunutí nahoru v seznamu",
"lightbox.close": "Zavřít", "lightbox.close": "Zavřít",
"lightbox.next": "Další", "lightbox.next": "Další",
"lightbox.previous": "Předchozí", "lightbox.previous": "Předchozí",
@ -244,13 +251,14 @@
"lists.search": "Hledejte mezi lidmi, které sledujete", "lists.search": "Hledejte mezi lidmi, které sledujete",
"lists.subheading": "Vaše seznamy", "lists.subheading": "Vaše seznamy",
"load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
"loading_indicator.label": "Načítám…", "loading_indicator.label": "Načítá…",
"media_gallery.toggle_visible": "Přepínat viditelnost", "media_gallery.toggle_visible": "Přepnout viditelnost",
"missing_indicator.label": "Nenalezeno", "missing_indicator.label": "Nenalezeno",
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít", "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
"mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?", "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",
"navigation_bar.apps": "Mobilní aplikace", "navigation_bar.apps": "Mobilní aplikace",
"navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.blocks": "Blokovaní uživatelé",
"navigation_bar.bookmarks": "Záložky",
"navigation_bar.community_timeline": "Místní časová osa", "navigation_bar.community_timeline": "Místní časová osa",
"navigation_bar.compose": "Vytvořit nový toot", "navigation_bar.compose": "Vytvořit nový toot",
"navigation_bar.direct": "Přímé zprávy", "navigation_bar.direct": "Přímé zprávy",
@ -259,7 +267,7 @@
"navigation_bar.edit_profile": "Upravit profil", "navigation_bar.edit_profile": "Upravit profil",
"navigation_bar.favourites": "Oblíbené", "navigation_bar.favourites": "Oblíbené",
"navigation_bar.filters": "Skrytá slova", "navigation_bar.filters": "Skrytá slova",
"navigation_bar.follow_requests": "Požadavky o sledování", "navigation_bar.follow_requests": "Žádosti o sledování",
"navigation_bar.follows_and_followers": "Sledovaní a sledující", "navigation_bar.follows_and_followers": "Sledovaní a sledující",
"navigation_bar.info": "O tomto serveru", "navigation_bar.info": "O tomto serveru",
"navigation_bar.keyboard_shortcuts": "Klávesové zkratky", "navigation_bar.keyboard_shortcuts": "Klávesové zkratky",
@ -271,19 +279,22 @@
"navigation_bar.preferences": "Předvolby", "navigation_bar.preferences": "Předvolby",
"navigation_bar.public_timeline": "Federovaná časová osa", "navigation_bar.public_timeline": "Federovaná časová osa",
"navigation_bar.security": "Zabezpečení", "navigation_bar.security": "Zabezpečení",
"notification.favourite": "{name} si oblíbil/a váš toot", "notification.favourite": "Uživatel {name} si oblíbil váš toot",
"notification.follow": "{name} vás začal/a sledovat", "notification.follow": "Uživatel {name} vás začal sledovat",
"notification.mention": "{name} vás zmínil/a", "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
"notification.poll": "Anketa, ve které jste hlasoval/a, skončila", "notification.mention": "Uživatel {name} vás zmínil",
"notification.reblog": "{name} boostnul/a váš toot", "notification.own_poll": "Vaše anketa skončila",
"notifications.clear": "Vymazat oznámení", "notification.poll": "Anketa, ve které jste hlasovali, skončila",
"notifications.clear_confirmation": "Jste si jistý/á, že chcete trvale vymazat všechna vaše oznámení?", "notification.reblog": "Uživatel {name} boostnul váš toot",
"notifications.column_settings.alert": "Desktopová oznámení", "notifications.clear": "Smazat oznámení",
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
"notifications.column_settings.alert": "Oznámení na počítači",
"notifications.column_settings.favourite": "Oblíbení:", "notifications.column_settings.favourite": "Oblíbení:",
"notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie", "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
"notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
"notifications.column_settings.filter_bar.show": "Zobrazit", "notifications.column_settings.filter_bar.show": "Zobrazit",
"notifications.column_settings.follow": "Noví sledující:", "notifications.column_settings.follow": "Noví sledující:",
"notifications.column_settings.follow_request": "Nové žádosti o sledování:",
"notifications.column_settings.mention": "Zmínky:", "notifications.column_settings.mention": "Zmínky:",
"notifications.column_settings.poll": "Výsledky anket:", "notifications.column_settings.poll": "Výsledky anket:",
"notifications.column_settings.push": "Push oznámení", "notifications.column_settings.push": "Push oznámení",
@ -297,12 +308,12 @@
"notifications.filter.mentions": "Zmínky", "notifications.filter.mentions": "Zmínky",
"notifications.filter.polls": "Výsledky anket", "notifications.filter.polls": "Výsledky anket",
"notifications.group": "{count} oznámení", "notifications.group": "{count} oznámení",
"poll.closed": "Uzavřena", "poll.closed": "Uzavřeno",
"poll.refresh": "Obnovit", "poll.refresh": "Obnovit",
"poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}",
"poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasu} other {# hlasů}}", "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasů} other {# hlasů}}",
"poll.vote": "Hlasovat", "poll.vote": "Hlasovat",
"poll.voted": "Pro tuto odpověď jste hlasoval/a", "poll.voted": "Pro tuto odpověď jste hlasovali",
"poll_button.add_poll": "Přidat anketu", "poll_button.add_poll": "Přidat anketu",
"poll_button.remove_poll": "Odstranit anketu", "poll_button.remove_poll": "Odstranit anketu",
"privacy.change": "Změnit soukromí tootu", "privacy.change": "Změnit soukromí tootu",
@ -312,11 +323,11 @@
"privacy.private.short": "Pouze pro sledující", "privacy.private.short": "Pouze pro sledující",
"privacy.public.long": "Odeslat na veřejné časové osy", "privacy.public.long": "Odeslat na veřejné časové osy",
"privacy.public.short": "Veřejný", "privacy.public.short": "Veřejný",
"privacy.unlisted.long": "Neodeslat na veřejné časové osy", "privacy.unlisted.long": "Neodesílat na veřejné časové osy",
"privacy.unlisted.short": "Neuvedený", "privacy.unlisted.short": "Neuvedený",
"refresh": "Obnovit", "refresh": "Obnovit",
"regeneration_indicator.label": "Načítám…", "regeneration_indicator.label": "Načítá…",
"regeneration_indicator.sublabel": "Váš domovský proud se připravuje!", "regeneration_indicator.sublabel": "Váš domovský kanál se připravuje!",
"relative_time.days": "{number} d", "relative_time.days": "{number} d",
"relative_time.hours": "{number} h", "relative_time.hours": "{number} h",
"relative_time.just_now": "teď", "relative_time.just_now": "teď",
@ -325,13 +336,13 @@
"reply_indicator.cancel": "Zrušit", "reply_indicator.cancel": "Zrušit",
"report.forward": "Přeposlat na {target}", "report.forward": "Přeposlat na {target}",
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?", "report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
"report.hint": "Nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:", "report.hint": "Hlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
"report.placeholder": "Dodatečné komentáře", "report.placeholder": "Dodatečné komentáře",
"report.submit": "Odeslat", "report.submit": "Odeslat",
"report.target": "Nahlášení uživatele {target}", "report.target": "Nahlášení uživatele {target}",
"search.placeholder": "Hledat", "search.placeholder": "Hledat",
"search_popout.search_format": "Pokročilé hledání", "search_popout.search_format": "Pokročilé hledání",
"search_popout.tips.full_text": "Jednoduchý text navrátí tooty, které jste napsal/a, oblíbil/a si, boostnul/a, nebo v nich byl/a zmíněn/a, a také odpovídající přezdívky, zobrazovaná jména a hashtagy.", "search_popout.tips.full_text": "Jednoduchý text navrátí tooty, které jste napsali, oblíbili si, boostnuli, nebo vás v nich někdo zmínil, a také odpovídající přezdívky, zobrazovaná jména a hashtagy.",
"search_popout.tips.hashtag": "hashtag", "search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "toot", "search_popout.tips.status": "toot",
"search_popout.tips.text": "Jednoduchý text navrátí odpovídající zobrazovaná jména, přezdívky a hashtagy", "search_popout.tips.text": "Jednoduchý text navrátí odpovídající zobrazovaná jména, přezdívky a hashtagy",
@ -340,16 +351,17 @@
"search_results.hashtags": "Hashtagy", "search_results.hashtags": "Hashtagy",
"search_results.statuses": "Tooty", "search_results.statuses": "Tooty",
"search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.", "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.",
"search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledků} other {výsledků}}",
"status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}", "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}",
"status.admin_status": "Otevřít tento toot v moderátorském rozhraní", "status.admin_status": "Otevřít tento toot v moderátorském rozhraní",
"status.block": "Zablokovat uživatele @{name}", "status.block": "Zablokovat uživatele @{name}",
"status.bookmark": "Přidat do záložek",
"status.cancel_reblog_private": "Zrušit boost", "status.cancel_reblog_private": "Zrušit boost",
"status.cannot_reblog": "Tento příspěvek nemůže být boostnutý", "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
"status.copy": "Kopírovat odkaz k tootu", "status.copy": "Kopírovat odkaz k tootu",
"status.delete": "Smazat", "status.delete": "Smazat",
"status.detailed_status": "Detailní zobrazení konverzace", "status.detailed_status": "Podrobné zobrazení konverzace",
"status.direct": "Poslat přímou zprávu uživateli @{name}", "status.direct": "Poslat uživateli @{name} přímou zprávu",
"status.embed": "Vložit na web", "status.embed": "Vložit na web",
"status.favourite": "Oblíbit", "status.favourite": "Oblíbit",
"status.filtered": "Filtrováno", "status.filtered": "Filtrováno",
@ -365,9 +377,10 @@
"status.read_more": "Číst více", "status.read_more": "Číst více",
"status.reblog": "Boostnout", "status.reblog": "Boostnout",
"status.reblog_private": "Boostnout původnímu publiku", "status.reblog_private": "Boostnout původnímu publiku",
"status.reblogged_by": "{name} boostnul/a", "status.reblogged_by": "Uživatel {name} boostnul",
"status.reblogs.empty": "Tento toot ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.", "status.reblogs.empty": "Tento toot ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.",
"status.redraft": "Smazat a přepsat", "status.redraft": "Smazat a přepsat",
"status.remove_bookmark": "Odstranit ze záložek",
"status.reply": "Odpovědět", "status.reply": "Odpovědět",
"status.replyAll": "Odpovědět na vlákno", "status.replyAll": "Odpovědět na vlákno",
"status.report": "Nahlásit uživatele @{name}", "status.report": "Nahlásit uživatele @{name}",
@ -382,37 +395,40 @@
"status.unmute_conversation": "Odkrýt konverzaci", "status.unmute_conversation": "Odkrýt konverzaci",
"status.unpin": "Odepnout z profilu", "status.unpin": "Odepnout z profilu",
"suggestions.dismiss": "Odmítnout návrh", "suggestions.dismiss": "Odmítnout návrh",
"suggestions.header": "Mohli by vás zajímat…", "suggestions.header": "Mohlo by vás zajímat…",
"tabs_bar.federated_timeline": "Federovaná", "tabs_bar.federated_timeline": "Federovaná",
"tabs_bar.home": "Domů", "tabs_bar.home": "Domů",
"tabs_bar.local_timeline": "Místní", "tabs_bar.local_timeline": "Místní",
"tabs_bar.notifications": "Oznámení", "tabs_bar.notifications": "Oznámení",
"tabs_bar.search": "Hledat", "tabs_bar.search": "Hledat",
"time_remaining.days": "{number, plural, one {Zbývá # den} few {Zbývají # dny} many {Zbývá # dne} other {Zbývá # dní}}", "time_remaining.days": "{number, plural, one {Zbývá # den} few {Zbývají # dny} many {Zbývá # dní} other {Zbývá # dní}}",
"time_remaining.hours": "{number, plural, one {Zbývá # hodina} few {Zbývají # hodiny} many {Zbývá # hodiny} other {Zbývá # hodin}}", "time_remaining.hours": "{number, plural, one {Zbývá # hodina} few {Zbývají # hodiny} many {Zbývá # hodin} other {Zbývá # hodin}}",
"time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minuty} other {Zbývá # minut}}", "time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minut} other {Zbývá # minut}}",
"time_remaining.moments": "Zbývá několik sekund", "time_remaining.moments": "Zbývá několik sekund",
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}", "time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekund} other {Zbývá # sekund}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří", "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří",
"trends.trending_now": "Aktuální trendy", "trends.trending_now": "Aktuální trendy",
"ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.", "ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.",
"upload_area.title": "Přetažením nahrajete", "upload_area.title": "Nahrajte přetažením",
"upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Přidat média ({formats})",
"upload_error.limit": "Byl překročen limit nahraných souborů.", "upload_error.limit": "Byl překročen limit nahraných souborů.",
"upload_error.poll": "Nahrávání souborů není povoleno u anket.", "upload_error.poll": "U anket není nahrávání souborů povoleno.",
"upload_form.audio_description": "Popis pro sluchově postižené",
"upload_form.description": "Popis pro zrakově postižené", "upload_form.description": "Popis pro zrakově postižené",
"upload_form.edit": "Upravit", "upload_form.edit": "Upravit",
"upload_form.undo": "Smazat", "upload_form.undo": "Smazat",
"upload_form.video_description": "Popis pro sluchově či zrakově postižené",
"upload_modal.analyzing_picture": "Analyzuji obrázek…", "upload_modal.analyzing_picture": "Analyzuji obrázek…",
"upload_modal.apply": "Použít", "upload_modal.apply": "Použít",
"upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy", "upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy",
"upload_modal.detect_text": "Detekovat text z obrázku", "upload_modal.detect_text": "Detekovat text z obrázku",
"upload_modal.edit_media": "Upravit média", "upload_modal.edit_media": "Upravit média",
"upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte bod soustředění, který bude vždy zobrazen na všech náhledech.", "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.",
"upload_modal.preview_label": "Náhled ({ratio})", "upload_modal.preview_label": "Náhled ({ratio})",
"upload_progress.label": "Nahrávám…", "upload_progress.label": "Nahrává…",
"video.close": "Zavřít video", "video.close": "Zavřít video",
"video.exit_fullscreen": "Ukončit celou obrazovku", "video.download": "Stáhnout soubor",
"video.exit_fullscreen": "Ukončit režim celé obrazovky",
"video.expand": "Otevřít video", "video.expand": "Otevřít video",
"video.fullscreen": "Celá obrazovka", "video.fullscreen": "Celá obrazovka",
"video.hide": "Skrýt video", "video.hide": "Skrýt video",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau", "account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Grŵp",
"account.block": "Blocio @{name}", "account.block": "Blocio @{name}",
"account.block_domain": "Cuddio popeth rhag {domain}", "account.block_domain": "Cuddio popeth rhag {domain}",
"account.blocked": "Blociwyd", "account.blocked": "Blociwyd",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.rate_limited.title": "Cyfradd gyfyngedig",
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Wps!", "alert.unexpected.title": "Wps!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} yr wythnos", "autosuggest_hashtag.per_week": "{count} yr wythnos",
"boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa",
"bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_modal_error.retry": "Ceiswich eto", "bundle_modal_error.retry": "Ceiswich eto",
"column.blocks": "Defnyddwyr a flociwyd", "column.blocks": "Defnyddwyr a flociwyd",
"column.bookmarks": "Tudalnodau",
"column.community": "Ffrwd lleol", "column.community": "Ffrwd lleol",
"column.direct": "Negeseuon preifat", "column.direct": "Negeseuon preifat",
"column.directory": "Pori proffiliau", "column.directory": "Pori proffiliau",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Cyfnod pleidlais", "compose_form.poll.duration": "Cyfnod pleidlais",
"compose_form.poll.option_placeholder": "Dewisiad {number}", "compose_form.poll.option_placeholder": "Dewisiad {number}",
"compose_form.poll.remove_option": "Tynnu'r dewisiad", "compose_form.poll.remove_option": "Tynnu'r dewisiad",
"compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis",
"compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis",
"compose_form.publish": "Tŵt", "compose_form.publish": "Tŵt",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marcio cyfryngau fel eu bod yn sensitif", "compose_form.sensitive.hide": "Marcio cyfryngau fel eu bod yn sensitif",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Dim tŵtiau fama!", "empty_column.account_timeline": "Dim tŵtiau fama!",
"empty_column.account_unavailable": "Proffil ddim ar gael", "empty_column.account_unavailable": "Proffil ddim ar gael",
"empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
"empty_column.bookmarked_statuses": "Nid oes gennych unrhyw dwtiau tudalnodiedig eto. Pan y byddwch yn tudalnodi un, mi fydd yn ymddangos yma.",
"empty_column.community": "Mae'r ffrwd lleol yn wag. Ysgrifenwch rhywbeth yn gyhoeddus i gael dechrau arni!", "empty_column.community": "Mae'r ffrwd lleol yn wag. Ysgrifenwch rhywbeth yn gyhoeddus i gael dechrau arni!",
"empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.", "empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.",
"empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.", "empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "i agor rhestr defnyddwyr a dawelwyd", "keyboard_shortcuts.muted": "i agor rhestr defnyddwyr a dawelwyd",
"keyboard_shortcuts.my_profile": "i agor eich proffil", "keyboard_shortcuts.my_profile": "i agor eich proffil",
"keyboard_shortcuts.notifications": "i agor colofn hysbysiadau", "keyboard_shortcuts.notifications": "i agor colofn hysbysiadau",
"keyboard_shortcuts.open_media": "i agor cyfryngau",
"keyboard_shortcuts.pinned": "i agor rhestr tŵtiau wedi'i pinio", "keyboard_shortcuts.pinned": "i agor rhestr tŵtiau wedi'i pinio",
"keyboard_shortcuts.profile": "i agor proffil yr awdur", "keyboard_shortcuts.profile": "i agor proffil yr awdur",
"keyboard_shortcuts.reply": "i ateb", "keyboard_shortcuts.reply": "i ateb",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?", "mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?",
"navigation_bar.apps": "Apiau symudol", "navigation_bar.apps": "Apiau symudol",
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
"navigation_bar.bookmarks": "Tudalnodau",
"navigation_bar.community_timeline": "Ffrwd leol", "navigation_bar.community_timeline": "Ffrwd leol",
"navigation_bar.compose": "Cyfansoddi tŵt newydd", "navigation_bar.compose": "Cyfansoddi tŵt newydd",
"navigation_bar.direct": "Negeseuon preifat", "navigation_bar.direct": "Negeseuon preifat",
@ -273,7 +281,9 @@
"navigation_bar.security": "Diogelwch", "navigation_bar.security": "Diogelwch",
"notification.favourite": "hoffodd {name} eich tŵt", "notification.favourite": "hoffodd {name} eich tŵt",
"notification.follow": "dilynodd {name} chi", "notification.follow": "dilynodd {name} chi",
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
"notification.mention": "Soniodd {name} amdanoch chi", "notification.mention": "Soniodd {name} amdanoch chi",
"notification.own_poll": "Mae eich pôl wedi diweddu",
"notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben", "notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben",
"notification.reblog": "Hysbysebodd {name} eich tŵt", "notification.reblog": "Hysbysebodd {name} eich tŵt",
"notifications.clear": "Clirio hysbysiadau", "notifications.clear": "Clirio hysbysiadau",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Bar hidlo", "notifications.column_settings.filter_bar.category": "Bar hidlo",
"notifications.column_settings.filter_bar.show": "Dangos", "notifications.column_settings.filter_bar.show": "Dangos",
"notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:",
"notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.mention": "Crybwylliadau:",
"notifications.column_settings.poll": "Canlyniadau pleidlais:", "notifications.column_settings.poll": "Canlyniadau pleidlais:",
"notifications.column_settings.push": "Hysbysiadau gwthiadwy", "notifications.column_settings.push": "Hysbysiadau gwthiadwy",
@ -344,6 +355,7 @@
"status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}", "status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}",
"status.admin_status": "Agor y tŵt yn y rhyngwyneb goruwchwylio", "status.admin_status": "Agor y tŵt yn y rhyngwyneb goruwchwylio",
"status.block": "Blocio @{name}", "status.block": "Blocio @{name}",
"status.bookmark": "Tudalnodi",
"status.cancel_reblog_private": "Dadfŵstio", "status.cancel_reblog_private": "Dadfŵstio",
"status.cannot_reblog": "Ni ellir sbarduno'r tŵt hwn", "status.cannot_reblog": "Ni ellir sbarduno'r tŵt hwn",
"status.copy": "Copïo cysylltiad i'r tŵt", "status.copy": "Copïo cysylltiad i'r tŵt",
@ -368,6 +380,7 @@
"status.reblogged_by": "Bŵstio {name}", "status.reblogged_by": "Bŵstio {name}",
"status.reblogs.empty": "Does neb wedi bŵstio'r tŵt yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.", "status.reblogs.empty": "Does neb wedi bŵstio'r tŵt yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.",
"status.redraft": "Dileu & ailddrafftio", "status.redraft": "Dileu & ailddrafftio",
"status.remove_bookmark": "Tynnu'r tudalnod",
"status.reply": "Ateb", "status.reply": "Ateb",
"status.replyAll": "Ateb i edefyn", "status.replyAll": "Ateb i edefyn",
"status.report": "Adrodd @{name}", "status.report": "Adrodd @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
"upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.", "upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.",
"upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw",
"upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
"upload_form.edit": "Golygu", "upload_form.edit": "Golygu",
"upload_form.undo": "Dileu", "upload_form.undo": "Dileu",
"upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg",
"upload_modal.analyzing_picture": "Dadansoddi llun…", "upload_modal.analyzing_picture": "Dadansoddi llun…",
"upload_modal.apply": "Gweithredu", "upload_modal.apply": "Gweithredu",
"upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau", "upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Rhagolwg ({ratio})", "upload_modal.preview_label": "Rhagolwg ({ratio})",
"upload_progress.label": "Uwchlwytho...", "upload_progress.label": "Uwchlwytho...",
"video.close": "Cau fideo", "video.close": "Cau fideo",
"video.download": "Lawrlwytho ffeil",
"video.exit_fullscreen": "Gadael sgrîn llawn", "video.exit_fullscreen": "Gadael sgrîn llawn",
"video.expand": "Ymestyn fideo", "video.expand": "Ymestyn fideo",
"video.fullscreen": "Sgrîn llawn", "video.fullscreen": "Sgrîn llawn",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Tilføj eller fjern fra lister", "account.add_or_remove_from_list": "Tilføj eller fjern fra lister",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Group",
"account.block": "Bloker @{name}", "account.block": "Bloker @{name}",
"account.block_domain": "Skjul alt fra {domain}", "account.block_domain": "Skjul alt fra {domain}",
"account.blocked": "Blokeret", "account.blocked": "Blokeret",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Gradsbegrænset", "alert.rate_limited.title": "Gradsbegrænset",
"alert.unexpected.message": "Der opstod en uventet fejl.", "alert.unexpected.message": "Der opstod en uventet fejl.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} per uge", "autosuggest_hashtag.per_week": "{count} per uge",
"boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
"bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.", "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Noget gik galt under indlæsningen af dette komponent.", "bundle_modal_error.message": "Noget gik galt under indlæsningen af dette komponent.",
"bundle_modal_error.retry": "Prøv igen", "bundle_modal_error.retry": "Prøv igen",
"column.blocks": "Blokerede brugere", "column.blocks": "Blokerede brugere",
"column.bookmarks": "Bogmærker",
"column.community": "Lokal tidslinje", "column.community": "Lokal tidslinje",
"column.direct": "Direkte beskeder", "column.direct": "Direkte beskeder",
"column.directory": "Gennemse profiler", "column.directory": "Gennemse profiler",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.duration": "Afstemningens varighed",
"compose_form.poll.option_placeholder": "Valgmulighed {number}", "compose_form.poll.option_placeholder": "Valgmulighed {number}",
"compose_form.poll.remove_option": "Fjern denne valgmulighed", "compose_form.poll.remove_option": "Fjern denne valgmulighed",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Trut", "compose_form.publish": "Trut",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Markér medie som følsomt", "compose_form.sensitive.hide": "Markér medie som følsomt",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Ingen bidrag her!", "empty_column.account_timeline": "Ingen bidrag her!",
"empty_column.account_unavailable": "Profil utilgængelig", "empty_column.account_unavailable": "Profil utilgængelig",
"empty_column.blocks": "Du har ikke blokeret nogen endnu.", "empty_column.blocks": "Du har ikke blokeret nogen endnu.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!",
"empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.", "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.",
"empty_column.domain_blocks": "Der er endnu ikke nogle skjulte domæner.", "empty_column.domain_blocks": "Der er endnu ikke nogle skjulte domæner.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere", "keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere",
"keyboard_shortcuts.my_profile": "for at åbne din profil", "keyboard_shortcuts.my_profile": "for at åbne din profil",
"keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen", "keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut", "keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut",
"keyboard_shortcuts.profile": "til profil af åben forfatter", "keyboard_shortcuts.profile": "til profil af åben forfatter",
"keyboard_shortcuts.reply": "for at svare", "keyboard_shortcuts.reply": "for at svare",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?", "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",
"navigation_bar.apps": "Mobil apps", "navigation_bar.apps": "Mobil apps",
"navigation_bar.blocks": "Blokerede brugere", "navigation_bar.blocks": "Blokerede brugere",
"navigation_bar.bookmarks": "Bogmærker",
"navigation_bar.community_timeline": "Lokal tidslinje", "navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.compose": "Skriv nyt trut", "navigation_bar.compose": "Skriv nyt trut",
"navigation_bar.direct": "Direkte beskeder", "navigation_bar.direct": "Direkte beskeder",
@ -273,7 +281,9 @@
"navigation_bar.security": "Sikkerhed", "navigation_bar.security": "Sikkerhed",
"notification.favourite": "{name} favoriserede din status", "notification.favourite": "{name} favoriserede din status",
"notification.follow": "{name} fulgte dig", "notification.follow": "{name} fulgte dig",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} nævnte dig", "notification.mention": "{name} nævnte dig",
"notification.own_poll": "Din afstemning er afsluttet",
"notification.poll": "En afstemning, du stemte i, er slut", "notification.poll": "En afstemning, du stemte i, er slut",
"notification.reblog": "{name} boostede din status", "notification.reblog": "{name} boostede din status",
"notifications.clear": "Ryd notifikationer", "notifications.clear": "Ryd notifikationer",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Hurtigfilter", "notifications.column_settings.filter_bar.category": "Hurtigfilter",
"notifications.column_settings.filter_bar.show": "Vis", "notifications.column_settings.filter_bar.show": "Vis",
"notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow": "Nye følgere:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.mention": "Statusser der nævner dig:", "notifications.column_settings.mention": "Statusser der nævner dig:",
"notifications.column_settings.poll": "Afstemningsresultat:", "notifications.column_settings.poll": "Afstemningsresultat:",
"notifications.column_settings.push": "Pushnotifikationer", "notifications.column_settings.push": "Pushnotifikationer",
@ -344,6 +355,7 @@
"status.admin_account": "Åben modereringsvisning for @{name}", "status.admin_account": "Åben modereringsvisning for @{name}",
"status.admin_status": "Åben denne status i modereringsvisningen", "status.admin_status": "Åben denne status i modereringsvisningen",
"status.block": "Bloker @{name}", "status.block": "Bloker @{name}",
"status.bookmark": "Bogmærke",
"status.cancel_reblog_private": "Fjern boost", "status.cancel_reblog_private": "Fjern boost",
"status.cannot_reblog": "Denne post kan ikke boostes", "status.cannot_reblog": "Denne post kan ikke boostes",
"status.copy": "Kopiér link til status", "status.copy": "Kopiér link til status",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} boostede", "status.reblogged_by": "{name} boostede",
"status.reblogs.empty": "Der er endnu ingen der har boostet dette trut. Når der er nogen der gør, vil det blive vist her.", "status.reblogs.empty": "Der er endnu ingen der har boostet dette trut. Når der er nogen der gør, vil det blive vist her.",
"status.redraft": "Slet og omskriv", "status.redraft": "Slet og omskriv",
"status.remove_bookmark": "Fjern bogmærke",
"status.reply": "Besvar", "status.reply": "Besvar",
"status.replyAll": "Besvar samtale", "status.replyAll": "Besvar samtale",
"status.report": "Anmeld @{name}", "status.report": "Anmeld @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Uploadgrænse overskredet.", "upload_error.limit": "Uploadgrænse overskredet.",
"upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.", "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Beskriv for svagtseende", "upload_form.description": "Beskriv for svagtseende",
"upload_form.edit": "Redigér", "upload_form.edit": "Redigér",
"upload_form.undo": "Slet", "upload_form.undo": "Slet",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyserer billede…", "upload_modal.analyzing_picture": "Analyserer billede…",
"upload_modal.apply": "Anvend", "upload_modal.apply": "Anvend",
"upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_modal.preview_label": "Forhåndsvisning ({ratio})",
"upload_progress.label": "Uploader...", "upload_progress.label": "Uploader...",
"video.close": "Luk video", "video.close": "Luk video",
"video.download": "Hent fil",
"video.exit_fullscreen": "Forlad fuldskærm", "video.exit_fullscreen": "Forlad fuldskærm",
"video.expand": "Udvid video", "video.expand": "Udvid video",
"video.fullscreen": "Fuldskærm", "video.fullscreen": "Fuldskærm",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen", "account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Gruppe",
"account.block": "@{name} blockieren", "account.block": "@{name} blockieren",
"account.block_domain": "Alles von {domain} verstecken", "account.block_domain": "Alles von {domain} verstecken",
"account.blocked": "Blockiert", "account.blocked": "Blockiert",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Anfragelimit überschritten", "alert.rate_limited.title": "Anfragelimit überschritten",
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
"alert.unexpected.title": "Hoppla!", "alert.unexpected.title": "Hoppla!",
"announcement.announcement": "Ankündigung",
"autosuggest_hashtag.per_week": "{count} pro Woche", "autosuggest_hashtag.per_week": "{count} pro Woche",
"boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen",
"bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Etwas ist beim Laden schiefgelaufen.", "bundle_modal_error.message": "Etwas ist beim Laden schiefgelaufen.",
"bundle_modal_error.retry": "Erneut versuchen", "bundle_modal_error.retry": "Erneut versuchen",
"column.blocks": "Blockierte Profile", "column.blocks": "Blockierte Profile",
"column.bookmarks": "Lesezeichen",
"column.community": "Lokale Zeitleiste", "column.community": "Lokale Zeitleiste",
"column.direct": "Direktnachrichten", "column.direct": "Direktnachrichten",
"column.directory": "Profile durchsuchen", "column.directory": "Profile durchsuchen",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Umfragedauer", "compose_form.poll.duration": "Umfragedauer",
"compose_form.poll.option_placeholder": "Wahl {number}", "compose_form.poll.option_placeholder": "Wahl {number}",
"compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.remove_option": "Wahl entfernen",
"compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben",
"compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu ermöglichen",
"compose_form.publish": "Tröt", "compose_form.publish": "Tröt",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Medien als heikel markieren", "compose_form.sensitive.hide": "Medien als heikel markieren",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Keine Beiträge!", "empty_column.account_timeline": "Keine Beiträge!",
"empty_column.account_unavailable": "Konto nicht verfügbar", "empty_column.account_unavailable": "Konto nicht verfügbar",
"empty_column.blocks": "Du hast keine Profile blockiert.", "empty_column.blocks": "Du hast keine Profile blockiert.",
"empty_column.bookmarked_statuses": "Du hast bis jetzt keine Beiträge als Lesezeichen gespeichert. Wenn du einen Beitrag als Lesezeichen speicherst wird er hier erscheinen.",
"empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!", "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!",
"empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.", "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
"empty_column.domain_blocks": "Es ist noch keine versteckten Domains.", "empty_column.domain_blocks": "Es ist noch keine versteckten Domains.",
@ -164,7 +170,7 @@
"getting_started.heading": "Erste Schritte", "getting_started.heading": "Erste Schritte",
"getting_started.invite": "Leute einladen", "getting_started.invite": "Leute einladen",
"getting_started.open_source_notice": "Mastodon ist quelloffene Software. Du kannst auf GitHub unter {github} dazu beitragen oder Probleme melden.", "getting_started.open_source_notice": "Mastodon ist quelloffene Software. Du kannst auf GitHub unter {github} dazu beitragen oder Probleme melden.",
"getting_started.security": "Sicherheit", "getting_started.security": "Konto & Sicherheit",
"getting_started.terms": "Nutzungsbedingungen", "getting_started.terms": "Nutzungsbedingungen",
"hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.all": "und {additional}",
"hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen", "keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen",
"keyboard_shortcuts.my_profile": "Dein Profil öffnen", "keyboard_shortcuts.my_profile": "Dein Profil öffnen",
"keyboard_shortcuts.notifications": "Benachrichtigungsspalte öffnen", "keyboard_shortcuts.notifications": "Benachrichtigungsspalte öffnen",
"keyboard_shortcuts.open_media": "um Medien zu öffnen",
"keyboard_shortcuts.pinned": "Liste angehefteter Beiträge öffnen", "keyboard_shortcuts.pinned": "Liste angehefteter Beiträge öffnen",
"keyboard_shortcuts.profile": "Profil des Autors öffnen", "keyboard_shortcuts.profile": "Profil des Autors öffnen",
"keyboard_shortcuts.reply": "antworten", "keyboard_shortcuts.reply": "antworten",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?", "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
"navigation_bar.apps": "Mobile Apps", "navigation_bar.apps": "Mobile Apps",
"navigation_bar.blocks": "Blockierte Profile", "navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.bookmarks": "Lesezeichen",
"navigation_bar.community_timeline": "Lokale Zeitleiste", "navigation_bar.community_timeline": "Lokale Zeitleiste",
"navigation_bar.compose": "Neuen Beitrag verfassen", "navigation_bar.compose": "Neuen Beitrag verfassen",
"navigation_bar.direct": "Direktnachrichten", "navigation_bar.direct": "Direktnachrichten",
@ -273,7 +281,9 @@
"navigation_bar.security": "Sicherheit", "navigation_bar.security": "Sicherheit",
"notification.favourite": "{name} hat deinen Beitrag favorisiert", "notification.favourite": "{name} hat deinen Beitrag favorisiert",
"notification.follow": "{name} folgt dir", "notification.follow": "{name} folgt dir",
"notification.follow_request": "{name} möchte dir folgen",
"notification.mention": "{name} hat dich erwähnt", "notification.mention": "{name} hat dich erwähnt",
"notification.own_poll": "Deine Umfrage ist beendet",
"notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei", "notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei",
"notification.reblog": "{name} hat deinen Beitrag geteilt", "notification.reblog": "{name} hat deinen Beitrag geteilt",
"notifications.clear": "Mitteilungen löschen", "notifications.clear": "Mitteilungen löschen",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Schnellfilterleiste", "notifications.column_settings.filter_bar.category": "Schnellfilterleiste",
"notifications.column_settings.filter_bar.show": "Anzeigen", "notifications.column_settings.filter_bar.show": "Anzeigen",
"notifications.column_settings.follow": "Neue Folgende:", "notifications.column_settings.follow": "Neue Folgende:",
"notifications.column_settings.follow_request": "Neue Folge-Anfragen:",
"notifications.column_settings.mention": "Erwähnungen:", "notifications.column_settings.mention": "Erwähnungen:",
"notifications.column_settings.poll": "Ergebnisse von Umfragen:", "notifications.column_settings.poll": "Ergebnisse von Umfragen:",
"notifications.column_settings.push": "Push-Benachrichtigungen", "notifications.column_settings.push": "Push-Benachrichtigungen",
@ -344,6 +355,7 @@
"status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_account": "Öffne Moderationsoberfläche für @{name}",
"status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche",
"status.block": "Blockiere @{name}", "status.block": "Blockiere @{name}",
"status.bookmark": "Lesezeichen",
"status.cancel_reblog_private": "Nicht mehr teilen", "status.cancel_reblog_private": "Nicht mehr teilen",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden", "status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.copy": "Kopiere Link zum Beitrag", "status.copy": "Kopiere Link zum Beitrag",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} teilte", "status.reblogged_by": "{name} teilte",
"status.reblogs.empty": "Diesen Beitrag hat noch niemand geteilt. Sobald es jemand tut, wird diese Person hier angezeigt.", "status.reblogs.empty": "Diesen Beitrag hat noch niemand geteilt. Sobald es jemand tut, wird diese Person hier angezeigt.",
"status.redraft": "Löschen und neu erstellen", "status.redraft": "Löschen und neu erstellen",
"status.remove_bookmark": "Lesezeichen entfernen",
"status.reply": "Antworten", "status.reply": "Antworten",
"status.replyAll": "Allen antworten", "status.replyAll": "Allen antworten",
"status.report": "@{name} melden", "status.report": "@{name} melden",
@ -400,18 +413,21 @@
"upload_button.label": "Mediendatei hinzufügen ({formats})", "upload_button.label": "Mediendatei hinzufügen ({formats})",
"upload_error.limit": "Dateiupload-Limit erreicht.", "upload_error.limit": "Dateiupload-Limit erreicht.",
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.", "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
"upload_form.audio_description": "Beschreibe die Audiodatei für Menschen mit Hörschädigungen",
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben", "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
"upload_form.edit": "Bearbeiten", "upload_form.edit": "Bearbeiten",
"upload_form.undo": "Löschen", "upload_form.undo": "Löschen",
"upload_form.video_description": "Beschreibe das Video für Menschen mit einer Hör- oder Sehbehinderung",
"upload_modal.analyzing_picture": "Analysiere Bild…", "upload_modal.analyzing_picture": "Analysiere Bild…",
"upload_modal.apply": "Übernehmen", "upload_modal.apply": "Übernehmen",
"upload_modal.description_placeholder": "Die heiße Zypernsonne quälte Max und Victoria ja böse auf dem Weg bis zur Küste.", "upload_modal.description_placeholder": "Die heiße Zypernsonne quälte Max und Victoria ja böse auf dem Weg bis zur Küste",
"upload_modal.detect_text": "Text aus Bild erkennen", "upload_modal.detect_text": "Text aus Bild erkennen",
"upload_modal.edit_media": "Medien bearbeiten", "upload_modal.edit_media": "Medien bearbeiten",
"upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.", "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.",
"upload_modal.preview_label": "Vorschau ({ratio})", "upload_modal.preview_label": "Vorschau ({ratio})",
"upload_progress.label": "Wird hochgeladen …", "upload_progress.label": "Wird hochgeladen …",
"video.close": "Video schließen", "video.close": "Video schließen",
"video.download": "Datei herunterladen",
"video.exit_fullscreen": "Vollbild verlassen", "video.exit_fullscreen": "Vollbild verlassen",
"video.expand": "Video vergrößern", "video.expand": "Video vergrößern",
"video.fullscreen": "Vollbild", "video.fullscreen": "Vollbild",

View File

@ -293,6 +293,10 @@
}, },
{ {
"descriptors": [ "descriptors": [
{
"defaultMessage": "today",
"id": "relative_time.today"
},
{ {
"defaultMessage": "now", "defaultMessage": "now",
"id": "relative_time.just_now" "id": "relative_time.just_now"
@ -776,6 +780,10 @@
"defaultMessage": "Bot", "defaultMessage": "Bot",
"id": "account.badges.bot" "id": "account.badges.bot"
}, },
{
"defaultMessage": "Group",
"id": "account.badges.group"
},
{ {
"defaultMessage": "Toots", "defaultMessage": "Toots",
"id": "account.posts" "id": "account.posts"
@ -1035,6 +1043,14 @@
"defaultMessage": "Poll duration", "defaultMessage": "Poll duration",
"id": "compose_form.poll.duration" "id": "compose_form.poll.duration"
}, },
{
"defaultMessage": "Change poll to allow multiple choices",
"id": "compose_form.poll.switch_to_multiple"
},
{
"defaultMessage": "Change poll to allow for a single choice",
"id": "compose_form.poll.switch_to_single"
},
{ {
"defaultMessage": "{number, plural, one {# minute} other {# minutes}}", "defaultMessage": "{number, plural, one {# minute} other {# minutes}}",
"id": "intervals.full.minutes" "id": "intervals.full.minutes"
@ -1395,6 +1411,10 @@
"defaultMessage": "Unmute @{name}", "defaultMessage": "Unmute @{name}",
"id": "account.unmute" "id": "account.unmute"
}, },
{
"defaultMessage": "Unfollow",
"id": "confirmations.unfollow.confirm"
},
{ {
"defaultMessage": "Are you sure you want to unfollow {name}?", "defaultMessage": "Are you sure you want to unfollow {name}?",
"id": "confirmations.unfollow.message" "id": "confirmations.unfollow.message"
@ -1538,6 +1558,27 @@
], ],
"path": "app/javascript/mastodon/features/following/index.json" "path": "app/javascript/mastodon/features/following/index.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Close",
"id": "lightbox.close"
},
{
"defaultMessage": "Previous",
"id": "lightbox.previous"
},
{
"defaultMessage": "Next",
"id": "lightbox.next"
},
{
"defaultMessage": "Announcement",
"id": "announcement.announcement"
}
],
"path": "app/javascript/mastodon/features/getting_started/components/announcements.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@ -1705,6 +1746,14 @@
"defaultMessage": "Home", "defaultMessage": "Home",
"id": "column.home" "id": "column.home"
}, },
{
"defaultMessage": "Show announcements",
"id": "home.show_announcements"
},
{
"defaultMessage": "Hide announcements",
"id": "home.hide_announcements"
},
{ {
"defaultMessage": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "defaultMessage": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"id": "empty_column.home" "id": "empty_column.home"
@ -2282,6 +2331,10 @@
"defaultMessage": "Bookmark", "defaultMessage": "Bookmark",
"id": "status.bookmark" "id": "status.bookmark"
}, },
{
"defaultMessage": "More",
"id": "status.more"
},
{ {
"defaultMessage": "Mute @{name}", "defaultMessage": "Mute @{name}",
"id": "status.mute" "id": "status.mute"

View File

@ -1,8 +1,9 @@
{ {
"account.add_or_remove_from_list": "Προσθήκη ή Αφαίρεση από λίστες", "account.add_or_remove_from_list": "Προσθήκη ή Αφαίρεση από λίστες",
"account.badges.bot": "Μποτ", "account.badges.bot": "Μποτ",
"account.badges.group": "Ομάδα",
"account.block": "Αποκλεισμός @{name}", "account.block": "Αποκλεισμός @{name}",
"account.block_domain": "Απόκρυψε τα πάντα από το {domain}", "account.block_domain": "Απόκρυψη όλων από {domain}",
"account.blocked": "Αποκλεισμένος/η", "account.blocked": "Αποκλεισμένος/η",
"account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης",
"account.direct": "Προσωπικό μήνυμα προς @{name}", "account.direct": "Προσωπικό μήνυμα προς @{name}",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Περιορισμός συχνότητας", "alert.rate_limited.title": "Περιορισμός συχνότητας",
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
"alert.unexpected.title": "Εεπ!", "alert.unexpected.title": "Εεπ!",
"announcement.announcement": "Ανακοίνωση",
"autosuggest_hashtag.per_week": "{count} ανα εβδομάδα", "autosuggest_hashtag.per_week": "{count} ανα εβδομάδα",
"boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά",
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.", "bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.",
"bundle_modal_error.retry": "Δοκίμασε ξανά", "bundle_modal_error.retry": "Δοκίμασε ξανά",
"column.blocks": "Αποκλεισμένοι χρήστες", "column.blocks": "Αποκλεισμένοι χρήστες",
"column.bookmarks": "Σελιδοδείκτες",
"column.community": "Τοπική ροή", "column.community": "Τοπική ροή",
"column.direct": "Προσωπικά μηνύματα", "column.direct": "Προσωπικά μηνύματα",
"column.directory": "Δες προφίλ", "column.directory": "Δες προφίλ",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Διάρκεια δημοσκόπησης", "compose_form.poll.duration": "Διάρκεια δημοσκόπησης",
"compose_form.poll.option_placeholder": "Επιλογή {number}", "compose_form.poll.option_placeholder": "Επιλογή {number}",
"compose_form.poll.remove_option": "Αφαίρεση επιλογής", "compose_form.poll.remove_option": "Αφαίρεση επιλογής",
"compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές",
"compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή",
"compose_form.publish": "Τουτ", "compose_form.publish": "Τουτ",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Σημείωσε τα πολυμέσα ως ευαίσθητα", "compose_form.sensitive.hide": "Σημείωσε τα πολυμέσα ως ευαίσθητα",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Δεν έχει τουτ εδώ!", "empty_column.account_timeline": "Δεν έχει τουτ εδώ!",
"empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ",
"empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.",
"empty_column.bookmarked_statuses": "Δεν έχεις κανένα αποθηκευμένο τουτ ακόμα. Μόλις αποθηκεύσεις κάποιο, θα εμφανιστεί εδώ.",
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!", "empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!",
"empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.", "empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.",
"empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.", "empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "άνοιγμα λίστας αποσιωπημενων χρηστών", "keyboard_shortcuts.muted": "άνοιγμα λίστας αποσιωπημενων χρηστών",
"keyboard_shortcuts.my_profile": "άνοιγμα του προφίλ σου", "keyboard_shortcuts.my_profile": "άνοιγμα του προφίλ σου",
"keyboard_shortcuts.notifications": "άνοιγμα στήλης ειδοποιήσεων", "keyboard_shortcuts.notifications": "άνοιγμα στήλης ειδοποιήσεων",
"keyboard_shortcuts.open_media": "εμφάνιση πολυμέσου",
"keyboard_shortcuts.pinned": "άνοιγμα λίστας καρφιτσωμένων τουτ", "keyboard_shortcuts.pinned": "άνοιγμα λίστας καρφιτσωμένων τουτ",
"keyboard_shortcuts.profile": "άνοιγμα προφίλ συγγραφέα", "keyboard_shortcuts.profile": "άνοιγμα προφίλ συγγραφέα",
"keyboard_shortcuts.reply": "απάντηση", "keyboard_shortcuts.reply": "απάντηση",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;", "mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;",
"navigation_bar.apps": "Εφαρμογές φορητών συσκευών", "navigation_bar.apps": "Εφαρμογές φορητών συσκευών",
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
"navigation_bar.bookmarks": "Σελιδοδείκτες",
"navigation_bar.community_timeline": "Τοπική ροή", "navigation_bar.community_timeline": "Τοπική ροή",
"navigation_bar.compose": "Γράψε νέο τουτ", "navigation_bar.compose": "Γράψε νέο τουτ",
"navigation_bar.direct": "Προσωπικά μηνύματα", "navigation_bar.direct": "Προσωπικά μηνύματα",
@ -273,7 +281,9 @@
"navigation_bar.security": "Ασφάλεια", "navigation_bar.security": "Ασφάλεια",
"notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου", "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
"notification.follow": "Ο/Η {name} σε ακολούθησε", "notification.follow": "Ο/Η {name} σε ακολούθησε",
"notification.follow_request": "Ο/H {name} ζήτησε να σε παρακολουθεί",
"notification.mention": "Ο/Η {name} σε ανέφερε", "notification.mention": "Ο/Η {name} σε ανέφερε",
"notification.own_poll": "Η ψηφοφορία σου έληξε",
"notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες", "notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες",
"notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου", "notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου",
"notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear": "Καθαρισμός ειδοποιήσεων",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
"notifications.column_settings.filter_bar.show": "Εμφάνιση", "notifications.column_settings.filter_bar.show": "Εμφάνιση",
"notifications.column_settings.follow": "Νέοι ακόλουθοι:", "notifications.column_settings.follow": "Νέοι ακόλουθοι:",
"notifications.column_settings.follow_request": "Νέο αίτημα παρακολούθησης:",
"notifications.column_settings.mention": "Αναφορές:", "notifications.column_settings.mention": "Αναφορές:",
"notifications.column_settings.poll": "Αποτελέσματα ψηφοφορίας:", "notifications.column_settings.poll": "Αποτελέσματα ψηφοφορίας:",
"notifications.column_settings.push": "Άμεσες ειδοποιήσεις", "notifications.column_settings.push": "Άμεσες ειδοποιήσεις",
@ -344,6 +355,7 @@
"status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
"status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
"status.block": "Αποκλεισμός @{name}", "status.block": "Αποκλεισμός @{name}",
"status.bookmark": "Σελιδοδείκτης",
"status.cancel_reblog_private": "Ακύρωσε την προώθηση", "status.cancel_reblog_private": "Ακύρωσε την προώθηση",
"status.cannot_reblog": "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί", "status.cannot_reblog": "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί",
"status.copy": "Αντιγραφή συνδέσμου της δημοσίευσης", "status.copy": "Αντιγραφή συνδέσμου της δημοσίευσης",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} προώθησε", "status.reblogged_by": "{name} προώθησε",
"status.reblogs.empty": "Κανείς δεν προώθησε αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.", "status.reblogs.empty": "Κανείς δεν προώθησε αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.",
"status.redraft": "Σβήσε & ξαναγράψε", "status.redraft": "Σβήσε & ξαναγράψε",
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
"status.reply": "Απάντησε", "status.reply": "Απάντησε",
"status.replyAll": "Απάντησε στην συζήτηση", "status.replyAll": "Απάντησε στην συζήτηση",
"status.report": "Κατάγγειλε @{name}", "status.report": "Κατάγγειλε @{name}",
@ -393,16 +406,18 @@
"time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}", "time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}",
"time_remaining.moments": "Απομένουν στιγμές", "time_remaining.moments": "Απομένουν στιγμές",
"time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}", "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε", "trends.count_by_accounts": "{count} {rawCount, plural, one {άτομο μιλάει} other {άτομα μιλάνε}}",
"trends.trending_now": "Δημοφιλή τώρα", "trends.trending_now": "Δημοφιλή τώρα",
"ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
"upload_area.title": "Drag & drop για να ανεβάσεις", "upload_area.title": "Drag & drop για να ανεβάσεις",
"upload_button.label": "Πρόσθεσε πολυμέσα ({formats})", "upload_button.label": "Πρόσθεσε πολυμέσα ({formats})",
"upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
"upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης", "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
"upload_form.edit": "Ενημέρωση", "upload_form.edit": "Ενημέρωση",
"upload_form.undo": "Διαγραφή", "upload_form.undo": "Διαγραφή",
"upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης",
"upload_modal.analyzing_picture": "Ανάλυση εικόνας…", "upload_modal.analyzing_picture": "Ανάλυση εικόνας…",
"upload_modal.apply": "Εφαρμογή", "upload_modal.apply": "Εφαρμογή",
"upload_modal.description_placeholder": "Λύκος μαύρος και ισχνός του πατέρα του καημός", "upload_modal.description_placeholder": "Λύκος μαύρος και ισχνός του πατέρα του καημός",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Προεπισκόπηση ({ratio})", "upload_modal.preview_label": "Προεπισκόπηση ({ratio})",
"upload_progress.label": "Ανεβαίνει...", "upload_progress.label": "Ανεβαίνει...",
"video.close": "Κλείσε το βίντεο", "video.close": "Κλείσε το βίντεο",
"video.download": "Λήψη αρχείου",
"video.exit_fullscreen": "Έξοδος από πλήρη οθόνη", "video.exit_fullscreen": "Έξοδος από πλήρη οθόνη",
"video.expand": "Επέκταση βίντεο", "video.expand": "Επέκταση βίντεο",
"video.fullscreen": "Πλήρης οθόνη", "video.fullscreen": "Πλήρης οθόνη",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Add or Remove from lists", "account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Group",
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Rate limited", "alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} per week", "autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "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.body": "Something went wrong while loading this component.",
@ -83,6 +85,8 @@
"compose_form.poll.duration": "Poll duration", "compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}", "compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive", "compose_form.sensitive.hide": "Mark media as sensitive",
@ -180,6 +184,8 @@
"home.column_settings.basic": "Basic", "home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_reblogs": "Show boosts",
"home.column_settings.show_replies": "Show replies", "home.column_settings.show_replies": "Show replies",
"home.hide_announcements": "Hide announcements",
"home.show_announcements": "Show announcements",
"intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@ -329,6 +335,7 @@
"relative_time.just_now": "now", "relative_time.just_now": "now",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"relative_time.today": "today",
"reply_indicator.cancel": "Cancel", "reply_indicator.cancel": "Cancel",
"report.forward": "Forward to {target}", "report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj",
"account.badges.bot": "Roboto", "account.badges.bot": "Roboto",
"account.badges.group": "Grupo",
"account.block": "Bloki @{name}", "account.block": "Bloki @{name}",
"account.block_domain": "Kaŝi ĉion de {domain}", "account.block_domain": "Kaŝi ĉion de {domain}",
"account.blocked": "Blokita", "account.blocked": "Blokita",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Mesaĝkvante limigita", "alert.rate_limited.title": "Mesaĝkvante limigita",
"alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.message": "Neatendita eraro okazis.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} semajne", "autosuggest_hashtag.per_week": "{count} semajne",
"boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
"bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
"bundle_modal_error.retry": "Bonvolu reprovi", "bundle_modal_error.retry": "Bonvolu reprovi",
"column.blocks": "Blokitaj uzantoj", "column.blocks": "Blokitaj uzantoj",
"column.bookmarks": "Legosignoj",
"column.community": "Loka tempolinio", "column.community": "Loka tempolinio",
"column.direct": "Rektaj mesaĝoj", "column.direct": "Rektaj mesaĝoj",
"column.directory": "Trarigardi profilojn", "column.directory": "Trarigardi profilojn",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Balotenketa daŭro", "compose_form.poll.duration": "Balotenketa daŭro",
"compose_form.poll.option_placeholder": "Elekteblo {number}", "compose_form.poll.option_placeholder": "Elekteblo {number}",
"compose_form.poll.remove_option": "Forigi ĉi tiu elekteblon", "compose_form.poll.remove_option": "Forigi ĉi tiu elekteblon",
"compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn",
"compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton",
"compose_form.publish": "Hup", "compose_form.publish": "Hup",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj", "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!",
"empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.account_unavailable": "Profilo ne disponebla",
"empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.",
"empty_column.bookmarked_statuses": "Vi ankoraŭ ne aldonis mesaĝon al viaj legosignoj. Kiam vi aldonos iun, tiu aperos ĉi tie.",
"empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!", "empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!",
"empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.",
"empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
@ -154,7 +160,7 @@
"empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion",
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo",
"errors.unexpected_crash.report_issue": "Raporti problemon", "errors.unexpected_crash.report_issue": "Raporti problemon",
"follow_request.authorize": "Rajtigi", "follow_request.authorize": "Rajtigi",
"follow_request.reject": "Rifuzi", "follow_request.reject": "Rifuzi",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "por malfermi la liston de silentigitaj uzantoj", "keyboard_shortcuts.muted": "por malfermi la liston de silentigitaj uzantoj",
"keyboard_shortcuts.my_profile": "por malfermi vian profilon", "keyboard_shortcuts.my_profile": "por malfermi vian profilon",
"keyboard_shortcuts.notifications": "por malfermi la kolumnon de sciigoj", "keyboard_shortcuts.notifications": "por malfermi la kolumnon de sciigoj",
"keyboard_shortcuts.open_media": "por malfermi aŭdovidaĵon",
"keyboard_shortcuts.pinned": "por malfermi la liston de alpinglitaj mesaĝoj", "keyboard_shortcuts.pinned": "por malfermi la liston de alpinglitaj mesaĝoj",
"keyboard_shortcuts.profile": "por malfermi la profilon de la aŭtoro", "keyboard_shortcuts.profile": "por malfermi la profilon de la aŭtoro",
"keyboard_shortcuts.reply": "por respondi", "keyboard_shortcuts.reply": "por respondi",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?", "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?",
"navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.apps": "Telefonaj aplikaĵoj",
"navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.blocks": "Blokitaj uzantoj",
"navigation_bar.bookmarks": "Legosignoj",
"navigation_bar.community_timeline": "Loka tempolinio", "navigation_bar.community_timeline": "Loka tempolinio",
"navigation_bar.compose": "Skribi novan mesaĝon", "navigation_bar.compose": "Skribi novan mesaĝon",
"navigation_bar.direct": "Rektaj mesaĝoj", "navigation_bar.direct": "Rektaj mesaĝoj",
@ -273,7 +281,9 @@
"navigation_bar.security": "Sekureco", "navigation_bar.security": "Sekureco",
"notification.favourite": "{name} stelumis vian mesaĝon", "notification.favourite": "{name} stelumis vian mesaĝon",
"notification.follow": "{name} eksekvis vin", "notification.follow": "{name} eksekvis vin",
"notification.follow_request": "{name} petis sekvi vin",
"notification.mention": "{name} menciis vin", "notification.mention": "{name} menciis vin",
"notification.own_poll": "Via balotenketo finiĝitis",
"notification.poll": "Partoprenita balotenketo finiĝis", "notification.poll": "Partoprenita balotenketo finiĝis",
"notification.reblog": "{name} diskonigis vian mesaĝon", "notification.reblog": "{name} diskonigis vian mesaĝon",
"notifications.clear": "Forviŝi sciigojn", "notifications.clear": "Forviŝi sciigojn",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Rapida filtra breto", "notifications.column_settings.filter_bar.category": "Rapida filtra breto",
"notifications.column_settings.filter_bar.show": "Montri", "notifications.column_settings.filter_bar.show": "Montri",
"notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow": "Novaj sekvantoj:",
"notifications.column_settings.follow_request": "Novaj petoj de sekvado:",
"notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.mention": "Mencioj:",
"notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:",
"notifications.column_settings.push": "Puŝsciigoj", "notifications.column_settings.push": "Puŝsciigoj",
@ -344,6 +355,7 @@
"status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}",
"status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",
"status.block": "Bloki @{name}", "status.block": "Bloki @{name}",
"status.bookmark": "Aldoni al la legosignoj",
"status.cancel_reblog_private": "Ne plu diskonigi", "status.cancel_reblog_private": "Ne plu diskonigi",
"status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas", "status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas",
"status.copy": "Kopii la ligilon al la mesaĝo", "status.copy": "Kopii la ligilon al la mesaĝo",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} diskonigis", "status.reblogged_by": "{name} diskonigis",
"status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.", "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.",
"status.redraft": "Forigi kaj reskribi", "status.redraft": "Forigi kaj reskribi",
"status.remove_bookmark": "Forigi legosignon",
"status.reply": "Respondi", "status.reply": "Respondi",
"status.replyAll": "Respondi al la fadeno", "status.replyAll": "Respondi al la fadeno",
"status.report": "Signali @{name}", "status.report": "Signali @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limo de dosiera alŝutado transpasita.", "upload_error.limit": "Limo de dosiera alŝutado transpasita.",
"upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.", "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.",
"upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi",
"upload_form.description": "Priskribi por misvidantaj homoj", "upload_form.description": "Priskribi por misvidantaj homoj",
"upload_form.edit": "Redakti", "upload_form.edit": "Redakti",
"upload_form.undo": "Forigi", "upload_form.undo": "Forigi",
"upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi",
"upload_modal.analyzing_picture": "Bilda analizado…", "upload_modal.analyzing_picture": "Bilda analizado…",
"upload_modal.apply": "Apliki", "upload_modal.apply": "Apliki",
"upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Antaŭvido ({ratio})", "upload_modal.preview_label": "Antaŭvido ({ratio})",
"upload_progress.label": "Alŝutado…", "upload_progress.label": "Alŝutado…",
"video.close": "Fermi la videon", "video.close": "Fermi la videon",
"video.download": "Elŝuti dosieron",
"video.exit_fullscreen": "Eksigi plenekrana", "video.exit_fullscreen": "Eksigi plenekrana",
"video.expand": "Grandigi la videon", "video.expand": "Grandigi la videon",
"video.fullscreen": "Igi plenekrana", "video.fullscreen": "Igi plenekrana",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Agregar o quitar de las listas", "account.add_or_remove_from_list": "Agregar o quitar de las listas",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Grupo",
"account.block": "Bloquear a @{name}", "account.block": "Bloquear a @{name}",
"account.block_domain": "Ocultar todo de {domain}", "account.block_domain": "Ocultar todo de {domain}",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Tarifa limitada", "alert.rate_limited.title": "Tarifa limitada",
"alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.message": "Ocurrió un error.",
"alert.unexpected.title": "¡Epa!", "alert.unexpected.title": "¡Epa!",
"announcement.announcement": "Anuncio",
"autosuggest_hashtag.per_week": "{count} por semana", "autosuggest_hashtag.per_week": "{count} por semana",
"boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.body": "Algo salió mal al cargar este componente.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Algo salió mal al cargar este componente.", "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
"bundle_modal_error.retry": "Intentá de nuevo", "bundle_modal_error.retry": "Intentá de nuevo",
"column.blocks": "Usuarios bloqueados", "column.blocks": "Usuarios bloqueados",
"column.bookmarks": "Marcadores",
"column.community": "Línea temporal local", "column.community": "Línea temporal local",
"column.direct": "Mensajes directos", "column.direct": "Mensajes directos",
"column.directory": "Explorar perfiles", "column.directory": "Explorar perfiles",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.duration": "Duración de la encuesta",
"compose_form.poll.option_placeholder": "Opción {number}", "compose_form.poll.option_placeholder": "Opción {number}",
"compose_form.poll.remove_option": "Quitá esta opción", "compose_form.poll.remove_option": "Quitá esta opción",
"compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples",
"compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción",
"compose_form.publish": "Tootear", "compose_form.publish": "Tootear",
"compose_form.publish_loud": "¡{publish}!", "compose_form.publish_loud": "¡{publish}!",
"compose_form.sensitive.hide": "Marcar medio como sensible", "compose_form.sensitive.hide": "Marcar medio como sensible",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_timeline": "¡No hay toots aquí!",
"empty_column.account_unavailable": "Perfil no disponible", "empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.",
"empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en marcadores. Cuando guardés uno en marcadores, se mostrará acá.",
"empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
"empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.", "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.",
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
@ -185,7 +191,7 @@
"introduction.federation.federated.headline": "Federado", "introduction.federation.federated.headline": "Federado",
"introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.", "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.",
"introduction.federation.home.headline": "Principal", "introduction.federation.home.headline": "Principal",
"introduction.federation.home.text": "Los toots de las personas que seguíss aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", "introduction.federation.home.text": "Los toots de las personas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!",
"introduction.federation.local.headline": "Local", "introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.", "introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.",
"introduction.interactions.action": "¡Terminar tutorial!", "introduction.interactions.action": "¡Terminar tutorial!",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados",
"keyboard_shortcuts.my_profile": "para abrir tu perfil", "keyboard_shortcuts.my_profile": "para abrir tu perfil",
"keyboard_shortcuts.notifications": "para abrir la columna de notificaciones", "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones",
"keyboard_shortcuts.open_media": "para abrir archivos de medios",
"keyboard_shortcuts.pinned": "para abrir lista de toots fijados", "keyboard_shortcuts.pinned": "para abrir lista de toots fijados",
"keyboard_shortcuts.profile": "para abrir el perfil del autor", "keyboard_shortcuts.profile": "para abrir el perfil del autor",
"keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.reply": "para responder",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?", "mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?",
"navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.apps": "Aplicaciones móviles",
"navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.bookmarks": "Marcadores",
"navigation_bar.community_timeline": "Línea temporal local", "navigation_bar.community_timeline": "Línea temporal local",
"navigation_bar.compose": "Redactar un nuevo toot", "navigation_bar.compose": "Redactar un nuevo toot",
"navigation_bar.direct": "Mensajes directos", "navigation_bar.direct": "Mensajes directos",
@ -273,7 +281,9 @@
"navigation_bar.security": "Seguridad", "navigation_bar.security": "Seguridad",
"notification.favourite": "{name} marcó tu estado como favorito", "notification.favourite": "{name} marcó tu estado como favorito",
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.follow_request": "{name} solicitó seguirte",
"notification.mention": "{name} te mencionó", "notification.mention": "{name} te mencionó",
"notification.own_poll": "Tu encuesta finalizó",
"notification.poll": "Finalizó una encuesta en la que votaste", "notification.poll": "Finalizó una encuesta en la que votaste",
"notification.reblog": "{name} retooteó tu estado", "notification.reblog": "{name} retooteó tu estado",
"notifications.clear": "Limpiar notificaciones", "notifications.clear": "Limpiar notificaciones",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido",
"notifications.column_settings.filter_bar.show": "Mostrar", "notifications.column_settings.filter_bar.show": "Mostrar",
"notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow": "Nuevos seguidores:",
"notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:",
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.poll": "Resultados de la encuesta:", "notifications.column_settings.poll": "Resultados de la encuesta:",
"notifications.column_settings.push": "Notificaciones push", "notifications.column_settings.push": "Notificaciones push",
@ -344,6 +355,7 @@
"status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_account": "Abrir interface de moderación para @{name}",
"status.admin_status": "Abrir este estado en la interface de moderación", "status.admin_status": "Abrir este estado en la interface de moderación",
"status.block": "Bloquear a @{name}", "status.block": "Bloquear a @{name}",
"status.bookmark": "Marcador",
"status.cancel_reblog_private": "Quitar retoot", "status.cancel_reblog_private": "Quitar retoot",
"status.cannot_reblog": "No se puede retootear este toot", "status.cannot_reblog": "No se puede retootear este toot",
"status.copy": "Copiar enlace al estado", "status.copy": "Copiar enlace al estado",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} retooteó", "status.reblogged_by": "{name} retooteó",
"status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.", "status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.",
"status.redraft": "Eliminar toot original y editarlo", "status.redraft": "Eliminar toot original y editarlo",
"status.remove_bookmark": "Quitar marcador",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Responder al hilo", "status.replyAll": "Responder al hilo",
"status.report": "Denunciar a @{name}", "status.report": "Denunciar a @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Agregar medios ({formats})", "upload_button.label": "Agregar medios ({formats})",
"upload_error.limit": "Se excedió el límite de subida de archivos.", "upload_error.limit": "Se excedió el límite de subida de archivos.",
"upload_error.poll": "No se permite la subida de archivos en encuestas.", "upload_error.poll": "No se permite la subida de archivos en encuestas.",
"upload_form.audio_description": "Describir para personas con problemas auditivos",
"upload_form.description": "Agregar descripción para los usuarios con dificultades visuales", "upload_form.description": "Agregar descripción para los usuarios con dificultades visuales",
"upload_form.edit": "Editar", "upload_form.edit": "Editar",
"upload_form.undo": "Eliminar", "upload_form.undo": "Eliminar",
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
"upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.analyzing_picture": "Analizando imagen…",
"upload_modal.apply": "Aplicar", "upload_modal.apply": "Aplicar",
"upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.", "upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Previsualización ({ratio})", "upload_modal.preview_label": "Previsualización ({ratio})",
"upload_progress.label": "Subiendo…", "upload_progress.label": "Subiendo…",
"video.close": "Cerrar video", "video.close": "Cerrar video",
"video.download": "Descargar archivo",
"video.exit_fullscreen": "Salir de pantalla completa", "video.exit_fullscreen": "Salir de pantalla completa",
"video.expand": "Expandir vídeo", "video.expand": "Expandir vídeo",
"video.fullscreen": "Pantalla completa", "video.fullscreen": "Pantalla completa",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Agregar o eliminar de listas", "account.add_or_remove_from_list": "Agregar o eliminar de listas",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Grupo",
"account.block": "Bloquear a @{name}", "account.block": "Bloquear a @{name}",
"account.block_domain": "Ocultar todo de {domain}", "account.block_domain": "Ocultar todo de {domain}",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Tarifa limitada", "alert.rate_limited.title": "Tarifa limitada",
"alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Ups!",
"announcement.announcement": "Anuncio",
"autosuggest_hashtag.per_week": "{count} por semana", "autosuggest_hashtag.per_week": "{count} por semana",
"boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.body": "Algo salió mal al cargar este componente.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Algo salió mal al cargar este componente.", "bundle_modal_error.message": "Algo salió mal al cargar este componente.",
"bundle_modal_error.retry": "Inténtalo de nuevo", "bundle_modal_error.retry": "Inténtalo de nuevo",
"column.blocks": "Usuarios bloqueados", "column.blocks": "Usuarios bloqueados",
"column.bookmarks": "Marcadores",
"column.community": "Línea de tiempo local", "column.community": "Línea de tiempo local",
"column.direct": "Mensajes directos", "column.direct": "Mensajes directos",
"column.directory": "Buscar perfiles", "column.directory": "Buscar perfiles",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.duration": "Duración de la encuesta",
"compose_form.poll.option_placeholder": "Elección {number}", "compose_form.poll.option_placeholder": "Elección {number}",
"compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.poll.remove_option": "Eliminar esta opción",
"compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones",
"compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción",
"compose_form.publish": "Tootear", "compose_form.publish": "Tootear",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marcar multimedia como sensible", "compose_form.sensitive.hide": "Marcar multimedia como sensible",
@ -127,7 +132,7 @@
"emoji_button.food": "Comida y bebida", "emoji_button.food": "Comida y bebida",
"emoji_button.label": "Insertar emoji", "emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Naturaleza", "emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "No hay emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "No hay emojis!! ¯\\_(ツ)_/¯",
"emoji_button.objects": "Objetos", "emoji_button.objects": "Objetos",
"emoji_button.people": "Gente", "emoji_button.people": "Gente",
"emoji_button.recent": "Usados frecuentemente", "emoji_button.recent": "Usados frecuentemente",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_timeline": "¡No hay toots aquí!",
"empty_column.account_unavailable": "Perfil no disponible", "empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
"empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados",
"keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.my_profile": "abrir tu perfil",
"keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones",
"keyboard_shortcuts.open_media": "para abrir archivos multimedia",
"keyboard_shortcuts.pinned": "abrir la lista de toots destacados", "keyboard_shortcuts.pinned": "abrir la lista de toots destacados",
"keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.profile": "abrir el perfil del autor",
"keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.reply": "para responder",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
"navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.apps": "Aplicaciones móviles",
"navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.bookmarks": "Marcadores",
"navigation_bar.community_timeline": "Historia local", "navigation_bar.community_timeline": "Historia local",
"navigation_bar.compose": "Escribir un nuevo toot", "navigation_bar.compose": "Escribir un nuevo toot",
"navigation_bar.direct": "Mensajes directos", "navigation_bar.direct": "Mensajes directos",
@ -273,7 +281,9 @@
"navigation_bar.security": "Seguridad", "navigation_bar.security": "Seguridad",
"notification.favourite": "{name} marcó tu estado como favorito", "notification.favourite": "{name} marcó tu estado como favorito",
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.follow_request": "{name} ha solicitado seguirte",
"notification.mention": "{name} te ha mencionado", "notification.mention": "{name} te ha mencionado",
"notification.own_poll": "Tu encuesta ha terminado",
"notification.poll": "Una encuesta en la que has votado ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado",
"notification.reblog": "{name} ha retooteado tu estado", "notification.reblog": "{name} ha retooteado tu estado",
"notifications.clear": "Limpiar notificaciones", "notifications.clear": "Limpiar notificaciones",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido",
"notifications.column_settings.filter_bar.show": "Mostrar", "notifications.column_settings.filter_bar.show": "Mostrar",
"notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow": "Nuevos seguidores:",
"notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:",
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.poll": "Resultados de la votación:",
"notifications.column_settings.push": "Notificaciones push", "notifications.column_settings.push": "Notificaciones push",
@ -344,6 +355,7 @@
"status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_account": "Abrir interfaz de moderación para @{name}",
"status.admin_status": "Abrir este estado en la interfaz de moderación", "status.admin_status": "Abrir este estado en la interfaz de moderación",
"status.block": "Bloquear a @{name}", "status.block": "Bloquear a @{name}",
"status.bookmark": "Marcador",
"status.cancel_reblog_private": "Des-impulsar", "status.cancel_reblog_private": "Des-impulsar",
"status.cannot_reblog": "Este toot no puede retootearse", "status.cannot_reblog": "Este toot no puede retootearse",
"status.copy": "Copiar enlace al estado", "status.copy": "Copiar enlace al estado",
@ -368,6 +380,7 @@
"status.reblogged_by": "Retooteado por {name}", "status.reblogged_by": "Retooteado por {name}",
"status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.", "status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.",
"status.redraft": "Borrar y volver a borrador", "status.redraft": "Borrar y volver a borrador",
"status.remove_bookmark": "Eliminar marcador",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Responder al hilo", "status.replyAll": "Responder al hilo",
"status.report": "Reportar", "status.report": "Reportar",
@ -400,9 +413,11 @@
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Límite de subida de archivos excedido.", "upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_error.poll": "Subida de archivos no permitida con encuestas.",
"upload_form.audio_description": "Describir para personas con problemas auditivos",
"upload_form.description": "Describir para los usuarios con dificultad visual", "upload_form.description": "Describir para los usuarios con dificultad visual",
"upload_form.edit": "Editar", "upload_form.edit": "Editar",
"upload_form.undo": "Borrar", "upload_form.undo": "Borrar",
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
"upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.analyzing_picture": "Analizando imagen…",
"upload_modal.apply": "Aplicar", "upload_modal.apply": "Aplicar",
"upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso", "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Vista previa ({ratio})", "upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Subiendo…", "upload_progress.label": "Subiendo…",
"video.close": "Cerrar video", "video.close": "Cerrar video",
"video.download": "Descargar archivo",
"video.exit_fullscreen": "Salir de pantalla completa", "video.exit_fullscreen": "Salir de pantalla completa",
"video.expand": "Expandir vídeo", "video.expand": "Expandir vídeo",
"video.fullscreen": "Pantalla completa", "video.fullscreen": "Pantalla completa",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest", "account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Grupp",
"account.block": "Blokeeri @{name}", "account.block": "Blokeeri @{name}",
"account.block_domain": "Peida kõik domeenist {domain}", "account.block_domain": "Peida kõik domeenist {domain}",
"account.blocked": "Blokeeritud", "account.blocked": "Blokeeritud",
@ -14,7 +15,7 @@
"account.followers.empty": "Keegi ei jälgi seda kasutajat veel.", "account.followers.empty": "Keegi ei jälgi seda kasutajat veel.",
"account.follows": "Jälgib", "account.follows": "Jälgib",
"account.follows.empty": "See kasutaja ei jälgi veel kedagi.", "account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
"account.follows_you": "Jälgib sind", "account.follows_you": "Jälgib Teid",
"account.hide_reblogs": "Peida upitused kasutajalt @{name}", "account.hide_reblogs": "Peida upitused kasutajalt @{name}",
"account.last_status": "Viimati aktiivne", "account.last_status": "Viimati aktiivne",
"account.link_verified_on": "Selle lingi autorsust kontrolliti {date}", "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}",
@ -42,15 +43,17 @@
"alert.rate_limited.title": "Piiratud", "alert.rate_limited.title": "Piiratud",
"alert.unexpected.message": "Tekkis ootamatu viga.", "alert.unexpected.message": "Tekkis ootamatu viga.",
"alert.unexpected.title": "Oih!", "alert.unexpected.title": "Oih!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} nädalas", "autosuggest_hashtag.per_week": "{count} nädalas",
"boost_modal.combo": "Saad vajutada {combo}, et see järgmine kord vahele jätta", "boost_modal.combo": "Võite vajutada {combo}, et see järgmine kord vahele jätta",
"bundle_column_error.body": "Mindagi läks valesti selle komponendi laadimisel.", "bundle_column_error.body": "Midagi läks valesti selle komponendi laadimisel.",
"bundle_column_error.retry": "Proovi uuesti", "bundle_column_error.retry": "Proovi uuesti",
"bundle_column_error.title": "Võrgu viga", "bundle_column_error.title": "Võrgu viga",
"bundle_modal_error.close": "Sulge", "bundle_modal_error.close": "Sulge",
"bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.", "bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.",
"bundle_modal_error.retry": "Proovi uuesti", "bundle_modal_error.retry": "Proovi uuesti",
"column.blocks": "Blokeeritud kasutajad", "column.blocks": "Blokeeritud kasutajad",
"column.bookmarks": "Järjehoidjad",
"column.community": "Kohalik ajajoon", "column.community": "Kohalik ajajoon",
"column.direct": "Otsesõnumid", "column.direct": "Otsesõnumid",
"column.directory": "Sirvi profiile", "column.directory": "Sirvi profiile",
@ -61,7 +64,7 @@
"column.lists": "Nimekirjad", "column.lists": "Nimekirjad",
"column.mutes": "Vaigistatud kasutajad", "column.mutes": "Vaigistatud kasutajad",
"column.notifications": "Teated", "column.notifications": "Teated",
"column.pins": "Kinnitatud upitused", "column.pins": "Kinnitatud tuututused",
"column.public": "Föderatiivne ajajoon", "column.public": "Föderatiivne ajajoon",
"column_back_button.label": "Tagasi", "column_back_button.label": "Tagasi",
"column_header.hide_settings": "Peida sätted", "column_header.hide_settings": "Peida sätted",
@ -75,13 +78,15 @@
"compose_form.direct_message_warning": "See tuut saadetakse ainult mainitud kasutajatele.", "compose_form.direct_message_warning": "See tuut saadetakse ainult mainitud kasutajatele.",
"compose_form.direct_message_warning_learn_more": "Vaata veel", "compose_form.direct_message_warning_learn_more": "Vaata veel",
"compose_form.hashtag_warning": "Seda tuuti ei kuvata ühegi sildi all, sest see on kirjendamata. Ainult avalikud tuutid on sildi järgi otsitavad.", "compose_form.hashtag_warning": "Seda tuuti ei kuvata ühegi sildi all, sest see on kirjendamata. Ainult avalikud tuutid on sildi järgi otsitavad.",
"compose_form.lock_disclaimer": "Sinu konto ei ole {locked}. Igaüks saab sind jälgida ja näha su ainult-jälgijatele postitusi.", "compose_form.lock_disclaimer": "Teie konto ei ole {locked}. Igaüks saab Teid jälgida ja näha Teie ainult-jälgijatele postitusi.",
"compose_form.lock_disclaimer.lock": "lukus", "compose_form.lock_disclaimer.lock": "lukus",
"compose_form.placeholder": "Millest mõtled?", "compose_form.placeholder": "Millest mõtlete?",
"compose_form.poll.add_option": "Lisa valik", "compose_form.poll.add_option": "Lisa valik",
"compose_form.poll.duration": "Küsitluse kestus", "compose_form.poll.duration": "Küsitluse kestus",
"compose_form.poll.option_placeholder": "Valik {number}", "compose_form.poll.option_placeholder": "Valik {number}",
"compose_form.poll.remove_option": "Eemalda see valik", "compose_form.poll.remove_option": "Eemalda see valik",
"compose_form.poll.switch_to_multiple": "Muuda küsitlust lubamaks mitut valikut",
"compose_form.poll.switch_to_single": "Muuda küsitlust lubamaks ainult ühte valikut",
"compose_form.publish": "Tuut", "compose_form.publish": "Tuut",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Märgista meedia tundlikuks", "compose_form.sensitive.hide": "Märgista meedia tundlikuks",
@ -89,28 +94,28 @@
"compose_form.sensitive.unmarked": "Meedia ei ole sensitiivseks märgitud", "compose_form.sensitive.unmarked": "Meedia ei ole sensitiivseks märgitud",
"compose_form.spoiler.marked": "Tekst on hoiatuse taha peidetud", "compose_form.spoiler.marked": "Tekst on hoiatuse taha peidetud",
"compose_form.spoiler.unmarked": "Tekst ei ole peidetud", "compose_form.spoiler.unmarked": "Tekst ei ole peidetud",
"compose_form.spoiler_placeholder": "Kirjuta oma hoiatus siia", "compose_form.spoiler_placeholder": "Kirjutage oma hoiatus siia",
"confirmation_modal.cancel": "Katkesta", "confirmation_modal.cancel": "Katkesta",
"confirmations.block.block_and_report": "Blokeeri & Teata", "confirmations.block.block_and_report": "Blokeeri & Teata",
"confirmations.block.confirm": "Blokeeri", "confirmations.block.confirm": "Blokeeri",
"confirmations.block.message": "Oled kindel, et soovid blokkida {name}?", "confirmations.block.message": "Olete kindel, et soovite blokeerida {name}?",
"confirmations.delete.confirm": "Kustuta", "confirmations.delete.confirm": "Kustuta",
"confirmations.delete.message": "Oled kindel, et soovid selle staatuse kustutada?", "confirmations.delete.message": "Olete kindel, et soovite selle staatuse kustutada?",
"confirmations.delete_list.confirm": "Kustuta", "confirmations.delete_list.confirm": "Kustuta",
"confirmations.delete_list.message": "Oled kindel, et soovid selle nimekirja püsivalt kustutada?", "confirmations.delete_list.message": "Olete kindel, et soovite selle nimekirja püsivalt kustutada?",
"confirmations.domain_block.confirm": "Peida terve domeen", "confirmations.domain_block.confirm": "Peida terve domeen",
"confirmations.domain_block.message": "Oled ikka päris kindel, et soovid blokeerida terve {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Sa ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Sinu jälgijad sellest domeenist eemaldatakse.", "confirmations.domain_block.message": "Olete ikka päris kindel, et soovite blokeerida terve {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Te ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Teie jälgijad sellest domeenist eemaldatakse.",
"confirmations.logout.confirm": "Välju", "confirmations.logout.confirm": "Välju",
"confirmations.logout.message": "Kas oled kindel, et soovid välja logida?", "confirmations.logout.message": "Kas olete kindel, et soovite välja logida?",
"confirmations.mute.confirm": "Vaigista", "confirmations.mute.confirm": "Vaigista",
"confirmations.mute.explanation": "See peidab postitusi temalt ning postitusi, kus mainitakse neid, kuid see lubab neil ikka näha Teie postitusi ning Teid jälgida.", "confirmations.mute.explanation": "See peidab postitusi temalt ning postitusi, kus mainitakse neid, kuid see lubab neil ikka näha Teie postitusi ning Teid jälgida.",
"confirmations.mute.message": "Oled kindel, et soovid {name} vaigistada?", "confirmations.mute.message": "Olete kindel, et soovite {name} vaigistada?",
"confirmations.redraft.confirm": "Kustuta & taasalusta", "confirmations.redraft.confirm": "Kustuta & taasalusta",
"confirmations.redraft.message": "Oled kindel, et soovid selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.", "confirmations.redraft.message": "Olete kindel, et soovite selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.",
"confirmations.reply.confirm": "Vasta", "confirmations.reply.confirm": "Vasta",
"confirmations.reply.message": "Kohene vastamine kirjutab üle sõnumi, mida hetkel koostad. Oled kindel, et soovid jätkata?", "confirmations.reply.message": "Praegu vastamine kirjutab üle sõnumi, mida hetkel koostate. Olete kindel, et soovite jätkata?",
"confirmations.unfollow.confirm": "Ära jälgi", "confirmations.unfollow.confirm": "Ära jälgi",
"confirmations.unfollow.message": "Oled kindel, et ei soovi jälgida {name}?", "confirmations.unfollow.message": "Olete kindel, et ei soovi rohkem jälgida kasutajat {name}?",
"conversation.delete": "Kustuta vestlus", "conversation.delete": "Kustuta vestlus",
"conversation.mark_as_read": "Märgi loetuks", "conversation.mark_as_read": "Märgi loetuks",
"conversation.open": "Vaata vestlust", "conversation.open": "Vaata vestlust",
@ -138,19 +143,20 @@
"empty_column.account_timeline": "Siin tuute ei ole!", "empty_column.account_timeline": "Siin tuute ei ole!",
"empty_column.account_unavailable": "Profiil pole saadaval", "empty_column.account_unavailable": "Profiil pole saadaval",
"empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.", "empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.",
"empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema saada!", "empty_column.bookmarked_statuses": "Teil pole veel järjehoidjatesse lisatud tuututusi. Kui lisate mõne, näete neid siin.",
"empty_column.direct": "Sul ei veel otsesõnumeid. Kui saadad või võtad mõne vastu, ilmuvad nad siia.", "empty_column.community": "Kohalik ajajoon on tühi. Kirjutage midagi avalikult, et pall veerema ajada!",
"empty_column.direct": "Teil ei ole veel otsesõnumeid. Kui saadate või võtate mõne vastu, ilmuvad nad siia.",
"empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.", "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
"empty_column.favourited_statuses": "Sul pole veel lemmikuid tuute. Kui märgid mõne, näed neid siin.", "empty_column.favourited_statuses": "Teil pole veel lemmikuid tuute. Kui märgite mõne, näete neid siin.",
"empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.", "empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.",
"empty_column.follow_requests": "Sul pole veel ühtegi jälgimise taotlust. Kui saad mõne, näed seda siin.", "empty_column.follow_requests": "Teil pole veel ühtegi jälgimise taotlust. Kui saate mõne, näete neid siin.",
"empty_column.hashtag": "Selle sildiga pole veel midagi.", "empty_column.hashtag": "Selle sildiga pole veel midagi.",
"empty_column.home": "Sinu kodu ajajoon on tühi! Külasta {public} või kasuta otsingut alustamaks ja kohtamaks teisi kasutajaid.", "empty_column.home": "Teie kodu ajajoon on tühi! Külastage {public} või kasutage otsingut alustamaks ja kohtamaks teisi kasutajaid.",
"empty_column.home.public_timeline": "avalik ajajoon", "empty_column.home.public_timeline": "avalik ajajoon",
"empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.", "empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.",
"empty_column.lists": "Sul ei ole veel ühtegi nimekirja. Kui lood mõne, näed seda siin.", "empty_column.lists": "Teil ei ole veel ühtegi nimekirja. Kui loote mõne, näete neid siin.",
"empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.", "empty_column.mutes": "Te pole veel ühtegi kasutajat vaigistanud.",
"empty_column.notifications": "Sul ei ole veel teateid. Suhtle teistega alustamaks vestlust.", "empty_column.notifications": "Teil ei ole veel teateid. Suhelge teistega alustamaks vestlust.",
"empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi", "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
"error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.", "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.",
"error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.", "error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.",
@ -163,7 +169,7 @@
"getting_started.documentation": "Dokumentatsioon", "getting_started.documentation": "Dokumentatsioon",
"getting_started.heading": "Alustamine", "getting_started.heading": "Alustamine",
"getting_started.invite": "Kutsu inimesi", "getting_started.invite": "Kutsu inimesi",
"getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saad panustada või teatada probleemidest GitHubis {github}.", "getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saate panustada või teatada probleemidest GitHubis {github}.",
"getting_started.security": "Turvalisus", "getting_started.security": "Turvalisus",
"getting_started.terms": "Kasutustingimused", "getting_started.terms": "Kasutustingimused",
"hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.all": "ja {additional}",
@ -185,19 +191,19 @@
"introduction.federation.federated.headline": "Föderatiivne", "introduction.federation.federated.headline": "Föderatiivne",
"introduction.federation.federated.text": "Avalikud postitused teistest föderatsiooni serveritest kuvatakse föderatiivsel ajajoonel.", "introduction.federation.federated.text": "Avalikud postitused teistest föderatsiooni serveritest kuvatakse föderatiivsel ajajoonel.",
"introduction.federation.home.headline": "Kodu", "introduction.federation.home.headline": "Kodu",
"introduction.federation.home.text": "Inimest postitused keda jälgid kuvatakse sinu koduajajoonel. Saad jälgida igaüht igas serveris!", "introduction.federation.home.text": "Inimeste, keda jälgite, postitused kuvatakse Teie koduajajoonel. Saate jälgida igaüht igas serveris!",
"introduction.federation.local.headline": "Kohalik", "introduction.federation.local.headline": "Kohalik",
"introduction.federation.local.text": "Samas serveris olevate inimeste postitused kuvatakse kohalikul ajajoonel.", "introduction.federation.local.text": "Samas serveris olevate inimeste postitused kuvatakse kohalikul ajajoonel.",
"introduction.interactions.action": "Välju õpetusest!", "introduction.interactions.action": "Välju õpetusest!",
"introduction.interactions.favourite.headline": "Lemmik", "introduction.interactions.favourite.headline": "Lemmik",
"introduction.interactions.favourite.text": "Saad tuuti salvestada ja anda autorile teada, et meeldis märkides selle lemmikuks.", "introduction.interactions.favourite.text": "Saate tuuti salvestada ja anda autorile teada, et see meeldis Teile, märkides selle lemmikuks.",
"introduction.interactions.reblog.headline": "Upita", "introduction.interactions.reblog.headline": "Upita",
"introduction.interactions.reblog.text": "Saad jagada teiste inimeste tuute oma jälgijatega upitades neid.", "introduction.interactions.reblog.text": "Saate jagada teiste inimeste tuute oma jälgijatega neid upitades.",
"introduction.interactions.reply.headline": "Vasta", "introduction.interactions.reply.headline": "Vasta",
"introduction.interactions.reply.text": "Saad vastata teiste ja enda tuutidele, mis ühendab nad kokku aruteluks.", "introduction.interactions.reply.text": "Saate vastata teiste ja enda tuutidele, mis ühendab nad kokku aruteluks.",
"introduction.welcome.action": "Lähme!", "introduction.welcome.action": "Lähme!",
"introduction.welcome.headline": "Esimesed sammud", "introduction.welcome.headline": "Esimesed sammud",
"introduction.welcome.text": "Teretulemast fediversumisse! Mõne aja pärast saad avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—ta majutab sinu profiili. Seega jäta ta nimi meelde.", "introduction.welcome.text": "Teretulemast fediversumisse! Mõne aja pärast saate avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—see majutab sinu profiili. Seega jäta selle nimi meelde.",
"keyboard_shortcuts.back": "tagasiminekuks", "keyboard_shortcuts.back": "tagasiminekuks",
"keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut", "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut",
"keyboard_shortcuts.boost": "upitamiseks", "keyboard_shortcuts.boost": "upitamiseks",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "avamaks vaigistatud kasutajate nimistut", "keyboard_shortcuts.muted": "avamaks vaigistatud kasutajate nimistut",
"keyboard_shortcuts.my_profile": "avamaks profiili", "keyboard_shortcuts.my_profile": "avamaks profiili",
"keyboard_shortcuts.notifications": "avamaks teadete tulpa", "keyboard_shortcuts.notifications": "avamaks teadete tulpa",
"keyboard_shortcuts.open_media": "et avada meedia",
"keyboard_shortcuts.pinned": "avamaks kinnitatud tuutide nimistut", "keyboard_shortcuts.pinned": "avamaks kinnitatud tuutide nimistut",
"keyboard_shortcuts.profile": "avamaks autori profiili", "keyboard_shortcuts.profile": "avamaks autori profiili",
"keyboard_shortcuts.reply": "vastamiseks", "keyboard_shortcuts.reply": "vastamiseks",
@ -241,8 +248,8 @@
"lists.edit.submit": "Muuda pealkiri", "lists.edit.submit": "Muuda pealkiri",
"lists.new.create": "Lisa nimistu", "lists.new.create": "Lisa nimistu",
"lists.new.title_placeholder": "Uus nimistu pealkiri", "lists.new.title_placeholder": "Uus nimistu pealkiri",
"lists.search": "Otsi sinu poolt jälgitavate inimese hulgast", "lists.search": "Otsi Teie poolt jälgitavate inimese hulgast",
"lists.subheading": "Sinu nimistud", "lists.subheading": "Teie nimistud",
"load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
"loading_indicator.label": "Laeb..", "loading_indicator.label": "Laeb..",
"media_gallery.toggle_visible": "Lülita nähtavus", "media_gallery.toggle_visible": "Lülita nähtavus",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?", "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
"navigation_bar.apps": "Mobiilrakendused", "navigation_bar.apps": "Mobiilrakendused",
"navigation_bar.blocks": "Blokeeritud kasutajad", "navigation_bar.blocks": "Blokeeritud kasutajad",
"navigation_bar.bookmarks": "Järjehoidjad",
"navigation_bar.community_timeline": "Kohalik ajajoon", "navigation_bar.community_timeline": "Kohalik ajajoon",
"navigation_bar.compose": "Koosta uus tuut", "navigation_bar.compose": "Koosta uus tuut",
"navigation_bar.direct": "Otsesõnumid", "navigation_bar.direct": "Otsesõnumid",
@ -271,19 +279,22 @@
"navigation_bar.preferences": "Eelistused", "navigation_bar.preferences": "Eelistused",
"navigation_bar.public_timeline": "Föderatiivne ajajoon", "navigation_bar.public_timeline": "Föderatiivne ajajoon",
"navigation_bar.security": "Turvalisus", "navigation_bar.security": "Turvalisus",
"notification.favourite": "{name} märkis su staatuse lemmikuks", "notification.favourite": "{name} märkis Teie staatuse lemmikuks",
"notification.follow": "{name} jälgib sind", "notification.follow": "{name} jälgib nüüd Teid",
"notification.mention": "{name} mainis sind", "notification.follow_request": "{name} soovib Teid jälgida",
"notification.poll": "Küsitlus, milles osalesid, on lõppenud", "notification.mention": "{name} mainis Teid",
"notification.reblog": "{name} upitas su staatust", "notification.own_poll": "Teie küsitlus on lõppenud",
"notification.poll": "Küsitlus, milles osalesite, on lõppenud",
"notification.reblog": "{name} upitas Teie staatust",
"notifications.clear": "Puhasta teated", "notifications.clear": "Puhasta teated",
"notifications.clear_confirmation": "Oled kindel, et soovid püsivalt kõik oma teated puhastada?", "notifications.clear_confirmation": "Olete kindel, et soovite püsivalt kõik oma teated eemaldada?",
"notifications.column_settings.alert": "Töölauateated", "notifications.column_settings.alert": "Töölauateated",
"notifications.column_settings.favourite": "Lemmikud:", "notifications.column_settings.favourite": "Lemmikud:",
"notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad", "notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad",
"notifications.column_settings.filter_bar.category": "Kiirfiltri riba", "notifications.column_settings.filter_bar.category": "Kiirfiltri riba",
"notifications.column_settings.filter_bar.show": "Kuva", "notifications.column_settings.filter_bar.show": "Kuva",
"notifications.column_settings.follow": "Uued jälgijad:", "notifications.column_settings.follow": "Uued jälgijad:",
"notifications.column_settings.follow_request": "Uued jälgimistaotlused:",
"notifications.column_settings.mention": "Mainimised:", "notifications.column_settings.mention": "Mainimised:",
"notifications.column_settings.poll": "Küsitluse tulemused:", "notifications.column_settings.poll": "Küsitluse tulemused:",
"notifications.column_settings.push": "Push teated", "notifications.column_settings.push": "Push teated",
@ -316,7 +327,7 @@
"privacy.unlisted.short": "Määramata", "privacy.unlisted.short": "Määramata",
"refresh": "Värskenda", "refresh": "Värskenda",
"regeneration_indicator.label": "Laeb…", "regeneration_indicator.label": "Laeb…",
"regeneration_indicator.sublabel": "Sinu kodu voog on ettevalmistamisel!", "regeneration_indicator.sublabel": "Teie kodu voog on ettevalmistamisel!",
"relative_time.days": "{number}p", "relative_time.days": "{number}p",
"relative_time.hours": "{number}t", "relative_time.hours": "{number}t",
"relative_time.just_now": "nüüd", "relative_time.just_now": "nüüd",
@ -325,7 +336,7 @@
"reply_indicator.cancel": "Tühista", "reply_indicator.cancel": "Tühista",
"report.forward": "Edasta kasutajale {target}", "report.forward": "Edasta kasutajale {target}",
"report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?", "report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?",
"report.hint": "See teade saadetakse sinu serveri moderaatoritele. Te saate lisada selgituse selle kohta, miks selle kasutaja kohta teate esitasite, siin:", "report.hint": "See teade saadetakse Teie serveri moderaatoritele. Te saate lisada selgituse selle kohta, miks selle kasutaja kohta teate esitasite, siin:",
"report.placeholder": "Lisaks kommentaarid", "report.placeholder": "Lisaks kommentaarid",
"report.submit": "Saada", "report.submit": "Saada",
"report.target": "Teatamine {target} kohta", "report.target": "Teatamine {target} kohta",
@ -344,6 +355,7 @@
"status.admin_account": "Ava moderaatoriliides kasutajale @{name}", "status.admin_account": "Ava moderaatoriliides kasutajale @{name}",
"status.admin_status": "Ava see staatus moderaatoriliites", "status.admin_status": "Ava see staatus moderaatoriliites",
"status.block": "Blokeeri @{name}", "status.block": "Blokeeri @{name}",
"status.bookmark": "Järjehoidja",
"status.cancel_reblog_private": "Äraupita", "status.cancel_reblog_private": "Äraupita",
"status.cannot_reblog": "Seda postitust ei saa upitada", "status.cannot_reblog": "Seda postitust ei saa upitada",
"status.copy": "Kopeeri link staatusesse", "status.copy": "Kopeeri link staatusesse",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} upitatud", "status.reblogged_by": "{name} upitatud",
"status.reblogs.empty": "Keegi pole seda tuuti veel upitanud. Kui keegi upitab, näed seda siin.", "status.reblogs.empty": "Keegi pole seda tuuti veel upitanud. Kui keegi upitab, näed seda siin.",
"status.redraft": "Kustuta & alga uuesti", "status.redraft": "Kustuta & alga uuesti",
"status.remove_bookmark": "Eemalda järjehoidja",
"status.reply": "Vasta", "status.reply": "Vasta",
"status.replyAll": "Vasta lõimele", "status.replyAll": "Vasta lõimele",
"status.report": "Raport @{name}", "status.report": "Raport @{name}",
@ -382,7 +395,7 @@
"status.unmute_conversation": "Ära vaigista vestlust", "status.unmute_conversation": "Ära vaigista vestlust",
"status.unpin": "Kinnita profiililt lahti", "status.unpin": "Kinnita profiililt lahti",
"suggestions.dismiss": "Eira soovitust", "suggestions.dismiss": "Eira soovitust",
"suggestions.header": "Sind võib huvitada…", "suggestions.header": "Teid võib huvitada…",
"tabs_bar.federated_timeline": "Föderatiivne", "tabs_bar.federated_timeline": "Föderatiivne",
"tabs_bar.home": "Kodu", "tabs_bar.home": "Kodu",
"tabs_bar.local_timeline": "Kohalik", "tabs_bar.local_timeline": "Kohalik",
@ -395,14 +408,16 @@
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} left", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {inimene} other {inimesed}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {inimene} other {inimesed}} talking",
"trends.trending_now": "Praegu populaarne", "trends.trending_now": "Praegu populaarne",
"ui.beforeunload": "Sinu mustand läheb kaotsi, kui lahkud Mastodonist.", "ui.beforeunload": "Teie mustand läheb kaotsi, kui lahkute Mastodonist.",
"upload_area.title": "Lohista & aseta üleslaadimiseks", "upload_area.title": "Lohista & aseta üleslaadimiseks",
"upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Faili üleslaadimise limiit ületatud.", "upload_error.limit": "Faili üleslaadimise limiit ületatud.",
"upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.", "upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.",
"upload_form.audio_description": "Kirjelda kuulmispuudega inimeste jaoks",
"upload_form.description": "Kirjelda vaegnägijatele", "upload_form.description": "Kirjelda vaegnägijatele",
"upload_form.edit": "Redigeeri", "upload_form.edit": "Redigeeri",
"upload_form.undo": "Kustuta", "upload_form.undo": "Kustuta",
"upload_form.video_description": "Kirjelda kuulmis- või nägemispuudega inimeste jaoks",
"upload_modal.analyzing_picture": "Analüüsime pilti…", "upload_modal.analyzing_picture": "Analüüsime pilti…",
"upload_modal.apply": "Rakenda", "upload_modal.apply": "Rakenda",
"upload_modal.description_placeholder": "Kiire pruun rebane hüppab üle laisa koera", "upload_modal.description_placeholder": "Kiire pruun rebane hüppab üle laisa koera",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Eelvaade ({ratio})", "upload_modal.preview_label": "Eelvaade ({ratio})",
"upload_progress.label": "Laeb üles....", "upload_progress.label": "Laeb üles....",
"video.close": "Sulge video", "video.close": "Sulge video",
"video.download": "Faili allalaadimine",
"video.exit_fullscreen": "Välju täisekraanist", "video.exit_fullscreen": "Välju täisekraanist",
"video.expand": "Suurenda video", "video.expand": "Suurenda video",
"video.fullscreen": "Täisekraan", "video.fullscreen": "Täisekraan",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Gehitu edo Kendu zerrendetatik", "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik",
"account.badges.bot": "Bot-a", "account.badges.bot": "Bot-a",
"account.badges.group": "Taldea",
"account.block": "Blokeatu @{name}", "account.block": "Blokeatu @{name}",
"account.block_domain": "Ezkutatu {domain} domeinuko guztia", "account.block_domain": "Ezkutatu {domain} domeinuko guztia",
"account.blocked": "Blokeatuta", "account.blocked": "Blokeatuta",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Abiadura mugatua", "alert.rate_limited.title": "Abiadura mugatua",
"alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
"alert.unexpected.title": "Ene!", "alert.unexpected.title": "Ene!",
"announcement.announcement": "Iragarpena",
"autosuggest_hashtag.per_week": "{count} asteko", "autosuggest_hashtag.per_week": "{count} asteko",
"boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko",
"bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.", "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Zerbait okerra gertatu da osagai hau kargatzean.", "bundle_modal_error.message": "Zerbait okerra gertatu da osagai hau kargatzean.",
"bundle_modal_error.retry": "Saiatu berriro", "bundle_modal_error.retry": "Saiatu berriro",
"column.blocks": "Blokeatutako erabiltzaileak", "column.blocks": "Blokeatutako erabiltzaileak",
"column.bookmarks": "Laster-markak",
"column.community": "Denbora-lerro lokala", "column.community": "Denbora-lerro lokala",
"column.direct": "Mezu zuzenak", "column.direct": "Mezu zuzenak",
"column.directory": "Arakatu profilak", "column.directory": "Arakatu profilak",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Inkestaren iraupena", "compose_form.poll.duration": "Inkestaren iraupena",
"compose_form.poll.option_placeholder": "{number}. aukera", "compose_form.poll.option_placeholder": "{number}. aukera",
"compose_form.poll.remove_option": "Kendu aukera hau", "compose_form.poll.remove_option": "Kendu aukera hau",
"compose_form.poll.switch_to_multiple": "Aldatu inkesta hainbat aukera onartzeko",
"compose_form.poll.switch_to_single": "Aldatu inkesta aukera bakarra onartzeko",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Markatu multimedia hunkigarri gisa", "compose_form.sensitive.hide": "Markatu multimedia hunkigarri gisa",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Ez dago toot-ik hemen!", "empty_column.account_timeline": "Ez dago toot-ik hemen!",
"empty_column.account_unavailable": "Profila ez dago eskuragarri", "empty_column.account_unavailable": "Profila ez dago eskuragarri",
"empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.",
"empty_column.bookmarked_statuses": "Oraindik ez dituzu toot laster-markatutarik. Bat laster-markatzerakoan, hemen agertuko da.",
"empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!", "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!",
"empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.", "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.",
"empty_column.domain_blocks": "Ez dago ezkutatutako domeinurik oraindik.", "empty_column.domain_blocks": "Ez dago ezkutatutako domeinurik oraindik.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "mutututako erabiltzaileen zerrenda irekitzeko", "keyboard_shortcuts.muted": "mutututako erabiltzaileen zerrenda irekitzeko",
"keyboard_shortcuts.my_profile": "zure profila irekitzeko", "keyboard_shortcuts.my_profile": "zure profila irekitzeko",
"keyboard_shortcuts.notifications": "jakinarazpenen zutabea irekitzeko", "keyboard_shortcuts.notifications": "jakinarazpenen zutabea irekitzeko",
"keyboard_shortcuts.open_media": "media zabaltzeko",
"keyboard_shortcuts.pinned": "finkatutako toot-en zerrenda irekitzeko", "keyboard_shortcuts.pinned": "finkatutako toot-en zerrenda irekitzeko",
"keyboard_shortcuts.profile": "egilearen profila irekitzeko", "keyboard_shortcuts.profile": "egilearen profila irekitzeko",
"keyboard_shortcuts.reply": "erantzutea", "keyboard_shortcuts.reply": "erantzutea",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?", "mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?",
"navigation_bar.apps": "Mugikorrerako aplikazioak", "navigation_bar.apps": "Mugikorrerako aplikazioak",
"navigation_bar.blocks": "Blokeatutako erabiltzaileak", "navigation_bar.blocks": "Blokeatutako erabiltzaileak",
"navigation_bar.bookmarks": "Laster-markak",
"navigation_bar.community_timeline": "Denbora-lerro lokala", "navigation_bar.community_timeline": "Denbora-lerro lokala",
"navigation_bar.compose": "Idatzi toot berria", "navigation_bar.compose": "Idatzi toot berria",
"navigation_bar.direct": "Mezu zuzenak", "navigation_bar.direct": "Mezu zuzenak",
@ -273,7 +281,9 @@
"navigation_bar.security": "Segurtasuna", "navigation_bar.security": "Segurtasuna",
"notification.favourite": "{name}(e)k zure mezua gogoko du", "notification.favourite": "{name}(e)k zure mezua gogoko du",
"notification.follow": "{name}(e)k jarraitzen zaitu", "notification.follow": "{name}(e)k jarraitzen zaitu",
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
"notification.mention": "{name}(e)k aipatu zaitu", "notification.mention": "{name}(e)k aipatu zaitu",
"notification.own_poll": "Zure inkesta amaitu da",
"notification.poll": "Zuk erantzun duzun inkesta bat bukatu da", "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
"notification.reblog": "{name}(e)k bultzada eman dio zure mezuari", "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari",
"notifications.clear": "Garbitu jakinarazpenak", "notifications.clear": "Garbitu jakinarazpenak",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Iragazki azkarraren barra", "notifications.column_settings.filter_bar.category": "Iragazki azkarraren barra",
"notifications.column_settings.filter_bar.show": "Erakutsi", "notifications.column_settings.filter_bar.show": "Erakutsi",
"notifications.column_settings.follow": "Jarraitzaile berriak:", "notifications.column_settings.follow": "Jarraitzaile berriak:",
"notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:",
"notifications.column_settings.mention": "Aipamenak:", "notifications.column_settings.mention": "Aipamenak:",
"notifications.column_settings.poll": "Inkestaren emaitzak:", "notifications.column_settings.poll": "Inkestaren emaitzak:",
"notifications.column_settings.push": "Push jakinarazpenak", "notifications.column_settings.push": "Push jakinarazpenak",
@ -318,7 +329,7 @@
"regeneration_indicator.label": "Kargatzen…", "regeneration_indicator.label": "Kargatzen…",
"regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!", "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!",
"relative_time.days": "{number}e", "relative_time.days": "{number}e",
"relative_time.hours": "{number}o", "relative_time.hours": "{number}h",
"relative_time.just_now": "orain", "relative_time.just_now": "orain",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
@ -340,10 +351,11 @@
"search_results.hashtags": "Traolak", "search_results.hashtags": "Traolak",
"search_results.statuses": "Toot-ak", "search_results.statuses": "Toot-ak",
"search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du Toot-en edukiaren bilaketa gaitu.", "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du Toot-en edukiaren bilaketa gaitu.",
"search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitzak}}", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}",
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
"status.admin_status": "Ireki mezu hau moderazio interfazean", "status.admin_status": "Ireki mezu hau moderazio interfazean",
"status.block": "Blokeatu @{name}", "status.block": "Blokeatu @{name}",
"status.bookmark": "Laster-marka",
"status.cancel_reblog_private": "Kendu bultzada", "status.cancel_reblog_private": "Kendu bultzada",
"status.cannot_reblog": "Mezu honi ezin zaio bultzada eman", "status.cannot_reblog": "Mezu honi ezin zaio bultzada eman",
"status.copy": "Kopiatu mezuaren esteka", "status.copy": "Kopiatu mezuaren esteka",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name}(r)en bultzada", "status.reblogged_by": "{name}(r)en bultzada",
"status.reblogs.empty": "Ez dio inork bultzada eman toot honi oraindik. Inork egiten duenean, hemen agertuko dira.", "status.reblogs.empty": "Ez dio inork bultzada eman toot honi oraindik. Inork egiten duenean, hemen agertuko dira.",
"status.redraft": "Ezabatu eta berridatzi", "status.redraft": "Ezabatu eta berridatzi",
"status.remove_bookmark": "Kendu laster-marka",
"status.reply": "Erantzun", "status.reply": "Erantzun",
"status.replyAll": "Erantzun harian", "status.replyAll": "Erantzun harian",
"status.report": "Salatu @{name}", "status.report": "Salatu @{name}",
@ -393,25 +406,28 @@
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko", "time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
"time_remaining.moments": "Amaitzekotan", "time_remaining.moments": "Amaitzekotan",
"time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko", "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten", "trends.count_by_accounts": "{count} {rawCount, plural, one {pertsona} other {pertsona}} hitz egiten",
"trends.trending_now": "Joera orain", "trends.trending_now": "Joera orain",
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.", "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
"upload_area.title": "Arrastatu eta jaregin igotzeko", "upload_area.title": "Arrastatu eta jaregin igotzeko",
"upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Fitxategi igoera muga gaindituta.", "upload_error.limit": "Fitxategi igoera muga gaindituta.",
"upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.", "upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.",
"upload_form.audio_description": "Deskribatu entzumen galera duten pertsonentzat",
"upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat", "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
"upload_form.edit": "Editatu", "upload_form.edit": "Editatu",
"upload_form.undo": "Ezabatu", "upload_form.undo": "Ezabatu",
"upload_form.video_description": "Deskribatu entzumen galera edo ikusmen urritasuna duten pertsonentzat",
"upload_modal.analyzing_picture": "Irudia aztertzen…", "upload_modal.analyzing_picture": "Irudia aztertzen…",
"upload_modal.apply": "Aplikatu", "upload_modal.apply": "Aplikatu",
"upload_modal.description_placeholder": "Azeri marroi azkar batek txakur alferraren gainetik salto egiten du", "upload_modal.description_placeholder": "Vaudeville itxurako filmean yogi ñaño bat jipoitzen dute Quebec-en whiski truk",
"upload_modal.detect_text": "Antzeman testua iruditik", "upload_modal.detect_text": "Antzeman testua iruditik",
"upload_modal.edit_media": "Editatu media", "upload_modal.edit_media": "Editatu media",
"upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.", "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.",
"upload_modal.preview_label": "Aurreikusi ({ratio})", "upload_modal.preview_label": "Aurreikusi ({ratio})",
"upload_progress.label": "Igotzen...", "upload_progress.label": "Igotzen...",
"video.close": "Itxi bideoa", "video.close": "Itxi bideoa",
"video.download": "Deskargatu fitxategia",
"video.exit_fullscreen": "Irten pantaila osotik", "video.exit_fullscreen": "Irten pantaila osotik",
"video.expand": "Hedatu bideoa", "video.expand": "Hedatu bideoa",
"video.fullscreen": "Pantaila osoa", "video.fullscreen": "Pantaila osoa",

View File

@ -1,47 +1,49 @@
{ {
"account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست", "account.add_or_remove_from_list": "افزودن یا برداشتن از فهرستها",
"account.badges.bot": "ربات", "account.badges.bot": "ربات",
"account.badges.group": "گروه",
"account.block": "مسدودسازی @{name}", "account.block": "مسدودسازی @{name}",
"account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}", "account.block_domain": "نهفتن همه چیز از {domain}",
"account.blocked": "مسدود شده", "account.blocked": "مسدود",
"account.cancel_follow_request": "لغو درخواست پیگیری", "account.cancel_follow_request": "لغو درخواست پیگیری",
"account.direct": "پیغام خصوصی به @{name}", "account.direct": "پیام خصوصی به @{name}",
"account.domain_blocked": "دامین پنهان‌شده", "account.domain_blocked": "دامنهٔ نهفته",
"account.edit_profile": "ویرایش نمایه", "account.edit_profile": "ویرایش نمایه",
"account.endorse": "نمایش در نمایه", "account.endorse": "معرّفی در نمایه",
"account.follow": "پی بگیرید", "account.follow": "پی بگیرید",
"account.followers": "پیگیران", "account.followers": "پیگیران",
"account.followers.empty": "هنوز هیچ کسی پیگیر این کاربر نیست.", "account.followers.empty": "هنوز کسی پیگیر این کاربر نیست.",
"account.follows": "پی می‌گیرد", "account.follows": "پی می‌گیرد",
"account.follows.empty": "این کاربر هنوز هیچ کسی را پی نمی‌گیرد.", "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.",
"account.follows_you": "پیگیر شماست", "account.follows_you": "پیگیر شماست",
"account.hide_reblogs": "پنهان کردن بازبوق‌های @{name}", "account.hide_reblogs": "نهفتن بازبوق‌های @{name}",
"account.last_status": "آخرین فعالیت", "account.last_status": "آخرین فعالیت",
"account.link_verified_on": "مالکیت این نشانی در تاریخ {date} بررسی شد", "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد",
"account.locked_info": "این حساب خصوصی است. صاحب این حساب تصمیم می‌گیرد که چه کسی می‌تواند پیگیرش باشد.", "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی بتواند پیگیرش باشد.",
"account.media": "عکس و ویدیو", "account.media": "رسانه",
"account.mention": "نام‌بردن از @{name}", "account.mention": "نام‌بردن از @{name}",
"account.moved_to": "{name} منتقل شده است به:", "account.moved_to": "{name} منتقل شده به:",
"account.mute": "بی‌صدا کردن @{name}", "account.mute": "خموشی @{name}",
"account.mute_notifications": "بی‌صداکردن اعلان‌ها از طرف @{name}", "account.mute_notifications": "خموشی اعلان‌ها از @{name}",
"account.muted": "بی‌صداشده", "account.muted": "خموش",
"account.never_active": "هرگز", "account.never_active": "هرگز",
"account.posts": "نوشته‌ها", "account.posts": "نوشته‌ها",
"account.posts_with_replies": "نوشته‌ها و پاسخ‌ها", "account.posts_with_replies": "نوشته‌ها و پاسخ‌ها",
"account.report": "گزارش @{name}", "account.report": "گزارش @{name}",
"account.requested": "در انتظار پذیرش", "account.requested": "منتظر پذیرش. برای لغو درخواست پی‌گیری کلیک کنید",
"account.share": "هم‌رسانی نمایهٔ @{name}", "account.share": "هم‌رسانی نمایهٔ @{name}",
"account.show_reblogs": شان‌دادن بازبوق‌های @{name}", "account.show_reblogs": مایش بازبوق‌های @{name}",
"account.unblock": "رفع انسداد @{name}", "account.unblock": "رفع انسداد @{name}",
"account.unblock_domain": "رفع پنهان‌سازی از {domain}", "account.unblock_domain": "رفع نهفتن {domain}",
"account.unendorse": "نهفتن از نمایه", "account.unendorse": "معرّفی نکردن در نمایه",
"account.unfollow": "پایان پیگیری", "account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}", "account.unmute": "رفع خموشی @{name}",
"account.unmute_notifications": "باصداکردن اعلان‌ها از طرف @{name}", "account.unmute_notifications": "رفع خموشی اعلان‌ها از @{name}",
"alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره تلاش کنید.", "alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره بیازمایید.",
"alert.rate_limited.title": "محدودیت تعداد", "alert.rate_limited.title": "محدودیت تعداد",
"alert.unexpected.message": "خطای پیش‌بینی‌نشده‌ای رخ داد.", "alert.unexpected.message": "خطایی غیرمنتظره رخ داد.",
"alert.unexpected.title": "ای وای!", "alert.unexpected.title": "ای وای!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} در هفته", "autosuggest_hashtag.per_week": "{count} در هفته",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
"bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.", "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
@ -50,18 +52,19 @@
"bundle_modal_error.close": "بستن", "bundle_modal_error.close": "بستن",
"bundle_modal_error.message": "هنگام بازکردن این بخش خطایی رخ داد.", "bundle_modal_error.message": "هنگام بازکردن این بخش خطایی رخ داد.",
"bundle_modal_error.retry": "تلاش دوباره", "bundle_modal_error.retry": "تلاش دوباره",
"column.blocks": "کاربران مسدودشده", "column.blocks": "کاربران مسدود",
"column.bookmarks": "نشانک‌ها",
"column.community": "نوشته‌های محلی", "column.community": "نوشته‌های محلی",
"column.direct": "پیغام‌های خصوصی", "column.direct": "پیام‌های خصوصی",
"column.directory": "مرور نمایه‌ها", "column.directory": "مرور نمایه‌ها",
"column.domain_blocks": "دامین‌های پنهان‌شده", "column.domain_blocks": "دامنه‌های نهفته",
"column.favourites": "پسندیده‌ها", "column.favourites": "پسندیده‌ها",
"column.follow_requests": "درخواست‌های پیگیری", "column.follow_requests": "درخواست‌های پیگیری",
"column.home": "خانه", "column.home": "خانه",
"column.lists": "فهرست‌ها", "column.lists": "فهرست‌ها",
"column.mutes": "کاربران بی‌صداشده", "column.mutes": "کاربران خموش",
"column.notifications": "اعلان‌ها", "column.notifications": "اعلان‌ها",
"column.pins": "نوشته‌های ثابت", "column.pins": "بوق‌های ثابت",
"column.public": "نوشته‌های همه‌جا", "column.public": "نوشته‌های همه‌جا",
"column_back_button.label": "بازگشت", "column_back_button.label": "بازگشت",
"column_header.hide_settings": "نهفتن تنظیمات", "column_header.hide_settings": "نهفتن تنظیمات",
@ -71,56 +74,58 @@
"column_header.show_settings": "نمایش تنظیمات", "column_header.show_settings": "نمایش تنظیمات",
"column_header.unpin": "رهاکردن", "column_header.unpin": "رهاکردن",
"column_subheading.settings": "تنظیمات", "column_subheading.settings": "تنظیمات",
"community.column_settings.media_only": "فقط عکس و ویدیو", "community.column_settings.media_only": "فقط رسانه",
"compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.", "compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.",
"compose_form.direct_message_warning_learn_more": "بیشتر بدانید", "compose_form.direct_message_warning_learn_more": "بیشتر بدانید",
"compose_form.hashtag_warning": "از آن‌جا که این بوق فهرست‌نشده است، در نتایج جستجوی هشتگ‌ها پیدا نخواهد شد. تنها بوق‌های عمومی را می‌توان با جستجوی هشتگ پیدا کرد.", "compose_form.hashtag_warning": "از آن‌جا که این بوق فهرست‌نشده است، در نتایج جست‌وجوی هشتگ‌ها پیدا نخواهد شد. تنها بوق‌های عمومی را می‌توان با جست‌وجوی هشتگ یافت.",
"compose_form.lock_disclaimer": "حساب شما {locked} نیست. هر کسی می‌تواند پیگیر شما شود و نوشته‌های ویژهٔ پیگیران شما را ببیند.", "compose_form.lock_disclaimer": "حسابتان {locked} نیست. هر کسی می‌تواند پیگیرتان شده و فرسته‌های ویژهٔ پیگیرانتان را ببیند.",
"compose_form.lock_disclaimer.lock": "قفل", "compose_form.lock_disclaimer.lock": "قفل",
"compose_form.placeholder": "تازه چه خبر؟", "compose_form.placeholder": "تازه چه خبر؟",
"compose_form.poll.add_option": "افزودن گزینه", "compose_form.poll.add_option": "افزودن گزینه",
"compose_form.poll.duration": "مدت نظرسنجی", "compose_form.poll.duration": "مدت نظرسنجی",
"compose_form.poll.option_placeholder": "گزینهٔ {number}", "compose_form.poll.option_placeholder": "گزینهٔ {number}",
"compose_form.poll.remove_option": "حذف این گزینه", "compose_form.poll.remove_option": "برداشتن این گزینه",
"compose_form.poll.switch_to_multiple": "تبدیل به نظرسنجی چندگزینه‌ای",
"compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای",
"compose_form.publish": "بوق", "compose_form.publish": "بوق",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "علامت‌گذاری به عنوان حساس", "compose_form.sensitive.hide": "علامت‌گذاری به عنوان حساس",
"compose_form.sensitive.marked": "این تصویر به عنوان حساس علامت‌گذاری شده", "compose_form.sensitive.marked": "رسانه به عنوان حساس علامت‌گذاری شده",
"compose_form.sensitive.unmarked": "این تصویر به عنوان حساس علامت‌گذاری نشده", "compose_form.sensitive.unmarked": "رسانه به عنوان حساس علامت‌گذاری نشده",
"compose_form.spoiler.marked": "نوشته پشت هشدار محتوا پنهان است", "compose_form.spoiler.marked": "نوشته پشت هشدار پنهان است",
"compose_form.spoiler.unmarked": "نوشته پنهان نیست", "compose_form.spoiler.unmarked": "نوشته پنهان نیست",
"compose_form.spoiler_placeholder": "هشدار محتوا", "compose_form.spoiler_placeholder": "هشدارتان را این‌جا بنویسید",
"confirmation_modal.cancel": "بی‌خیال", "confirmation_modal.cancel": "بی‌خیال",
"confirmations.block.block_and_report": "مسدودسازی و گزارش", "confirmations.block.block_and_report": "مسدودسازی و گزارش",
"confirmations.block.confirm": "مسدود کن", "confirmations.block.confirm": "مسدود کن",
"confirmations.block.message": "آیا واقعاً می‌خواهید {name} را مسدود کنید؟", "confirmations.block.message": "مطمئنید که می‌خواهید {name} را مسدود کنید؟",
"confirmations.delete.confirm": "پاک کن", "confirmations.delete.confirm": "پاک کن",
"confirmations.delete.message": "آیا واقعاً می‌خواهید این نوشته را پاک کنید؟", "confirmations.delete.message": "آیا مطمئنید که می‌خواهید این بوق را پاک کنید؟",
"confirmations.delete_list.confirm": "پاک کن", "confirmations.delete_list.confirm": "پاک کن",
"confirmations.delete_list.message": "آیا واقعاً می‌خواهید این فهرست را برای همیشه پاک کنید؟", "confirmations.delete_list.message": "مطمئنید می‌خواهید این فهرست را برای همیشه پاک کنید؟",
"confirmations.domain_block.confirm": "پنهان‌سازی کل دامین", "confirmations.domain_block.confirm": "نهفتن تمام دامنه",
"confirmations.domain_block.message": "آیا جدی جدی می‌خواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقت‌ها مسدودکردن یا بی‌صداکردن چند حساب کاربری خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ نوشته‌ای را از این دامین در فهرست نوشته‌های عمومی یا اعلان‌هایتان نخواهید دید. پیگیران شما از این دامین هم حذف خواهد شد.", "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدودسازی یا خموشیدن چند حساب خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ نوشته‌ای را از این دامنه در فهرست نوشته‌های عمومی یا اعلان‌هایتان نخواهید دید. پیگیرانتان از این دامنه هم حذف خواهند شد.",
"confirmations.logout.confirm": "خروج", "confirmations.logout.confirm": "خروج",
"confirmations.logout.message": "آیا مطمئنید که می‌خواهید خارج شوید؟", "confirmations.logout.message": "مطمئنید می‌خواهید خارج شوید؟",
"confirmations.mute.confirm": "بی‌صدا کن", "confirmations.mute.confirm": "خموشی",
"confirmations.mute.explanation": "این کار نوشته‌های آن‌ها و نوشته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند نوشته‌های شما را ببینند و شما را پی بگیرند.", "confirmations.mute.explanation": "این کار فرسته‌های آن‌ها و فرسته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند فرسته‌های شما را ببینند و شما را پی بگیرند.",
"confirmations.mute.message": "آیا واقعاً می‌خواهید {name} را بی‌صدا کنید؟", "confirmations.mute.message": "مطمئنید می‌خواهید {name} را بخموشید؟",
"confirmations.redraft.confirm": "پاک‌کردن و بازنویسی", "confirmations.redraft.confirm": "پاک‌کردن و بازنویسی",
"confirmations.redraft.message": "آیا واقعاً می‌خواهید این نوشته را پاک کنید و آن را از نو بنویسید؟ با این کار بازبوق‌ها و پسندیده‌شدن‌های آن از دست می‌رود و پاسخ‌ها به آن بی‌مرجع می‌شود.", "confirmations.redraft.message": "مطمئنید که می‌خواهید این بوق را پاک کنید و از نو بنویسید؟ با این کار بازبوق‌ها و پسندهای آن از دست می‌رود و پاسخ‌ها به آن بی‌مرجع می‌شود.",
"confirmations.reply.confirm": "پاسخ", "confirmations.reply.confirm": "پاسخ",
"confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. آیا همین را می‌خواهید؟", "confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. می‌خواهید ادامه دهید؟",
"confirmations.unfollow.confirm": "لغو پیگیری", "confirmations.unfollow.confirm": "پایان پیگیری",
"confirmations.unfollow.message": "آیا واقعاً می‌خواهید به پیگیری از {name} پایان دهید؟", "confirmations.unfollow.message": "مطمئنید که می‌خواهید به پیگیری از {name} پایان دهید؟",
"conversation.delete": "حذف گفتگو", "conversation.delete": "حذف گفتگو",
"conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده", "conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده",
"conversation.open": "دیدن گفتگو", "conversation.open": "دیدن گفتگو",
"conversation.with": "با {names}", "conversation.with": "با {names}",
"directory.federated": "از سرورهای همسایه", "directory.federated": "از کارسازهای شناخته‌شده",
"directory.local": "تنها از {domain}", "directory.local": "تنها از {domain}",
"directory.new_arrivals": "تازه‌واردان", "directory.new_arrivals": "تازه‌واردان",
"directory.recently_active": "کاربران فعال اخیر", "directory.recently_active": "کاربران فعال اخیر",
"embed.instructions": "برای جاگذاری این نوشته در سایت خودتان، کد زیر را کپی کنید.", "embed.instructions": "برای جاگذاری این بوق در سایت خودتان، کد زیر را کپی کنید.",
"embed.preview": "نوشتهٔ جاگذاری‌شده این گونه به نظر خواهد رسید:", "embed.preview": "این گونه دیده خواهد شد:",
"emoji_button.activity": "فعالیت", "emoji_button.activity": "فعالیت",
"emoji_button.custom": "سفارشی", "emoji_button.custom": "سفارشی",
"emoji_button.flags": "پرچم‌ها", "emoji_button.flags": "پرچم‌ها",
@ -130,42 +135,43 @@
"emoji_button.not_found": "این‌جا شکلکی نیست!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "این‌جا شکلکی نیست!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "اشیا", "emoji_button.objects": "اشیا",
"emoji_button.people": "مردم", "emoji_button.people": "مردم",
"emoji_button.recent": "زیاد به‌کاررفته", "emoji_button.recent": "پراستفاده",
"emoji_button.search": "جستجو...", "emoji_button.search": "جستجو...",
"emoji_button.search_results": "نتایج جستجو", "emoji_button.search_results": "نتایج جستجو",
"emoji_button.symbols": "نمادها", "emoji_button.symbols": "نمادها",
"emoji_button.travel": "سفر و مکان", "emoji_button.travel": "سفر و مکان",
"empty_column.account_timeline": "هیچ بوقی این‌جا نیست!", "empty_column.account_timeline": "هیچ بوقی این‌جا نیست!",
"empty_column.account_unavailable": "نمایهٔ ناموجود", "empty_column.account_unavailable": "نمایهٔ ناموجود",
"empty_column.blocks": "شما هنوز هیچ کسی را مسدود نکرده‌اید.", "empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.",
"empty_column.bookmarked_statuses": "هنوز هیچ بوق نشان‌شده‌ای ندارید. وقتی بوقی را نشان‌کنید، این‌جا دیده خواهد شد.",
"empty_column.community": "فهرست نوشته‌های محلی خالی است. چیزی بنویسید تا چرخش بچرخد!", "empty_column.community": "فهرست نوشته‌های محلی خالی است. چیزی بنویسید تا چرخش بچرخد!",
"empty_column.direct": "شما هیچ پیغام مستقیمی ندارید. اگر چنین پیغامی بگیرید یا بفرستید این‌جا نمایش خواهد یافت.", "empty_column.direct": "هنوز هیچ پیام مستقیمی ندارید. هروقت چنین پیامی بگیرید یا بفرستید این‌جا نمایش خواهد یافت.",
"empty_column.domain_blocks": "هنوز هیچ دامینی پنهان نشده است.", "empty_column.domain_blocks": "هنوز هیچ دامنهای پنهان نشده است.",
"empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیده‌اید. وقتی بوقی را بپسندید، این‌جا نمایش خواهد یافت.", "empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیده‌اید. وقتی بوقی را بپسندید، این‌جا نمایش خواهد یافت.",
"empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش این‌جا نمایش خواهد یافت.", "empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش این‌جا نمایش خواهد یافت.",
"empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیری‌ای ندارید. وقتی چنین درخواستی بگیرید، این‌جا نمایش خواهد یافت.", "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیری‌ای ندارید. وقتی چنین درخواستی بگیرید، این‌جا نمایش خواهد یافت.",
"empty_column.hashtag": "هنوز هیچ چیزی با این برچسب (هشتگ) نیست.", "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.",
"empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.", "empty_column.home": "فهرست خانگی شما خالی است! {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.",
"empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا", "empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا",
"empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بنویسند، این‌جا ظاهر خواهد شد.", "empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بفرستند، این‌جا ظاهر خواهد شد.",
"empty_column.lists": "شما هنوز هیچ فهرستی ندارید. اگر فهرستی بسازید، این‌جا نمایش خواهد یافت.", "empty_column.lists": "هنوز هیچ فهرستی ندارید. هنگامی که فهرستی بسازید، این‌جا دیده خواهد شد.",
"empty_column.mutes": "شما هنوز هیچ کاربری را بی‌صدا نکرده‌اید.", "empty_column.mutes": "هنوز هیچ کاربری را خموش نکرده‌اید.",
"empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشته‌های دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
"empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران سرورهای دیگر را پی بگیرید تا این‌جا پر شود", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا این‌جا پر شود",
"error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.",
"error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر آن هم کمکی نکرد، همچنان شاید بتوانید با ماستدون از راه یکی از اپ‌های آن کار کنید.", "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستدون از راه یک مرورگر دیگر یا با یکی از اپ‌های آن کار کنید.",
"errors.unexpected_crash.copy_stacktrace": "کپی جزئیات اشکال", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال",
"errors.unexpected_crash.report_issue": "گزارش اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل",
"follow_request.authorize": "اجازه دهید", "follow_request.authorize": "اجازه دهید",
"follow_request.reject": "اجازه ندهید", "follow_request.reject": "رد کنید",
"getting_started.developers": "برای برنامه‌نویسان", "getting_started.developers": "توسعه‌دهندگان",
"getting_started.directory": "فهرست گزیدهٔ کاربران", "getting_started.directory": "فهرست گزیدهٔ کاربران",
"getting_started.documentation": "راهنما", "getting_started.documentation": "مستندات",
"getting_started.heading": "آغاز کنید", "getting_started.heading": "آغاز کنید",
"getting_started.invite": "دعوت از دوستان", "getting_started.invite": "دعوت از دیگران",
"getting_started.open_source_notice": "ماستدون یک نرم‌افزار آزاد است. می‌توانید در ساخت آن مشارکت کنید یا مشکلاتش را در {github} گزارش دهید.", "getting_started.open_source_notice": "ماستودون نرم‌افزاری آزاد است. می‌توانید روی {github} در آن مشارکت کرده یا مشکلاتش را گزارش دهید.",
"getting_started.security": "امنیت", "getting_started.security": "تنظیمات حساب",
"getting_started.terms": "شرایط استفاده", "getting_started.terms": "شرایط خدمات",
"hashtag.column_header.tag_mode.all": "و {additional}", "hashtag.column_header.tag_mode.all": "و {additional}",
"hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}",
"hashtag.column_header.tag_mode.none": "بدون {additional}", "hashtag.column_header.tag_mode.none": "بدون {additional}",
@ -174,41 +180,41 @@
"hashtag.column_settings.tag_mode.all": "همهٔ این‌ها", "hashtag.column_settings.tag_mode.all": "همهٔ این‌ها",
"hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها",
"hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها",
"hashtag.column_settings.tag_toggle": "برچسب‌های بیشتری به این ستون بیفزایید", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون",
"home.column_settings.basic": "اصلی", "home.column_settings.basic": "پایه‌ای",
"home.column_settings.show_reblogs": "نمایش بازبوق‌ها", "home.column_settings.show_reblogs": "نمایش بازبوق‌ها",
"home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها",
"intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
"intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
"intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}", "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
"introduction.federation.action": "بعدی", "introduction.federation.action": "بعدی",
"introduction.federation.federated.headline": "فهرست همهٔ سرورها", "introduction.federation.federated.headline": "همگانی",
"introduction.federation.federated.text": "نوشته‌های عمومی سرورهای دیگر در این فهرست نمایش می‌یابند.", "introduction.federation.federated.text": "نوشته‌های عمومی کارسازهای دیگر در این فهرست نمایش می‌یابند.",
"introduction.federation.home.headline": "خانه", "introduction.federation.home.headline": "خانه",
"introduction.federation.home.text": "نوشته‌های کسانی که شما آن‌ها را پی می‌گیرید این‌جا نمایش می‌یابند. شما می‌توانید هر کسی را از هر سروری پی بگیرید!", "introduction.federation.home.text": "فرسته‌های کسانی که شما آن‌ها را پی می‌گیرید این‌جا نمایش می‌یابند. شما می‌توانید هر کسی را روی هر کارسازی پی بگیرید!",
"introduction.federation.local.headline": "محلی", "introduction.federation.local.headline": "محلّی",
"introduction.federation.local.text": "نوشته‌های عمومی کسانی که روی سرور شما هستند در فهرست نوشته‌های محلی نمایش می‌یابند.", "introduction.federation.local.text": "فرسته‌های عمومی کسانی که روی کارساز شما هستند در فهرست نوشته‌های محلی نمایش می‌یابند.",
"introduction.interactions.action": "پایان خودآموز!", "introduction.interactions.action": "پایان خودآموز!",
"introduction.interactions.favourite.headline": "پسندیدن", "introduction.interactions.favourite.headline": "پسندیدن",
"introduction.interactions.favourite.text": "با پسندیدن یک بوق، شما آن را برای آینده ذخیره می‌کنید و به نویسنده می‌گویید که از بوقش خوشتان آمده.", "introduction.interactions.favourite.text": "با پسندیدن یک بوق، شما آن را برای آینده ذخیره می‌کنید و به نویسنده می‌گویید که از بوقش خوشتان آمده.",
"introduction.interactions.reblog.headline": "بازبوقیدن", "introduction.interactions.reblog.headline": "بازبوقیدن",
"introduction.interactions.reblog.text": "اگر بخواهید نوشته‌ای را با پیگیران خودتان به اشتراک بگذارید، آن را بازمی‌بوقید.", "introduction.interactions.reblog.text": "اگر بخواهید نوشته‌ای را با پیگیران خودتان به اشتراک بگذارید، آن را بازمی‌بوقید.",
"introduction.interactions.reply.headline": "پاسخ", "introduction.interactions.reply.headline": "پاسخ",
"introduction.interactions.reply.text": "شما می‌توانید به بوق‌های خودتان و دیگران پاسخ دهید، تا همهٔ این بوق‌ها به شکل رشتهٔ به‌هم‌پیوسته‌ای در یک گفتگو درآیند.", "introduction.interactions.reply.text": "می‌توانید به بوق‌های خودتان و دیگران پاسخ دهید، تا در یک گفتگو به هم زنجیر شوند.",
"introduction.welcome.action": "بزن بریم!", "introduction.welcome.action": "بزن بریم!",
"introduction.welcome.headline": "نخستین گام‌ها", "introduction.welcome.headline": "نخستین گام‌ها",
"introduction.welcome.text": "به دنیای شبکه‌های اجتماعی غیرمتمرکز خوش آمدید! به زودی می‌توانید نوشته‌های خودتان را منتشر کنید و با دوستانتان که روی سرورهای مختلفی هستند حرف بزنید. ولی این سرور، {domain}، با بقیه فرق دارد زیرا حساب شما روی آن ساخته شده است، پس نامش را یادتان نگه دارید.", "introduction.welcome.text": "به دنیای شبکه‌های اجتماعی غیرمتمرکز خوش آمدید! به زودی می‌توانید نوشته‌هایتان را منتشر کرده و با دوستانتان روی دامنهٔ وسیعی از کارسازها حرف بزنید. ولی این کارساز، {domain}، با بقیه فرق دارد، چرا که میزبان نمایهٔ شماست، پس نامش را به خاطر بسپارید.",
"keyboard_shortcuts.back": "برای بازگشت", "keyboard_shortcuts.back": "برای بازگشت",
"keyboard_shortcuts.blocked": "برای گشودن کاربران بی‌صداشده", "keyboard_shortcuts.blocked": "برای گشودن فهرست کاربران خموش",
"keyboard_shortcuts.boost": "برای بازبوقیدن", "keyboard_shortcuts.boost": "برای بازبوقیدن",
"keyboard_shortcuts.column": "برای برجسته‌کردن یک نوشته در یکی از ستون‌ها", "keyboard_shortcuts.column": "برای تمرکز روی یک بوق در یکی از ستون‌ها",
"keyboard_shortcuts.compose": "برای فعال‌کردن کادر نوشتهٔ تازه", "keyboard_shortcuts.compose": "برای تمرکز روی محیط نوشتن",
"keyboard_shortcuts.description": "توضیح", "keyboard_shortcuts.description": "توضیح",
"keyboard_shortcuts.direct": "برای گشودن ستون پیغام‌های مستقیم", "keyboard_shortcuts.direct": "برای گشودن ستون پیغام‌های مستقیم",
"keyboard_shortcuts.down": "برای پایینرفتن در فهرست", "keyboard_shortcuts.down": "برای پایین رفتن در فهرست",
"keyboard_shortcuts.enter": "برای گشودن نوشته", "keyboard_shortcuts.enter": "برای گشودن نوشته",
"keyboard_shortcuts.favourite": "برای پسندیدن", "keyboard_shortcuts.favourite": "برای پسندیدن",
"keyboard_shortcuts.favourites": "برای گشودن پیغام‌های پسندیده‌شده", "keyboard_shortcuts.favourites": "برای گشودن فهرست پسندیده‌ها",
"keyboard_shortcuts.federated": "برای گشودن فهرست نوشته‌های همه‌جا", "keyboard_shortcuts.federated": "برای گشودن فهرست نوشته‌های همه‌جا",
"keyboard_shortcuts.heading": "میان‌برهای صفحه‌کلید", "keyboard_shortcuts.heading": "میان‌برهای صفحه‌کلید",
"keyboard_shortcuts.home": "برای گشودن ستون اصلی پیگیری‌ها", "keyboard_shortcuts.home": "برای گشودن ستون اصلی پیگیری‌ها",
@ -216,31 +222,32 @@
"keyboard_shortcuts.legend": "برای نمایش این راهنما", "keyboard_shortcuts.legend": "برای نمایش این راهنما",
"keyboard_shortcuts.local": "برای گشودن فهرست نوشته‌های محلی", "keyboard_shortcuts.local": "برای گشودن فهرست نوشته‌های محلی",
"keyboard_shortcuts.mention": "برای نام‌بردن از نویسنده", "keyboard_shortcuts.mention": "برای نام‌بردن از نویسنده",
"keyboard_shortcuts.muted": "برای گشودن فهرست کاربران بی‌صداشده", "keyboard_shortcuts.muted": "برای گشودن فهرست کاربران خموش",
"keyboard_shortcuts.my_profile": "برای گشودن صفحهٔ نمایهٔ شما", "keyboard_shortcuts.my_profile": "برای گشودن نمایه‌تان",
"keyboard_shortcuts.notifications": "برای گشودن ستون اعلان‌ها", "keyboard_shortcuts.notifications": "برای گشودن ستون اعلان‌ها",
"keyboard_shortcuts.pinned": "برای گشودن فهرست نوشته‌‌های ثابت", "keyboard_shortcuts.open_media": "برای باز کردن رسانه",
"keyboard_shortcuts.profile": "گشودن نمایهٔ نویسنده", "keyboard_shortcuts.pinned": "برای گشودن فهرست بوق‌های ثابت",
"keyboard_shortcuts.reply": "برای پاسخ‌دادن", "keyboard_shortcuts.profile": "برای گشودن نمایهٔ نویسنده",
"keyboard_shortcuts.reply": "برای پاسخ",
"keyboard_shortcuts.requests": "برای گشودن فهرست درخواست‌های پیگیری", "keyboard_shortcuts.requests": "برای گشودن فهرست درخواست‌های پیگیری",
"keyboard_shortcuts.search": "برای فعال‌کردن جستجو", "keyboard_shortcuts.search": "برای تمرکز روی جستجو",
"keyboard_shortcuts.start": "برای گشودن ستون «آغاز کنید»", "keyboard_shortcuts.start": "برای گشودن ستون «آغاز کنید»",
"keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا", "keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا",
"keyboard_shortcuts.toggle_sensitivity": "برای نمایش/نهفتن عکس و ویدیو", "keyboard_shortcuts.toggle_sensitivity": "برای نمایش/نهفتن رسانه",
"keyboard_shortcuts.toot": "برای آغاز یک بوق تازه", "keyboard_shortcuts.toot": "برای آغاز یک بوق تازه",
"keyboard_shortcuts.unfocus": "برای برداشتن توجه از نوشتن/جستجو", "keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو",
"keyboard_shortcuts.up": "برای بالا رفتن در فهرست", "keyboard_shortcuts.up": "برای بالا رفتن در فهرست",
"lightbox.close": "بستن", "lightbox.close": "بستن",
"lightbox.next": "بعدی", "lightbox.next": "بعدی",
"lightbox.previous": "قبلی", "lightbox.previous": "قبلی",
"lightbox.view_context": "نمایش گفتگو", "lightbox.view_context": "نمایش گفتگو",
"lists.account.add": "افزودن به فهرست", "lists.account.add": "افزودن به فهرست",
"lists.account.remove": "پاک‌کردن از فهرست", "lists.account.remove": "برداشتن از فهرست",
"lists.delete": "حذف فهرست", "lists.delete": "حذف فهرست",
"lists.edit": "ویرایش فهرست", "lists.edit": "ویرایش فهرست",
"lists.edit.submit": "تغییر عنوان", "lists.edit.submit": "تغییر عنوان",
"lists.new.create": "افزودن فهرست", "lists.new.create": "افزودن فهرست",
"lists.new.title_placeholder": "نام فهرست تازه", "lists.new.title_placeholder": "عنوان فهرست تازه",
"lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.search": "بین کسانی که پی می‌گیرید بگردید",
"lists.subheading": "فهرست‌های شما", "lists.subheading": "فهرست‌های شما",
"load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}",
@ -251,39 +258,43 @@
"mute_modal.hide_notifications": "اعلان‌های این کاربر پنهان شود؟", "mute_modal.hide_notifications": "اعلان‌های این کاربر پنهان شود؟",
"navigation_bar.apps": "اپ‌های موبایل", "navigation_bar.apps": "اپ‌های موبایل",
"navigation_bar.blocks": "کاربران مسدودشده", "navigation_bar.blocks": "کاربران مسدودشده",
"navigation_bar.bookmarks": "نشانک‌ها",
"navigation_bar.community_timeline": "نوشته‌های محلی", "navigation_bar.community_timeline": "نوشته‌های محلی",
"navigation_bar.compose": "نوشتن بوق تازه", "navigation_bar.compose": "نوشتن بوق تازه",
"navigation_bar.direct": "پیغام‌های مستقیم", "navigation_bar.direct": "پیام‌های مستقیم",
"navigation_bar.discover": "گشت و گذار", "navigation_bar.discover": "گشت و گذار",
"navigation_bar.domain_blocks": "دامین‌های پنهان‌شده", "navigation_bar.domain_blocks": "دامنه‌های نهفته",
"navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.edit_profile": "ویرایش نمایه",
"navigation_bar.favourites": "پسندیده‌ها", "navigation_bar.favourites": "پسندیده‌ها",
"navigation_bar.filters": "واژگان بی‌صداشده", "navigation_bar.filters": "واژگان خموش",
"navigation_bar.follow_requests": "درخواست‌های پیگیری", "navigation_bar.follow_requests": "درخواست‌های پیگیری",
"navigation_bar.follows_and_followers": "پیگیری‌ها و پیگیران", "navigation_bar.follows_and_followers": "پیگیری‌ها و پیگیران",
"navigation_bar.info": "دربارهٔ این سرور", "navigation_bar.info": "دربارهٔ این کارساز",
"navigation_bar.keyboard_shortcuts": "میان‌برهای صفحه‌کلید", "navigation_bar.keyboard_shortcuts": "میان‌برها",
"navigation_bar.lists": "فهرست‌ها", "navigation_bar.lists": "فهرست‌ها",
"navigation_bar.logout": "خروج", "navigation_bar.logout": "خروج",
"navigation_bar.mutes": "کاربران بی‌صداشده", "navigation_bar.mutes": "کاربران خموشیده",
"navigation_bar.personal": "شخصی", "navigation_bar.personal": "شخصی",
"navigation_bar.pins": "نوشته‌های ثابت", "navigation_bar.pins": "بوق‌های ثابت",
"navigation_bar.preferences": "ترجیحات", "navigation_bar.preferences": "ترجیحات",
"navigation_bar.public_timeline": "نوشته‌های همه‌جا", "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
"navigation_bar.security": "امنیت", "navigation_bar.security": "امنیت",
"notification.favourite": "{name} نوشتهٔ شما را پسندید", "notification.favourite": "{name} نوشتهٔ شما را پسندید",
"notification.follow": "{name} پیگیر شما شد", "notification.follow": "{name} پیگیرتان شد",
"notification.follow_request": "{name} می‌خواهد پیگیر شما باشد",
"notification.mention": "{name} از شما نام برد", "notification.mention": "{name} از شما نام برد",
"notification.own_poll": "نظرسنجی شما به پایان رسید",
"notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است",
"notification.reblog": "{name} نوشتهٔ شما را بازبوقید", "notification.reblog": "{name} نوشتهٔ شما را بازبوقید",
"notifications.clear": "پاک‌کردن اعلان‌ها", "notifications.clear": "پاک‌کردن اعلان‌ها",
"notifications.clear_confirmation": "واقعاً می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟", "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟",
"notifications.column_settings.alert": "اعلان در کامپیوتر", "notifications.column_settings.alert": "اعلان‌های میزکار",
"notifications.column_settings.favourite": "پسندیده‌ها:", "notifications.column_settings.favourite": "پسندیده‌ها:",
"notifications.column_settings.filter_bar.advanced": "نمایش همهٔ گروهها", "notifications.column_settings.filter_bar.advanced": "نمایش همهٔ دستهها",
"notifications.column_settings.filter_bar.category": "فیلتر سریع", "notifications.column_settings.filter_bar.category": "نوار پالایش سریع",
"notifications.column_settings.filter_bar.show": "نمایش", "notifications.column_settings.filter_bar.show": "نمایش",
"notifications.column_settings.follow": "پیگیران تازه:", "notifications.column_settings.follow": "پیگیران تازه:",
"notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:",
"notifications.column_settings.mention": "نام‌بردن‌ها:", "notifications.column_settings.mention": "نام‌بردن‌ها:",
"notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.poll": "نتایج نظرسنجی:",
"notifications.column_settings.push": "اعلان‌ها از سمت سرور", "notifications.column_settings.push": "اعلان‌ها از سمت سرور",
@ -292,9 +303,9 @@
"notifications.column_settings.sound": "پخش صدا", "notifications.column_settings.sound": "پخش صدا",
"notifications.filter.all": "همه", "notifications.filter.all": "همه",
"notifications.filter.boosts": "بازبوق‌ها", "notifications.filter.boosts": "بازبوق‌ها",
"notifications.filter.favourites": "پسندیده‌ها", "notifications.filter.favourites": "پسندها",
"notifications.filter.follows": "پیگیری‌ها", "notifications.filter.follows": "پیگیری‌ها",
"notifications.filter.mentions": "گفتگوها", "notifications.filter.mentions": "نام‌بردن‌ها",
"notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.polls": "نتایج نظرسنجی",
"notifications.group": "{count} اعلان", "notifications.group": "{count} اعلان",
"poll.closed": "پایان‌یافته", "poll.closed": "پایان‌یافته",
@ -305,9 +316,9 @@
"poll.voted": "شما به این گزینه رأی دادید", "poll.voted": "شما به این گزینه رأی دادید",
"poll_button.add_poll": "افزودن نظرسنجی", "poll_button.add_poll": "افزودن نظرسنجی",
"poll_button.remove_poll": "حذف نظرسنجی", "poll_button.remove_poll": "حذف نظرسنجی",
"privacy.change": "تنظیم حریم خصوصی نوشته‌ها", "privacy.change": "تنظیم محرمانگی نوشته",
"privacy.direct.long": "تنها به کاربران نام‌برده‌شده نشان بده", "privacy.direct.long": "تنها به کاربران نام‌برده‌شده نشان بده",
"privacy.direct.short": "مستقیم", "privacy.direct.short": "خصوصی",
"privacy.private.long": "تنها به پیگیران نشان بده", "privacy.private.long": "تنها به پیگیران نشان بده",
"privacy.private.short": "خصوصی", "privacy.private.short": "خصوصی",
"privacy.public.long": "نمایش در فهرست عمومی", "privacy.public.long": "نمایش در فهرست عمومی",
@ -324,100 +335,105 @@
"relative_time.seconds": "{number} ثانیه", "relative_time.seconds": "{number} ثانیه",
"reply_indicator.cancel": "لغو", "reply_indicator.cancel": "لغو",
"report.forward": "فرستادن به {target}", "report.forward": "فرستادن به {target}",
"report.forward_hint": "این حساب در سرور دیگری ثبت شده. آیا می‌خواهید رونوشتی از این گزارش به طور ناشناس به آن‌جا هم فرستاده شود؟", "report.forward_hint": "این حساب در کارساز دیگری ثبت شده. آیا می‌خواهید رونوشتی ناشناس از این گزارش به آن‌جا هم فرستاده شود؟",
"report.hint": "این گزارش به مدیران سرور شما فرستاده خواهد شد. می‌توانید دلیل گزارش‌دادن این حساب را در این‌جا بنویسید:", "report.hint": "این گزارش به مدیران کارسازتان فرستاده خواهد شد. می‌توانید دلیل گزارش این حساب را در ادامه بنویسید:",
"report.placeholder": "توضیح اضافه", "report.placeholder": "توضیح اضافه",
"report.submit": "بفرست", "report.submit": "بفرست",
"report.target": "گزارش‌دادن", "report.target": "در حال گزارش {target}",
"search.placeholder": "جستجو", "search.placeholder": "جستجو",
"search_popout.search_format": "راهنمای جستجوی پیشرفته", "search_popout.search_format": "راهنمای جستجوی پیشرفته",
"search_popout.tips.full_text": "جستجوی متنی ساده می‌تواند بوق‌هایی که شما نوشته‌اید، پسندیده‌اید، بازبوقیده‌اید، یا در آن‌ها از شما نام برده شده است را پیدا کند. همچنین نام‌های کاربری، نام نمایش‌یافته، و هشتگ‌ها را هم شامل می‌شود.", "search_popout.tips.full_text": "جست‌وجوی متنی ساده وضعیت‌هایی که که نوشته، برگزیده، تقویت‌کرده یا در آن‌ها اشاره‌شده‌اید را به اضافهٔ نام‌های کاربری، نام‌های نمایشی و برچسب‌های مطابق برمی‌گرداند.",
"search_popout.tips.hashtag": "برچسب", "search_popout.tips.hashtag": "برچسب",
"search_popout.tips.status": "نوشته", "search_popout.tips.status": "وضعیت",
"search_popout.tips.text": "جستجوی متنی ساده برای نام‌ها، نام‌های کاربری، و برچسب‌ها", "search_popout.tips.text": "جست‌وجوی متنی ساده، نام‌های نمایشی، نام‌های کاربری، و برچسب‌ها را برمی‌گرداند",
"search_popout.tips.user": "کاربر", "search_popout.tips.user": "کاربر",
"search_results.accounts": "افراد", "search_results.accounts": "افراد",
"search_results.hashtags": "برچسب‌ها", "search_results.hashtags": "برچسب‌ها",
"search_results.statuses": "بوق‌ها", "search_results.statuses": "بوق‌ها",
"search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این سرور ماستدون ممکن نیست.", "search_results.statuses_fts_disabled": "جست‌وجوی بوق‌ها بر اساس محتوایشان روی این کارساز ماستودون به کار نیفتاده است.",
"search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
"status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن", "status.admin_account": "گشودن واسط مدیریت برای @{name}",
"status.admin_status": "این نوشته را در محیط مدیریت باز کن", "status.admin_status": "گشودن این وضعیت در واسط مدیریت",
"status.block": "مسدودسازی @{name}", "status.block": "انسداد @{name}",
"status.cancel_reblog_private": "حذف بازبوق", "status.bookmark": "نشانک",
"status.cannot_reblog": "این نوشته را نمی‌شود بازبوقید", "status.cancel_reblog_private": "ناتقویت",
"status.copy": "رونوشت‌برداری از نشانی این نوشته", "status.cannot_reblog": "این نوشته نمی‌تواند تقویت شود",
"status.delete": "پاک‌کردن", "status.copy": "رونوشت از پیوند به وضعیت",
"status.detailed_status": "نمایش کامل گفتگو", "status.delete": "حذف",
"status.direct": "پیغام مستقیم به @{name}", "status.detailed_status": "نمای گفت‌وگوی باجزییات",
"status.direct": "پیام خصوصی به @{name}",
"status.embed": "جاگذاری", "status.embed": "جاگذاری",
"status.favourite": "پسندیدن", "status.favourite": "برگزیدن",
"status.filtered": "فیلترشده", "status.filtered": "پالوده",
"status.load_more": یشتر نشان بده", "status.load_more": ار کردن بیشتر",
"status.media_hidden": "تصویر پنهان شده", "status.media_hidden": "رسانهٔ نهفته",
"status.mention": "نام‌بردن از @{name}", "status.mention": "اشاره به @{name}",
"status.more": "بیشتر", "status.more": "بیشتر",
"status.mute": "بی‌صدا کردن @{name}", "status.mute": "خموشی @{name}",
"status.mute_conversation": "بی‌صداکردن گفتگو", "status.mute_conversation": "خموشی گفت‌وگو",
"status.open": "این نوشته را باز کن", "status.open": "گسترش این وضعیت",
"status.pin": "نوشتهٔ ثابت نمایه", "status.pin": "سنجاق به نمایه",
"status.pinned": "بوق ثابت", "status.pinned": "بوق سنجاق‌شده",
"status.read_more": "بیشتر بخوانید", "status.read_more": "بیشتر بخوانید",
"status.reblog": "بازبوقیدن", "status.reblog": "تقویت",
"status.reblog_private": "بازبوق به مخاطبان اولیه", "status.reblog_private": "تقویت برای مخاطبان نخستین",
"status.reblogged_by": "{name} بازبوقید", "status.reblogged_by": "{name} تقویت کرد",
"status.reblogs.empty": "هنوز هیچ کسی این بوق را بازنبوقیده است. وقتی کسی چنین کاری کند، این‌جا نمایش خواهد یافت.", "status.reblogs.empty": "هنوز کسی این بوق را تقویت نکرده است. وقتی کسی چنین کاری کند، این‌جا دیده خواهد شد.",
"status.redraft": "پاک‌کردن و بازنویسی", "status.redraft": "حذف و بازنویسی",
"status.remove_bookmark": "برداشتن نشانک",
"status.reply": "پاسخ", "status.reply": "پاسخ",
"status.replyAll": "به نوشته پاسخ دهید", "status.replyAll": "پاسخ به رشته",
"status.report": "گزارش دادن @{name}", "status.report": "گزارش @{name}",
"status.sensitive_warning": "محتوای حساس", "status.sensitive_warning": "محتوای حساس",
"status.share": "هم‌رسانی", "status.share": "هم‌رسانی",
"status.show_less": هفتن", "status.show_less": مایش کمتر",
"status.show_less_all": "نمایش کمتر همه", "status.show_less_all": "نمایش کمتر برای همه",
"status.show_more": "نمایش", "status.show_more": "نمایش بیشتر",
"status.show_more_all": "نمایش بیشتر همه", "status.show_more_all": "نمایش بیشتر برای همه",
"status.show_thread": "نمایش گفتگو", "status.show_thread": "نمایش رشته",
"status.uncached_media_warning": "ناموجود", "status.uncached_media_warning": "ناموجود",
"status.unmute_conversation": "باصداکردن گفتگو", "status.unmute_conversation": "رفع خموشی گفت‌وگو",
"status.unpin": "برداشتن نوشتهٔ ثابت نمایه", "status.unpin": "برداشتن سنجاق از نمایه",
"suggestions.dismiss": "پیشنهاد را نادیده بگیر", "suggestions.dismiss": "نادیده گرفتن پیشنهاد",
"suggestions.header": "شاید این هم برایتان جالب باشد…", "suggestions.header": "شاید این هم برایتان جالب باشد…",
"tabs_bar.federated_timeline": "همگانی", "tabs_bar.federated_timeline": "همگانی",
"tabs_bar.home": "خانه", "tabs_bar.home": "خانه",
"tabs_bar.local_timeline": "محلی", "tabs_bar.local_timeline": "محلّی",
"tabs_bar.notifications": "اعلانها", "tabs_bar.notifications": "آگاهیها",
"tabs_bar.search": "جستجو", "tabs_bar.search": "جست‌وجو",
"time_remaining.days": "{number, plural, one {# روز} other {# روز}} باقی مانده", "time_remaining.days": "{number, plural, one {# روز} other {# روز}} باقی مانده",
"time_remaining.hours": "{number, plural, one {# ساعت} other {# ساعت}} باقی مانده", "time_remaining.hours": "{number, plural, one {# ساعت} other {# ساعت}} باقی مانده",
"time_remaining.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} باقی مانده", "time_remaining.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} باقی مانده",
"time_remaining.moments": "زمان باقی‌مانده", "time_remaining.moments": "لحظاتی باقی‌مانده",
"time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده", "time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
"trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}",
"trends.trending_now": "پرطرفدار", "trends.trending_now": "پرطرفدار",
"ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.", "ui.beforeunload": "در صورت خروج از از ماستودون، پیش‌نویستان از دست خواهد رفت.",
"upload_area.title": "برای بارگذاری به این‌جا بکشید", "upload_area.title": "برای بارگذاری به این‌جا بکشید",
"upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "افزودن رسانه ({formats})",
"upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.", "upload_error.limit": "تجاوز از کران بارگذاری پرونده.",
"upload_error.poll": "باگذاری پرونده در نظرسنجی‌ها ممکن نیست.", "upload_error.poll": "بارگذاری پرونده در نظرسنجی‌ها مجاز نیست.",
"upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان", "upload_form.audio_description": "توصیف برای افراد فاقد شنوایی",
"upload_form.description": "توضیح برای کم‌بینایان",
"upload_form.edit": "ویرایش", "upload_form.edit": "ویرایش",
"upload_form.undo": "حذف", "upload_form.undo": "حذف",
"upload_form.video_description": "توصیف برای افراد با اختلال دید یا فاقد شنوایی",
"upload_modal.analyzing_picture": "در حال پردازش تصویر…", "upload_modal.analyzing_picture": "در حال پردازش تصویر…",
"upload_modal.apply": "اجرا", "upload_modal.apply": "اعمال",
"upload_modal.description_placeholder": "مردی با بیل مادرزنش را کشت", "upload_modal.description_placeholder": "الا یا ایّها الساقی، ادر کأساً و ناولها",
"upload_modal.detect_text": "پیدا کردن نوشته از درون تصویر", "upload_modal.detect_text": "تشخیص متن درون عکس",
"upload_modal.edit_media": "ویرایش تصویر", "upload_modal.edit_media": "ویرایش رسانه",
"upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابه‌جا کردن آن تنظیم کنید.", "upload_modal.hint": "دایره را روی پیش‌نمایش کشیده یا کلیک کنید تا نقطهٔ کانونی‌ای که همواره باید در تمام بندانگشتی‌ها داخل نما باشد را برگزینید.",
"upload_modal.preview_label": "پیش‌نمایش ({ratio})", "upload_modal.preview_label": "پیش‌نمایش ({ratio})",
"upload_progress.label": "بارگذاری...", "upload_progress.label": "در حال بارگذاری…",
"video.close": "بستن ویدیو", "video.close": "بستن ویدیو",
"video.exit_fullscreen": "خروج از حالت تمام صفحه", "video.download": "بارگیری پرونده",
"video.expand": "بزرگ‌کردن ویدیو", "video.exit_fullscreen": "خروج از حالت تمام‌صفحه",
"video.fullscreen": "تمام صفحه", "video.expand": "گسترش ویدیو",
"video.fullscreen": "تمام‌صفحه",
"video.hide": "نهفتن ویدیو", "video.hide": "نهفتن ویدیو",
"video.mute": "قطع صدا", "video.mute": "خموشی صدا",
"video.pause": "توقف", "video.pause": "مکث",
"video.play": "پخش", "video.play": "پخش",
"video.unmute": "پخش صدا" "video.unmute": "رفع خموشی صدا"
} }

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Lisää tai poista listoilta", "account.add_or_remove_from_list": "Lisää tai poista listoilta",
"account.badges.bot": "Botti", "account.badges.bot": "Botti",
"account.badges.group": "Group",
"account.block": "Estä @{name}", "account.block": "Estä @{name}",
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}", "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
"account.blocked": "Estetty", "account.blocked": "Estetty",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Määrää rajoitettu", "alert.rate_limited.title": "Määrää rajoitettu",
"alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.message": "Tapahtui odottamaton virhe.",
"alert.unexpected.title": "Hups!", "alert.unexpected.title": "Hups!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} viikossa", "autosuggest_hashtag.per_week": "{count} viikossa",
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
"bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.",
@ -51,6 +53,7 @@
"bundle_modal_error.message": "Jokin meni vikaan komponenttia ladattaessa.", "bundle_modal_error.message": "Jokin meni vikaan komponenttia ladattaessa.",
"bundle_modal_error.retry": "Yritä uudestaan", "bundle_modal_error.retry": "Yritä uudestaan",
"column.blocks": "Estetyt käyttäjät", "column.blocks": "Estetyt käyttäjät",
"column.bookmarks": "Kirjanmerkit",
"column.community": "Paikallinen aikajana", "column.community": "Paikallinen aikajana",
"column.direct": "Viestit", "column.direct": "Viestit",
"column.directory": "Selaa profiileja", "column.directory": "Selaa profiileja",
@ -82,6 +85,8 @@
"compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.duration": "Äänestyksen kesto",
"compose_form.poll.option_placeholder": "Valinta numero", "compose_form.poll.option_placeholder": "Valinta numero",
"compose_form.poll.remove_option": "Poista tämä valinta", "compose_form.poll.remove_option": "Poista tämä valinta",
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
"compose_form.publish": "Tuuttaa", "compose_form.publish": "Tuuttaa",
"compose_form.publish_loud": "Julkista!", "compose_form.publish_loud": "Julkista!",
"compose_form.sensitive.hide": "Valitse tämä arkaluontoisena", "compose_form.sensitive.hide": "Valitse tämä arkaluontoisena",
@ -138,6 +143,7 @@
"empty_column.account_timeline": "Ei ole 'toots' täällä!", "empty_column.account_timeline": "Ei ole 'toots' täällä!",
"empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.account_unavailable": "Profiilia ei löydy",
"empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
"empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!", "empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!",
"empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.", "empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.",
"empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.", "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.",
@ -219,6 +225,7 @@
"keyboard_shortcuts.muted": "avaa lista mykistetyistä käyttäjistä", "keyboard_shortcuts.muted": "avaa lista mykistetyistä käyttäjistä",
"keyboard_shortcuts.my_profile": "avaa profiilisi", "keyboard_shortcuts.my_profile": "avaa profiilisi",
"keyboard_shortcuts.notifications": "avaa ilmoitukset-sarake", "keyboard_shortcuts.notifications": "avaa ilmoitukset-sarake",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.pinned": "avaa lista kiinnitetyistä tuuttauksista", "keyboard_shortcuts.pinned": "avaa lista kiinnitetyistä tuuttauksista",
"keyboard_shortcuts.profile": "avaa kirjoittajan profiili", "keyboard_shortcuts.profile": "avaa kirjoittajan profiili",
"keyboard_shortcuts.reply": "vastaa", "keyboard_shortcuts.reply": "vastaa",
@ -251,6 +258,7 @@
"mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
"navigation_bar.apps": "Mobiilisovellukset", "navigation_bar.apps": "Mobiilisovellukset",
"navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.blocks": "Estetyt käyttäjät",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Paikallinen aikajana", "navigation_bar.community_timeline": "Paikallinen aikajana",
"navigation_bar.compose": "Kirjoita uusi tuuttaus", "navigation_bar.compose": "Kirjoita uusi tuuttaus",
"navigation_bar.direct": "Viestit", "navigation_bar.direct": "Viestit",
@ -273,7 +281,9 @@
"navigation_bar.security": "Tunnukset", "navigation_bar.security": "Tunnukset",
"notification.favourite": "{name} tykkäsi tilastasi", "notification.favourite": "{name} tykkäsi tilastasi",
"notification.follow": "{name} seurasi sinua", "notification.follow": "{name} seurasi sinua",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mainitsi sinut", "notification.mention": "{name} mainitsi sinut",
"notification.own_poll": "Your poll has ended",
"notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.poll": "Kysely, johon osallistuit, on päättynyt",
"notification.reblog": "{name} buustasi tilaasi", "notification.reblog": "{name} buustasi tilaasi",
"notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear": "Tyhjennä ilmoitukset",
@ -284,6 +294,7 @@
"notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki",
"notifications.column_settings.filter_bar.show": "Näytä", "notifications.column_settings.filter_bar.show": "Näytä",
"notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.follow": "Uudet seuraajat:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.mention": "Maininnat:",
"notifications.column_settings.poll": "Kyselyn tulokset:", "notifications.column_settings.poll": "Kyselyn tulokset:",
"notifications.column_settings.push": "Push-ilmoitukset", "notifications.column_settings.push": "Push-ilmoitukset",
@ -344,6 +355,7 @@
"status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}",
"status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä", "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä",
"status.block": "Estä @{name}", "status.block": "Estä @{name}",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Peru buustaus", "status.cancel_reblog_private": "Peru buustaus",
"status.cannot_reblog": "Tätä julkaisua ei voi buustata", "status.cannot_reblog": "Tätä julkaisua ei voi buustata",
"status.copy": "Kopioi linkki tilapäivitykseen", "status.copy": "Kopioi linkki tilapäivitykseen",
@ -368,6 +380,7 @@
"status.reblogged_by": "{name} buustasi", "status.reblogged_by": "{name} buustasi",
"status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä tuuttausta. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", "status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä tuuttausta. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
"status.redraft": "Poista & palauta muokattavaksi", "status.redraft": "Poista & palauta muokattavaksi",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Vastaa", "status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun", "status.replyAll": "Vastaa ketjuun",
"status.report": "Raportoi @{name}", "status.report": "Raportoi @{name}",
@ -400,9 +413,11 @@
"upload_button.label": "Lisää mediaa", "upload_button.label": "Lisää mediaa",
"upload_error.limit": "Tiedostolatauksien raja ylitetty.", "upload_error.limit": "Tiedostolatauksien raja ylitetty.",
"upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.", "upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Anna kuvaus näkörajoitteisia varten", "upload_form.description": "Anna kuvaus näkörajoitteisia varten",
"upload_form.edit": "Muokkaa", "upload_form.edit": "Muokkaa",
"upload_form.undo": "Peru", "upload_form.undo": "Peru",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analysoidaan kuvaa…", "upload_modal.analyzing_picture": "Analysoidaan kuvaa…",
"upload_modal.apply": "Käytä", "upload_modal.apply": "Käytä",
"upload_modal.description_placeholder": "Eräänä jäätävänä ja pimeänä yönä gorilla ratkaisi sudokun kahdessa minuutissa", "upload_modal.description_placeholder": "Eräänä jäätävänä ja pimeänä yönä gorilla ratkaisi sudokun kahdessa minuutissa",
@ -412,6 +427,7 @@
"upload_modal.preview_label": "Esikatselu ({ratio})", "upload_modal.preview_label": "Esikatselu ({ratio})",
"upload_progress.label": "Ladataan...", "upload_progress.label": "Ladataan...",
"video.close": "Sulje video", "video.close": "Sulje video",
"video.download": "Lataa tiedosto",
"video.exit_fullscreen": "Poistu koko näytön tilasta", "video.exit_fullscreen": "Poistu koko näytön tilasta",
"video.expand": "Laajenna video", "video.expand": "Laajenna video",
"video.fullscreen": "Koko näyttö", "video.fullscreen": "Koko näyttö",

View File

@ -1,6 +1,7 @@
{ {
"account.add_or_remove_from_list": "Ajouter ou retirer des listes", "account.add_or_remove_from_list": "Ajouter ou retirer des listes",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Groupe",
"account.block": "Bloquer @{name}", "account.block": "Bloquer @{name}",
"account.block_domain": "Tout masquer venant de {domain}", "account.block_domain": "Tout masquer venant de {domain}",
"account.blocked": "Bloqué·e", "account.blocked": "Bloqué·e",
@ -42,6 +43,7 @@
"alert.rate_limited.title": "Débit limité", "alert.rate_limited.title": "Débit limité",
"alert.unexpected.message": "Une erreur inattendue sest produite.", "alert.unexpected.message": "Une erreur inattendue sest produite.",
"alert.unexpected.title": "Oups!", "alert.unexpected.title": "Oups!",
"announcement.announcement": "Annonce",
"autosuggest_hashtag.per_week": "{count} par semaine", "autosuggest_hashtag.per_week": "{count} par semaine",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci, la prochaine fois", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci, la prochaine fois",
"bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.", "bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.",
@ -52,7 +54,7 @@
"bundle_modal_error.retry": "Réessayer", "bundle_modal_error.retry": "Réessayer",
"column.bookmarks": "Marque pages", "column.bookmarks": "Marque pages",
"column.blocks": "Comptes bloqués", "column.blocks": "Comptes bloqués",
"column.bookmarks": "Bookmarks", "column.bookmarks": "Marque-pages",
"column.community": "Fil public local", "column.community": "Fil public local",
"column.direct": "Messages privés", "column.direct": "Messages privés",
"column.directory": "Parcourir les profils", "column.directory": "Parcourir les profils",
@ -84,6 +86,8 @@
"compose_form.poll.duration": "Durée du sondage", "compose_form.poll.duration": "Durée du sondage",
"compose_form.poll.option_placeholder": "Choix {number}", "compose_form.poll.option_placeholder": "Choix {number}",
"compose_form.poll.remove_option": "Supprimer ce choix", "compose_form.poll.remove_option": "Supprimer ce choix",
"compose_form.poll.switch_to_multiple": "Changer le sondage pour autoriser plusieurs choix",
"compose_form.poll.switch_to_single": "Changer le sondage pour autoriser qu'un seul choix",
"compose_form.publish": "Pouet", "compose_form.publish": "Pouet",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marquer le média comme sensible", "compose_form.sensitive.hide": "Marquer le média comme sensible",
@ -140,7 +144,7 @@
"empty_column.account_timeline": "Aucun pouet ici !", "empty_column.account_timeline": "Aucun pouet ici !",
"empty_column.account_unavailable": "Profil non disponible", "empty_column.account_unavailable": "Profil non disponible",
"empty_column.blocks": "Vous navez bloqué aucun·e utilisateur·rice pour le moment.", "empty_column.blocks": "Vous navez bloqué aucun·e utilisateur·rice pour le moment.",
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", "empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.",
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir!", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir!",
"empty_column.direct": "Vous navez pas encore de messages privés. Lorsque vous en enverrez ou recevrez un, il saffichera ici.", "empty_column.direct": "Vous navez pas encore de messages privés. Lorsque vous en enverrez ou recevrez un, il saffichera ici.",
"empty_column.domain_blocks": "Il ny a aucun domaine caché pour le moment.", "empty_column.domain_blocks": "Il ny a aucun domaine caché pour le moment.",
@ -200,7 +204,7 @@
"introduction.interactions.reply.text": "Vous pouvez répondre aux pouets d'autres personnes et à vos propres pouets, ce qui les enchaînera dans une conversation.", "introduction.interactions.reply.text": "Vous pouvez répondre aux pouets d'autres personnes et à vos propres pouets, ce qui les enchaînera dans une conversation.",
"introduction.welcome.action": "Allons-y !", "introduction.welcome.action": "Allons-y !",
"introduction.welcome.headline": "Premiers pas", "introduction.welcome.headline": "Premiers pas",
"introduction.welcome.text": "Bienvenue dans le fediverse ! Dans quelques instants, vous pourrez diffuser des messages et parler à vos amis sur une grande variété de serveurs. Mais ce serveur, {domain}, est spécial - il héberge votre profil, alors souvenez-vous de son nom.", "introduction.welcome.text": "Bienvenue dans le fédiverse ! Dans quelques instants, vous pourrez diffuser des messages et parler à vos ami·e·s sur une grande variété de serveurs. Mais ce serveur, {domain}, est spécial - il héberge votre profil, alors souvenez-vous de son nom.",
"keyboard_shortcuts.back": "pour revenir en arrière", "keyboard_shortcuts.back": "pour revenir en arrière",
"keyboard_shortcuts.blocked": "pour ouvrir la liste des comptes bloqués", "keyboard_shortcuts.blocked": "pour ouvrir la liste des comptes bloqués",
"keyboard_shortcuts.boost": "pour partager", "keyboard_shortcuts.boost": "pour partager",
@ -255,7 +259,7 @@
"mute_modal.hide_notifications": "Masquer les notifications de cette personne?", "mute_modal.hide_notifications": "Masquer les notifications de cette personne?",
"navigation_bar.apps": "Applications mobiles", "navigation_bar.apps": "Applications mobiles",
"navigation_bar.blocks": "Comptes bloqués", "navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.bookmarks": "Bookmarks", "navigation_bar.bookmarks": "Marque-pages",
"navigation_bar.community_timeline": "Fil public local", "navigation_bar.community_timeline": "Fil public local",
"navigation_bar.compose": "Rédiger un nouveau pouet", "navigation_bar.compose": "Rédiger un nouveau pouet",
"navigation_bar.direct": "Messages privés", "navigation_bar.direct": "Messages privés",
@ -278,7 +282,9 @@
"navigation_bar.security": "Sécurité", "navigation_bar.security": "Sécurité",
"notification.favourite": "{name} a ajouté à ses favoris:", "notification.favourite": "{name} a ajouté à ses favoris:",
"notification.follow": "{name} vous suit", "notification.follow": "{name} vous suit",
"notification.follow_request": "{name} a demandé à vous suivre",
"notification.mention": "{name} vous a mentionné·e:", "notification.mention": "{name} vous a mentionné·e:",
"notification.own_poll": "Votre sondage est terminé",
"notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer",
"notification.reblog": "{name} a partagé votre statut:", "notification.reblog": "{name} a partagé votre statut:",
"notifications.clear": "Nettoyer les notifications", "notifications.clear": "Nettoyer les notifications",
@ -289,6 +295,7 @@
"notifications.column_settings.filter_bar.category": "Barre de filtrage rapide", "notifications.column_settings.filter_bar.category": "Barre de filtrage rapide",
"notifications.column_settings.filter_bar.show": "Afficher", "notifications.column_settings.filter_bar.show": "Afficher",
"notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s:", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s:",
"notifications.column_settings.follow_request": "Nouvelles demandes dabonnement :",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.poll": "Résultats des sondage :", "notifications.column_settings.poll": "Résultats des sondage :",
"notifications.column_settings.push": "Notifications push", "notifications.column_settings.push": "Notifications push",
@ -296,7 +303,7 @@
"notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.show": "Afficher dans la colonne",
"notifications.column_settings.sound": "Émettre un son", "notifications.column_settings.sound": "Émettre un son",
"notifications.filter.all": "Tout", "notifications.filter.all": "Tout",
"notifications.filter.boosts": "Repartages", "notifications.filter.boosts": "Partages",
"notifications.filter.favourites": "Favoris", "notifications.filter.favourites": "Favoris",
"notifications.filter.follows": "Abonné·e·s", "notifications.filter.follows": "Abonné·e·s",
"notifications.filter.mentions": "Mentions", "notifications.filter.mentions": "Mentions",
@ -336,7 +343,7 @@
"report.target": "Signalement de {target}", "report.target": "Signalement de {target}",
"search.placeholder": "Rechercher", "search.placeholder": "Rechercher",
"search_popout.search_format": "Recherche avancée", "search_popout.search_format": "Recherche avancée",
"search_popout.tips.full_text": "Les textes simples retournent les pouets que vous avez écris, mis en favori, épinglés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.", "search_popout.tips.full_text": "Un texte normal retourne les pouets que vous avez écris, mis en favori, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.",
"search_popout.tips.hashtag": "hashtag", "search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "statuts", "search_popout.tips.status": "statuts",
"search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants", "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants",
@ -349,8 +356,8 @@
"status.admin_account": "Ouvrir linterface de modération pour @{name}", "status.admin_account": "Ouvrir linterface de modération pour @{name}",
"status.admin_status": "Ouvrir ce statut dans linterface de modération", "status.admin_status": "Ouvrir ce statut dans linterface de modération",
"status.block": "Bloquer @{name}", "status.block": "Bloquer @{name}",
"status.bookmark": "Marquer", "status.bookmark": "Ajouter aux marque-pages",
"status.cancel_reblog_private": "Dé-booster", "status.cancel_reblog_private": "Annuler le partage",
"status.cannot_reblog": "Ce pouet ne peut pas être partagé", "status.cannot_reblog": "Ce pouet ne peut pas être partagé",
"status.copy": "Copier le lien vers le pouet", "status.copy": "Copier le lien vers le pouet",
"status.delete": "Effacer", "status.delete": "Effacer",
@ -370,11 +377,11 @@
"status.pinned": "Pouet épinglé", "status.pinned": "Pouet épinglé",
"status.read_more": "En savoir plus", "status.read_more": "En savoir plus",
"status.reblog": "Partager", "status.reblog": "Partager",
"status.reblog_private": "Booster vers laudience originale", "status.reblog_private": "Partager à laudience originale",
"status.reblogged_by": "{name} a partagé:", "status.reblogged_by": "{name} a partagé:",
"status.reblogs.empty": "Personne na encore partagé ce pouet. Lorsque quelquun le fera, il apparaîtra ici.", "status.reblogs.empty": "Personne na encore partagé ce pouet. Lorsque quelquun le fera, il apparaîtra ici.",
"status.redraft": "Effacer et ré-écrire", "status.redraft": "Effacer et ré-écrire",
"status.remove_bookmark": "Enlever le marque-page", "status.remove_bookmark": "Retirer des marque-pages",
"status.reply": "Répondre", "status.reply": "Répondre",
"status.replyAll": "Répondre au fil", "status.replyAll": "Répondre au fil",
"status.report": "Signaler @{name}", "status.report": "Signaler @{name}",
@ -407,9 +414,11 @@
"upload_button.label": "Joindre un média ({formats})", "upload_button.label": "Joindre un média ({formats})",
"upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
"upload_error.poll": "Lenvoi de fichiers nest pas autorisé avec les sondages.", "upload_error.poll": "Lenvoi de fichiers nest pas autorisé avec les sondages.",
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés daudition",
"upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.description": "Décrire pour les malvoyant·e·s",
"upload_form.edit": "Modifier", "upload_form.edit": "Modifier",
"upload_form.undo": "Supprimer", "upload_form.undo": "Supprimer",
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes daudition ou de vision",
"upload_modal.analyzing_picture": "Analyse de limage en cours…", "upload_modal.analyzing_picture": "Analyse de limage en cours…",
"upload_modal.apply": "Appliquer", "upload_modal.apply": "Appliquer",
"upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux", "upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux",
@ -419,6 +428,7 @@
"upload_modal.preview_label": "Aperçu ({ratio})", "upload_modal.preview_label": "Aperçu ({ratio})",
"upload_progress.label": "Envoi en cours…", "upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo", "video.close": "Fermer la vidéo",
"video.download": "Télécharger le fichier",
"video.exit_fullscreen": "Quitter le plein écran", "video.exit_fullscreen": "Quitter le plein écran",
"video.expand": "Agrandir la vidéo", "video.expand": "Agrandir la vidéo",
"video.fullscreen": "Plein écran", "video.fullscreen": "Plein écran",

Some files were not shown because too many files have changed in this diff Show More