Merge pull request #1199 from ThibG/glitch-soc/merge-upstream

Merge upstream changes
This commit is contained in:
ThibG 2019-08-20 12:09:11 +02:00 committed by GitHub
commit bce46f2057
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
257 changed files with 7257 additions and 1607 deletions

10
Gemfile
View file

@ -12,7 +12,7 @@ gem 'thor', '~> 0.20'
gem 'hamlit-rails', '~> 0.2' gem 'hamlit-rails', '~> 0.2'
gem 'pg', '~> 1.1' gem 'pg', '~> 1.1'
gem 'makara', '~> 0.4' gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.2' gem 'pghero', '~> 2.3'
gem 'dotenv-rails', '~> 2.7' gem 'dotenv-rails', '~> 2.7'
gem 'aws-sdk-s3', '~> 1.46', require: false gem 'aws-sdk-s3', '~> 1.46', require: false
@ -62,12 +62,12 @@ gem 'mime-types', '~> 3.2', require: 'mime/types/columnar'
gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532' gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
gem 'nokogiri', '~> 1.10' gem 'nokogiri', '~> 1.10'
gem 'nsa', '~> 0.2' gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.8' gem 'oj', '~> 3.9'
gem 'ostatus2', '~> 2.0' gem 'ostatus2', '~> 2.0'
gem 'ox', '~> 2.11' gem 'ox', '~> 2.11'
gem 'parslet' gem 'parslet'
gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
gem 'pundit', '~> 2.0' gem 'pundit', '~> 2.1'
gem 'premailer-rails' gem 'premailer-rails'
gem 'rack-attack', '~> 6.1' gem 'rack-attack', '~> 6.1'
gem 'rack-cors', '~> 1.0', require: 'rack/cors' gem 'rack-cors', '~> 1.0', require: 'rack/cors'
@ -81,7 +81,7 @@ gem 'sidekiq', '~> 5.2'
gem 'sidekiq-scheduler', '~> 3.0' gem 'sidekiq-scheduler', '~> 3.0'
gem 'sidekiq-unique-jobs', '~> 6.0' gem 'sidekiq-unique-jobs', '~> 6.0'
gem 'sidekiq-bulk', '~>0.2.0' gem 'sidekiq-bulk', '~>0.2.0'
gem 'simple-navigation', '~> 4.0' gem 'simple-navigation', '~> 4.1'
gem 'simple_form', '~> 4.1' gem 'simple_form', '~> 4.1'
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
gem 'stoplight', '~> 2.1.3' gem 'stoplight', '~> 2.1.3'
@ -134,7 +134,7 @@ group :development do
gem 'letter_opener_web', '~> 1.3' gem 'letter_opener_web', '~> 1.3'
gem 'memory_profiler' gem 'memory_profiler'
gem 'rubocop', '~> 0.74', require: false gem 'rubocop', '~> 0.74', require: false
gem 'rubocop-rails', '~> 2.2', require: false gem 'rubocop-rails', '~> 2.3', require: false
gem 'brakeman', '~> 4.6', require: false gem 'brakeman', '~> 4.6', require: false
gem 'bundler-audit', '~> 0.6', require: false gem 'bundler-audit', '~> 0.6', require: false

View file

@ -387,7 +387,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5) sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0) statsd-ruby (~> 1.4, >= 1.4.0)
oj (3.8.1) oj (3.9.0)
omniauth (1.9.0) omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0) hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
@ -423,9 +423,9 @@ GEM
equatable (~> 0.5.0) equatable (~> 0.5.0)
tty-color (~> 0.4.0) tty-color (~> 0.4.0)
pg (1.1.4) pg (1.1.4)
pghero (2.2.1) pghero (2.3.0)
activerecord activerecord (>= 5)
pkg-config (1.3.7) pkg-config (1.3.8)
premailer (1.11.1) premailer (1.11.1)
addressable addressable
css_parser (>= 1.6.0) css_parser (>= 1.6.0)
@ -445,7 +445,7 @@ GEM
public_suffix (3.1.1) public_suffix (3.1.1)
puma (4.1.0) puma (4.1.0)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.0.1) pundit (2.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.1.6) raabro (1.1.6)
rack (2.0.7) rack (2.0.7)
@ -555,7 +555,7 @@ GEM
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7) unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.2.1) rubocop-rails (2.3.0)
rack (>= 1.1) rack (>= 1.1)
rubocop (>= 0.72.0) rubocop (>= 0.72.0)
ruby-progressbar (1.10.1) ruby-progressbar (1.10.1)
@ -584,7 +584,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.5) concurrent-ruby (~> 1.0, >= 1.0.5)
sidekiq (>= 4.0, < 7.0) sidekiq (>= 4.0, < 7.0)
thor (~> 0) thor (~> 0)
simple-navigation (4.0.5) simple-navigation (4.1.0)
activesupport (>= 2.3.2) activesupport (>= 2.3.2)
simple_form (4.1.0) simple_form (4.1.0)
actionpack (>= 5.0) actionpack (>= 5.0)
@ -732,7 +732,7 @@ DEPENDENCIES
nilsimsa! nilsimsa!
nokogiri (~> 1.10) nokogiri (~> 1.10)
nsa (~> 0.2) nsa (~> 0.2)
oj (~> 3.8) oj (~> 3.9)
omniauth (~> 1.9) omniauth (~> 1.9)
omniauth-cas (~> 1.1) omniauth-cas (~> 1.1)
omniauth-saml (~> 1.10) omniauth-saml (~> 1.10)
@ -743,7 +743,7 @@ DEPENDENCIES
parallel_tests (~> 2.29) parallel_tests (~> 2.29)
parslet parslet
pg (~> 1.1) pg (~> 1.1)
pghero (~> 2.2) pghero (~> 2.3)
pkg-config (~> 1.3) pkg-config (~> 1.3)
posix-spawn! posix-spawn!
premailer-rails premailer-rails
@ -751,7 +751,7 @@ DEPENDENCIES
pry-byebug (~> 3.7) pry-byebug (~> 3.7)
pry-rails (~> 0.3) pry-rails (~> 0.3)
puma (~> 4.1) puma (~> 4.1)
pundit (~> 2.0) pundit (~> 2.1)
rack-attack (~> 6.1) rack-attack (~> 6.1)
rack-cors (~> 1.0) rack-cors (~> 1.0)
rails (~> 5.2.3) rails (~> 5.2.3)
@ -767,13 +767,13 @@ DEPENDENCIES
rspec-rails (~> 3.8) rspec-rails (~> 3.8)
rspec-sidekiq (~> 3.0) rspec-sidekiq (~> 3.0)
rubocop (~> 0.74) rubocop (~> 0.74)
rubocop-rails (~> 2.2) rubocop-rails (~> 2.3)
sanitize (~> 5.0) sanitize (~> 5.0)
sidekiq (~> 5.2) sidekiq (~> 5.2)
sidekiq-bulk (~> 0.2.0) sidekiq-bulk (~> 0.2.0)
sidekiq-scheduler (~> 3.0) sidekiq-scheduler (~> 3.0)
sidekiq-unique-jobs (~> 6.0) sidekiq-unique-jobs (~> 6.0)
simple-navigation (~> 4.0) simple-navigation (~> 4.1)
simple_form (~> 4.1) simple_form (~> 4.1)
simplecov (~> 0.17) simplecov (~> 0.17)
sprockets-rails (~> 3.2) sprockets-rails (~> 3.2)

View file

@ -0,0 +1,43 @@
# frozen_string_literal: true
class AccountsIndex < Chewy::Index
settings index: { refresh_interval: '5m' }, analysis: {
analyzer: {
content: {
tokenizer: 'whitespace',
filter: %w(lowercase asciifolding cjk_width),
},
edge_ngram: {
tokenizer: 'edge_ngram',
filter: %w(lowercase asciifolding cjk_width),
},
},
tokenizer: {
edge_ngram: {
type: 'edge_ngram',
min_gram: 1,
max_gram: 15,
},
},
}
define_type ::Account.searchable.includes(:account_stat), delete_if: ->(account) { account.destroyed? || !account.searchable? } do
root date_detection: false do
field :id, type: 'long'
field :display_name, type: 'text', analyzer: 'content' do
field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
end
field :acct, type: 'text', analyzer: 'content', value: ->(account) { [account.username, account.domain].compact.join('@') } do
field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
end
field :following_count, type: 'long', value: ->(account) { account.following.local.count }
field :followers_count, type: 'long', value: ->(account) { account.followers.local.count }
field :last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at }
end
end
end

37
app/chewy/tags_index.rb Normal file
View file

@ -0,0 +1,37 @@
# frozen_string_literal: true
class TagsIndex < Chewy::Index
settings index: { refresh_interval: '15m' }, analysis: {
analyzer: {
content: {
tokenizer: 'keyword',
filter: %w(lowercase asciifolding cjk_width),
},
edge_ngram: {
tokenizer: 'edge_ngram',
filter: %w(lowercase asciifolding cjk_width),
},
},
tokenizer: {
edge_ngram: {
type: 'edge_ngram',
min_gram: 2,
max_gram: 15,
},
},
}
define_type ::Tag.listable, delete_if: ->(tag) { tag.destroyed? || !tag.listable? } do
root date_detection: false do
field :name, type: 'text', analyzer: 'content' do
field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
end
field :reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? }
field :usage, type: 'long', value: ->(tag) { tag.history.reduce(0) { |total, day| total + day[:accounts].to_i } }
field :last_status_at, type: 'date', value: ->(tag) { tag.last_status_at || tag.created_at }
end
end
end

View file

@ -4,10 +4,12 @@ class AboutController < ApplicationController
before_action :set_pack before_action :set_pack
layout 'public' layout 'public'
before_action :require_open_federation!, only: [:show, :more] before_action :require_open_federation!, only: [:show, :more, :blocks]
before_action :check_blocklist_enabled, only: [:blocks]
before_action :authenticate_user!, only: [:blocks], if: :blocklist_account_required?
before_action :set_body_classes, only: :show before_action :set_body_classes, only: :show
before_action :set_instance_presenter before_action :set_instance_presenter
before_action :set_expires_in before_action :set_expires_in, only: [:show, :more, :terms]
skip_before_action :require_functional!, only: [:more, :terms] skip_before_action :require_functional!, only: [:more, :terms]
@ -19,12 +21,40 @@ class AboutController < ApplicationController
def terms; end def terms; end
def blocks
@show_rationale = Setting.show_domain_blocks_rationale == 'all'
@show_rationale |= Setting.show_domain_blocks_rationale == 'users' && !current_user.nil? && current_user.functional?
@blocks = DomainBlock.with_user_facing_limitations.order('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), reject_media, domain').to_a
end
private private
def require_open_federation! def require_open_federation!
not_found if whitelist_mode? not_found if whitelist_mode?
end end
def check_blocklist_enabled
not_found if Setting.show_domain_blocks == 'disabled'
end
def blocklist_account_required?
Setting.show_domain_blocks == 'users'
end
def block_severity_text(block)
if block.severity == 'suspend'
I18n.t('domain_blocks.suspension')
else
limitations = []
limitations << I18n.t('domain_blocks.media_block') if block.reject_media?
limitations << I18n.t('domain_blocks.silence') if block.severity == 'silence'
limitations.join(', ')
end
end
helper_method :block_severity_text
helper_method :public_fetch_mode?
def new_user def new_user
User.new.tap do |user| User.new.tap do |user|
user.build_account user.build_account
@ -35,7 +65,7 @@ class AboutController < ApplicationController
helper_method :new_user helper_method :new_user
def set_pack def set_pack
use_pack 'common' use_pack 'public'
end end
def set_instance_presenter def set_instance_presenter

View file

@ -19,6 +19,7 @@ class AccountsController < ApplicationController
@pinned_statuses = [] @pinned_statuses = []
@endorsed_accounts = @account.endorsed_accounts.to_a.sample(4) @endorsed_accounts = @account.endorsed_accounts.to_a.sample(4)
@featured_hashtags = @account.featured_tags.order(statuses_count: :desc)
if current_account && @account.blocking?(current_account) if current_account && @account.blocking?(current_account)
@statuses = [] @statuses = []
@ -28,6 +29,7 @@ class AccountsController < ApplicationController
@pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses? @pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
@statuses = filtered_status_page(params) @statuses = filtered_status_page(params)
@statuses = cache_collection(@statuses, Status) @statuses = cache_collection(@statuses, Status)
@rss_url = rss_url
unless @statuses.empty? unless @statuses.empty?
@older_url = older_url if @statuses.last.id > filtered_statuses.last.id @older_url = older_url if @statuses.last.id > filtered_statuses.last.id
@ -38,8 +40,9 @@ class AccountsController < ApplicationController
format.rss do format.rss do
expires_in 0, public: true expires_in 0, public: true
@statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status) @statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE)
render xml: RSS::AccountSerializer.render(@account, @statuses) @statuses = cache_collection(@statuses, Status)
render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag])
end end
format.json do format.json do
@ -97,6 +100,14 @@ class AccountsController < ApplicationController
params[:username] params[:username]
end end
def rss_url
if tag_requested?
short_account_tag_url(@account, params[:tag], format: 'rss')
else
short_account_url(@account, format: 'rss')
end
end
def older_url def older_url
pagination_url(max_id: @statuses.last.id) pagination_url(max_id: @statuses.last.id)
end end
@ -126,7 +137,7 @@ class AccountsController < ApplicationController
end end
def tag_requested? def tag_requested?
request.path.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize) request.path.split('.').first.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize)
end end
def filtered_status_page(params) def filtered_status_page(params)

View file

@ -27,7 +27,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
end end
def set_replies def set_replies
@replies = page_params[:other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses @replies = page_params[:only_other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses
@replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted])
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
end end
@ -38,7 +38,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
type: :unordered, type: :unordered,
part_of: account_status_replies_url(@account, @status), part_of: account_status_replies_url(@account, @status),
next: next_page, next: next_page,
items: @replies.map { |status| status.local ? status : status.id } items: @replies.map { |status| status.local ? status : status.uri }
) )
return page if page_requested? return page if page_requested?
@ -55,16 +55,17 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
end end
def next_page def next_page
only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
account_status_replies_url( account_status_replies_url(
@account, @account,
@status, @status,
page: true, page: true,
min_id: @replies&.last&.id, min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id,
other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT) only_other_accounts: only_other_accounts
) )
end end
def page_params def page_params
params_slice(:other_accounts, :min_id).merge(page: true) params_slice(:only_other_accounts, :min_id).merge(page: true)
end end
end end

View file

@ -26,10 +26,13 @@ class ApplicationController < ActionController::Base
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
rescue_from ActionController::UnknownFormat, with: :not_acceptable rescue_from ActionController::UnknownFormat, with: :not_acceptable
rescue_from Mastodon::NotPermittedError, with: :forbidden rescue_from Mastodon::NotPermittedError, with: :forbidden
rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
before_action :require_functional!, if: :user_signed_in? before_action :require_functional!, if: :user_signed_in?
skip_before_action :verify_authenticity_token, only: :raise_not_found
def raise_not_found def raise_not_found
raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}" raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}"
end end
@ -163,6 +166,10 @@ class ApplicationController < ActionController::Base
respond_with_error(406) respond_with_error(406)
end end
def internal_server_error
respond_with_error(500)
end
def single_user_mode? def single_user_mode?
@single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists? @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists?
end end

View file

@ -23,6 +23,19 @@ module SignatureVerification
@signature_verification_failure_code || 401 @signature_verification_failure_code || 401
end end
def signature_key_id
raw_signature = request.headers['Signature']
signature_params = {}
raw_signature.split(',').each do |part|
parsed_parts = part.match(/([a-z]+)="([^"]+)"/i)
next if parsed_parts.nil? || parsed_parts.size != 3
signature_params[parsed_parts[1]] = parsed_parts[2]
end
signature_params['keyId']
end
def signed_request_account def signed_request_account
return @signed_request_account if defined?(@signed_request_account) return @signed_request_account if defined?(@signed_request_account)
@ -154,7 +167,7 @@ module SignatureVerification
.with_fallback { nil } .with_fallback { nil }
.with_threshold(1) .with_threshold(1)
.with_cool_off_time(5.minutes.seconds) .with_cool_off_time(5.minutes.seconds)
.with_error_handler { |error, handle| error.is_a?(HTTP::Error) ? handle.call(error) : raise(error) } .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
.run .run
end end

View file

@ -7,6 +7,8 @@ class FollowerAccountsController < ApplicationController
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_cache_headers before_action :set_cache_headers
skip_around_action :set_locale, if: -> { request.format == :json }
def index def index
respond_to do |format| respond_to do |format|
format.html do format.html do

View file

@ -7,6 +7,8 @@ class FollowingAccountsController < ApplicationController
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_cache_headers before_action :set_cache_headers
skip_around_action :set_locale, if: -> { request.format == :json }
def index def index
respond_to do |format| respond_to do |format|
format.html do format.html do

View file

@ -5,7 +5,6 @@ class HomeController < ApplicationController
before_action :set_pack before_action :set_pack
before_action :set_referrer_policy_header before_action :set_referrer_policy_header
before_action :set_initial_state_json
def index def index
@body_classes = 'app-body' @body_classes = 'app-body'
@ -45,21 +44,6 @@ class HomeController < ApplicationController
use_pack 'home' use_pack 'home'
end end
def set_initial_state_json
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
@initial_state_json = serializable_resource.to_json
end
def initial_state_params
{
settings: Web::Setting.find_by(user: current_user)&.data || {},
push_subscription: current_account.user.web_push_subscription(current_session),
current_account: current_account,
token: current_session.token,
admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
}
end
def default_redirect_path def default_redirect_path
if request.path.start_with?('/web') || whitelist_mode? if request.path.start_with?('/web') || whitelist_mode?
new_user_session_path new_user_session_path

View file

@ -3,6 +3,8 @@
class InstanceActorsController < ApplicationController class InstanceActorsController < ApplicationController
include AccountControllerConcern include AccountControllerConcern
skip_around_action :set_locale
def show def show
expires_in 10.minutes, public: true expires_in 10.minutes, public: true
render json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to render json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to

View file

@ -48,7 +48,7 @@ class InvitesController < ApplicationController
end end
def resource_params def resource_params
params.require(:invite).permit(:max_uses, :expires_in, :autofollow) params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
end end
def set_body_classes def set_body_classes

View file

@ -7,6 +7,8 @@ class MediaProxyController < ApplicationController
before_action :authenticate_user!, if: :whitelist_mode? before_action :authenticate_user!, if: :whitelist_mode?
rescue_from ActiveRecord::RecordInvalid, with: :not_found
def show def show
RedisLock.acquire(lock_options) do |lock| RedisLock.acquire(lock_options) do |lock|
if lock.acquired? if lock.acquired?

View file

@ -9,12 +9,7 @@ class PublicTimelinesController < ApplicationController
before_action :set_body_classes before_action :set_body_classes
before_action :set_instance_presenter before_action :set_instance_presenter
def show def show; end
@initial_state_json = ActiveModelSerializers::SerializableResource.new(
InitialStatePresenter.new(settings: { known_fediverse: Setting.show_known_fediverse_at_about_page }, token: current_session&.token),
serializer: InitialStateSerializer
).to_json
end
private private

View file

@ -7,26 +7,10 @@ class SharesController < ApplicationController
before_action :set_pack before_action :set_pack
before_action :set_body_classes before_action :set_body_classes
def show def show; end
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
@initial_state_json = serializable_resource.to_json
end
private private
def initial_state_params
text = [params[:title], params[:text], params[:url]].compact.join(' ')
{
settings: Web::Setting.find_by(user: current_user)&.data || {},
push_subscription: current_account.user.web_push_subscription(current_session),
current_account: current_account,
token: current_session.token,
admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
text: text,
}
end
def set_pack def set_pack
use_pack 'share' use_pack 'share'
end end

View file

@ -18,11 +18,6 @@ class TagsController < ApplicationController
format.html do format.html do
use_pack 'about' use_pack 'about'
expires_in 0, public: true expires_in 0, public: true
@initial_state_json = ActiveModelSerializers::SerializableResource.new(
InitialStatePresenter.new(settings: {}, token: current_session&.token),
serializer: InitialStateSerializer
).to_json
end end
format.rss do format.rss do

View file

@ -123,4 +123,25 @@ module ApplicationHelper
text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence) text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence)
text.split("\n").map { |line| '> ' + line }.join("\n") text.split("\n").map { |line| '> ' + line }.join("\n")
end end
def render_initial_state
state_params = {
settings: {
known_fediverse: Setting.show_known_fediverse_at_about_page,
},
text: [params[:title], params[:text], params[:url]].compact.join(' '),
}
if user_signed_in?
state_params[:settings] = state_params[:settings].merge(Web::Setting.find_by(user: current_user)&.data || {})
state_params[:push_subscription] = current_account.user.web_push_subscription(current_session)
state_params[:current_account] = current_account
state_params[:token] = current_session.token
state_params[:admin] = Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, ''))
end
json = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(state_params), serializer: InitialStateSerializer).to_json
content_tag(:script, json_escape(json).html_safe, id: 'initial-state', type: 'application/json')
end
end end

View file

@ -486,13 +486,30 @@ class Status extends ImmutablePureComponent {
return null; return null;
} }
const handlers = {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleSpoiler: this.handleExpandedToggle,
bookmark: this.handleHotkeyBookmark,
toggleCollapse: this.handleHotkeyCollapse,
toggleSensitive: this.handleHotkeyToggleSensitive,
};
if (hidden) { if (hidden) {
return ( return (
<div ref={this.handleRef}> <HotKeys handlers={handlers}>
<div ref={this.handleRef} className='status focusable' tabIndex='0'>
{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}
{' '} {' '}
{status.get('content')} {status.get('content')}
</div> </div>
</HotKeys>
); );
} }
@ -628,21 +645,6 @@ class Status extends ImmutablePureComponent {
rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: account.get('acct') }); rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: account.get('acct') });
} }
const handlers = {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleSpoiler: this.handleExpandedToggle,
bookmark: this.handleHotkeyBookmark,
toggleCollapse: this.handleHotkeyCollapse,
toggleSensitive: this.handleHotkeyToggleSensitive,
};
const computedClass = classNames('status', `status-${status.get('visibility')}`, { const computedClass = classNames('status', `status-${status.get('visibility')}`, {
collapsed: isCollapsed, collapsed: isCollapsed,
'has-background': isCollapsed && background, 'has-background': isCollapsed && background,

View file

@ -0,0 +1,25 @@
import React from 'react';
import PropTypes from 'prop-types';
import { length } from 'stringz';
export default class CharacterCounter extends React.PureComponent {
static propTypes = {
text: PropTypes.string.isRequired,
max: PropTypes.number.isRequired,
};
checkRemainingText (diff) {
if (diff < 0) {
return <span className='character-counter character-counter--over'>{diff}</span>;
}
return <span className='character-counter'>{diff}</span>;
}
render () {
const diff = this.props.max - length(this.props.text);
return this.checkRemainingText(diff);
}
}

View file

@ -15,6 +15,8 @@ import { countableText } from 'flavours/glitch/util/counter';
import OptionsContainer from '../containers/options_container'; import OptionsContainer from '../containers/options_container';
import Publisher from './publisher'; import Publisher from './publisher';
import TextareaIcons from './textarea_icons'; import TextareaIcons from './textarea_icons';
import { maxChars } from 'flavours/glitch/util/initial_state';
import CharacterCounter from './character_counter';
const messages = defineMessages({ const messages = defineMessages({
placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' }, placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },
@ -119,14 +121,8 @@ class ComposeForm extends ImmutablePureComponent {
// Submit unless there are media with missing descriptions // Submit unless there are media with missing descriptions
if (mediaDescriptionConfirmation && onMediaDescriptionConfirm && media && media.some(item => !item.get('description'))) { if (mediaDescriptionConfirmation && onMediaDescriptionConfirm && media && media.some(item => !item.get('description'))) {
const firstWithoutDescription = media.findIndex(item => !item.get('description')); const firstWithoutDescription = media.find(item => !item.get('description'));
if (uploadForm) { onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null, firstWithoutDescription.get('id'));
const inputs = uploadForm.querySelectorAll('.composer--upload_form--item input');
if (inputs.length == media.size && firstWithoutDescription !== -1) {
inputs[firstWithoutDescription].focus();
}
}
onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null);
} else if (onSubmit) { } else if (onSubmit) {
onSubmit(this.context.router ? this.context.router.history : null); onSubmit(this.context.router ? this.context.router.history : null);
} }
@ -298,6 +294,8 @@ class ComposeForm extends ImmutablePureComponent {
let disabledButton = isSubmitting || isUploading || isChangingUpload || (!text.trim().length && !anyMedia); let disabledButton = isSubmitting || isUploading || isChangingUpload || (!text.trim().length && !anyMedia);
const countText = `${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`;
return ( return (
<div className='composer'> <div className='composer'>
<WarningContainer /> <WarningContainer />
@ -347,6 +345,7 @@ class ComposeForm extends ImmutablePureComponent {
</div> </div>
</AutosuggestTextarea> </AutosuggestTextarea>
<div className='composer--options-wrapper'>
<OptionsContainer <OptionsContainer
advancedOptions={advancedOptions} advancedOptions={advancedOptions}
disabled={isSubmitting} disabled={isSubmitting}
@ -357,9 +356,13 @@ class ComposeForm extends ImmutablePureComponent {
sensitive={sensitive || (spoilersAlwaysOn && spoilerText && spoilerText.length > 0)} sensitive={sensitive || (spoilersAlwaysOn && spoilerText && spoilerText.length > 0)}
spoiler={spoilersAlwaysOn ? (spoilerText && spoilerText.length > 0) : spoiler} spoiler={spoilersAlwaysOn ? (spoilerText && spoilerText.length > 0) : spoiler}
/> />
<div className='compose--counter-wrapper'>
<CharacterCounter text={countText} max={maxChars} />
</div>
</div>
<Publisher <Publisher
countText={`${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`} countText={countText}
disabled={disabledButton} disabled={disabledButton}
onSecondarySubmit={handleSecondarySubmit} onSecondarySubmit={handleSecondarySubmit}
onSubmit={handleSubmit} onSubmit={handleSubmit}

View file

@ -49,7 +49,6 @@ class Publisher extends ImmutablePureComponent {
return ( return (
<div className={computedClass}> <div className={computedClass}>
<span className='count'>{diff}</span>
{sideArm && sideArm !== 'none' ? ( {sideArm && sideArm !== 'none' ? (
<Button <Button
className='side_arm' className='side_arm'

View file

@ -4,18 +4,12 @@ import PropTypes from 'prop-types';
import Motion from 'flavours/glitch/util/optional_motion'; import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring'; import spring from 'react-motion/lib/spring';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import Icon from 'flavours/glitch/components/icon'; import Icon from 'flavours/glitch/components/icon';
import { isUserTouching } from 'flavours/glitch/util/is_mobile'; import { isUserTouching } from 'flavours/glitch/util/is_mobile';
const messages = defineMessages({ export default class Upload extends ImmutablePureComponent {
description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
});
// The component.
export default @injectIntl
class Upload extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,
@ -23,30 +17,10 @@ class Upload extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,
intl: PropTypes.object.isRequired,
onUndo: PropTypes.func.isRequired, onUndo: PropTypes.func.isRequired,
onDescriptionChange: PropTypes.func.isRequired,
onOpenFocalPoint: PropTypes.func.isRequired, onOpenFocalPoint: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
}; };
state = {
hovered: false,
focused: false,
dirtyDescription: null,
};
handleKeyDown = (e) => {
if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
this.handleSubmit();
}
}
handleSubmit = () => {
this.handleInputBlur();
this.props.onSubmit(this.context.router.history);
}
handleUndoClick = e => { handleUndoClick = e => {
e.stopPropagation(); e.stopPropagation();
this.props.onUndo(this.props.media.get('id')); this.props.onUndo(this.props.media.get('id'));
@ -57,69 +31,21 @@ class Upload extends ImmutablePureComponent {
this.props.onOpenFocalPoint(this.props.media.get('id')); this.props.onOpenFocalPoint(this.props.media.get('id'));
} }
handleInputChange = e => {
this.setState({ dirtyDescription: e.target.value });
}
handleMouseEnter = () => {
this.setState({ hovered: true });
}
handleMouseLeave = () => {
this.setState({ hovered: false });
}
handleInputFocus = () => {
this.setState({ focused: true });
}
handleClick = () => {
this.setState({ focused: true });
}
handleInputBlur = () => {
const { dirtyDescription } = this.state;
this.setState({ focused: false, dirtyDescription: null });
if (dirtyDescription !== null) {
this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription);
}
}
render () { render () {
const { intl, media } = this.props; const { intl, media } = this.props;
const active = this.state.hovered || this.state.focused || isUserTouching();
const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || '';
const computedClass = classNames('composer--upload_form--item', { active });
const focusX = media.getIn(['meta', 'focus', 'x']); const focusX = media.getIn(['meta', 'focus', 'x']);
const focusY = media.getIn(['meta', 'focus', 'y']); const focusY = media.getIn(['meta', 'focus', 'y']);
const x = ((focusX / 2) + .5) * 100; const x = ((focusX / 2) + .5) * 100;
const y = ((focusY / -2) + .5) * 100; const y = ((focusY / -2) + .5) * 100;
return ( return (
<div className={computedClass} tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'> <div className='composer--upload_form--item' tabIndex='0' role='button'>
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12, }) }}> <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12, }) }}>
{({ scale }) => ( {({ scale }) => (
<div style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> <div style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>
<div className={classNames('composer--upload_form--actions', { active })}> <div className={classNames('composer--upload_form--actions', { active: true })}>
<button className='icon-button' onClick={this.handleUndoClick}><Icon icon='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button> <button className='icon-button' onClick={this.handleUndoClick}><Icon icon='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>
{media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>} <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
</div>
<div className={classNames('composer--upload_form--description', { active })}>
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span>
<textarea
placeholder={intl.formatMessage(messages.description)}
value={description}
maxLength={420}
onFocus={this.handleInputFocus}
onChange={this.handleInputChange}
onBlur={this.handleInputBlur}
onKeyDown={this.handleKeyDown}
/>
</label>
</div> </div>
</div> </div>
)} )}

View file

@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import UploadContainer from '../containers/upload_container'; import UploadContainer from '../containers/upload_container';
import SensitiveButtonContainer from '../containers/sensitive_button_container'; import SensitiveButtonContainer from '../containers/sensitive_button_container';
import { FormattedMessage } from 'react-intl';
export default class UploadForm extends ImmutablePureComponent { export default class UploadForm extends ImmutablePureComponent {
static propTypes = { static propTypes = {
@ -15,7 +16,7 @@ export default class UploadForm extends ImmutablePureComponent {
return ( return (
<div className='composer--upload_form'> <div className='composer--upload_form'>
<UploadProgressContainer /> <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />
{mediaIds.size > 0 && ( {mediaIds.size > 0 && (
<div className='content'> <div className='content'>

View file

@ -2,7 +2,6 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Motion from 'flavours/glitch/util/optional_motion'; import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring'; import spring from 'react-motion/lib/spring';
import { FormattedMessage } from 'react-intl';
import Icon from 'flavours/glitch/components/icon'; import Icon from 'flavours/glitch/components/icon';
export default class UploadProgress extends React.PureComponent { export default class UploadProgress extends React.PureComponent {
@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent {
static propTypes = { static propTypes = {
active: PropTypes.bool, active: PropTypes.bool,
progress: PropTypes.number, progress: PropTypes.number,
icon: PropTypes.string.isRequired,
message: PropTypes.node.isRequired,
}; };
render () { render () {
const { active, progress } = this.props; const { active, progress, icon, message } = this.props;
if (!active) { if (!active) {
return null; return null;
@ -21,10 +22,10 @@ export default class UploadProgress extends React.PureComponent {
return ( return (
<div className='composer--upload_form--progress'> <div className='composer--upload_form--progress'>
<Icon icon='upload' /> <Icon icon={icon} />
<div className='message'> <div className='message'>
<FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' /> {message}
<div className='backdrop'> <div className='backdrop'>
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}> <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>

View file

@ -25,6 +25,8 @@ const messages = defineMessages({
defaultMessage: 'At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.' }, defaultMessage: 'At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.' },
missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm', missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm',
defaultMessage: 'Send anyway' }, defaultMessage: 'Send anyway' },
missingDescriptionEdit: { id: 'confirmations.missing_media_description.edit',
defaultMessage: 'Edit media' },
}); });
// State mapping. // State mapping.
@ -112,11 +114,13 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
dispatch(changeComposeVisibility(value)); dispatch(changeComposeVisibility(value));
}, },
onMediaDescriptionConfirm(routerHistory) { onMediaDescriptionConfirm(routerHistory, mediaId) {
dispatch(openModal('CONFIRM', { dispatch(openModal('CONFIRM', {
message: intl.formatMessage(messages.missingDescriptionMessage), message: intl.formatMessage(messages.missingDescriptionMessage),
confirm: intl.formatMessage(messages.missingDescriptionConfirm), confirm: intl.formatMessage(messages.missingDescriptionConfirm),
onConfirm: () => dispatch(submitCompose(routerHistory)), onConfirm: () => dispatch(submitCompose(routerHistory)),
secondary: intl.formatMessage(messages.missingDescriptionEdit),
onSecondary: () => dispatch(openModal('FOCAL_POINT', { id: mediaId })),
onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)), onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)),
})); }));
}, },

View file

@ -1,6 +1,6 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import Upload from '../components/upload'; import Upload from '../components/upload';
import { undoUploadCompose, changeUploadCompose } from 'flavours/glitch/actions/compose'; import { undoUploadCompose } from 'flavours/glitch/actions/compose';
import { openModal } from 'flavours/glitch/actions/modal'; import { openModal } from 'flavours/glitch/actions/modal';
import { submitCompose } from 'flavours/glitch/actions/compose'; import { submitCompose } from 'flavours/glitch/actions/compose';
@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({
dispatch(undoUploadCompose(id)); dispatch(undoUploadCompose(id));
}, },
onDescriptionChange: (id, description) => {
dispatch(changeUploadCompose(id, { description }));
},
onOpenFocalPoint: id => { onOpenFocalPoint: id => {
dispatch(openModal('FOCAL_POINT', { id })); dispatch(openModal('FOCAL_POINT', { id }));
}, },

View file

@ -1,11 +1,26 @@
import React from 'react'; import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import ImageLoader from './image_loader';
import classNames from 'classnames'; import classNames from 'classnames';
import { changeUploadCompose } from 'flavours/glitch/actions/compose'; import { changeUploadCompose } from 'flavours/glitch/actions/compose';
import { getPointerPosition } from 'flavours/glitch/features/video'; import { getPointerPosition } from 'flavours/glitch/features/video';
import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import IconButton from 'flavours/glitch/components/icon_button';
import Button from 'flavours/glitch/components/button';
import Video from 'flavours/glitch/features/video';
import Textarea from 'react-textarea-autosize';
import UploadProgress from 'flavours/glitch/features/compose/components/upload_progress';
import CharacterCounter from 'flavours/glitch/features/compose/components/character_counter';
import { length } from 'stringz';
import { Tesseract as fetchTesseract } from 'flavours/glitch/util/async-components';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' },
placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' },
});
const mapStateToProps = (state, { id }) => ({ const mapStateToProps = (state, { id }) => ({
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
@ -13,17 +28,26 @@ const mapStateToProps = (state, { id }) => ({
const mapDispatchToProps = (dispatch, { id }) => ({ const mapDispatchToProps = (dispatch, { id }) => ({
onSave: (x, y) => { onSave: (description, x, y) => {
dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` })); dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
}, },
}); });
@connect(mapStateToProps, mapDispatchToProps) const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
export default class FocalPointModal extends ImmutablePureComponent { .replace(/\n/g, ' ')
.replace(/\*\*\*\*\*\*/g, '\n\n');
const assetHost = process.env.CDN_HOST || '';
export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl
class FocalPointModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,
onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
}; };
state = { state = {
@ -32,6 +56,9 @@ export default class FocalPointModal extends ImmutablePureComponent {
focusX: 0, focusX: 0,
focusY: 0, focusY: 0,
dragging: false, dragging: false,
description: '',
dirty: false,
progress: 0,
}; };
componentWillMount () { componentWillMount () {
@ -57,6 +84,14 @@ export default class FocalPointModal extends ImmutablePureComponent {
this.setState({ dragging: true }); this.setState({ dragging: true });
} }
handleTouchStart = e => {
document.addEventListener('touchmove', this.handleMouseMove);
document.addEventListener('touchend', this.handleTouchEnd);
this.updatePosition(e);
this.setState({ dragging: true });
}
handleMouseMove = e => { handleMouseMove = e => {
this.updatePosition(e); this.updatePosition(e);
} }
@ -66,7 +101,13 @@ export default class FocalPointModal extends ImmutablePureComponent {
document.removeEventListener('mouseup', this.handleMouseUp); document.removeEventListener('mouseup', this.handleMouseUp);
this.setState({ dragging: false }); this.setState({ dragging: false });
this.props.onSave(this.state.focusX, this.state.focusY); }
handleTouchEnd = () => {
document.removeEventListener('touchmove', this.handleMouseMove);
document.removeEventListener('touchend', this.handleTouchEnd);
this.setState({ dragging: false });
} }
updatePosition = e => { updatePosition = e => {
@ -74,46 +115,145 @@ export default class FocalPointModal extends ImmutablePureComponent {
const focusX = (x - .5) * 2; const focusX = (x - .5) * 2;
const focusY = (y - .5) * -2; const focusY = (y - .5) * -2;
this.setState({ x, y, focusX, focusY }); this.setState({ x, y, focusX, focusY, dirty: true });
} }
updatePositionFromMedia = media => { updatePositionFromMedia = media => {
const focusX = media.getIn(['meta', 'focus', 'x']); const focusX = media.getIn(['meta', 'focus', 'x']);
const focusY = media.getIn(['meta', 'focus', 'y']); const focusY = media.getIn(['meta', 'focus', 'y']);
const description = media.get('description') || '';
if (focusX && focusY) { if (focusX && focusY) {
const x = (focusX / 2) + .5; const x = (focusX / 2) + .5;
const y = (focusY / -2) + .5; const y = (focusY / -2) + .5;
this.setState({ x, y, focusX, focusY }); this.setState({
x,
y,
focusX,
focusY,
description,
dirty: false,
});
} else { } else {
this.setState({ x: 0.5, y: 0.5, focusX: 0, focusY: 0 }); this.setState({
x: 0.5,
y: 0.5,
focusX: 0,
focusY: 0,
description,
dirty: false,
});
} }
} }
handleChange = e => {
this.setState({ description: e.target.value, dirty: true });
}
handleSubmit = () => {
this.props.onSave(this.state.description, this.state.focusX, this.state.focusY);
this.props.onClose();
}
setRef = c => { setRef = c => {
this.node = c; this.node = c;
} }
render () { handleTextDetection = () => {
const { media } = this.props; const { media } = this.props;
const { x, y, dragging } = this.state;
this.setState({ detecting: true });
fetchTesseract().then(({ TesseractWorker }) => {
const worker = new TesseractWorker({
workerPath: `${assetHost}/packs/ocr/worker.min.js`,
corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`,
langPath: `${assetHost}/ocr/lang-data`,
});
worker.recognize(media.get('url'))
.progress(({ progress }) => this.setState({ progress }))
.finally(() => worker.terminate())
.then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }))
.catch(() => this.setState({ detecting: false }));
}).catch(() => this.setState({ detecting: false }));
}
render () {
const { media, intl, onClose } = this.props;
const { x, y, dragging, description, dirty, detecting, progress } = this.state;
const width = media.getIn(['meta', 'original', 'width']) || null; const width = media.getIn(['meta', 'original', 'width']) || null;
const height = media.getIn(['meta', 'original', 'height']) || null; const height = media.getIn(['meta', 'original', 'height']) || null;
const focals = ['image', 'gifv'].includes(media.get('type'));
const previewRatio = 16/9;
const previewWidth = 200;
const previewHeight = previewWidth / previewRatio;
return ( return (
<div className='modal-root__modal video-modal focal-point-modal'> <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
<div className={classNames('focal-point', { dragging })} ref={this.setRef}> <div className='report-modal__target'>
<ImageLoader <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
previewSrc={media.get('preview_url')} <FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
src={media.get('url')} </div>
width={width}
height={height} <div className='report-modal__container'>
<div className='report-modal__comment'>
{focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>}
<label className='setting-text-label' htmlFor='upload-modal__description'><FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' /></label>
<div className='setting-text__wrapper'>
<Textarea
id='upload-modal__description'
className='setting-text light'
value={detecting ? '…' : description}
onChange={this.handleChange}
disabled={detecting}
autoFocus
/> />
<div className='setting-text__modifiers'>
<UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} />
</div>
</div>
<div className='setting-text__toolbar'>
<button disabled={detecting || media.get('type') !== 'image'} className='link-button' onClick={this.handleTextDetection}><FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' /></button>
<CharacterCounter max={420} text={detecting ? '' : description} />
</div>
<Button disabled={!dirty || detecting || length(description) > 420} text={intl.formatMessage(messages.apply)} onClick={this.handleSubmit} />
</div>
<div className='focal-point-modal__content'>
{focals && (
<div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
{media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
{media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
<div className='focal-point__preview'>
<strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
<div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} />
</div>
<div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} />
<div className='focal-point__overlay' onMouseDown={this.handleMouseDown} /> <div className='focal-point__overlay' />
</div>
)}
{['audio', 'video'].includes(media.get('type')) && (
<Video
preview={media.get('preview_url')}
blurhash={media.get('blurhash')}
src={media.get('url')}
detailed
editable
/>
)}
</div>
</div> </div>
</div> </div>
); );

View file

@ -101,6 +101,7 @@ export default class Video extends React.PureComponent {
fullwidth: PropTypes.bool, fullwidth: PropTypes.bool,
detailed: PropTypes.bool, detailed: PropTypes.bool,
inline: PropTypes.bool, inline: PropTypes.bool,
editable: PropTypes.bool,
cacheWidth: PropTypes.func, cacheWidth: PropTypes.func,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
visible: PropTypes.bool, visible: PropTypes.bool,
@ -393,7 +394,7 @@ export default class Video extends React.PureComponent {
} }
render () { render () {
const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link } = this.props; const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link, editable } = this.props;
const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
const progress = (currentTime / duration) * 100; const progress = (currentTime / duration) * 100;
const playerStyle = {}; const playerStyle = {};
@ -401,7 +402,7 @@ export default class Video extends React.PureComponent {
const volumeWidth = (muted) ? 0 : volume * this.volWidth; const volumeWidth = (muted) ? 0 : volume * this.volWidth;
const volumeHandleLoc = (muted) ? this.volHandleOffset(0) : this.volHandleOffset(volume); const volumeHandleLoc = (muted) ? this.volHandleOffset(0) : this.volHandleOffset(volume);
const computedClass = classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, letterbox, 'full-width': fullwidth }); const computedClass = classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, editable, letterbox, 'full-width': fullwidth });
let { width, height } = this.props; let { width, height } = this.props;
@ -443,7 +444,7 @@ export default class Video extends React.PureComponent {
> >
<canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} /> <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} />
{revealed && <video {(revealed || editable) && <video
ref={this.setVideoRef} ref={this.setVideoRef}
src={src} src={src}
poster={preview} poster={preview}
@ -465,7 +466,7 @@ export default class Video extends React.PureComponent {
onVolumeChange={this.handleVolumeChange} onVolumeChange={this.handleVolumeChange}
/>} />}
<div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed })}> <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed || editable })}>
<button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}> <button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}>
<span className='spoiler-button__overlay__label'>{warning}</span> <span className='spoiler-button__overlay__label'>{warning}</span>
</button> </button>
@ -508,7 +509,7 @@ export default class Video extends React.PureComponent {
</div> </div>
<div className='video-player__buttons right'> <div className='video-player__buttons right'>
{!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><i className='fa fa-fw fa-eye-slash' /></button>} {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><i className='fa fa-fw fa-eye-slash' /></button>}
{(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><i className='fa fa-fw fa-expand' /></button>} {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><i className='fa fa-fw fa-expand' /></button>}
{onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><i className='fa fa-fw fa-compress' /></button>} {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><i className='fa fa-fw fa-compress' /></button>}
<button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><i className={classNames('fa fa-fw', { 'fa-arrows-alt': !fullscreen, 'fa-compress': fullscreen })} /></button> <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><i className={classNames('fa fa-fw', { 'fa-arrows-alt': !fullscreen, 'fa-compress': fullscreen })} /></button>

View file

@ -104,6 +104,15 @@ function main() {
delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original')); delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original'));
delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static')); delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static'));
delegate(document, '.blocks-table button.icon-button', 'click', function(e) {
e.preventDefault();
const classList = this.firstElementChild.classList;
classList.toggle('fa-chevron-down');
classList.toggle('fa-chevron-up');
this.parentElement.parentElement.nextElementSibling.classList.toggle('hidden');
});
}); });
} }

View file

@ -133,3 +133,17 @@ button {
outline: 0 !important; outline: 0 !important;
} }
} }
.layout-single-column .app-holder {
&,
& > div {
min-height: 100vh;
}
}
.layout-multiple-columns .app-holder {
&,
& > div {
height: 100%;
}
}

View file

@ -2,6 +2,18 @@
padding: 10px; padding: 10px;
} }
.character-counter {
cursor: default;
font-family: $font-sans-serif, sans-serif;
font-size: 14px;
font-weight: 600;
color: $lighter-text-color;
&.character-counter--over {
color: $warning-red;
}
}
.no-reduce-motion .composer--spoiler { .no-reduce-motion .composer--spoiler {
transition: height 0.4s ease, opacity 0.4s ease; transition: height 0.4s ease, opacity 0.4s ease;
} }
@ -489,12 +501,18 @@
background: $simple-background-color; background: $simple-background-color;
} }
.composer--options { .composer--options-wrapper {
padding: 10px; padding: 10px;
background: darken($simple-background-color, 8%); background: darken($simple-background-color, 8%);
box-shadow: inset 0 5px 5px rgba($base-shadow-color, 0.05);
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
height: 27px; height: 27px;
display: flex;
justify-content: space-between;
flex: 0 0 auto;
}
.composer--options {
display: flex;
flex: 0 0 auto; flex: 0 0 auto;
& > * { & > * {
@ -519,6 +537,11 @@
} }
} }
.compose--counter-wrapper {
align-self: center;
margin-right: 4px;
}
.composer--options--dropdown { .composer--options--dropdown {
&.open { &.open {
& > .value { & > .value {
@ -589,13 +612,6 @@
justify-content: flex-end; justify-content: flex-end;
flex: 0 0 auto; flex: 0 0 auto;
& > .count {
display: inline-block;
margin: 0 16px 0 8px;
font-size: 16px;
line-height: 36px;
}
& > .primary { & > .primary {
display: inline-block; display: inline-block;
margin: 0; margin: 0;

View file

@ -3,6 +3,27 @@
-ms-overflow-style: -ms-autohiding-scrollbar; -ms-overflow-style: -ms-autohiding-scrollbar;
} }
.link-button {
display: block;
font-size: 15px;
line-height: 20px;
color: $ui-highlight-color;
border: 0;
background: transparent;
padding: 0;
cursor: pointer;
&:hover,
&:active {
text-decoration: underline;
}
&:disabled {
color: $ui-primary-color;
cursor: default;
}
}
.button { .button {
background-color: darken($ui-highlight-color, 3%); background-color: darken($ui-highlight-color, 3%);
border: 10px none; border: 10px none;

View file

@ -338,6 +338,11 @@
position: relative; position: relative;
background: $base-shadow-color; background: $base-shadow-color;
max-width: 100%; max-width: 100%;
border-radius: 4px;
&.editable {
border-radius: 0;
}
&:focus { &:focus {
outline: 0; outline: 0;

View file

@ -528,7 +528,8 @@
} }
} }
.report-modal__statuses { .report-modal__statuses,
.focal-point-modal__content {
flex: 1 1 auto; flex: 1 1 auto;
min-height: 20vh; min-height: 20vh;
max-height: 80vh; max-height: 80vh;
@ -544,6 +545,12 @@
} }
} }
.focal-point-modal__content {
@media screen and (max-width: 480px) {
max-height: 40vh;
}
}
.report-modal__comment { .report-modal__comment {
padding: 20px; padding: 20px;
border-right: 1px solid $ui-secondary-color; border-right: 1px solid $ui-secondary-color;
@ -565,16 +572,56 @@
padding: 10px; padding: 10px;
font-family: inherit; font-family: inherit;
font-size: 14px; font-size: 14px;
resize: vertical; resize: none;
border: 0; border: 0;
outline: 0; outline: 0;
border-radius: 4px; border-radius: 4px;
border: 1px solid $ui-secondary-color; border: 1px solid $ui-secondary-color;
margin-bottom: 20px; min-height: 100px;
max-height: 50vh;
margin-bottom: 10px;
&:focus { &:focus {
border: 1px solid darken($ui-secondary-color, 8%); border: 1px solid darken($ui-secondary-color, 8%);
} }
&__wrapper {
background: $white;
border: 1px solid $ui-secondary-color;
margin-bottom: 10px;
border-radius: 4px;
.setting-text {
border: 0;
margin-bottom: 0;
border-radius: 0;
&:focus {
border: 0;
}
}
&__modifiers {
color: $inverted-text-color;
font-family: inherit;
font-size: 14px;
background: $white;
}
}
&__toolbar {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
}
.setting-text-label {
display: block;
color: $inverted-text-color;
font-size: 14px;
font-weight: 500;
margin-bottom: 10px;
} }
.setting-toggle { .setting-toggle {
@ -598,15 +645,6 @@
} }
} }
.report-modal__target {
padding: 20px;
.media-modal__close {
top: 19px;
right: 15px;
}
}
.actions-modal { .actions-modal {
.status { .status {
overflow-y: auto; overflow-y: auto;
@ -725,6 +763,15 @@
} }
} }
.report-modal__target {
padding: 15px;
.media-modal__close {
top: 14px;
right: 15px;
}
}
.embed-modal { .embed-modal {
max-width: 80vw; max-width: 80vw;
max-height: 80vh; max-height: 80vh;
@ -787,19 +834,23 @@
.focal-point { .focal-point {
position: relative; position: relative;
cursor: pointer;
overflow: hidden;
&.dragging {
cursor: move; cursor: move;
} overflow: hidden;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background: $base-shadow-color;
img { img,
max-width: 80vw; video {
display: block;
max-height: 80vh; max-height: 80vh;
width: auto; width: 100%;
height: auto; height: auto;
margin: auto; margin: 0;
object-fit: contain;
background: $base-shadow-color;
} }
&__reticle { &__reticle {
@ -819,6 +870,43 @@
top: 0; top: 0;
left: 0; left: 0;
} }
&__preview {
position: absolute;
bottom: 10px;
right: 10px;
z-index: 2;
cursor: move;
transition: opacity 0.1s ease;
&:hover {
opacity: 0.5;
}
strong {
color: $primary-text-color;
font-size: 14px;
font-weight: 500;
display: block;
margin-bottom: 5px;
}
div {
border-radius: 4px;
box-shadow: 0 0 14px rgba($base-shadow-color, 0.2);
}
}
@media screen and (max-width: 480px) {
img,
video {
max-height: 100%;
}
&__preview {
display: none;
}
}
} }
.filtered-status-info { .filtered-status-info {

View file

@ -135,13 +135,12 @@
} }
} }
.composer--options { .composer--options-wrapper {
background: lighten($ui-base-color, 10%); background: lighten($ui-base-color, 10%);
box-shadow: unset;
& > hr {
display: none;
} }
.composer--options > hr {
display: none;
} }
.composer--options--dropdown--content--item { .composer--options--dropdown--content--item {

View file

@ -237,3 +237,70 @@ a.table-action-link {
} }
} }
} }
.blocks-table {
width: 100%;
max-width: 100%;
border-spacing: 0;
border-collapse: collapse;
table-layout: fixed;
border: 1px solid darken($ui-base-color, 8%);
thead {
border: 1px solid darken($ui-base-color, 8%);
background: darken($ui-base-color, 4%);
font-weight: 500;
th.severity-column {
width: 120px;
}
th.button-column {
width: 23px;
}
}
tbody > tr {
border: 1px solid darken($ui-base-color, 8%);
border-bottom: 0;
background: darken($ui-base-color, 4%);
&:hover {
background: darken($ui-base-color, 2%);
}
&.even {
background: $ui-base-color;
&:hover {
background: lighten($ui-base-color, 2%);
}
}
&.rationale {
background: lighten($ui-base-color, 4%);
border-top: 0;
&:hover {
background: lighten($ui-base-color, 6%);
}
&.hidden {
display: none;
}
}
td:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
}
th,
td {
padding: 8px;
line-height: 18px;
vertical-align: top;
text-align: left;
}
}

View file

@ -109,6 +109,15 @@
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
} }
.placeholder-widget {
padding: 16px;
border-radius: 4px;
border: 2px dashed $dark-text-color;
text-align: center;
color: $darker-text-color;
margin-bottom: 10px;
}
.contact-widget, .contact-widget,
.landing-page__information.contact-widget { .landing-page__information.contact-widget {
box-sizing: border-box; box-sizing: border-box;
@ -521,6 +530,12 @@ $fluid-breakpoint: $maximum-width + 20px;
a { a {
font-size: 14px; font-size: 14px;
line-height: 20px; line-height: 20px;
}
}
.notice-widget,
.placeholder-widget {
a {
text-decoration: none; text-decoration: none;
font-weight: 500; font-weight: 500;
color: $ui-highlight-color; color: $ui-highlight-color;

View file

@ -153,3 +153,7 @@ export function ListAdder () {
export function Search () { export function Search () {
return import(/*webpackChunkName: "features/glitch/async/search" */'flavours/glitch/features/search'); return import(/*webpackChunkName: "features/glitch/async/search" */'flavours/glitch/features/search');
} }
export function Tesseract () {
return import(/*webpackChunkName: "tesseract" */'tesseract.js');
}

View file

@ -4,7 +4,9 @@ import { FormattedNumber } from 'react-intl';
export const shortNumberFormat = number => { export const shortNumberFormat = number => {
if (number < 1000) { if (number < 1000) {
return <FormattedNumber value={number} />; return <FormattedNumber value={number} />;
} else { } else if (number < 1000000) {
return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>; return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>;
} else {
return <Fragment><FormattedNumber value={number / 1000000} maximumFractionDigits={1} />M</Fragment>;
} }
}; };

View file

@ -71,7 +71,7 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) =
// and return an all-white image instead. Assume reading failed if the resized // and return an all-white image instead. Assume reading failed if the resized
// image is perfectly white. // image is perfectly white.
const imageData = context.getImageData(0, 0, width, height); const imageData = context.getImageData(0, 0, width, height);
if (imageData.every(value => value === 255)) { if (imageData.data.every(value => value === 255)) {
throw 'Failed to read from canvas'; throw 'Failed to read from canvas';
} }

View file

@ -0,0 +1,10 @@
export const APP_FOCUS = 'APP_FOCUS';
export const APP_UNFOCUS = 'APP_UNFOCUS';
export const focusApp = () => ({
type: APP_FOCUS,
});
export const unfocusApp = () => ({
type: APP_UNFOCUS,
});

View file

@ -278,12 +278,27 @@ class Status extends ImmutablePureComponent {
return null; return null;
} }
const handlers = this.props.muted ? {} : {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleHidden: this.handleHotkeyToggleHidden,
toggleSensitive: this.handleHotkeyToggleSensitive,
};
if (hidden) { if (hidden) {
return ( return (
<div ref={this.handleRef}> <HotKeys handlers={handlers}>
<div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>
{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}
{status.get('content')} {status.get('content')}
</div> </div>
</HotKeys>
); );
} }
@ -394,19 +409,6 @@ class Status extends ImmutablePureComponent {
statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />; statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />;
} }
const handlers = this.props.muted ? {} : {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleHidden: this.handleHotkeyToggleHidden,
toggleSensitive: this.handleHotkeyToggleSensitive,
};
return ( return (
<HotKeys handlers={handlers}> <HotKeys handlers={handlers}>
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>

View file

@ -7,6 +7,7 @@ import MediaGallery from '../components/media_gallery';
import Video from '../features/video'; import Video from '../features/video';
import Card from '../features/status/components/card'; import Card from '../features/status/components/card';
import Poll from 'mastodon/components/poll'; import Poll from 'mastodon/components/poll';
import Hashtag from 'mastodon/components/hashtag';
import ModalRoot from '../components/modal_root'; import ModalRoot from '../components/modal_root';
import { getScrollbarWidth } from '../features/ui/components/modal_root'; import { getScrollbarWidth } from '../features/ui/components/modal_root';
import MediaModal from '../features/ui/components/media_modal'; import MediaModal from '../features/ui/components/media_modal';
@ -15,7 +16,7 @@ import { List as ImmutableList, fromJS } from 'immutable';
const { localeData, messages } = getLocale(); const { localeData, messages } = getLocale();
addLocaleData(localeData); addLocaleData(localeData);
const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll }; const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag };
export default class MediaContainer extends PureComponent { export default class MediaContainer extends PureComponent {
@ -62,12 +63,13 @@ export default class MediaContainer extends PureComponent {
{[].map.call(components, (component, i) => { {[].map.call(components, (component, i) => {
const componentName = component.getAttribute('data-component'); const componentName = component.getAttribute('data-component');
const Component = MEDIA_COMPONENTS[componentName]; const Component = MEDIA_COMPONENTS[componentName];
const { media, card, poll, ...props } = JSON.parse(component.getAttribute('data-props')); const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props'));
Object.assign(props, { Object.assign(props, {
...(media ? { media: fromJS(media) } : {}), ...(media ? { media: fromJS(media) } : {}),
...(card ? { card: fromJS(card) } : {}), ...(card ? { card: fromJS(card) } : {}),
...(poll ? { poll: fromJS(poll) } : {}), ...(poll ? { poll: fromJS(poll) } : {}),
...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
...(componentName === 'Video' ? { ...(componentName === 'Video' ? {
onOpenVideo: this.handleOpenVideo, onOpenVideo: this.handleOpenVideo,
@ -81,6 +83,7 @@ export default class MediaContainer extends PureComponent {
component, component,
); );
})} })}
<ModalRoot onClose={this.handleCloseMedia}> <ModalRoot onClose={this.handleCloseMedia}>
{this.state.media && ( {this.state.media && (
<MediaModal <MediaModal

View file

@ -4,16 +4,11 @@ import PropTypes from 'prop-types';
import Motion from '../../ui/util/optional_motion'; import Motion from '../../ui/util/optional_motion';
import spring from 'react-motion/lib/spring'; import spring from 'react-motion/lib/spring';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
const messages = defineMessages({ export default class Upload extends ImmutablePureComponent {
description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
});
export default @injectIntl
class Upload extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,
@ -21,30 +16,10 @@ class Upload extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,
intl: PropTypes.object.isRequired,
onUndo: PropTypes.func.isRequired, onUndo: PropTypes.func.isRequired,
onDescriptionChange: PropTypes.func.isRequired,
onOpenFocalPoint: PropTypes.func.isRequired, onOpenFocalPoint: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
}; };
state = {
hovered: false,
focused: false,
dirtyDescription: null,
};
handleKeyDown = (e) => {
if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
this.handleSubmit();
}
}
handleSubmit = () => {
this.handleInputBlur();
this.props.onSubmit(this.context.router.history);
}
handleUndoClick = e => { handleUndoClick = e => {
e.stopPropagation(); e.stopPropagation();
this.props.onUndo(this.props.media.get('id')); this.props.onUndo(this.props.media.get('id'));
@ -55,69 +30,21 @@ class Upload extends ImmutablePureComponent {
this.props.onOpenFocalPoint(this.props.media.get('id')); this.props.onOpenFocalPoint(this.props.media.get('id'));
} }
handleInputChange = e => {
this.setState({ dirtyDescription: e.target.value });
}
handleMouseEnter = () => {
this.setState({ hovered: true });
}
handleMouseLeave = () => {
this.setState({ hovered: false });
}
handleInputFocus = () => {
this.setState({ focused: true });
}
handleClick = () => {
this.setState({ focused: true });
}
handleInputBlur = () => {
const { dirtyDescription } = this.state;
this.setState({ focused: false, dirtyDescription: null });
if (dirtyDescription !== null) {
this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription);
}
}
render () { render () {
const { intl, media } = this.props; const { media } = this.props;
const active = this.state.hovered || this.state.focused;
const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || '';
const focusX = media.getIn(['meta', 'focus', 'x']); const focusX = media.getIn(['meta', 'focus', 'x']);
const focusY = media.getIn(['meta', 'focus', 'y']); const focusY = media.getIn(['meta', 'focus', 'y']);
const x = ((focusX / 2) + .5) * 100; const x = ((focusX / 2) + .5) * 100;
const y = ((focusY / -2) + .5) * 100; const y = ((focusY / -2) + .5) * 100;
return ( return (
<div className='compose-form__upload' tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'> <div className='compose-form__upload' tabIndex='0' role='button'>
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}> <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
{({ scale }) => ( {({ scale }) => (
<div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>
<div className={classNames('compose-form__upload__actions', { active })}> <div className={classNames('compose-form__upload__actions', { active: true })}>
<button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button> <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>
{media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>} <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
</div>
<div className={classNames('compose-form__upload-description', { active })}>
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span>
<textarea
placeholder={intl.formatMessage(messages.description)}
value={description}
maxLength={420}
onFocus={this.handleInputFocus}
onChange={this.handleInputChange}
onBlur={this.handleInputBlur}
onKeyDown={this.handleKeyDown}
/>
</label>
</div> </div>
</div> </div>
)} )}

View file

@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import UploadContainer from '../containers/upload_container'; import UploadContainer from '../containers/upload_container';
import SensitiveButtonContainer from '../containers/sensitive_button_container'; import SensitiveButtonContainer from '../containers/sensitive_button_container';
import { FormattedMessage } from 'react-intl';
export default class UploadForm extends ImmutablePureComponent { export default class UploadForm extends ImmutablePureComponent {
@ -16,7 +17,7 @@ export default class UploadForm extends ImmutablePureComponent {
return ( return (
<div className='compose-form__upload-wrapper'> <div className='compose-form__upload-wrapper'>
<UploadProgressContainer /> <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />
<div className='compose-form__uploads-wrapper'> <div className='compose-form__uploads-wrapper'>
{mediaIds.map(id => ( {mediaIds.map(id => (

View file

@ -2,7 +2,6 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Motion from '../../ui/util/optional_motion'; import Motion from '../../ui/util/optional_motion';
import spring from 'react-motion/lib/spring'; import spring from 'react-motion/lib/spring';
import { FormattedMessage } from 'react-intl';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
export default class UploadProgress extends React.PureComponent { export default class UploadProgress extends React.PureComponent {
@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent {
static propTypes = { static propTypes = {
active: PropTypes.bool, active: PropTypes.bool,
progress: PropTypes.number, progress: PropTypes.number,
icon: PropTypes.string.isRequired,
message: PropTypes.node.isRequired,
}; };
render () { render () {
const { active, progress } = this.props; const { active, progress, icon, message } = this.props;
if (!active) { if (!active) {
return null; return null;
@ -22,11 +23,11 @@ export default class UploadProgress extends React.PureComponent {
return ( return (
<div className='upload-progress'> <div className='upload-progress'>
<div className='upload-progress__icon'> <div className='upload-progress__icon'>
<Icon id='upload' /> <Icon id={icon} />
</div> </div>
<div className='upload-progress__message'> <div className='upload-progress__message'>
<FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' /> {message}
<div className='upload-progress__backdrop'> <div className='upload-progress__backdrop'>
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}> <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>

View file

@ -1,6 +1,6 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import Upload from '../components/upload'; import Upload from '../components/upload';
import { undoUploadCompose, changeUploadCompose } from '../../../actions/compose'; import { undoUploadCompose } from '../../../actions/compose';
import { openModal } from '../../../actions/modal'; import { openModal } from '../../../actions/modal';
import { submitCompose } from '../../../actions/compose'; import { submitCompose } from '../../../actions/compose';
@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({
dispatch(undoUploadCompose(id)); dispatch(undoUploadCompose(id));
}, },
onDescriptionChange: (id, description) => {
dispatch(changeUploadCompose(id, { description }));
},
onOpenFocalPoint: id => { onOpenFocalPoint: id => {
dispatch(openModal('FOCAL_POINT', { id })); dispatch(openModal('FOCAL_POINT', { id }));
}, },

View file

@ -0,0 +1,41 @@
import { PureComponent } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { title } from 'mastodon/initial_state';
const mapStateToProps = state => ({
unread: state.getIn(['missed_updates', 'unread']),
});
export default @connect(mapStateToProps)
class DocumentTitle extends PureComponent {
static propTypes = {
unread: PropTypes.number.isRequired,
};
componentDidMount () {
this._sideEffects();
}
componentDidUpdate() {
this._sideEffects();
}
_sideEffects () {
const { unread } = this.props;
if (unread > 99) {
document.title = `(*) ${title}`;
} else if (unread > 0) {
document.title = `(${unread}) ${title}`;
} else {
document.title = title;
}
}
render () {
return null;
}
}

View file

@ -1,11 +1,26 @@
import React from 'react'; import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import ImageLoader from './image_loader';
import classNames from 'classnames'; import classNames from 'classnames';
import { changeUploadCompose } from '../../../actions/compose'; import { changeUploadCompose } from '../../../actions/compose';
import { getPointerPosition } from '../../video'; import { getPointerPosition } from '../../video';
import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import IconButton from 'mastodon/components/icon_button';
import Button from 'mastodon/components/button';
import Video from 'mastodon/features/video';
import Textarea from 'react-textarea-autosize';
import UploadProgress from 'mastodon/features/compose/components/upload_progress';
import CharacterCounter from 'mastodon/features/compose/components/character_counter';
import { length } from 'stringz';
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' },
placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' },
});
const mapStateToProps = (state, { id }) => ({ const mapStateToProps = (state, { id }) => ({
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
@ -13,17 +28,26 @@ const mapStateToProps = (state, { id }) => ({
const mapDispatchToProps = (dispatch, { id }) => ({ const mapDispatchToProps = (dispatch, { id }) => ({
onSave: (x, y) => { onSave: (description, x, y) => {
dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` })); dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
}, },
}); });
const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
.replace(/\n/g, ' ')
.replace(/\*\*\*\*\*\*/g, '\n\n');
const assetHost = process.env.CDN_HOST || '';
export default @connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl
class FocalPointModal extends ImmutablePureComponent { class FocalPointModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,
onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
}; };
state = { state = {
@ -32,6 +56,9 @@ class FocalPointModal extends ImmutablePureComponent {
focusX: 0, focusX: 0,
focusY: 0, focusY: 0,
dragging: false, dragging: false,
description: '',
dirty: false,
progress: 0,
}; };
componentWillMount () { componentWillMount () {
@ -57,6 +84,14 @@ class FocalPointModal extends ImmutablePureComponent {
this.setState({ dragging: true }); this.setState({ dragging: true });
} }
handleTouchStart = e => {
document.addEventListener('touchmove', this.handleMouseMove);
document.addEventListener('touchend', this.handleTouchEnd);
this.updatePosition(e);
this.setState({ dragging: true });
}
handleMouseMove = e => { handleMouseMove = e => {
this.updatePosition(e); this.updatePosition(e);
} }
@ -66,7 +101,13 @@ class FocalPointModal extends ImmutablePureComponent {
document.removeEventListener('mouseup', this.handleMouseUp); document.removeEventListener('mouseup', this.handleMouseUp);
this.setState({ dragging: false }); this.setState({ dragging: false });
this.props.onSave(this.state.focusX, this.state.focusY); }
handleTouchEnd = () => {
document.removeEventListener('touchmove', this.handleMouseMove);
document.removeEventListener('touchend', this.handleTouchEnd);
this.setState({ dragging: false });
} }
updatePosition = e => { updatePosition = e => {
@ -74,46 +115,145 @@ class FocalPointModal extends ImmutablePureComponent {
const focusX = (x - .5) * 2; const focusX = (x - .5) * 2;
const focusY = (y - .5) * -2; const focusY = (y - .5) * -2;
this.setState({ x, y, focusX, focusY }); this.setState({ x, y, focusX, focusY, dirty: true });
} }
updatePositionFromMedia = media => { updatePositionFromMedia = media => {
const focusX = media.getIn(['meta', 'focus', 'x']); const focusX = media.getIn(['meta', 'focus', 'x']);
const focusY = media.getIn(['meta', 'focus', 'y']); const focusY = media.getIn(['meta', 'focus', 'y']);
const description = media.get('description') || '';
if (focusX && focusY) { if (focusX && focusY) {
const x = (focusX / 2) + .5; const x = (focusX / 2) + .5;
const y = (focusY / -2) + .5; const y = (focusY / -2) + .5;
this.setState({ x, y, focusX, focusY }); this.setState({
x,
y,
focusX,
focusY,
description,
dirty: false,
});
} else { } else {
this.setState({ x: 0.5, y: 0.5, focusX: 0, focusY: 0 }); this.setState({
x: 0.5,
y: 0.5,
focusX: 0,
focusY: 0,
description,
dirty: false,
});
} }
} }
handleChange = e => {
this.setState({ description: e.target.value, dirty: true });
}
handleSubmit = () => {
this.props.onSave(this.state.description, this.state.focusX, this.state.focusY);
this.props.onClose();
}
setRef = c => { setRef = c => {
this.node = c; this.node = c;
} }
render () { handleTextDetection = () => {
const { media } = this.props; const { media } = this.props;
const { x, y, dragging } = this.state;
this.setState({ detecting: true });
fetchTesseract().then(({ TesseractWorker }) => {
const worker = new TesseractWorker({
workerPath: `${assetHost}/packs/ocr/worker.min.js`,
corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`,
langPath: `${assetHost}/ocr/lang-data`,
});
worker.recognize(media.get('url'))
.progress(({ progress }) => this.setState({ progress }))
.finally(() => worker.terminate())
.then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }))
.catch(() => this.setState({ detecting: false }));
}).catch(() => this.setState({ detecting: false }));
}
render () {
const { media, intl, onClose } = this.props;
const { x, y, dragging, description, dirty, detecting, progress } = this.state;
const width = media.getIn(['meta', 'original', 'width']) || null; const width = media.getIn(['meta', 'original', 'width']) || null;
const height = media.getIn(['meta', 'original', 'height']) || null; const height = media.getIn(['meta', 'original', 'height']) || null;
const focals = ['image', 'gifv'].includes(media.get('type'));
const previewRatio = 16/9;
const previewWidth = 200;
const previewHeight = previewWidth / previewRatio;
return ( return (
<div className='modal-root__modal video-modal focal-point-modal'> <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
<div className={classNames('focal-point', { dragging })} ref={this.setRef}> <div className='report-modal__target'>
<ImageLoader <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
previewSrc={media.get('preview_url')} <FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
src={media.get('url')} </div>
width={width}
height={height} <div className='report-modal__container'>
<div className='report-modal__comment'>
{focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>}
<label className='setting-text-label' htmlFor='upload-modal__description'><FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' /></label>
<div className='setting-text__wrapper'>
<Textarea
id='upload-modal__description'
className='setting-text light'
value={detecting ? '…' : description}
onChange={this.handleChange}
disabled={detecting}
autoFocus
/> />
<div className='setting-text__modifiers'>
<UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} />
</div>
</div>
<div className='setting-text__toolbar'>
<button disabled={detecting || media.get('type') !== 'image'} className='link-button' onClick={this.handleTextDetection}><FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' /></button>
<CharacterCounter max={420} text={detecting ? '' : description} />
</div>
<Button disabled={!dirty || detecting || length(description) > 420} text={intl.formatMessage(messages.apply)} onClick={this.handleSubmit} />
</div>
<div className='focal-point-modal__content'>
{focals && (
<div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
{media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
{media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
<div className='focal-point__preview'>
<strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
<div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} />
</div>
<div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} />
<div className='focal-point__overlay' onMouseDown={this.handleMouseDown} /> <div className='focal-point__overlay' />
</div>
)}
{['audio', 'video'].includes(media.get('type')) && (
<Video
preview={media.get('preview_url')}
blurhash={media.get('blurhash')}
src={media.get('url')}
detailed
editable
/>
)}
</div>
</div> </div>
</div> </div>
); );

View file

@ -15,9 +15,11 @@ import { expandHomeTimeline } from '../../actions/timelines';
import { expandNotifications } from '../../actions/notifications'; import { expandNotifications } from '../../actions/notifications';
import { fetchFilters } from '../../actions/filters'; import { fetchFilters } from '../../actions/filters';
import { clearHeight } from '../../actions/height_cache'; import { clearHeight } from '../../actions/height_cache';
import { focusApp, unfocusApp } from 'mastodon/actions/app';
import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';
import UploadArea from './components/upload_area'; import UploadArea from './components/upload_area';
import ColumnsAreaContainer from './containers/columns_area_container'; import ColumnsAreaContainer from './containers/columns_area_container';
import DocumentTitle from './components/document_title';
import { import {
Compose, Compose,
Status, Status,
@ -226,7 +228,7 @@ class UI extends React.PureComponent {
draggingOver: false, draggingOver: false,
}; };
handleBeforeUnload = (e) => { handleBeforeUnload = e => {
const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props; const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props;
if (isComposing && (hasComposingText || hasMediaAttachments)) { if (isComposing && (hasComposingText || hasMediaAttachments)) {
@ -237,6 +239,14 @@ class UI extends React.PureComponent {
} }
} }
handleWindowFocus = () => {
this.props.dispatch(focusApp());
}
handleWindowBlur = () => {
this.props.dispatch(unfocusApp());
}
handleLayoutChange = () => { handleLayoutChange = () => {
// The cached heights are no longer accurate, invalidate // The cached heights are no longer accurate, invalidate
this.props.dispatch(clearHeight()); this.props.dispatch(clearHeight());
@ -314,6 +324,8 @@ class UI extends React.PureComponent {
} }
componentWillMount () { componentWillMount () {
window.addEventListener('focus', this.handleWindowFocus, false);
window.addEventListener('blur', this.handleWindowBlur, false);
window.addEventListener('beforeunload', this.handleBeforeUnload, false); window.addEventListener('beforeunload', this.handleBeforeUnload, false);
document.addEventListener('dragenter', this.handleDragEnter, false); document.addEventListener('dragenter', this.handleDragEnter, false);
@ -343,7 +355,10 @@ class UI extends React.PureComponent {
} }
componentWillUnmount () { componentWillUnmount () {
window.removeEventListener('focus', this.handleWindowFocus);
window.removeEventListener('blur', this.handleWindowBlur);
window.removeEventListener('beforeunload', this.handleBeforeUnload); window.removeEventListener('beforeunload', this.handleBeforeUnload);
document.removeEventListener('dragenter', this.handleDragEnter); document.removeEventListener('dragenter', this.handleDragEnter);
document.removeEventListener('dragover', this.handleDragOver); document.removeEventListener('dragover', this.handleDragOver);
document.removeEventListener('drop', this.handleDrop); document.removeEventListener('drop', this.handleDrop);
@ -502,6 +517,7 @@ class UI extends React.PureComponent {
<LoadingBarContainer className='loading-bar' /> <LoadingBarContainer className='loading-bar' />
<ModalContainer /> <ModalContainer />
<UploadArea active={draggingOver} onClose={this.closeUploadModal} /> <UploadArea active={draggingOver} onClose={this.closeUploadModal} />
<DocumentTitle />
</div> </div>
</HotKeys> </HotKeys>
); );

View file

@ -133,3 +133,7 @@ export function ListAdder () {
export function Search () { export function Search () {
return import(/*webpackChunkName: "features/search" */'../../search'); return import(/*webpackChunkName: "features/search" */'../../search');
} }
export function Tesseract () {
return import(/*webpackChunkName: "tesseract" */'tesseract.js');
}

View file

@ -101,6 +101,7 @@ class Video extends React.PureComponent {
onCloseVideo: PropTypes.func, onCloseVideo: PropTypes.func,
detailed: PropTypes.bool, detailed: PropTypes.bool,
inline: PropTypes.bool, inline: PropTypes.bool,
editable: PropTypes.bool,
cacheWidth: PropTypes.func, cacheWidth: PropTypes.func,
visible: PropTypes.bool, visible: PropTypes.bool,
onToggleVisibility: PropTypes.func, onToggleVisibility: PropTypes.func,
@ -375,7 +376,7 @@ class Video extends React.PureComponent {
} }
render () { render () {
const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link } = this.props; const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable } = this.props;
const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
const progress = (currentTime / duration) * 100; const progress = (currentTime / duration) * 100;
@ -413,7 +414,7 @@ class Video extends React.PureComponent {
return ( return (
<div <div
role='menuitem' role='menuitem'
className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen })} className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, editable })}
style={playerStyle} style={playerStyle}
ref={this.setPlayerRef} ref={this.setPlayerRef}
onMouseEnter={this.handleMouseEnter} onMouseEnter={this.handleMouseEnter}
@ -423,7 +424,7 @@ class Video extends React.PureComponent {
> >
<canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} /> <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} />
{revealed && <video {(revealed || editable) && <video
ref={this.setVideoRef} ref={this.setVideoRef}
src={src} src={src}
poster={preview} poster={preview}
@ -445,7 +446,7 @@ class Video extends React.PureComponent {
onVolumeChange={this.handleVolumeChange} onVolumeChange={this.handleVolumeChange}
/>} />}
<div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed })}> <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed || editable })}>
<button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}> <button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}>
<span className='spoiler-button__overlay__label'>{warning}</span> <span className='spoiler-button__overlay__label'>{warning}</span>
</button> </button>
@ -489,7 +490,7 @@ class Video extends React.PureComponent {
</div> </div>
<div className='video-player__buttons right'> <div className='video-player__buttons right'>
{!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
{(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>}
{onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>}
<button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button>

View file

@ -24,5 +24,6 @@ export const forceSingleColumn = !getMeta('advanced_layout');
export const useBlurhash = getMeta('use_blurhash'); export const useBlurhash = getMeta('use_blurhash');
export const usePendingItems = getMeta('use_pending_items'); export const usePendingItems = getMeta('use_pending_items');
export const showTrends = getMeta('trends'); export const showTrends = getMeta('trends');
export const title = getMeta('title');
export default initialState; export default initialState;

View file

@ -4,6 +4,7 @@
"account.block": "حظر @{name}", "account.block": "حظر @{name}",
"account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}", "account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}",
"account.blocked": "محظور", "account.blocked": "محظور",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "رسالة خاصة إلى @{name}", "account.direct": "رسالة خاصة إلى @{name}",
"account.domain_blocked": "النطاق مخفي", "account.domain_blocked": "النطاق مخفي",
"account.edit_profile": "تعديل الملف الشخصي", "account.edit_profile": "تعديل الملف الشخصي",
@ -37,6 +38,7 @@
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}", "account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
"alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.", "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
"alert.unexpected.title": "المعذرة!", "alert.unexpected.title": "المعذرة!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة", "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة",
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_column_error.retry": "إعادة المحاولة", "bundle_column_error.retry": "إعادة المحاولة",
@ -156,7 +158,7 @@
"home.column_settings.basic": "أساسية", "home.column_settings.basic": "أساسية",
"home.column_settings.show_reblogs": "عرض الترقيات", "home.column_settings.show_reblogs": "عرض الترقيات",
"home.column_settings.show_replies": "عرض الردود", "home.column_settings.show_replies": "عرض الردود",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "تحديث في الوقت الحالي",
"intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
"intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
"intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}", "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
@ -251,10 +253,11 @@
"navigation_bar.profile_directory": "دليل المستخدِمين", "navigation_bar.profile_directory": "دليل المستخدِمين",
"navigation_bar.public_timeline": "الخيط العام الموحد", "navigation_bar.public_timeline": "الخيط العام الموحد",
"navigation_bar.security": "الأمان", "navigation_bar.security": "الأمان",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "أُعجِب {name} بمنشورك", "notification.favourite": "أُعجِب {name} بمنشورك",
"notification.follow": "{name} يتابعك", "notification.follow": "{name} يتابعك",
"notification.mention": "{name} ذكرك", "notification.mention": "{name} ذكرك",
"notification.poll": "A poll you have voted in has ended", "notification.poll": "لقد إنتها تصويت شاركت فيه",
"notification.reblog": "{name} قام بترقية تبويقك", "notification.reblog": "{name} قام بترقية تبويقك",
"notifications.clear": "امسح الإخطارات", "notifications.clear": "امسح الإخطارات",
"notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟",
@ -316,7 +319,7 @@
"search_results.accounts": "أشخاص", "search_results.accounts": "أشخاص",
"search_results.hashtags": "الوُسوم", "search_results.hashtags": "الوُسوم",
"search_results.statuses": "التبويقات", "search_results.statuses": "التبويقات",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "البحث في التبويقات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.",
"search_results.total": "{count, number} {count, plural, one {result} و {results}}", "search_results.total": "{count, number} {count, plural, one {result} و {results}}",
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
"status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف",
@ -370,14 +373,22 @@
"time_remaining.moments": "لحظات متبقية", "time_remaining.moments": "لحظات متبقية",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
"trends.refresh": "Refresh",
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.", "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
"upload_area.title": "اسحب ثم أفلت للرفع", "upload_area.title": "اسحب ثم أفلت للرفع",
"upload_button.label": "إضافة وسائط ({formats})", "upload_button.label": "إضافة وسائط ({formats})",
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
"upload_form.description": "وصف للمعاقين بصريا", "upload_form.description": "وصف للمعاقين بصريا",
"upload_form.focus": "قص", "upload_form.edit": "Edit",
"upload_form.undo": "حذف", "upload_form.undo": "حذف",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "يرفع...", "upload_progress.label": "يرفع...",
"video.close": "إغلاق الفيديو", "video.close": "إغلاق الفيديو",
"video.exit_fullscreen": "الخروج من وضع الشاشة المليئة", "video.exit_fullscreen": "الخروج من وضع الشاشة المليئة",

View file

@ -4,6 +4,7 @@
"account.block": "Bloquiar a @{name}", "account.block": "Bloquiar a @{name}",
"account.block_domain": "Anubrir tolo de {domain}", "account.block_domain": "Anubrir tolo de {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Unviar un mensaxe direutu a @{name}", "account.direct": "Unviar un mensaxe direutu a @{name}",
"account.domain_blocked": "Dominiu anubríu", "account.domain_blocked": "Dominiu anubríu",
"account.edit_profile": "Editar el perfil", "account.edit_profile": "Editar el perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "Asocedió un fallu inesperáu.", "alert.unexpected.message": "Asocedió un fallu inesperáu.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Ups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Llinia temporal federada", "navigation_bar.public_timeline": "Llinia temporal federada",
"navigation_bar.security": "Seguranza", "navigation_bar.security": "Seguranza",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} siguióte", "notification.follow": "{name} siguióte",
"notification.mention": "{name} mentóte", "notification.mention": "{name} mentóte",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media", "upload_button.label": "Add media",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Descripción pa discapacitaos visuales", "upload_form.description": "Descripción pa discapacitaos visuales",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Desaniciar", "upload_form.undo": "Desaniciar",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Xubiendo...", "upload_progress.label": "Xubiendo...",
"video.close": "Zarrar el videu", "video.close": "Zarrar el videu",
"video.exit_fullscreen": "Colar de la pantalla completa", "video.exit_fullscreen": "Colar de la pantalla completa",

View file

@ -4,6 +4,7 @@
"account.block": "Блокирай", "account.block": "Блокирай",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Редактирай профила си", "account.edit_profile": "Редактирай профила си",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Публичен канал", "navigation_bar.public_timeline": "Публичен канал",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} хареса твоята публикация", "notification.favourite": "{name} хареса твоята публикация",
"notification.follow": "{name} те последва", "notification.follow": "{name} те последва",
"notification.mention": "{name} те спомена", "notification.mention": "{name} те спомена",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Добави медия", "upload_button.label": "Добави медия",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Отмяна", "upload_form.undo": "Отмяна",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "@{name} কে বন্ধ করুন", "account.block": "@{name} কে বন্ধ করুন",
"account.block_domain": "{domain} থেকে সব সরিয়ে ফেলুন", "account.block_domain": "{domain} থেকে সব সরিয়ে ফেলুন",
"account.blocked": "বন্ধ করা হয়েছে", "account.blocked": "বন্ধ করা হয়েছে",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "@{name} এর কাছে সরকারি লেখা পাঠাতে", "account.direct": "@{name} এর কাছে সরকারি লেখা পাঠাতে",
"account.domain_blocked": "ওয়েবসাইট সরিয়ে ফেলা হয়েছে", "account.domain_blocked": "ওয়েবসাইট সরিয়ে ফেলা হয়েছে",
"account.edit_profile": "নিজের পাতা সম্পাদনা করতে", "account.edit_profile": "নিজের পাতা সম্পাদনা করতে",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন", "account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন",
"alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।", "alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।",
"alert.unexpected.title": "ওহো!", "alert.unexpected.title": "ওহো!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন", "boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন",
"bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।",
"bundle_column_error.retry": "আবার চেষ্টা করুন", "bundle_column_error.retry": "আবার চেষ্টা করুন",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "নিজস্ব পাতার তালিকা", "navigation_bar.profile_directory": "নিজস্ব পাতার তালিকা",
"navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা", "navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
"navigation_bar.security": "নিরাপত্তা", "navigation_bar.security": "নিরাপত্তা",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন", "notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন", "notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
@ -370,14 +373,22 @@
"time_remaining.moments": "সময় বাকি আছে", "time_remaining.moments": "সময় বাকি আছে",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} কথা বলছে", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} কথা বলছে",
"trends.refresh": "Refresh",
"ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।", "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
"upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে", "upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে",
"upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।", "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।", "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে", "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
"upload_form.focus": "সাধারণ দেখাটি পরিবর্তন করতে", "upload_form.edit": "Edit",
"upload_form.undo": "মুছে ফেলতে", "upload_form.undo": "মুছে ফেলতে",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...", "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...",
"video.close": "ভিডিওটি বন্ধ করতে", "video.close": "ভিডিওটি বন্ধ করতে",
"video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে", "video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে",

View file

@ -4,6 +4,7 @@
"account.block": "Bloqueja @{name}", "account.block": "Bloqueja @{name}",
"account.block_domain": "Amaga-ho tot de {domain}", "account.block_domain": "Amaga-ho tot de {domain}",
"account.blocked": "Bloquejat", "account.blocked": "Bloquejat",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Missatge directe @{name}", "account.direct": "Missatge directe @{name}",
"account.domain_blocked": "Domini ocult", "account.domain_blocked": "Domini ocult",
"account.edit_profile": "Editar el perfil", "account.edit_profile": "Editar el perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Activar notificacions de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}",
"alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.message": "S'ha produït un error inesperat.",
"alert.unexpected.title": "Vaja!", "alert.unexpected.title": "Vaja!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop", "boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
"bundle_column_error.retry": "Torna-ho a provar", "bundle_column_error.retry": "Torna-ho a provar",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Bàsic", "home.column_settings.basic": "Bàsic",
"home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_reblogs": "Mostrar impulsos",
"home.column_settings.show_replies": "Mostrar respostes", "home.column_settings.show_replies": "Mostrar respostes",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Actualització en temps real",
"intervals.full.days": "{number, plural, one {# dia} other {# dies}}", "intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Nova llista", "lists.new.title_placeholder": "Nova llista",
"lists.search": "Cercar entre les persones que segueixes", "lists.search": "Cercar entre les persones que segueixes",
"lists.subheading": "Les teves llistes", "lists.subheading": "Les teves llistes",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
"loading_indicator.label": "Carregant...", "loading_indicator.label": "Carregant...",
"media_gallery.toggle_visible": "Alternar visibilitat", "media_gallery.toggle_visible": "Alternar visibilitat",
"missing_indicator.label": "No trobat", "missing_indicator.label": "No trobat",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Directori de perfils", "navigation_bar.profile_directory": "Directori de perfils",
"navigation_bar.public_timeline": "Línia de temps federada", "navigation_bar.public_timeline": "Línia de temps federada",
"navigation_bar.security": "Seguretat", "navigation_bar.security": "Seguretat",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} ha afavorit el teu estat", "notification.favourite": "{name} ha afavorit el teu estat",
"notification.follow": "{name} et segueix", "notification.follow": "{name} et segueix",
"notification.mention": "{name} t'ha esmentat", "notification.mention": "{name} t'ha esmentat",
@ -316,7 +319,7 @@
"search_results.accounts": "Gent", "search_results.accounts": "Gent",
"search_results.hashtags": "Etiquetes", "search_results.hashtags": "Etiquetes",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "La cerca de toots pel seu contingut no està habilitada en aquest servidor Mastodon.",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_account": "Obre l'interfície de moderació per a @{name}",
"status.admin_status": "Obre aquest toot a la interfície de moderació", "status.admin_status": "Obre aquest toot a la interfície de moderació",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments restants", "time_remaining.moments": "Moments restants",
"time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants", "time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.", "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
"upload_area.title": "Arrossega i deixa anar per a carregar", "upload_area.title": "Arrossega i deixa anar per a carregar",
"upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.", "upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
"upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.", "upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.",
"upload_form.description": "Descriure els problemes visuals", "upload_form.description": "Descriure els problemes visuals",
"upload_form.focus": "Modificar la previsualització", "upload_form.edit": "Edit",
"upload_form.undo": "Esborra", "upload_form.undo": "Esborra",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Pujant...", "upload_progress.label": "Pujant...",
"video.close": "Tancar el vídeo", "video.close": "Tancar el vídeo",
"video.exit_fullscreen": "Sortir de pantalla completa", "video.exit_fullscreen": "Sortir de pantalla completa",

View file

@ -1,9 +1,10 @@
{ {
"account.add_or_remove_from_list": "Aghjustà o toglie da e liste", "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.block": "Bluccà @{name}", "account.block": "Bluccà @{name}",
"account.block_domain": "Piattà tuttu da {domain}", "account.block_domain": "Piattà tuttu da {domain}",
"account.blocked": "Bluccatu", "account.blocked": "Bluccatu",
"account.cancel_follow_request": "Annullà a dumanda d'abbunamentu",
"account.direct": "Missaghju direttu @{name}", "account.direct": "Missaghju direttu @{name}",
"account.domain_blocked": "Duminiu piattatu", "account.domain_blocked": "Duminiu piattatu",
"account.edit_profile": "Mudificà u prufile", "account.edit_profile": "Mudificà u prufile",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Ùn piattà più nutificazione da @{name}", "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}",
"alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.", "alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.",
"alert.unexpected.title": "Uups!", "alert.unexpected.title": "Uups!",
"autosuggest_hashtag.per_week": "{count} per settimana",
"boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta", "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta",
"bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.", "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.",
"bundle_column_error.retry": "Pruvà torna", "bundle_column_error.retry": "Pruvà torna",
@ -71,7 +73,7 @@
"compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.", "compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.",
"compose_form.lock_disclaimer.lock": "privatu", "compose_form.lock_disclaimer.lock": "privatu",
"compose_form.placeholder": "À chè pensate?", "compose_form.placeholder": "À chè pensate?",
"compose_form.poll.add_option": "Aghjustà una scelta", "compose_form.poll.add_option": "Aghjunghje scelta",
"compose_form.poll.duration": "Durata di u scandagliu", "compose_form.poll.duration": "Durata di u scandagliu",
"compose_form.poll.option_placeholder": "Scelta {number}", "compose_form.poll.option_placeholder": "Scelta {number}",
"compose_form.poll.remove_option": "Toglie sta scelta", "compose_form.poll.remove_option": "Toglie sta scelta",
@ -123,8 +125,8 @@
"empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!", "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!",
"empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.", "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.",
"empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.", "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.",
"empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjusterate unu à i vostri favuriti, sarà mustratu quì.", "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjunghjerate unu à i vostri favuriti, sarà mustratu quì.",
"empty_column.favourites": "Nisunu hà aghjustatu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.", "empty_column.favourites": "Nisunu hà aghjuntu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.",
"empty_column.follow_requests": "Ùn avete manc'una dumanda d'abbunamentu. Quandu averete una, sarà mustrata quì.", "empty_column.follow_requests": "Ùn avete manc'una dumanda d'abbunamentu. Quandu averete una, sarà mustrata quì.",
"empty_column.hashtag": "Ùn c'hè ancu nunda quì.", "empty_column.hashtag": "Ùn c'hè ancu nunda quì.",
"empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.", "empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Bàsichi", "home.column_settings.basic": "Bàsichi",
"home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_reblogs": "Vede e spartere",
"home.column_settings.show_replies": "Vede e risposte", "home.column_settings.show_replies": "Vede e risposte",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Mette à ghjornu in tempu reale",
"intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}", "intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}", "intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
@ -218,11 +220,11 @@
"lists.delete": "Supprime a lista", "lists.delete": "Supprime a lista",
"lists.edit": "Mudificà a lista", "lists.edit": "Mudificà a lista",
"lists.edit.submit": "Cambià u titulu", "lists.edit.submit": "Cambià u titulu",
"lists.new.create": "Aghjustà una lista", "lists.new.create": "Aghjunghje",
"lists.new.title_placeholder": "Titulu di a lista", "lists.new.title_placeholder": "Titulu di a lista",
"lists.search": "Circà indè i vostr'abbunamenti", "lists.search": "Circà indè i vostr'abbunamenti",
"lists.subheading": "E vo liste", "lists.subheading": "E vo liste",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}",
"loading_indicator.label": "Caricamentu...", "loading_indicator.label": "Caricamentu...",
"media_gallery.toggle_visible": "Cambià a visibilità", "media_gallery.toggle_visible": "Cambià a visibilità",
"missing_indicator.label": "Micca trovu", "missing_indicator.label": "Micca trovu",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Annuariu di i prufili", "navigation_bar.profile_directory": "Annuariu di i prufili",
"navigation_bar.public_timeline": "Linea pubblica glubale", "navigation_bar.public_timeline": "Linea pubblica glubale",
"navigation_bar.security": "Sicurità", "navigation_bar.security": "Sicurità",
"notification.and_n_others": "è {count, plural, one {# altru} other {# altri}}",
"notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti", "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
"notification.follow": "{name} v'hà seguitatu", "notification.follow": "{name} v'hà seguitatu",
"notification.mention": "{name} v'hà mintuvatu", "notification.mention": "{name} v'hà mintuvatu",
@ -281,7 +284,7 @@
"poll.refresh": "Attualizà", "poll.refresh": "Attualizà",
"poll.total_votes": "{count, plural, one {# votu} other {# voti}}", "poll.total_votes": "{count, plural, one {# votu} other {# voti}}",
"poll.vote": "Vutà", "poll.vote": "Vutà",
"poll_button.add_poll": "Aghjustà un scandagliu", "poll_button.add_poll": "Aghjunghje",
"poll_button.remove_poll": "Toglie u scandagliu", "poll_button.remove_poll": "Toglie u scandagliu",
"privacy.change": "Mudificà a cunfidenzialità di u statutu", "privacy.change": "Mudificà a cunfidenzialità di u statutu",
"privacy.direct.long": "Mandà solu à quelli chì so mintuvati", "privacy.direct.long": "Mandà solu à quelli chì so mintuvati",
@ -316,7 +319,7 @@
"search_results.accounts": "Ghjente", "search_results.accounts": "Ghjente",
"search_results.hashtags": "Hashtag", "search_results.hashtags": "Hashtag",
"search_results.statuses": "Statuti", "search_results.statuses": "Statuti",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.",
"search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}",
"status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}",
"status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione",
@ -370,14 +373,22 @@
"time_remaining.moments": "Ci fermanu qualchi mumentu", "time_remaining.moments": "Ci fermanu qualchi mumentu",
"time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}", "time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu",
"trends.refresh": "Attualizà",
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.", "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
"upload_area.title": "Drag & drop per caricà un fugliale", "upload_area.title": "Drag & drop per caricà un fugliale",
"upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
"upload_form.description": "Discrive per i malvistosi", "upload_form.description": "Discrive per i malvistosi",
"upload_form.focus": "Cambià a vista", "upload_form.edit": "Mudificà",
"upload_form.undo": "Sguassà", "upload_form.undo": "Sguassà",
"upload_modal.analyzing_picture": "Analisi di u ritrattu…",
"upload_modal.apply": "Affettà",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Ditettà testu da u ritrattu",
"upload_modal.edit_media": "Cambià media",
"upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.",
"upload_modal.preview_label": "Vista ({ratio})",
"upload_progress.label": "Caricamentu...", "upload_progress.label": "Caricamentu...",
"video.close": "Chjudà a video", "video.close": "Chjudà a video",
"video.exit_fullscreen": "Caccià u pienu screnu", "video.exit_fullscreen": "Caccià u pienu screnu",

View file

@ -4,6 +4,7 @@
"account.block": "Zablokovat uživatele @{name}", "account.block": "Zablokovat uživatele @{name}",
"account.block_domain": "Skrýt vše z {domain}", "account.block_domain": "Skrýt vše z {domain}",
"account.blocked": "Blokován/a", "account.blocked": "Blokován/a",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Poslat přímou zprávu uživateli @{name}", "account.direct": "Poslat přímou zprávu uživateli @{name}",
"account.domain_blocked": "Doména skryta", "account.domain_blocked": "Doména skryta",
"account.edit_profile": "Upravit profil", "account.edit_profile": "Upravit profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}", "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}",
"alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.message": "Objevila se neočekávaná chyba.",
"alert.unexpected.title": "Jejda!", "alert.unexpected.title": "Jejda!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}", "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}",
"bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.", "bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
"bundle_column_error.retry": "Zkuste to znovu", "bundle_column_error.retry": "Zkuste to znovu",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Základní", "home.column_settings.basic": "Základní",
"home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_reblogs": "Zobrazit boosty",
"home.column_settings.show_replies": "Zobrazit odpovědi", "home.column_settings.show_replies": "Zobrazit odpovědi",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Aktualizovat v reálném čase",
"intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}", "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Název nového seznamu", "lists.new.title_placeholder": "Název nového seznamu",
"lists.search": "Hledejte mezi lidmi, které sledujete", "lists.search": "Hledejte mezi lidmi, které sledujete",
"lists.subheading": "Vaše seznamy", "lists.subheading": "Vaše seznamy",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
"loading_indicator.label": "Načítám…", "loading_indicator.label": "Načítám…",
"media_gallery.toggle_visible": "Přepínat viditelnost", "media_gallery.toggle_visible": "Přepínat viditelnost",
"missing_indicator.label": "Nenalezeno", "missing_indicator.label": "Nenalezeno",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Adresář profilů", "navigation_bar.profile_directory": "Adresář profilů",
"navigation_bar.public_timeline": "Federovaná časová osa", "navigation_bar.public_timeline": "Federovaná časová osa",
"navigation_bar.security": "Zabezpečení", "navigation_bar.security": "Zabezpečení",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} si oblíbil/a váš toot", "notification.favourite": "{name} si oblíbil/a váš toot",
"notification.follow": "{name} vás začal/a sledovat", "notification.follow": "{name} vás začal/a sledovat",
"notification.mention": "{name} vás zmínil/a", "notification.mention": "{name} vás zmínil/a",
@ -316,7 +319,7 @@
"search_results.accounts": "Lidé", "search_results.accounts": "Lidé",
"search_results.hashtags": "Hashtagy", "search_results.hashtags": "Hashtagy",
"search_results.statuses": "Tooty", "search_results.statuses": "Tooty",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.",
"search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}",
"status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}", "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}",
"status.admin_status": "Otevřít tento toot v moderátorském rozhraní", "status.admin_status": "Otevřít tento toot v moderátorském rozhraní",
@ -370,14 +373,22 @@
"time_remaining.moments": "Zbývá několik sekund", "time_remaining.moments": "Zbývá několik sekund",
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}", "time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří", "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří",
"trends.refresh": "Refresh",
"ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.", "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.",
"upload_area.title": "Přetažením nahrajete", "upload_area.title": "Přetažením nahrajete",
"upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Byl překročen limit nahraných souborů.", "upload_error.limit": "Byl překročen limit nahraných souborů.",
"upload_error.poll": "Nahrávání souborů není povoleno u anket.", "upload_error.poll": "Nahrávání souborů není povoleno u anket.",
"upload_form.description": "Popis pro zrakově postižené", "upload_form.description": "Popis pro zrakově postižené",
"upload_form.focus": "Změnit náhled", "upload_form.edit": "Edit",
"upload_form.undo": "Smazat", "upload_form.undo": "Smazat",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Nahrávám…", "upload_progress.label": "Nahrávám…",
"video.close": "Zavřít video", "video.close": "Zavřít video",
"video.exit_fullscreen": "Ukončit celou obrazovku", "video.exit_fullscreen": "Ukončit celou obrazovku",

View file

@ -4,6 +4,7 @@
"account.block": "Blocio @{name}", "account.block": "Blocio @{name}",
"account.block_domain": "Cuddio popeth rhag {domain}", "account.block_domain": "Cuddio popeth rhag {domain}",
"account.blocked": "Blociwyd", "account.blocked": "Blociwyd",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Neges breifat @{name}", "account.direct": "Neges breifat @{name}",
"account.domain_blocked": "Parth wedi ei guddio", "account.domain_blocked": "Parth wedi ei guddio",
"account.edit_profile": "Golygu proffil", "account.edit_profile": "Golygu proffil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Wps!", "alert.unexpected.title": "Wps!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa",
"bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_column_error.retry": "Ceisiwch eto", "bundle_column_error.retry": "Ceisiwch eto",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Cyfeiriadur Proffil", "navigation_bar.profile_directory": "Cyfeiriadur Proffil",
"navigation_bar.public_timeline": "Ffrwd y ffederasiwn", "navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
"navigation_bar.security": "Diogelwch", "navigation_bar.security": "Diogelwch",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "hoffodd {name} eich tŵt", "notification.favourite": "hoffodd {name} eich tŵt",
"notification.follow": "dilynodd {name} chi", "notification.follow": "dilynodd {name} chi",
"notification.mention": "Soniodd {name} amdanoch chi", "notification.mention": "Soniodd {name} amdanoch chi",
@ -370,14 +373,22 @@
"time_remaining.moments": "Munudau ar ôl", "time_remaining.moments": "Munudau ar ôl",
"time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl", "time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} yn siarad", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} yn siarad",
"trends.refresh": "Refresh",
"ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
"upload_area.title": "Llusgwch & gollwing i uwchlwytho", "upload_area.title": "Llusgwch & gollwing i uwchlwytho",
"upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
"upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.", "upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.",
"upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
"upload_form.focus": "Newid rhagolwg", "upload_form.edit": "Edit",
"upload_form.undo": "Dileu", "upload_form.undo": "Dileu",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uwchlwytho...", "upload_progress.label": "Uwchlwytho...",
"video.close": "Cau fideo", "video.close": "Cau fideo",
"video.exit_fullscreen": "Gadael sgrîn llawn", "video.exit_fullscreen": "Gadael sgrîn llawn",

View file

@ -4,6 +4,7 @@
"account.block": "Bloker @{name}", "account.block": "Bloker @{name}",
"account.block_domain": "Skjul alt fra {domain}", "account.block_domain": "Skjul alt fra {domain}",
"account.blocked": "Blokeret", "account.blocked": "Blokeret",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Send en direkte besked til @{name}", "account.direct": "Send en direkte besked til @{name}",
"account.domain_blocked": "Domænet er blevet skjult", "account.domain_blocked": "Domænet er blevet skjult",
"account.edit_profile": "Rediger profil", "account.edit_profile": "Rediger profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}", "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
"alert.unexpected.message": "Der opstod en uventet fejl.", "alert.unexpected.message": "Der opstod en uventet fejl.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
"bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.", "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.",
"bundle_column_error.retry": "Prøv igen", "bundle_column_error.retry": "Prøv igen",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Fælles tidslinje", "navigation_bar.public_timeline": "Fælles tidslinje",
"navigation_bar.security": "Sikkerhed", "navigation_bar.security": "Sikkerhed",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favoriserede din status", "notification.favourite": "{name} favoriserede din status",
"notification.follow": "{name} fulgte dig", "notification.follow": "{name} fulgte dig",
"notification.mention": "{name} nævnte dig", "notification.mention": "{name} nævnte dig",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} snakker", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} snakker",
"trends.refresh": "Refresh",
"ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.", "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
"upload_area.title": "Træk og slip for at uploade", "upload_area.title": "Træk og slip for at uploade",
"upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Beskriv for de svagtseende", "upload_form.description": "Beskriv for de svagtseende",
"upload_form.focus": "Beskær", "upload_form.edit": "Edit",
"upload_form.undo": "Slet", "upload_form.undo": "Slet",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploader...", "upload_progress.label": "Uploader...",
"video.close": "Luk video", "video.close": "Luk video",
"video.exit_fullscreen": "Gå ud af fuldskærm", "video.exit_fullscreen": "Gå ud af fuldskærm",

View file

@ -4,6 +4,7 @@
"account.block": "@{name} blockieren", "account.block": "@{name} blockieren",
"account.block_domain": "Alles von {domain} verstecken", "account.block_domain": "Alles von {domain} verstecken",
"account.blocked": "Blockiert", "account.blocked": "Blockiert",
"account.cancel_follow_request": "Folgeanfrage abbrechen",
"account.direct": "Direktnachricht an @{name}", "account.direct": "Direktnachricht an @{name}",
"account.domain_blocked": "Domain versteckt", "account.domain_blocked": "Domain versteckt",
"account.edit_profile": "Profil bearbeiten", "account.edit_profile": "Profil bearbeiten",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
"alert.unexpected.title": "Hoppla!", "alert.unexpected.title": "Hoppla!",
"autosuggest_hashtag.per_week": "{count} pro Woche",
"boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen",
"bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
"bundle_column_error.retry": "Erneut versuchen", "bundle_column_error.retry": "Erneut versuchen",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Einfach", "home.column_settings.basic": "Einfach",
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
"home.column_settings.show_replies": "Antworten anzeigen", "home.column_settings.show_replies": "Antworten anzeigen",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "In Echtzeit aktualisieren",
"intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}", "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}",
"intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}", "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}",
"intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}", "intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Neuer Titel der Liste", "lists.new.title_placeholder": "Neuer Titel der Liste",
"lists.search": "Suche nach Leuten denen du folgst", "lists.search": "Suche nach Leuten denen du folgst",
"lists.subheading": "Deine Listen", "lists.subheading": "Deine Listen",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}",
"loading_indicator.label": "Wird geladen …", "loading_indicator.label": "Wird geladen …",
"media_gallery.toggle_visible": "Sichtbarkeit umschalten", "media_gallery.toggle_visible": "Sichtbarkeit umschalten",
"missing_indicator.label": "Nicht gefunden", "missing_indicator.label": "Nicht gefunden",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profilverzeichnis", "navigation_bar.profile_directory": "Profilverzeichnis",
"navigation_bar.public_timeline": "Föderierte Zeitleiste", "navigation_bar.public_timeline": "Föderierte Zeitleiste",
"navigation_bar.security": "Sicherheit", "navigation_bar.security": "Sicherheit",
"notification.and_n_others": "und {count, plural, one {# andere Person} other {# andere Personen}}",
"notification.favourite": "{name} hat deinen Beitrag favorisiert", "notification.favourite": "{name} hat deinen Beitrag favorisiert",
"notification.follow": "{name} folgt dir", "notification.follow": "{name} folgt dir",
"notification.mention": "{name} hat dich erwähnt", "notification.mention": "{name} hat dich erwähnt",
@ -316,7 +319,7 @@
"search_results.accounts": "Personen", "search_results.accounts": "Personen",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",
"search_results.statuses": "Beiträge", "search_results.statuses": "Beiträge",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.",
"search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}",
"status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_account": "Öffne Moderationsoberfläche für @{name}",
"status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche",
@ -370,14 +373,22 @@
"time_remaining.moments": "Schließt in Kürze", "time_remaining.moments": "Schließt in Kürze",
"time_remaining.seconds": "{number, plural, one {# Sekunde} other {# Sekunden}} verbleibend", "time_remaining.seconds": "{number, plural, one {# Sekunde} other {# Sekunden}} verbleibend",
"trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber", "trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber",
"trends.refresh": "Aktualisieren",
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.", "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
"upload_area.title": "Zum Hochladen hereinziehen", "upload_area.title": "Zum Hochladen hereinziehen",
"upload_button.label": "Mediendatei hinzufügen ({formats})", "upload_button.label": "Mediendatei hinzufügen ({formats})",
"upload_error.limit": "Dateiupload-Limit erreicht.", "upload_error.limit": "Dateiupload-Limit erreicht.",
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.", "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben", "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
"upload_form.focus": "Vorschaubild bearbeiten", "upload_form.edit": "Bearbeiten",
"upload_form.undo": "Löschen", "upload_form.undo": "Löschen",
"upload_modal.analyzing_picture": "Analysiere Bild…",
"upload_modal.apply": "Übernehmen",
"upload_modal.description_placeholder": "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern",
"upload_modal.detect_text": "Text aus Bild erkennen",
"upload_modal.edit_media": "Medien bearbeiten",
"upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.",
"upload_modal.preview_label": "Vorschau ({ratio})",
"upload_progress.label": "Wird hochgeladen …", "upload_progress.label": "Wird hochgeladen …",
"video.close": "Video schließen", "video.close": "Video schließen",
"video.exit_fullscreen": "Vollbild verlassen", "video.exit_fullscreen": "Vollbild verlassen",

View file

@ -71,6 +71,15 @@
], ],
"path": "app/javascript/mastodon/components/account.json" "path": "app/javascript/mastodon/components/account.json"
}, },
{
"descriptors": [
{
"defaultMessage": "{count} per week",
"id": "autosuggest_hashtag.per_week"
}
],
"path": "app/javascript/mastodon/components/autosuggest_hashtag.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@ -577,6 +586,10 @@
"defaultMessage": "Follow", "defaultMessage": "Follow",
"id": "account.follow" "id": "account.follow"
}, },
{
"defaultMessage": "Cancel follow request",
"id": "account.cancel_follow_request"
},
{ {
"defaultMessage": "Awaiting approval. Click to cancel follow request", "defaultMessage": "Awaiting approval. Click to cancel follow request",
"id": "account.requested" "id": "account.requested"
@ -804,6 +817,10 @@
{ {
"defaultMessage": "Muted words", "defaultMessage": "Muted words",
"id": "navigation_bar.filters" "id": "navigation_bar.filters"
},
{
"defaultMessage": "Logout",
"id": "navigation_bar.logout"
} }
], ],
"path": "app/javascript/mastodon/features/compose/components/action_bar.json" "path": "app/javascript/mastodon/features/compose/components/action_bar.json"
@ -1070,6 +1087,15 @@
], ],
"path": "app/javascript/mastodon/features/compose/components/upload_button.json" "path": "app/javascript/mastodon/features/compose/components/upload_button.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Uploading…",
"id": "upload_progress.label"
}
],
"path": "app/javascript/mastodon/features/compose/components/upload_form.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@ -1081,17 +1107,13 @@
}, },
{ {
"descriptors": [ "descriptors": [
{
"defaultMessage": "Describe for the visually impaired",
"id": "upload_form.description"
},
{ {
"defaultMessage": "Delete", "defaultMessage": "Delete",
"id": "upload_form.undo" "id": "upload_form.undo"
}, },
{ {
"defaultMessage": "Crop", "defaultMessage": "Edit",
"id": "upload_form.focus" "id": "upload_form.edit"
} }
], ],
"path": "app/javascript/mastodon/features/compose/components/upload.json" "path": "app/javascript/mastodon/features/compose/components/upload.json"
@ -1292,6 +1314,15 @@
], ],
"path": "app/javascript/mastodon/features/following/index.json" "path": "app/javascript/mastodon/features/following/index.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Refresh",
"id": "trends.refresh"
}
],
"path": "app/javascript/mastodon/features/getting_started/components/trends.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@ -1872,6 +1903,10 @@
}, },
{ {
"descriptors": [ "descriptors": [
{
"defaultMessage": "and {count, plural, one {# other} other {# others}}",
"id": "notification.and_n_others"
},
{ {
"defaultMessage": "{name} followed you", "defaultMessage": "{name} followed you",
"id": "notification.follow" "id": "notification.follow"
@ -2234,6 +2269,47 @@
], ],
"path": "app/javascript/mastodon/features/ui/components/embed_modal.json" "path": "app/javascript/mastodon/features/ui/components/embed_modal.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Close",
"id": "lightbox.close"
},
{
"defaultMessage": "Apply",
"id": "upload_modal.apply"
},
{
"defaultMessage": "A quick brown fox jumps over the lazy dog",
"id": "upload_modal.description_placeholder"
},
{
"defaultMessage": "Edit media",
"id": "upload_modal.edit_media"
},
{
"defaultMessage": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"id": "upload_modal.hint"
},
{
"defaultMessage": "Describe for the visually impaired",
"id": "upload_form.description"
},
{
"defaultMessage": "Analyzing picture…",
"id": "upload_modal.analyzing_picture"
},
{
"defaultMessage": "Detect text from picture",
"id": "upload_modal.detect_text"
},
{
"defaultMessage": "Preview ({ratio})",
"id": "upload_modal.preview_label"
}
],
"path": "app/javascript/mastodon/features/ui/components/focal_point_modal.json"
},
{ {
"descriptors": [ "descriptors": [
{ {

View file

@ -4,6 +4,7 @@
"account.block": "Αποκλισμός @{name}", "account.block": "Αποκλισμός @{name}",
"account.block_domain": "Απόκρυψε τα πάντα από το {domain}", "account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
"account.blocked": "Αποκλεισμένος/η", "account.blocked": "Αποκλεισμένος/η",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Προσωπικό μήνυμα προς @{name}", "account.direct": "Προσωπικό μήνυμα προς @{name}",
"account.domain_blocked": "Κρυμμένος τομέας", "account.domain_blocked": "Κρυμμένος τομέας",
"account.edit_profile": "Επεξεργασία προφίλ", "account.edit_profile": "Επεξεργασία προφίλ",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}", "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
"alert.unexpected.title": "Εεπ!", "alert.unexpected.title": "Εεπ!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά",
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
"bundle_column_error.retry": "Δοκίμασε ξανά", "bundle_column_error.retry": "Δοκίμασε ξανά",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Βασικά", "home.column_settings.basic": "Βασικά",
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Ζωντανή ενημέρωση",
"intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
"intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
"intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}", "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Τίτλος νέας λίστα", "lists.new.title_placeholder": "Τίτλος νέας λίστα",
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
"lists.subheading": "Οι λίστες σου", "lists.subheading": "Οι λίστες σου",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# νέο} other {# νέα}}",
"loading_indicator.label": "Φορτώνει...", "loading_indicator.label": "Φορτώνει...",
"media_gallery.toggle_visible": "Εναλλαγή ορατότητας", "media_gallery.toggle_visible": "Εναλλαγή ορατότητας",
"missing_indicator.label": "Δε βρέθηκε", "missing_indicator.label": "Δε βρέθηκε",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Κατάλογος λογαριασμών", "navigation_bar.profile_directory": "Κατάλογος λογαριασμών",
"navigation_bar.public_timeline": "Ομοσπονδιακή ροή", "navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
"navigation_bar.security": "Ασφάλεια", "navigation_bar.security": "Ασφάλεια",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου", "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
"notification.follow": "Ο/Η {name} σε ακολούθησε", "notification.follow": "Ο/Η {name} σε ακολούθησε",
"notification.mention": "Ο/Η {name} σε ανέφερε", "notification.mention": "Ο/Η {name} σε ανέφερε",
@ -316,7 +319,7 @@
"search_results.accounts": "Άνθρωποι", "search_results.accounts": "Άνθρωποι",
"search_results.hashtags": "Ταμπέλες", "search_results.hashtags": "Ταμπέλες",
"search_results.statuses": "Τουτ", "search_results.statuses": "Τουτ",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.",
"search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}", "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}",
"status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
"status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
@ -370,14 +373,22 @@
"time_remaining.moments": "Απομένουν στιγμές", "time_remaining.moments": "Απομένουν στιγμές",
"time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}", "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε",
"trends.refresh": "Refresh",
"ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
"upload_area.title": "Drag & drop για να ανεβάσεις", "upload_area.title": "Drag & drop για να ανεβάσεις",
"upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
"upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης", "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
"upload_form.focus": "Αλλαγή προεπισκόπησης", "upload_form.edit": "Edit",
"upload_form.undo": "Διαγραφή", "upload_form.undo": "Διαγραφή",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Ανεβαίνει...", "upload_progress.label": "Ανεβαίνει...",
"video.close": "Κλείσε το βίντεο", "video.close": "Κλείσε το βίντεο",
"video.exit_fullscreen": "Έξοδος από πλήρη οθόνη", "video.exit_fullscreen": "Έξοδος από πλήρη οθόνη",

View file

@ -4,6 +4,7 @@
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct message @{name}", "account.direct": "Direct message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -256,6 +258,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -375,14 +378,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media ({formats})", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Change preview", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Bloki @{name}", "account.block": "Bloki @{name}",
"account.block_domain": "Kaŝi ĉion de {domain}", "account.block_domain": "Kaŝi ĉion de {domain}",
"account.blocked": "Blokita", "account.blocked": "Blokita",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Rekte mesaĝi @{name}", "account.direct": "Rekte mesaĝi @{name}",
"account.domain_blocked": "Domajno kaŝita", "account.domain_blocked": "Domajno kaŝita",
"account.edit_profile": "Redakti profilon", "account.edit_profile": "Redakti profilon",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Malsilentigi sciigojn de @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
"alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.message": "Neatendita eraro okazis.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
"bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
"bundle_column_error.retry": "Bonvolu reprovi", "bundle_column_error.retry": "Bonvolu reprovi",
@ -72,12 +74,12 @@
"compose_form.lock_disclaimer.lock": "ŝlosita", "compose_form.lock_disclaimer.lock": "ŝlosita",
"compose_form.placeholder": "Pri kio vi pensas?", "compose_form.placeholder": "Pri kio vi pensas?",
"compose_form.poll.add_option": "Aldoni elekto", "compose_form.poll.add_option": "Aldoni elekto",
"compose_form.poll.duration": "Balotenketo daŭro", "compose_form.poll.duration": "Balotenketa daŭro",
"compose_form.poll.option_placeholder": "elekto {number}", "compose_form.poll.option_placeholder": "elekto {number}",
"compose_form.poll.remove_option": "Forigi ĉi tiu elekton", "compose_form.poll.remove_option": "Forigi ĉi tiu elekton",
"compose_form.publish": "Hup", "compose_form.publish": "Hup",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marki aŭdovidaĵojn kiel tiklaj", "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj",
"compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla", "compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla",
"compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla", "compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla",
"compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto", "compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Bazaj agordoj", "home.column_settings.basic": "Bazaj agordoj",
"home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_reblogs": "Montri diskonigojn",
"home.column_settings.show_replies": "Montri respondojn", "home.column_settings.show_replies": "Montri respondojn",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Ĝisdatigo en realtempa",
"intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}",
"intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Titolo de la nova listo", "lists.new.title_placeholder": "Titolo de la nova listo",
"lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
"lists.subheading": "Viaj listoj", "lists.subheading": "Viaj listoj",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count,plural, one {# nova ero} other {# novaj eroj}}",
"loading_indicator.label": "Ŝargado…", "loading_indicator.label": "Ŝargado…",
"media_gallery.toggle_visible": "Baskuligi videblecon", "media_gallery.toggle_visible": "Baskuligi videblecon",
"missing_indicator.label": "Ne trovita", "missing_indicator.label": "Ne trovita",
@ -251,10 +253,11 @@
"navigation_bar.profile_directory": "Profilujo", "navigation_bar.profile_directory": "Profilujo",
"navigation_bar.public_timeline": "Fratara tempolinio", "navigation_bar.public_timeline": "Fratara tempolinio",
"navigation_bar.security": "Sekureco", "navigation_bar.security": "Sekureco",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} stelumis vian mesaĝon", "notification.favourite": "{name} stelumis vian mesaĝon",
"notification.follow": "{name} eksekvis vin", "notification.follow": "{name} eksekvis vin",
"notification.mention": "{name} menciis vin", "notification.mention": "{name} menciis vin",
"notification.poll": "Balotenketo ke vi balotis estas finita", "notification.poll": "Partoprenita balotenketo finiĝis",
"notification.reblog": "{name} diskonigis vian mesaĝon", "notification.reblog": "{name} diskonigis vian mesaĝon",
"notifications.clear": "Forviŝi sciigojn", "notifications.clear": "Forviŝi sciigojn",
"notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?",
@ -265,7 +268,7 @@
"notifications.column_settings.filter_bar.show": "Montri", "notifications.column_settings.filter_bar.show": "Montri",
"notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow": "Novaj sekvantoj:",
"notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.mention": "Mencioj:",
"notifications.column_settings.poll": "Balotenketo rezulto:", "notifications.column_settings.poll": "Balotenketaj rezultoj:",
"notifications.column_settings.push": "Puŝsciigoj", "notifications.column_settings.push": "Puŝsciigoj",
"notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.reblog": "Diskonigoj:",
"notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.show": "Montri en kolumno",
@ -275,7 +278,7 @@
"notifications.filter.favourites": "Stelumoj", "notifications.filter.favourites": "Stelumoj",
"notifications.filter.follows": "Sekvoj", "notifications.filter.follows": "Sekvoj",
"notifications.filter.mentions": "Mencioj", "notifications.filter.mentions": "Mencioj",
"notifications.filter.polls": "Balotenketoj rezultoj", "notifications.filter.polls": "Balotenketaj rezultoj",
"notifications.group": "{count} sciigoj", "notifications.group": "{count} sciigoj",
"poll.closed": "Finita", "poll.closed": "Finita",
"poll.refresh": "Aktualigi", "poll.refresh": "Aktualigi",
@ -316,7 +319,7 @@
"search_results.accounts": "Homoj", "search_results.accounts": "Homoj",
"search_results.hashtags": "Kradvortoj", "search_results.hashtags": "Kradvortoj",
"search_results.statuses": "Mesaĝoj", "search_results.statuses": "Mesaĝoj",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "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}}", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}",
"status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}",
"status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",
@ -364,20 +367,28 @@
"tabs_bar.local_timeline": "Loka tempolinio", "tabs_bar.local_timeline": "Loka tempolinio",
"tabs_bar.notifications": "Sciigoj", "tabs_bar.notifications": "Sciigoj",
"tabs_bar.search": "Serĉi", "tabs_bar.search": "Serĉi",
"time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restanta", "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas",
"time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restanta", "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restas",
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restanta", "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas",
"time_remaining.moments": "Momento restanta", "time_remaining.moments": "Momenteto restas",
"time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restanta", "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persono} other {personoj}} parolas", "trends.count_by_accounts": "{count} {rawCount, plural, one {persono} other {personoj}} parolas",
"trends.refresh": "Refresh",
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
"upload_area.title": "Altreni kaj lasi por alŝuti", "upload_area.title": "Altreni kaj lasi por alŝuti",
"upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limo de dosiera alŝutado transpasita.", "upload_error.limit": "Limo de dosiera alŝutado transpasita.",
"upload_error.poll": "Alŝuto de dosiero ne permisita kun balotenketo", "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.",
"upload_form.description": "Priskribi por misvidantaj homoj", "upload_form.description": "Priskribi por misvidantaj homoj",
"upload_form.focus": "Antaŭvido de ŝanĝo", "upload_form.edit": "Edit",
"upload_form.undo": "Forigi", "upload_form.undo": "Forigi",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Alŝutado…", "upload_progress.label": "Alŝutado…",
"video.close": "Fermi videon", "video.close": "Fermi videon",
"video.exit_fullscreen": "Eksigi plenekrana", "video.exit_fullscreen": "Eksigi plenekrana",

View file

@ -1,21 +1,22 @@
{ {
"account.add_or_remove_from_list": "Agregar o eliminar de las listas", "account.add_or_remove_from_list": "Agregar o eliminar de listas",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.block": "Bloquear", "account.block": "Bloquear a @{name}",
"account.block_domain": "Ocultar todo de {domain}", "account.block_domain": "Ocultar todo de {domain}",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
"account.direct": "Direct Message @{name}", "account.cancel_follow_request": "Cancel follow request",
"account.direct": "Mensaje directo a @{name}",
"account.domain_blocked": "Dominio oculto", "account.domain_blocked": "Dominio oculto",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.endorse": "Mostrar en perfil", "account.endorse": "Mostrar en perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidores", "account.followers": "Seguidores",
"account.followers.empty": "Nadie sigue a este usuario todavía.", "account.followers.empty": "Todavía nadie sigue a este usuario.",
"account.follows": "Sigue", "account.follows": "Sigue",
"account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.follows.empty": "Este usuario todavía no sigue a nadie.",
"account.follows_you": "Te sigue", "account.follows_you": "Te sigue",
"account.hide_reblogs": "Ocultar retoots de @{name}", "account.hide_reblogs": "Ocultar retoots de @{name}",
"account.link_verified_on": "El proprietario de este link fue verificado el {date}", "account.link_verified_on": "El proprietario de este link fue comprobado el {date}",
"account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
"account.media": "Multimedia", "account.media": "Multimedia",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
@ -37,7 +38,8 @@
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
"alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Ups!",
"boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez", "autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.body": "Algo salió mal al cargar este componente.",
"bundle_column_error.retry": "Inténtalo de nuevo", "bundle_column_error.retry": "Inténtalo de nuevo",
"bundle_column_error.title": "Error de red", "bundle_column_error.title": "Error de red",
@ -47,17 +49,17 @@
"column.blocks": "Usuarios bloqueados", "column.blocks": "Usuarios bloqueados",
"column.community": "Línea de tiempo local", "column.community": "Línea de tiempo local",
"column.direct": "Mensajes directos", "column.direct": "Mensajes directos",
"column.domain_blocks": "Dominios ocultos", "column.domain_blocks": "Dominios ocultados",
"column.favourites": "Favoritos", "column.favourites": "Favoritos",
"column.follow_requests": "Solicitudes de seguimiento", "column.follow_requests": "Solicitudes de seguimiento",
"column.home": "Inicio", "column.home": "Inicio",
"column.lists": "Listas", "column.lists": "Listas",
"column.mutes": "Usuarios silenciados", "column.mutes": "Usuarios silenciados",
"column.notifications": "Notificaciones", "column.notifications": "Notificaciones",
"column.pins": "Toot fijado", "column.pins": "Toots fijados",
"column.public": "Historia federada", "column.public": "Línea de tiempo federada",
"column_back_button.label": "Atrás", "column_back_button.label": "Atrás",
"column_header.hide_settings": "Ocultar ajustes", "column_header.hide_settings": "Ocultar configuración",
"column_header.moveLeft_settings": "Mover columna a la izquierda", "column_header.moveLeft_settings": "Mover columna a la izquierda",
"column_header.moveRight_settings": "Mover columna a la derecha", "column_header.moveRight_settings": "Mover columna a la derecha",
"column_header.pin": "Fijar", "column_header.pin": "Fijar",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Básico", "home.column_settings.basic": "Básico",
"home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_reblogs": "Mostrar retoots",
"home.column_settings.show_replies": "Mostrar respuestas", "home.column_settings.show_replies": "Mostrar respuestas",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Actualizar en tiempo real",
"intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.days": "{number, plural, one {# día} other {# días}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Título de la nueva lista", "lists.new.title_placeholder": "Título de la nueva lista",
"lists.search": "Buscar entre la gente a la que sigues", "lists.search": "Buscar entre la gente a la que sigues",
"lists.subheading": "Tus listas", "lists.subheading": "Tus listas",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
"loading_indicator.label": "Cargando…", "loading_indicator.label": "Cargando…",
"media_gallery.toggle_visible": "Cambiar visibilidad", "media_gallery.toggle_visible": "Cambiar visibilidad",
"missing_indicator.label": "No encontrado", "missing_indicator.label": "No encontrado",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Directorio de perfiles", "navigation_bar.profile_directory": "Directorio de perfiles",
"navigation_bar.public_timeline": "Historia federada", "navigation_bar.public_timeline": "Historia federada",
"navigation_bar.security": "Seguridad", "navigation_bar.security": "Seguridad",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} marcó tu estado como favorito", "notification.favourite": "{name} marcó tu estado como favorito",
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.mention": "{name} te ha mencionado", "notification.mention": "{name} te ha mencionado",
@ -316,7 +319,7 @@
"search_results.accounts": "Gente", "search_results.accounts": "Gente",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.",
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
"status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_account": "Abrir interfaz de moderación para @{name}",
"status.admin_status": "Abrir este estado en la interfaz de moderación", "status.admin_status": "Abrir este estado en la interfaz de moderación",
@ -370,14 +373,22 @@
"time_remaining.moments": "Momentos restantes", "time_remaining.moments": "Momentos restantes",
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando", "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando",
"trends.refresh": "Refresh",
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
"upload_area.title": "Arrastra y suelta para subir", "upload_area.title": "Arrastra y suelta para subir",
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Límite de subida de archivos excedido.", "upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_error.poll": "Subida de archivos no permitida con encuestas.",
"upload_form.description": "Describir para los usuarios con dificultad visual", "upload_form.description": "Describir para los usuarios con dificultad visual",
"upload_form.focus": "Recortar", "upload_form.edit": "Edit",
"upload_form.undo": "Borrar", "upload_form.undo": "Borrar",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Subiendo…", "upload_progress.label": "Subiendo…",
"video.close": "Cerrar video", "video.close": "Cerrar video",
"video.exit_fullscreen": "Salir de pantalla completa", "video.exit_fullscreen": "Salir de pantalla completa",

View file

@ -0,0 +1,402 @@
{
"account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest",
"account.badges.bot": "Robot",
"account.block": "Blokeeri @{name}",
"account.block_domain": "Peida kõik domeenist {domain}",
"account.blocked": "Blokeeritud",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Otsesõnum @{name}",
"account.domain_blocked": "Domeen peidetud",
"account.edit_profile": "Muuda profiili",
"account.endorse": "Too profiilil esile",
"account.follow": "Jälgi",
"account.followers": "Jälgijad",
"account.followers.empty": "Keegi ei jälgi seda kasutajat veel.",
"account.follows": "Jälgib",
"account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
"account.follows_you": "Jälgib sind",
"account.hide_reblogs": "Peida upitused kasutajalt @{name}",
"account.link_verified_on": "Selle lingi autorsust kontrolliti {date}",
"account.locked_info": "Selle konto privaatsus on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.",
"account.media": "Meedia",
"account.mention": "Maini @{name}",
"account.moved_to": "{name} on kolinud:",
"account.mute": "Vaigista @{name}",
"account.mute_notifications": "Vaigista teated kasutajalt @{name}",
"account.muted": "Vaigistatud",
"account.posts": "Tuututused",
"account.posts_with_replies": "Tuututused ja vastused",
"account.report": "Raporteeri @{name}",
"account.requested": "Ootab kinnitust. Klõpsa jälgimise soovi tühistamiseks",
"account.share": "Jaga @{name} profiili",
"account.show_reblogs": "Näita kasutaja @{name} upitusi",
"account.unblock": "Eemalda blokeering @{name}",
"account.unblock_domain": "Tee {domain} nähtavaks",
"account.unendorse": "Ära kuva profiilil",
"account.unfollow": "Ära jälgi",
"account.unmute": "Ära vaigista @{name}",
"account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}",
"alert.unexpected.message": "Tekkis ootamatu viga.",
"alert.unexpected.title": "Oih!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Saad vajutada {combo}, et see järgmine kord vahele jätta",
"bundle_column_error.body": "Mindagi läks valesti selle komponendi laadimisel.",
"bundle_column_error.retry": "Proovi uuesti",
"bundle_column_error.title": "Võrgu viga",
"bundle_modal_error.close": "Sulge",
"bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.",
"bundle_modal_error.retry": "Proovi uuesti",
"column.blocks": "Blokeeritud kasutajad",
"column.community": "Kohalik ajajoon",
"column.direct": "Otsesõnumid",
"column.domain_blocks": "Peidetud domeenid",
"column.favourites": "Lemmikud",
"column.follow_requests": "Jälgimistaotlused",
"column.home": "Kodu",
"column.lists": "Nimekirjad",
"column.mutes": "Vaigistatud kasutajad",
"column.notifications": "Teated",
"column.pins": "Kinnitatud upitused",
"column.public": "Föderatiivne ajajoon",
"column_back_button.label": "Tagasi",
"column_header.hide_settings": "Peida sätted",
"column_header.moveLeft_settings": "Liiguta tulp vasakule",
"column_header.moveRight_settings": "Liiguta tulp paremale",
"column_header.pin": "Kinnita",
"column_header.show_settings": "Näita sätteid",
"column_header.unpin": "Eemalda kinnitus",
"column_subheading.settings": "Sätted",
"community.column_settings.media_only": "Ainult meedia",
"compose_form.direct_message_warning": "See tuut saadetakse ainult mainitud kasutajatele.",
"compose_form.direct_message_warning_learn_more": "Vaata veel",
"compose_form.hashtag_warning": "Seda tuuti ei kuvata ühegi sildi all, sest see on kirjendamata. Ainult avalikud tuutid on sildi järgi otsitavad.",
"compose_form.lock_disclaimer": "Sinu konto ei ole {locked}. Igaüks saab sind jälgida ja näha su ainult-jälgijatele postitusi.",
"compose_form.lock_disclaimer.lock": "lukus",
"compose_form.placeholder": "Millest mõtled?",
"compose_form.poll.add_option": "Lisa valik",
"compose_form.poll.duration": "Küsitluse kestus",
"compose_form.poll.option_placeholder": "Valik {number}",
"compose_form.poll.remove_option": "Eemalda see valik",
"compose_form.publish": "Tuut",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Märgista meedia tundlikuks",
"compose_form.sensitive.marked": "Meedia on sensitiivseks märgitud",
"compose_form.sensitive.unmarked": "Meedia ei ole sensitiivseks märgitud",
"compose_form.spoiler.marked": "Tekst on hoiatuse taha peidetud",
"compose_form.spoiler.unmarked": "Tekst ei ole peidetud",
"compose_form.spoiler_placeholder": "Kirjuta oma hoiatus siia",
"confirmation_modal.cancel": "Katkesta",
"confirmations.block.block_and_report": "Blokeeri & Teata",
"confirmations.block.confirm": "Blokeeri",
"confirmations.block.message": "Oled kindel, et soovid blokkida {name}?",
"confirmations.delete.confirm": "Kustuta",
"confirmations.delete.message": "Oled kindel, et soovid selle staatuse kustutada?",
"confirmations.delete_list.confirm": "Kustuta",
"confirmations.delete_list.message": "Oled kindel, et soovid selle nimekirja püsivalt kustutada?",
"confirmations.domain_block.confirm": "Peida terve domeen",
"confirmations.domain_block.message": "Oled ikka päris kindel, et soovid blokeerida terve {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Sa ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Sinu jälgijad sellest domeenist eemaldatakse.",
"confirmations.mute.confirm": "Vaigista",
"confirmations.mute.message": "Oled kindel, et soovid {name} vaigistada?",
"confirmations.redraft.confirm": "Kustuta & taasalusta",
"confirmations.redraft.message": "Oled kindel, et soovid selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.",
"confirmations.reply.confirm": "Vasta",
"confirmations.reply.message": "Kohene vastamine kirjutab üle sõnumi, mida hetkel koostad. Oled kindel, et soovid jätkata?",
"confirmations.unfollow.confirm": "Ära jälgi",
"confirmations.unfollow.message": "Oled kindel, et ei soovi jälgida {name}?",
"embed.instructions": "Manusta see staatus oma veebilehele, kopeerides alloleva koodi.",
"embed.preview": "Nii näeb see välja:",
"emoji_button.activity": "Tegevus",
"emoji_button.custom": "Mugandatud",
"emoji_button.flags": "Lipud",
"emoji_button.food": "Toit & Jook",
"emoji_button.label": "Sisesta emoji",
"emoji_button.nature": "Loodus",
"emoji_button.not_found": "Ei ole emojosi!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objektid",
"emoji_button.people": "Inimesed",
"emoji_button.recent": "Tihti kasutatud",
"emoji_button.search": "Otsi...",
"emoji_button.search_results": "Otsitulemused",
"emoji_button.symbols": "Sümbolid",
"emoji_button.travel": "Reisimine & Kohad",
"empty_column.account_timeline": "Siin tuute ei ole!",
"empty_column.account_unavailable": "Profiil pole saadaval",
"empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.",
"empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema saada!",
"empty_column.direct": "Sul ei veel otsesõnumeid. Kui saadad või võtad mõne vastu, ilmuvad nad siia.",
"empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
"empty_column.favourited_statuses": "Sul pole veel lemmikuid tuute. Kui märgid mõne, näed neid siin.",
"empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.",
"empty_column.follow_requests": "Sul pole veel ühtegi jälgimise taotlust. Kui saad mõne, näed seda siin.",
"empty_column.hashtag": "Selle sildiga pole veel midagi.",
"empty_column.home": "Sinu kodu ajajoon on tühi! Külasta {public} või kasuta otsingut alustamaks ja kohtamaks teisi kasutajaid.",
"empty_column.home.public_timeline": "avalik ajajoon",
"empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.",
"empty_column.lists": "Sul ei ole veel ühtegi nimekirja. Kui lood mõne, näed seda siin.",
"empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.",
"empty_column.notifications": "Sul ei ole veel teateid. Suhtle teistega alustamaks vestlust.",
"empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
"follow_request.authorize": "Autoriseeri",
"follow_request.reject": "Hülga",
"getting_started.developers": "Arendajad",
"getting_started.directory": "Profiili kataloog",
"getting_started.documentation": "Dokumentatsioon",
"getting_started.heading": "Alustamine",
"getting_started.invite": "Kutsu inimesi",
"getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saad panustada või teatada probleemidest GitHubis {github}.",
"getting_started.security": "Turvalisus",
"getting_started.terms": "Kasutustingimused",
"hashtag.column_header.tag_mode.all": "ja {additional}",
"hashtag.column_header.tag_mode.any": "või {additional}",
"hashtag.column_header.tag_mode.none": "ilma {additional}",
"hashtag.column_settings.select.no_options_message": "Soovitusi ei leitud",
"hashtag.column_settings.select.placeholder": "Sisesta sildid…",
"hashtag.column_settings.tag_mode.all": "Kõik need",
"hashtag.column_settings.tag_mode.any": "Mõni neist",
"hashtag.column_settings.tag_mode.none": "Mitte ükski neist",
"hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks",
"home.column_settings.basic": "Peamine",
"home.column_settings.show_reblogs": "Näita upitusi",
"home.column_settings.show_replies": "Näita vastuseid",
"home.column_settings.update_live": "Uuenda reaalajas",
"intervals.full.days": "{number, plural, one {# päev} other {# päevad}}",
"intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}",
"introduction.federation.action": "Järgmine",
"introduction.federation.federated.headline": "Föderatiivne",
"introduction.federation.federated.text": "Avalikud postitused teistest föderatsiooni serveritest kuvatakse föderatiivsel ajajoonel.",
"introduction.federation.home.headline": "Kodu",
"introduction.federation.home.text": "Inimest postitused keda jälgid kuvatakse sinu koduajajoonel. Saad jälgida igaüht igas serveris!",
"introduction.federation.local.headline": "Kohalik",
"introduction.federation.local.text": "Samas serveris olevate inimeste postitused kuvatakse kohalikul ajajoonel.",
"introduction.interactions.action": "Välju õpetusest!",
"introduction.interactions.favourite.headline": "Lemmik",
"introduction.interactions.favourite.text": "Saad tuuti salvestada ja anda autorile teada, et meeldis märkides selle lemmikuks.",
"introduction.interactions.reblog.headline": "Upita",
"introduction.interactions.reblog.text": "Saad jagada teiste inimeste tuute oma jälgijatega upitades neid.",
"introduction.interactions.reply.headline": "Vasta",
"introduction.interactions.reply.text": "Saad vastata teiste ja enda tuutidele, mis ühendab nad kokku aruteluks.",
"introduction.welcome.action": "Lähme!",
"introduction.welcome.headline": "Esimesed sammud",
"introduction.welcome.text": "Teretulemast fediversumisse! Mõne aja pärast saad avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—ta majutab sinu profiili. Seega jäta ta nimi meelde.",
"keyboard_shortcuts.back": "tagasiminekuks",
"keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut",
"keyboard_shortcuts.boost": "upitamiseks",
"keyboard_shortcuts.column": "fokuseerimaks staatust ühele tulpadest",
"keyboard_shortcuts.compose": "fokuseerimaks tekstikoostamise alale",
"keyboard_shortcuts.description": "Kirjeldus",
"keyboard_shortcuts.direct": "avamaks otsesõnumite tulpa",
"keyboard_shortcuts.down": "liikumaks nimstus alla",
"keyboard_shortcuts.enter": "staatuse avamiseks",
"keyboard_shortcuts.favourite": "lemmikuks märkimiseks",
"keyboard_shortcuts.favourites": "avamaks lemmikute nimistut",
"keyboard_shortcuts.federated": "avamaks föderatsiooni ajajoont",
"keyboard_shortcuts.heading": "Klaviatuuri kiirkäsud",
"keyboard_shortcuts.home": "avamaks kodu ajajoont",
"keyboard_shortcuts.hotkey": "Kiirklahv",
"keyboard_shortcuts.legend": "selle legendi kuvamiseks",
"keyboard_shortcuts.local": "avamaks kohalikku ajajoont",
"keyboard_shortcuts.mention": "autori mainimiseks",
"keyboard_shortcuts.muted": "avamaks vaigistatud kasutajate nimistut",
"keyboard_shortcuts.my_profile": "avamaks profiili",
"keyboard_shortcuts.notifications": "avamaks teadete tulpa",
"keyboard_shortcuts.pinned": "avamaks kinnitatud tuutide nimistut",
"keyboard_shortcuts.profile": "avamaks autori profiili",
"keyboard_shortcuts.reply": "vastamiseks",
"keyboard_shortcuts.requests": "avamaks jälgimistaotluste nimistut",
"keyboard_shortcuts.search": "otsingu fokuseerimiseks",
"keyboard_shortcuts.start": "avamaks \"Alusta\" tulpa",
"keyboard_shortcuts.toggle_hidden": "näitamaks/peitmaks teksti CW taga",
"keyboard_shortcuts.toggle_sensitivity": "et peita/näidata meediat",
"keyboard_shortcuts.toot": "alustamaks täiesti uut tuuti",
"keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks",
"keyboard_shortcuts.up": "liikumaks nimistus üles",
"lightbox.close": "Sulge",
"lightbox.next": "Järgmine",
"lightbox.previous": "Eelmine",
"lightbox.view_context": "Vaata konteksti",
"lists.account.add": "Lisa nimistusse",
"lists.account.remove": "Eemalda nimistust",
"lists.delete": "Kustuta nimistu",
"lists.edit": "Muuda nimistut",
"lists.edit.submit": "Muuda pealkiri",
"lists.new.create": "Lisa nimistu",
"lists.new.title_placeholder": "Uus nimistu pealkiri",
"lists.search": "Otsi sinu poolt jälgitavate inimese hulgast",
"lists.subheading": "Sinu nimistud",
"load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
"loading_indicator.label": "Laeb..",
"media_gallery.toggle_visible": "Lülita nähtavus",
"missing_indicator.label": "Ei leitud",
"missing_indicator.sublabel": "Seda ressurssi ei leitud",
"mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
"navigation_bar.apps": "Mobiilrakendused",
"navigation_bar.blocks": "Blokeeritud kasutajad",
"navigation_bar.community_timeline": "Kohalik ajajoon",
"navigation_bar.compose": "Koosta uus tuut",
"navigation_bar.direct": "Otsesõnumid",
"navigation_bar.discover": "Avasta",
"navigation_bar.domain_blocks": "Peidetud domeenid",
"navigation_bar.edit_profile": "Muuda profiili",
"navigation_bar.favourites": "Lemmikud",
"navigation_bar.filters": "Vaigistatud sõnad",
"navigation_bar.follow_requests": "Jälgimistaotlused",
"navigation_bar.follows_and_followers": "Jälgitud ja jälgijad",
"navigation_bar.info": "Selle serveri kohta",
"navigation_bar.keyboard_shortcuts": "Kiirklahvid",
"navigation_bar.lists": "Nimistud",
"navigation_bar.logout": "Logi välja",
"navigation_bar.mutes": "Vaigistatud kasutajad",
"navigation_bar.personal": "Isiklik",
"navigation_bar.pins": "Kinnitatud tuutid",
"navigation_bar.preferences": "Eelistused",
"navigation_bar.profile_directory": "Profiilikataloog",
"navigation_bar.public_timeline": "Föderatiivne ajajoon",
"navigation_bar.security": "Turvalisus",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} märkis su staatuse lemmikuks",
"notification.follow": "{name} jälgib sind",
"notification.mention": "{name} mainis sind",
"notification.poll": "Küsitlus, milles osalesid, on lõppenud",
"notification.reblog": "{name} upitas su staatust",
"notifications.clear": "Puhasta teated",
"notifications.clear_confirmation": "Oled kindel, et soovid püsivalt kõik oma teated puhastada?",
"notifications.column_settings.alert": "Töölauateated",
"notifications.column_settings.favourite": "Lemmikud:",
"notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad",
"notifications.column_settings.filter_bar.category": "Kiirfiltri riba",
"notifications.column_settings.filter_bar.show": "Kuva",
"notifications.column_settings.follow": "Uued jälgijad:",
"notifications.column_settings.mention": "Mainimised:",
"notifications.column_settings.poll": "Küsitluse tulemused:",
"notifications.column_settings.push": "Push teated",
"notifications.column_settings.reblog": "Upitused:",
"notifications.column_settings.show": "Kuva tulbas",
"notifications.column_settings.sound": "Mängi heli",
"notifications.filter.all": "Kõik",
"notifications.filter.boosts": "Upitused",
"notifications.filter.favourites": "Lemmikud",
"notifications.filter.follows": "Jälgib",
"notifications.filter.mentions": "Mainimised",
"notifications.filter.polls": "Küsitluse tulemused",
"notifications.group": "{count} teated",
"poll.closed": "Suletud",
"poll.refresh": "Värskenda",
"poll.total_votes": "{count, plural, one {# hääl} other {# hääli}}",
"poll.vote": "Hääleta",
"poll_button.add_poll": "Lisa küsitlus",
"poll_button.remove_poll": "Eemalda küsitlus",
"privacy.change": "Muuda staatuse privaatsust",
"privacy.direct.long": "Postita ainult mainitud kasutajatele",
"privacy.direct.short": "Otsene",
"privacy.private.long": "Postita ainult jälgijatele",
"privacy.private.short": "Ainult jälgijatele",
"privacy.public.long": "Postita avalikele ajajoontele",
"privacy.public.short": "Avalik",
"privacy.unlisted.long": "Ära postita avalikele ajajoontele",
"privacy.unlisted.short": "Määramata",
"regeneration_indicator.label": "Laeb…",
"regeneration_indicator.sublabel": "Sinu kodu voog on ettevalmistamisel!",
"relative_time.days": "{number}p",
"relative_time.hours": "{number}t",
"relative_time.just_now": "nüüd",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Tühista",
"report.forward": "Edasta kasutajale {target}",
"report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?",
"report.hint": "See teade saadetakse sinu serveri moderaatoritele. Te saate lisada selgituse selle kohta, miks selle kasutaja kohta teate esitasite, siin:",
"report.placeholder": "Lisaks kommentaarid",
"report.submit": "Saada",
"report.target": "Teatamine {target} kohta",
"search.placeholder": "Otsi",
"search_popout.search_format": "Täiustatud otsiformaat",
"search_popout.tips.full_text": "Lihtne tekst toob esile staatused mida olete kirjutanud, lisanud lemmikuks, upitanud või olete seal mainitud, ning lisaks veel kattuvad kasutajanimed, kuvanimed ja sildid.",
"search_popout.tips.hashtag": "silt",
"search_popout.tips.status": "staatus",
"search_popout.tips.text": "Lihtne tekst toob esile kattuvad kuvanimed, kasutajanimed ning sildid",
"search_popout.tips.user": "kasutaja",
"search_results.accounts": "Inimesed",
"search_results.hashtags": "Sildid",
"search_results.statuses": "Tuudid",
"search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.",
"search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}",
"status.admin_account": "Ava moderaatoriliides kasutajale @{name}",
"status.admin_status": "Ava see staatus moderaatoriliites",
"status.block": "Blokeeri @{name}",
"status.cancel_reblog_private": "Äraupita",
"status.cannot_reblog": "Seda postitust ei saa upitada",
"status.copy": "Kopeeri link staatusesse",
"status.delete": "Kustuta",
"status.detailed_status": "Detailne vestluskuva",
"status.direct": "Otsesõnum @{name}",
"status.embed": "Sängita",
"status.favourite": "Lemmik",
"status.filtered": "Filtreeritud",
"status.load_more": "Lae veel",
"status.media_hidden": "Meedia peidetud",
"status.mention": "Mainimine @{name}",
"status.more": "Veel",
"status.mute": "Vaigista @{name}",
"status.mute_conversation": "Vaigista vestlus",
"status.open": "Laienda see staatus",
"status.pin": "Kinnita profiilile",
"status.pinned": "Kinnitatud tuut",
"status.read_more": "Loe veel",
"status.reblog": "Upita",
"status.reblog_private": "Upita algsele publikule",
"status.reblogged_by": "{name} upitatud",
"status.reblogs.empty": "Keegi pole seda tuuti veel upitanud. Kui keegi upitab, näed seda siin.",
"status.redraft": "Kustuta & alga uuesti",
"status.reply": "Vasta",
"status.replyAll": "Vasta lõimele",
"status.report": "Raport @{name}",
"status.sensitive_warning": "Tundlik sisu",
"status.share": "Jaga",
"status.show_less": "Näita vähem",
"status.show_less_all": "Näita vähem kõigile",
"status.show_more": "Näita veel",
"status.show_more_all": "Näita enam kõigile",
"status.show_thread": "Kuva lõim",
"status.unmute_conversation": "Ära vaigista vestlust",
"status.unpin": "Kinnita profiililt lahti",
"suggestions.dismiss": "Eira soovitust",
"suggestions.header": "Sind võib huvitada…",
"tabs_bar.federated_timeline": "Föderatiivne",
"tabs_bar.home": "Kodu",
"tabs_bar.local_timeline": "Kohalik",
"tabs_bar.notifications": "Teated",
"tabs_bar.search": "Otsi",
"time_remaining.days": "{number, plural, one {# päev} other {# päeva}} left",
"time_remaining.hours": "{number, plural, one {# tund} other {# tundi}} left",
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} left",
"time_remaining.moments": "Hetked jäänud",
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {inimene} other {inimesed}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Sinu mustand läheb kaotsi, kui lahkud Mastodonist.",
"upload_area.title": "Lohista & aseta üleslaadimiseks",
"upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Faili üleslaadimise limiit ületatud.",
"upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.",
"upload_form.description": "Kirjelda vaegnägijatele",
"upload_form.edit": "Edit",
"upload_form.undo": "Kustuta",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Laeb üles....",
"video.close": "Sulge video",
"video.exit_fullscreen": "Välju täisekraanist",
"video.expand": "Suurenda video",
"video.fullscreen": "Täisekraan",
"video.hide": "Peida video",
"video.mute": "Vaigista heli",
"video.pause": "Paus",
"video.play": "Mängi",
"video.unmute": "Taasta heli"
}

View file

@ -4,6 +4,7 @@
"account.block": "Blokeatu @{name}", "account.block": "Blokeatu @{name}",
"account.block_domain": "Ezkutatu {domain} domeinuko guztia", "account.block_domain": "Ezkutatu {domain} domeinuko guztia",
"account.blocked": "Blokeatuta", "account.blocked": "Blokeatuta",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Mezu zuzena @{name}(r)i", "account.direct": "Mezu zuzena @{name}(r)i",
"account.domain_blocked": "Ezkutatutako domeinua", "account.domain_blocked": "Ezkutatutako domeinua",
"account.edit_profile": "Aldatu profila", "account.edit_profile": "Aldatu profila",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak", "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
"alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
"alert.unexpected.title": "Ene!", "alert.unexpected.title": "Ene!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko",
"bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.", "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.",
"bundle_column_error.retry": "Saiatu berriro", "bundle_column_error.retry": "Saiatu berriro",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Oinarrizkoa", "home.column_settings.basic": "Oinarrizkoa",
"home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_reblogs": "Erakutsi bultzadak",
"home.column_settings.show_replies": "Erakutsi erantzunak", "home.column_settings.show_replies": "Erakutsi erantzunak",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Eguneratu denbora errealean",
"intervals.full.days": "{number, plural, one {egun #} other {# egun}}", "intervals.full.days": "{number, plural, one {egun #} other {# egun}}",
"intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}", "intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}",
"intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}", "intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Zerrenda berriaren izena", "lists.new.title_placeholder": "Zerrenda berriaren izena",
"lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
"lists.subheading": "Zure zerrendak", "lists.subheading": "Zure zerrendak",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}",
"loading_indicator.label": "Kargatzen...", "loading_indicator.label": "Kargatzen...",
"media_gallery.toggle_visible": "Txandakatu ikusgaitasuna", "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna",
"missing_indicator.label": "Ez aurkitua", "missing_indicator.label": "Ez aurkitua",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profilen direktorioa", "navigation_bar.profile_directory": "Profilen direktorioa",
"navigation_bar.public_timeline": "Federatutako denbora-lerroa", "navigation_bar.public_timeline": "Federatutako denbora-lerroa",
"navigation_bar.security": "Segurtasuna", "navigation_bar.security": "Segurtasuna",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name}(e)k zure mezua gogoko du", "notification.favourite": "{name}(e)k zure mezua gogoko du",
"notification.follow": "{name}(e)k jarraitzen zaitu", "notification.follow": "{name}(e)k jarraitzen zaitu",
"notification.mention": "{name}(e)k aipatu zaitu", "notification.mention": "{name}(e)k aipatu zaitu",
@ -316,7 +319,7 @@
"search_results.accounts": "Jendea", "search_results.accounts": "Jendea",
"search_results.hashtags": "Traolak", "search_results.hashtags": "Traolak",
"search_results.statuses": "Toot-ak", "search_results.statuses": "Toot-ak",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du Toot-en edukiaren bilaketa gaitu.",
"search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitzak}}", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitzak}}",
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
"status.admin_status": "Ireki mezu hau moderazio interfazean", "status.admin_status": "Ireki mezu hau moderazio interfazean",
@ -370,14 +373,22 @@
"time_remaining.moments": "Amaitzekotan", "time_remaining.moments": "Amaitzekotan",
"time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko", "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten",
"trends.refresh": "Refresh",
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.", "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
"upload_area.title": "Arrastatu eta jaregin igotzeko", "upload_area.title": "Arrastatu eta jaregin igotzeko",
"upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Fitxategi igoera muga gaindituta.", "upload_error.limit": "Fitxategi igoera muga gaindituta.",
"upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.", "upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.",
"upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat", "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
"upload_form.focus": "Aldatu aurrebista", "upload_form.edit": "Edit",
"upload_form.undo": "Ezabatu", "upload_form.undo": "Ezabatu",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Igotzen...", "upload_progress.label": "Igotzen...",
"video.close": "Itxi bideoa", "video.close": "Itxi bideoa",
"video.exit_fullscreen": "Irten pantaila osotik", "video.exit_fullscreen": "Irten pantaila osotik",

View file

@ -1,9 +1,10 @@
{ {
"account.add_or_remove_from_list": "افزودن یا حذف از فهرست‌ها", "account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست",
"account.badges.bot": "ربات", "account.badges.bot": "ربات",
"account.block": "مسدودسازی @{name}", "account.block": "مسدودسازی @{name}",
"account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}", "account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}",
"account.blocked": "مسدودشده", "account.blocked": "مسدودشده",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "پیغام خصوصی به @{name}", "account.direct": "پیغام خصوصی به @{name}",
"account.domain_blocked": "دامین پنهان‌شده", "account.domain_blocked": "دامین پنهان‌شده",
"account.edit_profile": "ویرایش نمایه", "account.edit_profile": "ویرایش نمایه",
@ -37,6 +38,7 @@
"account.unmute_notifications": "باصداکردن اعلان‌ها از طرف @{name}", "account.unmute_notifications": "باصداکردن اعلان‌ها از طرف @{name}",
"alert.unexpected.message": "خطای پیش‌بینی‌نشده‌ای رخ داد.", "alert.unexpected.message": "خطای پیش‌بینی‌نشده‌ای رخ داد.",
"alert.unexpected.title": "ای وای!", "alert.unexpected.title": "ای وای!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
"bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.", "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
"bundle_column_error.retry": "تلاش دوباره", "bundle_column_error.retry": "تلاش دوباره",
@ -156,7 +158,7 @@
"home.column_settings.basic": "اصلی", "home.column_settings.basic": "اصلی",
"home.column_settings.show_reblogs": "نمایش بازبوق‌ها", "home.column_settings.show_reblogs": "نمایش بازبوق‌ها",
"home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "به‌روزرسانی لحظه‌ای",
"intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}",
"intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
"intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}", "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "نام فهرست تازه", "lists.new.title_placeholder": "نام فهرست تازه",
"lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.search": "بین کسانی که پی می‌گیرید بگردید",
"lists.subheading": "فهرست‌های شما", "lists.subheading": "فهرست‌های شما",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}",
"loading_indicator.label": "بارگیری...", "loading_indicator.label": "بارگیری...",
"media_gallery.toggle_visible": "تغییر پیدایی", "media_gallery.toggle_visible": "تغییر پیدایی",
"missing_indicator.label": "پیدا نشد", "missing_indicator.label": "پیدا نشد",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران", "navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران",
"navigation_bar.public_timeline": "نوشته‌های همه‌جا", "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
"navigation_bar.security": "امنیت", "navigation_bar.security": "امنیت",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} نوشتهٔ شما را پسندید", "notification.favourite": "{name} نوشتهٔ شما را پسندید",
"notification.follow": "{name} پیگیر شما شد", "notification.follow": "{name} پیگیر شما شد",
"notification.mention": "{name} از شما نام برد", "notification.mention": "{name} از شما نام برد",
@ -316,7 +319,7 @@
"search_results.accounts": "افراد", "search_results.accounts": "افراد",
"search_results.hashtags": "هشتگ‌ها", "search_results.hashtags": "هشتگ‌ها",
"search_results.statuses": "بوق‌ها", "search_results.statuses": "بوق‌ها",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این سرور ماستدون ممکن نیست.",
"search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
"status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن", "status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن",
"status.admin_status": "این نوشته را در محیط مدیریت باز کن", "status.admin_status": "این نوشته را در محیط مدیریت باز کن",
@ -370,14 +373,22 @@
"time_remaining.moments": "زمان باقی‌مانده", "time_remaining.moments": "زمان باقی‌مانده",
"time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده", "time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
"trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشته‌اند}}",
"trends.refresh": "Refresh",
"ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.", "ui.beforeunload": "اگر از ماستدون خارج شوید پیش‌نویس شما پاک خواهد شد.",
"upload_area.title": "برای بارگذاری به این‌جا بکشید", "upload_area.title": "برای بارگذاری به این‌جا بکشید",
"upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.", "upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.",
"upload_error.poll": "باگذاری پرونده در نظرسنجی‌ها ممکن نیست.", "upload_error.poll": "باگذاری پرونده در نظرسنجی‌ها ممکن نیست.",
"upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان", "upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان",
"upload_form.focus": "تغییر پیش‌نمایش", "upload_form.edit": "Edit",
"upload_form.undo": "حذف", "upload_form.undo": "حذف",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "بارگذاری...", "upload_progress.label": "بارگذاری...",
"video.close": "بستن ویدیو", "video.close": "بستن ویدیو",
"video.exit_fullscreen": "خروج از حالت تمام صفحه", "video.exit_fullscreen": "خروج از حالت تمام صفحه",

View file

@ -4,6 +4,7 @@
"account.block": "Estä @{name}", "account.block": "Estä @{name}",
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}", "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
"account.blocked": "Estetty", "account.blocked": "Estetty",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Viesti käyttäjälle @{name}", "account.direct": "Viesti käyttäjälle @{name}",
"account.domain_blocked": "Verkko-osoite piilotettu", "account.domain_blocked": "Verkko-osoite piilotettu",
"account.edit_profile": "Muokkaa", "account.edit_profile": "Muokkaa",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta",
"alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.message": "Tapahtui odottamaton virhe.",
"alert.unexpected.title": "Hups!", "alert.unexpected.title": "Hups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
"bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.",
"bundle_column_error.retry": "Yritä uudestaan", "bundle_column_error.retry": "Yritä uudestaan",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.public_timeline": "Yleinen aikajana",
"navigation_bar.security": "Tunnukset", "navigation_bar.security": "Tunnukset",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} tykkäsi tilastasi", "notification.favourite": "{name} tykkäsi tilastasi",
"notification.follow": "{name} seurasi sinua", "notification.follow": "{name} seurasi sinua",
"notification.mention": "{name} mainitsi sinut", "notification.mention": "{name} mainitsi sinut",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
"upload_area.title": "Lataa raahaamalla ja pudottamalla tähän", "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
"upload_button.label": "Lisää mediaa", "upload_button.label": "Lisää mediaa",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Anna kuvaus näkörajoitteisia varten", "upload_form.description": "Anna kuvaus näkörajoitteisia varten",
"upload_form.focus": "Rajaa", "upload_form.edit": "Edit",
"upload_form.undo": "Peru", "upload_form.undo": "Peru",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Ladataan...", "upload_progress.label": "Ladataan...",
"video.close": "Sulje video", "video.close": "Sulje video",
"video.exit_fullscreen": "Poistu koko näytön tilasta", "video.exit_fullscreen": "Poistu koko näytön tilasta",

View file

@ -4,6 +4,7 @@
"account.block": "Bloquer @{name}", "account.block": "Bloquer @{name}",
"account.block_domain": "Tout masquer venant de {domain}", "account.block_domain": "Tout masquer venant de {domain}",
"account.blocked": "Bloqué", "account.blocked": "Bloqué",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Envoyer un message direct à @{name}", "account.direct": "Envoyer un message direct à @{name}",
"account.domain_blocked": "Domaine caché", "account.domain_blocked": "Domaine caché",
"account.edit_profile": "Modifier le profil", "account.edit_profile": "Modifier le profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Réactiver les notifications de @{name}", "account.unmute_notifications": "Réactiver les notifications de @{name}",
"alert.unexpected.message": "Une erreur inattendue sest produite.", "alert.unexpected.message": "Une erreur inattendue sest produite.",
"alert.unexpected.title": "Oups!", "alert.unexpected.title": "Oups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
"bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.", "bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.",
"bundle_column_error.retry": "Réessayer", "bundle_column_error.retry": "Réessayer",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Basique", "home.column_settings.basic": "Basique",
"home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_reblogs": "Afficher les partages",
"home.column_settings.show_replies": "Afficher les réponses", "home.column_settings.show_replies": "Afficher les réponses",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Mettre à jour en temps réel",
"intervals.full.days": "{number, plural, one {# jour} other {# jours}}", "intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
"intervals.full.hours": "{number, plural, one {# heure} other {# heures}}", "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Titre de la nouvelle liste", "lists.new.title_placeholder": "Titre de la nouvelle liste",
"lists.search": "Rechercher parmi les gens que vous suivez", "lists.search": "Rechercher parmi les gens que vous suivez",
"lists.subheading": "Vos listes", "lists.subheading": "Vos listes",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nouvel item} other {# nouveaux items}}",
"loading_indicator.label": "Chargement…", "loading_indicator.label": "Chargement…",
"media_gallery.toggle_visible": "Modifier la visibilité", "media_gallery.toggle_visible": "Modifier la visibilité",
"missing_indicator.label": "Non trouvé", "missing_indicator.label": "Non trouvé",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Annuaire des profils", "navigation_bar.profile_directory": "Annuaire des profils",
"navigation_bar.public_timeline": "Fil public global", "navigation_bar.public_timeline": "Fil public global",
"navigation_bar.security": "Sécurité", "navigation_bar.security": "Sécurité",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} a ajouté à ses favoris:", "notification.favourite": "{name} a ajouté à ses favoris:",
"notification.follow": "{name} vous suit", "notification.follow": "{name} vous suit",
"notification.mention": "{name} vous a mentionné:", "notification.mention": "{name} vous a mentionné:",
@ -316,7 +319,7 @@
"search_results.accounts": "Comptes", "search_results.accounts": "Comptes",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",
"search_results.statuses": "Pouets", "search_results.statuses": "Pouets",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.",
"search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
"status.admin_account": "Ouvrir l'interface de modération pour @{name}", "status.admin_account": "Ouvrir l'interface de modération pour @{name}",
"status.admin_status": "Ouvrir ce statut dans l'interface de modération", "status.admin_status": "Ouvrir ce statut dans l'interface de modération",
@ -370,14 +373,22 @@
"time_remaining.moments": "Encore quelques instants", "time_remaining.moments": "Encore quelques instants",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes",
"trends.count_by_accounts": "{count} {rawCount, plural, one {personne} other {personnes}} discutent", "trends.count_by_accounts": "{count} {rawCount, plural, one {personne} other {personnes}} discutent",
"trends.refresh": "Refresh",
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
"upload_area.title": "Glissez et déposez pour envoyer", "upload_area.title": "Glissez et déposez pour envoyer",
"upload_button.label": "Joindre un média (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Joindre un média (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
"upload_error.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.", "upload_error.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.",
"upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.description": "Décrire pour les malvoyant·e·s",
"upload_form.focus": "Modifier laperçu", "upload_form.edit": "Edit",
"upload_form.undo": "Supprimer", "upload_form.undo": "Supprimer",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Envoi en cours…", "upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo", "video.close": "Fermer la vidéo",
"video.exit_fullscreen": "Quitter le plein écran", "video.exit_fullscreen": "Quitter le plein écran",

View file

@ -4,6 +4,7 @@
"account.block": "Bloquear @{name}", "account.block": "Bloquear @{name}",
"account.block_domain": "Ocultar calquer contido de {domain}", "account.block_domain": "Ocultar calquer contido de {domain}",
"account.blocked": "Bloqueada", "account.blocked": "Bloqueada",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Mensaxe directa @{name}", "account.direct": "Mensaxe directa @{name}",
"account.domain_blocked": "Dominio agochado", "account.domain_blocked": "Dominio agochado",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Desbloquear as notificacións de @{name}", "account.unmute_notifications": "Desbloquear as notificacións de @{name}",
"alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.message": "Aconteceu un fallo non agardado.",
"alert.unexpected.title": "Vaia!", "alert.unexpected.title": "Vaia!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Pulse {combo} para saltar esto a próxima vez", "boost_modal.combo": "Pulse {combo} para saltar esto a próxima vez",
"bundle_column_error.body": "Houbo un fallo mentras se cargaba este compoñente.", "bundle_column_error.body": "Houbo un fallo mentras se cargaba este compoñente.",
"bundle_column_error.retry": "Inténteo de novo", "bundle_column_error.retry": "Inténteo de novo",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Básico", "home.column_settings.basic": "Básico",
"home.column_settings.show_reblogs": "Mostrar repeticións", "home.column_settings.show_reblogs": "Mostrar repeticións",
"home.column_settings.show_replies": "Mostrar respostas", "home.column_settings.show_replies": "Mostrar respostas",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Actualizar en tempo real",
"intervals.full.days": "{number, plural,one {# día} other {# días}}", "intervals.full.days": "{number, plural,one {# día} other {# días}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Novo título da lista", "lists.new.title_placeholder": "Novo título da lista",
"lists.search": "Procurar entre a xente que segues", "lists.search": "Procurar entre a xente que segues",
"lists.subheading": "As túas listas", "lists.subheading": "As túas listas",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}",
"loading_indicator.label": "Cargando...", "loading_indicator.label": "Cargando...",
"media_gallery.toggle_visible": "Ocultar", "media_gallery.toggle_visible": "Ocultar",
"missing_indicator.label": "Non atopado", "missing_indicator.label": "Non atopado",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Directorio de perfil", "navigation_bar.profile_directory": "Directorio de perfil",
"navigation_bar.public_timeline": "Liña temporal federada", "navigation_bar.public_timeline": "Liña temporal federada",
"navigation_bar.security": "Seguridade", "navigation_bar.security": "Seguridade",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} marcou como favorito o seu estado", "notification.favourite": "{name} marcou como favorito o seu estado",
"notification.follow": "{name} está a seguila", "notification.follow": "{name} está a seguila",
"notification.mention": "{name} mencionoute", "notification.mention": "{name} mencionoute",
@ -316,7 +319,7 @@
"search_results.accounts": "Xente", "search_results.accounts": "Xente",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Non está activada neste servidor Mastodon a busca de toots polo seu contido.",
"search_results.total": "{count, number} {count,plural,one {result} outros {results}}", "search_results.total": "{count, number} {count,plural,one {result} outros {results}}",
"status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_account": "Abrir interface de moderación para @{name}",
"status.admin_status": "Abrir este estado na interface de moderación", "status.admin_status": "Abrir este estado na interface de moderación",
@ -370,14 +373,22 @@
"time_remaining.moments": "Está rematando", "time_remaining.moments": "Está rematando",
"time_remaining.seconds": "{number, plural, one {# segundo} other {# segundos}} restantes", "time_remaining.seconds": "{number, plural, one {# segundo} other {# segundos}} restantes",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} outras {people}} conversando", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} outras {people}} conversando",
"trends.refresh": "Refresh",
"ui.beforeunload": "O borrador perderase se sae de Mastodon.", "ui.beforeunload": "O borrador perderase se sae de Mastodon.",
"upload_area.title": "Arrastre e solte para subir", "upload_area.title": "Arrastre e solte para subir",
"upload_button.label": "Engadir medios ({formats})", "upload_button.label": "Engadir medios ({formats})",
"upload_error.limit": "Excedeu o límite de subida de ficheiros.", "upload_error.limit": "Excedeu o límite de subida de ficheiros.",
"upload_error.poll": "Non se poden subir ficheiros nas sondaxes.", "upload_error.poll": "Non se poden subir ficheiros nas sondaxes.",
"upload_form.description": "Describa para deficientes visuais", "upload_form.description": "Describa para deficientes visuais",
"upload_form.focus": "Cambiar vista previa", "upload_form.edit": "Edit",
"upload_form.undo": "Eliminar", "upload_form.undo": "Eliminar",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Subindo...", "upload_progress.label": "Subindo...",
"video.close": "Pechar video", "video.close": "Pechar video",
"video.exit_fullscreen": "Saír da pantalla completa", "video.exit_fullscreen": "Saír da pantalla completa",

View file

@ -4,6 +4,7 @@
"account.block": "חסימת @{name}", "account.block": "חסימת @{name}",
"account.block_domain": "להסתיר הכל מהקהילה {domain}", "account.block_domain": "להסתיר הכל מהקהילה {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "עריכת פרופיל", "account.edit_profile": "עריכת פרופיל",
@ -37,6 +38,7 @@
"account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}", "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}",
"alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
"alert.unexpected.title": "אופס!", "alert.unexpected.title": "אופס!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
"bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.", "bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.",
"bundle_column_error.retry": "לנסות שוב", "bundle_column_error.retry": "לנסות שוב",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "ציר זמן בין-קהילתי", "navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "חצרוצך חובב על ידי {name}", "notification.favourite": "חצרוצך חובב על ידי {name}",
"notification.follow": "{name} במעקב אחרייך", "notification.follow": "{name} במעקב אחרייך",
"notification.mention": "אוזכרת על ידי {name}", "notification.mention": "אוזכרת על ידי {name}",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.", "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
"upload_area.title": "ניתן להעלות על ידי Drag & drop", "upload_area.title": "ניתן להעלות על ידי Drag & drop",
"upload_button.label": "הוספת מדיה", "upload_button.label": "הוספת מדיה",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "תיאור לכבדי ראיה", "upload_form.description": "תיאור לכבדי ראיה",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "ביטול", "upload_form.undo": "ביטול",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "עולה...", "upload_progress.label": "עולה...",
"video.close": "סגירת וידאו", "video.close": "סגירת וידאו",
"video.exit_fullscreen": "יציאה ממסך מלא", "video.exit_fullscreen": "יציאה ממסך מלא",

View file

@ -4,6 +4,7 @@
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct message @{name}", "account.direct": "Direct message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Blokiraj @{name}", "account.block": "Blokiraj @{name}",
"account.block_domain": "Sakrij sve sa {domain}", "account.block_domain": "Sakrij sve sa {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Uredi profil", "account.edit_profile": "Uredi profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federalni timeline", "navigation_bar.public_timeline": "Federalni timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} je lajkao tvoj status", "notification.favourite": "{name} je lajkao tvoj status",
"notification.follow": "{name} te sada slijedi", "notification.follow": "{name} te sada slijedi",
"notification.mention": "{name} te je spomenuo", "notification.mention": "{name} te je spomenuo",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Povuci i spusti kako bi uploadao", "upload_area.title": "Povuci i spusti kako bi uploadao",
"upload_button.label": "Dodaj media", "upload_button.label": "Dodaj media",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Poništi", "upload_form.undo": "Poništi",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploadam...", "upload_progress.label": "Uploadam...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "@{name} letiltása", "account.block": "@{name} letiltása",
"account.block_domain": "Minden elrejtése innen: {domain}", "account.block_domain": "Minden elrejtése innen: {domain}",
"account.blocked": "Letiltva", "account.blocked": "Letiltva",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Közvetlen üzenet @{name} számára", "account.direct": "Közvetlen üzenet @{name} számára",
"account.domain_blocked": "Rejtett domain", "account.domain_blocked": "Rejtett domain",
"account.edit_profile": "Profil szerkesztése", "account.edit_profile": "Profil szerkesztése",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name} némított értesítéseinek feloldása", "account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
"alert.unexpected.message": "Váratlan hiba történt.", "alert.unexpected.message": "Váratlan hiba történt.",
"alert.unexpected.title": "Hoppá!", "alert.unexpected.title": "Hoppá!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}",
"bundle_column_error.body": "Hiba történt a komponens betöltése közben.", "bundle_column_error.body": "Hiba történt a komponens betöltése közben.",
"bundle_column_error.retry": "Próbáld újra", "bundle_column_error.retry": "Próbáld újra",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Alapértelmezések", "home.column_settings.basic": "Alapértelmezések",
"home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_reblogs": "Megtolások mutatása",
"home.column_settings.show_replies": "Válaszok mutatása", "home.column_settings.show_replies": "Válaszok mutatása",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Frissítés valós időben",
"intervals.full.days": "{number, plural, one {# nap} other {# nap}}", "intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
"intervals.full.hours": "{number, plural, one {# óra} other {# óra}}", "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
"intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}", "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Új lista címe", "lists.new.title_placeholder": "Új lista címe",
"lists.search": "Keresés a követett személyek között", "lists.search": "Keresés a követett személyek között",
"lists.subheading": "Listáid", "lists.subheading": "Listáid",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# új elem} other {# új elem}}",
"loading_indicator.label": "Betöltés...", "loading_indicator.label": "Betöltés...",
"media_gallery.toggle_visible": "Láthatóság állítása", "media_gallery.toggle_visible": "Láthatóság állítása",
"missing_indicator.label": "Nincs találat", "missing_indicator.label": "Nincs találat",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profilok", "navigation_bar.profile_directory": "Profilok",
"navigation_bar.public_timeline": "Föderációs idővonal", "navigation_bar.public_timeline": "Föderációs idővonal",
"navigation_bar.security": "Biztonság", "navigation_bar.security": "Biztonság",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} kedvencnek jelölte egy tülködet", "notification.favourite": "{name} kedvencnek jelölte egy tülködet",
"notification.follow": "{name} követ téged", "notification.follow": "{name} követ téged",
"notification.mention": "{name} megemlített", "notification.mention": "{name} megemlített",
@ -316,7 +319,7 @@
"search_results.accounts": "Emberek", "search_results.accounts": "Emberek",
"search_results.hashtags": "Hashtagek", "search_results.hashtags": "Hashtagek",
"search_results.statuses": "Tülkök", "search_results.statuses": "Tülkök",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Ezen a szerveren nem engedélyezett a tülkök tartalom szerinti keresése.",
"search_results.total": "{count, number} {count, plural, one {találat} other {találat}}", "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}",
"status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz", "status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz",
"status.admin_status": "Tülk megnyitása moderációra", "status.admin_status": "Tülk megnyitása moderációra",
@ -370,14 +373,22 @@
"time_remaining.moments": "Pillanatok vannak hátra", "time_remaining.moments": "Pillanatok vannak hátra",
"time_remaining.seconds": "{number, plural, one {# másodperc} other {# másodperc}} van hátra", "time_remaining.seconds": "{number, plural, one {# másodperc} other {# másodperc}} van hátra",
"trends.count_by_accounts": "{count} {rawCount, plural, one {résztvevő} other {résztvevő}} beszélget", "trends.count_by_accounts": "{count} {rawCount, plural, one {résztvevő} other {résztvevő}} beszélget",
"trends.refresh": "Refresh",
"ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodon-t.", "ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodon-t.",
"upload_area.title": "Húzd ide a feltöltéshez", "upload_area.title": "Húzd ide a feltöltéshez",
"upload_button.label": "Média hozzáadása (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Média hozzáadása (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Túllépted a fájl feltöltési limitet.", "upload_error.limit": "Túllépted a fájl feltöltési limitet.",
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
"upload_form.description": "Leírás látáskorlátozottak számára", "upload_form.description": "Leírás látáskorlátozottak számára",
"upload_form.focus": "Előnézet megváltoztatása", "upload_form.edit": "Edit",
"upload_form.undo": "Mégsem", "upload_form.undo": "Mégsem",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Feltöltés...", "upload_progress.label": "Feltöltés...",
"video.close": "Videó bezárása", "video.close": "Videó bezárása",
"video.exit_fullscreen": "Kilépés teljes képernyőből", "video.exit_fullscreen": "Kilépés teljes képernyőből",

View file

@ -1,15 +1,16 @@
{ {
"account.add_or_remove_from_list": "Add or Remove from lists", "account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Bot", "account.badges.bot": "Բոտ",
"account.block": "Արգելափակել @{name}֊ին", "account.block": "Արգելափակել @{name}֊ին",
"account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}", "account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Խմբագրել անձնական էջը", "account.edit_profile": "Խմբագրել անձնական էջը",
"account.endorse": "Feature on profile", "account.endorse": "Feature on profile",
"account.follow": "Հետեւել", "account.follow": "Հետեւել",
"account.followers": "Հետեւվողներ", "account.followers": "Հետեւողներ",
"account.followers.empty": "No one follows this user yet.", "account.followers.empty": "No one follows this user yet.",
"account.follows": "Հետեւում է", "account.follows": "Հետեւում է",
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "This user doesn't follow anyone yet.",
@ -36,7 +37,8 @@
"account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute": "Ապալռեցնել @{name}֊ին",
"account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Վա՜յ",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա հաջորդ անգամ բաց թողնելու համար", "boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա հաջորդ անգամ բաց թողնելու համար",
"bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։", "bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։",
"bundle_column_error.retry": "Կրկին փորձել", "bundle_column_error.retry": "Կրկին փորձել",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.public_timeline": "Դաշնային հոսք",
"navigation_bar.security": "Անվտանգություն", "navigation_bar.security": "Անվտանգություն",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} հավանեց թութդ", "notification.favourite": "{name} հավանեց թութդ",
"notification.follow": "{name} սկսեց հետեւել քեզ", "notification.follow": "{name} սկսեց հետեւել քեզ",
"notification.mention": "{name} նշեց քեզ", "notification.mention": "{name} նշեց քեզ",
@ -313,7 +316,7 @@
"search_popout.tips.status": "թութ", "search_popout.tips.status": "թութ",
"search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", "search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
"search_popout.tips.user": "օգտատեր", "search_popout.tips.user": "օգտատեր",
"search_results.accounts": "People", "search_results.accounts": "Մարդիկ",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
@ -363,21 +366,29 @@
"tabs_bar.home": "Հիմնական", "tabs_bar.home": "Հիմնական",
"tabs_bar.local_timeline": "Տեղական", "tabs_bar.local_timeline": "Տեղական",
"tabs_bar.notifications": "Ծանուցումներ", "tabs_bar.notifications": "Ծանուցումներ",
"tabs_bar.search": "Search", "tabs_bar.search": "Փնտրել",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։", "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար", "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
"upload_button.label": "Ավելացնել մեդիա", "upload_button.label": "Ավելացնել մեդիա",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար", "upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Հետարկել", "upload_form.undo": "Հետարկել",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Վերբեռնվում է…", "upload_progress.label": "Վերբեռնվում է…",
"video.close": "Փակել տեսագրությունը", "video.close": "Փակել տեսագրությունը",
"video.exit_fullscreen": "Անջատել լիաէկրան դիտումը", "video.exit_fullscreen": "Անջատել լիաէկրան դիտումը",

View file

@ -4,6 +4,7 @@
"account.block": "Blokir @{name}", "account.block": "Blokir @{name}",
"account.block_domain": "Sembunyikan segalanya dari {domain}", "account.block_domain": "Sembunyikan segalanya dari {domain}",
"account.blocked": "Terblokir", "account.blocked": "Terblokir",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain disembunyikan", "account.domain_blocked": "Domain disembunyikan",
"account.edit_profile": "Ubah profil", "account.edit_profile": "Ubah profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Munculkan notifikasi dari @{name}", "account.unmute_notifications": "Munculkan notifikasi dari @{name}",
"alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
"bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.", "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.",
"bundle_column_error.retry": "Coba lagi", "bundle_column_error.retry": "Coba lagi",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Linimasa gabungan", "navigation_bar.public_timeline": "Linimasa gabungan",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} menyukai status anda", "notification.favourite": "{name} menyukai status anda",
"notification.follow": "{name} mengikuti anda", "notification.follow": "{name} mengikuti anda",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.", "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
"upload_area.title": "Seret & lepaskan untuk mengunggah", "upload_area.title": "Seret & lepaskan untuk mengunggah",
"upload_button.label": "Tambahkan media", "upload_button.label": "Tambahkan media",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas", "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
"upload_form.focus": "Potong", "upload_form.edit": "Edit",
"upload_form.undo": "Undo", "upload_form.undo": "Undo",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Mengunggah...", "upload_progress.label": "Mengunggah...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Keluar dari layar penuh", "video.exit_fullscreen": "Keluar dari layar penuh",

View file

@ -4,6 +4,7 @@
"account.block": "Blokusar @{name}", "account.block": "Blokusar @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Modifikar profilo", "account.edit_profile": "Modifikar profilo",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federata tempolineo", "navigation_bar.public_timeline": "Federata tempolineo",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favorizis tua mesajo", "notification.favourite": "{name} favorizis tua mesajo",
"notification.follow": "{name} sequeskis tu", "notification.follow": "{name} sequeskis tu",
"notification.mention": "{name} mencionis tu", "notification.mention": "{name} mencionis tu",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Tranar faligar por kargar", "upload_area.title": "Tranar faligar por kargar",
"upload_button.label": "Adjuntar kontenajo", "upload_button.label": "Adjuntar kontenajo",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Desfacar", "upload_form.undo": "Desfacar",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Kargante...", "upload_progress.label": "Kargante...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Blocca @{name}", "account.block": "Blocca @{name}",
"account.block_domain": "Nascondi tutto da {domain}", "account.block_domain": "Nascondi tutto da {domain}",
"account.blocked": "Bloccato", "account.blocked": "Bloccato",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Invia messaggio privato a @{name}", "account.direct": "Invia messaggio privato a @{name}",
"account.domain_blocked": "Dominio nascosto", "account.domain_blocked": "Dominio nascosto",
"account.edit_profile": "Modifica profilo", "account.edit_profile": "Modifica profilo",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Non silenziare più le notifiche da @{name}", "account.unmute_notifications": "Non silenziare più le notifiche da @{name}",
"alert.unexpected.message": "Si è verificato un errore inatteso.", "alert.unexpected.message": "Si è verificato un errore inatteso.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per settimana",
"boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta",
"bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.", "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.",
"bundle_column_error.retry": "Riprova", "bundle_column_error.retry": "Riprova",
@ -66,7 +68,7 @@
"column_subheading.settings": "Impostazioni", "column_subheading.settings": "Impostazioni",
"community.column_settings.media_only": "Solo media", "community.column_settings.media_only": "Solo media",
"compose_form.direct_message_warning": "Questo toot sarà mandato solo a tutti gli utenti menzionati.", "compose_form.direct_message_warning": "Questo toot sarà mandato solo a tutti gli utenti menzionati.",
"compose_form.direct_message_warning_learn_more": "Per saperne di piu'", "compose_form.direct_message_warning_learn_more": "Per saperne di più",
"compose_form.hashtag_warning": "Questo toot non è listato, quindi non sarà trovato nelle ricerche per hashtag. Solo i toot pubblici possono essere cercati per hashtag.", "compose_form.hashtag_warning": "Questo toot non è listato, quindi non sarà trovato nelle ricerche per hashtag. Solo i toot pubblici possono essere cercati per hashtag.",
"compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.", "compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.",
"compose_form.lock_disclaimer.lock": "bloccato", "compose_form.lock_disclaimer.lock": "bloccato",
@ -137,7 +139,7 @@
"follow_request.authorize": "Autorizza", "follow_request.authorize": "Autorizza",
"follow_request.reject": "Rifiuta", "follow_request.reject": "Rifiuta",
"getting_started.developers": "Sviluppatori", "getting_started.developers": "Sviluppatori",
"getting_started.directory": "Directory del profilo", "getting_started.directory": "Directory dei profili",
"getting_started.documentation": "Documentazione", "getting_started.documentation": "Documentazione",
"getting_started.heading": "Come iniziare", "getting_started.heading": "Come iniziare",
"getting_started.invite": "Invita qualcuno", "getting_started.invite": "Invita qualcuno",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Semplice", "home.column_settings.basic": "Semplice",
"home.column_settings.show_reblogs": "Mostra post condivisi", "home.column_settings.show_reblogs": "Mostra post condivisi",
"home.column_settings.show_replies": "Mostra risposte", "home.column_settings.show_replies": "Mostra risposte",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Aggiornama in tempo reale",
"intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}", "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Titolo della nuova lista", "lists.new.title_placeholder": "Titolo della nuova lista",
"lists.search": "Cerca tra le persone che segui", "lists.search": "Cerca tra le persone che segui",
"lists.subheading": "Le tue liste", "lists.subheading": "Le tue liste",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}",
"loading_indicator.label": "Caricamento...", "loading_indicator.label": "Caricamento...",
"media_gallery.toggle_visible": "Imposta visibilità", "media_gallery.toggle_visible": "Imposta visibilità",
"missing_indicator.label": "Non trovato", "missing_indicator.label": "Non trovato",
@ -239,7 +241,7 @@
"navigation_bar.favourites": "Apprezzati", "navigation_bar.favourites": "Apprezzati",
"navigation_bar.filters": "Parole silenziate", "navigation_bar.filters": "Parole silenziate",
"navigation_bar.follow_requests": "Richieste di amicizia", "navigation_bar.follow_requests": "Richieste di amicizia",
"navigation_bar.follows_and_followers": "Follows and followers", "navigation_bar.follows_and_followers": "Seguiti e seguaci",
"navigation_bar.info": "Informazioni su questo server", "navigation_bar.info": "Informazioni su questo server",
"navigation_bar.keyboard_shortcuts": "Tasti di scelta rapida", "navigation_bar.keyboard_shortcuts": "Tasti di scelta rapida",
"navigation_bar.lists": "Liste", "navigation_bar.lists": "Liste",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Directory dei profili", "navigation_bar.profile_directory": "Directory dei profili",
"navigation_bar.public_timeline": "Timeline federata", "navigation_bar.public_timeline": "Timeline federata",
"navigation_bar.security": "Sicurezza", "navigation_bar.security": "Sicurezza",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} ha apprezzato il tuo post", "notification.favourite": "{name} ha apprezzato il tuo post",
"notification.follow": "{name} ha iniziato a seguirti", "notification.follow": "{name} ha iniziato a seguirti",
"notification.mention": "{name} ti ha menzionato", "notification.mention": "{name} ti ha menzionato",
@ -316,7 +319,7 @@
"search_results.accounts": "Gente", "search_results.accounts": "Gente",
"search_results.hashtags": "Hashtag", "search_results.hashtags": "Hashtag",
"search_results.statuses": "Toot", "search_results.statuses": "Toot",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "La ricerca di toot per il loro contenuto non è abilitata su questo server Mastodon.",
"search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}",
"status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_account": "Apri interfaccia di moderazione per @{name}",
"status.admin_status": "Apri questo status nell'interfaccia di moderazione", "status.admin_status": "Apri questo status nell'interfaccia di moderazione",
@ -370,14 +373,22 @@
"time_remaining.moments": "Restano pochi istanti", "time_remaining.moments": "Restano pochi istanti",
"time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left", "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona ne sta} other {persone ne stanno}} parlando", "trends.count_by_accounts": "{count} {rawCount, plural, one {persona ne sta} other {persone ne stanno}} parlando",
"trends.refresh": "Aggiorna",
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
"upload_area.title": "Trascina per caricare", "upload_area.title": "Trascina per caricare",
"upload_button.label": "Aggiungi file multimediale", "upload_button.label": "Aggiungi file multimediale",
"upload_error.limit": "Limite al caricamento di file superato.", "upload_error.limit": "Limite al caricamento di file superato.",
"upload_error.poll": "Caricamento file non consentito nei sondaggi.", "upload_error.poll": "Caricamento file non consentito nei sondaggi.",
"upload_form.description": "Descrizione per utenti con disabilità visive", "upload_form.description": "Descrizione per utenti con disabilità visive",
"upload_form.focus": "Modifica anteprima", "upload_form.edit": "Edit",
"upload_form.undo": "Cancella", "upload_form.undo": "Cancella",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Sto caricando...", "upload_progress.label": "Sto caricando...",
"video.close": "Chiudi video", "video.close": "Chiudi video",
"video.exit_fullscreen": "Esci da modalità a schermo intero", "video.exit_fullscreen": "Esci da modalità a schermo intero",

View file

@ -4,6 +4,7 @@
"account.block": "@{name}さんをブロック", "account.block": "@{name}さんをブロック",
"account.block_domain": "{domain}全体を非表示", "account.block_domain": "{domain}全体を非表示",
"account.blocked": "ブロック済み", "account.blocked": "ブロック済み",
"account.cancel_follow_request": "フォローリクエストを取り消す",
"account.direct": "@{name}さんにダイレクトメッセージ", "account.direct": "@{name}さんにダイレクトメッセージ",
"account.domain_blocked": "ドメイン非表示中", "account.domain_blocked": "ドメイン非表示中",
"account.edit_profile": "プロフィール編集", "account.edit_profile": "プロフィール編集",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする", "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
"alert.unexpected.message": "不明なエラーが発生しました。", "alert.unexpected.message": "不明なエラーが発生しました。",
"alert.unexpected.title": "エラー!", "alert.unexpected.title": "エラー!",
"autosuggest_hashtag.per_week": "{count} 回 / 週",
"boost_modal.combo": "次からは{combo}を押せばスキップできます", "boost_modal.combo": "次からは{combo}を押せばスキップできます",
"bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
"bundle_column_error.retry": "再試行", "bundle_column_error.retry": "再試行",
@ -160,7 +162,7 @@
"home.column_settings.basic": "基本設定", "home.column_settings.basic": "基本設定",
"home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_reblogs": "ブースト表示",
"home.column_settings.show_replies": "返信表示", "home.column_settings.show_replies": "返信表示",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "リアルタイムで更新",
"intervals.full.days": "{number}日", "intervals.full.days": "{number}日",
"intervals.full.hours": "{number}時間", "intervals.full.hours": "{number}時間",
"intervals.full.minutes": "{number}分", "intervals.full.minutes": "{number}分",
@ -226,7 +228,7 @@
"lists.new.title_placeholder": "新規リスト名", "lists.new.title_placeholder": "新規リスト名",
"lists.search": "フォローしている人の中から検索", "lists.search": "フォローしている人の中から検索",
"lists.subheading": "あなたのリスト", "lists.subheading": "あなたのリスト",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count} 件の新着",
"loading_indicator.label": "読み込み中...", "loading_indicator.label": "読み込み中...",
"media_gallery.toggle_visible": "表示切り替え", "media_gallery.toggle_visible": "表示切り替え",
"missing_indicator.label": "見つかりません", "missing_indicator.label": "見つかりません",
@ -256,6 +258,7 @@
"navigation_bar.public_timeline": "連合タイムライン", "navigation_bar.public_timeline": "連合タイムライン",
"navigation_bar.misc": "その他", "navigation_bar.misc": "その他",
"navigation_bar.security": "セキュリティ", "navigation_bar.security": "セキュリティ",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました", "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
"notification.follow": "{name}さんにフォローされました", "notification.follow": "{name}さんにフォローされました",
"notification.mention": "{name}さんがあなたに返信しました", "notification.mention": "{name}さんがあなたに返信しました",
@ -321,7 +324,7 @@
"search_results.accounts": "人々", "search_results.accounts": "人々",
"search_results.hashtags": "ハッシュタグ", "search_results.hashtags": "ハッシュタグ",
"search_results.statuses": "トゥート", "search_results.statuses": "トゥート",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "このサーバーではトゥート本文での検索は利用できません。",
"search_results.total": "{count, number}件の結果", "search_results.total": "{count, number}件の結果",
"status.admin_account": "@{name} のモデレーション画面を開く", "status.admin_account": "@{name} のモデレーション画面を開く",
"status.admin_status": "このトゥートをモデレーション画面で開く", "status.admin_status": "このトゥートをモデレーション画面で開く",
@ -375,14 +378,22 @@
"time_remaining.moments": "まもなく終了", "time_remaining.moments": "まもなく終了",
"time_remaining.seconds": "残り{number}秒", "time_remaining.seconds": "残り{number}秒",
"trends.count_by_accounts": "{count}人がトゥート", "trends.count_by_accounts": "{count}人がトゥート",
"trends.refresh": "更新",
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。", "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
"upload_area.title": "ドラッグ&ドロップでアップロード", "upload_area.title": "ドラッグ&ドロップでアップロード",
"upload_button.label": "メディアを追加 ({formats})", "upload_button.label": "メディアを追加 ({formats})",
"upload_error.limit": "アップロードできる上限を超えています。", "upload_error.limit": "アップロードできる上限を超えています。",
"upload_error.poll": "アンケートではファイルをアップロードできません。", "upload_error.poll": "アンケートではファイルをアップロードできません。",
"upload_form.description": "視覚障害者のための説明", "upload_form.description": "視覚障害者のための説明",
"upload_form.focus": "プレビューを変更", "upload_form.edit": "編集",
"upload_form.undo": "削除", "upload_form.undo": "削除",
"upload_modal.analyzing_picture": "画像を解析中…",
"upload_modal.apply": "適用",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "画像からテキストを検出",
"upload_modal.edit_media": "メディアを編集",
"upload_modal.hint": "画像をクリックするか円をドラッグすると全てのサムネイルで注目する場所を選ぶことができます",
"upload_modal.preview_label": "プレビュー ({ratio})",
"upload_progress.label": "アップロード中...", "upload_progress.label": "アップロード中...",
"video.close": "動画を閉じる", "video.close": "動画を閉じる",
"video.exit_fullscreen": "全画面を終了する", "video.exit_fullscreen": "全画面を終了する",

View file

@ -4,6 +4,7 @@
"account.block": "დაბლოკე @{name}", "account.block": "დაბლოკე @{name}",
"account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}", "account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}",
"account.blocked": "დაიბლოკა", "account.blocked": "დაიბლოკა",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "პირდაპირი წერილი @{name}-ს", "account.direct": "პირდაპირი წერილი @{name}-ს",
"account.domain_blocked": "დომენი დამალულია", "account.domain_blocked": "დომენი დამალულია",
"account.edit_profile": "პროფილის ცვლილება", "account.edit_profile": "პროფილის ცვლილება",
@ -37,6 +38,7 @@
"account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან", "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან",
"alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.", "alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.",
"alert.unexpected.title": "უპს!", "alert.unexpected.title": "უპს!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს", "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს",
"bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.", "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
"bundle_column_error.retry": "სცადეთ კიდევ ერთხელ", "bundle_column_error.retry": "სცადეთ კიდევ ერთხელ",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "ფედერალური თაიმლაინი", "navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
"navigation_bar.security": "უსაფრთხოება", "navigation_bar.security": "უსაფრთხოება",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად", "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
"notification.follow": "{name} გამოგყვათ", "notification.follow": "{name} გამოგყვათ",
"notification.mention": "{name}-მა გასახელათ", "notification.mention": "{name}-მა გასახელათ",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს",
"trends.refresh": "Refresh",
"ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.", "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
"upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ", "upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
"upload_button.label": "მედიის დამატება", "upload_button.label": "მედიის დამატება",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის", "upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
"upload_form.focus": "კროპი", "upload_form.edit": "Edit",
"upload_form.undo": "გაუქმება", "upload_form.undo": "გაუქმება",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "იტვირთება...", "upload_progress.label": "იტვირთება...",
"video.close": "ვიდეოს დახურვა", "video.close": "ვიდეოს დახურვა",
"video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა", "video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა",

View file

@ -4,6 +4,7 @@
"account.block": "Бұғаттау @{name}", "account.block": "Бұғаттау @{name}",
"account.block_domain": "Домендегі барлығын бұғатта {domain}", "account.block_domain": "Домендегі барлығын бұғатта {domain}",
"account.blocked": "Бұғатталды", "account.blocked": "Бұғатталды",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Жеке хат @{name}", "account.direct": "Жеке хат @{name}",
"account.domain_blocked": "Домен жабық", "account.domain_blocked": "Домен жабық",
"account.edit_profile": "Профильді өңдеу", "account.edit_profile": "Профильді өңдеу",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name} ескертпелерін көрсету", "account.unmute_notifications": "@{name} ескертпелерін көрсету",
"alert.unexpected.message": "Бір нәрсе дұрыс болмады.", "alert.unexpected.message": "Бір нәрсе дұрыс болмады.",
"alert.unexpected.title": "Өй!", "alert.unexpected.title": "Өй!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}",
"bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.",
"bundle_column_error.retry": "Қайтадан көріңіз", "bundle_column_error.retry": "Қайтадан көріңіз",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Жаһандық желі", "navigation_bar.public_timeline": "Жаһандық желі",
"navigation_bar.security": "Қауіпсіздік", "navigation_bar.security": "Қауіпсіздік",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} жазбаңызды таңдаулыға қосты", "notification.favourite": "{name} жазбаңызды таңдаулыға қосты",
"notification.follow": "{name} сізге жазылды", "notification.follow": "{name} сізге жазылды",
"notification.mention": "{name} сізді атап өтті", "notification.mention": "{name} сізді атап өтті",
@ -370,14 +373,22 @@
"time_remaining.moments": "Қалған уақыт", "time_remaining.moments": "Қалған уақыт",
"time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}", "time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} жазған екен", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} жазған екен",
"trends.refresh": "Refresh",
"ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.", "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.",
"upload_area.title": "Жүктеу үшін сүйреп әкеліңіз", "upload_area.title": "Жүктеу үшін сүйреп әкеліңіз",
"upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.", "upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.",
"upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.", "upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.",
"upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз", "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз",
"upload_form.focus": "Превьюді өзгерту", "upload_form.edit": "Edit",
"upload_form.undo": "Өшіру", "upload_form.undo": "Өшіру",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Жүктеп жатыр...", "upload_progress.label": "Жүктеп жатыр...",
"video.close": "Видеоны жабу", "video.close": "Видеоны жабу",
"video.exit_fullscreen": "Толық экраннан шық", "video.exit_fullscreen": "Толық экраннан шық",

View file

@ -4,6 +4,7 @@
"account.block": "@{name}을 차단", "account.block": "@{name}을 차단",
"account.block_domain": "{domain} 전체를 숨김", "account.block_domain": "{domain} 전체를 숨김",
"account.blocked": "차단 됨", "account.blocked": "차단 됨",
"account.cancel_follow_request": "팔로우 요청 취소",
"account.direct": "@{name}으로부터의 다이렉트 메시지", "account.direct": "@{name}으로부터의 다이렉트 메시지",
"account.domain_blocked": "도메인 숨겨짐", "account.domain_blocked": "도메인 숨겨짐",
"account.edit_profile": "프로필 편집", "account.edit_profile": "프로필 편집",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name}의 알림 뮤트 해제", "account.unmute_notifications": "@{name}의 알림 뮤트 해제",
"alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.", "alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.",
"alert.unexpected.title": "앗!", "alert.unexpected.title": "앗!",
"autosuggest_hashtag.per_week": "주간 {count}회",
"boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다", "boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다",
"bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.",
"bundle_column_error.retry": "다시 시도", "bundle_column_error.retry": "다시 시도",
@ -156,7 +158,7 @@
"home.column_settings.basic": "기본 설정", "home.column_settings.basic": "기본 설정",
"home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_reblogs": "부스트 표시",
"home.column_settings.show_replies": "답글 표시", "home.column_settings.show_replies": "답글 표시",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "실시간 업데이트",
"intervals.full.days": "{number} 일", "intervals.full.days": "{number} 일",
"intervals.full.hours": "{number} 시간", "intervals.full.hours": "{number} 시간",
"intervals.full.minutes": "{number} 분", "intervals.full.minutes": "{number} 분",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "새 리스트의 이름", "lists.new.title_placeholder": "새 리스트의 이름",
"lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.search": "팔로우 중인 사람들 중에서 찾기",
"lists.subheading": "당신의 리스트", "lists.subheading": "당신의 리스트",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count}개의 새 항목",
"loading_indicator.label": "불러오는 중...", "loading_indicator.label": "불러오는 중...",
"media_gallery.toggle_visible": "표시 전환", "media_gallery.toggle_visible": "표시 전환",
"missing_indicator.label": "찾을 수 없습니다", "missing_indicator.label": "찾을 수 없습니다",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "프로필 디렉토리", "navigation_bar.profile_directory": "프로필 디렉토리",
"navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.public_timeline": "연합 타임라인",
"navigation_bar.security": "보안", "navigation_bar.security": "보안",
"notification.and_n_others": "그리고 {count}개의 기타 항목",
"notification.favourite": "{name}님이 즐겨찾기 했습니다", "notification.favourite": "{name}님이 즐겨찾기 했습니다",
"notification.follow": "{name}님이 나를 팔로우 했습니다", "notification.follow": "{name}님이 나를 팔로우 했습니다",
"notification.mention": "{name}님이 답글을 보냈습니다", "notification.mention": "{name}님이 답글을 보냈습니다",
@ -316,7 +319,7 @@
"search_results.accounts": "사람", "search_results.accounts": "사람",
"search_results.hashtags": "해시태그", "search_results.hashtags": "해시태그",
"search_results.statuses": "툿", "search_results.statuses": "툿",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 툿의 내용을 통한 검색이 활성화 되어 있지 않습니다.",
"search_results.total": "{count, number}건의 결과", "search_results.total": "{count, number}건의 결과",
"status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기", "status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기",
"status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기", "status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기",
@ -370,14 +373,22 @@
"time_remaining.moments": "남은 시간", "time_remaining.moments": "남은 시간",
"time_remaining.seconds": "{number} 초 남음", "time_remaining.seconds": "{number} 초 남음",
"trends.count_by_accounts": "{count} 명의 사람들이 말하고 있습니다", "trends.count_by_accounts": "{count} 명의 사람들이 말하고 있습니다",
"trends.refresh": "새로고침",
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
"upload_area.title": "드래그 & 드롭으로 업로드", "upload_area.title": "드래그 & 드롭으로 업로드",
"upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "파일 업로드 제한에 도달했습니다.", "upload_error.limit": "파일 업로드 제한에 도달했습니다.",
"upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.", "upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.",
"upload_form.description": "시각장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명",
"upload_form.focus": "미리보기 변경", "upload_form.edit": "편집",
"upload_form.undo": "삭제", "upload_form.undo": "삭제",
"upload_modal.analyzing_picture": "이미지 분석 중…",
"upload_modal.apply": "적용",
"upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파",
"upload_modal.detect_text": "이미지에서 텍스트 추출",
"upload_modal.edit_media": "미디어 편집",
"upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.",
"upload_modal.preview_label": "미리보기 ({ratio})",
"upload_progress.label": "업로드 중...", "upload_progress.label": "업로드 중...",
"video.close": "동영상 닫기", "video.close": "동영상 닫기",
"video.exit_fullscreen": "전체화면 나가기", "video.exit_fullscreen": "전체화면 나가기",

View file

@ -4,6 +4,7 @@
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct message @{name}", "account.direct": "Direct message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media ({formats})", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Bloķēt @{name}", "account.block": "Bloķēt @{name}",
"account.block_domain": "Slēpt visu no {domain}", "account.block_domain": "Slēpt visu no {domain}",
"account.blocked": "Bloķēts", "account.blocked": "Bloķēts",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Privātā ziņa @{name}", "account.direct": "Privātā ziņa @{name}",
"account.domain_blocked": "Domēns ir paslēpts", "account.domain_blocked": "Domēns ir paslēpts",
"account.edit_profile": "Labot profilu", "account.edit_profile": "Labot profilu",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}", "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}",
"alert.unexpected.message": "Negaidīta kļūda.", "alert.unexpected.message": "Negaidīta kļūda.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz", "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz",
"bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.", "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.",
"bundle_column_error.retry": "Mēģini vēlreiz", "bundle_column_error.retry": "Mēģini vēlreiz",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media ({formats})", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct message @{name}", "account.direct": "Direct message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media ({formats})", "upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uploading...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Blokkeer @{name}", "account.block": "Blokkeer @{name}",
"account.block_domain": "Verberg alles van {domain}", "account.block_domain": "Verberg alles van {domain}",
"account.blocked": "Geblokkeerd", "account.blocked": "Geblokkeerd",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domein verborgen", "account.domain_blocked": "Domein verborgen",
"account.edit_profile": "Profiel bewerken", "account.edit_profile": "Profiel bewerken",
@ -37,6 +38,7 @@
"account.unmute_notifications": "@{name} meldingen niet langer negeren", "account.unmute_notifications": "@{name} meldingen niet langer negeren",
"alert.unexpected.message": "Er deed zich een onverwachte fout voor", "alert.unexpected.message": "Er deed zich een onverwachte fout voor",
"alert.unexpected.title": "Oeps!", "alert.unexpected.title": "Oeps!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
"bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
"bundle_column_error.retry": "Opnieuw proberen", "bundle_column_error.retry": "Opnieuw proberen",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Gebruikersgids", "navigation_bar.profile_directory": "Gebruikersgids",
"navigation_bar.public_timeline": "Globale tijdlijn", "navigation_bar.public_timeline": "Globale tijdlijn",
"navigation_bar.security": "Beveiliging", "navigation_bar.security": "Beveiliging",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} voegde jouw toot als favoriet toe", "notification.favourite": "{name} voegde jouw toot als favoriet toe",
"notification.follow": "{name} volgt jou nu", "notification.follow": "{name} volgt jou nu",
"notification.mention": "{name} vermeldde jou", "notification.mention": "{name} vermeldde jou",
@ -370,14 +373,22 @@
"time_remaining.moments": "Nog enkele ogenblikken resterend", "time_remaining.moments": "Nog enkele ogenblikken resterend",
"time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} te gaan", "time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} te gaan",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover", "trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
"trends.refresh": "Refresh",
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
"upload_area.title": "Hiernaar toe slepen om te uploaden", "upload_area.title": "Hiernaar toe slepen om te uploaden",
"upload_button.label": "Media toevoegen ({formats})", "upload_button.label": "Media toevoegen ({formats})",
"upload_error.limit": "Uploadlimiet van bestand overschreden.", "upload_error.limit": "Uploadlimiet van bestand overschreden.",
"upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.", "upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.",
"upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",
"upload_form.focus": "Voorvertoning aanpassen", "upload_form.edit": "Edit",
"upload_form.undo": "Verwijderen", "upload_form.undo": "Verwijderen",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploaden...", "upload_progress.label": "Uploaden...",
"video.close": "Video sluiten", "video.close": "Video sluiten",
"video.exit_fullscreen": "Volledig scherm sluiten", "video.exit_fullscreen": "Volledig scherm sluiten",

View file

@ -4,6 +4,7 @@
"account.block": "Blokkér @{name}", "account.block": "Blokkér @{name}",
"account.block_domain": "Skjul alt fra {domain}", "account.block_domain": "Skjul alt fra {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Rediger profil", "account.edit_profile": "Rediger profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Vis varsler fra @{name}", "account.unmute_notifications": "Vis varsler fra @{name}",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang",
"bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.", "bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.",
"bundle_column_error.retry": "Prøv igjen", "bundle_column_error.retry": "Prøv igjen",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Felles tidslinje", "navigation_bar.public_timeline": "Felles tidslinje",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} likte din status", "notification.favourite": "{name} likte din status",
"notification.follow": "{name} fulgte deg", "notification.follow": "{name} fulgte deg",
"notification.mention": "{name} nevnte deg", "notification.mention": "{name} nevnte deg",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.refresh": "Refresh",
"ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
"upload_area.title": "Dra og slipp for å laste opp", "upload_area.title": "Dra og slipp for å laste opp",
"upload_button.label": "Legg til media", "upload_button.label": "Legg til media",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Beskriv for synshemmede", "upload_form.description": "Beskriv for synshemmede",
"upload_form.focus": "Crop", "upload_form.edit": "Edit",
"upload_form.undo": "Angre", "upload_form.undo": "Angre",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Laster opp...", "upload_progress.label": "Laster opp...",
"video.close": "Lukk video", "video.close": "Lukk video",
"video.exit_fullscreen": "Lukk fullskjerm", "video.exit_fullscreen": "Lukk fullskjerm",

View file

@ -4,6 +4,7 @@
"account.block": "Blocar @{name}", "account.block": "Blocar @{name}",
"account.block_domain": "Tot amagar del domeni {domain}", "account.block_domain": "Tot amagar del domeni {domain}",
"account.blocked": "Blocat", "account.blocked": "Blocat",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Escriure un MP a @{name}", "account.direct": "Escriure un MP a @{name}",
"account.domain_blocked": "Domeni amagat", "account.domain_blocked": "Domeni amagat",
"account.edit_profile": "Modificar lo perfil", "account.edit_profile": "Modificar lo perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Mostrar las notificacions de @{name}", "account.unmute_notifications": "Mostrar las notificacions de @{name}",
"alert.unexpected.message": "Una error ses producha.", "alert.unexpected.message": "Una error ses producha.",
"alert.unexpected.title": "Ops!", "alert.unexpected.title": "Ops!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven",
"bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament daqueste compausant.", "bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament daqueste compausant.",
"bundle_column_error.retry": "Tornar ensajar", "bundle_column_error.retry": "Tornar ensajar",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Basic", "home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_reblogs": "Mostrar los partatges",
"home.column_settings.show_replies": "Mostrar las responsas", "home.column_settings.show_replies": "Mostrar las responsas",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Actualizacion en dirècte",
"intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}", "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}", "intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Títol de la nòva lista", "lists.new.title_placeholder": "Títol de la nòva lista",
"lists.search": "Cercar demest lo monde que seguètz", "lists.search": "Cercar demest lo monde que seguètz",
"lists.subheading": "Vòstras listas", "lists.subheading": "Vòstras listas",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}",
"loading_indicator.label": "Cargament…", "loading_indicator.label": "Cargament…",
"media_gallery.toggle_visible": "Modificar la visibilitat", "media_gallery.toggle_visible": "Modificar la visibilitat",
"missing_indicator.label": "Pas trobat", "missing_indicator.label": "Pas trobat",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Annuari de perfils", "navigation_bar.profile_directory": "Annuari de perfils",
"navigation_bar.public_timeline": "Flux public global", "navigation_bar.public_timeline": "Flux public global",
"navigation_bar.security": "Seguretat", "navigation_bar.security": "Seguretat",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} a ajustat a sos favorits", "notification.favourite": "{name} a ajustat a sos favorits",
"notification.follow": "{name} vos sèc", "notification.follow": "{name} vos sèc",
"notification.mention": "{name} vos a mencionat", "notification.mention": "{name} vos a mencionat",
@ -316,7 +319,7 @@
"search_results.accounts": "Gents", "search_results.accounts": "Gents",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",
"search_results.statuses": "Tuts", "search_results.statuses": "Tuts",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"status.admin_account": "Dobrir linterfàcia de moderacion per @{name}", "status.admin_account": "Dobrir linterfàcia de moderacion per @{name}",
"status.admin_status": "Dobrir aqueste estatut dins linterfàcia de moderacion", "status.admin_status": "Dobrir aqueste estatut dins linterfàcia de moderacion",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments restants", "time_remaining.moments": "Moments restants",
"time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}", "time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
"trends.refresh": "Refresh",
"ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
"upload_area.title": "Lisatz e depausatz per mandar", "upload_area.title": "Lisatz e depausatz per mandar",
"upload_button.label": "Ajustar un mèdia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Ajustar un mèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Talha maximum pels mandadís subrepassada.", "upload_error.limit": "Talha maximum pels mandadís subrepassada.",
"upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.", "upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.",
"upload_form.description": "Descripcion pels mal vesents", "upload_form.description": "Descripcion pels mal vesents",
"upload_form.focus": "Modificar lapercebut", "upload_form.edit": "Edit",
"upload_form.undo": "Suprimir", "upload_form.undo": "Suprimir",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Mandadís…", "upload_progress.label": "Mandadís…",
"video.close": "Tampar la vidèo", "video.close": "Tampar la vidèo",
"video.exit_fullscreen": "Sortir plen ecran", "video.exit_fullscreen": "Sortir plen ecran",

View file

@ -4,6 +4,7 @@
"account.block": "Blokuj @{name}", "account.block": "Blokuj @{name}",
"account.block_domain": "Blokuj wszystko z {domain}", "account.block_domain": "Blokuj wszystko z {domain}",
"account.blocked": "Zablokowany(-a)", "account.blocked": "Zablokowany(-a)",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Wyślij wiadomość bezpośrednią do @{name}", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}",
"account.domain_blocked": "Ukryto domenę", "account.domain_blocked": "Ukryto domenę",
"account.edit_profile": "Edytuj profil", "account.edit_profile": "Edytuj profil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}",
"alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.",
"alert.unexpected.title": "O nie!", "alert.unexpected.title": "O nie!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
"bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.",
"bundle_column_error.retry": "Spróbuj ponownie", "bundle_column_error.retry": "Spróbuj ponownie",
@ -256,6 +258,7 @@
"navigation_bar.profile_directory": "Katalog profilów", "navigation_bar.profile_directory": "Katalog profilów",
"navigation_bar.public_timeline": "Globalna oś czasu", "navigation_bar.public_timeline": "Globalna oś czasu",
"navigation_bar.security": "Bezpieczeństwo", "navigation_bar.security": "Bezpieczeństwo",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} dodał(a) Twój wpis do ulubionych", "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych",
"notification.follow": "{name} zaczął(-ęła) Cię śledzić", "notification.follow": "{name} zaczął(-ęła) Cię śledzić",
"notification.mention": "{name} wspomniał(a) o tobie", "notification.mention": "{name} wspomniał(a) o tobie",
@ -375,14 +378,22 @@
"time_remaining.moments": "Pozostała chwila", "time_remaining.moments": "Pozostała chwila",
"time_remaining.seconds": "{number, plural, one {Pozostała # sekunda} few {Pozostały # sekundy} many {Pozostało # sekund} other {Pozostało # sekund}}", "time_remaining.seconds": "{number, plural, one {Pozostała # sekunda} few {Pozostały # sekundy} many {Pozostało # sekund} other {Pozostało # sekund}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym", "trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
"trends.refresh": "Refresh",
"ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.", "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
"upload_area.title": "Przeciągnij i upuść aby wysłać", "upload_area.title": "Przeciągnij i upuść aby wysłać",
"upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Przekroczono limit plików do wysłania.", "upload_error.limit": "Przekroczono limit plików do wysłania.",
"upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.", "upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.",
"upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących",
"upload_form.focus": "Dopasuj podgląd", "upload_form.edit": "Edit",
"upload_form.undo": "Usuń", "upload_form.undo": "Usuń",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Wysyłanie…", "upload_progress.label": "Wysyłanie…",
"video.close": "Zamknij film", "video.close": "Zamknij film",
"video.exit_fullscreen": "Opuść tryb pełnoekranowy", "video.exit_fullscreen": "Opuść tryb pełnoekranowy",

View file

@ -4,6 +4,7 @@
"account.block": "Bloquear @{name}", "account.block": "Bloquear @{name}",
"account.block_domain": "Esconder tudo de {domain}", "account.block_domain": "Esconder tudo de {domain}",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Direct Message @{name}", "account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domínio escondido", "account.domain_blocked": "Domínio escondido",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}", "account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
"alert.unexpected.message": "Um erro inesperado ocorreu.", "alert.unexpected.message": "Um erro inesperado ocorreu.",
"alert.unexpected.title": "Eita!", "alert.unexpected.title": "Eita!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez", "boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez",
"bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
"bundle_column_error.retry": "Tente novamente", "bundle_column_error.retry": "Tente novamente",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Diretório de perfis", "navigation_bar.profile_directory": "Diretório de perfis",
"navigation_bar.public_timeline": "Global", "navigation_bar.public_timeline": "Global",
"navigation_bar.security": "Segurança", "navigation_bar.security": "Segurança",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} adicionou a sua postagem aos favoritos", "notification.favourite": "{name} adicionou a sua postagem aos favoritos",
"notification.follow": "{name} te seguiu", "notification.follow": "{name} te seguiu",
"notification.mention": "{name} te mencionou", "notification.mention": "{name} te mencionou",
@ -370,14 +373,22 @@
"time_remaining.moments": "Momentos restantes", "time_remaining.moments": "Momentos restantes",
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre", "trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre",
"trends.refresh": "Refresh",
"ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.", "ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
"upload_area.title": "Arraste e solte para enviar", "upload_area.title": "Arraste e solte para enviar",
"upload_button.label": "Adicionar mídia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Adicionar mídia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limite de envio de arquivos excedido.", "upload_error.limit": "Limite de envio de arquivos excedido.",
"upload_error.poll": "Envio de arquivos não é permitido com enquetes.", "upload_error.poll": "Envio de arquivos não é permitido com enquetes.",
"upload_form.description": "Descreva a imagem para deficientes visuais", "upload_form.description": "Descreva a imagem para deficientes visuais",
"upload_form.focus": "Ajustar foco", "upload_form.edit": "Edit",
"upload_form.undo": "Remover", "upload_form.undo": "Remover",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Salvando...", "upload_progress.label": "Salvando...",
"video.close": "Fechar vídeo", "video.close": "Fechar vídeo",
"video.exit_fullscreen": "Sair da tela cheia", "video.exit_fullscreen": "Sair da tela cheia",

View file

@ -4,6 +4,7 @@
"account.block": "Bloquear @{name}", "account.block": "Bloquear @{name}",
"account.block_domain": "Esconder tudo do domínio {domain}", "account.block_domain": "Esconder tudo do domínio {domain}",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Mensagem directa @{name}", "account.direct": "Mensagem directa @{name}",
"account.domain_blocked": "Domínio escondido", "account.domain_blocked": "Domínio escondido",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Deixar de silenciar @{name}", "account.unmute_notifications": "Deixar de silenciar @{name}",
"alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.message": "Ocorreu um erro inesperado.",
"alert.unexpected.title": "Bolas!", "alert.unexpected.title": "Bolas!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
"bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
"bundle_column_error.retry": "Tente de novo", "bundle_column_error.retry": "Tente de novo",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Directório de perfis", "navigation_bar.profile_directory": "Directório de perfis",
"navigation_bar.public_timeline": "Cronologia federada", "navigation_bar.public_timeline": "Cronologia federada",
"navigation_bar.security": "Segurança", "navigation_bar.security": "Segurança",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} adicionou o teu estado aos favoritos", "notification.favourite": "{name} adicionou o teu estado aos favoritos",
"notification.follow": "{name} começou a seguir-te", "notification.follow": "{name} começou a seguir-te",
"notification.mention": "{name} mencionou-te", "notification.mention": "{name} mencionou-te",
@ -370,14 +373,22 @@
"time_remaining.moments": "Momentos restantes", "time_remaining.moments": "Momentos restantes",
"time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam", "time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam",
"trends.count_by_accounts": "{count} {rawCount, plural, uma {person} outra {people}} a falar", "trends.count_by_accounts": "{count} {rawCount, plural, uma {person} outra {people}} a falar",
"trends.refresh": "Refresh",
"ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.", "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
"upload_area.title": "Arraste e solte para enviar", "upload_area.title": "Arraste e solte para enviar",
"upload_button.label": "Adicionar media", "upload_button.label": "Adicionar media",
"upload_error.limit": "Limite máximo do ficheiro a carregar excedido.", "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.",
"upload_error.poll": "Carregamento de ficheiros não é permitido em votações.", "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.",
"upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais", "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais",
"upload_form.focus": "Alterar previsualização", "upload_form.edit": "Edit",
"upload_form.undo": "Apagar", "upload_form.undo": "Apagar",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "A enviar...", "upload_progress.label": "A enviar...",
"video.close": "Fechar vídeo", "video.close": "Fechar vídeo",
"video.exit_fullscreen": "Sair de full screen", "video.exit_fullscreen": "Sair de full screen",

View file

@ -4,6 +4,7 @@
"account.block": "Blochează @{name}", "account.block": "Blochează @{name}",
"account.block_domain": "Ascunde tot de la {domain}", "account.block_domain": "Ascunde tot de la {domain}",
"account.blocked": "Blocat", "account.blocked": "Blocat",
"account.cancel_follow_request": "Cancel follow request",
"account.direct": "Mesaj direct @{name}", "account.direct": "Mesaj direct @{name}",
"account.domain_blocked": "Domeniu ascuns", "account.domain_blocked": "Domeniu ascuns",
"account.edit_profile": "Editează profilul", "account.edit_profile": "Editează profilul",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Activează notificările de la @{name}", "account.unmute_notifications": "Activează notificările de la @{name}",
"alert.unexpected.message": "A apărut o eroare neașteptată.", "alert.unexpected.message": "A apărut o eroare neașteptată.",
"alert.unexpected.title": "Hopa!", "alert.unexpected.title": "Hopa!",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "Poți apăsa {combo} pentru a omite asta data viitoare", "boost_modal.combo": "Poți apăsa {combo} pentru a omite asta data viitoare",
"bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.", "bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.",
"bundle_column_error.retry": "Încearcă din nou", "bundle_column_error.retry": "Încearcă din nou",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Profile directory", "navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Flux global", "navigation_bar.public_timeline": "Flux global",
"navigation_bar.security": "Securitate", "navigation_bar.security": "Securitate",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} a adăugat statusul tău la favorite", "notification.favourite": "{name} a adăugat statusul tău la favorite",
"notification.follow": "{name} te urmărește", "notification.follow": "{name} te urmărește",
"notification.mention": "{name} te-a menționat", "notification.mention": "{name} te-a menționat",
@ -370,14 +373,22 @@
"time_remaining.moments": "Moments remaining", "time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} vorbesc", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} vorbesc",
"trends.refresh": "Refresh",
"ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.", "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.",
"upload_area.title": "Trage și eliberează pentru a încărca", "upload_area.title": "Trage și eliberează pentru a încărca",
"upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "File upload limit exceeded.", "upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.", "upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere", "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere",
"upload_form.focus": "Schimbă previzualizarea", "upload_form.edit": "Edit",
"upload_form.undo": "Șterge", "upload_form.undo": "Șterge",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Se Încarcă...", "upload_progress.label": "Se Încarcă...",
"video.close": "Închide video", "video.close": "Închide video",
"video.exit_fullscreen": "Închide", "video.exit_fullscreen": "Închide",

View file

@ -4,6 +4,7 @@
"account.block": "Блокировать", "account.block": "Блокировать",
"account.block_domain": "Блокировать все с {domain}", "account.block_domain": "Блокировать все с {domain}",
"account.blocked": "Заблокирован(а)", "account.blocked": "Заблокирован(а)",
"account.cancel_follow_request": "Отменить запрос",
"account.direct": "Написать @{name}", "account.direct": "Написать @{name}",
"account.domain_blocked": "Домен скрыт", "account.domain_blocked": "Домен скрыт",
"account.edit_profile": "Изменить профиль", "account.edit_profile": "Изменить профиль",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Показывать уведомления от @{name}", "account.unmute_notifications": "Показывать уведомления от @{name}",
"alert.unexpected.message": "Что-то пошло не так.", "alert.unexpected.message": "Что-то пошло не так.",
"alert.unexpected.title": "Ой!", "alert.unexpected.title": "Ой!",
"autosuggest_hashtag.per_week": "{count} / неделю",
"boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз", "boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз",
"bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.",
"bundle_column_error.retry": "Попробовать снова", "bundle_column_error.retry": "Попробовать снова",
@ -156,7 +158,7 @@
"home.column_settings.basic": "Основные", "home.column_settings.basic": "Основные",
"home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_reblogs": "Показывать продвижения",
"home.column_settings.show_replies": "Показывать ответы", "home.column_settings.show_replies": "Показывать ответы",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Обновлять в реальном времени",
"intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}", "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Заголовок списка", "lists.new.title_placeholder": "Заголовок списка",
"lists.search": "Искать из ваших подписок", "lists.search": "Искать из ваших подписок",
"lists.subheading": "Ваши списки", "lists.subheading": "Ваши списки",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}",
"loading_indicator.label": "Загрузка...", "loading_indicator.label": "Загрузка...",
"media_gallery.toggle_visible": "Показать/скрыть", "media_gallery.toggle_visible": "Показать/скрыть",
"missing_indicator.label": "Не найдено", "missing_indicator.label": "Не найдено",
@ -251,9 +253,10 @@
"navigation_bar.profile_directory": "Каталог профилей", "navigation_bar.profile_directory": "Каталог профилей",
"navigation_bar.public_timeline": "Глобальная лента", "navigation_bar.public_timeline": "Глобальная лента",
"navigation_bar.security": "Безопасность", "navigation_bar.security": "Безопасность",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} понравился Ваш статус", "notification.favourite": "{name} понравился Ваш статус",
"notification.follow": "{name} подписался(-лась) на Вас", "notification.follow": "{name} подписался (-лась) на вас",
"notification.mention": "{name} упомянул(а) Вас", "notification.mention": "{name} упомянул(а) вас",
"notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.poll": "Опрос, в котором вы приняли участие, завершился",
"notification.reblog": "{name} продвинул(а) Ваш статус", "notification.reblog": "{name} продвинул(а) Ваш статус",
"notifications.clear": "Очистить уведомления", "notifications.clear": "Очистить уведомления",
@ -316,7 +319,7 @@
"search_results.accounts": "Люди", "search_results.accounts": "Люди",
"search_results.hashtags": "Хэштеги", "search_results.hashtags": "Хэштеги",
"search_results.statuses": "Посты", "search_results.statuses": "Посты",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Поиск постов по их контенту не поддерживается на этом сервере Mastodon.",
"search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}",
"status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_account": "Открыть интерфейс модератора для @{name}",
"status.admin_status": "Открыть этот статус в интерфейсе модератора", "status.admin_status": "Открыть этот статус в интерфейсе модератора",
@ -370,14 +373,22 @@
"time_remaining.moments": "остались считанные мгновения", "time_remaining.moments": "остались считанные мгновения",
"time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}", "time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}",
"trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}", "trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}",
"trends.refresh": "Обновить",
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
"upload_area.title": "Перетащите сюда, чтобы загрузить", "upload_area.title": "Перетащите сюда, чтобы загрузить",
"upload_button.label": "Добавить медиаконтент", "upload_button.label": "Добавить медиаконтент",
"upload_error.limit": "Достигнут лимит загруженных файлов.", "upload_error.limit": "Достигнут лимит загруженных файлов.",
"upload_error.poll": "К опросам нельзя прикреплять файлы.", "upload_error.poll": "К опросам нельзя прикреплять файлы.",
"upload_form.description": "Описать для людей с нарушениями зрения", "upload_form.description": "Добавьте описание для людей с нарушениями зрения:",
"upload_form.focus": "Обрезать", "upload_form.edit": "Изменить",
"upload_form.undo": "Отменить", "upload_form.undo": "Отменить",
"upload_modal.analyzing_picture": "Обработка изображения…",
"upload_modal.apply": "Применить",
"upload_modal.description_placeholder": "На дворе трава, на траве дрова",
"upload_modal.detect_text": "Найти текст на картинке",
"upload_modal.edit_media": "Изменение медиа",
"upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.",
"upload_modal.preview_label": "Предпросмотр ({ratio})",
"upload_progress.label": "Загрузка...", "upload_progress.label": "Загрузка...",
"video.close": "Закрыть видео", "video.close": "Закрыть видео",
"video.exit_fullscreen": "Покинуть полноэкранный режим", "video.exit_fullscreen": "Покинуть полноэкранный режим",

View file

@ -4,6 +4,7 @@
"account.block": "Blokuj @{name}", "account.block": "Blokuj @{name}",
"account.block_domain": "Ukry všetko z {domain}", "account.block_domain": "Ukry všetko z {domain}",
"account.blocked": "Blokovaný/á", "account.blocked": "Blokovaný/á",
"account.cancel_follow_request": "Zruš požiadanie o sledovanie",
"account.direct": "Súkromná správa pre @{name}", "account.direct": "Súkromná správa pre @{name}",
"account.domain_blocked": "Doména ukrytá", "account.domain_blocked": "Doména ukrytá",
"account.edit_profile": "Uprav profil", "account.edit_profile": "Uprav profil",
@ -23,7 +24,7 @@
"account.mute": "Ignorovať @{name}", "account.mute": "Ignorovať @{name}",
"account.mute_notifications": "Stĺm oboznámenia od @{name}", "account.mute_notifications": "Stĺm oboznámenia od @{name}",
"account.muted": "Utíšený/á", "account.muted": "Utíšený/á",
"account.posts": "Príspevky", "account.posts": "Príspevkov",
"account.posts_with_replies": "Príspevky aj s odpoveďami", "account.posts_with_replies": "Príspevky aj s odpoveďami",
"account.report": "Nahlás @{name}", "account.report": "Nahlás @{name}",
"account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti",
@ -37,6 +38,7 @@
"account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}",
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"autosuggest_hashtag.per_week": "{count} týždenne",
"boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie",
"bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.",
"bundle_column_error.retry": "Skús to znova", "bundle_column_error.retry": "Skús to znova",
@ -137,10 +139,10 @@
"follow_request.authorize": "Povoľ prístup", "follow_request.authorize": "Povoľ prístup",
"follow_request.reject": "Odmietni", "follow_request.reject": "Odmietni",
"getting_started.developers": "Vývojári", "getting_started.developers": "Vývojári",
"getting_started.directory": "Databáza profilov", "getting_started.directory": "Zoznam profilov",
"getting_started.documentation": "Dokumentácia", "getting_started.documentation": "Dokumentácia",
"getting_started.heading": "Začni tu", "getting_started.heading": "Začni tu",
"getting_started.invite": "Pozv ľudí", "getting_started.invite": "Pozvi ľudí",
"getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.", "getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.",
"getting_started.security": "Zabezpečenie", "getting_started.security": "Zabezpečenie",
"getting_started.terms": "Podmienky prevozu", "getting_started.terms": "Podmienky prevozu",
@ -156,10 +158,10 @@
"home.column_settings.basic": "Základné", "home.column_settings.basic": "Základné",
"home.column_settings.show_reblogs": "Zobraziť povýšené", "home.column_settings.show_reblogs": "Zobraziť povýšené",
"home.column_settings.show_replies": "Ukázať odpovede", "home.column_settings.show_replies": "Ukázať odpovede",
"home.column_settings.update_live": "Update in real-time", "home.column_settings.update_live": "Aktualizuj v reálnom čase",
"intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}", "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}",
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}",
"introduction.federation.action": "Ďalej", "introduction.federation.action": "Ďalej",
"introduction.federation.federated.headline": "Federovaná", "introduction.federation.federated.headline": "Federovaná",
"introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.", "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.",
@ -222,7 +224,7 @@
"lists.new.title_placeholder": "Názov nového zoznamu", "lists.new.title_placeholder": "Názov nového zoznamu",
"lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ",
"lists.subheading": "Tvoje zoznamy", "lists.subheading": "Tvoje zoznamy",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}",
"loading_indicator.label": "Načítam...", "loading_indicator.label": "Načítam...",
"media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť",
"missing_indicator.label": "Nenájdené", "missing_indicator.label": "Nenájdené",
@ -251,6 +253,7 @@
"navigation_bar.profile_directory": "Katalóg profilov", "navigation_bar.profile_directory": "Katalóg profilov",
"navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.public_timeline": "Federovaná časová os",
"navigation_bar.security": "Zabezbečenie", "navigation_bar.security": "Zabezbečenie",
"notification.and_n_others": "a {count, plural,one {# ostatní} other {# ostatných}}",
"notification.favourite": "{name} si obľúbil/a tvoj príspevok", "notification.favourite": "{name} si obľúbil/a tvoj príspevok",
"notification.follow": "{name} ťa začal/a následovať", "notification.follow": "{name} ťa začal/a následovať",
"notification.mention": "{name} ťa spomenul/a", "notification.mention": "{name} ťa spomenul/a",
@ -278,8 +281,8 @@
"notifications.filter.polls": "Výsledky ankiet", "notifications.filter.polls": "Výsledky ankiet",
"notifications.group": "{count} oboznámení", "notifications.group": "{count} oboznámení",
"poll.closed": "Uzatvorená", "poll.closed": "Uzatvorená",
"poll.refresh": "Aktualizuj", "poll.refresh": "Obnov",
"poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasy}}", "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}",
"poll.vote": "Hlasuj", "poll.vote": "Hlasuj",
"poll_button.add_poll": "Pridaj anketu", "poll_button.add_poll": "Pridaj anketu",
"poll_button.remove_poll": "Odstráň anketu", "poll_button.remove_poll": "Odstráň anketu",
@ -316,7 +319,7 @@
"search_results.accounts": "Ľudia", "search_results.accounts": "Ľudia",
"search_results.hashtags": "Haštagy", "search_results.hashtags": "Haštagy",
"search_results.statuses": "Príspevky", "search_results.statuses": "Príspevky",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.",
"search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}",
"status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}",
"status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní",
@ -364,20 +367,28 @@
"tabs_bar.local_timeline": "Miestna", "tabs_bar.local_timeline": "Miestna",
"tabs_bar.notifications": "Oboznámenia", "tabs_bar.notifications": "Oboznámenia",
"tabs_bar.search": "Hľadaj", "tabs_bar.search": "Hľadaj",
"time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}", "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
"time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
"time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
"time_remaining.moments": "Ostáva už iba chviľka", "time_remaining.moments": "Ostáva už iba chviľka",
"time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}", "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}",
"trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}",
"trends.refresh": "Obnov",
"ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
"upload_area.title": "Pretiahni a pusť pre nahratie", "upload_area.title": "Pretiahni a pusť pre nahratie",
"upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.", "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.",
"upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.", "upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.",
"upload_form.description": "Opis pre slabo vidiacich", "upload_form.description": "Opis pre slabo vidiacich",
"upload_form.focus": "Pozmeň náhľad", "upload_form.edit": "Uprav",
"upload_form.undo": "Vymaž", "upload_form.undo": "Vymaž",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Použi",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Uprav médiá",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Nahráva sa...", "upload_progress.label": "Nahráva sa...",
"video.close": "Zavri video", "video.close": "Zavri video",
"video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",

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