Merge tag 'v3.5.1' into hometown-dev-3.5.1
This commit is contained in:
commit
ac01eee575
|
@ -79,6 +79,11 @@ module.exports = {
|
|||
'no-irregular-whitespace': 'error',
|
||||
'no-mixed-spaces-and-tabs': 'warn',
|
||||
'no-nested-ternary': 'warn',
|
||||
'no-restricted-properties': [
|
||||
'error',
|
||||
{ property: 'substring', message: 'Use .slice instead of .substring.' },
|
||||
{ property: 'substr', message: 'Use .slice instead of .substr.' },
|
||||
],
|
||||
'no-trailing-spaces': 'warn',
|
||||
'no-undef': 'error',
|
||||
'no-unreachable': 'error',
|
||||
|
|
43
CHANGELOG.md
43
CHANGELOG.md
|
@ -3,6 +3,49 @@ Changelog
|
|||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [3.5.1] - 2022-04-08
|
||||
### Added
|
||||
|
||||
- Add pagination for trending statuses in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/17976))
|
||||
|
||||
### Changed
|
||||
|
||||
- Change e-mail notifications to only be sent when recipient is offline ([Gargron](https://github.com/mastodon/mastodon/pull/17984))
|
||||
- Send e-mails for mentions and follows by default again
|
||||
- But only when recipient does not have push notifications through an app
|
||||
- Change `website` attribute to be nullable on `Application` entity in REST API ([rinsuki](https://github.com/mastodon/mastodon/pull/17962))
|
||||
|
||||
### Removed
|
||||
|
||||
- Remove sign-in token authentication, instead send e-mail about new sign-in ([Gargron](https://github.com/mastodon/mastodon/pull/17970))
|
||||
- You no longer need to enter a security code sent through e-mail
|
||||
- Instead you get an e-mail about a new sign-in from an unfamiliar IP address
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix error resposes for `from` search prefix ([single-right-quote](https://github.com/mastodon/mastodon/pull/17963))
|
||||
- Fix dangling language-specific trends ([Gargron](https://github.com/mastodon/mastodon/pull/17997))
|
||||
- Fix extremely rare race condition when deleting a status or account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17994))
|
||||
- Fix trends returning less results per page when filtered in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/17996))
|
||||
- Fix pagination header on empty trends responses in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/17986))
|
||||
- Fix cookies secure flag being set when served over Tor ([Gargron](https://github.com/mastodon/mastodon/pull/17992))
|
||||
- Fix migration error handling ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17991))
|
||||
- Fix error when re-running some migrations if they get interrupted at the wrong moment ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17989))
|
||||
- Fix potentially missing statuses when reconnecting to streaming API in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/17987), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/17980))
|
||||
- Fix error when sending warning emails with custom text ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17983))
|
||||
- Fix unset `SMTP_RETURN_PATH` environment variable causing e-mail not to send ([Gargron](https://github.com/mastodon/mastodon/pull/17982))
|
||||
- Fix possible duplicate statuses in timelines in some edge cases in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17971))
|
||||
- Fix spurious edits and require incoming edits to be explicitly marked as such ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17918))
|
||||
- Fix error when encountering invalid pinned statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17964))
|
||||
- Fix inconsistency in error handling when removing a status ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17974))
|
||||
- Fix admin API unconditionally requiring CSRF token ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17975))
|
||||
- Fix trending tags endpoint missing `offset` param in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/17973))
|
||||
- Fix unusual number formatting in some locales ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17929))
|
||||
- Fix `S3_FORCE_SINGLE_REQUEST` environment variable not working ([HolgerHuo](https://github.com/mastodon/mastodon/pull/17922))
|
||||
- Fix failure to build assets with OpenSSL 3 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17930))
|
||||
- Fix PWA manifest using outdated routes ([HolgerHuo](https://github.com/mastodon/mastodon/pull/17921))
|
||||
- Fix error when indexing statuses into Elasticsearch ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/17912))
|
||||
|
||||
## [3.5.0] - 2022-03-30
|
||||
### Added
|
||||
|
||||
|
|
8
Gemfile
8
Gemfile
|
@ -40,7 +40,7 @@ end
|
|||
gem 'net-ldap', '~> 0.17'
|
||||
gem 'omniauth-cas', '~> 2.0'
|
||||
gem 'omniauth-saml', '~> 1.10'
|
||||
gem 'gitlab-omniauth-openid-connect', '~>0.5.0', require: 'omniauth_openid_connect'
|
||||
gem 'gitlab-omniauth-openid-connect', '~>0.9.1', require: 'omniauth_openid_connect'
|
||||
gem 'omniauth', '~> 1.9'
|
||||
gem 'omniauth-rails_csrf_protection', '~> 0.1'
|
||||
|
||||
|
@ -99,9 +99,9 @@ gem 'json-ld-preloaded', '~> 3.2'
|
|||
gem 'rdf-normalize', '~> 0.5'
|
||||
|
||||
group :development, :test do
|
||||
gem 'fabrication', '~> 2.27'
|
||||
gem 'fabrication', '~> 2.28'
|
||||
gem 'fuubar', '~> 2.5'
|
||||
gem 'i18n-tasks', '~> 0.9', require: false
|
||||
gem 'i18n-tasks', '~> 1.0', require: false
|
||||
gem 'pry-byebug', '~> 3.9'
|
||||
gem 'pry-rails', '~> 0.3'
|
||||
gem 'rspec-rails', '~> 5.1'
|
||||
|
@ -146,7 +146,7 @@ group :development do
|
|||
end
|
||||
|
||||
group :production do
|
||||
gem 'lograge', '~> 0.11'
|
||||
gem 'lograge', '~> 0.12'
|
||||
end
|
||||
|
||||
gem 'concurrent-ruby', require: false
|
||||
|
|
49
Gemfile.lock
49
Gemfile.lock
|
@ -101,6 +101,14 @@ GEM
|
|||
coderay (>= 1.0.0)
|
||||
erubi (>= 1.0.0)
|
||||
rack (>= 0.9.0)
|
||||
better_html (1.0.16)
|
||||
actionview (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
ast (~> 2.0)
|
||||
erubi (~> 1.4)
|
||||
html_tokenizer (~> 0.0.6)
|
||||
parser (>= 2.4)
|
||||
smart_properties
|
||||
bindata (2.4.10)
|
||||
binding_of_caller (1.0.0)
|
||||
debug_inspector (>= 0.0.1)
|
||||
|
@ -211,7 +219,7 @@ GEM
|
|||
et-orbi (1.2.6)
|
||||
tzinfo
|
||||
excon (0.76.0)
|
||||
fabrication (2.27.0)
|
||||
fabrication (2.28.0)
|
||||
faker (2.20.0)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
faraday (1.9.3)
|
||||
|
@ -262,7 +270,7 @@ GEM
|
|||
fuubar (2.5.1)
|
||||
rspec-core (~> 3.0)
|
||||
ruby-progressbar (~> 1.4)
|
||||
gitlab-omniauth-openid-connect (0.5.0)
|
||||
gitlab-omniauth-openid-connect (0.9.1)
|
||||
addressable (~> 2.7)
|
||||
omniauth (~> 1.9)
|
||||
openid_connect (~> 1.2)
|
||||
|
@ -278,10 +286,11 @@ GEM
|
|||
hamlit (>= 1.2.0)
|
||||
railties (>= 4.0.1)
|
||||
hashdiff (1.0.1)
|
||||
hashie (4.1.0)
|
||||
hashie (5.0.0)
|
||||
highline (2.0.3)
|
||||
hiredis (0.6.3)
|
||||
hkdf (0.3.0)
|
||||
html_tokenizer (0.0.7)
|
||||
htmlentities (4.3.4)
|
||||
http (5.0.4)
|
||||
addressable (~> 2.8)
|
||||
|
@ -298,9 +307,10 @@ GEM
|
|||
rainbow (>= 2.0.0)
|
||||
i18n (1.10.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n-tasks (0.9.37)
|
||||
i18n-tasks (1.0.8)
|
||||
activesupport (>= 4.0.2)
|
||||
ast (>= 2.1.0)
|
||||
better_html (~> 1.0)
|
||||
erubi
|
||||
highline (>= 2.0.0)
|
||||
i18n
|
||||
|
@ -360,12 +370,12 @@ GEM
|
|||
llhttp-ffi (0.4.0)
|
||||
ffi-compiler (~> 1.0)
|
||||
rake (~> 13.0)
|
||||
lograge (0.11.2)
|
||||
lograge (0.12.0)
|
||||
actionpack (>= 4)
|
||||
activesupport (>= 4)
|
||||
railties (>= 4)
|
||||
request_store (~> 1.0)
|
||||
loofah (2.15.0)
|
||||
loofah (2.16.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
|
@ -417,7 +427,7 @@ GEM
|
|||
omniauth-saml (1.10.3)
|
||||
omniauth (~> 1.3, >= 1.3.2)
|
||||
ruby-saml (~> 1.9)
|
||||
openid_connect (1.2.0)
|
||||
openid_connect (1.3.0)
|
||||
activemodel
|
||||
attr_required (>= 1.0.0)
|
||||
json-jwt (>= 1.5.0)
|
||||
|
@ -430,14 +440,14 @@ GEM
|
|||
openssl (2.2.0)
|
||||
openssl-signature_algorithm (0.4.0)
|
||||
orm_adapter (0.5.0)
|
||||
ox (2.14.10)
|
||||
ox (2.14.11)
|
||||
parallel (1.22.1)
|
||||
parser (3.1.1.0)
|
||||
ast (~> 2.4.1)
|
||||
parslet (2.0.0)
|
||||
pastel (0.8.0)
|
||||
tty-color (~> 0.5)
|
||||
pg (1.3.4)
|
||||
pg (1.3.5)
|
||||
pghero (2.8.2)
|
||||
activerecord (>= 5)
|
||||
pkg-config (1.4.7)
|
||||
|
@ -459,7 +469,7 @@ GEM
|
|||
pry-rails (0.3.9)
|
||||
pry (>= 0.10.4)
|
||||
public_suffix (4.0.6)
|
||||
puma (5.6.2)
|
||||
puma (5.6.4)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.2.0)
|
||||
activesupport (>= 3.0.0)
|
||||
|
@ -470,7 +480,7 @@ GEM
|
|||
rack (>= 1.0, < 3)
|
||||
rack-cors (1.1.1)
|
||||
rack (>= 2.0.0)
|
||||
rack-oauth2 (1.16.0)
|
||||
rack-oauth2 (1.19.0)
|
||||
activesupport
|
||||
attr_required
|
||||
httpclient
|
||||
|
@ -525,7 +535,7 @@ GEM
|
|||
redis-namespace (1.8.2)
|
||||
redis (>= 3.0.4)
|
||||
regexp_parser (2.2.1)
|
||||
request_store (1.5.0)
|
||||
request_store (1.5.1)
|
||||
rack (>= 1.4)
|
||||
responders (3.0.1)
|
||||
actionpack (>= 5.0)
|
||||
|
@ -604,7 +614,7 @@ GEM
|
|||
sidekiq (>= 3)
|
||||
thwait
|
||||
tilt (>= 1.4.0)
|
||||
sidekiq-unique-jobs (7.1.15)
|
||||
sidekiq-unique-jobs (7.1.16)
|
||||
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||
sidekiq (>= 5.0, < 8.0)
|
||||
|
@ -620,6 +630,7 @@ GEM
|
|||
simplecov_json_formatter (~> 0.1)
|
||||
simplecov-html (0.12.3)
|
||||
simplecov_json_formatter (0.1.2)
|
||||
smart_properties (1.17.0)
|
||||
sprockets (3.7.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
|
@ -635,7 +646,7 @@ GEM
|
|||
stoplight (2.2.1)
|
||||
strong_migrations (0.7.9)
|
||||
activerecord (>= 5)
|
||||
swd (1.2.0)
|
||||
swd (1.3.0)
|
||||
activesupport (>= 3)
|
||||
attr_required (>= 0.0.5)
|
||||
httpclient (>= 2.4)
|
||||
|
@ -691,7 +702,7 @@ GEM
|
|||
safety_net_attestation (~> 0.4.0)
|
||||
securecompare (~> 1.0)
|
||||
tpm-key_attestation (~> 0.9.0)
|
||||
webfinger (1.1.0)
|
||||
webfinger (1.2.0)
|
||||
activesupport
|
||||
httpclient (>= 2.4)
|
||||
webmock (3.14.0)
|
||||
|
@ -750,21 +761,21 @@ DEPENDENCIES
|
|||
doorkeeper (~> 5.5)
|
||||
dotenv-rails (~> 2.7)
|
||||
ed25519 (~> 1.3)
|
||||
fabrication (~> 2.27)
|
||||
fabrication (~> 2.28)
|
||||
faker (~> 2.20)
|
||||
fast_blank (~> 1.0)
|
||||
fastimage
|
||||
fog-core (<= 2.1.0)
|
||||
fog-openstack (~> 0.3)
|
||||
fuubar (~> 2.5)
|
||||
gitlab-omniauth-openid-connect (~> 0.5.0)
|
||||
gitlab-omniauth-openid-connect (~> 0.9.1)
|
||||
hamlit-rails (~> 0.2)
|
||||
hiredis (~> 0.6)
|
||||
htmlentities (~> 4.3)
|
||||
http (~> 5.0)
|
||||
http_accept_language (~> 2.1)
|
||||
httplog (~> 1.5.0)
|
||||
i18n-tasks (~> 0.9)
|
||||
i18n-tasks (~> 1.0)
|
||||
idn-ruby
|
||||
json-ld
|
||||
json-ld-preloaded (~> 3.2)
|
||||
|
@ -773,7 +784,7 @@ DEPENDENCIES
|
|||
letter_opener (~> 1.8)
|
||||
letter_opener_web (~> 2.0)
|
||||
link_header (~> 0.0)
|
||||
lograge (~> 0.11)
|
||||
lograge (~> 0.12)
|
||||
makara (~> 0.5)
|
||||
mario-redis-lock (~> 1.2)
|
||||
memory_profiler
|
||||
|
|
|
@ -12,6 +12,7 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
|
|||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 3.5.x | Yes |
|
||||
| 3.4.x | Yes |
|
||||
| 3.3.x | Yes |
|
||||
| < 3.3 | No |
|
||||
|
|
|
@ -59,7 +59,7 @@ class StatusesIndex < Chewy::Index
|
|||
field :id, type: 'long'
|
||||
field :account_id, type: 'long'
|
||||
|
||||
field :text, type: 'text', value: ->(status) { [status.spoiler_text, extract_status_plain_text(status)].concat(status.ordered_media_attachments.map(&:description)).concat(status.preloadable_poll ? status.preloadable_poll.options : []).join("\n\n") } do
|
||||
field :text, type: 'text', value: ->(status) { status.searchable_text } do
|
||||
field :stemmed, type: 'text', analyzer: 'content'
|
||||
end
|
||||
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Admin
|
||||
class SignInTokenAuthenticationsController < BaseController
|
||||
before_action :set_target_user
|
||||
|
||||
def create
|
||||
authorize @user, :enable_sign_in_token_auth?
|
||||
@user.update(skip_sign_in_token: false)
|
||||
log_action :enable_sign_in_token_auth, @user
|
||||
redirect_to admin_account_path(@user.account_id)
|
||||
end
|
||||
|
||||
def destroy
|
||||
authorize @user, :disable_sign_in_token_auth?
|
||||
@user.update(skip_sign_in_token: true)
|
||||
log_action :disable_sign_in_token_auth, @user
|
||||
redirect_to admin_account_path(@user.account_id)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_target_user
|
||||
@user = User.find(params[:user_id])
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::AccountActionsController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:accounts' }
|
||||
before_action :require_staff!
|
||||
before_action :set_account
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::AccountsController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
include Authorization
|
||||
include AccountableConcern
|
||||
|
||||
|
@ -67,8 +65,9 @@ class Api::V1::Admin::AccountsController < Api::BaseController
|
|||
|
||||
def destroy
|
||||
authorize @account, :destroy?
|
||||
json = render_to_body json: @account, serializer: REST::Admin::AccountSerializer
|
||||
Admin::AccountDeletionWorker.perform_async(@account.id)
|
||||
render json: @account, serializer: REST::Admin::AccountSerializer
|
||||
render json: json
|
||||
end
|
||||
|
||||
def unsensitive
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::DimensionsController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_dimensions
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::MeasuresController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_measures
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::ReportsController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
include Authorization
|
||||
include AccountableConcern
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::RetentionController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_cohorts
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::Trends::LinksController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_links
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::Trends::StatusesController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_statuses
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::Trends::TagsController < Api::BaseController
|
||||
protect_from_forgery with: :exception
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read' }
|
||||
before_action :require_staff!
|
||||
before_action :set_tags
|
||||
|
|
|
@ -78,10 +78,12 @@ class Api::V1::StatusesController < Api::BaseController
|
|||
authorize @status, :destroy?
|
||||
|
||||
@status.discard
|
||||
RemovalWorker.perform_async(@status.id, { 'redraft' => true })
|
||||
@status.account.statuses_count = @status.account.statuses_count - 1
|
||||
json = render_to_body json: @status, serializer: REST::StatusSerializer, source_requested: true
|
||||
|
||||
render json: @status, serializer: REST::StatusSerializer, source_requested: true
|
||||
RemovalWorker.perform_async(@status.id, { 'redraft' => true })
|
||||
|
||||
render json: json
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -36,13 +36,17 @@ class Api::V1::Trends::LinksController < Api::BaseController
|
|||
end
|
||||
|
||||
def next_path
|
||||
api_v1_trends_links_url pagination_params(offset: offset_param + limit_param(DEFAULT_LINKS_LIMIT))
|
||||
api_v1_trends_links_url pagination_params(offset: offset_param + limit_param(DEFAULT_LINKS_LIMIT)) if records_continue?
|
||||
end
|
||||
|
||||
def prev_path
|
||||
api_v1_trends_links_url pagination_params(offset: offset_param - limit_param(DEFAULT_LINKS_LIMIT)) if offset_param > limit_param(DEFAULT_LINKS_LIMIT)
|
||||
end
|
||||
|
||||
def records_continue?
|
||||
@links.size == limit_param(DEFAULT_LINKS_LIMIT)
|
||||
end
|
||||
|
||||
def offset_param
|
||||
params[:offset].to_i
|
||||
end
|
||||
|
|
|
@ -36,7 +36,7 @@ class Api::V1::Trends::StatusesController < Api::BaseController
|
|||
end
|
||||
|
||||
def next_path
|
||||
api_v1_trends_statuses_url pagination_params(offset: offset_param + limit_param(DEFAULT_STATUSES_LIMIT))
|
||||
api_v1_trends_statuses_url pagination_params(offset: offset_param + limit_param(DEFAULT_STATUSES_LIMIT)) if records_continue?
|
||||
end
|
||||
|
||||
def prev_path
|
||||
|
@ -46,4 +46,8 @@ class Api::V1::Trends::StatusesController < Api::BaseController
|
|||
def offset_param
|
||||
params[:offset].to_i
|
||||
end
|
||||
|
||||
def records_continue?
|
||||
@statuses.size == limit_param(DEFAULT_STATUSES_LIMIT)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ class Api::V1::Trends::TagsController < Api::BaseController
|
|||
def set_tags
|
||||
@tags = begin
|
||||
if Setting.trends
|
||||
Trends.tags.query.allowed.limit(limit_param(DEFAULT_TAGS_LIMIT))
|
||||
Trends.tags.query.allowed.offset(offset_param).limit(limit_param(DEFAULT_TAGS_LIMIT))
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
@ -32,7 +32,7 @@ class Api::V1::Trends::TagsController < Api::BaseController
|
|||
end
|
||||
|
||||
def next_path
|
||||
api_v1_trends_tags_url pagination_params(offset: offset_param + limit_param(DEFAULT_TAGS_LIMIT))
|
||||
api_v1_trends_tags_url pagination_params(offset: offset_param + limit_param(DEFAULT_TAGS_LIMIT)) if records_continue?
|
||||
end
|
||||
|
||||
def prev_path
|
||||
|
@ -42,4 +42,8 @@ class Api::V1::Trends::TagsController < Api::BaseController
|
|||
def offset_param
|
||||
params[:offset].to_i
|
||||
end
|
||||
|
||||
def records_continue?
|
||||
@tags.size == limit_param(DEFAULT_TAGS_LIMIT)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,6 +11,10 @@ class Api::V2::SearchController < Api::BaseController
|
|||
def index
|
||||
@search = Search.new(search_results)
|
||||
render json: @search, serializer: REST::SearchSerializer
|
||||
rescue Mastodon::SyntaxError
|
||||
unprocessable_entity
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
not_found
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -8,7 +8,6 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
skip_before_action :update_user_sign_in
|
||||
|
||||
include TwoFactorAuthenticationConcern
|
||||
include SignInTokenAuthenticationConcern
|
||||
|
||||
before_action :set_instance_presenter, only: [:new]
|
||||
before_action :set_body_classes
|
||||
|
@ -66,7 +65,7 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
end
|
||||
|
||||
def user_params
|
||||
params.require(:user).permit(:email, :password, :otp_attempt, :sign_in_token_attempt, credential: {})
|
||||
params.require(:user).permit(:email, :password, :otp_attempt, credential: {})
|
||||
end
|
||||
|
||||
def after_sign_in_path_for(resource)
|
||||
|
@ -142,6 +141,12 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
ip: request.remote_ip,
|
||||
user_agent: request.user_agent
|
||||
)
|
||||
|
||||
UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if suspicious_sign_in?(user)
|
||||
end
|
||||
|
||||
def suspicious_sign_in?(user)
|
||||
SuspiciousSignInDetector.new(user).suspicious?(request)
|
||||
end
|
||||
|
||||
def on_authentication_failure(user, security_measure, failure_reason)
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module SignInTokenAuthenticationConcern
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
prepend_before_action :authenticate_with_sign_in_token, if: :sign_in_token_required?, only: [:create]
|
||||
end
|
||||
|
||||
def sign_in_token_required?
|
||||
find_user&.suspicious_sign_in?(request.remote_ip)
|
||||
end
|
||||
|
||||
def valid_sign_in_token_attempt?(user)
|
||||
Devise.secure_compare(user.sign_in_token, user_params[:sign_in_token_attempt])
|
||||
end
|
||||
|
||||
def authenticate_with_sign_in_token
|
||||
if user_params[:email].present?
|
||||
user = self.resource = find_user_from_params
|
||||
prompt_for_sign_in_token(user) if user&.external_or_valid_password?(user_params[:password])
|
||||
elsif session[:attempt_user_id]
|
||||
user = self.resource = User.find_by(id: session[:attempt_user_id])
|
||||
return if user.nil?
|
||||
|
||||
if session[:attempt_user_updated_at] != user.updated_at.to_s
|
||||
restart_session
|
||||
elsif user_params.key?(:sign_in_token_attempt)
|
||||
authenticate_with_sign_in_token_attempt(user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def authenticate_with_sign_in_token_attempt(user)
|
||||
if valid_sign_in_token_attempt?(user)
|
||||
on_authentication_success(user, :sign_in_token)
|
||||
else
|
||||
on_authentication_failure(user, :sign_in_token, :invalid_sign_in_token)
|
||||
flash.now[:alert] = I18n.t('users.invalid_sign_in_token')
|
||||
prompt_for_sign_in_token(user)
|
||||
end
|
||||
end
|
||||
|
||||
def prompt_for_sign_in_token(user)
|
||||
if user.sign_in_token_expired?
|
||||
user.generate_sign_in_token && user.save
|
||||
UserMailer.sign_in_token(user, request.remote_ip, request.user_agent, Time.now.utc.to_s).deliver_later!
|
||||
end
|
||||
|
||||
set_attempt_session(user)
|
||||
|
||||
@body_classes = 'lighter'
|
||||
|
||||
set_locale { render :sign_in_token }
|
||||
end
|
||||
end
|
|
@ -55,7 +55,8 @@ class Settings::PreferencesController < Settings::BaseController
|
|||
:setting_use_pending_items,
|
||||
:setting_trends,
|
||||
:setting_crop_images,
|
||||
notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag),
|
||||
:setting_always_send_emails,
|
||||
notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag appeal),
|
||||
interactions: %i(must_be_follower must_be_following must_be_following_dm)
|
||||
)
|
||||
end
|
||||
|
|
|
@ -19,8 +19,11 @@ module ApplicationHelper
|
|||
# is looked up from the locales definition, and rails-i18n comes with
|
||||
# values that don't seem to make much sense for many languages, so
|
||||
# override these values with a default of 3 digits of precision.
|
||||
options[:precision] = 3
|
||||
options[:strip_insignificant_zeros] = true
|
||||
options = options.merge(
|
||||
precision: 3,
|
||||
strip_insignificant_zeros: true,
|
||||
significant: true
|
||||
)
|
||||
|
||||
number_to_human(number, **options)
|
||||
end
|
||||
|
|
|
@ -12,6 +12,7 @@ module FormattingHelper
|
|||
def extract_status_plain_text(status)
|
||||
PlainTextFormatter.new(status.text, status.local?).to_s
|
||||
end
|
||||
module_function :extract_status_plain_text
|
||||
|
||||
def status_content_format(status)
|
||||
html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []))
|
||||
|
|
|
@ -7,6 +7,10 @@ import {
|
|||
expandHomeTimeline,
|
||||
connectTimeline,
|
||||
disconnectTimeline,
|
||||
fillHomeTimelineGaps,
|
||||
fillPublicTimelineGaps,
|
||||
fillCommunityTimelineGaps,
|
||||
fillListTimelineGaps,
|
||||
} from './timelines';
|
||||
import { updateNotifications, expandNotifications } from './notifications';
|
||||
import { updateConversations } from './conversations';
|
||||
|
@ -35,6 +39,7 @@ const randomUpTo = max =>
|
|||
* @param {Object.<string, string>} params
|
||||
* @param {Object} options
|
||||
* @param {function(Function, Function): void} [options.fallback]
|
||||
* @param {function(): void} [options.fillGaps]
|
||||
* @param {function(object): boolean} [options.accept]
|
||||
* @return {function(): void}
|
||||
*/
|
||||
|
@ -61,6 +66,10 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||
clearTimeout(pollingId);
|
||||
pollingId = null;
|
||||
}
|
||||
|
||||
if (options.fillGaps) {
|
||||
dispatch(options.fillGaps());
|
||||
}
|
||||
},
|
||||
|
||||
onDisconnect() {
|
||||
|
@ -119,7 +128,7 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => {
|
|||
* @return {function(): void}
|
||||
*/
|
||||
export const connectUserStream = () =>
|
||||
connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification });
|
||||
connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification, fillGaps: fillHomeTimelineGaps });
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
|
@ -127,7 +136,7 @@ export const connectUserStream = () =>
|
|||
* @return {function(): void}
|
||||
*/
|
||||
export const connectCommunityStream = ({ onlyMedia } = {}) =>
|
||||
connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`);
|
||||
connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => (fillCommunityTimelineGaps({ onlyMedia })) });
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
|
@ -136,7 +145,7 @@ export const connectCommunityStream = ({ onlyMedia } = {}) =>
|
|||
* @return {function(): void}
|
||||
*/
|
||||
export const connectPublicStream = ({ onlyMedia, onlyRemote } = {}) =>
|
||||
connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`);
|
||||
connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => fillPublicTimelineGaps({ onlyMedia, onlyRemote }) });
|
||||
|
||||
/**
|
||||
* @param {string} columnId
|
||||
|
@ -159,4 +168,4 @@ export const connectDirectStream = () =>
|
|||
* @return {function(): void}
|
||||
*/
|
||||
export const connectListStream = listId =>
|
||||
connectTimelineStream(`list:${listId}`, 'list', { list: listId });
|
||||
connectTimelineStream(`list:${listId}`, 'list', { list: listId }, { fillGaps: () => fillListTimelineGaps(listId) });
|
||||
|
|
|
@ -124,6 +124,22 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
|
|||
};
|
||||
};
|
||||
|
||||
export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) {
|
||||
return (dispatch, getState) => {
|
||||
const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
|
||||
const items = timeline.get('items');
|
||||
const nullIndexes = items.map((statusId, index) => statusId === null ? index : null);
|
||||
const gaps = nullIndexes.map(index => index > 0 ? items.get(index - 1) : null);
|
||||
|
||||
// Only expand at most two gaps to avoid doing too many requests
|
||||
done = gaps.take(2).reduce((done, maxId) => {
|
||||
return (() => dispatch(expandTimeline(timelineId, path, { ...params, maxId }, done)));
|
||||
}, done);
|
||||
|
||||
done();
|
||||
};
|
||||
}
|
||||
|
||||
export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done);
|
||||
export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }, done);
|
||||
export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done);
|
||||
|
@ -141,6 +157,11 @@ export const expandHashtagTimeline = (hashtag, { maxId, tags, local } =
|
|||
}, done);
|
||||
};
|
||||
|
||||
export const fillHomeTimelineGaps = (done = noOp) => fillTimelineGaps('home', '/api/v1/timelines/home', {}, done);
|
||||
export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote } = {}, done = noOp) => fillTimelineGaps(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia }, done);
|
||||
export const fillCommunityTimelineGaps = ({ onlyMedia } = {}, done = noOp) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }, done);
|
||||
export const fillListTimelineGaps = (id, done = noOp) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}, done);
|
||||
|
||||
export function expandTimelineRequest(timeline, isLoadingMore) {
|
||||
return {
|
||||
type: TIMELINE_EXPAND_REQUEST,
|
||||
|
@ -184,6 +205,7 @@ export function connectTimeline(timeline) {
|
|||
return {
|
||||
type: TIMELINE_CONNECT,
|
||||
timeline,
|
||||
usePendingItems: preferPendingItems,
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import api from '../api';
|
||||
import api, { getLinks } from '../api';
|
||||
import { importFetchedStatuses } from './importer';
|
||||
|
||||
export const TRENDS_TAGS_FETCH_REQUEST = 'TRENDS_TAGS_FETCH_REQUEST';
|
||||
|
@ -13,6 +13,10 @@ export const TRENDS_STATUSES_FETCH_REQUEST = 'TRENDS_STATUSES_FETCH_REQUEST';
|
|||
export const TRENDS_STATUSES_FETCH_SUCCESS = 'TRENDS_STATUSES_FETCH_SUCCESS';
|
||||
export const TRENDS_STATUSES_FETCH_FAIL = 'TRENDS_STATUSES_FETCH_FAIL';
|
||||
|
||||
export const TRENDS_STATUSES_EXPAND_REQUEST = 'TRENDS_STATUSES_EXPAND_REQUEST';
|
||||
export const TRENDS_STATUSES_EXPAND_SUCCESS = 'TRENDS_STATUSES_EXPAND_SUCCESS';
|
||||
export const TRENDS_STATUSES_EXPAND_FAIL = 'TRENDS_STATUSES_EXPAND_FAIL';
|
||||
|
||||
export const fetchTrendingHashtags = () => (dispatch, getState) => {
|
||||
dispatch(fetchTrendingHashtagsRequest());
|
||||
|
||||
|
@ -68,11 +72,16 @@ export const fetchTrendingLinksFail = error => ({
|
|||
});
|
||||
|
||||
export const fetchTrendingStatuses = () => (dispatch, getState) => {
|
||||
if (getState().getIn(['status_lists', 'trending', 'isLoading'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(fetchTrendingStatusesRequest());
|
||||
|
||||
api(getState).get('/api/v1/trends/statuses').then(({ data }) => {
|
||||
dispatch(importFetchedStatuses(data));
|
||||
dispatch(fetchTrendingStatusesSuccess(data));
|
||||
api(getState).get('/api/v1/trends/statuses').then(response => {
|
||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||
dispatch(importFetchedStatuses(response.data));
|
||||
dispatch(fetchTrendingStatusesSuccess(response.data, next ? next.uri : null));
|
||||
}).catch(err => dispatch(fetchTrendingStatusesFail(err)));
|
||||
};
|
||||
|
||||
|
@ -81,9 +90,10 @@ export const fetchTrendingStatusesRequest = () => ({
|
|||
skipLoading: true,
|
||||
});
|
||||
|
||||
export const fetchTrendingStatusesSuccess = statuses => ({
|
||||
export const fetchTrendingStatusesSuccess = (statuses, next) => ({
|
||||
type: TRENDS_STATUSES_FETCH_SUCCESS,
|
||||
statuses,
|
||||
next,
|
||||
skipLoading: true,
|
||||
});
|
||||
|
||||
|
@ -93,3 +103,37 @@ export const fetchTrendingStatusesFail = error => ({
|
|||
skipLoading: true,
|
||||
skipAlert: true,
|
||||
});
|
||||
|
||||
|
||||
export const expandTrendingStatuses = () => (dispatch, getState) => {
|
||||
const url = getState().getIn(['status_lists', 'trending', 'next'], null);
|
||||
|
||||
if (url === null || getState().getIn(['status_lists', 'trending', 'isLoading'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(expandTrendingStatusesRequest());
|
||||
|
||||
api(getState).get(url).then(response => {
|
||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||
dispatch(importFetchedStatuses(response.data));
|
||||
dispatch(expandTrendingStatusesSuccess(response.data, next ? next.uri : null));
|
||||
}).catch(error => {
|
||||
dispatch(expandTrendingStatusesFail(error));
|
||||
});
|
||||
};
|
||||
|
||||
export const expandTrendingStatusesRequest = () => ({
|
||||
type: TRENDS_STATUSES_EXPAND_REQUEST,
|
||||
});
|
||||
|
||||
export const expandTrendingStatusesSuccess = (statuses, next) => ({
|
||||
type: TRENDS_STATUSES_EXPAND_SUCCESS,
|
||||
statuses,
|
||||
next,
|
||||
});
|
||||
|
||||
export const expandTrendingStatusesFail = error => ({
|
||||
type: TRENDS_STATUSES_EXPAND_FAIL,
|
||||
error,
|
||||
});
|
||||
|
|
|
@ -124,7 +124,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo
|
|||
for (let id in aPool) {
|
||||
let emoji = aPool[id],
|
||||
{ search } = emoji,
|
||||
sub = value.substr(0, length),
|
||||
sub = value.slice(0, length),
|
||||
subIndex = search.indexOf(sub);
|
||||
|
||||
if (subIndex !== -1) {
|
||||
|
|
|
@ -4,11 +4,13 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
|||
import StatusList from 'mastodon/components/status_list';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { connect } from 'react-redux';
|
||||
import { fetchTrendingStatuses } from 'mastodon/actions/trends';
|
||||
import { fetchTrendingStatuses, expandTrendingStatuses } from 'mastodon/actions/trends';
|
||||
import { debounce } from 'lodash';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
statusIds: state.getIn(['status_lists', 'trending', 'items']),
|
||||
isLoading: state.getIn(['status_lists', 'trending', 'isLoading'], true),
|
||||
hasMore: !!state.getIn(['status_lists', 'trending', 'next']),
|
||||
});
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
|
@ -17,6 +19,7 @@ class Statuses extends React.PureComponent {
|
|||
static propTypes = {
|
||||
statusIds: ImmutablePropTypes.list,
|
||||
isLoading: PropTypes.bool,
|
||||
hasMore: PropTypes.bool,
|
||||
multiColumn: PropTypes.bool,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
};
|
||||
|
@ -26,8 +29,13 @@ class Statuses extends React.PureComponent {
|
|||
dispatch(fetchTrendingStatuses());
|
||||
}
|
||||
|
||||
handleLoadMore = debounce(() => {
|
||||
const { dispatch } = this.props;
|
||||
dispatch(expandTrendingStatuses());
|
||||
}, 300, { leading: true })
|
||||
|
||||
render () {
|
||||
const { isLoading, statusIds, multiColumn } = this.props;
|
||||
const { isLoading, hasMore, statusIds, multiColumn } = this.props;
|
||||
|
||||
const emptyMessage = <FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' />;
|
||||
|
||||
|
@ -36,8 +44,9 @@ class Statuses extends React.PureComponent {
|
|||
trackScroll
|
||||
statusIds={statusIds}
|
||||
scrollKey='explore-statuses'
|
||||
hasMore={false}
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
onLoadMore={this.handleLoadMore}
|
||||
emptyMessage={emptyMessage}
|
||||
bindToDocument={!multiColumn}
|
||||
withCounters
|
||||
|
|
|
@ -32,7 +32,7 @@ const trim = (text, len) => {
|
|||
return text;
|
||||
}
|
||||
|
||||
return text.substring(0, cut) + (text.length > len ? '…' : '');
|
||||
return text.slice(0, cut) + (text.length > len ? '…' : '');
|
||||
};
|
||||
|
||||
const domParser = new DOMParser();
|
||||
|
|
|
@ -91,7 +91,7 @@ export const fileNameFromURL = str => {
|
|||
const pathname = url.pathname;
|
||||
const index = pathname.lastIndexOf('/');
|
||||
|
||||
return pathname.substring(index + 1);
|
||||
return pathname.slice(index + 1);
|
||||
};
|
||||
|
||||
export default @injectIntl
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
"account.account_note_header": "مُلاحظة",
|
||||
"account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة",
|
||||
"account.badges.bot": "روبوت",
|
||||
"account.badges.group": "مجموعة",
|
||||
"account.block": "حظر @{name}",
|
||||
"account.badges.group": "فريق",
|
||||
"account.block": "احجب @{name}",
|
||||
"account.block_domain": "حظر اسم النِّطاق {domain}",
|
||||
"account.blocked": "محظور",
|
||||
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
|
||||
|
@ -11,14 +11,14 @@
|
|||
"account.direct": "مراسلة @{name} بشكل مباشر",
|
||||
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
|
||||
"account.domain_blocked": "اسم النِّطاق محظور",
|
||||
"account.edit_profile": "تحرير الملف الشخصي",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
"account.enable_notifications": "أشعرني عندما ينشر @{name}",
|
||||
"account.endorse": "أوصِ به على صفحتك الشخصية",
|
||||
"account.follow": "المُتابعة",
|
||||
"account.followers": "المُتابِعون",
|
||||
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم حتى الآن.",
|
||||
"account.follow": "متابعة",
|
||||
"account.followers": "مُتابِعون",
|
||||
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
||||
"account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two{مُتابعانِ اِثنان} few{{counter} مُتابِعين} many{{counter} مُتابِعًا} other {{counter} مُتابع}}",
|
||||
"account.following": "Following",
|
||||
"account.following": "الإشتراكات",
|
||||
"account.following_counter": "{count, plural, zero{لا يُتابِع} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}",
|
||||
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
|
||||
"account.follows_you": "يُتابِعُك",
|
||||
|
@ -35,18 +35,18 @@
|
|||
"account.posts": "منشورات",
|
||||
"account.posts_with_replies": "المنشورات والرُدود",
|
||||
"account.report": "الإبلاغ عن @{name}",
|
||||
"account.requested": "في اِنتظر القُبول. اِنقُر لإلغاء طلب المُتابعة",
|
||||
"account.requested": "في انتظار القبول. اضغط لإلغاء طلب المُتابعة",
|
||||
"account.share": "مُشاركة الملف الشخصي لـ @{name}",
|
||||
"account.show_reblogs": "عرض مشاركات @{name}",
|
||||
"account.statuses_counter": "{count, plural, zero {لَا تَبويقات} one {تَبويقةٌ واحدة} two {تَبويقَتانِ اِثنتان} few {{counter} تَبويقات} many {{counter} تَبويقتًا} other {{counter} تَبويقة}}",
|
||||
"account.statuses_counter": "{count, plural, zero {لَا منشورات} one {منشور واحد} two {منشوران إثنان} few {{counter} منشورات} many {{counter} منشورًا} other {{counter} منشور}}",
|
||||
"account.unblock": "إلغاء الحَظر عن @{name}",
|
||||
"account.unblock_domain": "إلغاء الحَظر عن النِّطاق {domain}",
|
||||
"account.unblock_short": "Unblock",
|
||||
"account.unblock_short": "ألغ الحجب",
|
||||
"account.unendorse": "لا تُرَوِّج لهُ في الملف الشخصي",
|
||||
"account.unfollow": "إلغاء المُتابعة",
|
||||
"account.unmute": "إلغاء الكَتم عن @{name}",
|
||||
"account.unmute_notifications": "إلغاء كَتم الإشعارات عن @{name}",
|
||||
"account.unmute_short": "Unmute",
|
||||
"account.unmute_short": "إلغاء الكتم",
|
||||
"account_note.placeholder": "اضغط لإضافة مُلاحظة",
|
||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||
|
@ -78,7 +78,7 @@
|
|||
"column.home": "الرئيسية",
|
||||
"column.lists": "القوائم",
|
||||
"column.mutes": "المُستَخدِمون المَكتومون",
|
||||
"column.notifications": "الإشعارَات",
|
||||
"column.notifications": "الإشعارات",
|
||||
"column.pins": "المنشورات المُثَبَّتَة",
|
||||
"column.public": "الخَطُّ الزَّمَنِيُّ المُوَحَّد",
|
||||
"column_back_button.label": "العودة",
|
||||
|
@ -299,7 +299,7 @@
|
|||
"navigation_bar.discover": "اكتشف",
|
||||
"navigation_bar.domain_blocks": "النطاقات المخفية",
|
||||
"navigation_bar.edit_profile": "عدّل الملف التعريفي",
|
||||
"navigation_bar.explore": "Explore",
|
||||
"navigation_bar.explore": "استكشف",
|
||||
"navigation_bar.favourites": "المفضلة",
|
||||
"navigation_bar.filters": "الكلمات المكتومة",
|
||||
"navigation_bar.follow_requests": "طلبات المتابعة",
|
||||
|
@ -320,7 +320,7 @@
|
|||
"notification.follow_request": "لقد طلب {name} متابعتك",
|
||||
"notification.mention": "{name} ذكرك",
|
||||
"notification.own_poll": "انتهى استطلاعك للرأي",
|
||||
"notification.poll": "لقد إنتها تصويت شاركت فيه",
|
||||
"notification.poll": "لقد انتهى استطلاع رأي شاركتَ فيه",
|
||||
"notification.reblog": "قام {name} بمشاركة منشورك",
|
||||
"notification.status": "{name} نشر للتو",
|
||||
"notification.update": "{name} edited a post",
|
||||
|
@ -415,7 +415,7 @@
|
|||
"report.reasons.dislike_description": "ألا ترغب برؤيته",
|
||||
"report.reasons.other": "It's something else",
|
||||
"report.reasons.other_description": "The issue does not fit into other categories",
|
||||
"report.reasons.spam": "It's spam",
|
||||
"report.reasons.spam": "إنها رسالة مزعجة",
|
||||
"report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies",
|
||||
"report.reasons.violation": "ينتهك قواعد الخادم",
|
||||
"report.reasons.violation_description": "You are aware that it breaks specific rules",
|
||||
|
@ -476,7 +476,7 @@
|
|||
"status.read_more": "اقرأ المزيد",
|
||||
"status.reblog": "رَقِّي",
|
||||
"status.reblog_private": "القيام بالترقية إلى الجمهور الأصلي",
|
||||
"status.reblogged_by": "رقّاه {name}",
|
||||
"status.reblogged_by": "شارَكَه {name}",
|
||||
"status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
|
||||
"status.redraft": "إزالة و إعادة الصياغة",
|
||||
"status.remove_bookmark": "احذفه مِن الفواصل المرجعية",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
|
||||
"upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع",
|
||||
"upload_form.description": "وصف للمعاقين بصريا",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "تعديل",
|
||||
"upload_form.thumbnail": "غيّر الصورة المصغرة",
|
||||
"upload_form.undo": "حذف",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "La xuba de ficheros nun ta permitida con encuestes.",
|
||||
"upload_form.audio_description": "Descripción pa persones con perda auditiva",
|
||||
"upload_form.description": "Descripción pa discapacitaos visuales",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Desaniciar",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Качването на файлове не е позволено с анкети.",
|
||||
"upload_form.audio_description": "Опишете за хора със загуба на слуха",
|
||||
"upload_form.description": "Опишете за хора със зрителни увреждания",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Редакция",
|
||||
"upload_form.thumbnail": "Промяна на миниизображението",
|
||||
"upload_form.undo": "Отмяна",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
|
||||
"upload_form.audio_description": "শ্রবণশক্তি লোকদের জন্য বর্ণনা করুন",
|
||||
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "সম্পাদন",
|
||||
"upload_form.thumbnail": "থাম্বনেল পরিবর্তন করুন",
|
||||
"upload_form.undo": "মুছে ফেলতে",
|
||||
|
|
|
@ -187,12 +187,12 @@
|
|||
"error.unexpected_crash.next_steps_addons": "Klaskit azbevaat ar bajenn. Ma n'ez a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver",
|
||||
"errors.unexpected_crash.report_issue": "Danevellañ ur fazi",
|
||||
"explore.search_results": "Search results",
|
||||
"explore.search_results": "Disoc'hoù an enklask",
|
||||
"explore.suggested_follows": "For you",
|
||||
"explore.title": "Explore",
|
||||
"explore.title": "Ergerzhit",
|
||||
"explore.trending_links": "News",
|
||||
"explore.trending_statuses": "Posts",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
"explore.trending_tags": "Gerioù-klik",
|
||||
"follow_recommendations.done": "Graet",
|
||||
"follow_recommendations.heading": "Heuliit tud e plijfe deoc'h lenn toudoù! Setu un tamm alioù.",
|
||||
"follow_recommendations.lead": "Toudoù eus tud heuliet ganeoc'h a zeuio war wel en un urzh amzeroniezhel war ho red degemer. N'ho peus ket aon ober fazioù, gallout a rit paouez heuliañ tud ken aes n'eus forzh pegoulz!",
|
||||
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Pellgargañ restroù n'eo ket aotreet gant sontadegoù.",
|
||||
"upload_form.audio_description": "Diskrivañ evit tud a zo kollet o c'hlev",
|
||||
"upload_form.description": "Diskrivañ evit tud a zo kollet o gweled",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Aozañ",
|
||||
"upload_form.thumbnail": "Kemmañ ar velvenn",
|
||||
"upload_form.undo": "Dilemel",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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 per els que tenen problemes visuals",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Edita",
|
||||
"upload_form.thumbnail": "Canvia la miniatura",
|
||||
"upload_form.undo": "Esborra",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "پەڕگەکە ڕێی پێنەدراوە بە ڕاپرسی باربکرێت.",
|
||||
"upload_form.audio_description": "بۆ ئەو کەسانەی کە گوێ بیستیان هەیە وەسف دەکات",
|
||||
"upload_form.description": "وەسف بکە بۆ کەمبینایان",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "دەستکاری",
|
||||
"upload_form.thumbnail": "گۆڕانی وینۆچکە",
|
||||
"upload_form.undo": "سڕینەوە",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
|
||||
"upload_form.audio_description": "Discrizzione per i ciochi",
|
||||
"upload_form.description": "Discrizzione per i malvistosi",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Mudificà",
|
||||
"upload_form.thumbnail": "Cambià vignetta",
|
||||
"upload_form.undo": "Sguassà",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"account.badges.group": "Skupina",
|
||||
"account.block": "Zablokovat @{name}",
|
||||
"account.block_domain": "Blokovat doménu {domain}",
|
||||
"account.blocked": "Blokováno",
|
||||
"account.blocked": "Blokován",
|
||||
"account.browse_more_on_origin_server": "Více na původním profilu",
|
||||
"account.cancel_follow_request": "Zrušit žádost o sledování",
|
||||
"account.direct": "Poslat @{name} přímou zprávu",
|
||||
|
@ -18,7 +18,7 @@
|
|||
"account.followers": "Sledující",
|
||||
"account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Sledující} few {{counter} Sledující} many {{counter} Sledujících} other {{counter} Sledujících}}",
|
||||
"account.following": "Following",
|
||||
"account.following": "Sledujete",
|
||||
"account.following_counter": "{count, plural, one {{counter} Sledovaný} few {{counter} Sledovaní} many {{counter} Sledovaných} other {{counter} Sledovaných}}",
|
||||
"account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
|
||||
"account.follows_you": "Sleduje vás",
|
||||
|
@ -41,15 +41,15 @@
|
|||
"account.statuses_counter": "{count, plural, one {{counter} Příspěvek} few {{counter} Příspěvky} many {{counter} Příspěvků} other {{counter} Příspěvků}}",
|
||||
"account.unblock": "Odblokovat @{name}",
|
||||
"account.unblock_domain": "Odblokovat doménu {domain}",
|
||||
"account.unblock_short": "Unblock",
|
||||
"account.unblock_short": "Odblokovat",
|
||||
"account.unendorse": "Nezvýrazňovat na profilu",
|
||||
"account.unfollow": "Přestat sledovat",
|
||||
"account.unmute": "Zrušit skrytí @{name}",
|
||||
"account.unmute_notifications": "Zrušit skrytí oznámení od @{name}",
|
||||
"account.unmute_short": "Unmute",
|
||||
"account.unmute": "Odkrýt @{name}",
|
||||
"account.unmute_notifications": "Odkrýt oznámení od @{name}",
|
||||
"account.unmute_short": "Odkrýt",
|
||||
"account_note.placeholder": "Klikněte pro přidání poznámky",
|
||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||
"admin.dashboard.daily_retention": "Míra udržení uživatelů podle dne po registraci",
|
||||
"admin.dashboard.monthly_retention": "Míra udržení uživatelů podle měsíce po registraci",
|
||||
"admin.dashboard.retention.average": "Průměr",
|
||||
"admin.dashboard.retention.cohort": "Měsíc registrace",
|
||||
"admin.dashboard.retention.cohort_size": "Noví uživatelé",
|
||||
|
@ -106,7 +106,7 @@
|
|||
"compose_form.poll.switch_to_single": "Povolit u ankety výběr jediné možnosti",
|
||||
"compose_form.publish": "Odeslat",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "Save changes",
|
||||
"compose_form.save_changes": "Uložit změny",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Označit média za citlivá} few {Označit média za citlivá} many {Označit média za citlivá} other {Označit média za citlivá}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Média jsou označena za citlivá} few {Média jsou označena za citlivá} many {Média jsou označena za citlivá} other {Média jsou označena za citlivá}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Média nejsou označena za citlivá} few {Média nejsou označena za citlivá} many {Média nejsou označena za citlivá} other {Média nejsou označena za citlivá}}",
|
||||
|
@ -168,7 +168,7 @@
|
|||
"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.domain_blocks": "Ještě nemáte žádné blokované domény.",
|
||||
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
|
||||
"empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!",
|
||||
"empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené příspěvky. Pokud si nějaký oblíbíte, zobrazí se zde.",
|
||||
"empty_column.favourites": "Tento příspěvek si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.",
|
||||
"empty_column.follow_recommendations": "Zdá se, že pro vás nelze vygenerovat žádné návrhy. Můžete zkusit přes vyhledávání naleznout lidi, které znáte, nebo prozkoumat populární hashtagy.",
|
||||
|
@ -187,12 +187,12 @@
|
|||
"error.unexpected_crash.next_steps_addons": "Zkuste je vypnout a stránku obnovit. Pokud to nepomůže, zkuste otevřít Mastodon v jiném prohlížeči nebo nativní aplikaci.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
|
||||
"errors.unexpected_crash.report_issue": "Nahlásit problém",
|
||||
"explore.search_results": "Search results",
|
||||
"explore.suggested_follows": "For you",
|
||||
"explore.title": "Explore",
|
||||
"explore.trending_links": "News",
|
||||
"explore.trending_statuses": "Posts",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
"explore.search_results": "Výsledky hledání",
|
||||
"explore.suggested_follows": "Pro vás",
|
||||
"explore.title": "Objevování",
|
||||
"explore.trending_links": "Zprávy",
|
||||
"explore.trending_statuses": "Příspěvky",
|
||||
"explore.trending_tags": "Hashtagy",
|
||||
"federation.change": "Adjust status federation",
|
||||
"federation.federated.long": "Allow toot to reach other instances",
|
||||
"federation.federated.short": "Federated",
|
||||
|
@ -203,7 +203,7 @@
|
|||
"follow_recommendations.lead": "Příspěvky od lidí, které sledujete, se budou objevovat v chronologickém pořadí ve vaší domovské ose. Nebojte se, že uděláte chybu, můžete lidi stejně snadno kdykoliv přestat sledovat!",
|
||||
"follow_request.authorize": "Autorizovat",
|
||||
"follow_request.reject": "Odmítnout",
|
||||
"follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.",
|
||||
"follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, personál {domain} usoudil, že byste mohli chtít tyto požadavky na sledování zkontrolovat ručně.",
|
||||
"generic.saved": "Uloženo",
|
||||
"getting_started.developers": "Vývojáři",
|
||||
"getting_started.directory": "Adresář profilů",
|
||||
|
@ -314,7 +314,7 @@
|
|||
"navigation_bar.preferences": "Předvolby",
|
||||
"navigation_bar.public_timeline": "Federovaná časová osa",
|
||||
"navigation_bar.security": "Zabezpečení",
|
||||
"notification.admin.sign_up": "{name} signed up",
|
||||
"notification.admin.sign_up": "Uživatel {name} se zaregistroval",
|
||||
"notification.favourite": "Uživatel {name} si oblíbil váš příspěvek",
|
||||
"notification.follow": "Uživatel {name} vás začal sledovat",
|
||||
"notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
|
||||
|
@ -323,10 +323,10 @@
|
|||
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
||||
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
||||
"notification.status": "Nový příspěvek od {name}",
|
||||
"notification.update": "uživatel {name} upravil příspěvek",
|
||||
"notifications.clear": "Smazat oznámení",
|
||||
"notification.update": "Uživatel {name} upravil příspěvek",
|
||||
"notifications.clear": "Vymazat oznámení",
|
||||
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||
"notifications.column_settings.admin.sign_up": "Nové registrace:",
|
||||
"notifications.column_settings.alert": "Oznámení na počítači",
|
||||
"notifications.column_settings.favourite": "Oblíbení:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
|
||||
|
@ -383,32 +383,32 @@
|
|||
"regeneration_indicator.label": "Načítání…",
|
||||
"regeneration_indicator.sublabel": "Váš domovský kanál se připravuje!",
|
||||
"relative_time.days": "{number} d",
|
||||
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
||||
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
|
||||
"relative_time.full.days": "před {number, plural, one {# dnem} few {# dny} many {# dny} other {# dny}}",
|
||||
"relative_time.full.hours": "před {number, plural, one {# hodinou} few {# hodinami} many {# hodinami} other {# hodinami}}",
|
||||
"relative_time.full.just_now": "právě teď",
|
||||
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
|
||||
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
|
||||
"relative_time.full.minutes": "před {number, plural, one {# minutou} few {# minutami} many {# minutami} other {# minutami}}",
|
||||
"relative_time.full.seconds": "před {number, plural, one {# sekundou} few {# sekundami} many {# sekundami} other {# sekundami}}",
|
||||
"relative_time.hours": "{number} h",
|
||||
"relative_time.just_now": "teď",
|
||||
"relative_time.minutes": "{number} m",
|
||||
"relative_time.seconds": "{number} s",
|
||||
"relative_time.today": "dnes",
|
||||
"reply_indicator.cancel": "Zrušit",
|
||||
"report.block": "Block",
|
||||
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
||||
"report.block": "Zablokovat",
|
||||
"report.block_explanation": "Neuvidíte jejich příspěvky. Oni neuvidí vaše příspěvky ani vás nebudou moci sledovat. Poznají, že jsou blokováni.",
|
||||
"report.categories.other": "Ostatní",
|
||||
"report.categories.spam": "Spam",
|
||||
"report.categories.violation": "Obsah porušuje jedno nebo více pravidel serveru",
|
||||
"report.category.subtitle": "Vyberte nejbližší možnost",
|
||||
"report.category.title": "Povězte nám, proč chcete {type} nahlásit",
|
||||
"report.category.title_account": "profile",
|
||||
"report.category.title_status": "post",
|
||||
"report.close": "Done",
|
||||
"report.comment.title": "Is there anything else you think we should know?",
|
||||
"report.category.title_account": "profil",
|
||||
"report.category.title_status": "příspěvek",
|
||||
"report.close": "Hotovo",
|
||||
"report.comment.title": "Ještě něco jiného, co myslíte, že bychom měli vědět?",
|
||||
"report.forward": "Přeposlat na {target}",
|
||||
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii hlášení?",
|
||||
"report.mute": "Mute",
|
||||
"report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
|
||||
"report.mute": "Skrýt",
|
||||
"report.mute_explanation": "Neuvidíte jejich příspěvky. Oni vás mohou nadále sledovat i vidět vaše příspěvky a nebudou vědět, že jsou skryti.",
|
||||
"report.next": "Dále",
|
||||
"report.placeholder": "Dodatečné komentáře",
|
||||
"report.reasons.dislike": "Nelíbí se mi",
|
||||
|
@ -425,12 +425,12 @@
|
|||
"report.statuses.title": "Existují příspěvky dokládající toto hlášení?",
|
||||
"report.submit": "Odeslat",
|
||||
"report.target": "Nahlášení uživatele {target}",
|
||||
"report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:",
|
||||
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
|
||||
"report.thanks.title": "Don't want to see this?",
|
||||
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
|
||||
"report.unfollow": "Unfollow @{name}",
|
||||
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
|
||||
"report.thanks.take_action": "Tady jsou vaše možnosti pro řízení toho, co na Mastodonu vidíte:",
|
||||
"report.thanks.take_action_actionable": "Zatímco to posuzujeme, můžete podniknout kroky proti @{name}:",
|
||||
"report.thanks.title": "Nechcete tohle vidět?",
|
||||
"report.thanks.title_actionable": "Děkujeme za nahlášení, podíváme se na to.",
|
||||
"report.unfollow": "Přestat sledovat @{name}",
|
||||
"report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jejich příspěvky ve své domácí časové ose, přestaňte je sledovat.",
|
||||
"search.placeholder": "Hledat",
|
||||
"search_popout.search_format": "Pokročilé hledání",
|
||||
"search_popout.tips.full_text": "Jednoduchý text vrací příspěvky, 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.",
|
||||
|
@ -439,9 +439,9 @@
|
|||
"search_popout.tips.text": "Jednoduchý text vrací odpovídající zobrazovaná jména, přezdívky a hashtagy",
|
||||
"search_popout.tips.user": "uživatel",
|
||||
"search_results.accounts": "Lidé",
|
||||
"search_results.all": "All",
|
||||
"search_results.all": "Vše",
|
||||
"search_results.hashtags": "Hashtagy",
|
||||
"search_results.nothing_found": "Could not find anything for these search terms",
|
||||
"search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno",
|
||||
"search_results.statuses": "Příspěvky",
|
||||
"search_results.statuses_fts_disabled": "Vyhledávání příspěvků podle jejich obsahu není na tomto Mastodon serveru povoleno.",
|
||||
"search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledků} other {výsledků}}",
|
||||
|
@ -455,14 +455,14 @@
|
|||
"status.delete": "Smazat",
|
||||
"status.detailed_status": "Podrobné zobrazení konverzace",
|
||||
"status.direct": "Poslat @{name} přímou zprávu",
|
||||
"status.edit": "Edit",
|
||||
"status.edited": "Edited {date}",
|
||||
"status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
|
||||
"status.edit": "Upravit",
|
||||
"status.edited": "Upraven {date}",
|
||||
"status.edited_x_times": "Upraven {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",
|
||||
"status.embed": "Vložit na web",
|
||||
"status.favourite": "Oblíbit",
|
||||
"status.filtered": "Filtrováno",
|
||||
"status.history.created": "{name} created {date}",
|
||||
"status.history.edited": "{name} edited {date}",
|
||||
"status.history.created": "Uživatel {name} vytvořil {date}",
|
||||
"status.history.edited": "Uživatel {name} upravil {date}",
|
||||
"status.load_more": "Zobrazit více",
|
||||
"status.local_only": "This post is only visible by other users of your instance",
|
||||
"status.media_hidden": "Média skryta",
|
||||
|
@ -507,7 +507,7 @@
|
|||
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekund} other {Zbývá # sekund}}",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} z jiných serveru se nezobrazuje.",
|
||||
"timeline_hint.resources.followers": "Sledující",
|
||||
"timeline_hint.resources.follows": "Sleduje",
|
||||
"timeline_hint.resources.follows": "Sledovaní",
|
||||
"timeline_hint.resources.statuses": "Starší příspěvky",
|
||||
"trends.counter_by_accounts": "zmiňuje {count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}}",
|
||||
"trends.trending_now": "Právě populární",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Upravit",
|
||||
"upload_form.thumbnail": "Změnit miniaturu",
|
||||
"upload_form.undo": "Smazat",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Golygu",
|
||||
"upload_form.thumbnail": "Newid mân-lun",
|
||||
"upload_form.undo": "Dileu",
|
||||
|
|
|
@ -512,15 +512,16 @@
|
|||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} taler",
|
||||
"trends.trending_now": "Hot lige nu",
|
||||
"ui.beforeunload": "Dit udkast går tabt, hvis du lukker Mastodon.",
|
||||
"units.short.billion": "{count} MIA",
|
||||
"units.short.million": "{count} M",
|
||||
"units.short.thousand": "{count} K",
|
||||
"units.short.billion": "{count} mia.",
|
||||
"units.short.million": "{count} mio.",
|
||||
"units.short.thousand": "{count} tusind",
|
||||
"upload_area.title": "Træk og slip for at uploade",
|
||||
"upload_button.label": "Tilføj billed-, video- eller lydfil(er)",
|
||||
"upload_error.limit": "Grænse for filupload nået.",
|
||||
"upload_error.poll": "Filupload ikke tilladt for afstemninger.",
|
||||
"upload_form.audio_description": "Beskrivelse til hørehæmmede",
|
||||
"upload_form.description": "Beskrivelse til svagtseende",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Redigér",
|
||||
"upload_form.thumbnail": "Skift miniature",
|
||||
"upload_form.undo": "Slet",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Bearbeiten",
|
||||
"upload_form.thumbnail": "Miniaturansicht ändern",
|
||||
"upload_form.undo": "Löschen",
|
||||
|
|
|
@ -1471,6 +1471,10 @@
|
|||
{
|
||||
"defaultMessage": "Edit",
|
||||
"id": "upload_form.edit"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "No description added",
|
||||
"id": "upload_form.description_missing"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/compose/components/upload.json"
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
|
||||
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
|
||||
"upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Ενημέρωση",
|
||||
"upload_form.thumbnail": "Αλλαγή μικρογραφίας",
|
||||
"upload_form.undo": "Διαγραφή",
|
||||
|
|
|
@ -522,6 +522,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -168,10 +168,10 @@
|
|||
"empty_column.community": "La loka templinio 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.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
|
||||
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
|
||||
"empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!",
|
||||
"empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.",
|
||||
"empty_column.favourites": "Ankoraŭ neniu stelumis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.",
|
||||
"empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
|
||||
"empty_column.follow_recommendations": "Ŝajnas, ke neniuj sugestoj povis esti generitaj por vi. Vi povas provi uzi serĉon por serĉi homojn, kiujn vi eble konas, aŭ esplori tendencajn kradvortojn.",
|
||||
"empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.",
|
||||
"empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.",
|
||||
"empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.",
|
||||
|
@ -299,7 +299,7 @@
|
|||
"navigation_bar.discover": "Esplori",
|
||||
"navigation_bar.domain_blocks": "Blokitaj domajnoj",
|
||||
"navigation_bar.edit_profile": "Redakti profilon",
|
||||
"navigation_bar.explore": "Explore",
|
||||
"navigation_bar.explore": "Esplori",
|
||||
"navigation_bar.favourites": "Stelumoj",
|
||||
"navigation_bar.filters": "Silentigitaj vortoj",
|
||||
"navigation_bar.follow_requests": "Petoj de sekvado",
|
||||
|
@ -326,7 +326,7 @@
|
|||
"notification.update": "{name} redaktis afiŝon",
|
||||
"notifications.clear": "Forviŝi sciigojn",
|
||||
"notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?",
|
||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||
"notifications.column_settings.admin.sign_up": "Novaj registriĝoj:",
|
||||
"notifications.column_settings.alert": "Retumilaj sciigoj",
|
||||
"notifications.column_settings.favourite": "Stelumoj:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn",
|
||||
|
@ -342,7 +342,7 @@
|
|||
"notifications.column_settings.sound": "Eligi sonon",
|
||||
"notifications.column_settings.status": "Novaj mesaĝoj:",
|
||||
"notifications.column_settings.unread_notifications.category": "Nelegitaj sciigoj",
|
||||
"notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications",
|
||||
"notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn",
|
||||
"notifications.column_settings.update": "Redaktoj:",
|
||||
"notifications.filter.all": "Ĉiuj",
|
||||
"notifications.filter.boosts": "Diskonigoj",
|
||||
|
@ -399,8 +399,8 @@
|
|||
"report.categories.other": "Aliaj",
|
||||
"report.categories.spam": "Spamo",
|
||||
"report.categories.violation": "Content violates one or more server rules",
|
||||
"report.category.subtitle": "Choose the best match",
|
||||
"report.category.title": "Tell us what's going on with this {type}",
|
||||
"report.category.subtitle": "Elektu la plej bonan kongruon",
|
||||
"report.category.title": "Diru al ni kio okazas pri ĉi tiu {type}",
|
||||
"report.category.title_account": "profilo",
|
||||
"report.category.title_status": "afiŝo",
|
||||
"report.close": "Farita",
|
||||
|
@ -412,25 +412,25 @@
|
|||
"report.next": "Sekva",
|
||||
"report.placeholder": "Pliaj komentoj",
|
||||
"report.reasons.dislike": "Mi ne ŝatas ĝin",
|
||||
"report.reasons.dislike_description": "It is not something you want to see",
|
||||
"report.reasons.other": "It's something else",
|
||||
"report.reasons.other_description": "The issue does not fit into other categories",
|
||||
"report.reasons.spam": "It's spam",
|
||||
"report.reasons.dislike_description": "Ĝi ne estas io, kiun vi volas vidi",
|
||||
"report.reasons.other": "Io alia",
|
||||
"report.reasons.other_description": "La problemo ne taŭgas en aliaj kategorioj",
|
||||
"report.reasons.spam": "Ĝi estas trudaĵo",
|
||||
"report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies",
|
||||
"report.reasons.violation": "Ĝi malrespektas servilajn regulojn",
|
||||
"report.reasons.violation_description": "You are aware that it breaks specific rules",
|
||||
"report.rules.subtitle": "Select all that apply",
|
||||
"report.rules.subtitle": "Elektu ĉiujn, kiuj validas",
|
||||
"report.rules.title": "Which rules are being violated?",
|
||||
"report.statuses.subtitle": "Select all that apply",
|
||||
"report.statuses.subtitle": "Elektu ĉiujn, kiuj validas",
|
||||
"report.statuses.title": "Are there any posts that back up this report?",
|
||||
"report.submit": "Sendi",
|
||||
"report.target": "Signali {target}",
|
||||
"report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:",
|
||||
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
|
||||
"report.thanks.title": "Don't want to see this?",
|
||||
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
|
||||
"report.thanks.title": "Ĉu vi ne volas vidi ĉi tion?",
|
||||
"report.thanks.title_actionable": "Dankon pro raporti, ni esploros ĉi tion.",
|
||||
"report.unfollow": "Malsekvi @{name}",
|
||||
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
|
||||
"report.unfollow_explanation": "Vi estas sekvanta ĉi tiun konton. Por ne plu vidi ties afiŝojn en via hejma templinio, malsekvu ilin.",
|
||||
"search.placeholder": "Serĉi",
|
||||
"search_popout.search_format": "Detala serĉo",
|
||||
"search_popout.tips.full_text": "Simplaj tekstoj montras la mesaĝojn, kiujn vi skribis, stelumis, diskonigis, aŭ en kiuj vi estis menciita, sed ankaŭ kongruajn uzantnomojn, montratajn nomojn, kaj kradvortojn.",
|
||||
|
@ -441,7 +441,7 @@
|
|||
"search_results.accounts": "Homoj",
|
||||
"search_results.all": "Ĉiuj",
|
||||
"search_results.hashtags": "Kradvortoj",
|
||||
"search_results.nothing_found": "Could not find anything for these search terms",
|
||||
"search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj",
|
||||
"search_results.statuses": "Mesaĝoj",
|
||||
"search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.",
|
||||
"search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Redakti",
|
||||
"upload_form.thumbnail": "Ŝanĝi etigita bildo",
|
||||
"upload_form.undo": "Forigi",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "No se permite la subida de archivos en encuestas.",
|
||||
"upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas",
|
||||
"upload_form.description": "Agregá una descripción para personas con dificultades visuales",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Cambiar miniatura",
|
||||
"upload_form.undo": "Eliminar",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Cambiar miniatura",
|
||||
"upload_form.undo": "Borrar",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Cambiar miniatura",
|
||||
"upload_form.undo": "Borrar",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Redigeeri",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Kustuta",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Editatu",
|
||||
"upload_form.thumbnail": "Aldatu koadro txikia",
|
||||
"upload_form.undo": "Ezabatu",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "بارگذاری پرونده در نظرسنجیها مجاز نیست.",
|
||||
"upload_form.audio_description": "برای ناشنوایان توصیفش کنید",
|
||||
"upload_form.description": "برای کمبینایان توصیفش کنید",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "ویرایش",
|
||||
"upload_form.thumbnail": "تغییر بندانگشتی",
|
||||
"upload_form.undo": "حذف",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.",
|
||||
"upload_form.audio_description": "Kuvaile kuulovammaisille",
|
||||
"upload_form.description": "Anna kuvaus näkörajoitteisia varten",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Muokkaa",
|
||||
"upload_form.thumbnail": "Vaihda pikkukuva",
|
||||
"upload_form.undo": "Peru",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
|
||||
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
|
||||
"upload_form.description": "Décrire pour les malvoyant·e·s",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Modifier",
|
||||
"upload_form.thumbnail": "Changer la vignette",
|
||||
"upload_form.undo": "Supprimer",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
|
||||
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
|
||||
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Deasaich",
|
||||
"upload_form.thumbnail": "Atharraich an dealbhag",
|
||||
"upload_form.undo": "Sguab às",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "Non se poden subir ficheiros nas enquisas.",
|
||||
"upload_form.audio_description": "Describir para persoas con problemas auditivos",
|
||||
"upload_form.description": "Describir para persoas con problemas visuais",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Cambiar a miniatura",
|
||||
"upload_form.undo": "Eliminar",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.description": "תיאור לכבדי ראיה",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "ביטול",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "संशोधन करें",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "मिटाए",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.",
|
||||
"upload_form.audio_description": "Opišite za ljude sa slabim sluhom",
|
||||
"upload_form.description": "Opišite za ljude sa slabim vidom",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Uredi",
|
||||
"upload_form.thumbnail": "Promijeni pretpregled",
|
||||
"upload_form.undo": "Obriši",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
|
||||
"upload_form.audio_description": "Írja le a hallássérültek számára",
|
||||
"upload_form.description": "Leírás látáskorlátozottak számára",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Szerkesztés",
|
||||
"upload_form.thumbnail": "Előnézet megváltoztatása",
|
||||
"upload_form.undo": "Törlés",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։",
|
||||
"upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար",
|
||||
"upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Խմբագրել",
|
||||
"upload_form.thumbnail": "Փոխել պատկերակը",
|
||||
"upload_form.undo": "Յետարկել",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Unggah berkas tak diizinkan di japat ini.",
|
||||
"upload_form.audio_description": "Penjelasan untuk orang dengan gangguan pendengaran",
|
||||
"upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Sunting",
|
||||
"upload_form.thumbnail": "Ubah gambar kecil",
|
||||
"upload_form.undo": "Undo",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Desfacar",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.",
|
||||
"upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta",
|
||||
"upload_form.description": "Lýstu þessu fyrir sjónskerta",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Breyta",
|
||||
"upload_form.thumbnail": "Skipta um smámynd",
|
||||
"upload_form.undo": "Eyða",
|
||||
|
|
|
@ -148,7 +148,7 @@
|
|||
"embed.preview": "Ecco come apparirà:",
|
||||
"emoji_button.activity": "Attività",
|
||||
"emoji_button.custom": "Personalizzato",
|
||||
"emoji_button.flags": "Segnalazioni",
|
||||
"emoji_button.flags": "Bandiere",
|
||||
"emoji_button.food": "Cibo & Bevande",
|
||||
"emoji_button.label": "Inserisci emoji",
|
||||
"emoji_button.nature": "Natura",
|
||||
|
@ -489,7 +489,7 @@
|
|||
"status.show_less_all": "Mostra meno per tutti",
|
||||
"status.show_more": "Mostra di più",
|
||||
"status.show_more_all": "Mostra di più per tutti",
|
||||
"status.show_thread": "Mostra thread",
|
||||
"status.show_thread": "Mostra conversazione",
|
||||
"status.uncached_media_warning": "Non disponibile",
|
||||
"status.unmute_conversation": "Annulla silenzia conversazione",
|
||||
"status.unpin": "Non fissare in cima al profilo",
|
||||
|
@ -509,7 +509,7 @@
|
|||
"timeline_hint.resources.followers": "Follower",
|
||||
"timeline_hint.resources.follows": "Segue",
|
||||
"timeline_hint.resources.statuses": "Post meno recenti",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parlano",
|
||||
"trends.trending_now": "Di tendenza ora",
|
||||
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
|
||||
"units.short.billion": "{count}G",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Caricamento file non consentito nei sondaggi.",
|
||||
"upload_form.audio_description": "Descrizione per persone con difetti uditivi",
|
||||
"upload_form.description": "Descrizione per utenti con disabilità visive",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Modifica",
|
||||
"upload_form.thumbnail": "Cambia miniatura",
|
||||
"upload_form.undo": "Cancella",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "アンケートではファイルをアップロードできません。",
|
||||
"upload_form.audio_description": "聴取が難しいユーザーへの説明",
|
||||
"upload_form.description": "閲覧が難しいユーザーへの説明",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "編集",
|
||||
"upload_form.thumbnail": "サムネイルを変更",
|
||||
"upload_form.undo": "削除",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "გაუქმება",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Ur ittusireg ara usali n ufaylu s tefranin.",
|
||||
"upload_form.audio_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt",
|
||||
"upload_form.description": "Glem-d i yemdaneni yesɛan ugur deg yiẓri",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Ẓreg",
|
||||
"upload_form.thumbnail": "Beddel tugna",
|
||||
"upload_form.undo": "Kkes",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.",
|
||||
"upload_form.audio_description": "Есту қабілеті нашар адамдарға сипаттама беріңіз",
|
||||
"upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Түзету",
|
||||
"upload_form.thumbnail": "Суретті өзгерту",
|
||||
"upload_form.undo": "Өшіру",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -131,7 +131,7 @@
|
|||
"confirmations.mute.explanation": "이 동작은 그의 게시물, 그를 멘션하는 게시물을 숨깁니다, 하지만 여전히 그가 당신의 게시물을 보고 팔로우 할 수 있습니다.",
|
||||
"confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
|
||||
"confirmations.redraft.confirm": "삭제하고 다시 쓰기",
|
||||
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 포스트에 대한 부스트와 즐겨찾기를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
|
||||
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 게시물에 대한 부스트와 즐겨찾기를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
|
||||
"confirmations.reply.confirm": "답글",
|
||||
"confirmations.reply.message": "답글을 달기 위해 현재 작성 중인 메시지가 덮어 씌워집니다. 진행하시겠습니까?",
|
||||
"confirmations.unfollow.confirm": "팔로우 해제",
|
||||
|
@ -370,7 +370,7 @@
|
|||
"poll.votes": "{votes} 표",
|
||||
"poll_button.add_poll": "투표 추가",
|
||||
"poll_button.remove_poll": "투표 삭제",
|
||||
"privacy.change": "포스트의 프라이버시 설정을 변경",
|
||||
"privacy.change": "게시물의 프라이버시 설정을 변경",
|
||||
"privacy.direct.long": "멘션한 사용자에게만 공개",
|
||||
"privacy.direct.short": "다이렉트",
|
||||
"privacy.private.long": "팔로워에게만 공개",
|
||||
|
@ -450,7 +450,7 @@
|
|||
"status.block": "@{name} 차단",
|
||||
"status.bookmark": "보관",
|
||||
"status.cancel_reblog_private": "부스트 취소",
|
||||
"status.cannot_reblog": "이 포스트는 부스트 할 수 없습니다",
|
||||
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
|
||||
"status.copy": "게시물 링크 복사",
|
||||
"status.delete": "삭제",
|
||||
"status.detailed_status": "대화 자세히 보기",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.",
|
||||
"upload_form.audio_description": "청각 장애인을 위한 설명",
|
||||
"upload_form.description": "시각장애인을 위한 설명",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "편집",
|
||||
"upload_form.thumbnail": "썸네일 변경",
|
||||
"upload_form.undo": "삭제",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Di rapirsîyan de mafê barkirina pelan nayê dayîn.",
|
||||
"upload_form.audio_description": "Ji bona kesên kêm dibihîsin re pênase bike",
|
||||
"upload_form.description": "Ji bona astengdarên dîtinê re vebêje",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Serrast bike",
|
||||
"upload_form.thumbnail": "Wêneyê biçûk biguherîne",
|
||||
"upload_form.undo": "Jê bibe",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Nyns yw gesys ughkarga restrennow gans sondyansow.",
|
||||
"upload_form.audio_description": "Deskrifewgh rag tus vodharek",
|
||||
"upload_form.description": "Deskrifewgh rag tus dhallek",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Golegi",
|
||||
"upload_form.thumbnail": "Chanjya avenik",
|
||||
"upload_form.undo": "Dilea",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "Datņu augšupielādes aptaujās nav atļautas.",
|
||||
"upload_form.audio_description": "Aprakstiet cilvēkiem ar dzirdes zudumu",
|
||||
"upload_form.description": "Aprakstiet vājredzīgajiem",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Rediģēt",
|
||||
"upload_form.thumbnail": "Nomainīt sīktēlu",
|
||||
"upload_form.undo": "Dzēst",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.audio_description": "കേൾവിശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
|
||||
"upload_form.description": "കാഴ്ചശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "തിരുത്തുക",
|
||||
"upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക",
|
||||
"upload_form.undo": "ഇല്ലാതാക്കുക",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "Tidak boleh memuat naik fail bersama undian.",
|
||||
"upload_form.audio_description": "Jelaskan untuk orang yang ada masalah pendengaran",
|
||||
"upload_form.description": "Jelaskan untuk orang yang ada masalah penglihatan",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Sunting",
|
||||
"upload_form.thumbnail": "Ubah gambar kecil",
|
||||
"upload_form.undo": "Padam",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.",
|
||||
"upload_form.audio_description": "Omschrijf dit voor mensen met een auditieve beperking",
|
||||
"upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Bewerken",
|
||||
"upload_form.thumbnail": "Miniatuurafbeelding wijzigen",
|
||||
"upload_form.undo": "Verwijderen",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Filopplasting ikkje tillate med meiningsmålingar.",
|
||||
"upload_form.audio_description": "Grei ut for folk med nedsett høyrsel",
|
||||
"upload_form.description": "Skildr for synshemja",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Rediger",
|
||||
"upload_form.thumbnail": "Bytt miniatyrbilete",
|
||||
"upload_form.undo": "Slett",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Filopplasting inni avstemninger er ikke tillatt.",
|
||||
"upload_form.audio_description": "Beskriv det for folk med hørselstap",
|
||||
"upload_form.description": "Beskriv for synshemmede",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Rediger",
|
||||
"upload_form.thumbnail": "Endre miniatyrbilde",
|
||||
"upload_form.undo": "Angre",
|
||||
|
|
|
@ -106,7 +106,7 @@
|
|||
"compose_form.poll.switch_to_single": "Cambiar lo sondatge per permetre una sola causida",
|
||||
"compose_form.publish": "Tut",
|
||||
"compose_form.publish_loud": "{publish} !",
|
||||
"compose_form.save_changes": "Save changes",
|
||||
"compose_form.save_changes": "Salvar los cambiaments",
|
||||
"compose_form.sensitive.hide": "Marcar coma sensible",
|
||||
"compose_form.sensitive.marked": "Lo mèdia es marcat coma sensible",
|
||||
"compose_form.sensitive.unmarked": "Lo mèdia es pas marcat coma sensible",
|
||||
|
@ -187,9 +187,9 @@
|
|||
"error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs",
|
||||
"errors.unexpected_crash.report_issue": "Senhalar un problèma",
|
||||
"explore.search_results": "Search results",
|
||||
"explore.search_results": "Resultats de recèrca",
|
||||
"explore.suggested_follows": "For you",
|
||||
"explore.title": "Explore",
|
||||
"explore.title": "Explorar",
|
||||
"explore.trending_links": "News",
|
||||
"explore.trending_statuses": "Posts",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
|
@ -367,7 +367,7 @@
|
|||
"poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}",
|
||||
"poll.vote": "Votar",
|
||||
"poll.voted": "Avètz votat per aquesta responsa",
|
||||
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
|
||||
"poll.votes": "{votes, plural, one {# vòte} other {# vòtes}}",
|
||||
"poll_button.add_poll": "Ajustar un sondatge",
|
||||
"poll_button.remove_poll": "Levar lo sondatge",
|
||||
"privacy.change": "Ajustar la confidencialitat del messatge",
|
||||
|
@ -383,35 +383,35 @@
|
|||
"regeneration_indicator.label": "Cargament…",
|
||||
"regeneration_indicator.sublabel": "Sèm a preparar vòstre flux d’acuèlh !",
|
||||
"relative_time.days": "fa {number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
||||
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
|
||||
"relative_time.full.just_now": "just now",
|
||||
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
|
||||
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
|
||||
"relative_time.full.days": "{number, plural, one {# jorn} other {# jorns}} ago",
|
||||
"relative_time.full.hours": "fa {number, plural, one {# ora} other {# oras}}",
|
||||
"relative_time.full.just_now": "ara",
|
||||
"relative_time.full.minutes": "fa {number, plural, one {# minuta} other {# minutas}}",
|
||||
"relative_time.full.seconds": "fa {number, plural, one {# segonda} other {# segondas}}",
|
||||
"relative_time.hours": "fa {number}h",
|
||||
"relative_time.just_now": "ara",
|
||||
"relative_time.minutes": "fa {number} min",
|
||||
"relative_time.seconds": "fa {number}s",
|
||||
"relative_time.today": "uèi",
|
||||
"reply_indicator.cancel": "Anullar",
|
||||
"report.block": "Block",
|
||||
"report.block": "Blocar",
|
||||
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
||||
"report.categories.other": "Other",
|
||||
"report.categories.spam": "Spam",
|
||||
"report.categories.violation": "Content violates one or more server rules",
|
||||
"report.category.subtitle": "Choose the best match",
|
||||
"report.category.title": "Tell us what's going on with this {type}",
|
||||
"report.category.title_account": "profile",
|
||||
"report.category.title_status": "post",
|
||||
"report.close": "Done",
|
||||
"report.category.title_account": "perfil",
|
||||
"report.category.title_status": "publicacion",
|
||||
"report.close": "Acabat",
|
||||
"report.comment.title": "Is there anything else you think we should know?",
|
||||
"report.forward": "Far sègre a {target}",
|
||||
"report.forward_hint": "Lo compte ven d’un autre servidor. Volètz mandar una còpia anonima del rapòrt enlai tanben ?",
|
||||
"report.mute": "Mute",
|
||||
"report.mute": "Amudir",
|
||||
"report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
|
||||
"report.next": "Next",
|
||||
"report.next": "Seguent",
|
||||
"report.placeholder": "Comentaris addicionals",
|
||||
"report.reasons.dislike": "I don't like it",
|
||||
"report.reasons.dislike": "M’agrada pas",
|
||||
"report.reasons.dislike_description": "It is not something you want to see",
|
||||
"report.reasons.other": "It's something else",
|
||||
"report.reasons.other_description": "The issue does not fit into other categories",
|
||||
|
@ -455,7 +455,7 @@
|
|||
"status.delete": "Escafar",
|
||||
"status.detailed_status": "Vista detalhada de la convèrsa",
|
||||
"status.direct": "Messatge per @{name}",
|
||||
"status.edit": "Edit",
|
||||
"status.edit": "Modificar",
|
||||
"status.edited": "Edited {date}",
|
||||
"status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
|
||||
"status.embed": "Embarcar",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.",
|
||||
"upload_form.audio_description": "Descriure per las personas amb pèrdas auditivas",
|
||||
"upload_form.description": "Descripcion pels mal vesents",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Modificar",
|
||||
"upload_form.thumbnail": "Cambiar la vinheta",
|
||||
"upload_form.undo": "Suprimir",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.",
|
||||
"upload_form.audio_description": "Opisz dla osób niesłyszących i niedosłyszących",
|
||||
"upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Edytuj",
|
||||
"upload_form.thumbnail": "Zmień miniaturę",
|
||||
"upload_form.undo": "Usuń",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.",
|
||||
"upload_form.audio_description": "Descrever para deficientes auditivos",
|
||||
"upload_form.description": "Descrever para deficientes visuais",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Alterar miniatura",
|
||||
"upload_form.undo": "Excluir",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Carregamento de ficheiros não é permitido em votações.",
|
||||
"upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva",
|
||||
"upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Alterar miniatura",
|
||||
"upload_form.undo": "Eliminar",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Încărcarea fișierului nu este permisă cu sondaje.",
|
||||
"upload_form.audio_description": "Descrie pentru persoanele cu deficiență a auzului",
|
||||
"upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Modifică",
|
||||
"upload_form.thumbnail": "Schimbă miniatura",
|
||||
"upload_form.undo": "Șterge",
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
"upload_error.poll": "К опросам нельзя прикреплять файлы.",
|
||||
"upload_form.audio_description": "Опишите аудиофайл для людей с нарушением слуха",
|
||||
"upload_form.description": "Добавьте описание для людей с нарушениями зрения:",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Изменить",
|
||||
"upload_form.thumbnail": "Изменить обложку",
|
||||
"upload_form.undo": "Отменить",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"upload_error.poll": "Non si permitit s'imbiu de archìvios in is sondàgios.",
|
||||
"upload_form.audio_description": "Descritzione pro persones cun pèrdida auditiva",
|
||||
"upload_form.description": "Descritzione pro persones cun problemas visuales",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Modìfica",
|
||||
"upload_form.thumbnail": "Càmbia sa miniadura",
|
||||
"upload_form.undo": "Cantzella",
|
||||
|
|
|
@ -515,6 +515,7 @@
|
|||
"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_missing": "No description added",
|
||||
"upload_form.edit": "සංස්කරණය",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Delete",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.",
|
||||
"upload_form.audio_description": "Popíš, pre ľudí so stratou sluchu",
|
||||
"upload_form.description": "Opis pre slabo vidiacich",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Uprav",
|
||||
"upload_form.thumbnail": "Zmeniť miniatúru",
|
||||
"upload_form.undo": "Vymaž",
|
||||
|
|
|
@ -46,10 +46,10 @@
|
|||
"account.unfollow": "Prenehaj slediti",
|
||||
"account.unmute": "Odtišaj @{name}",
|
||||
"account.unmute_notifications": "Vklopi obvestila od @{name}",
|
||||
"account.unmute_short": "Unmute",
|
||||
"account.unmute_short": "Odtišaj",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||
"admin.dashboard.daily_retention": "Mera ohranjanja uporabnikov po dnevih od registracije",
|
||||
"admin.dashboard.monthly_retention": "Mera ohranjanja uporabnikov po mesecih od registracije",
|
||||
"admin.dashboard.retention.average": "Povprečje",
|
||||
"admin.dashboard.retention.cohort": "Mesec prijave",
|
||||
"admin.dashboard.retention.cohort_size": "Novi uporabniki",
|
||||
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Prenos datoteke z anketami ni dovoljen.",
|
||||
"upload_form.audio_description": "Opiši za osebe z okvaro sluha",
|
||||
"upload_form.description": "Opišite za slabovidne",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Uredi",
|
||||
"upload_form.thumbnail": "Spremeni sličico",
|
||||
"upload_form.undo": "Izbriši",
|
||||
|
|
|
@ -521,6 +521,7 @@
|
|||
"upload_error.poll": "Me pyetësorët s’lejohet ngarkim kartelash.",
|
||||
"upload_form.audio_description": "Përshkruajeni për persona me dëgjim të kufizuar",
|
||||
"upload_form.description": "Përshkruajeni për persona me probleme shikimi",
|
||||
"upload_form.description_missing": "No description added",
|
||||
"upload_form.edit": "Përpunoni",
|
||||
"upload_form.thumbnail": "Ndryshoni miniaturën",
|
||||
"upload_form.undo": "Fshije",
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue