Merge pull request #1199 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
commit
bce46f2057
10
Gemfile
10
Gemfile
|
@ -12,7 +12,7 @@ gem 'thor', '~> 0.20'
|
|||
gem 'hamlit-rails', '~> 0.2'
|
||||
gem 'pg', '~> 1.1'
|
||||
gem 'makara', '~> 0.4'
|
||||
gem 'pghero', '~> 2.2'
|
||||
gem 'pghero', '~> 2.3'
|
||||
gem 'dotenv-rails', '~> 2.7'
|
||||
|
||||
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 'nokogiri', '~> 1.10'
|
||||
gem 'nsa', '~> 0.2'
|
||||
gem 'oj', '~> 3.8'
|
||||
gem 'oj', '~> 3.9'
|
||||
gem 'ostatus2', '~> 2.0'
|
||||
gem 'ox', '~> 2.11'
|
||||
gem 'parslet'
|
||||
gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
|
||||
gem 'pundit', '~> 2.0'
|
||||
gem 'pundit', '~> 2.1'
|
||||
gem 'premailer-rails'
|
||||
gem 'rack-attack', '~> 6.1'
|
||||
gem 'rack-cors', '~> 1.0', require: 'rack/cors'
|
||||
|
@ -81,7 +81,7 @@ gem 'sidekiq', '~> 5.2'
|
|||
gem 'sidekiq-scheduler', '~> 3.0'
|
||||
gem 'sidekiq-unique-jobs', '~> 6.0'
|
||||
gem 'sidekiq-bulk', '~>0.2.0'
|
||||
gem 'simple-navigation', '~> 4.0'
|
||||
gem 'simple-navigation', '~> 4.1'
|
||||
gem 'simple_form', '~> 4.1'
|
||||
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
|
||||
gem 'stoplight', '~> 2.1.3'
|
||||
|
@ -134,7 +134,7 @@ group :development do
|
|||
gem 'letter_opener_web', '~> 1.3'
|
||||
gem 'memory_profiler'
|
||||
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 'bundler-audit', '~> 0.6', require: false
|
||||
|
||||
|
|
24
Gemfile.lock
24
Gemfile.lock
|
@ -387,7 +387,7 @@ GEM
|
|||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
sidekiq (>= 3.5)
|
||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
||||
oj (3.8.1)
|
||||
oj (3.9.0)
|
||||
omniauth (1.9.0)
|
||||
hashie (>= 3.4.6, < 3.7.0)
|
||||
rack (>= 1.6.2, < 3)
|
||||
|
@ -423,9 +423,9 @@ GEM
|
|||
equatable (~> 0.5.0)
|
||||
tty-color (~> 0.4.0)
|
||||
pg (1.1.4)
|
||||
pghero (2.2.1)
|
||||
activerecord
|
||||
pkg-config (1.3.7)
|
||||
pghero (2.3.0)
|
||||
activerecord (>= 5)
|
||||
pkg-config (1.3.8)
|
||||
premailer (1.11.1)
|
||||
addressable
|
||||
css_parser (>= 1.6.0)
|
||||
|
@ -445,7 +445,7 @@ GEM
|
|||
public_suffix (3.1.1)
|
||||
puma (4.1.0)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.0.1)
|
||||
pundit (2.1.0)
|
||||
activesupport (>= 3.0.0)
|
||||
raabro (1.1.6)
|
||||
rack (2.0.7)
|
||||
|
@ -555,7 +555,7 @@ GEM
|
|||
rainbow (>= 2.2.2, < 4.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 1.7)
|
||||
rubocop-rails (2.2.1)
|
||||
rubocop-rails (2.3.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 0.72.0)
|
||||
ruby-progressbar (1.10.1)
|
||||
|
@ -584,7 +584,7 @@ GEM
|
|||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||
sidekiq (>= 4.0, < 7.0)
|
||||
thor (~> 0)
|
||||
simple-navigation (4.0.5)
|
||||
simple-navigation (4.1.0)
|
||||
activesupport (>= 2.3.2)
|
||||
simple_form (4.1.0)
|
||||
actionpack (>= 5.0)
|
||||
|
@ -732,7 +732,7 @@ DEPENDENCIES
|
|||
nilsimsa!
|
||||
nokogiri (~> 1.10)
|
||||
nsa (~> 0.2)
|
||||
oj (~> 3.8)
|
||||
oj (~> 3.9)
|
||||
omniauth (~> 1.9)
|
||||
omniauth-cas (~> 1.1)
|
||||
omniauth-saml (~> 1.10)
|
||||
|
@ -743,7 +743,7 @@ DEPENDENCIES
|
|||
parallel_tests (~> 2.29)
|
||||
parslet
|
||||
pg (~> 1.1)
|
||||
pghero (~> 2.2)
|
||||
pghero (~> 2.3)
|
||||
pkg-config (~> 1.3)
|
||||
posix-spawn!
|
||||
premailer-rails
|
||||
|
@ -751,7 +751,7 @@ DEPENDENCIES
|
|||
pry-byebug (~> 3.7)
|
||||
pry-rails (~> 0.3)
|
||||
puma (~> 4.1)
|
||||
pundit (~> 2.0)
|
||||
pundit (~> 2.1)
|
||||
rack-attack (~> 6.1)
|
||||
rack-cors (~> 1.0)
|
||||
rails (~> 5.2.3)
|
||||
|
@ -767,13 +767,13 @@ DEPENDENCIES
|
|||
rspec-rails (~> 3.8)
|
||||
rspec-sidekiq (~> 3.0)
|
||||
rubocop (~> 0.74)
|
||||
rubocop-rails (~> 2.2)
|
||||
rubocop-rails (~> 2.3)
|
||||
sanitize (~> 5.0)
|
||||
sidekiq (~> 5.2)
|
||||
sidekiq-bulk (~> 0.2.0)
|
||||
sidekiq-scheduler (~> 3.0)
|
||||
sidekiq-unique-jobs (~> 6.0)
|
||||
simple-navigation (~> 4.0)
|
||||
simple-navigation (~> 4.1)
|
||||
simple_form (~> 4.1)
|
||||
simplecov (~> 0.17)
|
||||
sprockets-rails (~> 3.2)
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -4,10 +4,12 @@ class AboutController < ApplicationController
|
|||
before_action :set_pack
|
||||
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_instance_presenter
|
||||
before_action :set_expires_in
|
||||
before_action :set_expires_in, only: [:show, :more, :terms]
|
||||
|
||||
skip_before_action :require_functional!, only: [:more, :terms]
|
||||
|
||||
|
@ -19,12 +21,40 @@ class AboutController < ApplicationController
|
|||
|
||||
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
|
||||
|
||||
def require_open_federation!
|
||||
not_found if whitelist_mode?
|
||||
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
|
||||
User.new.tap do |user|
|
||||
user.build_account
|
||||
|
@ -35,7 +65,7 @@ class AboutController < ApplicationController
|
|||
helper_method :new_user
|
||||
|
||||
def set_pack
|
||||
use_pack 'common'
|
||||
use_pack 'public'
|
||||
end
|
||||
|
||||
def set_instance_presenter
|
||||
|
|
|
@ -19,6 +19,7 @@ class AccountsController < ApplicationController
|
|||
|
||||
@pinned_statuses = []
|
||||
@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)
|
||||
@statuses = []
|
||||
|
@ -28,6 +29,7 @@ class AccountsController < ApplicationController
|
|||
@pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
|
||||
@statuses = filtered_status_page(params)
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
@rss_url = rss_url
|
||||
|
||||
unless @statuses.empty?
|
||||
@older_url = older_url if @statuses.last.id > filtered_statuses.last.id
|
||||
|
@ -38,8 +40,9 @@ class AccountsController < ApplicationController
|
|||
format.rss do
|
||||
expires_in 0, public: true
|
||||
|
||||
@statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status)
|
||||
render xml: RSS::AccountSerializer.render(@account, @statuses)
|
||||
@statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE)
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag])
|
||||
end
|
||||
|
||||
format.json do
|
||||
|
@ -97,6 +100,14 @@ class AccountsController < ApplicationController
|
|||
params[:username]
|
||||
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
|
||||
pagination_url(max_id: @statuses.last.id)
|
||||
end
|
||||
|
@ -126,7 +137,7 @@ class AccountsController < ApplicationController
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
def filtered_status_page(params)
|
||||
|
|
|
@ -27,7 +27,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||
end
|
||||
|
||||
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.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
||||
end
|
||||
|
@ -38,7 +38,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||
type: :unordered,
|
||||
part_of: account_status_replies_url(@account, @status),
|
||||
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?
|
||||
|
@ -55,16 +55,17 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||
end
|
||||
|
||||
def next_page
|
||||
only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
|
||||
account_status_replies_url(
|
||||
@account,
|
||||
@status,
|
||||
page: true,
|
||||
min_id: @replies&.last&.id,
|
||||
other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
|
||||
min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id,
|
||||
only_other_accounts: only_other_accounts
|
||||
)
|
||||
end
|
||||
|
||||
def page_params
|
||||
params_slice(:other_accounts, :min_id).merge(page: true)
|
||||
params_slice(:only_other_accounts, :min_id).merge(page: true)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26,10 +26,13 @@ class ApplicationController < ActionController::Base
|
|||
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
|
||||
rescue_from ActionController::UnknownFormat, with: :not_acceptable
|
||||
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 :require_functional!, if: :user_signed_in?
|
||||
|
||||
skip_before_action :verify_authenticity_token, only: :raise_not_found
|
||||
|
||||
def raise_not_found
|
||||
raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}"
|
||||
end
|
||||
|
@ -163,6 +166,10 @@ class ApplicationController < ActionController::Base
|
|||
respond_with_error(406)
|
||||
end
|
||||
|
||||
def internal_server_error
|
||||
respond_with_error(500)
|
||||
end
|
||||
|
||||
def single_user_mode?
|
||||
@single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists?
|
||||
end
|
||||
|
|
|
@ -23,6 +23,19 @@ module SignatureVerification
|
|||
@signature_verification_failure_code || 401
|
||||
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
|
||||
return @signed_request_account if defined?(@signed_request_account)
|
||||
|
||||
|
@ -154,7 +167,7 @@ module SignatureVerification
|
|||
.with_fallback { nil }
|
||||
.with_threshold(1)
|
||||
.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
|
||||
end
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ class FollowerAccountsController < ApplicationController
|
|||
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
|
||||
before_action :set_cache_headers
|
||||
|
||||
skip_around_action :set_locale, if: -> { request.format == :json }
|
||||
|
||||
def index
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
|
|
|
@ -7,6 +7,8 @@ class FollowingAccountsController < ApplicationController
|
|||
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
|
||||
before_action :set_cache_headers
|
||||
|
||||
skip_around_action :set_locale, if: -> { request.format == :json }
|
||||
|
||||
def index
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
|
|
|
@ -5,7 +5,6 @@ class HomeController < ApplicationController
|
|||
|
||||
before_action :set_pack
|
||||
before_action :set_referrer_policy_header
|
||||
before_action :set_initial_state_json
|
||||
|
||||
def index
|
||||
@body_classes = 'app-body'
|
||||
|
@ -45,21 +44,6 @@ class HomeController < ApplicationController
|
|||
use_pack 'home'
|
||||
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
|
||||
if request.path.start_with?('/web') || whitelist_mode?
|
||||
new_user_session_path
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
class InstanceActorsController < ApplicationController
|
||||
include AccountControllerConcern
|
||||
|
||||
skip_around_action :set_locale
|
||||
|
||||
def show
|
||||
expires_in 10.minutes, public: true
|
||||
render json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to
|
||||
|
|
|
@ -48,7 +48,7 @@ class InvitesController < ApplicationController
|
|||
end
|
||||
|
||||
def resource_params
|
||||
params.require(:invite).permit(:max_uses, :expires_in, :autofollow)
|
||||
params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
|
||||
end
|
||||
|
||||
def set_body_classes
|
||||
|
|
|
@ -7,6 +7,8 @@ class MediaProxyController < ApplicationController
|
|||
|
||||
before_action :authenticate_user!, if: :whitelist_mode?
|
||||
|
||||
rescue_from ActiveRecord::RecordInvalid, with: :not_found
|
||||
|
||||
def show
|
||||
RedisLock.acquire(lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
|
|
|
@ -9,12 +9,7 @@ class PublicTimelinesController < ApplicationController
|
|||
before_action :set_body_classes
|
||||
before_action :set_instance_presenter
|
||||
|
||||
def show
|
||||
@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
|
||||
def show; end
|
||||
|
||||
private
|
||||
|
||||
|
|
|
@ -7,26 +7,10 @@ class SharesController < ApplicationController
|
|||
before_action :set_pack
|
||||
before_action :set_body_classes
|
||||
|
||||
def show
|
||||
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
|
||||
@initial_state_json = serializable_resource.to_json
|
||||
end
|
||||
def show; end
|
||||
|
||||
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
|
||||
use_pack 'share'
|
||||
end
|
||||
|
|
|
@ -18,11 +18,6 @@ class TagsController < ApplicationController
|
|||
format.html do
|
||||
use_pack 'about'
|
||||
expires_in 0, public: true
|
||||
|
||||
@initial_state_json = ActiveModelSerializers::SerializableResource.new(
|
||||
InitialStatePresenter.new(settings: {}, token: current_session&.token),
|
||||
serializer: InitialStateSerializer
|
||||
).to_json
|
||||
end
|
||||
|
||||
format.rss do
|
||||
|
|
|
@ -123,4 +123,25 @@ module ApplicationHelper
|
|||
text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence)
|
||||
text.split("\n").map { |line| '> ' + line }.join("\n")
|
||||
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
|
||||
|
|
|
@ -486,13 +486,30 @@ class Status extends ImmutablePureComponent {
|
|||
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) {
|
||||
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.get('content')}
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -628,21 +645,6 @@ class Status extends ImmutablePureComponent {
|
|||
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')}`, {
|
||||
collapsed: isCollapsed,
|
||||
'has-background': isCollapsed && background,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -15,6 +15,8 @@ import { countableText } from 'flavours/glitch/util/counter';
|
|||
import OptionsContainer from '../containers/options_container';
|
||||
import Publisher from './publisher';
|
||||
import TextareaIcons from './textarea_icons';
|
||||
import { maxChars } from 'flavours/glitch/util/initial_state';
|
||||
import CharacterCounter from './character_counter';
|
||||
|
||||
const messages = defineMessages({
|
||||
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
|
||||
if (mediaDescriptionConfirmation && onMediaDescriptionConfirm && media && media.some(item => !item.get('description'))) {
|
||||
const firstWithoutDescription = media.findIndex(item => !item.get('description'));
|
||||
if (uploadForm) {
|
||||
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);
|
||||
const firstWithoutDescription = media.find(item => !item.get('description'));
|
||||
onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null, firstWithoutDescription.get('id'));
|
||||
} else if (onSubmit) {
|
||||
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);
|
||||
|
||||
const countText = `${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`;
|
||||
|
||||
return (
|
||||
<div className='composer'>
|
||||
<WarningContainer />
|
||||
|
@ -347,6 +345,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
</div>
|
||||
</AutosuggestTextarea>
|
||||
|
||||
<div className='composer--options-wrapper'>
|
||||
<OptionsContainer
|
||||
advancedOptions={advancedOptions}
|
||||
disabled={isSubmitting}
|
||||
|
@ -357,9 +356,13 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
sensitive={sensitive || (spoilersAlwaysOn && spoilerText && spoilerText.length > 0)}
|
||||
spoiler={spoilersAlwaysOn ? (spoilerText && spoilerText.length > 0) : spoiler}
|
||||
/>
|
||||
<div className='compose--counter-wrapper'>
|
||||
<CharacterCounter text={countText} max={maxChars} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Publisher
|
||||
countText={`${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`}
|
||||
countText={countText}
|
||||
disabled={disabledButton}
|
||||
onSecondarySubmit={handleSecondarySubmit}
|
||||
onSubmit={handleSubmit}
|
||||
|
|
|
@ -49,7 +49,6 @@ class Publisher extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<div className={computedClass}>
|
||||
<span className='count'>{diff}</span>
|
||||
{sideArm && sideArm !== 'none' ? (
|
||||
<Button
|
||||
className='side_arm'
|
||||
|
|
|
@ -4,18 +4,12 @@ import PropTypes from 'prop-types';
|
|||
import Motion from 'flavours/glitch/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import Icon from 'flavours/glitch/components/icon';
|
||||
import { isUserTouching } from 'flavours/glitch/util/is_mobile';
|
||||
|
||||
const messages = defineMessages({
|
||||
description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
|
||||
});
|
||||
|
||||
// The component.
|
||||
export default @injectIntl
|
||||
class Upload extends ImmutablePureComponent {
|
||||
export default class Upload extends ImmutablePureComponent {
|
||||
|
||||
static contextTypes = {
|
||||
router: PropTypes.object,
|
||||
|
@ -23,30 +17,10 @@ class Upload extends ImmutablePureComponent {
|
|||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
onUndo: PropTypes.func.isRequired,
|
||||
onDescriptionChange: 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 => {
|
||||
e.stopPropagation();
|
||||
this.props.onUndo(this.props.media.get('id'));
|
||||
|
@ -57,69 +31,21 @@ class Upload extends ImmutablePureComponent {
|
|||
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 () {
|
||||
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 focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const x = ((focusX / 2) + .5) * 100;
|
||||
const y = ((focusY / -2) + .5) * 100;
|
||||
|
||||
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, }) }}>
|
||||
{({ scale }) => (
|
||||
<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>
|
||||
{media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></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>
|
||||
<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container';
|
|||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import UploadContainer from '../containers/upload_container';
|
||||
import SensitiveButtonContainer from '../containers/sensitive_button_container';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
export default class UploadForm extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
|
@ -15,7 +16,7 @@ export default class UploadForm extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<div className='composer--upload_form'>
|
||||
<UploadProgressContainer />
|
||||
<UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />
|
||||
|
||||
{mediaIds.size > 0 && (
|
||||
<div className='content'>
|
||||
|
|
|
@ -2,7 +2,6 @@ import React from 'react';
|
|||
import PropTypes from 'prop-types';
|
||||
import Motion from 'flavours/glitch/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import Icon from 'flavours/glitch/components/icon';
|
||||
|
||||
export default class UploadProgress extends React.PureComponent {
|
||||
|
@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent {
|
|||
static propTypes = {
|
||||
active: PropTypes.bool,
|
||||
progress: PropTypes.number,
|
||||
icon: PropTypes.string.isRequired,
|
||||
message: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { active, progress } = this.props;
|
||||
const { active, progress, icon, message } = this.props;
|
||||
|
||||
if (!active) {
|
||||
return null;
|
||||
|
@ -21,10 +22,10 @@ export default class UploadProgress extends React.PureComponent {
|
|||
|
||||
return (
|
||||
<div className='composer--upload_form--progress'>
|
||||
<Icon icon='upload' />
|
||||
<Icon icon={icon} />
|
||||
|
||||
<div className='message'>
|
||||
<FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' />
|
||||
{message}
|
||||
|
||||
<div className='backdrop'>
|
||||
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>
|
||||
|
|
|
@ -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.' },
|
||||
missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm',
|
||||
defaultMessage: 'Send anyway' },
|
||||
missingDescriptionEdit: { id: 'confirmations.missing_media_description.edit',
|
||||
defaultMessage: 'Edit media' },
|
||||
});
|
||||
|
||||
// State mapping.
|
||||
|
@ -112,11 +114,13 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
|||
dispatch(changeComposeVisibility(value));
|
||||
},
|
||||
|
||||
onMediaDescriptionConfirm(routerHistory) {
|
||||
onMediaDescriptionConfirm(routerHistory, mediaId) {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: intl.formatMessage(messages.missingDescriptionMessage),
|
||||
confirm: intl.formatMessage(messages.missingDescriptionConfirm),
|
||||
onConfirm: () => dispatch(submitCompose(routerHistory)),
|
||||
secondary: intl.formatMessage(messages.missingDescriptionEdit),
|
||||
onSecondary: () => dispatch(openModal('FOCAL_POINT', { id: mediaId })),
|
||||
onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)),
|
||||
}));
|
||||
},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { connect } from 'react-redux';
|
||||
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 { submitCompose } from 'flavours/glitch/actions/compose';
|
||||
|
||||
|
@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({
|
|||
dispatch(undoUploadCompose(id));
|
||||
},
|
||||
|
||||
onDescriptionChange: (id, description) => {
|
||||
dispatch(changeUploadCompose(id, { description }));
|
||||
},
|
||||
|
||||
onOpenFocalPoint: id => {
|
||||
dispatch(openModal('FOCAL_POINT', { id }));
|
||||
},
|
||||
|
|
|
@ -1,11 +1,26 @@
|
|||
import React from 'react';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import PropTypes from 'prop-types';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { connect } from 'react-redux';
|
||||
import ImageLoader from './image_loader';
|
||||
import classNames from 'classnames';
|
||||
import { changeUploadCompose } from 'flavours/glitch/actions/compose';
|
||||
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 }) => ({
|
||||
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
|
||||
|
@ -13,17 +28,26 @@ const mapStateToProps = (state, { id }) => ({
|
|||
|
||||
const mapDispatchToProps = (dispatch, { id }) => ({
|
||||
|
||||
onSave: (x, y) => {
|
||||
dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
|
||||
onSave: (description, x, y) => {
|
||||
dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
@connect(mapStateToProps, mapDispatchToProps)
|
||||
export default class FocalPointModal extends ImmutablePureComponent {
|
||||
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)
|
||||
@injectIntl
|
||||
class FocalPointModal extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
|
@ -32,6 +56,9 @@ export default class FocalPointModal extends ImmutablePureComponent {
|
|||
focusX: 0,
|
||||
focusY: 0,
|
||||
dragging: false,
|
||||
description: '',
|
||||
dirty: false,
|
||||
progress: 0,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -57,6 +84,14 @@ export default class FocalPointModal extends ImmutablePureComponent {
|
|||
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 => {
|
||||
this.updatePosition(e);
|
||||
}
|
||||
|
@ -66,7 +101,13 @@ export default class FocalPointModal extends ImmutablePureComponent {
|
|||
document.removeEventListener('mouseup', this.handleMouseUp);
|
||||
|
||||
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 => {
|
||||
|
@ -74,46 +115,145 @@ export default class FocalPointModal extends ImmutablePureComponent {
|
|||
const focusX = (x - .5) * 2;
|
||||
const focusY = (y - .5) * -2;
|
||||
|
||||
this.setState({ x, y, focusX, focusY });
|
||||
this.setState({ x, y, focusX, focusY, dirty: true });
|
||||
}
|
||||
|
||||
updatePositionFromMedia = media => {
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const description = media.get('description') || '';
|
||||
|
||||
if (focusX && focusY) {
|
||||
const x = (focusX / 2) + .5;
|
||||
const y = (focusY / -2) + .5;
|
||||
|
||||
this.setState({ x, y, focusX, focusY });
|
||||
this.setState({
|
||||
x,
|
||||
y,
|
||||
focusX,
|
||||
focusY,
|
||||
description,
|
||||
dirty: false,
|
||||
});
|
||||
} 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 => {
|
||||
this.node = c;
|
||||
}
|
||||
|
||||
render () {
|
||||
handleTextDetection = () => {
|
||||
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 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 (
|
||||
<div className='modal-root__modal video-modal focal-point-modal'>
|
||||
<div className={classNames('focal-point', { dragging })} ref={this.setRef}>
|
||||
<ImageLoader
|
||||
previewSrc={media.get('preview_url')}
|
||||
src={media.get('url')}
|
||||
width={width}
|
||||
height={height}
|
||||
<div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
|
||||
<div className='report-modal__target'>
|
||||
<IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
|
||||
<FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
|
||||
</div>
|
||||
|
||||
<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__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>
|
||||
);
|
||||
|
|
|
@ -101,6 +101,7 @@ export default class Video extends React.PureComponent {
|
|||
fullwidth: PropTypes.bool,
|
||||
detailed: PropTypes.bool,
|
||||
inline: PropTypes.bool,
|
||||
editable: PropTypes.bool,
|
||||
cacheWidth: PropTypes.func,
|
||||
intl: PropTypes.object.isRequired,
|
||||
visible: PropTypes.bool,
|
||||
|
@ -393,7 +394,7 @@ export default class Video extends React.PureComponent {
|
|||
}
|
||||
|
||||
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 progress = (currentTime / duration) * 100;
|
||||
const playerStyle = {};
|
||||
|
@ -401,7 +402,7 @@ export default class Video extends React.PureComponent {
|
|||
const volumeWidth = (muted) ? 0 : volume * this.volWidth;
|
||||
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;
|
||||
|
||||
|
@ -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 })} />
|
||||
|
||||
{revealed && <video
|
||||
{(revealed || editable) && <video
|
||||
ref={this.setVideoRef}
|
||||
src={src}
|
||||
poster={preview}
|
||||
|
@ -465,7 +466,7 @@ export default class Video extends React.PureComponent {
|
|||
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}>
|
||||
<span className='spoiler-button__overlay__label'>{warning}</span>
|
||||
</button>
|
||||
|
@ -508,7 +509,7 @@ export default class Video extends React.PureComponent {
|
|||
</div>
|
||||
|
||||
<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>}
|
||||
{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>
|
||||
|
|
|
@ -104,6 +104,15 @@ function main() {
|
|||
|
||||
delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original'));
|
||||
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');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -133,3 +133,17 @@ button {
|
|||
outline: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.layout-single-column .app-holder {
|
||||
&,
|
||||
& > div {
|
||||
min-height: 100vh;
|
||||
}
|
||||
}
|
||||
|
||||
.layout-multiple-columns .app-holder {
|
||||
&,
|
||||
& > div {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,18 @@
|
|||
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 {
|
||||
transition: height 0.4s ease, opacity 0.4s ease;
|
||||
}
|
||||
|
@ -489,12 +501,18 @@
|
|||
background: $simple-background-color;
|
||||
}
|
||||
|
||||
.composer--options {
|
||||
.composer--options-wrapper {
|
||||
padding: 10px;
|
||||
background: darken($simple-background-color, 8%);
|
||||
box-shadow: inset 0 5px 5px rgba($base-shadow-color, 0.05);
|
||||
border-radius: 0 0 4px 4px;
|
||||
height: 27px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.composer--options {
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
|
||||
& > * {
|
||||
|
@ -519,6 +537,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
.compose--counter-wrapper {
|
||||
align-self: center;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.composer--options--dropdown {
|
||||
&.open {
|
||||
& > .value {
|
||||
|
@ -589,13 +612,6 @@
|
|||
justify-content: flex-end;
|
||||
flex: 0 0 auto;
|
||||
|
||||
& > .count {
|
||||
display: inline-block;
|
||||
margin: 0 16px 0 8px;
|
||||
font-size: 16px;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
& > .primary {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
|
|
|
@ -3,6 +3,27 @@
|
|||
-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 {
|
||||
background-color: darken($ui-highlight-color, 3%);
|
||||
border: 10px none;
|
||||
|
|
|
@ -338,6 +338,11 @@
|
|||
position: relative;
|
||||
background: $base-shadow-color;
|
||||
max-width: 100%;
|
||||
border-radius: 4px;
|
||||
|
||||
&.editable {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 0;
|
||||
|
|
|
@ -528,7 +528,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.report-modal__statuses {
|
||||
.report-modal__statuses,
|
||||
.focal-point-modal__content {
|
||||
flex: 1 1 auto;
|
||||
min-height: 20vh;
|
||||
max-height: 80vh;
|
||||
|
@ -544,6 +545,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
.focal-point-modal__content {
|
||||
@media screen and (max-width: 480px) {
|
||||
max-height: 40vh;
|
||||
}
|
||||
}
|
||||
|
||||
.report-modal__comment {
|
||||
padding: 20px;
|
||||
border-right: 1px solid $ui-secondary-color;
|
||||
|
@ -565,16 +572,56 @@
|
|||
padding: 10px;
|
||||
font-family: inherit;
|
||||
font-size: 14px;
|
||||
resize: vertical;
|
||||
resize: none;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
border-radius: 4px;
|
||||
border: 1px solid $ui-secondary-color;
|
||||
margin-bottom: 20px;
|
||||
min-height: 100px;
|
||||
max-height: 50vh;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:focus {
|
||||
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 {
|
||||
|
@ -598,15 +645,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.report-modal__target {
|
||||
padding: 20px;
|
||||
|
||||
.media-modal__close {
|
||||
top: 19px;
|
||||
right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.actions-modal {
|
||||
.status {
|
||||
overflow-y: auto;
|
||||
|
@ -725,6 +763,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
.report-modal__target {
|
||||
padding: 15px;
|
||||
|
||||
.media-modal__close {
|
||||
top: 14px;
|
||||
right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.embed-modal {
|
||||
max-width: 80vw;
|
||||
max-height: 80vh;
|
||||
|
@ -787,19 +834,23 @@
|
|||
|
||||
.focal-point {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
|
||||
&.dragging {
|
||||
cursor: move;
|
||||
}
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: $base-shadow-color;
|
||||
|
||||
img {
|
||||
max-width: 80vw;
|
||||
img,
|
||||
video {
|
||||
display: block;
|
||||
max-height: 80vh;
|
||||
width: auto;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin: auto;
|
||||
margin: 0;
|
||||
object-fit: contain;
|
||||
background: $base-shadow-color;
|
||||
}
|
||||
|
||||
&__reticle {
|
||||
|
@ -819,6 +870,43 @@
|
|||
top: 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 {
|
||||
|
|
|
@ -135,13 +135,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
.composer--options {
|
||||
.composer--options-wrapper {
|
||||
background: lighten($ui-base-color, 10%);
|
||||
box-shadow: unset;
|
||||
|
||||
& > hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.composer--options > hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.composer--options--dropdown--content--item {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,6 +109,15 @@
|
|||
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,
|
||||
.landing-page__information.contact-widget {
|
||||
box-sizing: border-box;
|
||||
|
@ -521,6 +530,12 @@ $fluid-breakpoint: $maximum-width + 20px;
|
|||
a {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.notice-widget,
|
||||
.placeholder-widget {
|
||||
a {
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
color: $ui-highlight-color;
|
||||
|
|
|
@ -153,3 +153,7 @@ export function ListAdder () {
|
|||
export function Search () {
|
||||
return import(/*webpackChunkName: "features/glitch/async/search" */'flavours/glitch/features/search');
|
||||
}
|
||||
|
||||
export function Tesseract () {
|
||||
return import(/*webpackChunkName: "tesseract" */'tesseract.js');
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@ import { FormattedNumber } from 'react-intl';
|
|||
export const shortNumberFormat = number => {
|
||||
if (number < 1000) {
|
||||
return <FormattedNumber value={number} />;
|
||||
} else {
|
||||
} else if (number < 1000000) {
|
||||
return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>;
|
||||
} else {
|
||||
return <Fragment><FormattedNumber value={number / 1000000} maximumFractionDigits={1} />M</Fragment>;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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
|
||||
// image is perfectly white.
|
||||
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';
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
});
|
|
@ -278,12 +278,27 @@ class Status extends ImmutablePureComponent {
|
|||
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) {
|
||||
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.get('content')}
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -394,19 +409,6 @@ class Status extends ImmutablePureComponent {
|
|||
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 (
|
||||
<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}>
|
||||
|
|
|
@ -7,6 +7,7 @@ import MediaGallery from '../components/media_gallery';
|
|||
import Video from '../features/video';
|
||||
import Card from '../features/status/components/card';
|
||||
import Poll from 'mastodon/components/poll';
|
||||
import Hashtag from 'mastodon/components/hashtag';
|
||||
import ModalRoot from '../components/modal_root';
|
||||
import { getScrollbarWidth } from '../features/ui/components/modal_root';
|
||||
import MediaModal from '../features/ui/components/media_modal';
|
||||
|
@ -15,7 +16,7 @@ import { List as ImmutableList, fromJS } from 'immutable';
|
|||
const { localeData, messages } = getLocale();
|
||||
addLocaleData(localeData);
|
||||
|
||||
const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll };
|
||||
const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag };
|
||||
|
||||
export default class MediaContainer extends PureComponent {
|
||||
|
||||
|
@ -62,12 +63,13 @@ export default class MediaContainer extends PureComponent {
|
|||
{[].map.call(components, (component, i) => {
|
||||
const componentName = component.getAttribute('data-component');
|
||||
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, {
|
||||
...(media ? { media: fromJS(media) } : {}),
|
||||
...(card ? { card: fromJS(card) } : {}),
|
||||
...(poll ? { poll: fromJS(poll) } : {}),
|
||||
...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
|
||||
|
||||
...(componentName === 'Video' ? {
|
||||
onOpenVideo: this.handleOpenVideo,
|
||||
|
@ -81,6 +83,7 @@ export default class MediaContainer extends PureComponent {
|
|||
component,
|
||||
);
|
||||
})}
|
||||
|
||||
<ModalRoot onClose={this.handleCloseMedia}>
|
||||
{this.state.media && (
|
||||
<MediaModal
|
||||
|
|
|
@ -4,16 +4,11 @@ import PropTypes from 'prop-types';
|
|||
import Motion from '../../ui/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
|
||||
const messages = defineMessages({
|
||||
description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
|
||||
});
|
||||
|
||||
export default @injectIntl
|
||||
class Upload extends ImmutablePureComponent {
|
||||
export default class Upload extends ImmutablePureComponent {
|
||||
|
||||
static contextTypes = {
|
||||
router: PropTypes.object,
|
||||
|
@ -21,30 +16,10 @@ class Upload extends ImmutablePureComponent {
|
|||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
onUndo: PropTypes.func.isRequired,
|
||||
onDescriptionChange: 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 => {
|
||||
e.stopPropagation();
|
||||
this.props.onUndo(this.props.media.get('id'));
|
||||
|
@ -55,69 +30,21 @@ class Upload extends ImmutablePureComponent {
|
|||
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 () {
|
||||
const { intl, media } = this.props;
|
||||
const active = this.state.hovered || this.state.focused;
|
||||
const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || '';
|
||||
const { media } = this.props;
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const x = ((focusX / 2) + .5) * 100;
|
||||
const y = ((focusY / -2) + .5) * 100;
|
||||
|
||||
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 }) }}>
|
||||
{({ scale }) => (
|
||||
<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>
|
||||
{media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></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>
|
||||
<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container';
|
|||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import UploadContainer from '../containers/upload_container';
|
||||
import SensitiveButtonContainer from '../containers/sensitive_button_container';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
export default class UploadForm extends ImmutablePureComponent {
|
||||
|
||||
|
@ -16,7 +17,7 @@ export default class UploadForm extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<div className='compose-form__upload-wrapper'>
|
||||
<UploadProgressContainer />
|
||||
<UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />
|
||||
|
||||
<div className='compose-form__uploads-wrapper'>
|
||||
{mediaIds.map(id => (
|
||||
|
|
|
@ -2,7 +2,6 @@ import React from 'react';
|
|||
import PropTypes from 'prop-types';
|
||||
import Motion from '../../ui/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
|
||||
export default class UploadProgress extends React.PureComponent {
|
||||
|
@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent {
|
|||
static propTypes = {
|
||||
active: PropTypes.bool,
|
||||
progress: PropTypes.number,
|
||||
icon: PropTypes.string.isRequired,
|
||||
message: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { active, progress } = this.props;
|
||||
const { active, progress, icon, message } = this.props;
|
||||
|
||||
if (!active) {
|
||||
return null;
|
||||
|
@ -22,11 +23,11 @@ export default class UploadProgress extends React.PureComponent {
|
|||
return (
|
||||
<div className='upload-progress'>
|
||||
<div className='upload-progress__icon'>
|
||||
<Icon id='upload' />
|
||||
<Icon id={icon} />
|
||||
</div>
|
||||
|
||||
<div className='upload-progress__message'>
|
||||
<FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' />
|
||||
{message}
|
||||
|
||||
<div className='upload-progress__backdrop'>
|
||||
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { connect } from 'react-redux';
|
||||
import Upload from '../components/upload';
|
||||
import { undoUploadCompose, changeUploadCompose } from '../../../actions/compose';
|
||||
import { undoUploadCompose } from '../../../actions/compose';
|
||||
import { openModal } from '../../../actions/modal';
|
||||
import { submitCompose } from '../../../actions/compose';
|
||||
|
||||
|
@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({
|
|||
dispatch(undoUploadCompose(id));
|
||||
},
|
||||
|
||||
onDescriptionChange: (id, description) => {
|
||||
dispatch(changeUploadCompose(id, { description }));
|
||||
},
|
||||
|
||||
onOpenFocalPoint: id => {
|
||||
dispatch(openModal('FOCAL_POINT', { id }));
|
||||
},
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,11 +1,26 @@
|
|||
import React from 'react';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import PropTypes from 'prop-types';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { connect } from 'react-redux';
|
||||
import ImageLoader from './image_loader';
|
||||
import classNames from 'classnames';
|
||||
import { changeUploadCompose } from '../../../actions/compose';
|
||||
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 }) => ({
|
||||
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
|
||||
|
@ -13,17 +28,26 @@ const mapStateToProps = (state, { id }) => ({
|
|||
|
||||
const mapDispatchToProps = (dispatch, { id }) => ({
|
||||
|
||||
onSave: (x, y) => {
|
||||
dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
|
||||
onSave: (description, x, y) => {
|
||||
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)
|
||||
@injectIntl
|
||||
class FocalPointModal extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
|
@ -32,6 +56,9 @@ class FocalPointModal extends ImmutablePureComponent {
|
|||
focusX: 0,
|
||||
focusY: 0,
|
||||
dragging: false,
|
||||
description: '',
|
||||
dirty: false,
|
||||
progress: 0,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -57,6 +84,14 @@ class FocalPointModal extends ImmutablePureComponent {
|
|||
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 => {
|
||||
this.updatePosition(e);
|
||||
}
|
||||
|
@ -66,7 +101,13 @@ class FocalPointModal extends ImmutablePureComponent {
|
|||
document.removeEventListener('mouseup', this.handleMouseUp);
|
||||
|
||||
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 => {
|
||||
|
@ -74,46 +115,145 @@ class FocalPointModal extends ImmutablePureComponent {
|
|||
const focusX = (x - .5) * 2;
|
||||
const focusY = (y - .5) * -2;
|
||||
|
||||
this.setState({ x, y, focusX, focusY });
|
||||
this.setState({ x, y, focusX, focusY, dirty: true });
|
||||
}
|
||||
|
||||
updatePositionFromMedia = media => {
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const description = media.get('description') || '';
|
||||
|
||||
if (focusX && focusY) {
|
||||
const x = (focusX / 2) + .5;
|
||||
const y = (focusY / -2) + .5;
|
||||
|
||||
this.setState({ x, y, focusX, focusY });
|
||||
this.setState({
|
||||
x,
|
||||
y,
|
||||
focusX,
|
||||
focusY,
|
||||
description,
|
||||
dirty: false,
|
||||
});
|
||||
} 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 => {
|
||||
this.node = c;
|
||||
}
|
||||
|
||||
render () {
|
||||
handleTextDetection = () => {
|
||||
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 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 (
|
||||
<div className='modal-root__modal video-modal focal-point-modal'>
|
||||
<div className={classNames('focal-point', { dragging })} ref={this.setRef}>
|
||||
<ImageLoader
|
||||
previewSrc={media.get('preview_url')}
|
||||
src={media.get('url')}
|
||||
width={width}
|
||||
height={height}
|
||||
<div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
|
||||
<div className='report-modal__target'>
|
||||
<IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />
|
||||
<FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
|
||||
</div>
|
||||
|
||||
<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__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>
|
||||
);
|
||||
|
|
|
@ -15,9 +15,11 @@ import { expandHomeTimeline } from '../../actions/timelines';
|
|||
import { expandNotifications } from '../../actions/notifications';
|
||||
import { fetchFilters } from '../../actions/filters';
|
||||
import { clearHeight } from '../../actions/height_cache';
|
||||
import { focusApp, unfocusApp } from 'mastodon/actions/app';
|
||||
import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';
|
||||
import UploadArea from './components/upload_area';
|
||||
import ColumnsAreaContainer from './containers/columns_area_container';
|
||||
import DocumentTitle from './components/document_title';
|
||||
import {
|
||||
Compose,
|
||||
Status,
|
||||
|
@ -226,7 +228,7 @@ class UI extends React.PureComponent {
|
|||
draggingOver: false,
|
||||
};
|
||||
|
||||
handleBeforeUnload = (e) => {
|
||||
handleBeforeUnload = e => {
|
||||
const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props;
|
||||
|
||||
if (isComposing && (hasComposingText || hasMediaAttachments)) {
|
||||
|
@ -237,6 +239,14 @@ class UI extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
handleWindowFocus = () => {
|
||||
this.props.dispatch(focusApp());
|
||||
}
|
||||
|
||||
handleWindowBlur = () => {
|
||||
this.props.dispatch(unfocusApp());
|
||||
}
|
||||
|
||||
handleLayoutChange = () => {
|
||||
// The cached heights are no longer accurate, invalidate
|
||||
this.props.dispatch(clearHeight());
|
||||
|
@ -314,6 +324,8 @@ class UI extends React.PureComponent {
|
|||
}
|
||||
|
||||
componentWillMount () {
|
||||
window.addEventListener('focus', this.handleWindowFocus, false);
|
||||
window.addEventListener('blur', this.handleWindowBlur, false);
|
||||
window.addEventListener('beforeunload', this.handleBeforeUnload, false);
|
||||
|
||||
document.addEventListener('dragenter', this.handleDragEnter, false);
|
||||
|
@ -343,7 +355,10 @@ class UI extends React.PureComponent {
|
|||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
window.removeEventListener('focus', this.handleWindowFocus);
|
||||
window.removeEventListener('blur', this.handleWindowBlur);
|
||||
window.removeEventListener('beforeunload', this.handleBeforeUnload);
|
||||
|
||||
document.removeEventListener('dragenter', this.handleDragEnter);
|
||||
document.removeEventListener('dragover', this.handleDragOver);
|
||||
document.removeEventListener('drop', this.handleDrop);
|
||||
|
@ -502,6 +517,7 @@ class UI extends React.PureComponent {
|
|||
<LoadingBarContainer className='loading-bar' />
|
||||
<ModalContainer />
|
||||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||
<DocumentTitle />
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
|
|
|
@ -133,3 +133,7 @@ export function ListAdder () {
|
|||
export function Search () {
|
||||
return import(/*webpackChunkName: "features/search" */'../../search');
|
||||
}
|
||||
|
||||
export function Tesseract () {
|
||||
return import(/*webpackChunkName: "tesseract" */'tesseract.js');
|
||||
}
|
||||
|
|
|
@ -101,6 +101,7 @@ class Video extends React.PureComponent {
|
|||
onCloseVideo: PropTypes.func,
|
||||
detailed: PropTypes.bool,
|
||||
inline: PropTypes.bool,
|
||||
editable: PropTypes.bool,
|
||||
cacheWidth: PropTypes.func,
|
||||
visible: PropTypes.bool,
|
||||
onToggleVisibility: PropTypes.func,
|
||||
|
@ -375,7 +376,7 @@ class Video extends React.PureComponent {
|
|||
}
|
||||
|
||||
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 progress = (currentTime / duration) * 100;
|
||||
|
||||
|
@ -413,7 +414,7 @@ class Video extends React.PureComponent {
|
|||
return (
|
||||
<div
|
||||
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}
|
||||
ref={this.setPlayerRef}
|
||||
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 })} />
|
||||
|
||||
{revealed && <video
|
||||
{(revealed || editable) && <video
|
||||
ref={this.setVideoRef}
|
||||
src={src}
|
||||
poster={preview}
|
||||
|
@ -445,7 +446,7 @@ class Video extends React.PureComponent {
|
|||
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}>
|
||||
<span className='spoiler-button__overlay__label'>{warning}</span>
|
||||
</button>
|
||||
|
@ -489,7 +490,7 @@ class Video extends React.PureComponent {
|
|||
</div>
|
||||
|
||||
<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>}
|
||||
{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>
|
||||
|
|
|
@ -24,5 +24,6 @@ export const forceSingleColumn = !getMeta('advanced_layout');
|
|||
export const useBlurhash = getMeta('use_blurhash');
|
||||
export const usePendingItems = getMeta('use_pending_items');
|
||||
export const showTrends = getMeta('trends');
|
||||
export const title = getMeta('title');
|
||||
|
||||
export default initialState;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "حظر @{name}",
|
||||
"account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}",
|
||||
"account.blocked": "محظور",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "رسالة خاصة إلى @{name}",
|
||||
"account.domain_blocked": "النطاق مخفي",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
|
||||
"alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.",
|
||||
"alert.unexpected.title": "المعذرة!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة",
|
||||
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
|
||||
"bundle_column_error.retry": "إعادة المحاولة",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "أساسية",
|
||||
"home.column_settings.show_reblogs": "عرض الترقيات",
|
||||
"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.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
|
||||
|
@ -251,10 +253,11 @@
|
|||
"navigation_bar.profile_directory": "دليل المستخدِمين",
|
||||
"navigation_bar.public_timeline": "الخيط العام الموحد",
|
||||
"navigation_bar.security": "الأمان",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "أُعجِب {name} بمنشورك",
|
||||
"notification.follow": "{name} يتابعك",
|
||||
"notification.mention": "{name} ذكرك",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.poll": "لقد إنتها تصويت شاركت فيه",
|
||||
"notification.reblog": "{name} قام بترقية تبويقك",
|
||||
"notifications.clear": "امسح الإخطارات",
|
||||
"notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "أشخاص",
|
||||
"search_results.hashtags": "الوُسوم",
|
||||
"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}}",
|
||||
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
|
||||
"status.admin_status": "افتح هذا المنشور على واجهة الإشراف",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "لحظات متبقية",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
||||
"upload_area.title": "اسحب ثم أفلت للرفع",
|
||||
"upload_button.label": "إضافة وسائط ({formats})",
|
||||
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
|
||||
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
|
||||
"upload_form.description": "وصف للمعاقين بصريا",
|
||||
"upload_form.focus": "قص",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "يرفع...",
|
||||
"video.close": "إغلاق الفيديو",
|
||||
"video.exit_fullscreen": "الخروج من وضع الشاشة المليئة",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloquiar a @{name}",
|
||||
"account.block_domain": "Anubrir tolo de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Unviar un mensaxe direutu a @{name}",
|
||||
"account.domain_blocked": "Dominiu anubríu",
|
||||
"account.edit_profile": "Editar el perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "Asocedió un fallu inesperáu.",
|
||||
"alert.unexpected.title": "¡Ups!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Llinia temporal federada",
|
||||
"navigation_bar.security": "Seguranza",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} siguióte",
|
||||
"notification.mention": "{name} mentóte",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Descripción pa discapacitaos visuales",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Zarrar el videu",
|
||||
"video.exit_fullscreen": "Colar de la pantalla completa",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Блокирай",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Редактирай профила си",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Публичен канал",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} хареса твоята публикация",
|
||||
"notification.follow": "{name} те последва",
|
||||
"notification.mention": "{name} те спомена",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Добави медия",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "@{name} কে বন্ধ করুন",
|
||||
"account.block_domain": "{domain} থেকে সব সরিয়ে ফেলুন",
|
||||
"account.blocked": "বন্ধ করা হয়েছে",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "@{name} এর কাছে সরকারি লেখা পাঠাতে",
|
||||
"account.domain_blocked": "ওয়েবসাইট সরিয়ে ফেলা হয়েছে",
|
||||
"account.edit_profile": "নিজের পাতা সম্পাদনা করতে",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন",
|
||||
"alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।",
|
||||
"alert.unexpected.title": "ওহো!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন",
|
||||
"bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।",
|
||||
"bundle_column_error.retry": "আবার চেষ্টা করুন",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "নিজস্ব পাতার তালিকা",
|
||||
"navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
|
||||
"navigation_bar.security": "নিরাপত্তা",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
|
||||
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
|
||||
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "সময় বাকি আছে",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} কথা বলছে",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
|
||||
"upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে",
|
||||
"upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
|
||||
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
|
||||
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
|
||||
"upload_form.focus": "সাধারণ দেখাটি পরিবর্তন করতে",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "যুক্ত করতে পাঠানো হচ্ছে...",
|
||||
"video.close": "ভিডিওটি বন্ধ করতে",
|
||||
"video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloqueja @{name}",
|
||||
"account.block_domain": "Amaga-ho tot de {domain}",
|
||||
"account.blocked": "Bloquejat",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Missatge directe @{name}",
|
||||
"account.domain_blocked": "Domini ocult",
|
||||
"account.edit_profile": "Editar el perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Activar notificacions de @{name}",
|
||||
"alert.unexpected.message": "S'ha produït un error inesperat.",
|
||||
"alert.unexpected.title": "Vaja!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
|
||||
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
||||
"bundle_column_error.retry": "Torna-ho a provar",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Bàsic",
|
||||
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
||||
"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.hours": "{number, plural, one {# hora} other {# hores}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Nova llista",
|
||||
"lists.search": "Cercar entre les persones que segueixes",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Alternar visibilitat",
|
||||
"missing_indicator.label": "No trobat",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Directori de perfils",
|
||||
"navigation_bar.public_timeline": "Línia de temps federada",
|
||||
"navigation_bar.security": "Seguretat",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} ha afavorit el teu estat",
|
||||
"notification.follow": "{name} et segueix",
|
||||
"notification.mention": "{name} t'ha esmentat",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Gent",
|
||||
"search_results.hashtags": "Etiquetes",
|
||||
"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}}",
|
||||
"status.admin_account": "Obre l'interfície de moderació per a @{name}",
|
||||
"status.admin_status": "Obre aquest toot a la interfície de moderació",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments restants",
|
||||
"time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
|
||||
"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.",
|
||||
"upload_area.title": "Arrossega i deixa anar per a carregar",
|
||||
"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.poll": "No es permet l'enviament de fitxers en les enquestes.",
|
||||
"upload_form.description": "Descriure els problemes visuals",
|
||||
"upload_form.focus": "Modificar la previsualització",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Tancar el vídeo",
|
||||
"video.exit_fullscreen": "Sortir de pantalla completa",
|
||||
|
|
|
@ -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.block": "Bluccà @{name}",
|
||||
"account.block_domain": "Piattà tuttu da {domain}",
|
||||
"account.blocked": "Bluccatu",
|
||||
"account.cancel_follow_request": "Annullà a dumanda d'abbunamentu",
|
||||
"account.direct": "Missaghju direttu @{name}",
|
||||
"account.domain_blocked": "Duminiu piattatu",
|
||||
"account.edit_profile": "Mudificà u prufile",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Ùn piattà più nutificazione da @{name}",
|
||||
"alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.",
|
||||
"alert.unexpected.title": "Uups!",
|
||||
"autosuggest_hashtag.per_week": "{count} per settimana",
|
||||
"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.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.lock": "privatu",
|
||||
"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.option_placeholder": "Scelta {number}",
|
||||
"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.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.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjusterate 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.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjunghjerate unu à i vostri favuriti, 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.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à.",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Bàsichi",
|
||||
"home.column_settings.show_reblogs": "Vede e spartere",
|
||||
"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.hours": "{number, plural, one {# ora} other {# ore}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
|
||||
|
@ -218,11 +220,11 @@
|
|||
"lists.delete": "Supprime a lista",
|
||||
"lists.edit": "Mudificà a lista",
|
||||
"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.search": "Circà indè i vostr'abbunamenti",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Cambià a visibilità",
|
||||
"missing_indicator.label": "Micca trovu",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Annuariu di i prufili",
|
||||
"navigation_bar.public_timeline": "Linea pubblica glubale",
|
||||
"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.follow": "{name} v'hà seguitatu",
|
||||
"notification.mention": "{name} v'hà mintuvatu",
|
||||
|
@ -281,7 +284,7 @@
|
|||
"poll.refresh": "Attualizà",
|
||||
"poll.total_votes": "{count, plural, one {# votu} other {# voti}}",
|
||||
"poll.vote": "Vutà",
|
||||
"poll_button.add_poll": "Aghjustà un scandagliu",
|
||||
"poll_button.add_poll": "Aghjunghje",
|
||||
"poll_button.remove_poll": "Toglie u scandagliu",
|
||||
"privacy.change": "Mudificà a cunfidenzialità di u statutu",
|
||||
"privacy.direct.long": "Mandà solu à quelli chì so mintuvati",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Ghjente",
|
||||
"search_results.hashtags": "Hashtag",
|
||||
"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}}",
|
||||
"status.admin_account": "Apre l'interfaccia di muderazione per @{name}",
|
||||
"status.admin_status": "Apre stu statutu in l'interfaccia di muderazione",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Ci fermanu qualchi mumentu",
|
||||
"time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop per caricà un fugliale",
|
||||
"upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
|
||||
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
|
||||
"upload_form.description": "Discrive per i malvistosi",
|
||||
"upload_form.focus": "Cambià a vista",
|
||||
"upload_form.edit": "Mudificà",
|
||||
"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...",
|
||||
"video.close": "Chjudà a video",
|
||||
"video.exit_fullscreen": "Caccià u pienu screnu",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Zablokovat uživatele @{name}",
|
||||
"account.block_domain": "Skrýt vše z {domain}",
|
||||
"account.blocked": "Blokován/a",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Poslat přímou zprávu uživateli @{name}",
|
||||
"account.domain_blocked": "Doména skryta",
|
||||
"account.edit_profile": "Upravit profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}",
|
||||
"alert.unexpected.message": "Objevila se neočekávaná chyba.",
|
||||
"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}",
|
||||
"bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
|
||||
"bundle_column_error.retry": "Zkuste to znovu",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Základní",
|
||||
"home.column_settings.show_reblogs": "Zobrazit boosty",
|
||||
"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.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
|
||||
"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.search": "Hledejte mezi lidmi, které sledujete",
|
||||
"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…",
|
||||
"media_gallery.toggle_visible": "Přepínat viditelnost",
|
||||
"missing_indicator.label": "Nenalezeno",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Adresář profilů",
|
||||
"navigation_bar.public_timeline": "Federovaná časová osa",
|
||||
"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.follow": "{name} vás začal/a sledovat",
|
||||
"notification.mention": "{name} vás zmínil/a",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Lidé",
|
||||
"search_results.hashtags": "Hashtagy",
|
||||
"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ů}}",
|
||||
"status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}",
|
||||
"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.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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.",
|
||||
"upload_area.title": "Přetažením nahrajete",
|
||||
"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.poll": "Nahrávání souborů není povoleno u anket.",
|
||||
"upload_form.description": "Popis pro zrakově postižené",
|
||||
"upload_form.focus": "Změnit náhled",
|
||||
"upload_form.edit": "Edit",
|
||||
"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…",
|
||||
"video.close": "Zavřít video",
|
||||
"video.exit_fullscreen": "Ukončit celou obrazovku",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blocio @{name}",
|
||||
"account.block_domain": "Cuddio popeth rhag {domain}",
|
||||
"account.blocked": "Blociwyd",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Neges breifat @{name}",
|
||||
"account.domain_blocked": "Parth wedi ei guddio",
|
||||
"account.edit_profile": "Golygu proffil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
|
||||
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
|
||||
"alert.unexpected.title": "Wps!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Ceisiwch eto",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Cyfeiriadur Proffil",
|
||||
"navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
|
||||
"navigation_bar.security": "Diogelwch",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "hoffodd {name} eich tŵt",
|
||||
"notification.follow": "dilynodd {name} chi",
|
||||
"notification.mention": "Soniodd {name} amdanoch chi",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Munudau 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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
|
||||
"upload_area.title": "Llusgwch & gollwing i uwchlwytho",
|
||||
"upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
|
||||
"upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.",
|
||||
"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_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...",
|
||||
"video.close": "Cau fideo",
|
||||
"video.exit_fullscreen": "Gadael sgrîn llawn",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloker @{name}",
|
||||
"account.block_domain": "Skjul alt fra {domain}",
|
||||
"account.blocked": "Blokeret",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Send en direkte besked til @{name}",
|
||||
"account.domain_blocked": "Domænet er blevet skjult",
|
||||
"account.edit_profile": "Rediger profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
|
||||
"alert.unexpected.message": "Der opstod en uventet fejl.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.",
|
||||
"bundle_column_error.retry": "Prøv igen",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Fælles tidslinje",
|
||||
"navigation_bar.security": "Sikkerhed",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favoriserede din status",
|
||||
"notification.follow": "{name} fulgte dig",
|
||||
"notification.mention": "{name} nævnte dig",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Træk og slip for at uploade",
|
||||
"upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Beskriv for de svagtseende",
|
||||
"upload_form.focus": "Beskær",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Luk video",
|
||||
"video.exit_fullscreen": "Gå ud af fuldskærm",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "@{name} blockieren",
|
||||
"account.block_domain": "Alles von {domain} verstecken",
|
||||
"account.blocked": "Blockiert",
|
||||
"account.cancel_follow_request": "Folgeanfrage abbrechen",
|
||||
"account.direct": "Direktnachricht an @{name}",
|
||||
"account.domain_blocked": "Domain versteckt",
|
||||
"account.edit_profile": "Profil bearbeiten",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
|
||||
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
|
||||
"alert.unexpected.title": "Hoppla!",
|
||||
"autosuggest_hashtag.per_week": "{count} pro Woche",
|
||||
"boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen",
|
||||
"bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
|
||||
"bundle_column_error.retry": "Erneut versuchen",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Einfach",
|
||||
"home.column_settings.show_reblogs": "Geteilte Beiträge 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.hours": "{number, plural, one {# Stunde} other {# Stunden}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Neuer Titel der Liste",
|
||||
"lists.search": "Suche nach Leuten denen du folgst",
|
||||
"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 …",
|
||||
"media_gallery.toggle_visible": "Sichtbarkeit umschalten",
|
||||
"missing_indicator.label": "Nicht gefunden",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profilverzeichnis",
|
||||
"navigation_bar.public_timeline": "Föderierte Zeitleiste",
|
||||
"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.follow": "{name} folgt dir",
|
||||
"notification.mention": "{name} hat dich erwähnt",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Personen",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"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}}",
|
||||
"status.admin_account": "Öffne Moderationsoberfläche für @{name}",
|
||||
"status.admin_status": "Öffne Beitrag in der Moderationsoberfläche",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Schließt in Kürze",
|
||||
"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.refresh": "Aktualisieren",
|
||||
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
||||
"upload_area.title": "Zum Hochladen hereinziehen",
|
||||
"upload_button.label": "Mediendatei hinzufügen ({formats})",
|
||||
"upload_error.limit": "Dateiupload-Limit erreicht.",
|
||||
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
|
||||
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
|
||||
"upload_form.focus": "Vorschaubild bearbeiten",
|
||||
"upload_form.edit": "Bearbeiten",
|
||||
"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 …",
|
||||
"video.close": "Video schließen",
|
||||
"video.exit_fullscreen": "Vollbild verlassen",
|
||||
|
|
|
@ -71,6 +71,15 @@
|
|||
],
|
||||
"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": [
|
||||
{
|
||||
|
@ -577,6 +586,10 @@
|
|||
"defaultMessage": "Follow",
|
||||
"id": "account.follow"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Cancel follow request",
|
||||
"id": "account.cancel_follow_request"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Awaiting approval. Click to cancel follow request",
|
||||
"id": "account.requested"
|
||||
|
@ -804,6 +817,10 @@
|
|||
{
|
||||
"defaultMessage": "Muted words",
|
||||
"id": "navigation_bar.filters"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Logout",
|
||||
"id": "navigation_bar.logout"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/compose/components/action_bar.json"
|
||||
|
@ -1070,6 +1087,15 @@
|
|||
],
|
||||
"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": [
|
||||
{
|
||||
|
@ -1081,17 +1107,13 @@
|
|||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Describe for the visually impaired",
|
||||
"id": "upload_form.description"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Delete",
|
||||
"id": "upload_form.undo"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Crop",
|
||||
"id": "upload_form.focus"
|
||||
"defaultMessage": "Edit",
|
||||
"id": "upload_form.edit"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/compose/components/upload.json"
|
||||
|
@ -1292,6 +1314,15 @@
|
|||
],
|
||||
"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": [
|
||||
{
|
||||
|
@ -1872,6 +1903,10 @@
|
|||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "and {count, plural, one {# other} other {# others}}",
|
||||
"id": "notification.and_n_others"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "{name} followed you",
|
||||
"id": "notification.follow"
|
||||
|
@ -2234,6 +2269,47 @@
|
|||
],
|
||||
"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": [
|
||||
{
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Αποκλισμός @{name}",
|
||||
"account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
|
||||
"account.blocked": "Αποκλεισμένος/η",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Προσωπικό μήνυμα προς @{name}",
|
||||
"account.domain_blocked": "Κρυμμένος τομέας",
|
||||
"account.edit_profile": "Επεξεργασία προφίλ",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
|
||||
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
|
||||
"alert.unexpected.title": "Εεπ!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά",
|
||||
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
|
||||
"bundle_column_error.retry": "Δοκίμασε ξανά",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Βασικά",
|
||||
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
||||
"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.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Τίτλος νέας λίστα",
|
||||
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
|
||||
"lists.subheading": "Οι λίστες σου",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"load_pending": "{count, plural, one {# νέο} other {# νέα}}",
|
||||
"loading_indicator.label": "Φορτώνει...",
|
||||
"media_gallery.toggle_visible": "Εναλλαγή ορατότητας",
|
||||
"missing_indicator.label": "Δε βρέθηκε",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Κατάλογος λογαριασμών",
|
||||
"navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
|
||||
"navigation_bar.security": "Ασφάλεια",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
|
||||
"notification.follow": "Ο/Η {name} σε ακολούθησε",
|
||||
"notification.mention": "Ο/Η {name} σε ανέφερε",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Άνθρωποι",
|
||||
"search_results.hashtags": "Ταμπέλες",
|
||||
"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 {αποτελέσματα}}",
|
||||
"status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}",
|
||||
"status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Απομένουν στιγμές",
|
||||
"time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
|
||||
"upload_area.title": "Drag & drop για να ανεβάσεις",
|
||||
"upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
|
||||
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
|
||||
"upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης",
|
||||
"upload_form.focus": "Αλλαγή προεπισκόπησης",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "Ανεβαίνει...",
|
||||
"video.close": "Κλείσε το βίντεο",
|
||||
"video.exit_fullscreen": "Έξοδος από πλήρη οθόνη",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Block @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -256,6 +258,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -375,14 +378,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media ({formats})",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Change preview",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloki @{name}",
|
||||
"account.block_domain": "Kaŝi ĉion de {domain}",
|
||||
"account.blocked": "Blokita",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Rekte mesaĝi @{name}",
|
||||
"account.domain_blocked": "Domajno kaŝita",
|
||||
"account.edit_profile": "Redakti profilon",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
|
||||
"alert.unexpected.message": "Neatendita eraro okazis.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Bonvolu reprovi",
|
||||
|
@ -72,12 +74,12 @@
|
|||
"compose_form.lock_disclaimer.lock": "ŝlosita",
|
||||
"compose_form.placeholder": "Pri kio vi pensas?",
|
||||
"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.remove_option": "Forigi ĉi tiu elekton",
|
||||
"compose_form.publish": "Hup",
|
||||
"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.unmarked": "Aŭdovidaĵo ne markita tikla",
|
||||
"compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Bazaj agordoj",
|
||||
"home.column_settings.show_reblogs": "Montri diskonigojn",
|
||||
"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.hours": "{number, plural, one {# horo} other {# horoj}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Titolo de la nova listo",
|
||||
"lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
|
||||
"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…",
|
||||
"media_gallery.toggle_visible": "Baskuligi videblecon",
|
||||
"missing_indicator.label": "Ne trovita",
|
||||
|
@ -251,10 +253,11 @@
|
|||
"navigation_bar.profile_directory": "Profilujo",
|
||||
"navigation_bar.public_timeline": "Fratara tempolinio",
|
||||
"navigation_bar.security": "Sekureco",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} stelumis vian mesaĝon",
|
||||
"notification.follow": "{name} eksekvis 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",
|
||||
"notifications.clear": "Forviŝi 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.follow": "Novaj sekvantoj:",
|
||||
"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.reblog": "Diskonigoj:",
|
||||
"notifications.column_settings.show": "Montri en kolumno",
|
||||
|
@ -275,7 +278,7 @@
|
|||
"notifications.filter.favourites": "Stelumoj",
|
||||
"notifications.filter.follows": "Sekvoj",
|
||||
"notifications.filter.mentions": "Mencioj",
|
||||
"notifications.filter.polls": "Balotenketoj rezultoj",
|
||||
"notifications.filter.polls": "Balotenketaj rezultoj",
|
||||
"notifications.group": "{count} sciigoj",
|
||||
"poll.closed": "Finita",
|
||||
"poll.refresh": "Aktualigi",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Homoj",
|
||||
"search_results.hashtags": "Kradvortoj",
|
||||
"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}}",
|
||||
"status.admin_account": "Malfermi la kontrolan interfacon por @{name}",
|
||||
"status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",
|
||||
|
@ -364,20 +367,28 @@
|
|||
"tabs_bar.local_timeline": "Loka tempolinio",
|
||||
"tabs_bar.notifications": "Sciigoj",
|
||||
"tabs_bar.search": "Serĉi",
|
||||
"time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restanta",
|
||||
"time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restanta",
|
||||
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restanta",
|
||||
"time_remaining.moments": "Momento restanta",
|
||||
"time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restanta",
|
||||
"time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas",
|
||||
"time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restas",
|
||||
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas",
|
||||
"time_remaining.moments": "Momenteto restas",
|
||||
"time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas",
|
||||
"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.",
|
||||
"upload_area.title": "Altreni kaj lasi por alŝuti",
|
||||
"upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"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.focus": "Antaŭvido de ŝanĝo",
|
||||
"upload_form.edit": "Edit",
|
||||
"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…",
|
||||
"video.close": "Fermi videon",
|
||||
"video.exit_fullscreen": "Eksigi plenekrana",
|
||||
|
|
|
@ -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.block": "Bloquear",
|
||||
"account.block": "Bloquear a @{name}",
|
||||
"account.block_domain": "Ocultar todo de {domain}",
|
||||
"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.edit_profile": "Editar perfil",
|
||||
"account.endorse": "Mostrar en perfil",
|
||||
"account.follow": "Seguir",
|
||||
"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.empty": "Este usuario todavía no sigue a nadie.",
|
||||
"account.follows_you": "Te sigue",
|
||||
"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.media": "Multimedia",
|
||||
"account.mention": "Mencionar a @{name}",
|
||||
|
@ -37,7 +38,8 @@
|
|||
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
|
||||
"alert.unexpected.message": "Hubo un error inesperado.",
|
||||
"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.retry": "Inténtalo de nuevo",
|
||||
"bundle_column_error.title": "Error de red",
|
||||
|
@ -47,17 +49,17 @@
|
|||
"column.blocks": "Usuarios bloqueados",
|
||||
"column.community": "Línea de tiempo local",
|
||||
"column.direct": "Mensajes directos",
|
||||
"column.domain_blocks": "Dominios ocultos",
|
||||
"column.domain_blocks": "Dominios ocultados",
|
||||
"column.favourites": "Favoritos",
|
||||
"column.follow_requests": "Solicitudes de seguimiento",
|
||||
"column.home": "Inicio",
|
||||
"column.lists": "Listas",
|
||||
"column.mutes": "Usuarios silenciados",
|
||||
"column.notifications": "Notificaciones",
|
||||
"column.pins": "Toot fijado",
|
||||
"column.public": "Historia federada",
|
||||
"column.pins": "Toots fijados",
|
||||
"column.public": "Línea de tiempo federada",
|
||||
"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.moveRight_settings": "Mover columna a la derecha",
|
||||
"column_header.pin": "Fijar",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Básico",
|
||||
"home.column_settings.show_reblogs": "Mostrar retoots",
|
||||
"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.hours": "{number, plural, one {# hora} other {# horas}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Título de la nueva lista",
|
||||
"lists.search": "Buscar entre la gente a la que sigues",
|
||||
"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…",
|
||||
"media_gallery.toggle_visible": "Cambiar visibilidad",
|
||||
"missing_indicator.label": "No encontrado",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Directorio de perfiles",
|
||||
"navigation_bar.public_timeline": "Historia federada",
|
||||
"navigation_bar.security": "Seguridad",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} marcó tu estado como favorito",
|
||||
"notification.follow": "{name} te empezó a seguir",
|
||||
"notification.mention": "{name} te ha mencionado",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Gente",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"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}}",
|
||||
"status.admin_account": "Abrir interfaz de moderación para @{name}",
|
||||
"status.admin_status": "Abrir este estado en la interfaz de moderación",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Momentos 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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
||||
"upload_area.title": "Arrastra y suelta para subir",
|
||||
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Límite de subida de archivos excedido.",
|
||||
"upload_error.poll": "Subida de archivos no permitida con encuestas.",
|
||||
"upload_form.description": "Describir para los usuarios con dificultad visual",
|
||||
"upload_form.focus": "Recortar",
|
||||
"upload_form.edit": "Edit",
|
||||
"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…",
|
||||
"video.close": "Cerrar video",
|
||||
"video.exit_fullscreen": "Salir de pantalla completa",
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokeatu @{name}",
|
||||
"account.block_domain": "Ezkutatu {domain} domeinuko guztia",
|
||||
"account.blocked": "Blokeatuta",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Mezu zuzena @{name}(r)i",
|
||||
"account.domain_blocked": "Ezkutatutako domeinua",
|
||||
"account.edit_profile": "Aldatu profila",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
|
||||
"alert.unexpected.message": "Ustekabeko errore bat gertatu da.",
|
||||
"alert.unexpected.title": "Ene!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko",
|
||||
"bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.",
|
||||
"bundle_column_error.retry": "Saiatu berriro",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Oinarrizkoa",
|
||||
"home.column_settings.show_reblogs": "Erakutsi bultzadak",
|
||||
"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.hours": "{number, plural, one {ordu #} other {# ordu}}",
|
||||
"intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Zerrenda berriaren izena",
|
||||
"lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Txandakatu ikusgaitasuna",
|
||||
"missing_indicator.label": "Ez aurkitua",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profilen direktorioa",
|
||||
"navigation_bar.public_timeline": "Federatutako denbora-lerroa",
|
||||
"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.follow": "{name}(e)k jarraitzen zaitu",
|
||||
"notification.mention": "{name}(e)k aipatu zaitu",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Jendea",
|
||||
"search_results.hashtags": "Traolak",
|
||||
"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}}",
|
||||
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
|
||||
"status.admin_status": "Ireki mezu hau moderazio interfazean",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Amaitzekotan",
|
||||
"time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
|
||||
"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.",
|
||||
"upload_area.title": "Arrastatu eta jaregin igotzeko",
|
||||
"upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Fitxategi igoera muga gaindituta.",
|
||||
"upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.",
|
||||
"upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
|
||||
"upload_form.focus": "Aldatu aurrebista",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Itxi bideoa",
|
||||
"video.exit_fullscreen": "Irten pantaila osotik",
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"account.add_or_remove_from_list": "افزودن یا حذف از فهرستها",
|
||||
"account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست",
|
||||
"account.badges.bot": "ربات",
|
||||
"account.block": "مسدودسازی @{name}",
|
||||
"account.block_domain": "پنهانسازی همه چیز از سرور {domain}",
|
||||
"account.blocked": "مسدودشده",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "پیغام خصوصی به @{name}",
|
||||
"account.domain_blocked": "دامین پنهانشده",
|
||||
"account.edit_profile": "ویرایش نمایه",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "باصداکردن اعلانها از طرف @{name}",
|
||||
"alert.unexpected.message": "خطای پیشبینینشدهای رخ داد.",
|
||||
"alert.unexpected.title": "ای وای!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
|
||||
"bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
|
||||
"bundle_column_error.retry": "تلاش دوباره",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "اصلی",
|
||||
"home.column_settings.show_reblogs": "نمایش بازبوقها",
|
||||
"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.hours": "{number, plural, one {# ساعت} other {# ساعت}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "نام فهرست تازه",
|
||||
"lists.search": "بین کسانی که پی میگیرید بگردید",
|
||||
"lists.subheading": "فهرستهای شما",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}",
|
||||
"loading_indicator.label": "بارگیری...",
|
||||
"media_gallery.toggle_visible": "تغییر پیدایی",
|
||||
"missing_indicator.label": "پیدا نشد",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران",
|
||||
"navigation_bar.public_timeline": "نوشتههای همهجا",
|
||||
"navigation_bar.security": "امنیت",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} نوشتهٔ شما را پسندید",
|
||||
"notification.follow": "{name} پیگیر شما شد",
|
||||
"notification.mention": "{name} از شما نام برد",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "افراد",
|
||||
"search_results.hashtags": "هشتگها",
|
||||
"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 {نتیجه}}",
|
||||
"status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن",
|
||||
"status.admin_status": "این نوشته را در محیط مدیریت باز کن",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "زمان باقیمانده",
|
||||
"time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشتهاند}}",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.",
|
||||
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
||||
"upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.",
|
||||
"upload_error.poll": "باگذاری پرونده در نظرسنجیها ممکن نیست.",
|
||||
"upload_form.description": "نوشتهٔ توضیحی برای کمبینایان و نابینایان",
|
||||
"upload_form.focus": "تغییر پیشنمایش",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "بارگذاری...",
|
||||
"video.close": "بستن ویدیو",
|
||||
"video.exit_fullscreen": "خروج از حالت تمام صفحه",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Estä @{name}",
|
||||
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
|
||||
"account.blocked": "Estetty",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Viesti käyttäjälle @{name}",
|
||||
"account.domain_blocked": "Verkko-osoite piilotettu",
|
||||
"account.edit_profile": "Muokkaa",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta",
|
||||
"alert.unexpected.message": "Tapahtui odottamaton virhe.",
|
||||
"alert.unexpected.title": "Hups!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
|
||||
"bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.",
|
||||
"bundle_column_error.retry": "Yritä uudestaan",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Yleinen aikajana",
|
||||
"navigation_bar.security": "Tunnukset",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} tykkäsi tilastasi",
|
||||
"notification.follow": "{name} seurasi sinua",
|
||||
"notification.mention": "{name} mainitsi sinut",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
|
||||
"upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
|
||||
"upload_button.label": "Lisää mediaa",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Anna kuvaus näkörajoitteisia varten",
|
||||
"upload_form.focus": "Rajaa",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Sulje video",
|
||||
"video.exit_fullscreen": "Poistu koko näytön tilasta",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloquer @{name}",
|
||||
"account.block_domain": "Tout masquer venant de {domain}",
|
||||
"account.blocked": "Bloqué",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Envoyer un message direct à @{name}",
|
||||
"account.domain_blocked": "Domaine caché",
|
||||
"account.edit_profile": "Modifier le profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Réactiver les notifications de @{name}",
|
||||
"alert.unexpected.message": "Une erreur inattendue s’est produite.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.",
|
||||
"bundle_column_error.retry": "Réessayer",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Basique",
|
||||
"home.column_settings.show_reblogs": "Afficher les partages",
|
||||
"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.hours": "{number, plural, one {# heure} other {# heures}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Titre de la nouvelle liste",
|
||||
"lists.search": "Rechercher parmi les gens que vous suivez",
|
||||
"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…",
|
||||
"media_gallery.toggle_visible": "Modifier la visibilité",
|
||||
"missing_indicator.label": "Non trouvé",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Annuaire des profils",
|
||||
"navigation_bar.public_timeline": "Fil public global",
|
||||
"navigation_bar.security": "Sécurité",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} a ajouté à ses favoris :",
|
||||
"notification.follow": "{name} vous suit",
|
||||
"notification.mention": "{name} vous a mentionné :",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Comptes",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"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}}",
|
||||
"status.admin_account": "Ouvrir l'interface de modération pour @{name}",
|
||||
"status.admin_status": "Ouvrir ce statut dans l'interface de modération",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Encore quelques instants",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes",
|
||||
"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.",
|
||||
"upload_area.title": "Glissez et déposez pour envoyer",
|
||||
"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.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.",
|
||||
"upload_form.description": "Décrire pour les malvoyant·e·s",
|
||||
"upload_form.focus": "Modifier l’aperçu",
|
||||
"upload_form.edit": "Edit",
|
||||
"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…",
|
||||
"video.close": "Fermer la vidéo",
|
||||
"video.exit_fullscreen": "Quitter le plein écran",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloquear @{name}",
|
||||
"account.block_domain": "Ocultar calquer contido de {domain}",
|
||||
"account.blocked": "Bloqueada",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Mensaxe directa @{name}",
|
||||
"account.domain_blocked": "Dominio agochado",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Desbloquear as notificacións de @{name}",
|
||||
"alert.unexpected.message": "Aconteceu un fallo non agardado.",
|
||||
"alert.unexpected.title": "Vaia!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Inténteo de novo",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Básico",
|
||||
"home.column_settings.show_reblogs": "Mostrar repeticións",
|
||||
"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.hours": "{number, plural, one {# hora} other {# horas}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Novo título da lista",
|
||||
"lists.search": "Procurar entre a xente que segues",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Ocultar",
|
||||
"missing_indicator.label": "Non atopado",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Directorio de perfil",
|
||||
"navigation_bar.public_timeline": "Liña temporal federada",
|
||||
"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.follow": "{name} está a seguila",
|
||||
"notification.mention": "{name} mencionoute",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Xente",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"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}}",
|
||||
"status.admin_account": "Abrir interface de moderación para @{name}",
|
||||
"status.admin_status": "Abrir este estado na interface de moderación",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Está rematando",
|
||||
"time_remaining.seconds": "{number, plural, one {# segundo} other {# segundos}} restantes",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} outras {people}} conversando",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "O borrador perderase se sae de Mastodon.",
|
||||
"upload_area.title": "Arrastre e solte para subir",
|
||||
"upload_button.label": "Engadir medios ({formats})",
|
||||
"upload_error.limit": "Excedeu o límite de subida de ficheiros.",
|
||||
"upload_error.poll": "Non se poden subir ficheiros nas sondaxes.",
|
||||
"upload_form.description": "Describa para deficientes visuais",
|
||||
"upload_form.focus": "Cambiar vista previa",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Pechar video",
|
||||
"video.exit_fullscreen": "Saír da pantalla completa",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "חסימת @{name}",
|
||||
"account.block_domain": "להסתיר הכל מהקהילה {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "עריכת פרופיל",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}",
|
||||
"alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
|
||||
"alert.unexpected.title": "אופס!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
|
||||
"bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.",
|
||||
"bundle_column_error.retry": "לנסות שוב",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "חצרוצך חובב על ידי {name}",
|
||||
"notification.follow": "{name} במעקב אחרייך",
|
||||
"notification.mention": "אוזכרת על ידי {name}",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
||||
"upload_area.title": "ניתן להעלות על ידי Drag & drop",
|
||||
"upload_button.label": "הוספת מדיה",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "תיאור לכבדי ראיה",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "עולה...",
|
||||
"video.close": "סגירת וידאו",
|
||||
"video.exit_fullscreen": "יציאה ממסך מלא",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Block @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokiraj @{name}",
|
||||
"account.block_domain": "Sakrij sve sa {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Uredi profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federalni timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} je lajkao tvoj status",
|
||||
"notification.follow": "{name} te sada slijedi",
|
||||
"notification.mention": "{name} te je spomenuo",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Povuci i spusti kako bi uploadao",
|
||||
"upload_button.label": "Dodaj media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "@{name} letiltása",
|
||||
"account.block_domain": "Minden elrejtése innen: {domain}",
|
||||
"account.blocked": "Letiltva",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Közvetlen üzenet @{name} számára",
|
||||
"account.domain_blocked": "Rejtett domain",
|
||||
"account.edit_profile": "Profil szerkesztése",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
|
||||
"alert.unexpected.message": "Váratlan hiba történt.",
|
||||
"alert.unexpected.title": "Hoppá!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Próbáld újra",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Alapértelmezések",
|
||||
"home.column_settings.show_reblogs": "Megtolások 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.hours": "{number, plural, one {# óra} other {# óra}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Új lista címe",
|
||||
"lists.search": "Keresés a követett személyek között",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Láthatóság állítása",
|
||||
"missing_indicator.label": "Nincs találat",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profilok",
|
||||
"navigation_bar.public_timeline": "Föderációs idővonal",
|
||||
"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.follow": "{name} követ téged",
|
||||
"notification.mention": "{name} megemlített",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Emberek",
|
||||
"search_results.hashtags": "Hashtagek",
|
||||
"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}}",
|
||||
"status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz",
|
||||
"status.admin_status": "Tülk megnyitása moderációra",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Pillanatok vannak 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.refresh": "Refresh",
|
||||
"ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodon-t.",
|
||||
"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_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_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_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...",
|
||||
"video.close": "Videó bezárása",
|
||||
"video.exit_fullscreen": "Kilépés teljes képernyőből",
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
{
|
||||
"account.add_or_remove_from_list": "Add or Remove from lists",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.bot": "Բոտ",
|
||||
"account.block": "Արգելափակել @{name}֊ին",
|
||||
"account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Խմբագրել անձնական էջը",
|
||||
"account.endorse": "Feature on profile",
|
||||
"account.follow": "Հետեւել",
|
||||
"account.followers": "Հետեւվողներ",
|
||||
"account.followers": "Հետեւողներ",
|
||||
"account.followers.empty": "No one follows this user yet.",
|
||||
"account.follows": "Հետեւում է",
|
||||
"account.follows.empty": "This user doesn't follow anyone yet.",
|
||||
|
@ -36,7 +37,8 @@
|
|||
"account.unmute": "Ապալռեցնել @{name}֊ին",
|
||||
"account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
|
||||
"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}՝ սա հաջորդ անգամ բաց թողնելու համար",
|
||||
"bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։",
|
||||
"bundle_column_error.retry": "Կրկին փորձել",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Դաշնային հոսք",
|
||||
"navigation_bar.security": "Անվտանգություն",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} հավանեց թութդ",
|
||||
"notification.follow": "{name} սկսեց հետեւել քեզ",
|
||||
"notification.mention": "{name} նշեց քեզ",
|
||||
|
@ -313,7 +316,7 @@
|
|||
"search_popout.tips.status": "թութ",
|
||||
"search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
|
||||
"search_popout.tips.user": "օգտատեր",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.accounts": "Մարդիկ",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"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.local_timeline": "Տեղական",
|
||||
"tabs_bar.notifications": "Ծանուցումներ",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Փնտրել",
|
||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
||||
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
|
||||
"upload_button.label": "Ավելացնել մեդիա",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "Վերբեռնվում է…",
|
||||
"video.close": "Փակել տեսագրությունը",
|
||||
"video.exit_fullscreen": "Անջատել լիաէկրան դիտումը",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokir @{name}",
|
||||
"account.block_domain": "Sembunyikan segalanya dari {domain}",
|
||||
"account.blocked": "Terblokir",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain disembunyikan",
|
||||
"account.edit_profile": "Ubah profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Munculkan notifikasi dari @{name}",
|
||||
"alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
|
||||
"bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.",
|
||||
"bundle_column_error.retry": "Coba lagi",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Linimasa gabungan",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} menyukai status anda",
|
||||
"notification.follow": "{name} mengikuti anda",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Seret & lepaskan untuk mengunggah",
|
||||
"upload_button.label": "Tambahkan media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"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_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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Keluar dari layar penuh",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokusar @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modifikar profilo",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federata tempolineo",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favorizis tua mesajo",
|
||||
"notification.follow": "{name} sequeskis tu",
|
||||
"notification.mention": "{name} mencionis tu",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Tranar faligar por kargar",
|
||||
"upload_button.label": "Adjuntar kontenajo",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blocca @{name}",
|
||||
"account.block_domain": "Nascondi tutto da {domain}",
|
||||
"account.blocked": "Bloccato",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Invia messaggio privato a @{name}",
|
||||
"account.domain_blocked": "Dominio nascosto",
|
||||
"account.edit_profile": "Modifica profilo",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Non silenziare più le notifiche da @{name}",
|
||||
"alert.unexpected.message": "Si è verificato un errore inatteso.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per settimana",
|
||||
"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.retry": "Riprova",
|
||||
|
@ -66,7 +68,7 @@
|
|||
"column_subheading.settings": "Impostazioni",
|
||||
"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_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.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",
|
||||
|
@ -137,7 +139,7 @@
|
|||
"follow_request.authorize": "Autorizza",
|
||||
"follow_request.reject": "Rifiuta",
|
||||
"getting_started.developers": "Sviluppatori",
|
||||
"getting_started.directory": "Directory del profilo",
|
||||
"getting_started.directory": "Directory dei profili",
|
||||
"getting_started.documentation": "Documentazione",
|
||||
"getting_started.heading": "Come iniziare",
|
||||
"getting_started.invite": "Invita qualcuno",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Semplice",
|
||||
"home.column_settings.show_reblogs": "Mostra post condivisi",
|
||||
"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.hours": "{number, plural, one {# ora} other {# ore}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Titolo della nuova lista",
|
||||
"lists.search": "Cerca tra le persone che segui",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Imposta visibilità",
|
||||
"missing_indicator.label": "Non trovato",
|
||||
|
@ -239,7 +241,7 @@
|
|||
"navigation_bar.favourites": "Apprezzati",
|
||||
"navigation_bar.filters": "Parole silenziate",
|
||||
"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.keyboard_shortcuts": "Tasti di scelta rapida",
|
||||
"navigation_bar.lists": "Liste",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Directory dei profili",
|
||||
"navigation_bar.public_timeline": "Timeline federata",
|
||||
"navigation_bar.security": "Sicurezza",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} ha apprezzato il tuo post",
|
||||
"notification.follow": "{name} ha iniziato a seguirti",
|
||||
"notification.mention": "{name} ti ha menzionato",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Gente",
|
||||
"search_results.hashtags": "Hashtag",
|
||||
"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}}",
|
||||
"status.admin_account": "Apri interfaccia di moderazione per @{name}",
|
||||
"status.admin_status": "Apri questo status nell'interfaccia di moderazione",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Restano pochi istanti",
|
||||
"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.refresh": "Aggiorna",
|
||||
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
|
||||
"upload_area.title": "Trascina per caricare",
|
||||
"upload_button.label": "Aggiungi file multimediale",
|
||||
"upload_error.limit": "Limite al caricamento di file superato.",
|
||||
"upload_error.poll": "Caricamento file non consentito nei sondaggi.",
|
||||
"upload_form.description": "Descrizione per utenti con disabilità visive",
|
||||
"upload_form.focus": "Modifica anteprima",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Chiudi video",
|
||||
"video.exit_fullscreen": "Esci da modalità a schermo intero",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "@{name}さんをブロック",
|
||||
"account.block_domain": "{domain}全体を非表示",
|
||||
"account.blocked": "ブロック済み",
|
||||
"account.cancel_follow_request": "フォローリクエストを取り消す",
|
||||
"account.direct": "@{name}さんにダイレクトメッセージ",
|
||||
"account.domain_blocked": "ドメイン非表示中",
|
||||
"account.edit_profile": "プロフィール編集",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
|
||||
"alert.unexpected.message": "不明なエラーが発生しました。",
|
||||
"alert.unexpected.title": "エラー!",
|
||||
"autosuggest_hashtag.per_week": "{count} 回 / 週",
|
||||
"boost_modal.combo": "次からは{combo}を押せばスキップできます",
|
||||
"bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
|
||||
"bundle_column_error.retry": "再試行",
|
||||
|
@ -160,7 +162,7 @@
|
|||
"home.column_settings.basic": "基本設定",
|
||||
"home.column_settings.show_reblogs": "ブースト表示",
|
||||
"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.hours": "{number}時間",
|
||||
"intervals.full.minutes": "{number}分",
|
||||
|
@ -226,7 +228,7 @@
|
|||
"lists.new.title_placeholder": "新規リスト名",
|
||||
"lists.search": "フォローしている人の中から検索",
|
||||
"lists.subheading": "あなたのリスト",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"load_pending": "{count} 件の新着",
|
||||
"loading_indicator.label": "読み込み中...",
|
||||
"media_gallery.toggle_visible": "表示切り替え",
|
||||
"missing_indicator.label": "見つかりません",
|
||||
|
@ -256,6 +258,7 @@
|
|||
"navigation_bar.public_timeline": "連合タイムライン",
|
||||
"navigation_bar.misc": "その他",
|
||||
"navigation_bar.security": "セキュリティ",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
|
||||
"notification.follow": "{name}さんにフォローされました",
|
||||
"notification.mention": "{name}さんがあなたに返信しました",
|
||||
|
@ -321,7 +324,7 @@
|
|||
"search_results.accounts": "人々",
|
||||
"search_results.hashtags": "ハッシュタグ",
|
||||
"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}件の結果",
|
||||
"status.admin_account": "@{name} のモデレーション画面を開く",
|
||||
"status.admin_status": "このトゥートをモデレーション画面で開く",
|
||||
|
@ -375,14 +378,22 @@
|
|||
"time_remaining.moments": "まもなく終了",
|
||||
"time_remaining.seconds": "残り{number}秒",
|
||||
"trends.count_by_accounts": "{count}人がトゥート",
|
||||
"trends.refresh": "更新",
|
||||
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
||||
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
||||
"upload_button.label": "メディアを追加 ({formats})",
|
||||
"upload_error.limit": "アップロードできる上限を超えています。",
|
||||
"upload_error.poll": "アンケートではファイルをアップロードできません。",
|
||||
"upload_form.description": "視覚障害者のための説明",
|
||||
"upload_form.focus": "プレビューを変更",
|
||||
"upload_form.edit": "編集",
|
||||
"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": "アップロード中...",
|
||||
"video.close": "動画を閉じる",
|
||||
"video.exit_fullscreen": "全画面を終了する",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "დაბლოკე @{name}",
|
||||
"account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}",
|
||||
"account.blocked": "დაიბლოკა",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "პირდაპირი წერილი @{name}-ს",
|
||||
"account.domain_blocked": "დომენი დამალულია",
|
||||
"account.edit_profile": "პროფილის ცვლილება",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან",
|
||||
"alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.",
|
||||
"alert.unexpected.title": "უპს!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს",
|
||||
"bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
|
||||
"bundle_column_error.retry": "სცადეთ კიდევ ერთხელ",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
|
||||
"navigation_bar.security": "უსაფრთხოება",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
|
||||
"notification.follow": "{name} გამოგყვათ",
|
||||
"notification.mention": "{name}-მა გასახელათ",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
|
||||
"upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
|
||||
"upload_button.label": "მედიის დამატება",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
|
||||
"upload_form.focus": "კროპი",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "იტვირთება...",
|
||||
"video.close": "ვიდეოს დახურვა",
|
||||
"video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Бұғаттау @{name}",
|
||||
"account.block_domain": "Домендегі барлығын бұғатта {domain}",
|
||||
"account.blocked": "Бұғатталды",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Жеке хат @{name}",
|
||||
"account.domain_blocked": "Домен жабық",
|
||||
"account.edit_profile": "Профильді өңдеу",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name} ескертпелерін көрсету",
|
||||
"alert.unexpected.message": "Бір нәрсе дұрыс болмады.",
|
||||
"alert.unexpected.title": "Өй!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}",
|
||||
"bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.",
|
||||
"bundle_column_error.retry": "Қайтадан көріңіз",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Жаһандық желі",
|
||||
"navigation_bar.security": "Қауіпсіздік",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} жазбаңызды таңдаулыға қосты",
|
||||
"notification.follow": "{name} сізге жазылды",
|
||||
"notification.mention": "{name} сізді атап өтті",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Қалған уақыт",
|
||||
"time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} жазған екен",
|
||||
"trends.refresh": "Refresh",
|
||||
"ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.",
|
||||
"upload_area.title": "Жүктеу үшін сүйреп әкеліңіз",
|
||||
"upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.",
|
||||
"upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.",
|
||||
"upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз",
|
||||
"upload_form.focus": "Превьюді өзгерту",
|
||||
"upload_form.edit": "Edit",
|
||||
"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": "Жүктеп жатыр...",
|
||||
"video.close": "Видеоны жабу",
|
||||
"video.exit_fullscreen": "Толық экраннан шық",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "@{name}을 차단",
|
||||
"account.block_domain": "{domain} 전체를 숨김",
|
||||
"account.blocked": "차단 됨",
|
||||
"account.cancel_follow_request": "팔로우 요청 취소",
|
||||
"account.direct": "@{name}으로부터의 다이렉트 메시지",
|
||||
"account.domain_blocked": "도메인 숨겨짐",
|
||||
"account.edit_profile": "프로필 편집",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name}의 알림 뮤트 해제",
|
||||
"alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.",
|
||||
"alert.unexpected.title": "앗!",
|
||||
"autosuggest_hashtag.per_week": "주간 {count}회",
|
||||
"boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다",
|
||||
"bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.",
|
||||
"bundle_column_error.retry": "다시 시도",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "기본 설정",
|
||||
"home.column_settings.show_reblogs": "부스트 표시",
|
||||
"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.hours": "{number} 시간",
|
||||
"intervals.full.minutes": "{number} 분",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "새 리스트의 이름",
|
||||
"lists.search": "팔로우 중인 사람들 중에서 찾기",
|
||||
"lists.subheading": "당신의 리스트",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"load_pending": "{count}개의 새 항목",
|
||||
"loading_indicator.label": "불러오는 중...",
|
||||
"media_gallery.toggle_visible": "표시 전환",
|
||||
"missing_indicator.label": "찾을 수 없습니다",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "프로필 디렉토리",
|
||||
"navigation_bar.public_timeline": "연합 타임라인",
|
||||
"navigation_bar.security": "보안",
|
||||
"notification.and_n_others": "그리고 {count}개의 기타 항목",
|
||||
"notification.favourite": "{name}님이 즐겨찾기 했습니다",
|
||||
"notification.follow": "{name}님이 나를 팔로우 했습니다",
|
||||
"notification.mention": "{name}님이 답글을 보냈습니다",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "사람",
|
||||
"search_results.hashtags": "해시태그",
|
||||
"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}건의 결과",
|
||||
"status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기",
|
||||
"status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "남은 시간",
|
||||
"time_remaining.seconds": "{number} 초 남음",
|
||||
"trends.count_by_accounts": "{count} 명의 사람들이 말하고 있습니다",
|
||||
"trends.refresh": "새로고침",
|
||||
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
||||
"upload_area.title": "드래그 & 드롭으로 업로드",
|
||||
"upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "파일 업로드 제한에 도달했습니다.",
|
||||
"upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.",
|
||||
"upload_form.description": "시각장애인을 위한 설명",
|
||||
"upload_form.focus": "미리보기 변경",
|
||||
"upload_form.edit": "편집",
|
||||
"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": "업로드 중...",
|
||||
"video.close": "동영상 닫기",
|
||||
"video.exit_fullscreen": "전체화면 나가기",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Block @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media ({formats})",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloķēt @{name}",
|
||||
"account.block_domain": "Slēpt visu no {domain}",
|
||||
"account.blocked": "Bloķēts",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Privātā ziņa @{name}",
|
||||
"account.domain_blocked": "Domēns ir paslēpts",
|
||||
"account.edit_profile": "Labot profilu",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}",
|
||||
"alert.unexpected.message": "Negaidīta kļūda.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Mēģini vēlreiz",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media ({formats})",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Block @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Add media ({formats})",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokkeer @{name}",
|
||||
"account.block_domain": "Verberg alles van {domain}",
|
||||
"account.blocked": "Geblokkeerd",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domein verborgen",
|
||||
"account.edit_profile": "Profiel bewerken",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "@{name} meldingen niet langer negeren",
|
||||
"alert.unexpected.message": "Er deed zich een onverwachte fout voor",
|
||||
"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",
|
||||
"bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
|
||||
"bundle_column_error.retry": "Opnieuw proberen",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Gebruikersgids",
|
||||
"navigation_bar.public_timeline": "Globale tijdlijn",
|
||||
"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.follow": "{name} volgt jou nu",
|
||||
"notification.mention": "{name} vermeldde jou",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Nog enkele ogenblikken resterend",
|
||||
"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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
|
||||
"upload_area.title": "Hiernaar toe slepen om te uploaden",
|
||||
"upload_button.label": "Media toevoegen ({formats})",
|
||||
"upload_error.limit": "Uploadlimiet van bestand overschreden.",
|
||||
"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.focus": "Voorvertoning aanpassen",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Video sluiten",
|
||||
"video.exit_fullscreen": "Volledig scherm sluiten",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokkér @{name}",
|
||||
"account.block_domain": "Skjul alt fra {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Rediger profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Vis varsler fra @{name}",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Prøv igjen",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Felles tidslinje",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} likte din status",
|
||||
"notification.follow": "{name} fulgte deg",
|
||||
"notification.mention": "{name} nevnte deg",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Dra og slipp for å laste opp",
|
||||
"upload_button.label": "Legg til media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.description": "Beskriv for synshemmede",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Lukk video",
|
||||
"video.exit_fullscreen": "Lukk fullskjerm",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blocar @{name}",
|
||||
"account.block_domain": "Tot amagar del domeni {domain}",
|
||||
"account.blocked": "Blocat",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Escriure un MP a @{name}",
|
||||
"account.domain_blocked": "Domeni amagat",
|
||||
"account.edit_profile": "Modificar lo perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Mostrar las notificacions de @{name}",
|
||||
"alert.unexpected.message": "Una error s’es producha.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.",
|
||||
"bundle_column_error.retry": "Tornar ensajar",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.show_reblogs": "Mostrar los partatges",
|
||||
"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.hours": "{number, plural, one {# ora} other {# oras}}",
|
||||
"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.search": "Cercar demest lo monde que seguètz",
|
||||
"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…",
|
||||
"media_gallery.toggle_visible": "Modificar la visibilitat",
|
||||
"missing_indicator.label": "Pas trobat",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Annuari de perfils",
|
||||
"navigation_bar.public_timeline": "Flux public global",
|
||||
"navigation_bar.security": "Seguretat",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} a ajustat a sos favorits",
|
||||
"notification.follow": "{name} vos sèc",
|
||||
"notification.mention": "{name} vos a mencionat",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Gents",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"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}}",
|
||||
"status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}",
|
||||
"status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments restants",
|
||||
"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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
|
||||
"upload_area.title": "Lisatz e depausatz per mandar",
|
||||
"upload_button.label": "Ajustar un mèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Talha maximum pels mandadís subrepassada.",
|
||||
"upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.",
|
||||
"upload_form.description": "Descripcion pels mal vesents",
|
||||
"upload_form.focus": "Modificar l’apercebut",
|
||||
"upload_form.edit": "Edit",
|
||||
"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…",
|
||||
"video.close": "Tampar la vidèo",
|
||||
"video.exit_fullscreen": "Sortir plen ecran",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokuj @{name}",
|
||||
"account.block_domain": "Blokuj wszystko z {domain}",
|
||||
"account.blocked": "Zablokowany(-a)",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Wyślij wiadomość bezpośrednią do @{name}",
|
||||
"account.domain_blocked": "Ukryto domenę",
|
||||
"account.edit_profile": "Edytuj profil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}",
|
||||
"alert.unexpected.message": "Wystąpił nieoczekiwany błąd.",
|
||||
"alert.unexpected.title": "O nie!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Spróbuj ponownie",
|
||||
|
@ -256,6 +258,7 @@
|
|||
"navigation_bar.profile_directory": "Katalog profilów",
|
||||
"navigation_bar.public_timeline": "Globalna oś czasu",
|
||||
"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.follow": "{name} zaczął(-ęła) Cię śledzić",
|
||||
"notification.mention": "{name} wspomniał(a) o tobie",
|
||||
|
@ -375,14 +378,22 @@
|
|||
"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}}",
|
||||
"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.",
|
||||
"upload_area.title": "Przeciągnij i upuść aby wysłać",
|
||||
"upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Przekroczono limit plików do wysłania.",
|
||||
"upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.",
|
||||
"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_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…",
|
||||
"video.close": "Zamknij film",
|
||||
"video.exit_fullscreen": "Opuść tryb pełnoekranowy",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloquear @{name}",
|
||||
"account.block_domain": "Esconder tudo de {domain}",
|
||||
"account.blocked": "Bloqueado",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domínio escondido",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
|
||||
"alert.unexpected.message": "Um erro inesperado ocorreu.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
|
||||
"bundle_column_error.retry": "Tente novamente",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Diretório de perfis",
|
||||
"navigation_bar.public_timeline": "Global",
|
||||
"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.follow": "{name} te seguiu",
|
||||
"notification.mention": "{name} te mencionou",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Momentos 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.refresh": "Refresh",
|
||||
"ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
|
||||
"upload_area.title": "Arraste e solte para enviar",
|
||||
"upload_button.label": "Adicionar mídia (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Limite de envio de arquivos excedido.",
|
||||
"upload_error.poll": "Envio de arquivos não é permitido com enquetes.",
|
||||
"upload_form.description": "Descreva a imagem para deficientes visuais",
|
||||
"upload_form.focus": "Ajustar foco",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Fechar vídeo",
|
||||
"video.exit_fullscreen": "Sair da tela cheia",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Bloquear @{name}",
|
||||
"account.block_domain": "Esconder tudo do domínio {domain}",
|
||||
"account.blocked": "Bloqueado",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Mensagem directa @{name}",
|
||||
"account.domain_blocked": "Domínio escondido",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Deixar de silenciar @{name}",
|
||||
"alert.unexpected.message": "Ocorreu um erro inesperado.",
|
||||
"alert.unexpected.title": "Bolas!",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"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.retry": "Tente de novo",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Directório de perfis",
|
||||
"navigation_bar.public_timeline": "Cronologia federada",
|
||||
"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.follow": "{name} começou a seguir-te",
|
||||
"notification.mention": "{name} mencionou-te",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Momentos restantes",
|
||||
"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.refresh": "Refresh",
|
||||
"ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
|
||||
"upload_area.title": "Arraste e solte para enviar",
|
||||
"upload_button.label": "Adicionar media",
|
||||
"upload_error.limit": "Limite máximo do ficheiro a carregar excedido.",
|
||||
"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.focus": "Alterar previsualização",
|
||||
"upload_form.edit": "Edit",
|
||||
"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...",
|
||||
"video.close": "Fechar vídeo",
|
||||
"video.exit_fullscreen": "Sair de full screen",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blochează @{name}",
|
||||
"account.block_domain": "Ascunde tot de la {domain}",
|
||||
"account.blocked": "Blocat",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Mesaj direct @{name}",
|
||||
"account.domain_blocked": "Domeniu ascuns",
|
||||
"account.edit_profile": "Editează profilul",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Activează notificările de la @{name}",
|
||||
"alert.unexpected.message": "A apărut o eroare neașteptată.",
|
||||
"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",
|
||||
"bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.",
|
||||
"bundle_column_error.retry": "Încearcă din nou",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Profile directory",
|
||||
"navigation_bar.public_timeline": "Flux global",
|
||||
"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.follow": "{name} te urmărește",
|
||||
"notification.mention": "{name} te-a menționat",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"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.",
|
||||
"upload_area.title": "Trage și eliberează pentru a încărca",
|
||||
"upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"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_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ă...",
|
||||
"video.close": "Închide video",
|
||||
"video.exit_fullscreen": "Închide",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Блокировать",
|
||||
"account.block_domain": "Блокировать все с {domain}",
|
||||
"account.blocked": "Заблокирован(а)",
|
||||
"account.cancel_follow_request": "Отменить запрос",
|
||||
"account.direct": "Написать @{name}",
|
||||
"account.domain_blocked": "Домен скрыт",
|
||||
"account.edit_profile": "Изменить профиль",
|
||||
|
@ -37,6 +38,7 @@
|
|||
"account.unmute_notifications": "Показывать уведомления от @{name}",
|
||||
"alert.unexpected.message": "Что-то пошло не так.",
|
||||
"alert.unexpected.title": "Ой!",
|
||||
"autosuggest_hashtag.per_week": "{count} / неделю",
|
||||
"boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз",
|
||||
"bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.",
|
||||
"bundle_column_error.retry": "Попробовать снова",
|
||||
|
@ -156,7 +158,7 @@
|
|||
"home.column_settings.basic": "Основные",
|
||||
"home.column_settings.show_reblogs": "Показывать продвижения",
|
||||
"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.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"lists.new.title_placeholder": "Заголовок списка",
|
||||
"lists.search": "Искать из ваших подписок",
|
||||
"lists.subheading": "Ваши списки",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}",
|
||||
"loading_indicator.label": "Загрузка...",
|
||||
"media_gallery.toggle_visible": "Показать/скрыть",
|
||||
"missing_indicator.label": "Не найдено",
|
||||
|
@ -251,9 +253,10 @@
|
|||
"navigation_bar.profile_directory": "Каталог профилей",
|
||||
"navigation_bar.public_timeline": "Глобальная лента",
|
||||
"navigation_bar.security": "Безопасность",
|
||||
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
|
||||
"notification.favourite": "{name} понравился Ваш статус",
|
||||
"notification.follow": "{name} подписался(-лась) на Вас",
|
||||
"notification.mention": "{name} упомянул(а) Вас",
|
||||
"notification.follow": "{name} подписался (-лась) на вас",
|
||||
"notification.mention": "{name} упомянул(а) вас",
|
||||
"notification.poll": "Опрос, в котором вы приняли участие, завершился",
|
||||
"notification.reblog": "{name} продвинул(а) Ваш статус",
|
||||
"notifications.clear": "Очистить уведомления",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Люди",
|
||||
"search_results.hashtags": "Хэштеги",
|
||||
"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 {результатов}}",
|
||||
"status.admin_account": "Открыть интерфейс модератора для @{name}",
|
||||
"status.admin_status": "Открыть этот статус в интерфейсе модератора",
|
||||
|
@ -370,14 +373,22 @@
|
|||
"time_remaining.moments": "остались считанные мгновения",
|
||||
"time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}",
|
||||
"trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}",
|
||||
"trends.refresh": "Обновить",
|
||||
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
||||
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
||||
"upload_button.label": "Добавить медиаконтент",
|
||||
"upload_error.limit": "Достигнут лимит загруженных файлов.",
|
||||
"upload_error.poll": "К опросам нельзя прикреплять файлы.",
|
||||
"upload_form.description": "Описать для людей с нарушениями зрения",
|
||||
"upload_form.focus": "Обрезать",
|
||||
"upload_form.description": "Добавьте описание для людей с нарушениями зрения:",
|
||||
"upload_form.edit": "Изменить",
|
||||
"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": "Загрузка...",
|
||||
"video.close": "Закрыть видео",
|
||||
"video.exit_fullscreen": "Покинуть полноэкранный режим",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"account.block": "Blokuj @{name}",
|
||||
"account.block_domain": "Ukry všetko z {domain}",
|
||||
"account.blocked": "Blokovaný/á",
|
||||
"account.cancel_follow_request": "Zruš požiadanie o sledovanie",
|
||||
"account.direct": "Súkromná správa pre @{name}",
|
||||
"account.domain_blocked": "Doména ukrytá",
|
||||
"account.edit_profile": "Uprav profil",
|
||||
|
@ -23,7 +24,7 @@
|
|||
"account.mute": "Ignorovať @{name}",
|
||||
"account.mute_notifications": "Stĺm oboznámenia od @{name}",
|
||||
"account.muted": "Utíšený/á",
|
||||
"account.posts": "Príspevky",
|
||||
"account.posts": "Príspevkov",
|
||||
"account.posts_with_replies": "Príspevky aj s odpoveďami",
|
||||
"account.report": "Nahlás @{name}",
|
||||
"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}",
|
||||
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"autosuggest_hashtag.per_week": "{count} týždenne",
|
||||
"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.retry": "Skús to znova",
|
||||
|
@ -137,10 +139,10 @@
|
|||
"follow_request.authorize": "Povoľ prístup",
|
||||
"follow_request.reject": "Odmietni",
|
||||
"getting_started.developers": "Vývojári",
|
||||
"getting_started.directory": "Databáza profilov",
|
||||
"getting_started.directory": "Zoznam profilov",
|
||||
"getting_started.documentation": "Dokumentácia",
|
||||
"getting_started.heading": "Začni tu",
|
||||
"getting_started.invite": "Pozvať ľ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.security": "Zabezpečenie",
|
||||
"getting_started.terms": "Podmienky prevozu",
|
||||
|
@ -156,10 +158,10 @@
|
|||
"home.column_settings.basic": "Základné",
|
||||
"home.column_settings.show_reblogs": "Zobraziť povýšené",
|
||||
"home.column_settings.show_replies": "Ukázať odpovede",
|
||||
"home.column_settings.update_live": "Update in real-time",
|
||||
"intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
|
||||
"home.column_settings.update_live": "Aktualizuj v reálnom čase",
|
||||
"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 {# hodín}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}",
|
||||
"introduction.federation.action": "Ďalej",
|
||||
"introduction.federation.federated.headline": "Federovaná",
|
||||
"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.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ",
|
||||
"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...",
|
||||
"media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť",
|
||||
"missing_indicator.label": "Nenájdené",
|
||||
|
@ -251,6 +253,7 @@
|
|||
"navigation_bar.profile_directory": "Katalóg profilov",
|
||||
"navigation_bar.public_timeline": "Federovaná časová os",
|
||||
"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.follow": "{name} ťa začal/a následovať",
|
||||
"notification.mention": "{name} ťa spomenul/a",
|
||||
|
@ -278,8 +281,8 @@
|
|||
"notifications.filter.polls": "Výsledky ankiet",
|
||||
"notifications.group": "{count} oboznámení",
|
||||
"poll.closed": "Uzatvorená",
|
||||
"poll.refresh": "Aktualizuj",
|
||||
"poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasy}}",
|
||||
"poll.refresh": "Obnov",
|
||||
"poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}",
|
||||
"poll.vote": "Hlasuj",
|
||||
"poll_button.add_poll": "Pridaj anketu",
|
||||
"poll_button.remove_poll": "Odstráň anketu",
|
||||
|
@ -316,7 +319,7 @@
|
|||
"search_results.accounts": "Ľudia",
|
||||
"search_results.hashtags": "Haštagy",
|
||||
"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}}",
|
||||
"status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}",
|
||||
"status.admin_status": "Otvor tento príspevok v moderovacom rozhraní",
|
||||
|
@ -364,20 +367,28 @@
|
|||
"tabs_bar.local_timeline": "Miestna",
|
||||
"tabs_bar.notifications": "Oboznámenia",
|
||||
"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.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.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.refresh": "Obnov",
|
||||
"ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
|
||||
"upload_area.title": "Pretiahni a pusť pre nahratie",
|
||||
"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.poll": "Nahrávanie súborov pri anketách nieje možné.",
|
||||
"upload_form.description": "Opis pre slabo vidiacich",
|
||||
"upload_form.focus": "Pozmeň náhľad",
|
||||
"upload_form.edit": "Uprav",
|
||||
"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...",
|
||||
"video.close": "Zavri video",
|
||||
"video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue