diff options
author | Starfall <us@starfall.systems> | 2021-05-11 11:19:04 -0500 |
---|---|---|
committer | Starfall <us@starfall.systems> | 2021-05-11 11:19:04 -0500 |
commit | d56731a0b9d73c48bbfbced8732e25587ba892a4 (patch) | |
tree | d3830ce2e0292ce07336496e40882c222f455a33 /app | |
parent | 459a36ab7303db4ee59945b4b2121b25cc86eb38 (diff) | |
parent | ffc3f8eebe134ca9b18af73aa29eaa1627082e40 (diff) |
Merge branch 'glitch'
Diffstat (limited to 'app')
270 files changed, 8199 insertions, 4556 deletions
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index ab7e1f077..f9bd616e4 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -78,11 +78,7 @@ class AccountsController < ApplicationController end def only_media_scope - Status.where(id: account_media_status_ids) - end - - def account_media_status_ids - @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id) + Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id) end def no_replies_scope diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index 5fd735ad6..111285036 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -20,7 +20,7 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController def outbox_presenter if page_requested? ActivityPub::CollectionPresenter.new( - id: outbox_url(page_params), + id: outbox_url(**page_params), type: :ordered, part_of: outbox_url, prev: prev_page, diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index 9e921fb95..a00d7ed96 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -36,7 +36,6 @@ module Admin @profile_directory = Setting.profile_directory @timeline_preview = Setting.timeline_preview @keybase_integration = Setting.enable_keybase - @spam_check_enabled = Setting.spam_check_enabled @trends_enabled = Setting.trends end diff --git a/app/controllers/admin/follow_recommendations_controller.rb b/app/controllers/admin/follow_recommendations_controller.rb new file mode 100644 index 000000000..e3eac62b3 --- /dev/null +++ b/app/controllers/admin/follow_recommendations_controller.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module Admin + class FollowRecommendationsController < BaseController + before_action :set_language + + def show + authorize :follow_recommendation, :show? + + @form = Form::AccountBatch.new + @accounts = filtered_follow_recommendations + end + + def update + @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button)) + @form.save + rescue ActionController::ParameterMissing + # Do nothing + ensure + redirect_to admin_follow_recommendations_path(filter_params) + end + + private + + def set_language + @language = follow_recommendation_filter.language + end + + def filtered_follow_recommendations + follow_recommendation_filter.results + end + + def follow_recommendation_filter + @follow_recommendation_filter ||= FollowRecommendationFilter.new(filter_params) + end + + def form_account_batch_params + params.require(:form_account_batch).permit(:action, account_ids: []) + end + + def filter_params + params.slice(*FollowRecommendationFilter::KEYS).permit(*FollowRecommendationFilter::KEYS) + end + + def action_from_button + if params[:suppress] + 'suppress_follow_recommendation' + elsif params[:unsuppress] + 'unsuppress_follow_recommendation' + end + end + end +end diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb index b5918d231..748c5de5a 100644 --- a/app/controllers/admin/instances_controller.rb +++ b/app/controllers/admin/instances_controller.rb @@ -3,7 +3,8 @@ module Admin class InstancesController < BaseController before_action :set_instances, only: :index - before_action :set_instance, only: :show + before_action :set_instance, except: :index + before_action :set_exhausted_deliveries_days, only: :show def index authorize :instance, :index? @@ -13,14 +14,55 @@ module Admin authorize :instance, :show? end + def clear_delivery_errors + authorize :delivery, :clear_delivery_errors? + + @instance.delivery_failure_tracker.clear_failures! + redirect_to admin_instance_path(@instance.domain) + end + + def restart_delivery + authorize :delivery, :restart_delivery? + + last_unavailable_domain = unavailable_domain + + if last_unavailable_domain.present? + @instance.delivery_failure_tracker.track_success! + log_action :destroy, last_unavailable_domain + end + + redirect_to admin_instance_path(@instance.domain) + end + + def stop_delivery + authorize :delivery, :stop_delivery? + + UnavailableDomain.create(domain: @instance.domain) + log_action :create, unavailable_domain + redirect_to admin_instance_path(@instance.domain) + end + private def set_instance @instance = Instance.find(params[:id]) end + def set_exhausted_deliveries_days + @exhausted_deliveries_days = @instance.delivery_failure_tracker.exhausted_deliveries_days + end + def set_instances @instances = filtered_instances.page(params[:page]) + warning_domains_map = DeliveryFailureTracker.warning_domains_map + + @instances.each do |instance| + instance.failure_days = warning_domains_map[instance.domain] + end + end + + def unavailable_domain + UnavailableDomain.find_by(domain: @instance.domain) end def filtered_instances diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index d7c192f0d..ef279509d 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -14,8 +14,7 @@ module Admin @statuses = @account.statuses.where(visibility: [:public, :unlisted]) if params[:media] - account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id) - @statuses.merge!(Status.where(id: account_media_status_ids)) + @statuses.merge!(Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id)) end @statuses = @statuses.preload(:media_attachments, :mentions).page(params[:page]).per(PER_PAGE) diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 996f1b79b..95869f554 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -35,7 +35,7 @@ class Api::V1::AccountsController < Api::BaseController follow = FollowService.new.call(current_user.account, @account, reblogs: params.key?(:reblogs) ? truthy_param?(:reblogs) : nil, notify: params.key?(:notify) ? truthy_param?(:notify) : nil, with_rate_limit: true) options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: follow.show_reblogs?, notify: follow.notify? } }, requested_map: { @account.id => false } } - render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options) + render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(**options) end def block @@ -70,7 +70,7 @@ class Api::V1::AccountsController < Api::BaseController end def relationships(**options) - AccountRelationshipsPresenter.new([@account.id], current_user.account_id, options) + AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options) end def account_params diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index b34c76f29..f4b2a74d0 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -29,7 +29,7 @@ class Api::V1::FollowRequestsController < Api::BaseController end def relationships(**options) - AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, options) + AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options) end def load_accounts diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 0918c61e9..47f2e6440 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -3,13 +3,13 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController before_action -> { doorkeeper_authorize! :push } before_action :require_user! - before_action :set_web_push_subscription - before_action :check_web_push_subscription, only: [:show, :update] + before_action :set_push_subscription + before_action :check_push_subscription, only: [:show, :update] def create - @web_subscription&.destroy! + @push_subscription&.destroy! - @web_subscription = ::Web::PushSubscription.create!( + @push_subscription = Web::PushSubscription.create!( endpoint: subscription_params[:endpoint], key_p256dh: subscription_params[:keys][:p256dh], key_auth: subscription_params[:keys][:auth], @@ -18,31 +18,31 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController access_token_id: doorkeeper_token.id ) - render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end def show - render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end def update - @web_subscription.update!(data: data_params) - render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + @push_subscription.update!(data: data_params) + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end def destroy - @web_subscription&.destroy! + @push_subscription&.destroy! render_empty end private - def set_web_push_subscription - @web_subscription = ::Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id) + def set_push_subscription + @push_subscription = Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id) end - def check_web_push_subscription - not_found if @web_subscription.nil? + def check_push_subscription + not_found if @push_subscription.nil? end def subscription_params @@ -52,6 +52,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController def data_params return {} if params[:data].blank? - params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status]) + params.require(:data).permit(:policy, alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status]) end end diff --git a/app/controllers/api/v1/suggestions_controller.rb b/app/controllers/api/v1/suggestions_controller.rb index 52054160d..9737ae5cb 100644 --- a/app/controllers/api/v1/suggestions_controller.rb +++ b/app/controllers/api/v1/suggestions_controller.rb @@ -5,20 +5,20 @@ class Api::V1::SuggestionsController < Api::BaseController before_action -> { doorkeeper_authorize! :read } before_action :require_user! - before_action :set_accounts def index - render json: @accounts, each_serializer: REST::AccountSerializer + suggestions = suggestions_source.get(current_account, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT)) + render json: suggestions.map(&:account), each_serializer: REST::AccountSerializer end def destroy - PotentialFriendshipTracker.remove(current_account.id, params[:id]) + suggestions_source.remove(current_account, params[:id]) render_empty end private - def set_accounts - @accounts = PotentialFriendshipTracker.get(current_account.id, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT)) + def suggestions_source + AccountSuggestions::PastInteractionsSource.new end end diff --git a/app/controllers/api/v2/suggestions_controller.rb b/app/controllers/api/v2/suggestions_controller.rb new file mode 100644 index 000000000..35eb276c0 --- /dev/null +++ b/app/controllers/api/v2/suggestions_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class Api::V2::SuggestionsController < Api::BaseController + include Authorization + + before_action -> { doorkeeper_authorize! :read } + before_action :require_user! + before_action :set_suggestions + + def index + render json: @suggestions, each_serializer: REST::SuggestionSerializer + end + + private + + def set_suggestions + @suggestions = AccountSuggestions.get(current_account, limit_param(DEFAULT_ACCOUNTS_LIMIT)) + end +end diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb index 1dce3e70f..bed57fc54 100644 --- a/app/controllers/api/web/push_subscriptions_controller.rb +++ b/app/controllers/api/web/push_subscriptions_controller.rb @@ -2,6 +2,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController before_action :require_user! + before_action :set_push_subscription, only: :update def create active_session = current_session @@ -15,9 +16,11 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController alerts_enabled = active_session.detection.device.mobile? || active_session.detection.device.tablet? data = { + policy: 'all', + alerts: { follow: alerts_enabled, - follow_request: false, + follow_request: alerts_enabled, favourite: alerts_enabled, reblog: alerts_enabled, mention: alerts_enabled, @@ -28,7 +31,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController data.deep_merge!(data_params) if params[:data] - web_subscription = ::Web::PushSubscription.create!( + push_subscription = ::Web::PushSubscription.create!( endpoint: subscription_params[:endpoint], key_p256dh: subscription_params[:keys][:p256dh], key_auth: subscription_params[:keys][:auth], @@ -37,27 +40,27 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController access_token_id: active_session.access_token_id ) - active_session.update!(web_push_subscription: web_subscription) + active_session.update!(web_push_subscription: push_subscription) - render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer + render json: push_subscription, serializer: REST::WebPushSubscriptionSerializer end def update - params.require([:id]) - - web_subscription = ::Web::PushSubscription.find(params[:id]) - web_subscription.update!(data: data_params) - - render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer + @push_subscription.update!(data: data_params) + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end private + def set_push_subscription + @push_subscription = ::Web::PushSubscription.find(params[:id]) + end + def subscription_params @subscription_params ||= params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh]) end def data_params - @data_params ||= params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status]) + @data_params ||= params.require(:data).permit(:policy, alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status]) end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7435d78bf..9eb73d576 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -19,17 +19,16 @@ class ApplicationController < ActionController::Base helper_method :use_seamless_external_login? helper_method :whitelist_mode? - rescue_from ActionController::RoutingError, with: :not_found - rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity - rescue_from ActionController::UnknownFormat, with: :not_acceptable - rescue_from ActionController::ParameterMissing, with: :bad_request - rescue_from Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request - rescue_from ActiveRecord::RecordNotFound, with: :not_found + rescue_from ActionController::ParameterMissing, Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request rescue_from Mastodon::NotPermittedError, with: :forbidden - rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error - rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, with: :service_unavailable + rescue_from ActionController::RoutingError, ActiveRecord::RecordNotFound, with: :not_found + rescue_from ActionController::UnknownFormat, with: :not_acceptable + rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests + rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error + rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable + before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? before_action :require_functional!, if: :user_signed_in? diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb index 4e89446c7..0b5a2f3c9 100644 --- a/app/controllers/auth/confirmations_controller.rb +++ b/app/controllers/auth/confirmations_controller.rb @@ -22,7 +22,9 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController end def require_unconfirmed! - redirect_to edit_user_registration_path if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank? + if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank? + redirect_to(current_user.approved? ? root_path : edit_user_registration_path) + end end def set_body_classes diff --git a/app/controllers/directories_controller.rb b/app/controllers/directories_controller.rb index 549c6a39e..2263f286b 100644 --- a/app/controllers/directories_controller.rb +++ b/app/controllers/directories_controller.rb @@ -6,7 +6,6 @@ class DirectoriesController < ApplicationController before_action :authenticate_user!, if: :whitelist_mode? before_action :require_enabled! before_action :set_instance_presenter - before_action :set_tag, only: :show before_action :set_accounts before_action :set_pack @@ -16,10 +15,6 @@ class DirectoriesController < ApplicationController render :index end - def show - render :index - end - private def set_pack @@ -30,13 +25,8 @@ class DirectoriesController < ApplicationController return not_found unless Setting.profile_directory end - def set_tag - @tag = Tag.discoverable.find_normalized!(params[:id]) - end - def set_accounts @accounts = Account.local.discoverable.by_recent_status.page(params[:page]).per(20).tap do |query| - query.merge!(Account.tagged_with(@tag.id)) if @tag query.merge!(Account.not_excluded_by_account(current_account)) if current_account end end diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index 3290224b4..3812f541e 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -16,7 +16,6 @@ class StatusesController < ApplicationController before_action :set_referrer_policy_header, only: :show before_action :set_cache_headers before_action :set_body_classes - before_action :set_autoplay, only: :embed skip_around_action :set_locale, if: -> { request.format == :json } skip_before_action :require_functional!, only: [:show, :embed], unless: :whitelist_mode? @@ -85,8 +84,4 @@ class StatusesController < ApplicationController def set_referrer_policy_header response.headers['Referrer-Policy'] = 'origin' unless @status.distributable? end - - def set_autoplay - @autoplay = truthy_param?(:autoplay) - end end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 0f3ca36e2..e9a298a24 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -21,7 +21,7 @@ module Admin::ActionLogsHelper record.shortcode when 'Report' link_to "##{record.id}", admin_report_path(record) - when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock' + when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain' link_to record.domain, "https://#{record.domain}" when 'Status' link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record) @@ -38,7 +38,7 @@ module Admin::ActionLogsHelper case type when 'CustomEmoji' attributes['shortcode'] - when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock' + when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain' link_to attributes['domain'], "https://#{attributes['domain']}" when 'Status' tmp_status = Status.new(attributes.except('reblogs_count', 'favourites_count')) diff --git a/app/helpers/email_helper.rb b/app/helpers/email_helper.rb new file mode 100644 index 000000000..360783c62 --- /dev/null +++ b/app/helpers/email_helper.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module EmailHelper + def self.included(base) + base.extend(self) + end + + def email_to_canonical_email(str) + username, domain = str.downcase.split('@', 2) + username, = username.gsub('.', '').split('+', 2) + + "#{username}@#{domain}" + end + + def email_to_canonical_email_hash(str) + Digest::SHA2.new(256).hexdigest(email_to_canonical_email(str)) + end +end diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb index 1c473efa3..62eb50f78 100644 --- a/app/helpers/jsonld_helper.rb +++ b/app/helpers/jsonld_helper.rb @@ -67,7 +67,7 @@ module JsonLdHelper unless id json = fetch_resource_without_id_validation(uri, on_behalf_of) - return unless json + return if !json.is_a?(Hash) || unsupported_uri_scheme?(json['id']) uri = json['id'] end diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index ae9a69826..677e3fc6c 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -2,6 +2,7 @@ module SettingsHelper HUMAN_LOCALES = { + af: 'Afrikaans', ar: 'العربية', ast: 'Asturianu', bg: 'Български', @@ -25,6 +26,7 @@ module SettingsHelper fi: 'Suomi', fr: 'Français', ga: 'Gaeilge', + gd: 'Gàidhlig', gl: 'Galego', he: 'עברית', hi: 'हिन्दी', @@ -60,6 +62,7 @@ module SettingsHelper ru: 'Русский', sa: 'संस्कृतम्', sc: 'Sardu', + si: 'සිංහල', sk: 'Slovenčina', sl: 'Slovenščina', sq: 'Shqip', diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index 1f654f34f..25f079e9d 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -130,4 +130,84 @@ module StatusesHelper def embedded_view? params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION end + + def render_video_component(status, **options) + video = status.media_attachments.first + + meta = video.file.meta || {} + + component_params = { + sensitive: sensitized?(status, current_account), + src: full_asset_url(video.file.url(:original)), + preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), + alt: video.description, + blurhash: video.blurhash, + frameRate: meta.dig('original', 'frame_rate'), + inline: true, + media: [ + ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer), + ].as_json, + }.merge(**options) + + react_component :video, component_params do + render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + end + end + + def render_audio_component(status, **options) + audio = status.media_attachments.first + + meta = audio.file.meta || {} + + component_params = { + src: full_asset_url(audio.file.url(:original)), + poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), + alt: audio.description, + backgroundColor: meta.dig('colors', 'background'), + foregroundColor: meta.dig('colors', 'foreground'), + accentColor: meta.dig('colors', 'accent'), + duration: meta.dig('original', 'duration'), + }.merge(**options) + + react_component :audio, component_params do + render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + end + end + + def render_media_gallery_component(status, **options) + component_params = { + sensitive: sensitized?(status, current_account), + autoplay: prefers_autoplay?, + media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }, + }.merge(**options) + + react_component :media_gallery, component_params do + render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + end + end + + def render_card_component(status, **options) + component_params = { + sensitive: sensitized?(status, current_account), + maxDescription: 160, + card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json, + }.merge(**options) + + react_component :card, component_params + end + + def render_poll_component(status, **options) + component_params = { + disabled: true, + poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json, + }.merge(**options) + + react_component :poll, component_params do + render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: prefers_autoplay? } + end + end + + def prefers_autoplay? + ActiveModel::Type::Boolean.new.cast(params[:autoplay]) || current_user&.setting_auto_play_gif + end end diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js index 05955963c..9b3bd0d56 100644 --- a/app/javascript/flavours/glitch/actions/importer/normalizer.js +++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js @@ -24,6 +24,7 @@ export function normalizeAccount(account) { account.display_name_html = emojify(escapeTextContentForBrowser(displayName), emojiMap); account.note_emojified = emojify(account.note, emojiMap); + account.note_plain = unescapeHTML(account.note); if (account.fields) { account.fields = account.fields.map(pair => ({ diff --git a/app/javascript/flavours/glitch/actions/search.js b/app/javascript/flavours/glitch/actions/search.js index a025f352a..b4aee4525 100644 --- a/app/javascript/flavours/glitch/actions/search.js +++ b/app/javascript/flavours/glitch/actions/search.js @@ -32,6 +32,7 @@ export function submitSearch() { const value = getState().getIn(['search', 'value']); if (value.length === 0) { + dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, '')); return; } diff --git a/app/javascript/flavours/glitch/actions/suggestions.js b/app/javascript/flavours/glitch/actions/suggestions.js index 3687136ff..7070250e3 100644 --- a/app/javascript/flavours/glitch/actions/suggestions.js +++ b/app/javascript/flavours/glitch/actions/suggestions.js @@ -1,5 +1,6 @@ import api from 'flavours/glitch/util/api'; import { importFetchedAccounts } from './importer'; +import { fetchRelationships } from './accounts'; export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST'; export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS'; @@ -7,13 +8,17 @@ export const SUGGESTIONS_FETCH_FAIL = 'SUGGESTIONS_FETCH_FAIL'; export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS'; -export function fetchSuggestions() { +export function fetchSuggestions(withRelationships = false) { return (dispatch, getState) => { dispatch(fetchSuggestionsRequest()); - api(getState).get('/api/v1/suggestions').then(response => { - dispatch(importFetchedAccounts(response.data)); + api(getState).get('/api/v2/suggestions', { params: { limit: 20 } }).then(response => { + dispatch(importFetchedAccounts(response.data.map(x => x.account))); dispatch(fetchSuggestionsSuccess(response.data)); + + if (withRelationships) { + dispatch(fetchRelationships(response.data.map(item => item.account.id))); + } }).catch(error => dispatch(fetchSuggestionsFail(error))); }; }; @@ -25,10 +30,10 @@ export function fetchSuggestionsRequest() { }; }; -export function fetchSuggestionsSuccess(accounts) { +export function fetchSuggestionsSuccess(suggestions) { return { type: SUGGESTIONS_FETCH_SUCCESS, - accounts, + suggestions, skipLoading: true, }; }; @@ -48,5 +53,12 @@ export const dismissSuggestion = accountId => (dispatch, getState) => { id: accountId, }); - api(getState).delete(`/api/v1/suggestions/${accountId}`); + api(getState).delete(`/api/v1/suggestions/${accountId}`).then(() => { + dispatch(fetchSuggestionsRequest()); + + api(getState).get('/api/v2/suggestions').then(response => { + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(fetchSuggestionsSuccess(response.data)); + }).catch(error => dispatch(fetchSuggestionsFail(error))); + }).catch(() => {}); }; diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index b19666e62..24cc0d63f 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -20,6 +20,8 @@ export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING'; export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; +export const TIMELINE_MARK_AS_PARTIAL = 'TIMELINE_MARK_AS_PARTIAL'; + export const loadPending = timeline => ({ type: TIMELINE_LOAD_PENDING, timeline, @@ -31,6 +33,13 @@ export function updateTimeline(timeline, status, accept) { return; } + if (getState().getIn(['timelines', timeline, 'isPartial'])) { + // Prevent new items from being added to a partial timeline, + // since it will be reloaded anyway + + return; + } + const filters = getFiltersRegex(getState(), { contextType: timeline }); const dropRegex = filters[0]; const regex = filters[1]; @@ -198,3 +207,8 @@ export const disconnectTimeline = timeline => ({ timeline, usePendingItems: preferPendingItems, }); + +export const markAsPartial = timeline => ({ + type: TIMELINE_MARK_AS_PARTIAL, + timeline, +}); diff --git a/app/javascript/flavours/glitch/blurhash.js b/app/javascript/flavours/glitch/blurhash.js new file mode 100644 index 000000000..5adcc3e77 --- /dev/null +++ b/app/javascript/flavours/glitch/blurhash.js @@ -0,0 +1,112 @@ +const DIGIT_CHARACTERS = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + '#', + '$', + '%', + '*', + '+', + ',', + '-', + '.', + ':', + ';', + '=', + '?', + '@', + '[', + ']', + '^', + '_', + '{', + '|', + '}', + '~', +]; + +export const decode83 = (str) => { + let value = 0; + let c, digit; + + for (let i = 0; i < str.length; i++) { + c = str[i]; + digit = DIGIT_CHARACTERS.indexOf(c); + value = value * 83 + digit; + } + + return value; +}; + +export const intToRGB = int => ({ + r: Math.max(0, (int >> 16)), + g: Math.max(0, (int >> 8) & 255), + b: Math.max(0, (int & 255)), +}); + +export const getAverageFromBlurhash = blurhash => { + if (!blurhash) { + return null; + } + + return intToRGB(decode83(blurhash.slice(2, 6))); +}; diff --git a/app/javascript/flavours/glitch/components/account.js b/app/javascript/flavours/glitch/components/account.js index 23399c630..20313535b 100644 --- a/app/javascript/flavours/glitch/components/account.js +++ b/app/javascript/flavours/glitch/components/account.js @@ -87,8 +87,10 @@ class Account extends ImmutablePureComponent { let buttons; - if (onActionClick && actionIcon) { - buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />; + if (onActionClick) { + if (actionIcon) { + buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />; + } } else if (account.get('id') !== me && !small && account.get('relationship', null) !== null) { const following = account.getIn(['relationship', 'following']); const requested = account.getIn(['relationship', 'requested']); diff --git a/app/javascript/flavours/glitch/components/logo.js b/app/javascript/flavours/glitch/components/logo.js new file mode 100644 index 000000000..d1c7f08a9 --- /dev/null +++ b/app/javascript/flavours/glitch/components/logo.js @@ -0,0 +1,9 @@ +import React from 'react'; + +const Logo = () => ( + <svg viewBox='0 0 216.4144 232.00976' className='logo'> + <use xlinkHref='#mastodon-svg-logo' /> + </svg> +); + +export default Logo; diff --git a/app/javascript/flavours/glitch/components/media_gallery.js b/app/javascript/flavours/glitch/components/media_gallery.js index 890a422d3..68195ea80 100644 --- a/app/javascript/flavours/glitch/components/media_gallery.js +++ b/app/javascript/flavours/glitch/components/media_gallery.js @@ -24,7 +24,7 @@ const messages = defineMessages({ id: 'status.sensitive_toggle', }, toggle_visible: { - defaultMessage: 'Hide {number, plural, one {image} other {images}}', + defaultMessage: '{number, plural, one {Hide image} other {Hide images}}', id: 'media_gallery.toggle_visible', }, warning: { diff --git a/app/javascript/flavours/glitch/components/modal_root.js b/app/javascript/flavours/glitch/components/modal_root.js index 13a8e8702..913234d32 100644 --- a/app/javascript/flavours/glitch/components/modal_root.js +++ b/app/javascript/flavours/glitch/components/modal_root.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import 'wicg-inert'; import { createBrowserHistory } from 'history'; +import { multiply } from 'color-blend'; export default class ModalRoot extends React.PureComponent { static contextTypes = { @@ -11,6 +12,11 @@ export default class ModalRoot extends React.PureComponent { static propTypes = { children: PropTypes.node, onClose: PropTypes.func.isRequired, + backgroundColor: PropTypes.shape({ + r: PropTypes.number, + g: PropTypes.number, + b: PropTypes.number, + }), noEsc: PropTypes.bool, }; @@ -68,9 +74,7 @@ export default class ModalRoot extends React.PureComponent { Promise.resolve().then(() => { this.activeElement.focus({ preventScroll: true }); this.activeElement = null; - }).catch((error) => { - console.error(error); - }); + }).catch(console.error); this.handleModalClose(); } @@ -120,10 +124,16 @@ export default class ModalRoot extends React.PureComponent { ); } + let backgroundColor = null; + + if (this.props.backgroundColor) { + backgroundColor = multiply({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.7 }); + } + return ( <div className='modal-root' ref={this.setRef}> <div style={{ pointerEvents: visible ? 'auto' : 'none' }}> - <div role='presentation' className='modal-root__overlay' onClick={onClose} /> + <div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} /> <div role='dialog' className='modal-root__container'>{children}</div> </div> </div> diff --git a/app/javascript/flavours/glitch/components/regeneration_indicator.js b/app/javascript/flavours/glitch/components/regeneration_indicator.js index f4e0a79ef..68ce09df9 100644 --- a/app/javascript/flavours/glitch/components/regeneration_indicator.js +++ b/app/javascript/flavours/glitch/components/regeneration_indicator.js @@ -2,7 +2,7 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import illustration from 'flavours/glitch/images/elephant_ui_working.svg'; -const MissingIndicator = () => ( +const RegenerationIndicator = () => ( <div className='regeneration-indicator'> <div className='regeneration-indicator__figure'> <img src={illustration} alt='' /> @@ -15,4 +15,4 @@ const MissingIndicator = () => ( </div> ); -export default MissingIndicator; +export default RegenerationIndicator; diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index fcbf4be8c..782fd918e 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -378,22 +378,26 @@ class Status extends ImmutablePureComponent { } }; - handleOpenVideo = (media, options) => { - this.props.onOpenVideo(media, options); + handleOpenVideo = (options) => { + const { status } = this.props; + this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options); + } + + handleOpenMedia = (media, index) => { + this.props.onOpenMedia(this.props.status.get('id'), media, index); } handleHotkeyOpenMedia = e => { const { status, onOpenMedia, onOpenVideo } = this.props; + const statusId = status.get('id'); e.preventDefault(); if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { - // TODO: toggle play/paused? - } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); + if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 }); } else { - onOpenMedia(status.get('media_attachments'), 0); + onOpenMedia(statusId, status.get('media_attachments'), 0); } } } @@ -657,7 +661,7 @@ class Status extends ImmutablePureComponent { letterbox={settings.getIn(['media', 'letterbox'])} fullwidth={settings.getIn(['media', 'fullwidth'])} hidden={isCollapsed || !isExpanded} - onOpenMedia={this.props.onOpenMedia} + onOpenMedia={this.handleOpenMedia} cacheWidth={this.props.cacheMediaWidth} defaultWidth={this.props.cachedMediaWidth} visible={this.state.showMedia} @@ -675,7 +679,7 @@ class Status extends ImmutablePureComponent { } else if (status.get('card') && settings.get('inline_preview_cards')) { media = ( <Card - onOpenMedia={this.props.onOpenMedia} + onOpenMedia={this.handleOpenMedia} card={status.get('card')} compact cacheWidth={this.props.cacheMediaWidth} diff --git a/app/javascript/flavours/glitch/containers/mastodon.js b/app/javascript/flavours/glitch/containers/mastodon.js index 762280bec..bcdd9b54e 100644 --- a/app/javascript/flavours/glitch/containers/mastodon.js +++ b/app/javascript/flavours/glitch/containers/mastodon.js @@ -2,7 +2,6 @@ import React from 'react'; import { Provider } from 'react-redux'; import PropTypes from 'prop-types'; import configureStore from 'flavours/glitch/store/configureStore'; -import { showOnboardingOnce } from 'flavours/glitch/actions/onboarding'; import { BrowserRouter, Route } from 'react-router-dom'; import { ScrollContext } from 'react-router-scroll-4'; import UI from 'flavours/glitch/features/ui'; @@ -32,7 +31,6 @@ export default class Mastodon extends React.PureComponent { componentDidMount() { this.disconnect = store.dispatch(connectUserStream()); - store.dispatch(showOnboardingOnce()); } componentWillUnmount () { diff --git a/app/javascript/flavours/glitch/containers/media_container.js b/app/javascript/flavours/glitch/containers/media_container.js index a483510b0..8657b8064 100644 --- a/app/javascript/flavours/glitch/containers/media_container.js +++ b/app/javascript/flavours/glitch/containers/media_container.js @@ -2,7 +2,7 @@ import React, { PureComponent, Fragment } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { IntlProvider, addLocaleData } from 'react-intl'; -import { List as ImmutableList, fromJS } from 'immutable'; +import { fromJS } from 'immutable'; import { getLocale } from 'mastodon/locales'; import { getScrollbarWidth } from 'flavours/glitch/util/scrollbar'; import MediaGallery from 'flavours/glitch/components/media_gallery'; @@ -30,6 +30,8 @@ export default class MediaContainer extends PureComponent { media: null, index: null, time: null, + backgroundColor: null, + options: null, }; handleOpenMedia = (media, index) => { @@ -39,20 +41,32 @@ export default class MediaContainer extends PureComponent { this.setState({ media, index }); } - handleOpenVideo = (video, time) => { - const media = ImmutableList([video]); + handleOpenVideo = (options) => { + const { components } = this.props; + const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props')); + const mediaList = fromJS(media); document.body.classList.add('with-modals--active'); document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; - this.setState({ media, time }); + this.setState({ media: mediaList, options }); } handleCloseMedia = () => { document.body.classList.remove('with-modals--active'); document.documentElement.style.marginRight = 0; - this.setState({ media: null, index: null, time: null }); + this.setState({ + media: null, + index: null, + time: null, + backgroundColor: null, + options: null, + }); + } + + setBackgroundColor = color => { + this.setState({ backgroundColor: color }); } render () { @@ -73,6 +87,7 @@ export default class MediaContainer extends PureComponent { ...(hashtag ? { hashtag: fromJS(hashtag) } : {}), ...(componentName === 'Video' ? { + componetIndex: i, onOpenVideo: this.handleOpenVideo, } : { onOpenMedia: this.handleOpenMedia, @@ -85,13 +100,16 @@ export default class MediaContainer extends PureComponent { ); })} - <ModalRoot onClose={this.handleCloseMedia}> + <ModalRoot backgroundColor={this.state.backgroundColor} onClose={this.handleCloseMedia}> {this.state.media && ( <MediaModal media={this.state.media} index={this.state.index || 0} - time={this.state.time} + currentTime={this.state.options?.startTime} + autoPlay={this.state.options?.autoPlay} + volume={this.state.options?.defaultVolume} onClose={this.handleCloseMedia} + onChangeBackgroundColor={this.setBackgroundColor} /> )} </ModalRoot> diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index 6461bf805..bc3c43d85 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -177,12 +177,12 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ dispatch(mentionCompose(account, router)); }, - onOpenMedia (media, index) { - dispatch(openModal('MEDIA', { media, index })); + onOpenMedia (statusId, media, index) { + dispatch(openModal('MEDIA', { statusId, media, index })); }, - onOpenVideo (media, options) { - dispatch(openModal('VIDEO', { media, options })); + onOpenVideo (statusId, media, options) { + dispatch(openModal('VIDEO', { statusId, media, options })); }, onBlock (status) { diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js index c18520c00..4b0494fff 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.js +++ b/app/javascript/flavours/glitch/features/account/components/header.js @@ -328,6 +328,8 @@ class Header extends ImmutablePureComponent { )} {account.get('note').length > 0 && account.get('note') !== '<p></p>' && <div className='account__header__content translate' dangerouslySetInnerHTML={content} />} + + <div className='account__header__joined'><FormattedMessage id='account.joined' defaultMessage='Joined {date}' values={{ date: intl.formatDate(account.get('created_at'), { year: 'numeric', month: 'short', day: '2-digit' }) }} /></div> </div> </div> )} diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js index 81203e3f8..2a43d1ed2 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/index.js +++ b/app/javascript/flavours/glitch/features/account_gallery/index.js @@ -114,15 +114,18 @@ class AccountGallery extends ImmutablePureComponent { } handleOpenMedia = attachment => { + const { dispatch } = this.props; + const statusId = attachment.getIn(['status', 'id']); + if (attachment.get('type') === 'video') { - this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } })); + dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } })); } else if (attachment.get('type') === 'audio') { - this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } })); + dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } })); } else { const media = attachment.getIn(['status', 'media_attachments']); const index = media.findIndex(x => x.get('id') === attachment.get('id')); - this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') })); + dispatch(openModal('MEDIA', { media, index, statusId })); } } diff --git a/app/javascript/flavours/glitch/features/compose/components/search_results.js b/app/javascript/flavours/glitch/features/compose/components/search_results.js index bbf997c1f..a0f86a06a 100644 --- a/app/javascript/flavours/glitch/features/compose/components/search_results.js +++ b/app/javascript/flavours/glitch/features/compose/components/search_results.js @@ -33,6 +33,12 @@ class SearchResults extends ImmutablePureComponent { } } + componentDidUpdate () { + if (this.props.searchTerm === '') { + this.props.fetchSuggestions(); + } + } + handleLoadMoreAccounts = () => this.props.expandSearch('accounts'); handleLoadMoreStatuses = () => this.props.expandSearch('statuses'); @@ -42,7 +48,7 @@ class SearchResults extends ImmutablePureComponent { render () { const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props; - if (results.isEmpty() && !suggestions.isEmpty()) { + if (searchTerm === '' && !suggestions.isEmpty()) { return ( <div className='drawer--results'> <div className='trends'> @@ -51,12 +57,12 @@ class SearchResults extends ImmutablePureComponent { <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' /> </div> - {suggestions && suggestions.map(accountId => ( + {suggestions && suggestions.map(suggestion => ( <AccountContainer - key={accountId} - id={accountId} - actionIcon='times' - actionTitle={intl.formatMessage(messages.dismissSuggestion)} + key={suggestion.get('account')} + id={suggestion.get('account')} + actionIcon={suggestion.get('source') === 'past_interaction' ? 'times' : null} + actionTitle={suggestion.get('source') === 'past_interaction' ? intl.formatMessage(messages.dismissSuggestion) : null} onActionClick={dismissSuggestion} /> ))} diff --git a/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js b/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js new file mode 100644 index 000000000..046d03a9b --- /dev/null +++ b/app/javascript/flavours/glitch/features/follow_recommendations/components/account.js @@ -0,0 +1,85 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { connect } from 'react-redux'; +import { makeGetAccount } from 'flavours/glitch/selectors'; +import Avatar from 'flavours/glitch/components/avatar'; +import DisplayName from 'flavours/glitch/components/display_name'; +import Permalink from 'flavours/glitch/components/permalink'; +import IconButton from 'flavours/glitch/components/icon_button'; +import { injectIntl, defineMessages } from 'react-intl'; +import { followAccount, unfollowAccount } from 'flavours/glitch/actions/accounts'; + +const messages = defineMessages({ + follow: { id: 'account.follow', defaultMessage: 'Follow' }, + unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, +}); + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = (state, props) => ({ + account: getAccount(state, props.id), + }); + + return mapStateToProps; +}; + +const getFirstSentence = str => { + const arr = str.split(/(([\.\?!]+\s)|[.。?!\n•])/); + + return arr[0]; +}; + +export default @connect(makeMapStateToProps) +@injectIntl +class Account extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, + }; + + handleFollow = () => { + const { account, dispatch } = this.props; + + if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { + dispatch(unfollowAccount(account.get('id'))); + } else { + dispatch(followAccount(account.get('id'))); + } + } + + render () { + const { account, intl } = this.props; + + let button; + + if (account.getIn(['relationship', 'following'])) { + button = <IconButton icon='check' title={intl.formatMessage(messages.unfollow)} active onClick={this.handleFollow} />; + } else { + button = <IconButton icon='plus' title={intl.formatMessage(messages.follow)} onClick={this.handleFollow} />; + } + + return ( + <div className='account follow-recommendations-account'> + <div className='account__wrapper'> + <Permalink className='account__display-name account__display-name--with-note' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> + + <DisplayName account={account} /> + + <div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div> + </Permalink> + + <div className='account__relationship'> + {button} + </div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/follow_recommendations/index.js b/app/javascript/flavours/glitch/features/follow_recommendations/index.js new file mode 100644 index 000000000..8165c39a9 --- /dev/null +++ b/app/javascript/flavours/glitch/features/follow_recommendations/index.js @@ -0,0 +1,109 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { connect } from 'react-redux'; +import { FormattedMessage } from 'react-intl'; +import { fetchSuggestions } from 'flavours/glitch/actions/suggestions'; +import { changeSetting, saveSettings } from 'flavours/glitch/actions/settings'; +import { requestBrowserPermission } from 'flavours/glitch/actions/notifications'; +import { markAsPartial } from 'flavours/glitch/actions/timelines'; +import Column from 'flavours/glitch/features/ui/components/column'; +import Account from './components/account'; +import Logo from 'flavours/glitch/components/logo'; +import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg'; +import Button from 'flavours/glitch/components/button'; + +const mapStateToProps = state => ({ + suggestions: state.getIn(['suggestions', 'items']), + isLoading: state.getIn(['suggestions', 'isLoading']), +}); + +export default @connect(mapStateToProps) +class FollowRecommendations extends ImmutablePureComponent { + + static contextTypes = { + router: PropTypes.object.isRequired, + }; + + static propTypes = { + dispatch: PropTypes.func.isRequired, + suggestions: ImmutablePropTypes.list, + isLoading: PropTypes.bool, + }; + + componentDidMount () { + const { dispatch, suggestions } = this.props; + + // Don't re-fetch if we're e.g. navigating backwards to this page, + // since we don't want followed accounts to disappear from the list + + if (suggestions.size === 0) { + dispatch(fetchSuggestions(true)); + } + } + + componentWillUnmount () { + const { dispatch } = this.props; + + // Force the home timeline to be reloaded when the user navigates + // to it; if the user is new, it would've been empty before + + dispatch(markAsPartial('home')); + } + + handleDone = () => { + const { dispatch } = this.props; + const { router } = this.context; + + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); + dispatch(saveSettings()); + } + })); + + router.history.push('/timelines/home'); + } + + render () { + const { suggestions, isLoading } = this.props; + + return ( + <Column> + <div className='scrollable'> + <div className='column-title'> + <Logo /> + <h3><FormattedMessage id='follow_recommendations.heading' defaultMessage="Follow people you'd like to see posts from! Here are some suggestions." /></h3> + <p><FormattedMessage id='follow_recommendations.lead' defaultMessage="Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!" /></p> + </div> + + {!isLoading && ( + <React.Fragment> + <div className='column-list'> + {suggestions.size > 0 ? suggestions.map(suggestion => ( + <Account key={suggestion.get('account')} id={suggestion.get('account')} /> + )) : ( + <div className='column-list__empty-message'> + <FormattedMessage id='empty_column.follow_recommendations' defaultMessage='Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.' /> + </div> + )} + </div> + + <div className='column-actions'> + <img src={imageGreeting} alt='' className='column-actions__background' /> + <Button onClick={this.handleDone}><FormattedMessage id='follow_recommendations.done' defaultMessage='Done' /></Button> + </div> + </React.Fragment> + )} + </div> + </Column> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.js b/app/javascript/flavours/glitch/features/home_timeline/index.js index cc8e4664c..19551d6b8 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/index.js +++ b/app/javascript/flavours/glitch/features/home_timeline/index.js @@ -72,7 +72,7 @@ class HomeTimeline extends React.PureComponent { } componentDidMount () { - this.props.dispatch(fetchAnnouncements()); + setTimeout(() => this.props.dispatch(fetchAnnouncements()), 700); this._checkIfReloadNeeded(false, this.props.isPartial); } @@ -152,7 +152,7 @@ class HomeTimeline extends React.PureComponent { scrollKey={`home_timeline-${columnId}`} onLoadMore={this.handleLoadMore} timelineId='home' - emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />} + emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />} bindToDocument={!multiColumn} /> </Column> diff --git a/app/javascript/flavours/glitch/features/notifications/index.js b/app/javascript/flavours/glitch/features/notifications/index.js index 842e02371..6fc951e37 100644 --- a/app/javascript/flavours/glitch/features/notifications/index.js +++ b/app/javascript/flavours/glitch/features/notifications/index.js @@ -224,7 +224,7 @@ class Notifications extends React.PureComponent { const { notifCleaning, notifCleaningActive } = this.props; const { animatingNCD } = this.state; const pinned = !!columnId; - const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />; + const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />; let scrollableContent = null; diff --git a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js index d8989ec61..fcb2df527 100644 --- a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js +++ b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.js @@ -23,6 +23,7 @@ const messages = defineMessages({ favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, + open: { id: 'status.open', defaultMessage: 'Expand this status' }, }); const makeMapStateToProps = () => { @@ -52,11 +53,19 @@ class Footer extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, askReplyConfirmation: PropTypes.bool, showReplyCount: PropTypes.bool, + withOpenButton: PropTypes.bool, + onClose: PropTypes.func, }; _performReply = () => { - const { dispatch, status } = this.props; - dispatch(replyCompose(status, this.context.router.history)); + const { dispatch, status, onClose } = this.props; + const { router } = this.context; + + if (onClose) { + onClose(); + } + + dispatch(replyCompose(status, router.history)); }; handleReplyClick = () => { @@ -100,8 +109,20 @@ class Footer extends ImmutablePureComponent { } }; + handleOpenClick = e => { + const { router } = this.context; + + if (e.button !== 0 || !router) { + return; + } + + const { status } = this.props; + + router.history.push(`/statuses/${status.get('id')}`); + } + render () { - const { status, intl, showReplyCount } = this.props; + const { status, intl, showReplyCount, withOpenButton } = this.props; const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; @@ -156,6 +177,7 @@ class Footer extends ImmutablePureComponent { {replyButton} <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} /> <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} /> + {withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} />} </div> ); } diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js index 40bf370f3..4cc1d1af5 100644 --- a/app/javascript/flavours/glitch/features/status/components/detailed_status.js +++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js @@ -68,8 +68,8 @@ export default class DetailedStatus extends ImmutablePureComponent { e.stopPropagation(); } - handleOpenVideo = (media, options) => { - this.props.onOpenVideo(media, options); + handleOpenVideo = (options) => { + this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options); } _measureHeight (heightJustChanged) { diff --git a/app/javascript/flavours/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js index 21e441407..513a6227f 100644 --- a/app/javascript/flavours/glitch/features/status/index.js +++ b/app/javascript/flavours/glitch/features/status/index.js @@ -316,11 +316,11 @@ class Status extends ImmutablePureComponent { } handleOpenMedia = (media, index) => { - this.props.dispatch(openModal('MEDIA', { media, index })); + this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index })); } handleOpenVideo = (media, options) => { - this.props.dispatch(openModal('VIDEO', { media, options })); + this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options })); } handleHotkeyOpenMedia = e => { @@ -329,9 +329,7 @@ class Status extends ImmutablePureComponent { e.preventDefault(); if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { - // TODO: toggle play/paused? - } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + if (status.getIn(['media_attachments', 0, 'type']) === 'video') { this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); } else { this.handleOpenMedia(status.get('media_attachments'), 0); diff --git a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js index f9d4bb2f3..fc98cc6af 100644 --- a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js @@ -4,12 +4,10 @@ import PropTypes from 'prop-types'; import Audio from 'flavours/glitch/features/audio'; import { connect } from 'react-redux'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage } from 'react-intl'; -import classNames from 'classnames'; -import Icon from 'flavours/glitch/components/icon'; +import Footer from 'flavours/glitch/features/picture_in_picture/components/footer'; -const mapStateToProps = (state, { status }) => ({ - account: state.getIn(['accounts', status.get('account')]), +const mapStateToProps = (state, { statusId }) => ({ + accountStaticAvatar: state.getIn(['accounts', state.getIn(['statuses', statusId, 'account']), 'avatar_static']), }); export default @connect(mapStateToProps) @@ -17,27 +15,21 @@ class AudioModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string.isRequired, + accountStaticAvatar: PropTypes.string.isRequired, options: PropTypes.shape({ autoPlay: PropTypes.bool, }), - account: ImmutablePropTypes.map, onClose: PropTypes.func.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, }; static contextTypes = { router: PropTypes.object, }; - handleStatusClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); - } - } - render () { - const { media, status, account } = this.props; + const { media, accountStaticAvatar, statusId, onClose } = this.props; const options = this.props.options || {}; return ( @@ -48,7 +40,7 @@ class AudioModal extends ImmutablePureComponent { alt={media.get('description')} duration={media.getIn(['meta', 'original', 'duration'], 0)} height={150} - poster={media.get('preview_url') || account.get('avatar_static')} + poster={media.get('preview_url') || accountStaticAvatar} backgroundColor={media.getIn(['meta', 'colors', 'background'])} foregroundColor={media.getIn(['meta', 'colors', 'foreground'])} accentColor={media.getIn(['meta', 'colors', 'accent'])} @@ -56,11 +48,9 @@ class AudioModal extends ImmutablePureComponent { /> </div> - {status && ( - <div className={classNames('media-modal__meta')}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} + <div className='media-modal__overlay'> + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> ); } diff --git a/app/javascript/flavours/glitch/features/ui/components/columns_area.js b/app/javascript/flavours/glitch/features/ui/components/columns_area.js index 4ea7b48fe..d4e0bedac 100644 --- a/app/javascript/flavours/glitch/features/ui/components/columns_area.js +++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.js @@ -47,7 +47,7 @@ const componentMap = { 'DIRECTORY': Directory, }; -const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started/); +const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started|^\/start/); const messages = defineMessages({ publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js index e37df7208..a8cbb837e 100644 --- a/app/javascript/flavours/glitch/features/ui/components/media_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js @@ -4,12 +4,14 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'flavours/glitch/features/video'; import classNames from 'classnames'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import IconButton from 'flavours/glitch/components/icon_button'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ImageLoader from './image_loader'; import Icon from 'flavours/glitch/components/icon'; import GIFV from 'flavours/glitch/components/gifv'; +import Footer from 'flavours/glitch/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'flavours/glitch/blurhash'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -26,10 +28,14 @@ class MediaModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.list.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string, index: PropTypes.number.isRequired, onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, + currentTime: PropTypes.number, + autoPlay: PropTypes.bool, + volume: PropTypes.number, }; state = { @@ -64,6 +70,7 @@ class MediaModal extends ImmutablePureComponent { handleChangeIndex = (e) => { const index = Number(e.currentTarget.getAttribute('data-index')); + this.setState({ index: index % this.props.media.size, zoomButtonHidden: true, @@ -87,10 +94,12 @@ class MediaModal extends ImmutablePureComponent { componentDidMount () { window.addEventListener('keydown', this.handleKeyDown, false); + this._sendBackgroundColor(); } componentWillUnmount () { window.removeEventListener('keydown', this.handleKeyDown); + this.props.onChangeBackgroundColor(null); } getIndex () { @@ -106,30 +115,38 @@ class MediaModal extends ImmutablePureComponent { handleStatusClick = e => { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); + this.context.router.history.push(`/statuses/${this.props.statusId}`); + } + + this._sendBackgroundColor(); + } + + componentDidUpdate (prevProps, prevState) { + if (prevState.index !== this.state.index) { + this._sendBackgroundColor(); + } + } + + _sendBackgroundColor () { + const { media, onChangeBackgroundColor } = this.props; + const index = this.getIndex(); + const blurhash = media.getIn([index, 'blurhash']); + + if (blurhash) { + const backgroundColor = getAverageFromBlurhash(blurhash); + onChangeBackgroundColor(backgroundColor); } } render () { - const { media, status, intl, onClose } = this.props; + const { media, statusId, intl, onClose } = this.props; const { navigationHidden } = this.state; const index = this.getIndex(); - let pagination = []; const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>; const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>; - if (media.size > 1) { - pagination = media.map((item, i) => { - const classes = ['media-modal__button']; - if (i === index) { - classes.push('media-modal__button--active'); - } - return (<li className='media-modal__page-dot' key={i}><button tabIndex='0' className={classes.join(' ')} onClick={this.handleChangeIndex} data-index={i}>{i + 1}</button></li>); - }); - } - const content = media.map((image) => { const width = image.getIn(['meta', 'original', 'width']) || null; const height = image.getIn(['meta', 'original', 'height']) || null; @@ -148,7 +165,7 @@ class MediaModal extends ImmutablePureComponent { /> ); } else if (image.get('type') === 'video') { - const { time } = this.props; + const { currentTime, autoPlay, volume } = this.props; return ( <Video @@ -157,7 +174,10 @@ class MediaModal extends ImmutablePureComponent { src={image.get('url')} width={image.get('width')} height={image.get('height')} - currentTime={time || 0} + frameRate={image.getIn(['meta', 'original', 'frame_rate'])} + currentTime={currentTime || 0} + autoPlay={autoPlay || false} + volume={volume || 1} onCloseVideo={onClose} detailed alt={image.get('description')} @@ -197,13 +217,19 @@ class MediaModal extends ImmutablePureComponent { 'media-modal__navigation--hidden': navigationHidden, }); + let pagination; + + if (media.size > 1) { + pagination = media.map((item, i) => ( + <button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}> + {i + 1} + </button> + )); + } + return ( <div className='modal-root__modal media-modal'> - <div - className='media-modal__closer' - role='presentation' - onClick={onClose} - > + <div className='media-modal__closer' role='presentation' onClick={onClose} > <ReactSwipeableViews style={swipeableViewsStyle} containerStyle={containerStyle} @@ -221,15 +247,10 @@ class MediaModal extends ImmutablePureComponent { {leftNav} {rightNav} - {status && ( - <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} - - <ul className='media-modal__pagination'> - {pagination} - </ul> + <div className='media-modal__overlay'> + {pagination && <ul className='media-modal__pagination'>{pagination}</ul>} + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> </div> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js index 488daf0cc..0fd70de34 100644 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js +++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js @@ -55,6 +55,10 @@ export default class ModalRoot extends React.PureComponent { onClose: PropTypes.func.isRequired, }; + state = { + backgroundColor: null, + }; + getSnapshotBeforeUpdate () { return { visible: !!this.props.type }; } @@ -69,6 +73,10 @@ export default class ModalRoot extends React.PureComponent { } } + setBackgroundColor = color => { + this.setState({ backgroundColor: color }); + } + renderLoading = modalId => () => { return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null; } @@ -81,13 +89,14 @@ export default class ModalRoot extends React.PureComponent { render () { const { type, props, onClose } = this.props; + const { backgroundColor } = this.state; const visible = !!type; return ( - <Base onClose={onClose} noEsc={props ? props.noEsc : false}> + <Base backgroundColor={backgroundColor} onClose={onClose} noEsc={props ? props.noEsc : false}> {visible && ( <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}> - {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />} + {(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={onClose} />} </BundleContainer> )} </Base> diff --git a/app/javascript/flavours/glitch/features/ui/components/video_modal.js b/app/javascript/flavours/glitch/features/ui/components/video_modal.js index b0a4f3f03..6b6e615a6 100644 --- a/app/javascript/flavours/glitch/features/ui/components/video_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/video_modal.js @@ -3,9 +3,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'flavours/glitch/features/video'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage } from 'react-intl'; -import classNames from 'classnames'; -import Icon from 'flavours/glitch/components/icon'; +import Footer from 'flavours/glitch/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'flavours/glitch/blurhash'; export default class VideoModal extends ImmutablePureComponent { @@ -15,24 +14,28 @@ export default class VideoModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string, options: PropTypes.shape({ startTime: PropTypes.number, autoPlay: PropTypes.bool, defaultVolume: PropTypes.number, }), onClose: PropTypes.func.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, }; - handleStatusClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); + componentDidMount () { + const { media, onChangeBackgroundColor, onClose } = this.props; + + const backgroundColor = getAverageFromBlurhash(media.get('blurhash')); + + if (backgroundColor) { + onChangeBackgroundColor(backgroundColor); } } render () { - const { media, status, onClose } = this.props; + const { media, statusId, onClose } = this.props; const options = this.props.options || {}; return ( @@ -52,11 +55,9 @@ export default class VideoModal extends ImmutablePureComponent { /> </div> - {status && ( - <div className={classNames('media-modal__meta')}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} + <div className='media-modal__overlay'> + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> ); } diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js index 61a34fd2b..1149eb14e 100644 --- a/app/javascript/flavours/glitch/features/ui/index.js +++ b/app/javascript/flavours/glitch/features/ui/index.js @@ -50,9 +50,11 @@ import { Search, GettingStartedMisc, Directory, + FollowRecommendations, } from 'flavours/glitch/util/async-components'; import { HotKeys } from 'react-hotkeys'; import { me } from 'flavours/glitch/util/initial_state'; +import { closeOnboarding, INTRODUCTION_VERSION } from 'flavours/glitch/actions/onboarding'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; // Dummy import, to make sure that <Status /> ends up in the application bundle. @@ -75,6 +77,7 @@ const mapStateToProps = state => ({ showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']), hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']), moved: state.getIn(['accounts', me, 'moved']) && state.getIn(['accounts', state.getIn(['accounts', me, 'moved'])]), + firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION, }); const keyMap = { @@ -207,6 +210,7 @@ class SwitchingColumnsArea extends React.PureComponent { <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} /> <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} /> + <WrappedRoute path='/start' component={FollowRecommendations} content={children} /> <WrappedRoute path='/search' component={Search} content={children} /> <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> @@ -260,6 +264,7 @@ class UI extends React.Component { unreadNotifications: PropTypes.number, showFaviconBadge: PropTypes.bool, moved: PropTypes.map, + firstLaunch: PropTypes.bool, }; state = { @@ -378,6 +383,12 @@ class UI extends React.Component { this.favicon = new Favico({ animation:"none" }); + // On first launch, redirect to the follow recommendations page + if (this.props.firstLaunch) { + this.context.router.history.replace('/start'); + this.props.dispatch(closeOnboarding()); + } + this.props.dispatch(fetchMarkers()); this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); diff --git a/app/javascript/flavours/glitch/features/video/index.js b/app/javascript/flavours/glitch/features/video/index.js index a81311c67..fcbf07ce2 100644 --- a/app/javascript/flavours/glitch/features/video/index.js +++ b/app/javascript/flavours/glitch/features/video/index.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import { fromJS, is } from 'immutable'; +import { is } from 'immutable'; import { throttle, debounce } from 'lodash'; import classNames from 'classnames'; import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen'; @@ -120,10 +120,10 @@ class Video extends React.PureComponent { deployPictureInPicture: PropTypes.func, preventPlayback: PropTypes.bool, blurhash: PropTypes.string, - link: PropTypes.node, autoPlay: PropTypes.bool, volume: PropTypes.number, muted: PropTypes.bool, + componetIndex: PropTypes.number, }; static defaultProps = { @@ -510,25 +510,14 @@ class Video extends React.PureComponent { } handleOpenVideo = () => { - const { src, preview, width, height, alt } = this.props; - - const media = fromJS({ - type: 'video', - url: src, - preview_url: preview, - description: alt, - width, - height, - }); + this.video.pause(); - const options = { + this.props.onOpenVideo({ startTime: this.video.currentTime, autoPlay: !this.state.paused, defaultVolume: this.state.volume, - }; - - this.video.pause(); - this.props.onOpenVideo(media, options); + componetIndex: this.props.componetIndex, + }); } handleCloseVideo = () => { @@ -548,7 +537,7 @@ class Video extends React.PureComponent { } render () { - const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link, editable, blurhash } = this.props; + const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, editable, blurhash } = this.props; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const progress = Math.min((currentTime / duration) * 100, 100); const playerStyle = {}; @@ -666,8 +655,6 @@ class Video extends React.PureComponent { <span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span> </span> )} - - {link && <span className='video-player__link'>{link}</span>} </div> <div className='video-player__buttons right'> diff --git a/app/javascript/flavours/glitch/reducers/suggestions.js b/app/javascript/flavours/glitch/reducers/suggestions.js index a08fedc25..2bc30d2c6 100644 --- a/app/javascript/flavours/glitch/reducers/suggestions.js +++ b/app/javascript/flavours/glitch/reducers/suggestions.js @@ -19,18 +19,18 @@ export default function suggestionsReducer(state = initialState, action) { return state.set('isLoading', true); case SUGGESTIONS_FETCH_SUCCESS: return state.withMutations(map => { - map.set('items', fromJS(action.accounts.map(x => x.id))); + map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id })))); map.set('isLoading', false); }); case SUGGESTIONS_FETCH_FAIL: return state.set('isLoading', false); case SUGGESTIONS_DISMISS: - return state.update('items', list => list.filterNot(id => id === action.id)); + return state.update('items', list => list.filterNot(x => x.account === action.id)); case ACCOUNT_BLOCK_SUCCESS: case ACCOUNT_MUTE_SUCCESS: - return state.update('items', list => list.filterNot(id => id === action.relationship.id)); + return state.update('items', list => list.filterNot(x => x.account === action.relationship.id)); case DOMAIN_BLOCK_SUCCESS: - return state.update('items', list => list.filterNot(id => action.accounts.includes(id))); + return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account))); default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/timelines.js b/app/javascript/flavours/glitch/reducers/timelines.js index 882b48790..7d815d850 100644 --- a/app/javascript/flavours/glitch/reducers/timelines.js +++ b/app/javascript/flavours/glitch/reducers/timelines.js @@ -9,6 +9,7 @@ import { TIMELINE_CONNECT, TIMELINE_DISCONNECT, TIMELINE_LOAD_PENDING, + TIMELINE_MARK_AS_PARTIAL, } from 'flavours/glitch/actions/timelines'; import { ACCOUNT_BLOCK_SUCCESS, @@ -173,6 +174,12 @@ export default function timelines(state = initialState, action) { initialTimeline, map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items), ); + case TIMELINE_MARK_AS_PARTIAL: + return state.update( + action.timeline, + initialTimeline, + map => map.set('isPartial', true).set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('unread', 0), + ); default: return state; } diff --git a/app/javascript/flavours/glitch/styles/components/accounts.scss b/app/javascript/flavours/glitch/styles/components/accounts.scss index 6dcfbcb02..377cdd91f 100644 --- a/app/javascript/flavours/glitch/styles/components/accounts.scss +++ b/app/javascript/flavours/glitch/styles/components/accounts.scss @@ -11,6 +11,19 @@ overflow: hidden; text-decoration: none; font-size: 14px; + + &--with-note { + strong { + display: inline; + } + } + } + + &__note { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: $ui-secondary-color; } &.small { @@ -26,6 +39,16 @@ } } +.follow-recommendations-account { + .icon-button { + color: $ui-primary-color; + + &.active { + color: $valid-value-color; + } + } +} + .account__wrapper { display: flex; } @@ -555,6 +578,17 @@ color: $primary-text-color; } + .account__header__joined { + font-size: 14px; + padding: 5px 15px; + color: $darker-text-color; + + .columns-area--mobile & { + padding-left: 20px; + padding-right: 20px; + } + } + .account__header__fields { margin: 0; border-top: 1px solid lighten($ui-base-color, 12%); diff --git a/app/javascript/flavours/glitch/styles/components/boost.scss b/app/javascript/flavours/glitch/styles/components/boost.scss index c8b97fabe..fb1451cb2 100644 --- a/app/javascript/flavours/glitch/styles/components/boost.scss +++ b/app/javascript/flavours/glitch/styles/components/boost.scss @@ -1,22 +1,32 @@ -button.icon-button i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); +button.icon-button { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); + } - &:hover { + &:hover i.fa-retweet { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); } -} -button.icon-button.reblogPrivate i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + &.reblogPrivate { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + } - &:hover { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + &:hover i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + } + } + + &.disabled { + i.fa-retweet, + &:hover i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>"); + } } -} -// Disabled variant -button.icon-button.disabled i.fa-retweet { - &, &:hover { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>"); + .media-modal__overlay .picture-in-picture__footer & { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($white)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); + } } } diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index 42d64c135..7f3d27dba 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -796,3 +796,62 @@ text-align: center; } } + +.column-title { + text-align: center; + padding: 40px; + + .logo { + fill: $primary-text-color; + width: 50px; + margin: 0 auto; + margin-bottom: 40px; + } + + h3 { + font-size: 24px; + line-height: 1.5; + font-weight: 700; + margin-bottom: 10px; + } + + p { + font-size: 16px; + line-height: 24px; + font-weight: 400; + color: $darker-text-color; + } +} + +.column-actions { + display: flex; + align-items: center; + justify-content: center; + padding: 40px; + padding-top: 40px; + padding-bottom: 200px; + + &__background { + position: absolute; + left: 0; + bottom: 0; + height: 220px; + width: auto; + } +} + +.column-list { + margin: 0 20px; + border: 1px solid lighten($ui-base-color, 8%); + background: darken($ui-base-color, 2%); + border-radius: 4px; + + &__empty-message { + padding: 40px; + text-align: center; + font-size: 16px; + line-height: 24px; + font-weight: 400; + color: $darker-text-color; + } +} diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss index aada9a928..16045d5ee 100644 --- a/app/javascript/flavours/glitch/styles/components/index.scss +++ b/app/javascript/flavours/glitch/styles/components/index.scss @@ -334,11 +334,11 @@ } } -.star-icon.active { +.icon-button.star-icon.active { color: $gold-star; } -.bookmark-icon.active { +.icon-button.bookmark-icon.active { color: $red-bookmark; } diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss index 6cbcb05bd..88212457f 100644 --- a/app/javascript/flavours/glitch/styles/components/media.scss +++ b/app/javascript/flavours/glitch/styles/components/media.scss @@ -187,16 +187,19 @@ height: 100%; position: relative; - .extended-video-player { - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; + &__close, + &__zoom-button { + color: rgba($white, 0.7); - video { - max-width: $media-modal-media-max-width; - max-height: $media-modal-media-max-height; + &:hover, + &:focus, + &:active { + color: $white; + background-color: rgba($white, 0.15); + } + + &:focus { + background-color: rgba($white, 0.3); } } } @@ -233,10 +236,10 @@ } .media-modal__nav { - background: rgba($base-overlay-background, 0.5); + background: transparent; box-sizing: border-box; border: 0; - color: $primary-text-color; + color: rgba($primary-text-color, 0.7); cursor: pointer; display: flex; align-items: center; @@ -247,6 +250,12 @@ position: absolute; top: 0; bottom: 0; + + &:hover, + &:focus, + &:active { + color: $primary-text-color; + } } .media-modal__nav--left { @@ -257,58 +266,86 @@ right: 0; } -.media-modal__pagination { - width: 100%; - text-align: center; +.media-modal__overlay { + max-width: 600px; position: absolute; left: 0; - bottom: 20px; - pointer-events: none; -} + right: 0; + bottom: 0; + margin: 0 auto; -.media-modal__meta { - text-align: center; - position: absolute; - left: 0; - bottom: 20px; - width: 100%; - pointer-events: none; + .picture-in-picture__footer { + border-radius: 0; + background: transparent; + padding: 20px 0; - &--shifted { - bottom: 62px; - } + .icon-button { + color: $white; - a { - pointer-events: auto; - text-decoration: none; - font-weight: 500; - color: $ui-secondary-color; + &:hover, + &:focus, + &:active { + color: $white; + background-color: rgba($white, 0.15); + } - &:hover, - &:focus, - &:active { - text-decoration: underline; + &:focus { + background-color: rgba($white, 0.3); + } + + &.active { + color: $highlight-text-color; + + &:hover, + &:focus, + &:active { + background: rgba($highlight-text-color, 0.15); + } + + &:focus { + background: rgba($highlight-text-color, 0.3); + } + } + + &.star-icon.active { + color: $gold-star; + + &:hover, + &:focus, + &:active { + background: rgba($gold-star, 0.15); + } + + &:focus { + background: rgba($gold-star, 0.3); + } + } } } } -.media-modal__page-dot { - display: inline-block; +.media-modal__pagination { + display: flex; + justify-content: center; + margin-bottom: 20px; } -.media-modal__button { +.media-modal__page-dot { + flex: 0 0 auto; background-color: $white; - height: 12px; - width: 12px; - border-radius: 6px; - margin: 10px; + opacity: 0.4; + height: 6px; + width: 6px; + border-radius: 50%; + margin: 0 4px; padding: 0; border: 0; font-size: 0; -} + transition: opacity .2s ease-in-out; -.media-modal__button--active { - background-color: $ui-highlight-color; + &.active { + opacity: 1; + } } .media-modal__close { diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss index f5acd814e..671323bc5 100644 --- a/app/javascript/flavours/glitch/styles/components/modal.scss +++ b/app/javascript/flavours/glitch/styles/components/modal.scss @@ -14,6 +14,7 @@ right: 0; bottom: 0; background: rgba($base-overlay-background, 0.7); + transition: background 0.5s; } .modal-root__container { diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index c1249d0c4..69c9a6fe3 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -1130,21 +1130,6 @@ a.status-card.compact:hover { .audio-player { border-radius: 0; } - - @media screen and (max-width: 415px) { - width: 210px; - bottom: 10px; - right: 10px; - - &__footer { - display: none; - } - - .video-player, - .audio-player { - border-radius: 0 0 4px 4px; - } - } } .picture-in-picture-placeholder { diff --git a/app/javascript/flavours/glitch/util/async-components.js b/app/javascript/flavours/glitch/util/async-components.js index 26255bbb7..a6c6ab0ab 100644 --- a/app/javascript/flavours/glitch/util/async-components.js +++ b/app/javascript/flavours/glitch/util/async-components.js @@ -169,3 +169,7 @@ export function Tesseract () { export function Directory () { return import(/* webpackChunkName: "features/glitch/async/directory" */'flavours/glitch/features/directory'); } + +export function FollowRecommendations () { + return import(/* webpackChunkName: "features/glitch/async/follow_recommendations" */'flavours/glitch/features/follow_recommendations'); +} diff --git a/app/javascript/flavours/glitch/util/emoji/index.js b/app/javascript/flavours/glitch/util/emoji/index.js index 57c1d719a..162946bbb 100644 --- a/app/javascript/flavours/glitch/util/emoji/index.js +++ b/app/javascript/flavours/glitch/util/emoji/index.js @@ -11,7 +11,7 @@ const emojiFilenames = (emojis) => { }; // Emoji requiring extra borders depending on theme -const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲']); +const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲']); const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️']); const emojiFilename = (filename) => { diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index dca44917a..abd5681d4 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -24,6 +24,7 @@ export function normalizeAccount(account) { account.display_name_html = emojify(escapeTextContentForBrowser(displayName), emojiMap); account.note_emojified = emojify(account.note, emojiMap); + account.note_plain = unescapeHTML(account.note); if (account.fields) { account.fields = account.fields.map(pair => ({ @@ -61,6 +62,13 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); normalStatus.hidden = normalOldStatus.get('hidden'); } else { + // If the status has a CW but no contents, treat the CW as if it were the + // status' contents, to avoid having a CW toggle with seemingly no effect. + if (normalStatus.spoiler_text && !normalStatus.content) { + normalStatus.content = normalStatus.spoiler_text; + normalStatus.spoiler_text = ''; + } + const spoilerText = normalStatus.spoiler_text || ''; const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); const emojiMap = makeEmojiMap(normalStatus); diff --git a/app/javascript/mastodon/actions/onboarding.js b/app/javascript/mastodon/actions/onboarding.js index 42d8ea33f..a1dd3a731 100644 --- a/app/javascript/mastodon/actions/onboarding.js +++ b/app/javascript/mastodon/actions/onboarding.js @@ -1,21 +1,8 @@ import { changeSetting, saveSettings } from './settings'; -import { requestBrowserPermission } from './notifications'; export const INTRODUCTION_VERSION = 20181216044202; export const closeOnboarding = () => dispatch => { dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION)); dispatch(saveSettings()); - - dispatch(requestBrowserPermission((permission) => { - if (permission === 'granted') { - dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); - dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); - dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); - dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); - dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); - dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); - dispatch(saveSettings()); - } - })); }; diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index a178faead..37560a74c 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -32,6 +32,7 @@ export function submitSearch() { const value = getState().getIn(['search', 'value']); if (value.length === 0) { + dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, '')); return; } diff --git a/app/javascript/mastodon/actions/suggestions.js b/app/javascript/mastodon/actions/suggestions.js index b15bd916b..1f1116e75 100644 --- a/app/javascript/mastodon/actions/suggestions.js +++ b/app/javascript/mastodon/actions/suggestions.js @@ -1,5 +1,6 @@ import api from '../api'; import { importFetchedAccounts } from './importer'; +import { fetchRelationships } from './accounts'; export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST'; export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS'; @@ -7,13 +8,17 @@ export const SUGGESTIONS_FETCH_FAIL = 'SUGGESTIONS_FETCH_FAIL'; export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS'; -export function fetchSuggestions() { +export function fetchSuggestions(withRelationships = false) { return (dispatch, getState) => { dispatch(fetchSuggestionsRequest()); - api(getState).get('/api/v1/suggestions').then(response => { - dispatch(importFetchedAccounts(response.data)); + api(getState).get('/api/v2/suggestions', { params: { limit: 20 } }).then(response => { + dispatch(importFetchedAccounts(response.data.map(x => x.account))); dispatch(fetchSuggestionsSuccess(response.data)); + + if (withRelationships) { + dispatch(fetchRelationships(response.data.map(item => item.account.id))); + } }).catch(error => dispatch(fetchSuggestionsFail(error))); }; }; @@ -25,10 +30,10 @@ export function fetchSuggestionsRequest() { }; }; -export function fetchSuggestionsSuccess(accounts) { +export function fetchSuggestionsSuccess(suggestions) { return { type: SUGGESTIONS_FETCH_SUCCESS, - accounts, + suggestions, skipLoading: true, }; }; @@ -48,5 +53,12 @@ export const dismissSuggestion = accountId => (dispatch, getState) => { id: accountId, }); - api(getState).delete(`/api/v1/suggestions/${accountId}`); + api(getState).delete(`/api/v1/suggestions/${accountId}`).then(() => { + dispatch(fetchSuggestionsRequest()); + + api(getState).get('/api/v2/suggestions').then(response => { + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(fetchSuggestionsSuccess(response.data)); + }).catch(error => dispatch(fetchSuggestionsFail(error))); + }).catch(() => {}); }; diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index de1725acf..31ae09e4a 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -18,17 +18,26 @@ export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING'; export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; +export const TIMELINE_MARK_AS_PARTIAL = 'TIMELINE_MARK_AS_PARTIAL'; + export const loadPending = timeline => ({ type: TIMELINE_LOAD_PENDING, timeline, }); export function updateTimeline(timeline, status, accept) { - return dispatch => { + return (dispatch, getState) => { if (typeof accept === 'function' && !accept(status)) { return; } + if (getState().getIn(['timelines', timeline, 'isPartial'])) { + // Prevent new items from being added to a partial timeline, + // since it will be reloaded anyway + + return; + } + dispatch(importFetchedStatus(status)); dispatch({ @@ -183,3 +192,8 @@ export const disconnectTimeline = timeline => ({ timeline, usePendingItems: preferPendingItems, }); + +export const markAsPartial = timeline => ({ + type: TIMELINE_MARK_AS_PARTIAL, + timeline, +}); diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js index 0e40ee1d6..a85d683a7 100644 --- a/app/javascript/mastodon/components/account.js +++ b/app/javascript/mastodon/components/account.js @@ -78,8 +78,10 @@ class Account extends ImmutablePureComponent { let buttons; - if (onActionClick && actionIcon) { - buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />; + if (actionIcon) { + if (onActionClick) { + buttons = <IconButton icon={actionIcon} title={actionTitle} onClick={this.handleAction} />; + } } else if (account.get('id') !== me && account.get('relationship', null) !== null) { const following = account.getIn(['relationship', 'following']); const requested = account.getIn(['relationship', 'requested']); diff --git a/app/javascript/mastodon/components/logo.js b/app/javascript/mastodon/components/logo.js new file mode 100644 index 000000000..d1c7f08a9 --- /dev/null +++ b/app/javascript/mastodon/components/logo.js @@ -0,0 +1,9 @@ +import React from 'react'; + +const Logo = () => ( + <svg viewBox='0 0 216.4144 232.00976' className='logo'> + <use xlinkHref='#mastodon-svg-logo' /> + </svg> +); + +export default Logo; diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js index 0a8f42585..2e7ce2e60 100644 --- a/app/javascript/mastodon/components/media_gallery.js +++ b/app/javascript/mastodon/components/media_gallery.js @@ -11,7 +11,7 @@ import { debounce } from 'lodash'; import Blurhash from 'mastodon/components/blurhash'; const messages = defineMessages({ - toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Hide {number, plural, one {image} other {images}}' }, + toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: '{number, plural, one {Hide image} other {Hide images}}' }, }); class Item extends React.PureComponent { diff --git a/app/javascript/mastodon/components/regeneration_indicator.js b/app/javascript/mastodon/components/regeneration_indicator.js index faf88c6b5..52696a4a7 100644 --- a/app/javascript/mastodon/components/regeneration_indicator.js +++ b/app/javascript/mastodon/components/regeneration_indicator.js @@ -2,7 +2,7 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import illustration from 'mastodon/../images/elephant_ui_working.svg'; -const MissingIndicator = () => ( +const RegenerationIndicator = () => ( <div className='regeneration-indicator'> <div className='regeneration-indicator__figure'> <img src={illustration} alt='' /> @@ -15,4 +15,4 @@ const MissingIndicator = () => ( </div> ); -export default MissingIndicator; +export default RegenerationIndicator; diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 35bd50514..bf21a9fd6 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -170,10 +170,6 @@ export default class StatusContent extends React.PureComponent { render () { const { status } = this.props; - if (status.get('content').length === 0) { - return null; - } - const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const renderReadMore = this.props.onClick && status.get('collapsed'); const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js index 3ac58cf7c..513b59908 100644 --- a/app/javascript/mastodon/containers/mastodon.js +++ b/app/javascript/mastodon/containers/mastodon.js @@ -1,12 +1,10 @@ import React from 'react'; -import { Provider, connect } from 'react-redux'; +import { Provider } from 'react-redux'; import PropTypes from 'prop-types'; import configureStore from '../store/configureStore'; -import { INTRODUCTION_VERSION } from '../actions/onboarding'; import { BrowserRouter, Route } from 'react-router-dom'; import { ScrollContext } from 'react-router-scroll-4'; import UI from '../features/ui'; -import Introduction from '../features/introduction'; import { fetchCustomEmojis } from '../actions/custom_emojis'; import { hydrateStore } from '../actions/store'; import { connectUserStream } from '../actions/streaming'; @@ -26,39 +24,6 @@ const hydrateAction = hydrateStore(initialState); store.dispatch(hydrateAction); store.dispatch(fetchCustomEmojis()); -const mapStateToProps = state => ({ - showIntroduction: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION, -}); - -@connect(mapStateToProps) -class MastodonMount extends React.PureComponent { - - static propTypes = { - showIntroduction: PropTypes.bool, - }; - - shouldUpdateScroll (_, { location }) { - return location.state !== previewMediaState && location.state !== previewVideoState; - } - - render () { - const { showIntroduction } = this.props; - - if (showIntroduction) { - return <Introduction />; - } - - return ( - <BrowserRouter basename='/web'> - <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}> - <Route path='/' component={UI} /> - </ScrollContext> - </BrowserRouter> - ); - } - -} - export default class Mastodon extends React.PureComponent { static propTypes = { @@ -76,6 +41,10 @@ export default class Mastodon extends React.PureComponent { } } + shouldUpdateScroll (_, { location }) { + return location.state !== previewMediaState && location.state !== previewVideoState; + } + render () { const { locale } = this.props; @@ -83,7 +52,11 @@ export default class Mastodon extends React.PureComponent { <IntlProvider locale={locale} messages={messages}> <Provider store={store}> <ErrorBoundary> - <MastodonMount /> + <BrowserRouter basename='/web'> + <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}> + <Route path='/' component={UI} /> + </ScrollContext> + </BrowserRouter> </ErrorBoundary> </Provider> </IntlProvider> diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 8e49486bd..20641121f 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -326,6 +326,8 @@ class Header extends ImmutablePureComponent { {account.get('id') !== me && !suspended && <AccountNoteContainer account={account} />} {account.get('note').length > 0 && account.get('note') !== '<p></p>' && <div className='account__header__content translate' dangerouslySetInnerHTML={content} />} + + <div className='account__header__joined'><FormattedMessage id='account.joined' defaultMessage='Joined {date}' values={{ date: intl.formatDate(account.get('created_at'), { year: 'numeric', month: 'short', day: '2-digit' }) }} /></div> </div> {!suspended && ( diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js index 4b4cdff74..958a65286 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.js +++ b/app/javascript/mastodon/features/compose/components/search_results.js @@ -33,6 +33,12 @@ class SearchResults extends ImmutablePureComponent { } } + componentDidUpdate () { + if (this.props.searchTerm === '') { + this.props.fetchSuggestions(); + } + } + handleLoadMoreAccounts = () => this.props.expandSearch('accounts'); handleLoadMoreStatuses = () => this.props.expandSearch('statuses'); @@ -42,7 +48,7 @@ class SearchResults extends ImmutablePureComponent { render () { const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props; - if (results.isEmpty() && !suggestions.isEmpty()) { + if (searchTerm === '' && !suggestions.isEmpty()) { return ( <div className='search-results'> <div className='trends'> @@ -51,12 +57,12 @@ class SearchResults extends ImmutablePureComponent { <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' /> </div> - {suggestions && suggestions.map(accountId => ( + {suggestions && suggestions.map(suggestion => ( <AccountContainer - key={accountId} - id={accountId} - actionIcon='times' - actionTitle={intl.formatMessage(messages.dismissSuggestion)} + key={suggestion.get('account')} + id={suggestion.get('account')} + actionIcon={suggestion.get('source') === 'past_interaction' ? 'times' : null} + actionTitle={suggestion.get('source') === 'past_interaction' ? intl.formatMessage(messages.dismissSuggestion) : null} onActionClick={dismissSuggestion} /> ))} diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index 3de79ac9b..fb1a3804c 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -11,7 +11,7 @@ const emojiFilenames = (emojis) => { }; // Emoji requiring extra borders depending on theme -const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲']); +const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲']); const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️']); const emojiFilename = (filename) => { diff --git a/app/javascript/mastodon/features/follow_recommendations/components/account.js b/app/javascript/mastodon/features/follow_recommendations/components/account.js new file mode 100644 index 000000000..bd855aab0 --- /dev/null +++ b/app/javascript/mastodon/features/follow_recommendations/components/account.js @@ -0,0 +1,85 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { connect } from 'react-redux'; +import { makeGetAccount } from 'mastodon/selectors'; +import Avatar from 'mastodon/components/avatar'; +import DisplayName from 'mastodon/components/display_name'; +import Permalink from 'mastodon/components/permalink'; +import IconButton from 'mastodon/components/icon_button'; +import { injectIntl, defineMessages } from 'react-intl'; +import { followAccount, unfollowAccount } from 'mastodon/actions/accounts'; + +const messages = defineMessages({ + follow: { id: 'account.follow', defaultMessage: 'Follow' }, + unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, +}); + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = (state, props) => ({ + account: getAccount(state, props.id), + }); + + return mapStateToProps; +}; + +const getFirstSentence = str => { + const arr = str.split(/(([\.\?!]+\s)|[.。?!\n•])/); + + return arr[0]; +}; + +export default @connect(makeMapStateToProps) +@injectIntl +class Account extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, + }; + + handleFollow = () => { + const { account, dispatch } = this.props; + + if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { + dispatch(unfollowAccount(account.get('id'))); + } else { + dispatch(followAccount(account.get('id'))); + } + } + + render () { + const { account, intl } = this.props; + + let button; + + if (account.getIn(['relationship', 'following'])) { + button = <IconButton icon='check' title={intl.formatMessage(messages.unfollow)} active onClick={this.handleFollow} />; + } else { + button = <IconButton icon='plus' title={intl.formatMessage(messages.follow)} onClick={this.handleFollow} />; + } + + return ( + <div className='account follow-recommendations-account'> + <div className='account__wrapper'> + <Permalink className='account__display-name account__display-name--with-note' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> + + <DisplayName account={account} /> + + <div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div> + </Permalink> + + <div className='account__relationship'> + {button} + </div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/follow_recommendations/index.js b/app/javascript/mastodon/features/follow_recommendations/index.js new file mode 100644 index 000000000..a35ff3e82 --- /dev/null +++ b/app/javascript/mastodon/features/follow_recommendations/index.js @@ -0,0 +1,109 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { connect } from 'react-redux'; +import { FormattedMessage } from 'react-intl'; +import { fetchSuggestions } from 'mastodon/actions/suggestions'; +import { changeSetting, saveSettings } from 'mastodon/actions/settings'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { markAsPartial } from 'mastodon/actions/timelines'; +import Column from 'mastodon/features/ui/components/column'; +import Account from './components/account'; +import Logo from 'mastodon/components/logo'; +import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg'; +import Button from 'mastodon/components/button'; + +const mapStateToProps = state => ({ + suggestions: state.getIn(['suggestions', 'items']), + isLoading: state.getIn(['suggestions', 'isLoading']), +}); + +export default @connect(mapStateToProps) +class FollowRecommendations extends ImmutablePureComponent { + + static contextTypes = { + router: PropTypes.object.isRequired, + }; + + static propTypes = { + dispatch: PropTypes.func.isRequired, + suggestions: ImmutablePropTypes.list, + isLoading: PropTypes.bool, + }; + + componentDidMount () { + const { dispatch, suggestions } = this.props; + + // Don't re-fetch if we're e.g. navigating backwards to this page, + // since we don't want followed accounts to disappear from the list + + if (suggestions.size === 0) { + dispatch(fetchSuggestions(true)); + } + } + + componentWillUnmount () { + const { dispatch } = this.props; + + // Force the home timeline to be reloaded when the user navigates + // to it; if the user is new, it would've been empty before + + dispatch(markAsPartial('home')); + } + + handleDone = () => { + const { dispatch } = this.props; + const { router } = this.context; + + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); + dispatch(saveSettings()); + } + })); + + router.history.push('/timelines/home'); + } + + render () { + const { suggestions, isLoading } = this.props; + + return ( + <Column> + <div className='scrollable'> + <div className='column-title'> + <Logo /> + <h3><FormattedMessage id='follow_recommendations.heading' defaultMessage="Follow people you'd like to see posts from! Here are some suggestions." /></h3> + <p><FormattedMessage id='follow_recommendations.lead' defaultMessage="Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!" /></p> + </div> + + {!isLoading && ( + <React.Fragment> + <div className='column-list'> + {suggestions.size > 0 ? suggestions.map(suggestion => ( + <Account key={suggestion.get('account')} id={suggestion.get('account')} /> + )) : ( + <div className='column-list__empty-message'> + <FormattedMessage id='empty_column.follow_recommendations' defaultMessage='Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.' /> + </div> + )} + </div> + + <div className='column-actions'> + <img src={imageGreeting} alt='' className='column-actions__background' /> + <Button onClick={this.handleDone}><FormattedMessage id='follow_recommendations.done' defaultMessage='Done' /></Button> + </div> + </React.Fragment> + )} + </div> + </Column> + ); + } + +} diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js index 577ff33bb..b85c69af7 100644 --- a/app/javascript/mastodon/features/home_timeline/index.js +++ b/app/javascript/mastodon/features/home_timeline/index.js @@ -73,7 +73,7 @@ class HomeTimeline extends React.PureComponent { } componentDidMount () { - this.props.dispatch(fetchAnnouncements()); + setTimeout(() => this.props.dispatch(fetchAnnouncements()), 700); this._checkIfReloadNeeded(false, this.props.isPartial); } @@ -153,7 +153,7 @@ class HomeTimeline extends React.PureComponent { scrollKey={`home_timeline-${columnId}`} onLoadMore={this.handleLoadMore} timelineId='home' - emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />} + emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />} shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index cf8fd7127..1a621eca9 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -178,7 +178,7 @@ class Notifications extends React.PureComponent { render () { const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; - const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />; + const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />; let scrollableContent = null; diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 270be2851..039abe432 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -53,7 +53,7 @@ const messages = defineMessages({ publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, }); -const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started/); +const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started|^\/start/); export default @(component => injectIntl(component, { withRef: true })) class ColumnsArea extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 507ac1df1..2b9fe1603 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -51,10 +51,12 @@ import { Lists, Search, Directory, + FollowRecommendations, } from './util/async-components'; import { me } from '../../initial_state'; import { previewState as previewMediaState } from './components/media_modal'; import { previewState as previewVideoState } from './components/video_modal'; +import { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding'; // Dummy import, to make sure that <Status /> ends up in the application bundle. // Without this it ends up in ~8 very commonly used bundles. @@ -71,6 +73,7 @@ const mapStateToProps = state => ({ hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4, dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null, + firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION, }); const keyMap = { @@ -167,6 +170,7 @@ class SwitchingColumnsArea extends React.PureComponent { <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} /> <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> + <WrappedRoute path='/start' component={FollowRecommendations} content={children} /> <WrappedRoute path='/search' component={Search} content={children} /> <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> @@ -215,6 +219,7 @@ class UI extends React.PureComponent { intl: PropTypes.object.isRequired, dropdownMenuIsOpen: PropTypes.bool, layout: PropTypes.string.isRequired, + firstLaunch: PropTypes.bool, }; state = { @@ -350,10 +355,15 @@ class UI extends React.PureComponent { navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage); } - this.props.dispatch(fetchMarkers()); + // On first launch, redirect to the follow recommendations page + if (this.props.firstLaunch) { + this.context.router.history.replace('/start'); + this.props.dispatch(closeOnboarding()); + } + this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); - + setTimeout(() => this.props.dispatch(fetchMarkers()), 500); setTimeout(() => this.props.dispatch(fetchFilters()), 500); this.hotkeys.__mousetrap__.stopCallback = (e, element) => { diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 986efda1e..aa90b226a 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -153,3 +153,7 @@ export function Audio () { export function Directory () { return import(/* webpackChunkName: "features/directory" */'../../directory'); } + +export function FollowRecommendations () { + return import(/* webpackChunkName: "features/follow_recommendations" */'../../follow_recommendations'); +} diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json new file mode 100644 index 000000000..1b311b04d --- /dev/null +++ b/app/javascript/mastodon/locales/af.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "Note", + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.badges.group": "Group", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "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", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "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", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "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.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 4d43a2720..63cb17dd3 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -1,118 +1,119 @@ { - "account.account_note_header": "ملاحظة", - "account.add_or_remove_from_list": "أضفه أو أزله من القائمة", + "account.account_note_header": "مُلاحظة", + "account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة", "account.badges.bot": "روبوت", - "account.badges.group": "فريق", + "account.badges.group": "مجموعة", "account.block": "حظر @{name}", - "account.block_domain": "إخفاء كل شيء قادم من اسم النطاق {domain}", + "account.block_domain": "حظر اسم النِّطاق {domain}", "account.blocked": "محظور", - "account.browse_more_on_origin_server": "تصفح المزيد على الملف التعريفي الأصلي", + "account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي", "account.cancel_follow_request": "إلغاء طلب المتابَعة", - "account.direct": "رسالة خاصة إلى @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "النطاق مخفي", - "account.edit_profile": "تعديل الملف الشخصي", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "أوصِ به على صفحتك", - "account.follow": "تابِع", - "account.followers": "مُتابِعون", - "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.", - "account.follows_you": "يتابعك", - "account.hide_reblogs": "إخفاء ترقيات @{name}", + "account.direct": "مراسلة @{name} بشكلة مباشر", + "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}", + "account.domain_blocked": "اسم النِّطاق محظور", + "account.edit_profile": "تحرير الملف الشخصي", + "account.enable_notifications": "أشعرني عندما ينشر @{name}", + "account.endorse": "أوصِ به على صفحتك الشخصية", + "account.follow": "المُتابعة", + "account.followers": "المُتابِعون", + "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم حتى الآن.", + "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two{مُتابعانِ اِثنان} few{{counter} مُتابِعين} many{{counter} مُتابِعًا} other {{counter} مُتابع}}", + "account.following_counter": "{count, plural, zero{لا يُتابِع} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}", + "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.", + "account.follows_you": "يُتابِعُك", + "account.hide_reblogs": "إخفاء تعزيزات @{name}", + "account.joined": "Joined {date}", "account.last_status": "آخر نشاط", - "account.link_verified_on": "تم التحقق مِن مِلْكية هذا الرابط بتاريخ {date}", - "account.locked_info": "تم تأمين خصوصية هذا الحساب عبر قفل. صاحب الحساب يُراجِع يدويا طلبات المتابَعة و الاشتراك بحسابه.", + "account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}", + "account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.", "account.media": "وسائط", - "account.mention": "أذكُر @{name}", - "account.moved_to": "{name} انتقل إلى:", - "account.mute": "أكتم @{name}", - "account.mute_notifications": "كتم الإخطارات من @{name}", - "account.muted": "مكتوم", - "account.never_active": "أبدا", + "account.mention": "ذِكر @{name}", + "account.moved_to": "لقد انتقل {name} إلى:", + "account.mute": "كَتم @{name}", + "account.mute_notifications": "كَتم الإشعارات من @{name}", + "account.muted": "مَكتوم", + "account.never_active": "أبدًا", "account.posts": "تبويقات", - "account.posts_with_replies": "التبويقات والردود", - "account.report": "ابلِغ عن @{name}", - "account.requested": "في انتظار الموافقة. اضْغَطْ/ي لإلغاء طلب المتابعة", - "account.share": "شارك ملف تعريف @{name}", - "account.show_reblogs": "اعرض ترقيات @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account.unblock": "إلغاء الحظر عن @{name}", - "account.unblock_domain": "فك الخْفى عن {domain}", - "account.unendorse": "أزل ترويجه مِن الملف التعريفي", - "account.unfollow": "إلغاء المتابعة", - "account.unmute": "إلغاء الكتم عن @{name}", - "account.unmute_notifications": "إلغاء كتم إخطارات @{name}", - "account_note.placeholder": "انقر لإضافة ملاحظة", - "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.", - "alert.rate_limited.title": "المعدل محدود", - "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.", + "account.posts_with_replies": "التَّبويقات والرُدود", + "account.report": "الإبلاغ عن @{name}", + "account.requested": "في اِنتظر القُبول. اِنقُر لإلغاء طلب المُتابعة", + "account.share": "مُشاركة الملف الشخصي لـ @{name}", + "account.show_reblogs": "عرض تعزيزات @{name}", + "account.statuses_counter": "{count, plural, zero {لَا تَبويقات} one {تَبويقةٌ واحدة} two {تَبويقَتانِ اِثنتان} few {{counter} تَبويقات} many {{counter} تَبويقتًا} other {{counter} تَبويقة}}", + "account.unblock": "إلغاء الحَظر عن @{name}", + "account.unblock_domain": "إلغاء الحَظر عن النِّطاق {domain}", + "account.unendorse": "لا تُرَوِّج لهُ في الملف الشخصي", + "account.unfollow": "إلغاء المُتابعة", + "account.unmute": "إلغاء الكَتم عن @{name}", + "account.unmute_notifications": "إلغاء كَتم الإشعارات عن @{name}", + "account_note.placeholder": "اِنقُر لإضافة مُلاحظة", + "alert.rate_limited.message": "يُرجى إعادة المحاولة بعد {retry_time, time, medium}.", + "alert.rate_limited.title": "المُعَدَّل مَحدود", + "alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.", "alert.unexpected.title": "المعذرة!", "announcement.announcement": "إعلان", "autosuggest_hashtag.per_week": "{count} في الأسبوع", - "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة", - "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", - "bundle_column_error.retry": "إعادة المحاولة", + "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبِلَة", + "bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.", + "bundle_column_error.retry": "إعادة المُحاولة", "bundle_column_error.title": "خطأ في الشبكة", - "bundle_modal_error.close": "أغلق", - "bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", - "bundle_modal_error.retry": "إعادة المحاولة", - "column.blocks": "الحسابات المحجوبة", - "column.bookmarks": "الفواصل المرجعية", - "column.community": "الخيط العام المحلي", - "column.direct": "الرسائل المباشرة", - "column.directory": "استعراض الملفات التعريفية", - "column.domain_blocks": "النطاقات المخفية", - "column.favourites": "المفضلة", - "column.follow_requests": "طلبات المتابعة", - "column.home": "الرئيسية", - "column.lists": "القوائم", - "column.mutes": "الحسابات المكتومة", - "column.notifications": "الإخطارات", - "column.pins": "التبويقات المثبتة", - "column.public": "الخيط العام الموحد", + "bundle_modal_error.close": "إغلاق", + "bundle_modal_error.message": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.", + "bundle_modal_error.retry": "إعادة المُحاولة", + "column.blocks": "المُستَخدِمون المَحظورون", + "column.bookmarks": "العَلاماتُ المَرجعيَّة", + "column.community": "الخَطُّ الزَّمَنِيُّ المَحَلِّيّ", + "column.direct": "الرَّسَائِلُ المُبَاشِرَة", + "column.directory": "تَصَفُّحُ المَلَفَّاتِ الشَّخصِيَّة", + "column.domain_blocks": "النِّطاقَاتُ المَحظُورَة", + "column.favourites": "المُفَضَّلَة", + "column.follow_requests": "طَلَبَاتُ المُتَابَعَة", + "column.home": "الرَّئِيسَة", + "column.lists": "القَوائِم", + "column.mutes": "المُستَخدِمون المَكتومون", + "column.notifications": "الإشعارَات", + "column.pins": "التَّبويقاتُ المُثَبَّتَة", + "column.public": "الخَطُّ الزَّمَنِيُّ المُوَحَّد", "column_back_button.label": "العودة", "column_header.hide_settings": "إخفاء الإعدادات", - "column_header.moveLeft_settings": "نقل القائمة إلى اليسار", - "column_header.moveRight_settings": "نقل القائمة إلى اليمين", - "column_header.pin": "تدبيس", - "column_header.show_settings": "عرض الإعدادات", - "column_header.unpin": "فك التدبيس", - "column_subheading.settings": "الإعدادات", + "column_header.moveLeft_settings": "نقل العامود إلى اليسار", + "column_header.moveRight_settings": "نقل العامود إلى اليمين", + "column_header.pin": "تثبيت", + "column_header.show_settings": "إظهار الإعدادات", + "column_header.unpin": "إلغاء التَّثبيت", + "column_subheading.settings": "الإعدَادَات", "community.column_settings.local_only": "المحلي فقط", "community.column_settings.media_only": "الوسائط فقط", "community.column_settings.remote_only": "عن بُعد فقط", - "compose_form.direct_message_warning": "لن يَظهر هذا التبويق إلا للمستخدمين المذكورين.", - "compose_form.direct_message_warning_learn_more": "اقرأ المزيد", - "compose_form.hashtag_warning": "هذا التبويق لن يُدرَج تحت أي وسم كان بما أنه غير مُدرَج. لا يُسمح بالبحث إلّا عن التبويقات العمومية عن طريق الوسوم.", - "compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.", - "compose_form.lock_disclaimer.lock": "مقفل", - "compose_form.placeholder": "فيمَ تفكّر؟", + "compose_form.direct_message_warning": "سوف تُرسَل هذه التَّبويقة فقط للمُستَخدِمين المَذكورين.", + "compose_form.direct_message_warning_learn_more": "تَعَلَّم المَزيد", + "compose_form.hashtag_warning": "لن تُدرَج هذه التبويقة تحت أي وسم بما أنَّها غير مُدرَجة. فقط التبويقات العامة يُمكن البحث عنها بواسطة الوسم.", + "compose_form.lock_disclaimer": "حسابُك غير {locked}. يُمكن لأي شخص مُتابعتك لرؤية (منشورات المتابعين فقط).", + "compose_form.lock_disclaimer.lock": "مُقفَل", + "compose_form.placeholder": "فِيمَ تُفكِّر؟", "compose_form.poll.add_option": "إضافة خيار", - "compose_form.poll.duration": "مدة استطلاع الرأي", + "compose_form.poll.duration": "مُدَّة اِستطلاع الرأي", "compose_form.poll.option_placeholder": "الخيار {number}", "compose_form.poll.remove_option": "إزالة هذا الخيار", - "compose_form.poll.switch_to_multiple": "عدّل استطلاع الرأي وغيّره لإتاحة الخيارات المتعددة", - "compose_form.poll.switch_to_single": "عدّل استطلاع الرأي وغيّره لإتاحة خيار واحد فقط", - "compose_form.publish": "بوّق", + "compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة", + "compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط", + "compose_form.publish": "تبويق", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "تحديد الوسائط كحساسة", - "compose_form.sensitive.marked": "لقد تم تحديد هذه الصورة كحساسة", - "compose_form.sensitive.unmarked": "لم يتم تحديد الصورة كحساسة", + "compose_form.sensitive.hide": "{count, plural, one {الإشارة إلى الوَسط كمُحتوى حسّاس} two{الإشارة إلى الوسطان كمُحتويان حسّاسان} other {الإشارة إلى الوسائط كمُحتويات حسّاسة}}", + "compose_form.sensitive.marked": "{count, plural, one {تمَّ الإشارة إلى الوسط كمُحتوى حسّاس} two{تمَّ الإشارة إلى الوسطان كمُحتويان حسّاسان} other {تمَّ الإشارة إلى الوسائط كمُحتويات حسّاسة}}", + "compose_form.sensitive.unmarked": "{count, plural, one {لم تَتِمّ الإشارة إلى الوسط كمُحتوى حسّاس} two{لم تَتِمّ الإشارة إلى الوسطان كمُحتويان حسّاسان} other {لم تَتِمّ الإشارة إلى الوسائط كمُحتويات حسّاسة}}", "compose_form.spoiler.marked": "إنّ النص مخفي وراء تحذير", - "compose_form.spoiler.unmarked": "النص غير مخفي", - "compose_form.spoiler_placeholder": "تنبيه عن المحتوى", + "compose_form.spoiler.unmarked": "إنَّ النص غير مخفي", + "compose_form.spoiler_placeholder": "اُكتُب تحذيركَ هُنا", "confirmation_modal.cancel": "إلغاء", - "confirmations.block.block_and_report": "احجبه وابلغ عنه", - "confirmations.block.confirm": "حجب", - "confirmations.block.message": "هل أنت متأكد أنك تريد حجب {name} ؟", + "confirmations.block.block_and_report": "حظره والإبلاغ عنه", + "confirmations.block.confirm": "حظر", + "confirmations.block.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَظرَ {name}؟", "confirmations.delete.confirm": "حذف", - "confirmations.delete.message": "هل أنت متأكد أنك تريد حذف هذا المنشور ؟", - "confirmations.delete_list.confirm": "احذف", - "confirmations.delete_list.message": "هل تود حقا حذف هذه القائمة ؟", - "confirmations.domain_block.confirm": "إخفاء اسم النطاق كاملا", + "confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟", + "confirmations.delete_list.confirm": "حذف", + "confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمةَ بشكلٍ دائم؟", + "confirmations.domain_block.confirm": "حظر اِسم النِّطاق بشكلٍ كامل", "confirmations.domain_block.message": "متأكد من أنك تود حظر اسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.\nلن تتمكن مِن رؤية محتوى هذا النطاق لا على خيوطك العمومية و لا في إشعاراتك. سوف يتم كذلك إزالة كافة متابعيك المنتمين إلى هذا النطاق.", "confirmations.logout.confirm": "خروج", "confirmations.logout.message": "متأكد من أنك تريد الخروج؟", @@ -149,7 +150,7 @@ "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", "emoji_button.travel": "الأماكن والسفر", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "حساب معلق", "empty_column.account_timeline": "ليس هناك تبويقات!", "empty_column.account_unavailable": "الملف التعريفي غير متوفر", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", @@ -159,24 +160,28 @@ "empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.", "empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.", "empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا التبويق بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.", "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.", "empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.", - "empty_column.home.public_timeline": "الخيط العام", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.", "empty_column.lists": "ليس عندك أية قائمة بعد. سوف تظهر قائمتك هنا إن قمت بإنشاء واحدة.", "empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.", "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات", "error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "لا يمكن عرض هذه الصفحة بشكل صحيح. من المحتمل أن يكون هذا الخطأ بسبب إضافة متصفح أو أدوات ترجمة تلقائية.", "error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "follow_requests.unlocked_explanation": "على الرغم من أن حسابك غير مقفل، فإن موظفين الـ{domain} ظنوا أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.", "generic.saved": "تم الحفظ", "getting_started.developers": "المُطوِّرون", "getting_started.directory": "دليل الصفحات التعريفية", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}", - "introduction.federation.action": "التالي", - "introduction.federation.federated.headline": "الفديرالي", - "introduction.federation.federated.text": "كافة المنشورات التي نُشِرت إلى العامة على الخوادم الأخرى للفديفرس سوف يتم عرضها على الخيط المُوحَّد.", - "introduction.federation.home.headline": "الرئيسي", - "introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!", - "introduction.federation.local.headline": "الخيط العام المحلي", - "introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط العام المحلي.", - "introduction.interactions.action": "إنهاء العرض التوضيحي!", - "introduction.interactions.favourite.headline": "الإضافة إلى المفضلة", - "introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.", - "introduction.interactions.reblog.headline": "الترقية", - "introduction.interactions.reblog.text": "يمكنكم مشاركة تبويقات الأشخاص الآخرين مع متابِعيكم عن طريق ترقيتها.", - "introduction.interactions.reply.headline": "الرد", - "introduction.interactions.reply.text": "يمكنكم الرد على تبويقاتكم و تبويقات الآخرين على شكل سلسلة محادثة.", - "introduction.welcome.action": "هيا بنا!", - "introduction.welcome.headline": "الخطوات الأولى", - "introduction.welcome.text": "مرحبا بكم على الفديفرس! بعد لحظات قليلة ، سيكون بمقدوركم بث رسائل والتحدث إلى أصدقائكم عبر تشكيلة واسعة من الخوادم المختلفة. هذا الخادم ، {domain} ، يستضيف صفحتكم التعريفية ، لذا يجب تذكر اسمه جيدا.", "keyboard_shortcuts.back": "للعودة", "keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين", "keyboard_shortcuts.boost": "للترقية", @@ -255,8 +243,8 @@ "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "lightbox.close": "إغلاق", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "ضغط مربع عرض الصورة", + "lightbox.expand": "توسيع مربع عرض الصور", "lightbox.next": "التالي", "lightbox.previous": "العودة", "lists.account.add": "أضف إلى القائمة", @@ -266,10 +254,10 @@ "lists.edit.submit": "تعديل العنوان", "lists.new.create": "إنشاء قائمة", "lists.new.title_placeholder": "عنوان القائمة الجديدة", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "أي مستخدم متابِع", + "lists.replies_policy.list": "أعضاء القائمة", + "lists.replies_policy.none": "لا أحد", + "lists.replies_policy.title": "عرض الردود لـ:", "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها", "lists.subheading": "قوائمك", "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}", @@ -277,9 +265,9 @@ "media_gallery.toggle_visible": "عرض / إخفاء", "missing_indicator.label": "غير موجود", "missing_indicator.sublabel": "تعذر العثور على هذا المورد", - "mute_modal.duration": "Duration", + "mute_modal.duration": "المدة", "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "إلى أجل غير مسمى", "navigation_bar.apps": "تطبيقات الأجهزة المحمولة", "navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.bookmarks": "الفواصل المرجعية", @@ -310,7 +298,7 @@ "notification.own_poll": "انتهى استطلاعك للرأي", "notification.poll": "لقد إنتها تصويت شاركت فيه", "notification.reblog": "{name} قام بترقية تبويقك", - "notification.status": "{name} just posted", + "notification.status": "{name} نشر للتو", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.column_settings.alert": "إشعارات سطح المكتب", @@ -327,23 +315,24 @@ "notifications.column_settings.show": "اعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", "notifications.column_settings.status": "تبويقات جديدة:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", "notifications.filter.favourites": "المفضلة", "notifications.filter.follows": "يتابِع", "notifications.filter.mentions": "الإشارات", "notifications.filter.polls": "نتائج استطلاع الرأي", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "تحديثات من الاشخاص الذين تتابعهم", + "notifications.grant_permission": "منح الإذن.", "notifications.group": "{count} إشعارات", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "وضع علامة مقروءة على جميع الإشعارات", + "notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً", + "notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً", + "notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.", + "notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب", + "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.", + "notifications_permission_banner.title": "لا تفوت شيئاً أبداً", + "picture_in_picture.restore": "ضعها مرة أخرى", "poll.closed": "انتهى", "poll.refresh": "تحديث", "poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}", @@ -447,7 +436,7 @@ "timeline_hint.resources.followers": "المتابِعون", "timeline_hint.resources.follows": "المتابَعون", "timeline_hint.resources.statuses": "التبويقات القديمة", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count,plural,zero{} one{{counter} شخص} two{{counter} شخصين} few{{counter} أشخاص } many{{counter} شخص} other{{counter} شخص}}", "trends.trending_now": "المتداولة الآن", "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.", "units.short.billion": "{count} مليار", @@ -470,7 +459,7 @@ "upload_modal.detect_text": "اكتشف النص مِن الصورة", "upload_modal.edit_media": "تعديل الوسائط", "upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "جار إعداد OCR (تعرف ضوئي على الرموز)…", "upload_modal.preview_label": "معاينة ({ratio})", "upload_progress.label": "يرفع...", "video.close": "إغلاق الفيديو", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 4f5fec8b1..9d3c16d78 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -22,6 +22,7 @@ "account.follows.empty": "Esti usuariu entá nun sigue a naide.", "account.follows_you": "Síguete", "account.hide_reblogs": "Anubrir les comparticiones de @{name}", + "account.joined": "Joined {date}", "account.last_status": "Cabera actividá", "account.link_verified_on": "La propiedá d'esti enllaz foi comprobada'l {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Entá nun hai dominios anubríos.", "empty_column.favourited_statuses": "Entá nun tienes nengún barritu en Favoritos. Cuando amiestes unu, va amosase equí.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Entá nun tienes nenguna solicitú de siguimientu. Cuando recibas una, va amosase equí.", "empty_column.hashtag": "Entá nun hai nada nesta etiqueta.", "empty_column.home": "¡Tienes la llinia temporal balera! Visita {public} o usa la gueta pa entamar y conocer a otros usuarios.", - "empty_column.home.public_timeline": "la llinia temporal pública", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Entá nun hai nada nesta llista. Cuando los miembros d'esta llista espublicen estaos nuevos, van apaecer equí.", "empty_column.lists": "Entá nun tienes nenguna llista. Cuando crees una, va amosase equí.", "empty_column.mutes": "Entá nun silenciesti a nunengún usuariu.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autorizar", "follow_request.reject": "Refugar", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", - "introduction.federation.action": "Siguiente", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Los espublizamientos públicos de los demás sirvidores del fediversu van apaecer na llinia temporal federada.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "¡Finar el tutorial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "Pues guardar un barritu pa dempués y facer que l'autor sepa que te prestó marcándolu como favoritu.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "¡Vamos!", - "introduction.welcome.headline": "Primeros pasos", - "introduction.welcome.text": "¡Afáyate nel fediversu! Nun momentu vas ser a tresmitir mensaxes y falar colos collacios d'una montonera de sirvidores. Pero esti sirvidor, {domain}, ye especial: agospia'l to perfil, asina qu'alcuérdate de cómo se llama.", "keyboard_shortcuts.back": "pa dir p'atrás", "keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos", "keyboard_shortcuts.boost": "pa compartir un toot", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir un soníu", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Too", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 4778d6618..d5f66eeb4 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -1,486 +1,475 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Бележка", "account.add_or_remove_from_list": "Добави или премахни от списъците", - "account.badges.bot": "бот", - "account.badges.group": "Group", + "account.badges.bot": "Бот", + "account.badges.group": "Група", "account.block": "Блокирай", "account.block_domain": "скрий всичко от (домейн)", "account.blocked": "Блокирани", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Разгледайте повече в оригиналния профил", "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Спрете да ме уведомявате, когато @{name} публикува", "account.domain_blocked": "Скрит домейн", - "account.edit_profile": "Редактирай профила си", - "account.enable_notifications": "Notify me when @{name} posts", + "account.edit_profile": "Редактирай профила", + "account.enable_notifications": "Уведомявайте ме, когато @{name} публикува", "account.endorse": "Характеристика на профила", "account.follow": "Последвай", "account.followers": "Последователи", "account.followers.empty": "Все още никой не следва този потребител.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Последовател} other {{counter} Последователи}}", + "account.following_counter": "{count, plural, one {{counter} Последван} other {{counter} Последвани}}", "account.follows.empty": "Този потребител все още не следва никого.", "account.follows_you": "Твой последовател", - "account.hide_reblogs": "Hide boosts from @{name}", + "account.hide_reblogs": "Скриване на споделяния от @{name}", + "account.joined": "Joined {date}", "account.last_status": "Последно активен/а", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", + "account.link_verified_on": "Собствеността върху тази връзка е проверена на {date}", + "account.locked_info": "Този акаунт е поверително заключен. Собственикът преглежда ръчно кой може да го следва.", + "account.media": "Мултимедия", "account.mention": "Споменаване", - "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", + "account.moved_to": "{name} се премести в:", + "account.mute": "Заглушаване на @{name}", + "account.mute_notifications": "Заглушаване на известия от @{name}", + "account.muted": "Заглушено", + "account.never_active": "Никога", "account.posts": "Публикации", "account.posts_with_replies": "Toots with replies", - "account.report": "Report @{name}", + "account.report": "Докладване на @{name}", "account.requested": "В очакване на одобрение", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.share": "Споделяне на @{name} профила", + "account.show_reblogs": "Показване на споделяния от @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Публикация} other {{counter} Публикации}}", "account.unblock": "Не блокирай", "account.unblock_domain": "Unhide {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "Не включвайте в профила", "account.unfollow": "Не следвай", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", + "account.unmute": "Раззаглушаване на @{name}", + "account.unmute_notifications": "Раззаглушаване на известия от @{name}", "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "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.", + "alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.", + "alert.rate_limited.title": "Скоростта е ограничена", + "alert.unexpected.message": "Възникна неочаквана грешка.", + "alert.unexpected.title": "Опаа!", + "announcement.announcement": "Оповестяване", + "autosuggest_hashtag.per_week": "{count} на седмица", + "boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път", + "bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.", "bundle_column_error.retry": "Опитай отново", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", - "column.bookmarks": "Bookmarks", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", + "bundle_column_error.title": "Мрежова грешка", + "bundle_modal_error.close": "Затваряне", + "bundle_modal_error.message": "Нещо се обърка при зареждането на този компонент.", + "bundle_modal_error.retry": "Опитайте отново", + "column.blocks": "Блокирани потребители", + "column.bookmarks": "Отметки", + "column.community": "Локална емисия", + "column.direct": "Директни съобщения", + "column.directory": "Преглед на профили", "column.domain_blocks": "Hidden domains", - "column.favourites": "Favourites", - "column.follow_requests": "Follow requests", + "column.favourites": "Любими", + "column.follow_requests": "Заявки за последване", "column.home": "Начало", "column.lists": "Списъци", - "column.mutes": "Muted users", + "column.mutes": "Заглушени потребители", "column.notifications": "Известия", "column.pins": "Pinned toot", "column.public": "Публичен канал", "column_back_button.label": "Назад", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", - "community.column_settings.local_only": "Local only", + "column_header.hide_settings": "Скриване на настройки", + "column_header.moveLeft_settings": "Преместване на колона вляво", + "column_header.moveRight_settings": "Преместване на колона вдясно", + "column_header.pin": "Закачане", + "column_header.show_settings": "Показване на настройки", + "column_header.unpin": "Разкачане", + "column_subheading.settings": "Настройки", + "community.column_settings.local_only": "Само локално", "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Само дистанционно", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", + "compose_form.direct_message_warning_learn_more": "Още информация", + "compose_form.hashtag_warning": "Тази публикация няма да бъде изброена под нито един хаштаг, тъй като е скрита. Само публични публикации могат да се търсят по хаштаг.", + "compose_form.lock_disclaimer": "Вашият акаунт не е {locked}. Всеки може да ви последва, за да прегледа вашите публикации само за последователи.", + "compose_form.lock_disclaimer.lock": "заключено", "compose_form.placeholder": "Какво си мислиш?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.add_option": "Добавяне на избор", + "compose_form.poll.duration": "Продължителност на анкета", + "compose_form.poll.option_placeholder": "Избор {number}", + "compose_form.poll.remove_option": "Премахване на този избор", + "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора", + "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор", "compose_form.publish": "Раздумай", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.sensitive.hide": "{count, plural, one {Маркиране на мултимедията като деликатна} other {Маркиране на мултимедиите като деликатни}}", + "compose_form.sensitive.marked": "{count, plural, one {Мултимедията е маркирана като деликатна} other {Мултимедиите са маркирани като деликатни}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Мултимедията не е маркирана като деликатна} other {Мултимедиите не са маркирани като деликатни}}", + "compose_form.spoiler.marked": "Текстът е скрит зад предупреждение", + "compose_form.spoiler.unmarked": "Текстът не е скрит", "compose_form.spoiler_placeholder": "Content warning", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", + "confirmation_modal.cancel": "Отказ", + "confirmations.block.block_and_report": "Блокиране и докладване", + "confirmations.block.confirm": "Блокиране", + "confirmations.block.message": "Сигурни ли сте, че искате да блокирате {name}?", + "confirmations.delete.confirm": "Изтриване", "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.delete_list.confirm": "Изтриване", + "confirmations.delete_list.message": "Сигурни ли сте, че искате да изтриете окончателно този списък?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.logout.confirm": "Излизане", + "confirmations.logout.message": "Сигурни ли сте, че искате да излезете?", + "confirmations.mute.confirm": "Заглушаване", + "confirmations.mute.explanation": "Това ще скрие публикации от тях и публикации, които ги споменават, но все пак ще им позволи да виждат вашите публикации и да ви следват.", + "confirmations.mute.message": "Сигурни ли сте, че искате да заглушите {name}?", + "confirmations.redraft.confirm": "Изтриване и преработване", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", + "confirmations.reply.confirm": "Отговор", + "confirmations.reply.message": "Отговарянето сега ще замени съобщението, което в момента съставяте. Сигурни ли сте, че искате да продължите?", + "confirmations.unfollow.confirm": "Отследване", + "confirmations.unfollow.message": "Сигурни ли сте, че искате да отследвате {name}?", + "conversation.delete": "Изтриване на разговор", + "conversation.mark_as_read": "Маркиране като прочетено", + "conversation.open": "Преглед на разговор", + "conversation.with": "С {names}", "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", + "directory.local": "Само от {domain}", + "directory.new_arrivals": "Новодошли", + "directory.recently_active": "Наскоро активни", "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objects", - "emoji_button.people": "People", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", - "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", - "emoji_button.travel": "Travel & Places", - "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "embed.preview": "Ето как ще изглежда:", + "emoji_button.activity": "Дейност", + "emoji_button.custom": "Персонализирано", + "emoji_button.flags": "Знамена", + "emoji_button.food": "Храна и напитки", + "emoji_button.label": "Вмъкване на емоджи", + "emoji_button.nature": "Природа", + "emoji_button.not_found": "Без емоджита!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Предмети", + "emoji_button.people": "Хора", + "emoji_button.recent": "Често използвани", + "emoji_button.search": "Търсене...", + "emoji_button.search_results": "Резултати от търсене", + "emoji_button.symbols": "Символи", + "emoji_button.travel": "Пътуване и забележителности", + "empty_column.account_suspended": "Профилът е спрян", + "empty_column.account_timeline": "Тук няма публикации!", + "empty_column.account_unavailable": "Няма достъп до профила", + "empty_column.blocks": "Не сте блокирали потребители все още.", + "empty_column.bookmarked_statuses": "Все още нямате отметнати публикации. Когато отметнете някоя, тя ще се покаже тук.", + "empty_column.community": "Локалната емисия е празна. Напишете нещо публично, за да започнете!", + "empty_column.direct": "Все още нямате директни съобщения. Когато изпратите или получите някое, то ще се покаже тук.", "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.favourited_statuses": "Все още нямате любими публикации. Когато поставите някоя в любими, тя ще се покаже тук.", + "empty_column.favourites": "Все още никой не е поставил тази публикация в любими. Когато някой го направи, ще се покаже тук.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "Все още нямате заявки за последване. Когато получите такава, тя ще се покаже тук.", + "empty_column.hashtag": "В този хаштаг няма нищо все още.", + "empty_column.home": "Вашата начална емисия е празна! Посетете {public} или използвайте търсене, за да започнете и да се запознаете с други потребители.", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.lists": "Все още нямате списъци. Когато създадете такъв, той ще се покаже тук.", + "empty_column.mutes": "Не сте заглушавали потребители все още.", + "empty_column.notifications": "Все още нямате известия. Взаимодействайте с другите, за да започнете разговора.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.explanation": "Поради грешка в нашия код или проблем със съвместимостта на браузъра, тази страница не може да се покаже правилно.", + "error.unexpected_crash.explanation_addons": "Тази страница не може да се покаже правилно. Тази грешка вероятно е причинена от добавка на браузъра или инструменти за автоматичен превод.", + "error.unexpected_crash.next_steps": "Опитайте да опресните страницата. Ако това не помогне, все още можете да използвате Mastodon чрез различен браузър или приложение.", + "error.unexpected_crash.next_steps_addons": "Опитайте да ги деактивирате и да опресните страницата. Ако това не помогне, може все още да използвате Mastodon чрез различен браузър или приложение.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", - "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "errors.unexpected_crash.report_issue": "Сигнал за проблем", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Следвайте хора, които харесвате, за да виждате техните съобщения! Ето някои предложения.", + "follow_recommendations.lead": "Съобщения от хора, които следвате, ще се показват в хронологичен ред на вашата главна страница. Не се страхувайте, че ще сгрешите, по всяко време много лесно можете да спрете да ги следвате!", + "follow_request.authorize": "Упълномощаване", + "follow_request.reject": "Отхвърляне", + "follow_requests.unlocked_explanation": "Въпреки че акаунтът ви не е заключен, служителите на {domain} помислиха, че може да искате да преглеждате ръчно заявките за последване на тези профили.", + "generic.saved": "Запазено", + "getting_started.developers": "Разработчици", + "getting_started.directory": "Профилна директория", + "getting_started.documentation": "Документация", "getting_started.heading": "Първи стъпки", - "getting_started.invite": "Invite people", + "getting_started.invite": "Поканване на хора", "getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {github}.", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "getting_started.terms": "Условия за ползване", + "hashtag.column_header.tag_mode.all": "и {additional}", + "hashtag.column_header.tag_mode.any": "или {additional}", + "hashtag.column_header.tag_mode.none": "без {additional}", + "hashtag.column_settings.select.no_options_message": "Няма намерени предложения", + "hashtag.column_settings.select.placeholder": "Въвеждане на хаштагове…", + "hashtag.column_settings.tag_mode.all": "Всичко това", + "hashtag.column_settings.tag_mode.any": "Някое от тези", + "hashtag.column_settings.tag_mode.none": "Никое от тези", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "home.column_settings.basic": "Основно", + "home.column_settings.show_reblogs": "Показване на споделяния", + "home.column_settings.show_replies": "Показване на отговори", + "home.hide_announcements": "Скриване на оповестявания", + "home.show_announcements": "Показване на оповестявания", + "intervals.full.days": "{number, plural, one {# ден} other {# дни}}", + "intervals.full.hours": "{number, plural, one {# час} other {# часа}}", + "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}", + "keyboard_shortcuts.back": "за придвижване назад", + "keyboard_shortcuts.blocked": "за отваряне на списъка с блокирани потребители", + "keyboard_shortcuts.boost": "за споделяне", "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.compose": "за фокусиране на текстовото пространство за композиране", + "keyboard_shortcuts.description": "Описание", + "keyboard_shortcuts.direct": "за отваряне на колона за директни съобщения", + "keyboard_shortcuts.down": "за придвижване надолу в списъка", "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.favourite": "за поставяне в любими", + "keyboard_shortcuts.favourites": "за отваряне на списъка с любими", + "keyboard_shortcuts.federated": "да отвори обединена хронология", "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.home": "за отваряне на началната емисия", + "keyboard_shortcuts.hotkey": "Бърз клавиш", + "keyboard_shortcuts.legend": "за показване на тази легенда", + "keyboard_shortcuts.local": "за отваряне на локалната емисия", + "keyboard_shortcuts.mention": "за споменаване на автор", + "keyboard_shortcuts.muted": "за отваряне на списъка със заглушени потребители", + "keyboard_shortcuts.my_profile": "за отваряне на вашия профил", + "keyboard_shortcuts.notifications": "за отваряне на колоната с известия", + "keyboard_shortcuts.open_media": "за отваряне на мултимедия", + "keyboard_shortcuts.pinned": "за отваряне на списъка със закачени публикации", + "keyboard_shortcuts.profile": "за отваряне на авторския профил", + "keyboard_shortcuts.reply": "за отговаряне", + "keyboard_shortcuts.requests": "за отваряне на списъка със заявки за последване", + "keyboard_shortcuts.search": "за фокусиране на търсенето", + "keyboard_shortcuts.spoilers": "за показване/скриване на ПС полето", + "keyboard_shortcuts.start": "за отваряне на колоната \"първи стъпки\"", + "keyboard_shortcuts.toggle_hidden": "за показване/скриване на текст зад ПС", + "keyboard_shortcuts.toggle_sensitivity": "за показване/скриване на мултимедия", + "keyboard_shortcuts.toot": "за започване на чисто нова публикация", + "keyboard_shortcuts.unfocus": "за дефокусиране на текстовото поле за композиране/търсене", + "keyboard_shortcuts.up": "за придвижване нагоре в списъка", "lightbox.close": "Затвори", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "load_pending": "{count, plural, one {# new item} other {# new items}}", + "lightbox.compress": "Компресиране на полето за преглед на изображение", + "lightbox.expand": "Разгъване на полето за преглед на изображение", + "lightbox.next": "Напред", + "lightbox.previous": "Назад", + "lists.account.add": "Добавяне към списък", + "lists.account.remove": "Премахване от списък", + "lists.delete": "Изтриване на списък", + "lists.edit": "Редакция на списък", + "lists.edit.submit": "Промяна на заглавие", + "lists.new.create": "Добавяне на списък", + "lists.new.title_placeholder": "Име на нов списък", + "lists.replies_policy.followed": "Някой последван потребител", + "lists.replies_policy.list": "Членове на списъка", + "lists.replies_policy.none": "Никой", + "lists.replies_policy.title": "Показване на отговори на:", + "lists.search": "Търсене сред хора, които следвате", + "lists.subheading": "Вашите списъци", + "load_pending": "{count, plural, one {# нов обект} other {# нови обекти}}", "loading_indicator.label": "Зареждане...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "media_gallery.toggle_visible": "Скриване на {number, plural, one {изображение} other {изображения}}", + "missing_indicator.label": "Не е намерено", + "missing_indicator.sublabel": "Този ресурс не може да бъде намерен", + "mute_modal.duration": "Продължителност", + "mute_modal.hide_notifications": "Скриване на известия от този потребител?", + "mute_modal.indefinite": "Неопределено", + "navigation_bar.apps": "Мобилни приложения", + "navigation_bar.blocks": "Блокирани потребители", + "navigation_bar.bookmarks": "Отметки", + "navigation_bar.community_timeline": "Локална емисия", + "navigation_bar.compose": "Композиране на нова публикация", + "navigation_bar.direct": "Директни съобщения", + "navigation_bar.discover": "Откриване", "navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.edit_profile": "Редактирай профил", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.favourites": "Любими", + "navigation_bar.filters": "Заглушени думи", + "navigation_bar.follow_requests": "Заявки за последване", + "navigation_bar.follows_and_followers": "Последвания и последователи", "navigation_bar.info": "Extended information", "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", + "navigation_bar.lists": "Списъци", "navigation_bar.logout": "Излизане", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.mutes": "Заглушени потребители", + "navigation_bar.personal": "Лично", + "navigation_bar.pins": "Закачени публикации", "navigation_bar.preferences": "Предпочитания", "navigation_bar.public_timeline": "Публичен канал", - "navigation_bar.security": "Security", + "navigation_bar.security": "Сигурност", "notification.favourite": "{name} хареса твоята публикация", "notification.follow": "{name} те последва", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} поиска да ви последва", "notification.mention": "{name} те спомена", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", + "notification.own_poll": "Анкетата ви приключи", + "notification.poll": "Анкета, в която сте гласували, приключи", "notification.reblog": "{name} сподели твоята публикация", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notification.status": "{name} току-що публикува", + "notifications.clear": "Изчистване на известия", + "notifications.clear_confirmation": "Сигурни ли сте, че искате да изчистите окончателно всичките си известия?", "notifications.column_settings.alert": "Десктоп известия", "notifications.column_settings.favourite": "Предпочитани:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Показване на всички категории", + "notifications.column_settings.filter_bar.category": "Лента за бърз филтър", + "notifications.column_settings.filter_bar.show": "Показване", "notifications.column_settings.follow": "Нови последователи:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "Нови заявки за последване:", "notifications.column_settings.mention": "Споменавания:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.poll": "Резултати от анкета:", + "notifications.column_settings.push": "Изскачащи известия", "notifications.column_settings.reblog": "Споделяния:", "notifications.column_settings.show": "Покажи в колона", - "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "notifications.column_settings.sound": "Пускане на звук", + "notifications.column_settings.status": "Нови публикации:", + "notifications.column_settings.unread_markers.category": "отметки за непрочетени известия", + "notifications.filter.all": "Всичко", + "notifications.filter.boosts": "Споделяния", + "notifications.filter.favourites": "Любими", + "notifications.filter.follows": "Последвания", + "notifications.filter.mentions": "Споменавания", + "notifications.filter.polls": "Резултати от анкета", + "notifications.filter.statuses": "Актуализации от хора, които следите", + "notifications.grant_permission": "Даване на разрешение.", + "notifications.group": "{count} известия", + "notifications.mark_as_read": "Маркиране на всички известия като прочетени", + "notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра", + "notifications.permission_denied_alert": "Известията на работния плот не могат да бъдат активирани, тъй като разрешението на браузъра е отказвано преди", + "notifications.permission_required": "Известията на работния плот не са налични, тъй като необходимото разрешение не е предоставено.", + "notifications_permission_banner.enable": "Активиране на известията на работния плот", + "notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, активирайте известията на работния плот. Можете да контролирате точно кои типове взаимодействия генерират известия на работния плот чрез бутона {icon} по-горе, след като бъдат активирани.", + "notifications_permission_banner.title": "Никога не пропускайте нищо", + "picture_in_picture.restore": "Връщане обратно", + "poll.closed": "Затворено", + "poll.refresh": "Опресняване", + "poll.total_people": "{count, plural, one {# човек} other {# човека}}", + "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}", + "poll.vote": "Гласуване", + "poll.voted": "Вие гласувахте за този отговор", + "poll_button.add_poll": "Добавяне на анкета", + "poll_button.remove_poll": "Премахване на анкета", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Директно", "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", + "privacy.private.short": "Само за последователи", "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", + "privacy.public.short": "Публично", "privacy.unlisted.long": "Do not show in public timelines", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", + "privacy.unlisted.short": "Скрито", + "refresh": "Опресняване", + "regeneration_indicator.label": "Зареждане…", + "regeneration_indicator.sublabel": "Вашата начална емисия се подготвя!", + "relative_time.days": "{number}д", + "relative_time.hours": "{number}ч", + "relative_time.just_now": "сега", + "relative_time.minutes": "{number}м", + "relative_time.seconds": "{number}с", + "relative_time.today": "днес", "reply_indicator.cancel": "Отказ", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.forward": "Препращане към {target}", + "report.forward_hint": "Акаунтът е от друг сървър. Изпращане на анонимно копие на доклада и там?", "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.placeholder": "Допълнителни коментари", + "report.submit": "Подаване", "report.target": "Reporting", "search.placeholder": "Търсене", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Формат за разширено търсене", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.hashtag": "хаштаг", "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", + "search_popout.tips.text": "Обикновеният текст връща съответстващи показвани имена, потребителски имена и хаштагове", + "search_popout.tips.user": "потребител", + "search_results.accounts": "Хора", + "search_results.hashtags": "Хаштагове", + "search_results.statuses": "Публикации", + "search_results.statuses_fts_disabled": "Търсенето на публикации по тяхното съдържание не е активирано за този Mastodon сървър.", + "search_results.total": "{count, number} {count, plural, one {резултат} other {резултата}}", + "status.admin_account": "Отваряне на интерфейс за модериране за @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", + "status.block": "Блокиране на @{name}", + "status.bookmark": "Отмятане", + "status.cancel_reblog_private": "Отсподеляне", + "status.cannot_reblog": "Тази публикация не може да бъде споделена", "status.copy": "Copy link to status", "status.delete": "Изтриване", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", + "status.detailed_status": "Подробен изглед на разговор", + "status.direct": "Директно съобщение към @{name}", + "status.embed": "Вграждане", "status.favourite": "Предпочитани", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", + "status.filtered": "Филтрирано", + "status.load_more": "Зареждане на още", + "status.media_hidden": "Мултимедията е скрита", "status.mention": "Споменаване", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", + "status.more": "Още", + "status.mute": "Заглушаване на @{name}", + "status.mute_conversation": "Заглушаване на разговор", "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.pin": "Закачане на профил", + "status.pinned": "Закачена публикация", + "status.read_more": "Още информация", "status.reblog": "Споделяне", - "status.reblog_private": "Boost with original visibility", + "status.reblog_private": "Споделяне с оригинална видимост", "status.reblogged_by": "{name} сподели", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", + "status.reblogs.empty": "Все още никой не е споделил тази публикация. Когато някой го направи, ще се покаже тук.", + "status.redraft": "Изтриване и преработване", + "status.remove_bookmark": "Премахване на отметка", "status.reply": "Отговор", - "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", + "status.replyAll": "Отговор на тема", + "status.report": "Докладване на @{name}", "status.sensitive_warning": "Деликатно съдържание", - "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", + "status.share": "Споделяне", + "status.show_less": "Покажи по-малко", + "status.show_less_all": "Покажи по-малко за всички", + "status.show_more": "Покажи повече", + "status.show_more_all": "Покажи повече за всички", + "status.show_thread": "Показване на тема", + "status.uncached_media_warning": "Не е налично", + "status.unmute_conversation": "Раззаглушаване на разговор", + "status.unpin": "Разкачане от профил", + "suggestions.dismiss": "Отхвърляне на предложение", + "suggestions.header": "Може да се интересувате от…", + "tabs_bar.federated_timeline": "Обединен", "tabs_bar.home": "Начало", - "tabs_bar.local_timeline": "Local", + "tabs_bar.local_timeline": "Локално", "tabs_bar.notifications": "Известия", - "tabs_bar.search": "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", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", + "tabs_bar.search": "Търсене", + "time_remaining.days": "{number, plural, one {# ден} other {# дни}} остава", + "time_remaining.hours": "{number, plural, one {# час} other {# часа}} остава", + "time_remaining.minutes": "{number, plural, one {# минута} other {# минути}} остава", + "time_remaining.moments": "Оставащи моменти", + "time_remaining.seconds": "{number, plural, one {# секунда} other {# секунди}} остава", + "timeline_hint.remote_resource_not_displayed": "{resource} от други сървъри не се показват.", + "timeline_hint.resources.followers": "Последователи", + "timeline_hint.resources.follows": "Последвани", + "timeline_hint.resources.statuses": "По-стари публикации", + "trends.counter_by_accounts": "{count, plural, one {{counter} човек} other {{counter} човека}} говорят", + "trends.trending_now": "Налагащи се сега", + "ui.beforeunload": "Черновата ви ще бъде загубена, ако излезете от Mastodon.", + "units.short.billion": "{count}млрд", + "units.short.million": "{count}млн", + "units.short.thousand": "{count}хил", + "upload_area.title": "Влачене и пускане за качване", "upload_button.label": "Добави медия", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", + "upload_error.limit": "Превишен лимит за качване на файлове.", + "upload_error.poll": "Качването на файлове не е позволено с анкети.", + "upload_form.audio_description": "Опишете за хора със загуба на слуха", + "upload_form.description": "Опишете за хора със зрителни увреждания", + "upload_form.edit": "Редакция", + "upload_form.thumbnail": "Промяна на миниизображението", "upload_form.undo": "Отмяна", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", - "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.preparing_ocr": "Preparing OCR…", - "upload_modal.preview_label": "Preview ({ratio})", + "upload_form.video_description": "Опишете за хора със загуба на слуха или зрително увреждане", + "upload_modal.analyzing_picture": "Анализ на снимка…", + "upload_modal.apply": "Прилагане", + "upload_modal.choose_image": "Избор на изображение", + "upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита", + "upload_modal.detect_text": "Откриване на текст от картина", + "upload_modal.edit_media": "Редакция на мултимедия", + "upload_modal.hint": "Щракнете или плъзнете кръга на визуализацията, за да изберете фокусна точка, която винаги ще бъде видима на всички миниатюри.", + "upload_modal.preparing_ocr": "Подготване на ОРС…", + "upload_modal.preview_label": "Визуализация ({ratio})", "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.close": "Затваряне на видео", + "video.download": "Изтегляне на файл", + "video.exit_fullscreen": "Изход от цял екран", + "video.expand": "Разгъване на видео", + "video.fullscreen": "Цял екран", + "video.hide": "Скриване на видео", + "video.mute": "Обеззвучаване", + "video.pause": "Пауза", + "video.play": "Пускане", + "video.unmute": "Включване на звука" } diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 9b73c3597..dc8984be3 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -22,6 +22,7 @@ "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.", "account.follows_you": "আপনাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", + "account.joined": "Joined {date}", "account.last_status": "শেষ সক্রিয় ছিল", "account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিখে", "account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।", "empty_column.favourited_statuses": "আপনার পছন্দের কোনো টুট এখনো নেই। আপনি কোনো লেখা পছন্দের হিসেবে চিহ্নিত করলে এখানে পাওয়া যাবে।", "empty_column.favourites": "কেও এখনো এটাকে পছন্দের টুট হিসেবে চিহ্নিত করেনি। যদি করে, তখন তাদের এখানে পাওয়া যাবে।", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "আপনার এখনো কোনো অনুসরণের আবেদন পাঠানো নেই। যদি পাঠায়, এখানে পাওয়া যাবে।", "empty_column.hashtag": "এই হেসটাগে এখনো কিছু নেই।", "empty_column.home": "আপনার বাড়ির সময়রেখা এখনো খালি! {public} এ ঘুরে আসুন অথবা অনুসন্ধান বেবহার করে শুরু করতে পারেন এবং অন্য ব্যবহারকারীদের সাথে সাক্ষাৎ করতে পারেন।", - "empty_column.home.public_timeline": "প্রকাশ্য সময়রেখা", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "এই তালিকাতে এখনো কিছু নেই. যখন এই তালিকায় থাকা ব্যবহারকারী নতুন কিছু লিখবে, সেগুলো এখানে পাওয়া যাবে।", "empty_column.lists": "আপনার এখনো কোনো তালিকা তৈরী নেই। যদি বা যখন তৈরী করেন, সেগুলো এখানে পাওয়া যাবে।", "empty_column.mutes": "আপনি এখনো কোনো ব্যবহারকারীকে নিঃশব্দ করেননি।", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "অনুমতি দিন", "follow_request.reject": "প্রত্যাখ্যান করুন", "follow_requests.unlocked_explanation": "আপনার অ্যাকাউন্টটি লক না থাকলেও, {domain} কর্মীরা ভেবেছিলেন যে আপনি এই অ্যাকাউন্টগুলি থেকে ম্যানুয়ালি অনুসরণের অনুরোধগুলি পর্যালোচনা করতে চাইতে পারেন।", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}", "intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}", - "introduction.federation.action": "পরবর্তী", - "introduction.federation.federated.headline": "যুক্তবিশ্ব", - "introduction.federation.federated.text": "অন্যান্য যুক্তবিশ্বের সার্ভারের লেখাগুলি যুক্তবিশ্বের সময়রেখাতে আসবে ।", - "introduction.federation.home.headline": "বাড়ি", - "introduction.federation.home.text": "যাদেরকে অনুসরণ করেন তাদের লেখাগুলো আপনার বাড়ি-সময়রেখাতে আসবে। আপনি এখান থেকে যুক্তবিশ্বে যেকোনো সার্ভারের যে কাওকে অনুসরণ করতে পারেন!", - "introduction.federation.local.headline": "স্থানীয়", - "introduction.federation.local.text": "আপনি যে সার্ভারে আছেন সেখানকার মানুষের প্রকাশ্য লেখাগুলো স্থানীয় সময়রেখাতে আসবে।", - "introduction.interactions.action": "ব্যবহার জানার অংশটি শেষ করুন!", - "introduction.interactions.favourite.headline": "পছন্দের", - "introduction.interactions.favourite.text": "পরে পড়ার জন্য বা লেখা পছন্ধ হয়েছে সেটা লেখককে জানাতে, কোনো লেখা পছন্দের হিসেবে চিহ্নিত করতে পারেন।", - "introduction.interactions.reblog.headline": "সমর্থন", - "introduction.interactions.reblog.text": "কারোর লেখা সমর্থন দিয়ে চিহ্নিত করে সেটা আপনার অনুসরণকারীদের দেখতে পারেন।", - "introduction.interactions.reply.headline": "মতামত", - "introduction.interactions.reply.text": "আপনি অন্যদের এবং নিজের লেখায় মতামত টুট করতে পারেন, যেগুলো লেখার সাথে কথোপকথন হিসেবে যুক্ত থাকবে।", - "introduction.welcome.action": "শুরু করা যাক!", - "introduction.welcome.headline": "প্রথম ধাপ", - "introduction.welcome.text": "যুক্তবিশ্বে স্বাগতম! কিছুক্ষনের মধ্যেই আপনি আপনার লেখা বিভিন্ন সার্ভারে সম্প্রচার করতে পারবেন। কিন্তু মনে রাখবে যে এটা একটা বিশেষ সার্ভার, {domain} কারণ এখানে আপনার নিজেস্ব পাতা রাখা হচ্ছে।", "keyboard_shortcuts.back": "পেছনে যেতে", "keyboard_shortcuts.blocked": "ব্লক করা ব্যবহারকারীদের তালিকা খুলতে", "keyboard_shortcuts.boost": "সমর্থন করতে", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "কলামে দেখানো", "notifications.column_settings.sound": "শব্দ বাজানো", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "সব", "notifications.filter.boosts": "সমর্থনগুলো", "notifications.filter.favourites": "পছন্দের গুলো", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 84c5f4523..b6a2a9292 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -22,6 +22,7 @@ "account.follows.empty": "An implijer·ez-mañ na heul den ebet.", "account.follows_you": "Ho heul", "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}", + "account.joined": "Joined {date}", "account.last_status": "Oberiantiz zivezhañ", "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-mañ : {date}", "account.locked_info": "Prennet eo ar gon-mañ. Dibab a ra ar perc'henn ar re a c'hall heuliañ anezhi pe anezhañ.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "N'eus domani kuzh ebet c'hoazh.", "empty_column.favourited_statuses": "N'ho peus toud muiañ-karet ebet c'hoazh. Pa vo lakaet unan ganeoc'h e vo diskouezet amañ.", "empty_column.favourites": "Den ebet n'eus lakaet an toud-mañ en e reoù muiañ-karet. Pa vo graet gant unan bennak e vo diskouezet amañ.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "N'ho peus goulenn heuliañ ebet c'hoazh. Pa resevot reoù e vo diskouezet amañ.", "empty_column.hashtag": "N'eus netra er ger-klik-mañ c'hoazh.", "empty_column.home": "Goullo eo ho red-amzer degemer! Kit da weladenniñ {public} pe implijit ar c'hlask evit kregiñ ganti ha kejañ gant implijer·ien·ezed all.", - "empty_column.home.public_timeline": "ar red-amzer publik", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Goullo eo ar roll-mañ evit ar poent. Pa vo toudet gant e izili e vo diskouezet amañ.", "empty_column.lists": "N'ho peus roll ebet c'hoazh. Pa vo krouet unan ganeoc'h e vo diskouezet amañ.", "empty_column.mutes": "N'ho peus kuzhet implijer ebet c'hoazh.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Aotren", "follow_request.reject": "Nac'hañ", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# devezh} other{# a zevezhioù}}", "intervals.full.hours": "{number, plural, one {# eurvezh} other{# eurvezh}}", "intervals.full.minutes": "{number, plural, one {# munut} other{# a vunutoù}}", - "introduction.federation.action": "Da-heul", - "introduction.federation.federated.headline": "Kevreet", - "introduction.federation.federated.text": "Embannadennoù publik eus dafariaded all ar c'hevrebed a yo war-wel er red-amzer kevredet.", - "introduction.federation.home.headline": "Degemer", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Lec'hel", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Muiañ-karet", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Skignañ", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Respont", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Bec'h dezhi!", - "introduction.welcome.headline": "Pazennoù kentañ", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "da skignañ", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Diskouez er bann", "notifications.column_settings.sound": "Seniñ", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Pep tra", "notifications.filter.boosts": "Skignadennoù", "notifications.filter.favourites": "Muiañ-karet", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 13e9e885b..e80c3c846 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -22,6 +22,7 @@ "account.follows.empty": "Aquest usuari encara no segueix a ningú.", "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", + "account.joined": "Joined {date}", "account.last_status": "Darrer actiu", "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}", "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Encara no hi ha dominis ocults.", "empty_column.favourited_statuses": "Encara no has marcat com a favorit cap tut. Quan en facis, apareixerà aquí.", "empty_column.favourites": "Ningú no ha marcat aquest tut com a preferit encara. Quan algú ho faci, apareixerà aquí.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Encara no tens cap petició de seguiment. Quan rebis una, apareixerà aquí.", "empty_column.hashtag": "Encara no hi ha res en aquesta etiqueta.", "empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.", - "empty_column.home.public_timeline": "la línia de temps pública", + "empty_column.home.suggestions": "Mira algunes sugerencies", "empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous tuts, apareixeran aquí.", "empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.", "empty_column.mutes": "Encara no has silenciat cap usuari.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", + "follow_recommendations.done": "Fet", + "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure els seus tuts! Aquí hi ha algunes recomanacions.", + "follow_recommendations.lead": "Els tuts del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!", "follow_request.authorize": "Autoritzar", "follow_request.reject": "Rebutjar", "follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment d’aquests comptes de forma manual.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Següent", - "introduction.federation.federated.headline": "Federada", - "introduction.federation.federated.text": "Les publicacions públiques d'altres servidors del fedivers apareixeran a la línia de temps federada.", - "introduction.federation.home.headline": "Inici", - "introduction.federation.home.text": "Les publicacions de les persones que segueixes apareixeran a la línia de temps Inici. Pots seguir qualsevol persona de qualsevol servidor!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Les publicacions públiques de les persones del teu mateix servidor apareixeran a la línia de temps local.", - "introduction.interactions.action": "Finalitza el tutorial!", - "introduction.interactions.favourite.headline": "Favorit", - "introduction.interactions.favourite.text": "Pots desar un tut per a més tard i deixar que l'autor sàpiga que t'ha agradat, marcant-lo com a favorit.", - "introduction.interactions.reblog.headline": "Impuls", - "introduction.interactions.reblog.text": "Pots compartir amb els teus seguidors els tuts d'altres usuaris, impulsant-los.", - "introduction.interactions.reply.headline": "Respondre", - "introduction.interactions.reply.text": "Pots respondre als tuts d'altres persones i als teus propis, que els unirà en una conversa.", - "introduction.welcome.action": "Som-hi!", - "introduction.welcome.headline": "Primers passos", - "introduction.welcome.text": "Benvingut al fedivers! En uns moments podràs emetre missatges i conversar amb els teus amics en una gran varietat de servidors. Però aquest servidor, {domain}, és especial: allotja el teu perfil així que recorda el seu nom.", "keyboard_shortcuts.back": "navegar enrere", "keyboard_shortcuts.blocked": "per obrir la llista d'usuaris bloquejats", "keyboard_shortcuts.boost": "impulsar", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Mostra en la columna", "notifications.column_settings.sound": "Reproduir so", "notifications.column_settings.status": "Nous tuts:", + "notifications.column_settings.unread_markers.category": "Marcadors de notificacions no llegides", "notifications.filter.all": "Tots", "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favorits", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 43e1f6c10..0cf3c4e95 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -22,6 +22,7 @@ "account.follows.empty": "St'utilizatore ùn seguita nisunu.", "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", + "account.joined": "Quì dapoi {date}", "account.last_status": "Ultima attività", "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}", "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.", @@ -129,7 +130,7 @@ "conversation.mark_as_read": "Marcà cum'è lettu", "conversation.open": "Vede a cunversazione", "conversation.with": "Cù {names}", - "directory.federated": "Da u fediverse cunisciutu", + "directory.federated": "Da u fediversu cunisciutu", "directory.local": "Solu da {domain}", "directory.new_arrivals": "Ultimi arrivi", "directory.recently_active": "Attività ricente", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.", "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_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_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à.", - "empty_column.home.public_timeline": "a linea pubblica", + "empty_column.home.suggestions": "Vede qualchì ricumandazione", "empty_column.list": "Ùn c'hè ancu nunda quì. Quandu membri di sta lista manderanu novi statuti, i vidarete quì.", "empty_column.lists": "Ùn avete manc'una lista. Quandu farete una, sarà mustrata quì.", "empty_column.mutes": "Per avà ùn avete manc'un utilizatore piattatu.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Pruvate di disattivà quelli è poi attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", + "follow_recommendations.done": "Fatta", + "follow_recommendations.heading": "Siguitate a ghjente da quelli vulete vede i missaghji! Eccu qualchì ricumandazione.", + "follow_recommendations.lead": "I missaghji da a ghjente che voi siguitate figureranu in ordine crunulogicu nant'a vostra pagina d'accolta. Ùn timite micca di fà un sbagliu, pudete sempre disabbunavvi d'un contu à ogni mumentu!", "follow_request.authorize": "Auturizà", "follow_request.reject": "Righjittà", "follow_requests.unlocked_explanation": "U vostru contu ùn hè micca privatu, ma a squadra d'amministrazione di {domain} pensa chì e dumande d'abbunamentu di questi conti anu bisognu d'esse verificate manualmente.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Cuntinuà", - "introduction.federation.federated.headline": "Federata", - "introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica glubale.", - "introduction.federation.home.headline": "Accolta", - "introduction.federation.home.text": "I statuti da a ghjente che vo siguitate saranu affissati nant'à a linea d'accolta. Pudete seguità qualvogliasia nant'à tutti i servori!", - "introduction.federation.local.headline": "Lucale", - "introduction.federation.local.text": "I statuti pubblichi da quelli chì sò nant'a listessu servore chì voi ponu esse visti indè a linea pubblica lucale.", - "introduction.interactions.action": "Finisce u tutoriale!", - "introduction.interactions.favourite.headline": "Favuritu", - "introduction.interactions.favourite.text": "Pudete salvà un statutu per ritruvallu più tardi, è fà sapè à l'autore chì v'hè piaciutu, l'aghustendu à i vostri favuriti.", - "introduction.interactions.reblog.headline": "Sparte", - "introduction.interactions.reblog.text": "Pudete sparte i statuti d'altre persone à i vostri abbunati cù u buttone di spartera.", - "introduction.interactions.reply.headline": "Risponde", - "introduction.interactions.reply.text": "Pudete risponde à d'altre persone o a i vostri propii statuti, cio chì i ligarà indè una cunversazione.", - "introduction.welcome.action": "Andemu!", - "introduction.welcome.headline": "Primi passi", - "introduction.welcome.text": "Benvenutu·a indè u fediverse! In qualchi minuta, puderete diffonde missaghji è parlà à i vostri amichi nant'à una varietà maiò di servori. Ma quess'istanza, {domain}, hè speciale—ghjè induve hè uspitatu u vostru prufile, allora ricurdatevi di u so nome.", "keyboard_shortcuts.back": "rivultà", "keyboard_shortcuts.blocked": "per apre una lista d'utilizatori bluccati", "keyboard_shortcuts.boost": "sparte", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà", "notifications.column_settings.status": "Statuti novi:", + "notifications.column_settings.unread_markers.category": "Marcatori di nutificazione micca lette", "notifications.filter.all": "Tuttu", "notifications.filter.boosts": "Spartere", "notifications.filter.favourites": "Favuriti", @@ -458,7 +447,7 @@ "upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_form.audio_description": "Discrizzione per i ciochi", - "upload_form.description": "Discrive per i malvistosi", + "upload_form.description": "Discrizzione per i malvistosi", "upload_form.edit": "Mudificà", "upload_form.thumbnail": "Cambià vignetta", "upload_form.undo": "Sguassà", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 76df857d8..ac7db0258 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -9,7 +9,7 @@ "account.browse_more_on_origin_server": "Více na původním profilu", "account.cancel_follow_request": "Zrušit žádost o sledování", "account.direct": "Poslat uživateli @{name} přímou zprávu", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Zrušit upozorňování na příspěvky @{name}", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", "account.enable_notifications": "Oznámit mě na příspěvky @{name}", @@ -18,10 +18,11 @@ "account.followers": "Sledující", "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", "account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.following_counter": "{count, plural, one {{counter} Sledovaný} few {{counter} Sledovaní} many {{counter} Sledovaných} other {{counter} Sledovaných}}", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}", + "account.joined": "Založen {date}", "account.last_status": "Naposledy aktivní", "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}", "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", @@ -38,7 +39,7 @@ "account.requested": "Čeká na schválení. Kliknutím žádost o sledování zrušíte", "account.share": "Sdílet profil uživatele @{name}", "account.show_reblogs": "Zobrazit boosty od uživatele @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} few {{counter} Tooty} many {{counter} Tootů} other {{counter} Tootů}}", "account.unblock": "Odblokovat uživatele @{name}", "account.unblock_domain": "Odkrýt doménu {domain}", "account.unendorse": "Nezvýrazňovat na profilu", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Účet pozastaven", "empty_column.account_timeline": "Nejsou tu žádné tooty!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.", @@ -159,21 +160,25 @@ "empty_column.domain_blocks": "Ještě nemáte žádné skryté domény.", "empty_column.favourited_statuses": "Ještě nemáte žádné oblíbené tooty. Pokud si nějaký oblíbíte, zobrazí se zde.", "empty_column.favourites": "Tento toot si ještě nikdo neoblíbil. Pokud to někdo udělá, zobrazí se zde.", + "empty_column.follow_recommendations": "Zdá se, že pro vás nelze vygenerovat žádné návrhy. Můžete zkusit přes vyhledávání naleznout lidi, které znáte, nebo prozkoumat populární hashtagy.", "empty_column.follow_requests": "Ještě nemáte žádné žádosti o sledování. Pokud nějakou obdržíte, zobrazí se zde.", "empty_column.hashtag": "Pod tímto hashtagem ještě nic není.", - "empty_column.home": "Vaše domovská časová osa je prázdná! Začněte návštěvou {public} nebo použijte hledání a seznamte se s dalšími uživateli.", - "empty_column.home.public_timeline": "veřejné časové osy", + "empty_column.home": "Vaše domovská časová osa je prázdná! Naplňte ji sledováním dalších lidí. {suggestions}", + "empty_column.home.suggestions": "Prohlédnout návrhy", "empty_column.list": "V tomto seznamu ještě nic není. Pokud nějaký člen z tohoto seznamu napíše nový toot, objeví se zde.", "empty_column.lists": "Ještě nemáte žádný seznam. Pokud nějaký vytvoříte, zobrazí se zde.", "empty_column.mutes": "Ještě jste neskryli žádného uživatele.", "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.", "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo", "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Tuto stránku nelze správně zobrazit. Takovou chybu obvykle způsobuje doplněk prohlížeče nebo nástroje pro automatický překlad.", "error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Zkuste je vypnout a stránku obnovit. Pokud to nepomůže, zkuste otevřít Mastodon v jiném prohlížeči nebo nativní aplikaci.", "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", + "follow_recommendations.done": "Hotovo", + "follow_recommendations.heading": "Sledujte lidi, jejichž příspěvky chcete vidět! Tady jsou nějaké návrhy.", + "follow_recommendations.lead": "Příspěvky od lidí, které sledujete, se budou objevovat v chronologickém pořadí ve vaší domovské ose. Nebojte se, že uděláte chybu, můžete lidi stejně snadno kdykoliv přestat sledovat!", "follow_request.authorize": "Autorizovat", "follow_request.reject": "Odmítnout", "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", - "introduction.federation.action": "Další", - "introduction.federation.federated.headline": "Federovaná", - "introduction.federation.federated.text": "Veřejné příspěvky z jiných serverů ve fedivesmíru se zobrazí na federované časové ose.", - "introduction.federation.home.headline": "Domů", - "introduction.federation.home.text": "Příspěvky od lidí, které sledujete, se objeví ve vašem domovském kanálu. Můžete sledovat kohokoliv na jakémkoliv serveru!", - "introduction.federation.local.headline": "Místní", - "introduction.federation.local.text": "Veřejné příspěvky od lidí ze stejného serveru jako vy se zobrazí na místní časové ose.", - "introduction.interactions.action": "Dokončit tutoriál!", - "introduction.interactions.favourite.headline": "Oblíbení", - "introduction.interactions.favourite.text": "Oblíbením si můžete uložit toot na později a dát jeho autorovi vědět, že se vám líbí.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Boostnutím můžete sdílet tooty jiných lidí s vašimi sledujícími.", - "introduction.interactions.reply.headline": "Odpověď", - "introduction.interactions.reply.text": "Můžete odpovídat na tooty jiných lidí i vaše vlastní, což je propojí do konverzace.", - "introduction.welcome.action": "Jdeme na to!", - "introduction.welcome.headline": "První kroky", - "introduction.welcome.text": "Vítejte ve fedivesmíru! Za malou chvíli budete moci posílat zprávy a povídat si se svými přáteli z mnoha serverů. Tento server {domain}, je však speciální — je na něm váš profil a proto si zapamatujte jeho jméno.", "keyboard_shortcuts.back": "návrat zpět", "keyboard_shortcuts.blocked": "otevřít seznam blokovaných uživatelů", "keyboard_shortcuts.boost": "boost", @@ -255,8 +243,8 @@ "keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání", "keyboard_shortcuts.up": "posunutí nahoru v seznamu", "lightbox.close": "Zavřít", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Zobrazit celý obrázek najednou", + "lightbox.expand": "Ukázat obrázek v plné velikosti", "lightbox.next": "Další", "lightbox.previous": "Předchozí", "lists.account.add": "Přidat do seznamu", @@ -266,10 +254,10 @@ "lists.edit.submit": "Změnit název", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Sledované uživatele", + "lists.replies_policy.list": "Členy seznamu", + "lists.replies_policy.none": "Nikoho", + "lists.replies_policy.title": "Zobrazovat odpovědi na:", "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", @@ -277,9 +265,9 @@ "media_gallery.toggle_visible": "Přepnout viditelnost", "missing_indicator.label": "Nenalezeno", "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Trvání", "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Neomezeně", "navigation_bar.apps": "Mobilní aplikace", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", @@ -310,7 +298,7 @@ "notification.own_poll": "Vaše anketa skončila", "notification.poll": "Anketa, ve které jste hlasovali, skončila", "notification.reblog": "Uživatel {name} boostnul váš toot", - "notification.status": "{name} just posted", + "notification.status": "Nový toot od {name}", "notifications.clear": "Smazat oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", "notifications.column_settings.alert": "Oznámení na počítači", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Zobrazit ve sloupci", "notifications.column_settings.sound": "Přehrát zvuk", "notifications.column_settings.status": "Nové tooty:", + "notifications.column_settings.unread_markers.category": "Značky nepřečtených oznámení", "notifications.filter.all": "Vše", "notifications.filter.boosts": "Boosty", "notifications.filter.favourites": "Oblíbení", @@ -334,16 +323,16 @@ "notifications.filter.mentions": "Zmínky", "notifications.filter.polls": "Výsledky anket", "notifications.filter.statuses": "Aktuality od lidí, které sledujete", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Udělit oprávnění.", "notifications.group": "{count} oznámení", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Označit všechna oznámení jako přečtená", + "notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat", + "notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto", + "notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.", + "notifications_permission_banner.enable": "Povolit oznámení na ploše", + "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.", + "notifications_permission_banner.title": "Nenechte si nic uniknout", + "picture_in_picture.restore": "Vložit zpět", "poll.closed": "Uzavřeno", "poll.refresh": "Obnovit", "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", @@ -447,12 +436,12 @@ "timeline_hint.resources.followers": "Sledující", "timeline_hint.resources.follows": "Sleduje", "timeline_hint.resources.statuses": "Starší tooty", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "zmiňuje {count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}}", "trends.trending_now": "Aktuální trendy", "ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} mld.", + "units.short.million": "{count} mil.", + "units.short.thousand": "{count} tis.", "upload_area.title": "Nahrajte přetažením", "upload_button.label": "Přidat média", "upload_error.limit": "Byl překročen limit nahraných souborů.", @@ -465,12 +454,12 @@ "upload_form.video_description": "Popis pro sluchově či zrakově postižené", "upload_modal.analyzing_picture": "Analyzuji obrázek…", "upload_modal.apply": "Použít", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Vybrat obrázek", "upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy", "upload_modal.detect_text": "Detekovat text z obrázku", "upload_modal.edit_media": "Upravit média", "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Příprava OCR…", "upload_modal.preview_label": "Náhled ({ratio})", "upload_progress.label": "Nahrávání…", "video.close": "Zavřít video", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index b3c1947b4..45820b132 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -22,6 +22,7 @@ "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", + "account.joined": "Joined {date}", "account.last_status": "Gweithredol olaf", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i gloi. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.", "empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff dwtiau eto. Pan y byddwch yn hoffi un, mi fydd yn ymddangos yma.", "empty_column.favourites": "Nid oes neb wedi hoffi'r tŵt yma eto. Pan bydd rhywun yn ei hoffi, byddent yn ymddangos yma.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan dderbyniwch chi un, byddent yn ymddangos yma.", "empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.", "empty_column.home": "Mae eich ffrwd gartref yn wag! Ymwelwch a {public} neu defnyddiwch y chwilotwr i ddechrau arni ac i gwrdd a defnyddwyr eraill.", - "empty_column.home.public_timeline": "y ffrwd gyhoeddus", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Nid oes dim yn y rhestr yma eto. Pan y bydd aelodau'r rhestr yn cyhoeddi statws newydd, mi fydd yn ymddangos yma.", "empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan grëwch chi un, mi fydd yn ymddangos yma.", "empty_column.mutes": "Nid ydych wedi tawelu unrhyw ddefnyddwyr eto.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Caniatau", "follow_request.reject": "Gwrthod", "follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, oedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}", "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}", "intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}", - "introduction.federation.action": "Nesaf", - "introduction.federation.federated.headline": "Ffederasiwn", - "introduction.federation.federated.text": "Bydd pyst cyhoeddus o gweinyddion arall yn y Ffedysawd yn cael ai arddangos yn ffrwd y ffederasiwn.", - "introduction.federation.home.headline": "Hafan", - "introduction.federation.home.text": "Bydd pyst o bobl rydych yn ei ddilyn yn dangos yn eich ffrwd gatref. Gallwch dilyn unrhyw un ar unrhyw gweinydd!", - "introduction.federation.local.headline": "Lleol", - "introduction.federation.local.text": "Bydd pyst gyhoeddus o bobl ar yr un gweinydd a chi yn cael ei arddangos yn y ffrwd lleol.", - "introduction.interactions.action": "Gorffen tiwtorial!", - "introduction.interactions.favourite.headline": "Ffefryn", - "introduction.interactions.favourite.text": "Gallwch cadw tŵt am hwyrach, a gadael i'r awdur gwybod roeddech yn ei hoffi, trwy ei hoffi.", - "introduction.interactions.reblog.headline": "Hwb", - "introduction.interactions.reblog.text": "Gallwch rhannu tŵtiau pobl eraill gyda'ch dilynwyr trwy eu bŵstio.", - "introduction.interactions.reply.headline": "Ateb", - "introduction.interactions.reply.text": "Gallwch ateb i dŵtiau pobl eraill a thŵtiau eich hun, a fydd yn eu cadwyno at ei gilydd mewn sgwrs.", - "introduction.welcome.action": "Awn ni!", - "introduction.welcome.headline": "Camau cyntaf", - "introduction.welcome.text": "Croeso i'r ffedysawd! Mewn ychydig o funudau, byddwch yn gallu darlledu negeseuon a siarad i'ch ffrindiau ar draws amrywiaeth eang o weinyddion. Ond mae'r gweinydd hyn, {domain}, yn arbennig - mae o'n gweinyddu eich proffil, fellu cofiwch ei enw.", "keyboard_shortcuts.back": "i lywio nôl", "keyboard_shortcuts.blocked": "i agor rhestr defnyddwyr a flociwyd", "keyboard_shortcuts.boost": "i fŵstio", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Pob", "notifications.filter.boosts": "Hybiadau", "notifications.filter.favourites": "Ffefrynnau", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 7c4b3e4ef..6042840e2 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -1,142 +1,143 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Notat", "account.add_or_remove_from_list": "Tilføj eller fjern fra lister", - "account.badges.bot": "Robot", + "account.badges.bot": "Bot", "account.badges.group": "Gruppe", - "account.block": "Bloker @{name}", - "account.block_domain": "Skjul alt fra {domain}", + "account.block": "Blokér @{name}", + "account.block_domain": "Blokér domænet {domain}", "account.blocked": "Blokeret", "account.browse_more_on_origin_server": "Gennemse mere på den oprindelige profil", "account.cancel_follow_request": "Annullér følgeranmodning", - "account.direct": "Send en direkte besked til @{name}", - "account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op", - "account.domain_blocked": "Domænet er blevet skjult", - "account.edit_profile": "Rediger profil", - "account.enable_notifications": "Giv mig besked når @{name} lægger noget op", + "account.direct": "Direkte besked til @{name}", + "account.disable_notifications": "Advisér mig ikke længere, når @{name} poster", + "account.domain_blocked": "Domæne blokeret", + "account.edit_profile": "Redigere profil", + "account.enable_notifications": "Advisér mig, når @{name} poster", "account.endorse": "Fremhæv på profil", "account.follow": "Følg", "account.followers": "Følgere", - "account.followers.empty": "Der er endnu ingen der følger denne bruger.", + "account.followers.empty": "Ingen følger denne bruger endnu.", "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.following_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", "account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}", - "account.last_status": "Sidst aktiv", - "account.link_verified_on": "Ejerskabet af dette link blev tjekket den %{date}", - "account.locked_info": "Denne kontos privatlivsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge dem.", + "account.joined": "Tilmeldt {date}", + "account.last_status": "Senest aktiv", + "account.link_verified_on": "Ejerskab af dette link blev tjekket {date}", + "account.locked_info": "Denne kontos fortrolighedsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge vedkommende.", "account.media": "Medie", "account.mention": "Nævn @{name}", "account.moved_to": "{name} er flyttet til:", - "account.mute": "Dæmp @{name}", - "account.mute_notifications": "Dæmp notifikationer fra @{name}", - "account.muted": "Dæmpet", + "account.mute": "Tavsgør @{name}", + "account.mute_notifications": "Tavsgør notifikationer fra @{name}", + "account.muted": "Tavsgjort", "account.never_active": "Aldrig", "account.posts": "Trut", "account.posts_with_replies": "Trut og svar", - "account.report": "Rapporter @{name}", + "account.report": "Anmeld @{name}", "account.requested": "Afventer godkendelse. Tryk for at annullere følgeanmodning", "account.share": "Del @{name}s profil", "account.show_reblogs": "Vis fremhævelserne fra @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Trut} other {{counter} Trut}}", "account.unblock": "Fjern blokeringen af @{name}", - "account.unblock_domain": "Skjul ikke længere {domain}", + "account.unblock_domain": "Afblokér domænet {domain}", "account.unendorse": "Fremhæv ikke på profil", "account.unfollow": "Følg ikke længere", - "account.unmute": "Fjern dæmpningen af @{name}", - "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Prøv venligst igen efter {retry_time, time, medium}.", + "account.unmute": "Fjern tavsgjort for @{name}", + "account.unmute_notifications": "Fjern tavsgjort for notifikationer fra @{name}", + "account_note.placeholder": "Klik for at tilføje notat", + "alert.rate_limited.message": "Forsøg igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Gradsbegrænset", - "alert.unexpected.message": "Der opstod en uventet fejl.", + "alert.unexpected.message": "En uventet fejl opstod.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Bekendtgørelse", - "autosuggest_hashtag.per_week": "{count} per uge", - "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", + "autosuggest_hashtag.per_week": "{count} pr. uge", + "boost_modal.combo": "Du kan trykke på {combo} for at overspringe dette næste gang", + "bundle_column_error.body": "Noget gik galt under indlæsningen af denne komponent.", + "bundle_column_error.retry": "Forsøg igen", "bundle_column_error.title": "Netværksfejl", "bundle_modal_error.close": "Luk", - "bundle_modal_error.message": "Noget gik galt under indlæsningen af dette komponent.", - "bundle_modal_error.retry": "Prøv igen", + "bundle_modal_error.message": "Noget gik galt under indlæsningen af denne komponent.", + "bundle_modal_error.retry": "Forsøg igen", "column.blocks": "Blokerede brugere", "column.bookmarks": "Bogmærker", "column.community": "Lokal tidslinje", "column.direct": "Direkte beskeder", "column.directory": "Gennemse profiler", - "column.domain_blocks": "Skjulte domæner", + "column.domain_blocks": "Blokerede domæner", "column.favourites": "Favoritter", - "column.follow_requests": "Anmodning om at følge", + "column.follow_requests": "Følg-anmodninger", "column.home": "Hjem", "column.lists": "Lister", - "column.mutes": "Dæmpede brugere", + "column.mutes": "Tavsgjorte brugere", "column.notifications": "Notifikationer", "column.pins": "Fastgjorte trut", - "column.public": "Fælles tidslinje", + "column.public": "Forenede tidslinje", "column_back_button.label": "Tilbage", "column_header.hide_settings": "Skjul indstillinger", "column_header.moveLeft_settings": "Flyt kolonne til venstre", "column_header.moveRight_settings": "Flyt kolonne til højre", "column_header.pin": "Fastgør", "column_header.show_settings": "Vis indstillinger", - "column_header.unpin": "Fastgør ikke længere", + "column_header.unpin": "Løsgør", "column_subheading.settings": "Indstillinger", "community.column_settings.local_only": "Kun lokalt", "community.column_settings.media_only": "Kun medie", "community.column_settings.remote_only": "Kun fjernt", - "compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.", - "compose_form.direct_message_warning_learn_more": "Lær mere", - "compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.", - "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Alle kan følge dig for at se dine følger-kun indlæg.", + "compose_form.direct_message_warning": "Dette trut sendes kun til de nævnte brugere.", + "compose_form.direct_message_warning_learn_more": "Få mere at vide", + "compose_form.hashtag_warning": "Dette trut vises ikke under noget hashtag, da det ikke er listet. Kun offentlige trut kan søges via hashtags.", + "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Alle kan følge dig for at se dine kun-følger poster.", "compose_form.lock_disclaimer.lock": "låst", - "compose_form.placeholder": "Hvad har du på hjertet?", + "compose_form.placeholder": "Hvad tænker du på?", "compose_form.poll.add_option": "Tilføj valgmulighed", - "compose_form.poll.duration": "Afstemningens varighed", + "compose_form.poll.duration": "Afstemningsvarighed", "compose_form.poll.option_placeholder": "Valgmulighed {number}", "compose_form.poll.remove_option": "Fjern denne valgmulighed", - "compose_form.poll.switch_to_multiple": "Ændre afstemning for at tillade flere valg", - "compose_form.poll.switch_to_single": "Ændre afstemning for at tillade et enkelt valg", - "compose_form.publish": "Trut", + "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype", + "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype", + "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Markér medie som følsomt", - "compose_form.sensitive.marked": "Medie er markeret som værende følsomt", - "compose_form.sensitive.unmarked": "Mediet er ikke markeret som værende følsomt", - "compose_form.spoiler.marked": "Teksten er skjult bag en advarsel", + "compose_form.sensitive.hide": "{count, plural, one {Markér medie som følsomt} other {Markér medier som følsomme}}", + "compose_form.sensitive.marked": "{count, plural, one {Medie er markeret som sensitivt} other {Medier er markerede som sensitive}}", + "compose_form.sensitive.unmarked": "Intet medie market som sensitivt", + "compose_form.spoiler.marked": "Tekst skjult bag advarsel", "compose_form.spoiler.unmarked": "Teksten er ikke skjult", - "compose_form.spoiler_placeholder": "Skriv din advarsel her", - "confirmation_modal.cancel": "Annuller", - "confirmations.block.block_and_report": "Blokér og anmeld", - "confirmations.block.confirm": "Bloker", - "confirmations.block.message": "Er du sikker på, du vil blokere {name}?", + "compose_form.spoiler_placeholder": "Skriv din advarsel hér", + "confirmation_modal.cancel": "Afbryd", + "confirmations.block.block_and_report": "Blokér og Anmeld", + "confirmations.block.confirm": "Blokér", + "confirmations.block.message": "Sikker på, at du vil blokere {name}?", "confirmations.delete.confirm": "Slet", - "confirmations.delete.message": "Er du sikker på, du vil slette denne status?", + "confirmations.delete.message": "Sikker på, at du vil slette dette trut?", "confirmations.delete_list.confirm": "Slet", - "confirmations.delete_list.message": "Er du sikker på, du vil slette denne liste?", - "confirmations.domain_block.confirm": "Skjul helt domæne", - "confirmations.domain_block.message": "Er du helt sikker på du vil blokere hele {domain} domænet? I de fleste tilfælde vil få specifikke blokeringer eller dæmpninger være nok og at fortrække. Du vil ikke se indhold fra det domæne hverken på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra det domæne vil blive fjernet.", + "confirmations.delete_list.message": "Sikker på, at du vil slette denne liste permanent?", + "confirmations.domain_block.confirm": "Skjul hele domænet", + "confirmations.domain_block.message": "Helt sikker på, at du vil blokere hele {domain}-domænet? Oftest vil få, specifikke blokeringer eller tavsgørelser være nok og at fortrække. Du vil ikke se indhold fra domænet på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra domænet fjernes.", "confirmations.logout.confirm": "Log ud", - "confirmations.logout.message": "Er du sikker på du vil logge ud?", - "confirmations.mute.confirm": "Dæmp", - "confirmations.mute.explanation": "Dette vil skjule indlæg fra dem, samt andre indlæg der omtaler dem, men de vil stadig være i stand til at se dine indlæg og følge dig.", - "confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?", - "confirmations.redraft.confirm": "Slet & omskriv", - "confirmations.redraft.message": "Er du sikker på, du vil slette denne status og omskrive den? Favoritter og fremhævelser vil gå tabt og svar til det oprindelige opslag vil blive forældreløse.", - "confirmations.reply.confirm": "Svar", - "confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?", + "confirmations.logout.message": "Log ud, sikker?", + "confirmations.mute.confirm": "Tavsgøre", + "confirmations.mute.explanation": "Dette skjuler indlæg fra dem (og om) dem, men det vil lade dem at se dine indlæg og følge dig.", + "confirmations.mute.message": "Sikker på, du vil tavsgøre {name}?", + "confirmations.redraft.confirm": "Slet og omskriv", + "confirmations.redraft.message": "Sikker på, at du vil slette dette trut og omskrive det? Favoritter og fremhævelser går tabt og svar til det oprindelige indlæg afassocieres.", + "confirmations.reply.confirm": "Besvar", + "confirmations.reply.message": "Besvarelse nu vil overskrive den besked, du er ved at skrive. Fortsæt alligevel?", "confirmations.unfollow.confirm": "Følg ikke længere", - "confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?", - "conversation.delete": "Slet samtale", - "conversation.mark_as_read": "Marker som læst", - "conversation.open": "Vis samtale", + "confirmations.unfollow.message": "Sikker på, at du ikke længere vil følge {name}?", + "conversation.delete": "Slet konversation", + "conversation.mark_as_read": "Markér som læst", + "conversation.open": "Vis konversation", "conversation.with": "Med {names}", "directory.federated": "Fra kendt fedivers", "directory.local": "Kun fra {domain}", "directory.new_arrivals": "Nye ankomster", "directory.recently_active": "Senest aktiv", - "embed.instructions": "Indlejre denne status på din side ved at kopiere nedenstående kode.", - "embed.preview": "Det kommer til at se således ud:", + "embed.instructions": "Indlejr dette trut på din side ved at kopiere koden nedenfor.", + "embed.preview": "Sådan kommer det til at se ud:", "emoji_button.activity": "Aktivitet", - "emoji_button.custom": "Bruger defineret", + "emoji_button.custom": "Tilpasset", "emoji_button.flags": "Flag", "emoji_button.food": "Mad og drikke", "emoji_button.label": "Indsæt humørikon", @@ -148,53 +149,57 @@ "emoji_button.search": "Søg...", "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", - "emoji_button.travel": "Rejser & steder", - "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "Ingen bidrag her!", + "emoji_button.travel": "Rejser og steder", + "empty_column.account_suspended": "Konto suspenderet", + "empty_column.account_timeline": "Ingen trut her!", "empty_column.account_unavailable": "Profil utilgængelig", - "empty_column.blocks": "Du har ikke blokeret nogen endnu.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!", - "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.", - "empty_column.domain_blocks": "Der er endnu ikke nogle skjulte domæner.", - "empty_column.favourited_statuses": "Du har endnu ikke favoriseret nogen trut. Når du favoriserer et, vil det blive vist her.", - "empty_column.favourites": "Endnu ingen har favoriseret dette trut. Når en anden gør vil det blive vist her.", - "empty_column.follow_requests": "Du har endnu ingen følgeranmodninger. Når du modtager en, vil den komme frem her.", - "empty_column.hashtag": "Dette hashtag indeholder endnu ikke noget.", - "empty_column.home": "Din hjemme tidslinje er tom! Besøg {public} eller brug søgningen for at komme igang og møde andre brugere.", - "empty_column.home.public_timeline": "den offentlige tidslinje", - "empty_column.list": "Der er endnu intet i denne liste. Når medlemmer af denne liste poster nye statusser, vil de vises her.", - "empty_column.lists": "Du har endnu ingen lister. Når du opretter en, vil den blive vist her.", - "empty_column.mutes": "Du har endnu ikke dæmpet nogen som helst bruger.", - "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.", - "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet", - "error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen", - "errors.unexpected_crash.report_issue": "Rapportér problem", + "empty_column.blocks": "Du har ikke blokeret nogle brugere endnu.", + "empty_column.bookmarked_statuses": "Du har ingen bogmærkede trut endnu. Når du bogmærker ét, vil det dukke op hér.", + "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!", + "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises hér.", + "empty_column.domain_blocks": "Der er endnu ingen skjulte domæner.", + "empty_column.favourited_statuses": "Du har endnu ingen favorit-trut. Når du favoriserer ét, vil det blive vist hér.", + "empty_column.favourites": "Ingen har endnu favoriseret dette trut. Når nogen anden gør vil det blive vist hér.", + "empty_column.follow_recommendations": "Ser ud til, at der ikke kunne genereres forslag til dig. Du kan prøve med Søg for at lede efter personer, du måske kender, eller udforske hashtags.", + "empty_column.follow_requests": "Du har endnu ingen følgeranmodninger. Når du modtager én, vil den fremgå hér.", + "empty_column.hashtag": "Intet indhold i dette hashtag endnu.", + "empty_column.home": "Din hjemmetidslinje er tom! Besøg {public} eller brug søgningen for at komme igang og møde andre brugere.", + "empty_column.home.suggestions": "Se nogle foreslag", + "empty_column.list": "Der er endnu intet i denne liste. Når medlemmer af denne liste poster nye trut, vil de fremgå hér.", + "empty_column.lists": "Du har endnu ingen lister. Når du opretter én, vil den fremgå hér.", + "empty_column.mutes": "Du har endnu ikke tavsgjort nogle brugere.", + "empty_column.notifications": "Du har endnu ingen notifikationer. Interagér med andre for at starte konversationen.", + "empty_column.public": "Der er intet hér! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold", + "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en browser-kompatibilitetsfejl, kunne siden ikke vises korrekt.", + "error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.", + "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.", + "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.", + "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", + "errors.unexpected_crash.report_issue": "Anmeld problem", + "follow_recommendations.done": "Udført", + "follow_recommendations.heading": "Følg personer du gerne vil se indlæg fra! Her er nogle forslag.", + "follow_recommendations.lead": "Indlæg, fra personer du følger, vises i kronologisk rækkefølge i dit hjemmefeed. Vær ikke bange for at begå fejl, du kan vælge \"følg ikke\" personer lige så nemt til enhver tid!", "follow_request.authorize": "Godkend", "follow_request.reject": "Afvis", - "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, troede {domain} -personalet, at du måske vil gennemgå dine anmodninger manuelt.", + "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, antog {domain}-personalet, at du måske vil gennemgå dine anmodninger manuelt.", "generic.saved": "Gemt", "getting_started.developers": "Udviklere", "getting_started.directory": "Profilliste", "getting_started.documentation": "Dokumentation", - "getting_started.heading": "Kom igang", - "getting_started.invite": "Inviter folk", - "getting_started.open_source_notice": "Mastodon er et open source software. Du kan bidrage eller rapporterer fejl på GitHub {github}.", - "getting_started.security": "Sikkerhed", - "getting_started.terms": "Vilkår", + "getting_started.heading": "Komme i gang", + "getting_started.invite": "Invitér folk", + "getting_started.open_source_notice": "Mastodon er en open-source software. Du kan bidrage eller anmelde fejl via GitHub {github}.", + "getting_started.security": "Kontoindstillinger", + "getting_started.terms": "Tjenestevilkår", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet", - "hashtag.column_settings.select.placeholder": "Indtast hashtags…", + "hashtag.column_settings.select.placeholder": "Angiv hashtags…", "hashtag.column_settings.tag_mode.all": "Alle disse", "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne", "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", @@ -203,237 +208,221 @@ "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", - "introduction.federation.action": "Næste", - "introduction.federation.federated.headline": "Fælles", - "introduction.federation.federated.text": "Offentlige bidrag fra andre servere af fediversen vil komme til syne i den federated timeline.", - "introduction.federation.home.headline": "Hjem", - "introduction.federation.home.text": "Statusser fra personer du følger vil blive vist i dit hjemmefeed. Du kan følge alle på enhver server!", - "introduction.federation.local.headline": "Lokal", - "introduction.federation.local.text": "Offentlige statusser fra personer på samme server som dig vil blive vist i det lokale feed.", - "introduction.interactions.action": "Slut tutorial!", - "introduction.interactions.favourite.headline": "Favorisere", - "introduction.interactions.favourite.text": "Du kan gemme en status til senere (og vise forfatteren at du kunne lide den) ved at favorisere den.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Du kan delete andres statusser med dine følgere ved at booste dem.", - "introduction.interactions.reply.headline": "Svar", - "introduction.interactions.reply.text": "Du kan svare andres og din egen bidrag, hvilke vil kæde dem sammen i en konversation.", - "introduction.welcome.action": "Læd os gå!", - "introduction.welcome.headline": "Første skridt", - "introduction.welcome.text": "Velkommen til fediverset! Om få øjeblikke vil du kunne dele statusser og tale med dine venner på en bred vifte af servere. Men denne server, {domain}, er speciel. Det er på denne server at din profil har hjemme så husk dens navn.", - "keyboard_shortcuts.back": "for at navigere dig tilbage", + "keyboard_shortcuts.back": "for at navigere tilbage", "keyboard_shortcuts.blocked": "for at åbne listen over blokerede brugere", "keyboard_shortcuts.boost": "for at fremhæve", - "keyboard_shortcuts.column": "for at fokusere på en status i en af kolonnerne", + "keyboard_shortcuts.column": "for at fokusere et trut i en af kolonnerne", "keyboard_shortcuts.compose": "for at fokusere på skriveområdet", "keyboard_shortcuts.description": "Beskrivelse", - "keyboard_shortcuts.direct": "for at åbne privat besked kolonnen", - "keyboard_shortcuts.down": "for at rykke ned ad listen", - "keyboard_shortcuts.enter": "for at åbne status", + "keyboard_shortcuts.direct": "for at åbne direkte besked-kolonnen", + "keyboard_shortcuts.down": "for at rykke nedad på listen", + "keyboard_shortcuts.enter": "for at åbne trut", "keyboard_shortcuts.favourite": "for at favorisere", - "keyboard_shortcuts.favourites": "for at åbne listen over favoritter", + "keyboard_shortcuts.favourites": "for at åbne favoritlisten", "keyboard_shortcuts.federated": "for at åbne den forenede tidslinje", "keyboard_shortcuts.heading": "Tastaturgenveje", - "keyboard_shortcuts.home": "for at åbne hjem tidslinjen", + "keyboard_shortcuts.home": "for at åbne hjemmetidslinjen", "keyboard_shortcuts.hotkey": "Hurtigtast", - "keyboard_shortcuts.legend": "for at vise denne legende", + "keyboard_shortcuts.legend": "for at vise dette symbol", "keyboard_shortcuts.local": "for at åbne den lokale tidslinje", "keyboard_shortcuts.mention": "for at nævne forfatteren", - "keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere", + "keyboard_shortcuts.muted": "for at åbne listen over tavsgjorte brugere", "keyboard_shortcuts.my_profile": "for at åbne din profil", - "keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen", + "keyboard_shortcuts.notifications": "for at åbne notifikationskolonnen", "keyboard_shortcuts.open_media": "for at åbne medier", "keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut", - "keyboard_shortcuts.profile": "til profil af åben forfatter", - "keyboard_shortcuts.reply": "for at svare", - "keyboard_shortcuts.requests": "for at åbne listen over følgeranmodninger", + "keyboard_shortcuts.profile": "for at åbne forfatterens profil", + "keyboard_shortcuts.reply": "for at besvare", + "keyboard_shortcuts.requests": "for at åbne følganmodningslisten", "keyboard_shortcuts.search": "for at fokusere søgningen", "keyboard_shortcuts.spoilers": "for at vise/skjule CW-felt", - "keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen", + "keyboard_shortcuts.start": "for at åbne \"komme i gang\"-kolonnen", "keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW", "keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier", - "keyboard_shortcuts.toot": "for at påbegynde et helt nyt trut", + "keyboard_shortcuts.toot": "for at påbegynde et helt nyt indlæg", "keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning", - "keyboard_shortcuts.up": "for at bevæge dig op ad listen", + "keyboard_shortcuts.up": "for at bevæge sig opad på listen", "lightbox.close": "Luk", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Komprimér billedvisningsfelt", + "lightbox.expand": "Udvid billedevisningsfelt", "lightbox.next": "Næste", - "lightbox.previous": "Forrige", - "lists.account.add": "Tilføj til liste", + "lightbox.previous": "Foregående", + "lists.account.add": "Føj til liste", "lists.account.remove": "Fjern fra liste", "lists.delete": "Slet liste", - "lists.edit": "Rediger liste", + "lists.edit": "Redigér liste", "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", - "lists.new.title_placeholder": "Ny liste titel", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.new.title_placeholder": "Ny listetitel", + "lists.replies_policy.followed": "Enhver fulgt bruger", + "lists.replies_policy.list": "Medlemmer af listen", + "lists.replies_policy.none": "Ingen", "lists.replies_policy.title": "Vis svar til:", - "lists.search": "Søg iblandt folk du følger", + "lists.search": "Søg blandt personer, du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}", "loading_indicator.label": "Indlæser...", - "media_gallery.toggle_visible": "Ændre synlighed", + "media_gallery.toggle_visible": "Skjul {number, plural, one {billede} other {billeder}}", "missing_indicator.label": "Ikke fundet", - "missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet", + "missing_indicator.sublabel": "Denne ressource kunne ikke findes", "mute_modal.duration": "Varighed", "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?", "mute_modal.indefinite": "Uendeligt", - "navigation_bar.apps": "Mobil apps", + "navigation_bar.apps": "Mobil-apps", "navigation_bar.blocks": "Blokerede brugere", "navigation_bar.bookmarks": "Bogmærker", "navigation_bar.community_timeline": "Lokal tidslinje", "navigation_bar.compose": "Skriv nyt trut", "navigation_bar.direct": "Direkte beskeder", "navigation_bar.discover": "Opdag", - "navigation_bar.domain_blocks": "Skjulte domæner", - "navigation_bar.edit_profile": "Rediger profil", + "navigation_bar.domain_blocks": "Blokerede domæner", + "navigation_bar.edit_profile": "Redigér profil", "navigation_bar.favourites": "Favoritter", - "navigation_bar.filters": "Dæmpede ord", - "navigation_bar.follow_requests": "Følgeanmodninger", + "navigation_bar.filters": "Tavsgjorte ord", + "navigation_bar.follow_requests": "Følganmodninger", "navigation_bar.follows_and_followers": "Følger og følgere", - "navigation_bar.info": "Om denne instans", - "navigation_bar.keyboard_shortcuts": "Hurtigtast", + "navigation_bar.info": "Om denne server", + "navigation_bar.keyboard_shortcuts": "Hurtigtaster", "navigation_bar.lists": "Lister", - "navigation_bar.logout": "Logud", - "navigation_bar.mutes": "Dæmpede brugere", - "navigation_bar.personal": "Personligt", + "navigation_bar.logout": "Log ud", + "navigation_bar.mutes": "Tavsgjorte brugere", + "navigation_bar.personal": "Personlig", "navigation_bar.pins": "Fastgjorte trut", "navigation_bar.preferences": "Præferencer", - "navigation_bar.public_timeline": "Fælles tidslinje", + "navigation_bar.public_timeline": "Forenet tidslinje", "navigation_bar.security": "Sikkerhed", - "notification.favourite": "{name} favoriserede din status", + "notification.favourite": "{name} favoriserede dit trut", "notification.follow": "{name} fulgte dig", "notification.follow_request": "{name} har anmodet om at følge dig", "notification.mention": "{name} nævnte dig", "notification.own_poll": "Din afstemning er afsluttet", - "notification.poll": "En afstemning, du stemte i, er slut", - "notification.reblog": "{name} boostede din status", - "notification.status": "{name} har lige lagt noget op", + "notification.poll": "En afstemning, hvori du stemte, er slut", + "notification.reblog": "{name} fremhævede din trut", + "notification.status": "{name} har netop postet", "notifications.clear": "Ryd notifikationer", - "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?", + "notifications.clear_confirmation": "Sikker på, at du vil rydde alle dine notifikationer permanent?", "notifications.column_settings.alert": "Skrivebordsnotifikationer", "notifications.column_settings.favourite": "Favoritter:", "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", - "notifications.column_settings.filter_bar.category": "Hurtigfilter", + "notifications.column_settings.filter_bar.category": "Hurtigfilterbjælke", "notifications.column_settings.filter_bar.show": "Vis", "notifications.column_settings.follow": "Nye følgere:", - "notifications.column_settings.follow_request": "Nye følgeranmodninger:", - "notifications.column_settings.mention": "Statusser der nævner dig:", - "notifications.column_settings.poll": "Afstemningsresultat:", + "notifications.column_settings.follow_request": "Nye følganmodninger:", + "notifications.column_settings.mention": "Omtaler:", + "notifications.column_settings.poll": "Afstemningsresultater:", "notifications.column_settings.push": "Pushnotifikationer", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Fremhævelser:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", - "notifications.column_settings.status": "Nye toots:", + "notifications.column_settings.status": "Nye indlæg:", + "notifications.column_settings.unread_markers.category": "Ulæste notifkationer-markører", "notifications.filter.all": "Alle", - "notifications.filter.boosts": "Boosts", + "notifications.filter.boosts": "Fremhævelser", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", - "notifications.filter.mentions": "Statusser der nævner dig", - "notifications.filter.polls": "Afstemningsresultat", + "notifications.filter.mentions": "Omtaler", + "notifications.filter.polls": "Afstemningsresultater", "notifications.filter.statuses": "Opdateringer fra personer, du følger", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Tildel tilladelse.", "notifications.group": "{count} notifikationer", "notifications.mark_as_read": "Markér alle notifikationer som læst", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications.permission_denied": "Skrivebordsnotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning", + "notifications.permission_denied_alert": "Skrivebordsnotifikationer kan ikke aktiveres, da browsertilladelse er blevet nægtet før", + "notifications.permission_required": "Skrivebordsnotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.", + "notifications_permission_banner.enable": "Aktivér skrivebordsnotifikationer", + "notifications_permission_banner.how_to_control": "Aktivér skrivebordsnotifikationer for at modtage notifikationer, når Mastodon ikke er åben. Du kan styre, præcist hvilke typer af interaktioner, som genererer skrivebordsnotifikationer via knappen {icon} ovenfor, når de er aktiveret.", "notifications_permission_banner.title": "Gå aldrig glip af noget", - "picture_in_picture.restore": "Sæt den tilbage", + "picture_in_picture.restore": "Sæt det tilbage", "poll.closed": "Lukket", - "poll.refresh": "Opdatér", + "poll.refresh": "Opfrisk", "poll.total_people": "{count, plural, one {# person} other {# personer}}", "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}", "poll.vote": "Stem", - "poll.voted": "Du stemte for denne valgmulighed", + "poll.voted": "Du stemte for dette svar", "poll_button.add_poll": "Tilføj en afstemning", "poll_button.remove_poll": "Fjern afstemning", - "privacy.change": "Skift status visningsindstillinger", - "privacy.direct.long": "Udgiv kun til nævnte brugere", + "privacy.change": "Justér trutfortrolighed", + "privacy.direct.long": "Kun synlig for nævnte brugere", "privacy.direct.short": "Direkte", - "privacy.private.long": "Udgiv kun til følgere", + "privacy.private.long": "Kun synlig for følgere", "privacy.private.short": "Kun for følgere", - "privacy.public.long": "Udgiv på offentlige tidslinjer", - "privacy.public.short": "Offentligt", - "privacy.unlisted.long": "Udgiv ikke på offentlige tidslinjer", - "privacy.unlisted.short": "Ikke listet", - "refresh": "Opdatér", + "privacy.public.long": "Synlig for alle på offentlige tidslinjer", + "privacy.public.short": "Offentlig", + "privacy.unlisted.long": "Synlig for alle, men på offentlige tidslinjer", + "privacy.unlisted.short": "Ulistet", + "refresh": "Opfrisk", "regeneration_indicator.label": "Indlæser…", - "regeneration_indicator.sublabel": "Din startside er ved at blive forberedt!", + "regeneration_indicator.sublabel": "Din hjemmefeed klargøres!", "relative_time.days": "{number}d", "relative_time.hours": "{number}t", "relative_time.just_now": "nu", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "i dag", - "reply_indicator.cancel": "Annuller", + "reply_indicator.cancel": "Afbryd", "report.forward": "Videresend til {target}", - "report.forward_hint": "Kontoen er fra en anden server. Vil du også sende en anonym kopi af anmeldelsen dertil?", - "report.hint": "Anmeldelsen vil blive sendt til moderatorene af din instans. Du kan give en forklaring på hvorfor du anmelder denne konto nedenfor:", + "report.forward_hint": "Kontoen er fra en anden server. Sende en anonymiseret anmeldelseskopi dertil også?", + "report.hint": "Anmeldelsen sendes til din serverordstyrerer. Du kan oplyse nærmere om kontoanmeldelsen nedennfor:", "report.placeholder": "Yderligere kommentarer", "report.submit": "Indsend", "report.target": "Anmelder {target}", "search.placeholder": "Søg", "search_popout.search_format": "Avanceret søgeformat", - "search_popout.tips.full_text": "Simpel tekst returnerer statusser du har skrevet, favoriseret, boostet, eller er blevet nævnt i såvel som matchende brugernavne, profilnavne, og hashtags.", + "search_popout.tips.full_text": "Simpel tekst returnerer trut, du har skrevet, favoriseret, fremhævede eller som er nævnt i/matcher bruger- og profilnavne samt hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simpel tekst returnerer matchende profilnavne, brugernavne og hashtags", + "search_popout.tips.status": "trut", + "search_popout.tips.text": "Simpel tekst returnerer matchende visnings- og brugernavne samt hashtags", "search_popout.tips.user": "bruger", "search_results.accounts": "Personer", "search_results.hashtags": "Hashtags", "search_results.statuses": "Trut", - "search_results.statuses_fts_disabled": "Denne Mastodonserver har ikke aktiveret for søgning af statusser via deres indhold.", + "search_results.statuses_fts_disabled": "På denne Mastodon-server er trutsøgning efter deres indhold ikke aktiveret.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", - "status.admin_account": "Åben modereringsvisning for @{name}", - "status.admin_status": "Åben denne status i modereringsvisningen", - "status.block": "Bloker @{name}", + "status.admin_account": "Åbn modereringsbrugerflade for @{name}", + "status.admin_status": "Åbn dette trut i modereringsbrugerflade", + "status.block": "Blokér @{name}", "status.bookmark": "Bogmærke", - "status.cancel_reblog_private": "Fjern boost", - "status.cannot_reblog": "Denne post kan ikke boostes", - "status.copy": "Kopiér link til status", + "status.cancel_reblog_private": "Fjern fremhævning", + "status.cannot_reblog": "Dette indlæg kan ikke fremhæves", + "status.copy": "Kopiér link til trut", "status.delete": "Slet", - "status.detailed_status": "Detaljeret visning af samtale", - "status.direct": "Send direkte besked til @{name}", - "status.embed": "Integrér", + "status.detailed_status": "Detaljeret konversationsvisning", + "status.direct": "Direkte besked til @{name}", + "status.embed": "Indlejr", "status.favourite": "Favorit", "status.filtered": "Filtreret", "status.load_more": "Indlæs mere", "status.media_hidden": "Medie skjult", "status.mention": "Nævn @{name}", "status.more": "Mere", - "status.mute": "Dæmp @{name}", - "status.mute_conversation": "Dæmp samtale", - "status.open": "Udvid denne status", + "status.mute": "Tavsgør @{name}", + "status.mute_conversation": "Tavsgør konversation", + "status.open": "Udvid dette trut", "status.pin": "Fastgør til profil", "status.pinned": "Fastgjort trut", "status.read_more": "Læs mere", - "status.reblog": "Boost", - "status.reblog_private": "Boost til det oprindelige publikum", - "status.reblogged_by": "{name} boostede", - "status.reblogs.empty": "Der er endnu ingen der har boostet dette trut. Når der er nogen der gør, vil det blive vist her.", + "status.reblog": "Fremhæv", + "status.reblog_private": "Fremhæv med oprindelig synlighed", + "status.reblogged_by": "{name} fremhævet", + "status.reblogs.empty": "Ingen har endnu fremhævet dette trut. Når nogen gør, vil det fremgå hér.", "status.redraft": "Slet og omskriv", "status.remove_bookmark": "Fjern bogmærke", "status.reply": "Besvar", - "status.replyAll": "Besvar samtale", + "status.replyAll": "Besvar til tråd", "status.report": "Anmeld @{name}", - "status.sensitive_warning": "Følsomt indhold", + "status.sensitive_warning": "Sensitivt indhold", "status.share": "Del", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", "status.show_more_all": "Vis mere for alle", "status.show_thread": "Vis tråd", - "status.uncached_media_warning": "Ikke tilgængelig", - "status.unmute_conversation": "Genaktivér samtale", + "status.uncached_media_warning": "Utilgængelig", + "status.unmute_conversation": "Genaktivér konversation", "status.unpin": "Frigør fra profil", "suggestions.dismiss": "Afvis foreslag", "suggestions.header": "Du er måske interesseret i…", - "tabs_bar.federated_timeline": "Fælles", + "tabs_bar.federated_timeline": "Forenede", "tabs_bar.home": "Hjem", "tabs_bar.local_timeline": "Lokal", "tabs_bar.notifications": "Notifikationer", @@ -446,41 +435,41 @@ "timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.", "timeline_hint.resources.followers": "Følgere", "timeline_hint.resources.follows": "Følger", - "timeline_hint.resources.statuses": "Ældre toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.resources.statuses": "Ældre indlæg", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} taler", "trends.trending_now": "Hot lige nu", - "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.", - "units.short.billion": "{count}B", + "ui.beforeunload": "Dit udkast går tabt, hvis du forlader Mastodon.", + "units.short.billion": "{count}MI", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "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": "Uploadgrænse overskredet.", - "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.", - "upload_form.audio_description": "Beskriv for personer med høretab", - "upload_form.description": "Beskriv for svagtseende", + "upload_button.label": "Tilføj billeder, en video- eller lydfil", + "upload_error.limit": "Filuploadgrænse nået.", + "upload_error.poll": "Filupload ikke tilladt for afstemninger.", + "upload_form.audio_description": "Beskrivelse til hørehæmmede", + "upload_form.description": "Beskrivelse til svagtseende", "upload_form.edit": "Redigér", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Skift miniaturer", "upload_form.undo": "Slet", - "upload_form.video_description": "Beskriv for personer med høretab eller nedsat syn", + "upload_form.video_description": "Beskrivelse for hørehæmmede eller synshandicappede personer", "upload_modal.analyzing_picture": "Analyserer billede…", "upload_modal.apply": "Anvend", "upload_modal.choose_image": "Vælg billede", "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", - "upload_modal.detect_text": "Find tekst i billede på automatisk vis", + "upload_modal.detect_text": "Detektér tekst i billede", "upload_modal.edit_media": "Redigér medie", - "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.", - "upload_modal.preparing_ocr": "Forbereder OCR…", + "upload_modal.hint": "Klik eller træk cirklen i forhåndsvisningen for at vælge det fokuspunkt, der altid vil være synligt på alle miniaturer.", + "upload_modal.preparing_ocr": "Klargør OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Uploader...", "video.close": "Luk video", - "video.download": "Hent fil", + "video.download": "Download fil", "video.exit_fullscreen": "Forlad fuldskærm", "video.expand": "Udvid video", "video.fullscreen": "Fuldskærm", "video.hide": "Skjul video", - "video.mute": "Dæmp lyd", + "video.mute": "Tavsgør lyd", "video.pause": "Sæt på pause", "video.play": "Afspil", - "video.unmute": "Fjern dæmpningen af lyd" + "video.unmute": "Fjern lydtavsgørelse" } diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 1cc962880..c98e3230d 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -22,6 +22,7 @@ "account.follows.empty": "Dieses Profil folgt noch niemandem.", "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", + "account.joined": "Beigetreten am {date}", "account.last_status": "Zuletzt aktiv", "account.link_verified_on": "Besitz dieses Links wurde geprüft am {date}", "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf gesperrt gesetzt. Die Person bestimmt manuell wer ihm/ihr folgen darf.", @@ -156,13 +157,14 @@ "empty_column.bookmarked_statuses": "Du hast bis jetzt keine Beiträge als Lesezeichen gespeichert. Wenn du einen Beitrag als Lesezeichen speicherst wird er hier erscheinen.", "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!", "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.", - "empty_column.domain_blocks": "Es ist noch keine versteckten Domains.", + "empty_column.domain_blocks": "Es sind noch keine Domains versteckt.", "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.", "empty_column.favourites": "Noch niemand hat diesen Beitrag favorisiert. Sobald es jemand tut, wird das hier angezeigt.", + "empty_column.follow_recommendations": "Es sieht so aus, als könnten keine Vorschläge für dich generiert werden. Du kannst versuchen nach Leuten zu suchen, die du vielleicht kennst oder du kannst angesagte Hashtags erkunden.", "empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.", "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.", "empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.", - "empty_column.home.public_timeline": "die öffentliche Zeitleiste", + "empty_column.home.suggestions": "Ein paar Vorschläge ansehen", "empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.", "empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.", "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.", "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Problem melden", + "follow_recommendations.done": "Fertig", + "follow_recommendations.heading": "Folge Leuten, von denen du Beiträge sehen möchtest! Hier sind einige Vorschläge.", + "follow_recommendations.lead": "Beiträge von Personen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Hab keine Angst, Fehler zu machen, du kannst den Leuten jederzeit wieder entfolgen!", "follow_request.authorize": "Erlauben", "follow_request.reject": "Ablehnen", "follow_requests.unlocked_explanation": "Auch wenn dein Konto nicht gesperrt ist, haben die Mitarbeiter von {domain} gedacht, dass es besser wäre den Follow manuell zu bestätigen.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Weiter", - "introduction.federation.federated.headline": "Föderiert", - "introduction.federation.federated.text": "Öffentliche Beiträge von anderen Servern im Fediversum erscheinen in der föderierten Zeitleiste.", - "introduction.federation.home.headline": "Startseite", - "introduction.federation.home.text": "Beiträge von Leuten, denen du folgst, erscheinen auf deiner Startseite. Du kannst Menschen auf beliebigen Servern folgen!", - "introduction.federation.local.headline": "Lokal", - "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.", - "introduction.interactions.action": "Tutorial beenden!", - "introduction.interactions.favourite.headline": "Favorisieren", - "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autoren wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.", - "introduction.interactions.reblog.headline": "Teilen", - "introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie teilst.", - "introduction.interactions.reply.headline": "Antworten", - "introduction.interactions.reply.text": "Du kannst auf die Beiträge anderer antworten. Diese Beiträge werden dann in einer Konversation zusammengefasst.", - "introduction.welcome.action": "Lass uns loslegen!", - "introduction.welcome.headline": "Erste Schritte", - "introduction.welcome.text": "Willkommen im Fediversum! In wenigen Momenten wirst du in der Lage sein Nachrichten zu versenden und mit deinen Freunden von anderen Servern in Kontakt zu treten. Aber dieser Server, {domain}, ist für dich sehr speziell — er hostet dein Profil, also merke dir die Domain.", "keyboard_shortcuts.back": "zurück navigieren", "keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen", "keyboard_shortcuts.boost": "teilen", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", "notifications.column_settings.status": "Neue Beiträge:", + "notifications.column_settings.unread_markers.category": "Ungelesene Benachrichtigungsmarkierungen", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Geteilte Beiträge", "notifications.filter.favourites": "Favorisierungen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 4ffedfbfb..a8091cd87 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -242,7 +242,7 @@ { "descriptors": [ { - "defaultMessage": "Hide {number, plural, one {image} other {images}}", + "defaultMessage": "{number, plural, one {Hide image} other {Hide images}}", "id": "media_gallery.toggle_visible" }, { @@ -909,6 +909,10 @@ { "defaultMessage": "Group", "id": "account.badges.group" + }, + { + "defaultMessage": "Joined {date}", + "id": "account.joined" } ], "path": "app/javascript/mastodon/features/account/components/header.json" @@ -1627,6 +1631,40 @@ { "descriptors": [ { + "defaultMessage": "Follow", + "id": "account.follow" + }, + { + "defaultMessage": "Unfollow", + "id": "account.unfollow" + } + ], + "path": "app/javascript/mastodon/features/follow_recommendations/components/account.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Follow people you'd like to see posts from! Here are some suggestions.", + "id": "follow_recommendations.heading" + }, + { + "defaultMessage": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "id": "follow_recommendations.lead" + }, + { + "defaultMessage": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "id": "empty_column.follow_recommendations" + }, + { + "defaultMessage": "Done", + "id": "follow_recommendations.done" + } + ], + "path": "app/javascript/mastodon/features/follow_recommendations/index.json" + }, + { + "descriptors": [ + { "defaultMessage": "Authorize", "id": "follow_request.authorize" }, @@ -1889,12 +1927,12 @@ "id": "home.hide_announcements" }, { - "defaultMessage": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "defaultMessage": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", "id": "empty_column.home" }, { - "defaultMessage": "the public timeline", - "id": "empty_column.home.public_timeline" + "defaultMessage": "See some suggestions", + "id": "empty_column.home.suggestions" } ], "path": "app/javascript/mastodon/features/home_timeline/index.json" @@ -1902,79 +1940,6 @@ { "descriptors": [ { - "defaultMessage": "First steps", - "id": "introduction.welcome.headline" - }, - { - "defaultMessage": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "id": "introduction.welcome.text" - }, - { - "defaultMessage": "Let's go!", - "id": "introduction.welcome.action" - }, - { - "defaultMessage": "Home", - "id": "introduction.federation.home.headline" - }, - { - "defaultMessage": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "id": "introduction.federation.home.text" - }, - { - "defaultMessage": "Local", - "id": "introduction.federation.local.headline" - }, - { - "defaultMessage": "Public posts from people on the same server as you will appear in the local timeline.", - "id": "introduction.federation.local.text" - }, - { - "defaultMessage": "Federated", - "id": "introduction.federation.federated.headline" - }, - { - "defaultMessage": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "id": "introduction.federation.federated.text" - }, - { - "defaultMessage": "Next", - "id": "introduction.federation.action" - }, - { - "defaultMessage": "Reply", - "id": "introduction.interactions.reply.headline" - }, - { - "defaultMessage": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "id": "introduction.interactions.reply.text" - }, - { - "defaultMessage": "Boost", - "id": "introduction.interactions.reblog.headline" - }, - { - "defaultMessage": "You can share other people's toots with your followers by boosting them.", - "id": "introduction.interactions.reblog.text" - }, - { - "defaultMessage": "Favourite", - "id": "introduction.interactions.favourite.headline" - }, - { - "defaultMessage": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "id": "introduction.interactions.favourite.text" - }, - { - "defaultMessage": "Finish toot-orial!", - "id": "introduction.interactions.action" - } - ], - "path": "app/javascript/mastodon/features/introduction/index.json" - }, - { - "descriptors": [ - { "defaultMessage": "Keyboard Shortcuts", "id": "keyboard_shortcuts.heading" }, @@ -2285,6 +2250,10 @@ "id": "notifications.permission_required" }, { + "defaultMessage": "Unread notification markers", + "id": "notifications.column_settings.unread_markers.category" + }, + { "defaultMessage": "Quick filter bar", "id": "notifications.column_settings.filter_bar.category" }, @@ -2456,7 +2425,7 @@ "id": "notifications.mark_as_read" }, { - "defaultMessage": "You don't have any notifications yet. Interact with others to start the conversation.", + "defaultMessage": "You don't have any notifications yet. When other people interact with you, you will see it here.", "id": "empty_column.notifications" } ], diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 7b7373165..7e6fc095a 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -4,13 +4,13 @@ "account.badges.bot": "Μποτ", "account.badges.group": "Ομάδα", "account.block": "Αποκλεισμός @{name}", - "account.block_domain": "Απόκρυψη όλων από {domain}", + "account.block_domain": "Αποκλεισμός {domain}", "account.blocked": "Αποκλεισμένος/η", "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ", - "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", - "account.direct": "Προσωπικό μήνυμα προς @{name}", + "account.cancel_follow_request": "Ακύρωση αιτήματος ακολούθησης", + "account.direct": "Άμεσο μήνυμα προς @{name}", "account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", - "account.domain_blocked": "Κρυμμένος τομέας", + "account.domain_blocked": "Ο τομέας αποκλείστηκε", "account.edit_profile": "Επεξεργασία προφίλ", "account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", "account.endorse": "Προβολή στο προφίλ", @@ -22,6 +22,7 @@ "account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.", "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", + "account.joined": "Μέλος από τις {date}", "account.last_status": "Τελευταία δραστηριότητα", "account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου ελέχθηκε την {date}", "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού είναι κλειδωμένη. Ο ιδιοκτήτης επιβεβαιώνει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.", "empty_column.favourited_statuses": "Δεν έχεις κανένα αγαπημένο τουτ ακόμα. Μόλις αγαπήσεις κάποιο, θα εμφανιστεί εδώ.", "empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.", "empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.", "empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.", - "empty_column.home.public_timeline": "η δημόσια ροή", + "empty_column.home.suggestions": "Ορίστε μερικές προτάσεις", "empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.", "empty_column.lists": "Δεν έχεις καμία λίστα ακόμα. Μόλις φτιάξεις μια, θα εμφανιστεί εδώ.", "empty_column.mutes": "Δεν έχεις αποσιωπήσει κανένα χρήστη ακόμα.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.", "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", + "follow_recommendations.done": "Ολοκληρώθηκε", + "follow_recommendations.heading": "Ακολουθήστε άτομα από τα οποία θα θέλατε να βλέπετε δημοσιεύσεις! Ορίστε μερικές προτάσεις.", + "follow_recommendations.lead": "Οι αναρτήσεις των ατόμων που ακολουθείτε θα εμφανίζονται με χρονολογική σειρά στη ροή σας. Μη φοβάστε να κάνετε λάθη, καθώς μπορείτε πολύ εύκολα να σταματήσετε να ακολουθείτε άλλα άτομα οποιαδήποτε στιγμή!", "follow_request.authorize": "Ενέκρινε", "follow_request.reject": "Απέρριψε", "follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, οι διαχειριστές του {domain} θεώρησαν πως ίσως να θέλεις να ελέγξεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}", - "introduction.federation.action": "Επόμενο", - "introduction.federation.federated.headline": "Ομοσπονδιακή", - "introduction.federation.federated.text": "Οι δημόσιες αναρτήσεις από άλλους κόμβους του fediverse θα εμφανίζονται στην ομοσπονδιακή ροή.", - "introduction.federation.home.headline": "Αρχική", - "introduction.federation.home.text": "Οι αναρτήσεις όσων ακολουθείς θα εμφανίζονται στην αρχική ροή. Μπορείς να ακολουθήσεις όποιον θέλεις σε οποιονδήποτε κόμβο!", - "introduction.federation.local.headline": "Τοπική", - "introduction.federation.local.text": "Οι δημόσιες αναρτήσεις από άτομα στον ίδιο κόμβο με εσένα θα εμφανίζονται στην τοπική ροή.", - "introduction.interactions.action": "Τέλος μαθήματος!", - "introduction.interactions.favourite.headline": "Αγαπημένο", - "introduction.interactions.favourite.text": "Φύλαξε ένα τουτ για αργότερα και να ειδοποιήσεις τον δημιουργό του ότι σου άρεσε σημειώνοντας το ως αγαπημένο.", - "introduction.interactions.reblog.headline": "Προώθηση", - "introduction.interactions.reblog.text": "Μοιράσου τουτ άλλων χρηστών με όσους σε ακολουθούν προωθώντας τα.", - "introduction.interactions.reply.headline": "Απάντηση", - "introduction.interactions.reply.text": "Μπορείς να απαντήσεις στα τουτ άλλων αλλά ακόμα και στα δικά σου, δένοντας τα όλα μαζί σε μια συζήτηση.", - "introduction.welcome.action": "Ας ξεκινήσουμε!", - "introduction.welcome.headline": "Πρώτα βήματα", - "introduction.welcome.text": "Καλώς ήρθες στο fediverse! Σε πολύ λίγο θα μπορείς να στέλνεις δημοσιεύσεις και να μιλάς με τους φίλους σου σε πολλούς, διαφορετικούς κόμβους. Ο κόμβος {domain} όμως είναι ξεχωριστός — φιλοξενεί τον λογαριασμό σου, για αυτό να θυμάσαι το όνομά του.", "keyboard_shortcuts.back": "επιστροφή", "keyboard_shortcuts.blocked": "άνοιγμα λίστας αποκλεισμένων χρηστών", "keyboard_shortcuts.boost": "προώθηση", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Εμφάνισε σε στήλη", "notifications.column_settings.sound": "Ηχητική ειδοποίηση", "notifications.column_settings.status": "Νέα τουτ:", + "notifications.column_settings.unread_markers.category": "Δείκτες μη αναγνωσμένων ειδοποιήσεων", "notifications.filter.all": "Όλες", "notifications.filter.boosts": "Προωθήσεις", "notifications.filter.favourites": "Αγαπημένα", @@ -337,11 +326,11 @@ "notifications.grant_permission": "Χορήγηση άδειας.", "notifications.group": "{count} ειδοποιήσεις", "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_denied": "Οι ειδοποιήσεις στην επιφάνεια εργασίας δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας", + "notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων της επιφάνειας εργασίας, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί νωρίτερα", "notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.", "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "Για να λαμβάνετε ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποιήστε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείτε να ελέγξετε με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.", "notifications_permission_banner.title": "Μη χάσετε τίποτα", "picture_in_picture.restore": "Επαναφορά", "poll.closed": "Κλειστή", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 5bea4e816..b43690c3a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -32,13 +33,13 @@ "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", "account.never_active": "Never", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", + "account.posts": "Posts", + "account.posts_with_replies": "Posts and replies", "account.report": "Report @{name}", "account.requested": "Awaiting approval. Click to cancel follow request", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Post} other {{counter} Posts}}", "account.unblock": "Unblock @{name}", "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", @@ -71,7 +72,7 @@ "column.lists": "Lists", "column.mutes": "Muted users", "column.notifications": "Notifications", - "column.pins": "Pinned toots", + "column.pins": "Pinned posts", "column.public": "Federated timeline", "column_back_button.label": "Back", "column_header.hide_settings": "Hide settings", @@ -88,9 +89,9 @@ "community.column_settings.local_only": "Local only", "community.column_settings.media_only": "Media Only", "community.column_settings.remote_only": "Remote only", - "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users.", + "compose_form.direct_message_warning": "This post will only be sent to the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", "compose_form.placeholder": "What's on your mind?", @@ -105,15 +106,15 @@ "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler.marked": "Remove content warning", + "compose_form.spoiler.unmarked": "Add content warning", "compose_form.spoiler_placeholder": "Write your warning here", "confirmation_modal.cancel": "Cancel", "confirmations.block.block_and_report": "Block & Report", "confirmations.block.confirm": "Block", "confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this toot?", + "confirmations.delete.message": "Are you sure you want to delete this post?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Block entire domain", @@ -124,7 +125,7 @@ "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this toot and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.reply.confirm": "Reply", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", @@ -137,7 +138,7 @@ "directory.local": "From {domain} only", "directory.new_arrivals": "New arrivals", "directory.recently_active": "Recently active", - "embed.instructions": "Embed this toot on your website by copying the code below.", + "embed.instructions": "Embed this post on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", "emoji_button.custom": "Custom", @@ -154,23 +155,24 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "No posts here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.domain_blocks": "There are no blocked domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.favourited_statuses": "You don't have any favourite posts yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this post yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", - "empty_column.list": "There is nothing in this list yet. When members of this list post new toots, they will appear here.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "There is nothing in this list yet. When members of this list publish new posts, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -178,6 +180,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -207,57 +212,40 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish tutorial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a toot in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.back": "Navigate back", + "keyboard_shortcuts.blocked": "Open blocked users list", + "keyboard_shortcuts.boost": "Boost post", + "keyboard_shortcuts.column": "Focus column", + "keyboard_shortcuts.compose": "Focus compose textarea", "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open toot", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.direct": "Open direct messages column", + "keyboard_shortcuts.down": "Move down in the list", + "keyboard_shortcuts.enter": "Open post", + "keyboard_shortcuts.favourite": "Favourite post", + "keyboard_shortcuts.favourites": "Open favourites list", + "keyboard_shortcuts.federated": "Open federated timeline", "keyboard_shortcuts.heading": "Keyboard shortcuts", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "Open home timeline", "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.legend": "Display this legend", + "keyboard_shortcuts.local": "Open local timeline", + "keyboard_shortcuts.mention": "Mention author", + "keyboard_shortcuts.muted": "Open muted users list", + "keyboard_shortcuts.my_profile": "Open your profile", + "keyboard_shortcuts.notifications": "Open notifications column", + "keyboard_shortcuts.open_media": "Open media", + "keyboard_shortcuts.pinned": "Open pinned posts list", + "keyboard_shortcuts.profile": "Open author's profile", + "keyboard_shortcuts.reply": "Reply to post", + "keyboard_shortcuts.requests": "Open follow requests list", + "keyboard_shortcuts.search": "Focus search bar", + "keyboard_shortcuts.spoilers": "Show/hide CW field", + "keyboard_shortcuts.start": "Open “get started” column", + "keyboard_shortcuts.toggle_hidden": "Show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "Show/hide media", + "keyboard_shortcuts.toot": "Start a new post", + "keyboard_shortcuts.unfocus": "Unfocus compose textarea/search", + "keyboard_shortcuts.up": "Move up in the list", "lightbox.close": "Close", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", @@ -278,7 +266,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -288,7 +276,7 @@ "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "Compose new post", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Blocked domains", @@ -304,17 +292,17 @@ "navigation_bar.logout": "Logout", "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.pins": "Pinned posts", "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", - "notification.favourite": "{name} favourited your toot", + "notification.favourite": "{name} favourited your post", "notification.follow": "{name} followed you", "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your toot", + "notification.reblog": "{name} boosted your post", "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", @@ -331,7 +319,8 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "New posts:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", @@ -357,7 +346,7 @@ "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust toot privacy", + "privacy.change": "Change post privacy", "privacy.direct.long": "Visible for mentioned users only", "privacy.direct.short": "Direct", "privacy.private.long": "Visible for followers only", @@ -384,23 +373,23 @@ "report.target": "Reporting {target}", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns toots you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.full_text": "Simple text returns posts you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "post", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "user", "search_results.accounts": "People", "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.statuses": "Posts", + "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this toot in the moderation interface", + "status.admin_status": "Open this post in the moderation interface", "status.block": "Block @{name}", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to toot", + "status.copy": "Copy link to post", "status.delete": "Delete", "status.detailed_status": "Detailed conversation view", "status.direct": "Direct message @{name}", @@ -413,14 +402,14 @@ "status.more": "More", "status.mute": "Mute @{name}", "status.mute_conversation": "Mute conversation", - "status.open": "Expand this toot", + "status.open": "Expand this post", "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", + "status.pinned": "Pinned post", "status.read_more": "Read more", "status.reblog": "Boost", "status.reblog_private": "Boost with original visibility", "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.", "status.redraft": "Delete & re-draft", "status.remove_bookmark": "Remove bookmark", "status.reply": "Reply", @@ -451,7 +440,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.statuses": "Older posts", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 5cff6c5af..11ebc9d97 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -4,15 +4,15 @@ "account.badges.bot": "Roboto", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", - "account.block_domain": "Bloki {domain}", + "account.block_domain": "Bloki domajnon {domain}", "account.blocked": "Blokita", "account.browse_more_on_origin_server": "Rigardi pli al la originala profilo", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Ĉesu sciigi min kiam @{name} mesaĝi", "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti profilon", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Sciigi min kiam @{name} mesaĝi", "account.endorse": "Montri en profilo", "account.follow": "Sekvi", "account.followers": "Sekvantoj", @@ -22,6 +22,7 @@ "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", + "account.joined": "Joined {date}", "account.last_status": "Laste aktiva", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Konto haltigita", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", "empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", @@ -159,21 +160,25 @@ "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.", "empty_column.favourites": "Ankoraŭ neniu stelumis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", "empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.", - "empty_column.home.public_timeline": "la publikan tempolinion", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn mesaĝojn, ili aperos ĉi tie.", "empty_column.lists": "Vi ankoraŭ ne havas liston. Kiam vi kreos iun, ĝi aperos ĉi tie.", "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.", "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ĉi tiu paĝo ne povis esti montrita ĝuste. Ĉi tiu eraro probable estas kaŭzita de retumila aldonaĵo aŭ aŭtomataj tradukiloj.", "error.unexpected_crash.next_steps": "Provu refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Provu malaktivigi ilin kaj tiam refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.", "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", + "follow_recommendations.done": "Farita", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Sekva", - "introduction.federation.federated.headline": "Fratara", - "introduction.federation.federated.text": "Publikaj mesaĝoj el aliaj serviloj de la Fediverse aperos en la fratara tempolinio.", - "introduction.federation.home.headline": "Hejmo", - "introduction.federation.home.text": "Mesaĝoj de homoj, kiujn vi sekvas, aperos en via hejma fluo. Vi povas sekvi iun ajn de ajna servilo!", - "introduction.federation.local.headline": "Loka", - "introduction.federation.local.text": "Publikaj mesaĝoj de homoj de via servilo aperos en la loka tempolinio.", - "introduction.interactions.action": "Fini la lernilon!", - "introduction.interactions.favourite.headline": "Stelumi", - "introduction.interactions.favourite.text": "Vi povas konservi mesaĝon por posta uzo, kaj sciigi al ĝia aŭtoro ke vi ŝatis ĝin, per stelumo.", - "introduction.interactions.reblog.headline": "Diskonigi", - "introduction.interactions.reblog.text": "Vi povas diskonigi mesaĝojn al viaj sekvantoj per diskonigo.", - "introduction.interactions.reply.headline": "Respondi", - "introduction.interactions.reply.text": "Vi povas respondi al mesaĝoj aliulaj kaj viaj, kio kreos ĉenon de mesaĝoj nomata konversacio.", - "introduction.welcome.action": "Ek!", - "introduction.welcome.headline": "Unuaj paŝoj", - "introduction.welcome.text": "Bonvenon en Fediverse! Tre baldaŭ, vi povos disdoni mesaĝojn kaj paroli al viaj amikoj tra granda servila diverseco. Sed ĉi tiu servilo, {domain}, estas speciala: ĝi enhavas vian profilon, do memoru ĝian nomon.", "keyboard_shortcuts.back": "reveni", "keyboard_shortcuts.blocked": "malfermi la liston de blokitaj uzantoj", "keyboard_shortcuts.boost": "diskonigi", @@ -255,8 +243,8 @@ "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Kunpremi bildan vidkeston", + "lightbox.expand": "Pligrandigi bildan vidkeston", "lightbox.next": "Sekva", "lightbox.previous": "Antaŭa", "lists.account.add": "Aldoni al la listo", @@ -266,9 +254,9 @@ "lists.edit.submit": "Ŝanĝi titolon", "lists.new.create": "Aldoni liston", "lists.new.title_placeholder": "Titolo de la nova listo", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Iu sekvanta uzanto", + "lists.replies_policy.list": "Membroj de la listo", + "lists.replies_policy.none": "Neniu", "lists.replies_policy.title": "Montri respondon al:", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", @@ -327,23 +315,24 @@ "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", "notifications.column_settings.status": "Novaj mesaĝoj:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Diskonigoj", "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas", + "notifications.grant_permission": "Doni permeson.", "notifications.group": "{count} sciigoj", "notifications.mark_as_read": "Marki ĉiujn sciigojn legita", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_denied": "Labortablaj sciigoj ne disponeblas pro peto antaŭe rifuzita de retumiloj", + "notifications.permission_denied_alert": "Labortablaj sciigoj ne povas esti ebligitaj, ĉar retumilpermeso antaŭe estis rifuzita", + "notifications.permission_required": "Labortablaj sciigoj ne disponeblas ĉar la bezonata permeso ne estis donita.", "notifications_permission_banner.enable": "Ebligi retumilajn sciigojn", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", - "picture_in_picture.restore": "Put it back", + "picture_in_picture.restore": "Remetu ĝin", "poll.closed": "Finita", "poll.refresh": "Aktualigi", "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", @@ -443,7 +432,7 @@ "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", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "{resource} de aliaj serviloj ne estas montrata.", "timeline_hint.resources.followers": "Sekvantoj", "timeline_hint.resources.follows": "Sekvatoj", "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj", @@ -460,7 +449,7 @@ "upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi", "upload_form.description": "Priskribi por misvidantaj homoj", "upload_form.edit": "Redakti", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Ŝanĝi etigita bildo", "upload_form.undo": "Forigi", "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi", "upload_modal.analyzing_picture": "Bilda analizado…", @@ -470,7 +459,7 @@ "upload_modal.detect_text": "Detekti tekston de la bildo", "upload_modal.edit_media": "Redakti aŭdovidaĵon", "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparante OSR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", "upload_progress.label": "Alŝutado…", "video.close": "Fermi la videon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 434382e20..f8453e856 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Explorar más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", - "account.disable_notifications": "Dejar de notificarme cuando @{name} tootee", + "account.disable_notifications": "Dejar de notificarme cuando @{name} envíe mensajes", "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notificarme cuando @{name} tootee", + "account.enable_notifications": "Notificarme cuando @{name} envíe mensajes", "account.endorse": "Destacar en el perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -21,10 +21,11 @@ "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", "account.follows.empty": "Todavía este usuario no sigue a nadie.", "account.follows_you": "Te sigue", - "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.hide_reblogs": "Ocultar adhesiones de @{name}", + "account.joined": "En este servidor desde {date}", "account.last_status": "Última actividad", "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", - "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.", + "account.locked_info": "Esta cuenta es privada. El propietario manualmente revisa quién puede seguirle.", "account.media": "Medios", "account.mention": "Mencionar a @{name}", "account.moved_to": "{name} se ha mudó a:", @@ -32,13 +33,13 @@ "account.mute_notifications": "Silenciar notificaciones de @{name}", "account.muted": "Silenciado", "account.never_active": "Nunca", - "account.posts": "Toots", - "account.posts_with_replies": "Toots y respuestas", + "account.posts": "Mensajes", + "account.posts_with_replies": "Mensajes y respuestas", "account.report": "Denunciar a @{name}", "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento", "account.share": "Compartir el perfil de @{name}", - "account.show_reblogs": "Mostrar retoots de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.show_reblogs": "Mostrar adhesiones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Mensaje} other {{counter} Mensajes}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Desbloquear dominio {domain}", "account.unendorse": "No destacar en el perfil", @@ -71,7 +72,7 @@ "column.lists": "Listas", "column.mutes": "Usuarios silenciados", "column.notifications": "Notificaciones", - "column.pins": "Toots fijados", + "column.pins": "Mensajes fijados", "column.public": "Línea temporal federada", "column_back_button.label": "Volver", "column_header.hide_settings": "Ocultar configuración", @@ -84,11 +85,11 @@ "community.column_settings.local_only": "Sólo local", "community.column_settings.media_only": "Sólo medios", "community.column_settings.remote_only": "Sólo remoto", - "compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.", + "compose_form.direct_message_warning": "Este mensaje sólo será enviado a los usuarios mencionados.", "compose_form.direct_message_warning_learn_more": "Aprendé más", - "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", - "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"Sólo para seguidores\".", - "compose_form.lock_disclaimer.lock": "bloqueada", + "compose_form.hashtag_warning": "Este mensaje no se mostrará bajo ninguna etiqueta porque no es público. Sólo los mensajes públicos se pueden buscar por etiquetas.", + "compose_form.lock_disclaimer": "Tu cuenta no es {locked}. Todos pueden seguirte para ver tus mensajes marcados como \"Sólo para seguidores\".", + "compose_form.lock_disclaimer.lock": "privada", "compose_form.placeholder": "¿Qué onda?", "compose_form.poll.add_option": "Agregá una opción", "compose_form.poll.duration": "Duración de la encuesta", @@ -96,20 +97,20 @@ "compose_form.poll.remove_option": "Quitar esta opción", "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples", "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción", - "compose_form.publish": "Tootear", + "compose_form.publish": "Enviar", "compose_form.publish_loud": "¡{publish}!", "compose_form.sensitive.hide": "Marcar medio como sensible", "compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}", "compose_form.sensitive.unmarked": "El medio no está marcado como sensible", - "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", - "compose_form.spoiler.unmarked": "El texto no está oculto", + "compose_form.spoiler.marked": "Quitar advertencia de contenido", + "compose_form.spoiler.unmarked": "Agregar advertencia de contenido", "compose_form.spoiler_placeholder": "Escribí tu advertencia acá", "confirmation_modal.cancel": "Cancelar", "confirmations.block.block_and_report": "Bloquear y denunciar", "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro que querés eliminar este toot?", + "confirmations.delete.message": "¿Estás seguro que querés eliminar este mensaje?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?", "confirmations.domain_block.confirm": "Bloquear dominio entero", @@ -119,8 +120,8 @@ "confirmations.mute.confirm": "Silenciar", "confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.", "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?", - "confirmations.redraft.confirm": "Eliminar toot original y editarlo", - "confirmations.redraft.message": "¿Estás seguro que querés eliminar este toot y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.redraft.confirm": "Eliminar mensaje original y editarlo", + "confirmations.redraft.message": "¿Estás seguro que querés eliminar este mensaje y volver a editarlo? Se perderán las veces marcadas como favorito y sus adhesiones, y las respuestas al mensaje original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?", "confirmations.unfollow.confirm": "Dejar de seguir", @@ -133,7 +134,7 @@ "directory.local": "Sólo de {domain}", "directory.new_arrivals": "Recién llegados", "directory.recently_active": "Recientemente activos", - "embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.", + "embed.instructions": "Insertá este mensaje a tu sitio web copiando el código de abajo.", "embed.preview": "Así es cómo se verá:", "emoji_button.activity": "Actividad", "emoji_button.custom": "Personalizado", @@ -150,23 +151,24 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", "empty_column.account_suspended": "Cuenta suspendida", - "empty_column.account_timeline": "¡No hay toots acá!", + "empty_column.account_timeline": "¡No hay mensajes acá!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", - "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.", + "empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.", "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.", "empty_column.domain_blocks": "Todavía no hay dominios bloqueados.", - "empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.", - "empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.", + "empty_column.favourited_statuses": "Todavía no tenés mensajes favoritos. Cuando marqués uno como favorito, se mostrará acá.", + "empty_column.favourites": "Todavía nadie marcó este mensaje como favorito. Cuando alguien lo haga, se mostrará acá.", + "empty_column.follow_recommendations": "Parece que no se pudieron generar sugerencias para vos. Podés intentar buscar gente que conozcas o explorar las tendencias de las etiquetas.", "empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.", "empty_column.hashtag": "Todavía no hay nada con esta etiqueta.", - "empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.", - "empty_column.home.public_timeline": "la línea temporal pública", - "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.", + "empty_column.home": "¡Tu línea temporal principal está vacía! Seguí a más cuentas para llenarla. {suggestions}", + "empty_column.home.suggestions": "Mirá algunas sugerencias", + "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos mensaje, se mostrarán acá.", "empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.", "empty_column.mutes": "Todavía no silenciaste a ningún usuario.", - "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.", + "empty_column.notifications": "Todavía no tenés ninguna notificación. Cuando otras cuentas interactúen con vos, vas a ver la notificación acá.", "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente es causado por un complemento del navegador web o por herramientas de traducción automática.", @@ -174,9 +176,12 @@ "error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", + "follow_recommendations.done": "Listo", + "follow_recommendations.heading": "¡Seguí cuentas cuyos mensajes te gustaría ver! Acá tenés algunas sugerencias.", + "follow_recommendations.lead": "Los mensajes de las cuentas que seguís aparecerán en orden cronológico en la columna \"Inicio\". No tengás miedo de meter la pata, ¡podés dejar de seguir cuentas fácilmente en cualquier momento!", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rechazar", - "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no está bloqueada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.", + "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.", "generic.saved": "Guardado", "getting_started.developers": "Desarrolladores", "getting_started.directory": "Directorio de perfiles", @@ -196,64 +201,47 @@ "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", "home.column_settings.basic": "Básico", - "home.column_settings.show_reblogs": "Mostrar retoots", + "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", "home.show_announcements": "Mostrar anuncios", "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}}", - "introduction.federation.action": "Siguiente", - "introduction.federation.federated.headline": "Federada", - "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.", - "introduction.federation.home.headline": "Principal", - "introduction.federation.home.text": "Los toots de las cuentas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los toots públicos de las cuentas en el mismo servidor aparecerán en la línea temporal local.", - "introduction.interactions.action": "¡Terminar tutorial!", - "introduction.interactions.favourite.headline": "Favoritos", - "introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.", - "introduction.interactions.reblog.headline": "Retootear", - "introduction.interactions.reblog.text": "Podés compartir los toots de otras cuentas con tus seguidores retooteando los mismos.", - "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras cuentas, que se encadenarán juntos en una conversación.", - "introduction.welcome.action": "¡Dale!", - "introduction.welcome.headline": "Primeros pasos", - "introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.", - "keyboard_shortcuts.back": "para volver", - "keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados", - "keyboard_shortcuts.boost": "para retootear", - "keyboard_shortcuts.column": "para enfocar un toot en una de las columnas", - "keyboard_shortcuts.compose": "para enfocar el área de texto de redacción", + "keyboard_shortcuts.back": "Volver", + "keyboard_shortcuts.blocked": "Abrir lista de usuarios bloqueados", + "keyboard_shortcuts.boost": "Adherir al mensaje", + "keyboard_shortcuts.column": "Enfocar columna", + "keyboard_shortcuts.compose": "Enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", - "keyboard_shortcuts.direct": "para abrir columna de mensajes directos", - "keyboard_shortcuts.down": "para bajar en la lista", - "keyboard_shortcuts.enter": "para abrir el toot", - "keyboard_shortcuts.favourite": "para marcar como favorito", - "keyboard_shortcuts.favourites": "para abrir la lista de favoritos", - "keyboard_shortcuts.federated": "para abrir la línea temporal federada", + "keyboard_shortcuts.direct": "Abrir columna de mensajes directos", + "keyboard_shortcuts.down": "Bajar en la lista", + "keyboard_shortcuts.enter": "Abrir mensaje", + "keyboard_shortcuts.favourite": "Marcar mensaje como favorito", + "keyboard_shortcuts.favourites": "Abrir lista de favoritos", + "keyboard_shortcuts.federated": "Abrir línea temporal federada", "keyboard_shortcuts.heading": "Atajos de teclado", - "keyboard_shortcuts.home": "para abrir la línea temporal principal", - "keyboard_shortcuts.hotkey": "Combinación", - "keyboard_shortcuts.legend": "para mostrar este texto", - "keyboard_shortcuts.local": "para abrir la línea temporal local", - "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "para abrir la lista de usuarios silenciados", - "keyboard_shortcuts.my_profile": "para abrir tu perfil", - "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir los archivos de medios", - "keyboard_shortcuts.pinned": "para abrir la lista de toots fijados", - "keyboard_shortcuts.profile": "para abrir el perfil del autor", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento", - "keyboard_shortcuts.search": "para enfocar la búsqueda", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo \"CW\"", - "keyboard_shortcuts.start": "para abrir la columna \"Introducción\"", - "keyboard_shortcuts.toggle_hidden": "para mostrar/ocultar el texto detrás de la advertencia de contenido", - "keyboard_shortcuts.toggle_sensitivity": "para mostrar/ocultar los medios", - "keyboard_shortcuts.toot": "para comenzar un toot nuevo", - "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda", - "keyboard_shortcuts.up": "para subir en la lista", + "keyboard_shortcuts.home": "Abrir línea temporal principal", + "keyboard_shortcuts.hotkey": "Atajo", + "keyboard_shortcuts.legend": "Mostrar este texto", + "keyboard_shortcuts.local": "Abrirlínea temporal local", + "keyboard_shortcuts.mention": "Mencionar al autor", + "keyboard_shortcuts.muted": "Abrir lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "Abrir tu perfil", + "keyboard_shortcuts.notifications": "Abrir columna de notificaciones", + "keyboard_shortcuts.open_media": "Abrir archivos de medios", + "keyboard_shortcuts.pinned": "Abrir lista de mensajes fijados", + "keyboard_shortcuts.profile": "Abrir perfil del autor", + "keyboard_shortcuts.reply": "Responder al mensaje", + "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "Enfocar barra de búsqueda", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar campo de advertencia de contenido (\"CW\")", + "keyboard_shortcuts.start": "Abrir columna \"Introducción\"", + "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de la advertencia de contenido (\"CW\")", + "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar medios", + "keyboard_shortcuts.toot": "Comenzar un mensaje nuevo", + "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda", + "keyboard_shortcuts.up": "Subir en la lista", "lightbox.close": "Cerrar", "lightbox.compress": "Comprimir cuadro de vista de imagen", "lightbox.expand": "Expandir cuadro de vista de imagen", @@ -265,7 +253,7 @@ "lists.edit": "Editar lista", "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", - "lists.new.title_placeholder": "Nuevo título de lista", + "lists.new.title_placeholder": "Título de nueva lista", "lists.replies_policy.followed": "Cualquier cuenta seguida", "lists.replies_policy.list": "Miembros de la lista", "lists.replies_policy.none": "Nadie", @@ -284,7 +272,7 @@ "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Línea temporal local", - "navigation_bar.compose": "Redactar un nuevo toot", + "navigation_bar.compose": "Redactar un nuevo mensaje", "navigation_bar.direct": "Mensajes directos", "navigation_bar.discover": "Descubrir", "navigation_bar.domain_blocks": "Dominios bloqueados", @@ -293,24 +281,24 @@ "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes de seguimiento", "navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores", - "navigation_bar.info": "Acerca de este servidor", + "navigation_bar.info": "Este servidor", "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Cerrar sesión", "navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Toots fijados", + "navigation_bar.pins": "Mensajes fijados", "navigation_bar.preferences": "Configuración", "navigation_bar.public_timeline": "Línea temporal federada", "navigation_bar.security": "Seguridad", - "notification.favourite": "{name} marcó tu toot como favorito", + "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.follow": "{name} te empezó a seguir", "notification.follow_request": "{name} solicitó seguirte", "notification.mention": "{name} te mencionó", "notification.own_poll": "Tu encuesta finalizó", "notification.poll": "Finalizó una encuesta en la que votaste", - "notification.reblog": "{name} retooteó tu estado", - "notification.status": "{name} acaba de tootear", + "notification.reblog": "{name} adhirió a tu mensaje", + "notification.status": "{name} acaba de enviar un mensaje", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -323,12 +311,13 @@ "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la encuesta:", "notifications.column_settings.push": "Notificaciones push", - "notifications.column_settings.reblog": "Retoots:", + "notifications.column_settings.reblog": "Adhesiones:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", - "notifications.column_settings.status": "Nuevos toots:", + "notifications.column_settings.status": "Nuevos mensajes:", + "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas", "notifications.filter.all": "Todas", - "notifications.filter.boosts": "Retoots", + "notifications.filter.boosts": "Adhesiones", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", @@ -350,13 +339,13 @@ "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Votaste esta opción", - "poll_button.add_poll": "Agregar una encuesta", + "poll_button.add_poll": "Agregar encuesta", "poll_button.remove_poll": "Quitar encuesta", - "privacy.change": "Configurar privacidad de toot", - "privacy.direct.long": "Visible sólo a los usuarios mencionados", + "privacy.change": "Configurar privacidad del mensaje", + "privacy.direct.long": "Visible sólo para los usuarios mencionados", "privacy.direct.short": "Directo", - "privacy.private.long": "Visible sólo a los seguidores", - "privacy.private.short": "Sólo a seguidores", + "privacy.private.long": "Visible sólo para los seguidores", + "privacy.private.short": "Sólo para seguidores", "privacy.public.long": "Visible para todos, mostrado en las líneas temporales públicas", "privacy.public.short": "Público", "privacy.unlisted.long": "Visible para todos, pero no en las líneas temporales públicas", @@ -366,39 +355,39 @@ "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "recién", + "relative_time.just_now": "ahora", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hoy", "reply_indicator.cancel": "Cancelar", "report.forward": "Reenviar a {target}", "report.forward_hint": "La cuenta es de otro servidor. ¿Querés enviar una copia anonimizada del informe también ahí?", - "report.hint": "La denuncia se enviará a los moderadores de tu servidor. Podés proporcionar una explicación de por qué estás denunciando esta cuenta, a continuación:", + "report.hint": "La denuncia se enviará a los moderadores de tu servidor. A continuación, podés proporcionar una explicación de por qué estás denunciando esta cuenta:", "report.placeholder": "Comentarios adicionales", "report.submit": "Enviar", "report.target": "Denunciando a {target}", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los toots que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.", + "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los mensajes que escribiste, los marcados como favoritos, los adheridos o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "mensaje", "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.", + "search_results.statuses": "Mensajes", + "search_results.statuses_fts_disabled": "No se pueden buscar mensajes por contenido en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este toot en la interface de moderación", + "status.admin_status": "Abrir este mensaje en la interface de moderación", "status.block": "Bloquear a @{name}", "status.bookmark": "Marcar", - "status.cancel_reblog_private": "Quitar retoot", - "status.cannot_reblog": "No se puede retootear este toot", - "status.copy": "Copiar enlace al toot", + "status.cancel_reblog_private": "Quitar adhesión", + "status.cannot_reblog": "No se puede adherir a este mensaje", + "status.copy": "Copiar enlace al mensaje", "status.delete": "Eliminar", "status.detailed_status": "Vista de conversación detallada", - "status.direct": "Mensaje directo a @{name}", + "status.direct": "Mensaje directo para @{name}", "status.embed": "Insertar", "status.favourite": "Marcar como favorito", "status.filtered": "Filtrado", @@ -408,15 +397,15 @@ "status.more": "Más", "status.mute": "Silenciar a @{name}", "status.mute_conversation": "Silenciar conversación", - "status.open": "Expandir este toot", + "status.open": "Expandir este mensaje", "status.pin": "Fijar en el perfil", - "status.pinned": "Toot fijado", + "status.pinned": "Mensaje fijado", "status.read_more": "Leé más", - "status.reblog": "Retootear", - "status.reblog_private": "Retootear a la audiencia original", - "status.reblogged_by": "{name} retooteó", - "status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.", - "status.redraft": "Eliminar toot original y editarlo", + "status.reblog": "Adherir", + "status.reblog_private": "Adherir a la audiencia original", + "status.reblogged_by": "{name} adhirió", + "status.reblogs.empty": "Todavía nadie adhirió a este mensaje. Cuando alguien lo haga, se mostrará acá.", + "status.redraft": "Eliminar mensaje original y editarlo", "status.remove_bookmark": "Quitar marcador", "status.reply": "Responder", "status.replyAll": "Responder al hilo", @@ -443,10 +432,10 @@ "time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}", "time_remaining.moments": "Momentos restantes", "time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}", - "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.", - "timeline_hint.resources.followers": "Seguidores", - "timeline_hint.resources.follows": "Siguiendo", - "timeline_hint.resources.statuses": "Toots antiguos", + "timeline_hint.remote_resource_not_displayed": "{resource} desde otros servidores no se muestran.", + "timeline_hint.resources.followers": "Tus seguidores", + "timeline_hint.resources.follows": "Las cuentas que seguís", + "timeline_hint.resources.statuses": "Mensajes más antiguos", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.", @@ -454,7 +443,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}mil", "upload_area.title": "Para subir, arrastrá y soltá", - "upload_button.label": "Agregá imágenes o un archivo de audio o video", + "upload_button.label": "Agregá imágenes, o un archivo de audio o video", "upload_error.limit": "Se excedió el límite de subida de archivos.", "upload_error.poll": "No se permite la subida de archivos en encuestas.", "upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas", @@ -475,12 +464,12 @@ "upload_progress.label": "Subiendo...", "video.close": "Cerrar video", "video.download": "Descargar archivo", - "video.exit_fullscreen": "Salir de pantalla completa", + "video.exit_fullscreen": "Salir de la pantalla completa", "video.expand": "Expandir video", "video.fullscreen": "Pantalla completa", "video.hide": "Ocultar video", - "video.mute": "Silenciar sonido", + "video.mute": "Silenciar", "video.pause": "Pausar", "video.play": "Reproducir", - "video.unmute": "Dejar de silenciar sonido" + "video.unmute": "Dejar de silenciar" } diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json new file mode 100644 index 000000000..2551cdaee --- /dev/null +++ b/app/javascript/mastodon/locales/es-MX.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Agregar o eliminar de listas", + "account.badges.bot": "Bot", + "account.badges.group": "Grupo", + "account.block": "Bloquear a @{name}", + "account.block_domain": "Ocultar todo de {domain}", + "account.blocked": "Bloqueado", + "account.browse_more_on_origin_server": "Ver más en el perfil original", + "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", + "account.direct": "Mensaje directo a @{name}", + "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", + "account.domain_blocked": "Dominio oculto", + "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notificarme cuando @{name} publique algo", + "account.endorse": "Mostrar en perfil", + "account.follow": "Seguir", + "account.followers": "Seguidores", + "account.followers.empty": "Todavía nadie sigue a este usuario.", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", + "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", + "account.follows.empty": "Este usuario todavía no sigue a nadie.", + "account.follows_you": "Te sigue", + "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Última actividad", + "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}", + "account.moved_to": "{name} se ha mudado a:", + "account.mute": "Silenciar a @{name}", + "account.mute_notifications": "Silenciar notificaciones de @{name}", + "account.muted": "Silenciado", + "account.never_active": "Nunca", + "account.posts": "Toots", + "account.posts_with_replies": "Toots con respuestas", + "account.report": "Reportar a @{name}", + "account.requested": "Esperando aprobación", + "account.share": "Compartir el perfil de @{name}", + "account.show_reblogs": "Mostrar retoots de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Desbloquear a @{name}", + "account.unblock_domain": "Mostrar a {domain}", + "account.unendorse": "No mostrar en el perfil", + "account.unfollow": "Dejar de seguir", + "account.unmute": "Dejar de silenciar a @{name}", + "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", + "account_note.placeholder": "Clic para añadir nota", + "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", + "alert.rate_limited.title": "Tarifa limitada", + "alert.unexpected.message": "Hubo un error inesperado.", + "alert.unexpected.title": "¡Ups!", + "announcement.announcement": "Anuncio", + "autosuggest_hashtag.per_week": "{count} por semana", + "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", + "bundle_modal_error.close": "Cerrar", + "bundle_modal_error.message": "Algo salió mal al cargar este componente.", + "bundle_modal_error.retry": "Inténtalo de nuevo", + "column.blocks": "Usuarios bloqueados", + "column.bookmarks": "Marcadores", + "column.community": "Línea de tiempo local", + "column.direct": "Mensajes directos", + "column.directory": "Buscar perfiles", + "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": "Toots fijados", + "column.public": "Línea de tiempo federada", + "column_back_button.label": "Atrás", + "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", + "column_header.show_settings": "Mostrar ajustes", + "column_header.unpin": "Dejar de fijar", + "column_subheading.settings": "Ajustes", + "community.column_settings.local_only": "Solo local", + "community.column_settings.media_only": "Solo media", + "community.column_settings.remote_only": "Solo remoto", + "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.", + "compose_form.direct_message_warning_learn_more": "Aprender mas", + "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", + "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", + "compose_form.lock_disclaimer.lock": "bloqueado", + "compose_form.placeholder": "¿En qué estás pensando?", + "compose_form.poll.add_option": "Añadir una opción", + "compose_form.poll.duration": "Duración de la encuesta", + "compose_form.poll.option_placeholder": "Elección {number}", + "compose_form.poll.remove_option": "Eliminar esta opción", + "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", + "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", + "compose_form.publish": "Tootear", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Marcar multimedia como sensible", + "compose_form.sensitive.marked": "Material marcado como sensible", + "compose_form.sensitive.unmarked": "Material no marcado como sensible", + "compose_form.spoiler.marked": "Texto oculto tras la advertencia", + "compose_form.spoiler.unmarked": "Texto no oculto", + "compose_form.spoiler_placeholder": "Advertencia de contenido", + "confirmation_modal.cancel": "Cancelar", + "confirmations.block.block_and_report": "Bloquear y Reportar", + "confirmations.block.confirm": "Bloquear", + "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?", + "confirmations.delete.confirm": "Eliminar", + "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", + "confirmations.delete_list.confirm": "Eliminar", + "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", + "confirmations.domain_block.confirm": "Ocultar dominio entero", + "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", + "confirmations.logout.confirm": "Cerrar sesión", + "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?", + "confirmations.mute.confirm": "Silenciar", + "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", + "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", + "confirmations.redraft.confirm": "Borrar y volver a borrador", + "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", + "confirmations.unfollow.confirm": "Dejar de seguir", + "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", + "conversation.delete": "Borrar conversación", + "conversation.mark_as_read": "Marcar como leído", + "conversation.open": "Ver conversación", + "conversation.with": "Con {names}", + "directory.federated": "Desde el fediverso conocido", + "directory.local": "Sólo de {domain}", + "directory.new_arrivals": "Recién llegados", + "directory.recently_active": "Recientemente activo", + "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", + "embed.preview": "Así es como se verá:", + "emoji_button.activity": "Actividad", + "emoji_button.custom": "Personalizado", + "emoji_button.flags": "Marcas", + "emoji_button.food": "Comida y bebida", + "emoji_button.label": "Insertar emoji", + "emoji_button.nature": "Naturaleza", + "emoji_button.not_found": "No hay emojis!! ¯\\_(ツ)_/¯", + "emoji_button.objects": "Objetos", + "emoji_button.people": "Gente", + "emoji_button.recent": "Usados frecuentemente", + "emoji_button.search": "Buscar…", + "emoji_button.search_results": "Resultados de búsqueda", + "emoji_button.symbols": "Símbolos", + "emoji_button.travel": "Viajes y lugares", + "empty_column.account_suspended": "Cuenta suspendida", + "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_unavailable": "Perfil no disponible", + "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", + "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.", + "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", + "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", + "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", + "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.", + "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", + "empty_column.hashtag": "No hay nada en este hashtag aún.", + "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", + "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", + "empty_column.mutes": "Aún no has silenciado a ningún usuario.", + "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", + "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", + "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", + "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", + "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", + "errors.unexpected_crash.report_issue": "Informar de un problema/error", + "follow_recommendations.done": "Hecho", + "follow_recommendations.heading": "¡Sigue a la gente cuyas publicaciones te gustaría ver! Aquí tienes algunas sugerencias.", + "follow_recommendations.lead": "Los mensajes de las personas que sigues aparecerán en orden cronológico en el Inicio. No tengas miedo de cometer errores, ¡puedes dejar de seguir a la gente fácilmente en cualquier momento!", + "follow_request.authorize": "Autorizar", + "follow_request.reject": "Rechazar", + "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", + "generic.saved": "Guardado", + "getting_started.developers": "Desarrolladores", + "getting_started.directory": "Directorio de perfil", + "getting_started.documentation": "Documentación", + "getting_started.heading": "Primeros pasos", + "getting_started.invite": "Invitar usuarios", + "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", + "getting_started.security": "Seguridad", + "getting_started.terms": "Términos de servicio", + "hashtag.column_header.tag_mode.all": "y {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", + "hashtag.column_settings.select.placeholder": "Introduzca hashtags…", + "hashtag.column_settings.tag_mode.all": "Cualquiera de estos", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", + "hashtag.column_settings.tag_mode.none": "Ninguno de estos", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Básico", + "home.column_settings.show_reblogs": "Mostrar retoots", + "home.column_settings.show_replies": "Mostrar respuestas", + "home.hide_announcements": "Ocultar anuncios", + "home.show_announcements": "Mostrar anuncios", + "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}}", + "keyboard_shortcuts.back": "volver atrás", + "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.boost": "retootear", + "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", + "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", + "keyboard_shortcuts.description": "Descripción", + "keyboard_shortcuts.direct": "abrir la columna de mensajes directos", + "keyboard_shortcuts.down": "mover hacia abajo en la lista", + "keyboard_shortcuts.enter": "abrir estado", + "keyboard_shortcuts.favourite": "añadir a favoritos", + "keyboard_shortcuts.favourites": "abrir la lista de favoritos", + "keyboard_shortcuts.federated": "abrir el timeline federado", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "abrir el timeline propio", + "keyboard_shortcuts.hotkey": "Tecla caliente", + "keyboard_shortcuts.legend": "para mostrar esta leyenda", + "keyboard_shortcuts.local": "abrir el timeline local", + "keyboard_shortcuts.mention": "para mencionar al autor", + "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "abrir tu perfil", + "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", + "keyboard_shortcuts.open_media": "para abrir archivos multimedia", + "keyboard_shortcuts.pinned": "abrir la lista de toots destacados", + "keyboard_shortcuts.profile": "abrir el perfil del autor", + "keyboard_shortcuts.reply": "para responder", + "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", + "keyboard_shortcuts.search": "para poner el foco en la búsqueda", + "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", + "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", + "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", + "keyboard_shortcuts.toot": "para comenzar un nuevo toot", + "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", + "keyboard_shortcuts.up": "para ir hacia arriba en la lista", + "lightbox.close": "Cerrar", + "lightbox.compress": "Comprimir cuadro de visualización de imagen", + "lightbox.expand": "Expandir cuadro de visualización de imagen", + "lightbox.next": "Siguiente", + "lightbox.previous": "Anterior", + "lists.account.add": "Añadir a lista", + "lists.account.remove": "Quitar de lista", + "lists.delete": "Borrar lista", + "lists.edit": "Editar lista", + "lists.edit.submit": "Cambiar título", + "lists.new.create": "Añadir lista", + "lists.new.title_placeholder": "Título de la nueva lista", + "lists.replies_policy.followed": "Cualquier usuario seguido", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Nadie", + "lists.replies_policy.title": "Mostrar respuestas a:", + "lists.search": "Buscar entre la gente a la que sigues", + "lists.subheading": "Tus listas", + "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", + "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.duration": "Duración", + "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", + "mute_modal.indefinite": "Indefinida", + "navigation_bar.apps": "Aplicaciones móviles", + "navigation_bar.blocks": "Usuarios bloqueados", + "navigation_bar.bookmarks": "Marcadores", + "navigation_bar.community_timeline": "Historia local", + "navigation_bar.compose": "Escribir un nuevo toot", + "navigation_bar.direct": "Mensajes directos", + "navigation_bar.discover": "Descubrir", + "navigation_bar.domain_blocks": "Dominios ocultos", + "navigation_bar.edit_profile": "Editar perfil", + "navigation_bar.favourites": "Favoritos", + "navigation_bar.filters": "Palabras silenciadas", + "navigation_bar.follow_requests": "Solicitudes para seguirte", + "navigation_bar.follows_and_followers": "Siguiendo y seguidores", + "navigation_bar.info": "Información adicional", + "navigation_bar.keyboard_shortcuts": "Atajos", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Cerrar sesión", + "navigation_bar.mutes": "Usuarios silenciados", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Toots fijados", + "navigation_bar.preferences": "Preferencias", + "navigation_bar.public_timeline": "Historia federada", + "navigation_bar.security": "Seguridad", + "notification.favourite": "{name} marcó tu estado como favorito", + "notification.follow": "{name} te empezó a seguir", + "notification.follow_request": "{name} ha solicitado seguirte", + "notification.mention": "{name} te ha mencionado", + "notification.own_poll": "Tu encuesta ha terminado", + "notification.poll": "Una encuesta en la que has votado ha terminado", + "notification.reblog": "{name} ha retooteado tu estado", + "notification.status": "{name} acaba de publicar", + "notifications.clear": "Limpiar notificaciones", + "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", + "notifications.column_settings.alert": "Notificaciones de escritorio", + "notifications.column_settings.favourite": "Favoritos:", + "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", + "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", + "notifications.column_settings.filter_bar.show": "Mostrar", + "notifications.column_settings.follow": "Nuevos seguidores:", + "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.mention": "Menciones:", + "notifications.column_settings.poll": "Resultados de la votación:", + "notifications.column_settings.push": "Notificaciones push", + "notifications.column_settings.reblog": "Retoots:", + "notifications.column_settings.show": "Mostrar en columna", + "notifications.column_settings.sound": "Reproducir sonido", + "notifications.column_settings.status": "Nuevos toots:", + "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas", + "notifications.filter.all": "Todos", + "notifications.filter.boosts": "Retoots", + "notifications.filter.favourites": "Favoritos", + "notifications.filter.follows": "Seguidores", + "notifications.filter.mentions": "Menciones", + "notifications.filter.polls": "Resultados de la votación", + "notifications.filter.statuses": "Actualizaciones de gente a la que sigues", + "notifications.grant_permission": "Conceder permiso.", + "notifications.group": "{count} notificaciones", + "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", + "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", + "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", + "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", + "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", + "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", + "notifications_permission_banner.title": "Nunca te pierdas nada", + "picture_in_picture.restore": "Restaurar", + "poll.closed": "Cerrada", + "poll.refresh": "Actualizar", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", + "poll.vote": "Votar", + "poll.voted": "Has votado a favor de esta respuesta", + "poll_button.add_poll": "Añadir una encuesta", + "poll_button.remove_poll": "Eliminar encuesta", + "privacy.change": "Ajustar privacidad", + "privacy.direct.long": "Sólo mostrar a los usuarios mencionados", + "privacy.direct.short": "Directo", + "privacy.private.long": "Sólo mostrar a seguidores", + "privacy.private.short": "Privado", + "privacy.public.long": "Mostrar en la historia federada", + "privacy.public.short": "Público", + "privacy.unlisted.long": "No mostrar en la historia federada", + "privacy.unlisted.short": "No listado", + "refresh": "Actualizar", + "regeneration_indicator.label": "Cargando…", + "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "ahora", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "hoy", + "reply_indicator.cancel": "Cancelar", + "report.forward": "Reenviar a {target}", + "report.forward_hint": "Esta cuenta es de otro servidor. ¿Enviar una copia anonimizada del informe allí también?", + "report.hint": "El informe se enviará a los moderadores de tu instancia. Puedes proporcionar una explicación de por qué informas sobre esta cuenta a continuación:", + "report.placeholder": "Comentarios adicionales", + "report.submit": "Publicar", + "report.target": "Reportando", + "search.placeholder": "Buscar", + "search_popout.search_format": "Formato de búsqueda avanzada", + "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", + "search_popout.tips.hashtag": "etiqueta", + "search_popout.tips.status": "status", + "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", + "search_popout.tips.user": "usuario", + "search_results.accounts": "Gente", + "search_results.hashtags": "Etiquetas", + "search_results.statuses": "Toots", + "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", + "status.block": "Bloquear a @{name}", + "status.bookmark": "Añadir marcador", + "status.cancel_reblog_private": "Eliminar retoot", + "status.cannot_reblog": "Este toot no puede retootearse", + "status.copy": "Copiar enlace al estado", + "status.delete": "Borrar", + "status.detailed_status": "Vista de conversación detallada", + "status.direct": "Mensaje directo a @{name}", + "status.embed": "Incrustado", + "status.favourite": "Favorito", + "status.filtered": "Filtrado", + "status.load_more": "Cargar más", + "status.media_hidden": "Contenido multimedia oculto", + "status.mention": "Mencionar", + "status.more": "Más", + "status.mute": "Silenciar @{name}", + "status.mute_conversation": "Silenciar conversación", + "status.open": "Expandir estado", + "status.pin": "Fijar", + "status.pinned": "Toot fijado", + "status.read_more": "Leer más", + "status.reblog": "Retootear", + "status.reblog_private": "Implusar a la audiencia original", + "status.reblogged_by": "Retooteado por {name}", + "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", + "status.redraft": "Borrar y volver a borrador", + "status.remove_bookmark": "Eliminar marcador", + "status.reply": "Responder", + "status.replyAll": "Responder al hilo", + "status.report": "Reportar", + "status.sensitive_warning": "Contenido sensible", + "status.share": "Compartir", + "status.show_less": "Mostrar menos", + "status.show_less_all": "Mostrar menos para todo", + "status.show_more": "Mostrar más", + "status.show_more_all": "Mostrar más para todo", + "status.show_thread": "Mostrar hilo", + "status.uncached_media_warning": "No disponible", + "status.unmute_conversation": "Dejar de silenciar conversación", + "status.unpin": "Dejar de fijar", + "suggestions.dismiss": "Descartar sugerencia", + "suggestions.header": "Es posible que te interese…", + "tabs_bar.federated_timeline": "Federado", + "tabs_bar.home": "Inicio", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notificaciones", + "tabs_bar.search": "Buscar", + "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}", + "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", + "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", + "time_remaining.moments": "Momentos restantes", + "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", + "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.", + "timeline_hint.resources.followers": "Seguidores", + "timeline_hint.resources.follows": "Seguidos", + "timeline_hint.resources.statuses": "Toots más antiguos", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", + "trends.trending_now": "Tendencia ahora", + "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "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.audio_description": "Describir para personas con problemas auditivos", + "upload_form.description": "Describir para los usuarios con dificultad visual", + "upload_form.edit": "Editar", + "upload_form.thumbnail": "Cambiar miniatura", + "upload_form.undo": "Borrar", + "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", + "upload_modal.analyzing_picture": "Analizando imagen…", + "upload_modal.apply": "Aplicar", + "upload_modal.choose_image": "Elegir imagen", + "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso", + "upload_modal.detect_text": "Detectar texto de la imagen", + "upload_modal.edit_media": "Editar multimedia", + "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preparing_ocr": "Preparando OCR…", + "upload_modal.preview_label": "Vista previa ({ratio})", + "upload_progress.label": "Subiendo…", + "video.close": "Cerrar video", + "video.download": "Descargar archivo", + "video.exit_fullscreen": "Salir de pantalla completa", + "video.expand": "Expandir vídeo", + "video.fullscreen": "Pantalla completa", + "video.hide": "Ocultar vídeo", + "video.mute": "Silenciar sonido", + "video.pause": "Pausar", + "video.play": "Reproducir", + "video.unmute": "Dejar de silenciar sonido" +} diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index e769d7a48..7d7af8b44 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -22,6 +22,7 @@ "account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.joined": "Se unió el {date}", "account.last_status": "Última actividad", "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.", @@ -32,13 +33,13 @@ "account.mute_notifications": "Silenciar notificaciones de @{name}", "account.muted": "Silenciado", "account.never_active": "Nunca", - "account.posts": "Toots", - "account.posts_with_replies": "Toots con respuestas", + "account.posts": "Publicaciones", + "account.posts_with_replies": "Publicaciones y respuestas", "account.report": "Reportar a @{name}", "account.requested": "Esperando aprobación", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar retoots de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Mostrar a {domain}", "account.unendorse": "No mostrar en el perfil", @@ -71,7 +72,7 @@ "column.lists": "Listas", "column.mutes": "Usuarios silenciados", "column.notifications": "Notificaciones", - "column.pins": "Toots fijados", + "column.pins": "Publicaciones fijadas", "column.public": "Línea de tiempo federada", "column_back_button.label": "Atrás", "column_header.hide_settings": "Ocultar configuración", @@ -84,10 +85,10 @@ "community.column_settings.local_only": "Solo local", "community.column_settings.media_only": "Solo media", "community.column_settings.remote_only": "Solo remoto", - "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.", + "compose_form.direct_message_warning": "Esta nueva publicación solo será enviada a los usuarios mencionados.", "compose_form.direct_message_warning_learn_more": "Aprender mas", - "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", - "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", + "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.", + "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.placeholder": "¿En qué estás pensando?", "compose_form.poll.add_option": "Añadir una opción", @@ -109,7 +110,7 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", + "confirmations.delete.message": "¿Estás seguro de que quieres borrar esta publicación?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", "confirmations.domain_block.confirm": "Ocultar dominio entero", @@ -120,7 +121,7 @@ "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", "confirmations.redraft.confirm": "Borrar y volver a borrador", - "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar esta publicación y convertirla en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", "confirmations.unfollow.confirm": "Dejar de seguir", @@ -133,7 +134,7 @@ "directory.local": "Sólo de {domain}", "directory.new_arrivals": "Recién llegados", "directory.recently_active": "Recientemente activo", - "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", + "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.", "embed.preview": "Así es como se verá:", "emoji_button.activity": "Actividad", "emoji_button.custom": "Personalizado", @@ -150,19 +151,20 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", "empty_column.account_suspended": "Cuenta suspendida", - "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_timeline": "¡No hay publicaciones aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", - "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.", + "empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", - "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.", - "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.", + "empty_column.favourited_statuses": "Aún no tienes publicaciones favoritas. Cuando marques una como favorita, aparecerá aquí.", + "empty_column.favourites": "Nadie ha marcado esta publicación como favorita. Cuando alguien lo haga, aparecerá aquí.", + "empty_column.follow_recommendations": "Parece que no se ha podido generar ninguna sugerencia para ti. Puedes probar a buscar a gente que quizá conozcas o explorar los hashtags que están en tendencia.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", - "empty_column.home.public_timeline": "la línea de tiempo pública", + "empty_column.home.suggestions": "Ver algunas sugerencias", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", + "follow_recommendations.done": "Hecho", + "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.", + "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rechazar", "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Siguiente", - "introduction.federation.federated.headline": "Federado", - "introduction.federation.federated.text": "Los mensajes públicos de otros servidores del fediverso aparecerán en la cronología federada.", - "introduction.federation.home.headline": "Inicio", - "introduction.federation.home.text": "Los posts de personas que sigues aparecerán en tu cronología. ¡Puedes seguir a cualquiera en cualquier servidor!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los posts públicos de personas en el mismo servidor que aparecerán en la cronología local.", - "introduction.interactions.action": "¡Terminar tutorial!", - "introduction.interactions.favourite.headline": "Favorito", - "introduction.interactions.favourite.text": "Puedes guardar un toot para más tarde, y hacer saber al autor que te gustó, dándole a favorito.", - "introduction.interactions.reblog.headline": "Retootear", - "introduction.interactions.reblog.text": "Puedes compartir los toots de otras personas con tus seguidores retooteando los mismos.", - "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Puedes responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.", - "introduction.welcome.action": "¡Vamos!", - "introduction.welcome.headline": "Primeros pasos", - "introduction.welcome.text": "¡Bienvenido al fediverso! En unos momentos, podrás transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial, alberga tu perfil, así que recuerda su nombre.", "keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", "keyboard_shortcuts.boost": "retootear", @@ -242,7 +230,7 @@ "keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.open_media": "para abrir archivos multimedia", - "keyboard_shortcuts.pinned": "abrir la lista de toots destacados", + "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas", "keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", @@ -251,7 +239,7 @@ "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", - "keyboard_shortcuts.toot": "para comenzar un nuevo toot", + "keyboard_shortcuts.toot": "Comienza una nueva publicación", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", @@ -284,7 +272,7 @@ "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Historia local", - "navigation_bar.compose": "Escribir un nuevo toot", + "navigation_bar.compose": "Escribir nueva publicación", "navigation_bar.direct": "Mensajes directos", "navigation_bar.discover": "Descubrir", "navigation_bar.domain_blocks": "Dominios ocultos", @@ -299,7 +287,7 @@ "navigation_bar.logout": "Cerrar sesión", "navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Toots fijados", + "navigation_bar.pins": "Publicaciones fijadas", "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Historia federada", "navigation_bar.security": "Seguridad", @@ -309,7 +297,7 @@ "notification.mention": "{name} te ha mencionado", "notification.own_poll": "Tu encuesta ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado", - "notification.reblog": "{name} ha retooteado tu estado", + "notification.reblog": "{name} ha retooteado tu publicación", "notification.status": "{name} acaba de publicar", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", @@ -326,7 +314,8 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", - "notifications.column_settings.status": "Nuevos toots:", + "notifications.column_settings.status": "Nuevas publicaciones:", + "notifications.column_settings.unread_markers.category": "Indicadores de notificaciones no leídas", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", @@ -379,22 +368,22 @@ "report.target": "Reportando", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", + "search_popout.tips.full_text": "Las búsquedas de texto recuperan publicaciones que has escrito, marcado como favoritas, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "status", "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", + "search_results.statuses": "Publicaciones", + "search_results.statuses_fts_disabled": "Buscar publicaciones 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", "status.block": "Bloquear a @{name}", "status.bookmark": "Añadir marcador", - "status.cancel_reblog_private": "Eliminar retoot", - "status.cannot_reblog": "Este toot no puede retootearse", + "status.cancel_reblog_private": "Deshacer retoot", + "status.cannot_reblog": "Esta publicación no puede retootearse", "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", "status.detailed_status": "Vista de conversación detallada", @@ -410,7 +399,7 @@ "status.mute_conversation": "Silenciar conversación", "status.open": "Expandir estado", "status.pin": "Fijar", - "status.pinned": "Toot fijado", + "status.pinned": "Publicación fijada", "status.read_more": "Leer más", "status.reblog": "Retootear", "status.reblog_private": "Implusar a la audiencia original", @@ -446,7 +435,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.", "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Seguidos", - "timeline_hint.resources.statuses": "Toots más antiguos", + "timeline_hint.resources.statuses": "Publicaciones más antiguas", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 54f4159fe..dba0e3b20 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -22,6 +22,7 @@ "account.follows.empty": "See kasutaja ei jälgi veel kedagi.", "account.follows_you": "Jälgib Teid", "account.hide_reblogs": "Peida upitused kasutajalt @{name}", + "account.joined": "Joined {date}", "account.last_status": "Viimati aktiivne", "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}", "account.locked_info": "Selle konto privaatsussätteks on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.", "empty_column.favourited_statuses": "Teil pole veel lemmikuid tuute. Kui märgite mõne, näete neid siin.", "empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Teil pole veel ühtegi jälgimise taotlust. Kui saate mõne, näete neid siin.", "empty_column.hashtag": "Selle sildiga pole veel midagi.", "empty_column.home": "Teie kodu ajajoon on tühi! Külastage {public} või kasutage otsingut alustamaks ja kohtamaks teisi kasutajaid.", - "empty_column.home.public_timeline": "avalik ajajoon", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.", "empty_column.lists": "Teil ei ole veel ühtegi nimekirja. Kui loote mõne, näete neid siin.", "empty_column.mutes": "Te pole veel ühtegi kasutajat vaigistanud.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autoriseeri", "follow_request.reject": "Hülga", "follow_requests.unlocked_explanation": "Kuigi Teie konto pole lukustatud, soovitab {domain} personal siiski manuaalselt üle vaadata jälgimistaotlused nendelt kontodelt.", @@ -203,23 +208,6 @@ "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": "Inimeste, keda jälgite, postitused kuvatakse Teie koduajajoonel. Saate 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": "Saate tuuti salvestada ja anda autorile teada, et see meeldis Teile, märkides selle lemmikuks.", - "introduction.interactions.reblog.headline": "Upita", - "introduction.interactions.reblog.text": "Saate jagada teiste inimeste tuute oma jälgijatega neid upitades.", - "introduction.interactions.reply.headline": "Vasta", - "introduction.interactions.reply.text": "Saate 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 saate avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—see majutab sinu profiili. Seega jäta selle nimi meelde.", "keyboard_shortcuts.back": "tagasiminekuks", "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut", "keyboard_shortcuts.boost": "upitamiseks", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Kuva tulbas", "notifications.column_settings.sound": "Mängi heli", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Kõik", "notifications.filter.boosts": "Upitused", "notifications.filter.favourites": "Lemmikud", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 80119dc00..8970c7940 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -1,27 +1,28 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Oharra", "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik", "account.badges.bot": "Bot-a", "account.badges.group": "Taldea", "account.block": "Blokeatu @{name}", "account.block_domain": "Ezkutatu {domain} domeinuko guztia", "account.blocked": "Blokeatuta", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Arakatu gehiago jatorrizko profilean", "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzailearen bidalketetan", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Jakinarazi @{name} erabiltzaileak bidalketak egitean", "account.endorse": "Nabarmendu profilean", "account.follow": "Jarraitu", "account.followers": "Jarraitzaileak", "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {Jarraitzaile {counter}} other {{counter} jarraitzaile}}", + "account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", + "account.joined": "{date}(e)an elkartua", "account.last_status": "Azkenekoz aktiboa", "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}", "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.", @@ -32,13 +33,13 @@ "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak", "account.muted": "Mutututa", "account.never_active": "Inoiz ez", - "account.posts": "Toot", - "account.posts_with_replies": "Tootak eta erantzunak", + "account.posts": "Bidalketa", + "account.posts_with_replies": "Bidalketak eta erantzunak", "account.report": "Salatu @{name}", "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko", "account.share": "@{name}(e)ren profila elkarbanatu", "account.show_reblogs": "Erakutsi @{name}(r)en bultzadak", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {Bidalketa {counter}} other {{counter} bidalketa}}", "account.unblock": "Desblokeatu @{name}", "account.unblock_domain": "Berriz erakutsi {domain}", "account.unendorse": "Ez nabarmendu profilean", @@ -71,7 +72,7 @@ "column.lists": "Zerrendak", "column.mutes": "Mutututako erabiltzaileak", "column.notifications": "Jakinarazpenak", - "column.pins": "Finkatutako tootak", + "column.pins": "Finkatutako bidalketak", "column.public": "Federatutako denbora-lerroa", "column_back_button.label": "Atzera", "column_header.hide_settings": "Ezkutatu ezarpenak", @@ -84,10 +85,10 @@ "community.column_settings.local_only": "Lokala soilik", "community.column_settings.media_only": "Multimedia besterik ez", "community.column_settings.remote_only": "Urrunekoa soilik", - "compose_form.direct_message_warning": "Toot hau aipatutako erabiltzaileei besterik ez zaie bidaliko.", + "compose_form.direct_message_warning": "Bidalketa hau aipatutako erabiltzaileei besterik ez zaie bidaliko.", "compose_form.direct_message_warning_learn_more": "Ikasi gehiago", - "compose_form.hashtag_warning": "Toot hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan toot publikoak besterik ez dira agertzen.", - "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren mezuak ikusteko.", + "compose_form.hashtag_warning": "Bidalketa hau ez da traoletan agertuko zerrendatu gabekoa baita. Traoletan bidalketa publikoak besterik ez dira agertzen.", + "compose_form.lock_disclaimer": "Zure kontua ez dago {locked}. Edonork jarraitu zaitzake zure jarraitzaileentzako soilik diren bidalketak ikusteko.", "compose_form.lock_disclaimer.lock": "giltzapetuta", "compose_form.placeholder": "Zer duzu buruan?", "compose_form.poll.add_option": "Gehitu aukera bat", @@ -109,7 +110,7 @@ "confirmations.block.confirm": "Blokeatu", "confirmations.block.message": "Ziur {name} blokeatu nahi duzula?", "confirmations.delete.confirm": "Ezabatu", - "confirmations.delete.message": "Ziur mezu hau ezabatu nahi duzula?", + "confirmations.delete.message": "Ziur bidalketa hau ezabatu nahi duzula?", "confirmations.delete_list.confirm": "Ezabatu", "confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?", "confirmations.domain_block.confirm": "Ezkutatu domeinu osoa", @@ -117,10 +118,10 @@ "confirmations.logout.confirm": "Amaitu saioa", "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?", "confirmations.mute.confirm": "Mututu", - "confirmations.mute.explanation": "Honek horko mezuak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure mezuak ikusi ahal izango dituzte eta zuri jarraitu.", + "confirmations.mute.explanation": "Honek horko bidalketak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure bidalketak ikusi ahal izango dituzte eta zuri jarraitu.", "confirmations.mute.message": "Ziur {name} mututu nahi duzula?", "confirmations.redraft.confirm": "Ezabatu eta berridatzi", - "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.", + "confirmations.redraft.message": "Ziur bidalketa hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.", "confirmations.reply.confirm": "Erantzun", "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?", "confirmations.unfollow.confirm": "Utzi jarraitzeari", @@ -133,7 +134,7 @@ "directory.local": "{domain} domeinukoak soilik", "directory.new_arrivals": "Iritsi berriak", "directory.recently_active": "Duela gutxi aktibo", - "embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.", + "embed.instructions": "Txertatu bidalketa hau zure webgunean beheko kodea kopiatuz.", "embed.preview": "Hau da izango duen itxura:", "emoji_button.activity": "Jarduera", "emoji_button.custom": "Pertsonalizatua", @@ -149,35 +150,39 @@ "emoji_button.search_results": "Bilaketaren emaitzak", "emoji_button.symbols": "Sinboloak", "emoji_button.travel": "Bidaiak eta tokiak", - "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "Ez dago tootik hemen!", + "empty_column.account_suspended": "Kanporatutako kontua", + "empty_column.account_timeline": "Ez dago bidalketarik hemen!", "empty_column.account_unavailable": "Profila ez dago eskuragarri", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", - "empty_column.bookmarked_statuses": "Oraindik ez dituzu toot laster-markatutarik. Bat laster-markatzerakoan, hemen agertuko da.", + "empty_column.bookmarked_statuses": "Oraindik ez dituzu bidalketa laster-markatutarik. Bat laster-markatzerakoan, hemen agertuko da.", "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!", "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.", "empty_column.domain_blocks": "Ez dago ezkutatutako domeinurik oraindik.", "empty_column.favourited_statuses": "Ez duzu gogokorik oraindik. Gogokoren bat duzunean hemen agertuko da.", - "empty_column.favourites": "Ez du inork gogokoetara gehitu toot hau oraindik. Inork egiten duenean, hemen agertuko dira.", + "empty_column.favourites": "Ez du inork gogokoetara gehitu bidalketa hau oraindik. Inork egiten duenean, hemen agertuko dira.", + "empty_column.follow_recommendations": "Dirudienez ezin izan da zuretzako proposamenik sortu. Bilaketa erabili dezakezu ezagutzen duzun jendea aurkitzeko edo traolen joerak arakatu.", "empty_column.follow_requests": "Ez duzu jarraitzeko eskaririk oraindik. Baten bat jasotzen duzunean, hemen agertuko da.", "empty_column.hashtag": "Ez dago ezer traola honetan oraindik.", "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.", - "empty_column.home.public_timeline": "denbora-lerro publikoa", - "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek mezu berriak argitaratzean, hemen agertuko dira.", + "empty_column.home.suggestions": "Ikusi proposamen batzuk", + "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek bidalketa berriak argitaratzean, hemen agertuko dira.", "empty_column.lists": "Ez duzu zerrendarik oraindik. Baten bat sortzen duzunean hemen agertuko da.", "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.", "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.", "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko", "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ezin izan da orria behar bezala bistaratu. Errore honen jatorria nabigatzailearen gehigarri batean edo itzulpen automatikoko tresnetan dago ziur aski.", "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Saiatu desgaitu eta orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", + "follow_recommendations.done": "Egina", + "follow_recommendations.heading": "Jarraitu jendea beren bidalketak ikusteko! Hemen dituzu iradokizun batzuk.", + "follow_recommendations.lead": "Jarraitzen duzun jendearen bidalketak ordena kronologikoan agertuko dira zure hasierako jarioan. Ez izan akatsak egiteko beldurrik, jendea jarraitzeari uztea erraza da!", "follow_request.authorize": "Baimendu", "follow_request.reject": "Ukatu", "follow_requests.unlocked_explanation": "Zure kontua blokeatuta ez badago ere, {domain} domeinuko arduradunek uste dute kontu hauetako jarraipen eskariak agian eskuz begiratu nahiko dituzula.", - "generic.saved": "Saved", + "generic.saved": "Gordea", "getting_started.developers": "Garatzaileak", "getting_started.directory": "Profil-direktorioa", "getting_started.documentation": "Dokumentazioa", @@ -203,33 +208,16 @@ "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}}", - "introduction.federation.action": "Hurrengoa", - "introduction.federation.federated.headline": "Federatua", - "introduction.federation.federated.text": "Fedibertsoko beste zerbitzarietako bidalketa publikoak federatutako denbora-lerroan agertuko dira.", - "introduction.federation.home.headline": "Hasiera", - "introduction.federation.home.text": "Jarraitzen dituzun horien mezuak zure hasierako jarioan agertuko dira. Edozein zerbitzariko edonor jarraitu dezakezu!", - "introduction.federation.local.headline": "Lokala", - "introduction.federation.local.text": "Zure zerbitzari berean dauden horien mezu publikoak denbora-lerro lokalean agertuko dira.", - "introduction.interactions.action": "Amaitu tutoriala!", - "introduction.interactions.favourite.headline": "Gogokoa", - "introduction.interactions.favourite.text": "Toot bat geroko gorde dezakezu, eta egileari gustukoa duzula jakinarazi, hau gogoko bihurtuz.", - "introduction.interactions.reblog.headline": "Bultzada", - "introduction.interactions.reblog.text": "Beste batzuen mezuak partekatu ditzakezu zure jarraitzaileekin hauei bultzada emanez.", - "introduction.interactions.reply.headline": "Erantzun", - "introduction.interactions.reply.text": "Besteen mezuei eta zure mezuei ere erantzun diezaiekezu, eta elkarrizketa batean lotuta agertuko dira.", - "introduction.welcome.action": "Goazen!", - "introduction.welcome.headline": "Lehen urratsak", - "introduction.welcome.text": "Ongi etorri fedibertsora! Hemendik gutxira hainbat zerbitzarietan zehar mezuak zabaldu eta lagunekin hitz egin ahal izango duzu. Baina zerbitzari hau hainbat zerbitzarietan zehar. berezia da, hau da zure profila ostatatzen duena, ez ahaztu bere izena.", "keyboard_shortcuts.back": "atzera nabigatzeko", "keyboard_shortcuts.blocked": "blokeatutako erabiltzaileen zerrenda irekitzeko", - "keyboard_shortcuts.boost": "bultzada ematea", + "keyboard_shortcuts.boost": "Bultzatu bidalketa", "keyboard_shortcuts.column": "mezu bat zutabe batean fokatzea", "keyboard_shortcuts.compose": "testua konposatzeko arean fokatzea", "keyboard_shortcuts.description": "Deskripzioa", "keyboard_shortcuts.direct": "mezu zuzenen zutabea irekitzeko", "keyboard_shortcuts.down": "zerrendan behera mugitzea", - "keyboard_shortcuts.enter": "mezua irekitzeko", - "keyboard_shortcuts.favourite": "gogoko egitea", + "keyboard_shortcuts.enter": "Ireki bidalketa", + "keyboard_shortcuts.favourite": "Egin gogoko bidalketa", "keyboard_shortcuts.favourites": "gogokoen zerrenda irekitzeko", "keyboard_shortcuts.federated": "federatutako denbora-lerroa irekitzeko", "keyboard_shortcuts.heading": "Keyboard Shortcuts", @@ -242,21 +230,21 @@ "keyboard_shortcuts.my_profile": "zure profila irekitzeko", "keyboard_shortcuts.notifications": "jakinarazpenen zutabea irekitzeko", "keyboard_shortcuts.open_media": "media zabaltzeko", - "keyboard_shortcuts.pinned": "finkatutako tooten zerrenda irekitzeko", + "keyboard_shortcuts.pinned": "Ireki finkatutako bidalketen zerrenda", "keyboard_shortcuts.profile": "egilearen profila irekitzeko", - "keyboard_shortcuts.reply": "erantzutea", + "keyboard_shortcuts.reply": "Erantzun bidalketari", "keyboard_shortcuts.requests": "jarraitzeko eskarien zerrenda irekitzeko", "keyboard_shortcuts.search": "bilaketan fokua jartzea", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW eremua erakutsi/ezkutatzeko", "keyboard_shortcuts.start": "\"Menua\" zutabea irekitzeko", "keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean", "keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko", - "keyboard_shortcuts.toot": "toot berria hastea", + "keyboard_shortcuts.toot": "Hasi bidalketa berri bat", "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "lightbox.close": "Itxi", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Konprimatu irudia ikusteko kaxa", + "lightbox.expand": "Zabaldu irudia ikusteko kaxa", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", "lists.account.add": "Gehitu zerrendara", @@ -266,10 +254,10 @@ "lists.edit.submit": "Aldatu izenburua", "lists.new.create": "Gehitu zerrenda", "lists.new.title_placeholder": "Zerrenda berriaren izena", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile", + "lists.replies_policy.list": "Zerrendako kideak", + "lists.replies_policy.none": "Bat ere ez", + "lists.replies_policy.title": "Erakutsi erantzunak:", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.subheading": "Zure zerrendak", "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}", @@ -277,14 +265,14 @@ "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna", "missing_indicator.label": "Ez aurkitua", "missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Iraupena", "mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Zehaztu gabe", "navigation_bar.apps": "Mugikorrerako aplikazioak", "navigation_bar.blocks": "Blokeatutako erabiltzaileak", "navigation_bar.bookmarks": "Laster-markak", "navigation_bar.community_timeline": "Denbora-lerro lokala", - "navigation_bar.compose": "Idatzi toot berria", + "navigation_bar.compose": "Idatzi bidalketa berria", "navigation_bar.direct": "Mezu zuzenak", "navigation_bar.discover": "Aurkitu", "navigation_bar.domain_blocks": "Ezkutatutako domeinuak", @@ -299,18 +287,18 @@ "navigation_bar.logout": "Amaitu saioa", "navigation_bar.mutes": "Mutututako erabiltzaileak", "navigation_bar.personal": "Pertsonala", - "navigation_bar.pins": "Finkatutako tootak", + "navigation_bar.pins": "Finkatutako bidalketak", "navigation_bar.preferences": "Hobespenak", "navigation_bar.public_timeline": "Federatutako denbora-lerroa", "navigation_bar.security": "Segurtasuna", - "notification.favourite": "{name}(e)k zure mezua gogoko du", + "notification.favourite": "{name}(e)k zure bidalketa gogoko du", "notification.follow": "{name}(e)k jarraitzen zaitu", "notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du", "notification.mention": "{name}(e)k aipatu zaitu", "notification.own_poll": "Zure inkesta amaitu da", "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da", - "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari", - "notification.status": "{name} just posted", + "notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari", + "notification.status": "{name} erabiltzaileak bidalketa egin berri du", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", @@ -326,24 +314,25 @@ "notifications.column_settings.reblog": "Bultzadak:", "notifications.column_settings.show": "Erakutsi zutabean", "notifications.column_settings.sound": "Jo soinua", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Bidalketa berriak:", + "notifications.column_settings.unread_markers.category": "Irakurri gabeko jakinarazpenen markatzaileak", "notifications.filter.all": "Denak", "notifications.filter.boosts": "Bultzadak", "notifications.filter.favourites": "Gogokoak", "notifications.filter.follows": "Jarraipenak", "notifications.filter.mentions": "Aipamenak", "notifications.filter.polls": "Inkestaren emaitza", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Jarraitzen duzun jendearen berriak", + "notifications.grant_permission": "Eman baimena.", "notifications.group": "{count} jakinarazpen", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Markatu jakinarazpen guztiak irakurrita", + "notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako", + "notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako", + "notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.", + "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", + "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", + "notifications_permission_banner.title": "Ez galdu ezer inoiz", + "picture_in_picture.restore": "Leheneratu", "poll.closed": "Itxita", "poll.refresh": "Berritu", "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}", @@ -352,7 +341,7 @@ "poll.voted": "Erantzun honi eman diozu botoa", "poll_button.add_poll": "Gehitu inkesta bat", "poll_button.remove_poll": "Kendu inkesta", - "privacy.change": "Doitu mezuaren pribatutasuna", + "privacy.change": "Aldatu bidalketaren pribatutasuna", "privacy.direct.long": "Bidali aipatutako erabiltzaileei besterik ez", "privacy.direct.short": "Zuzena", "privacy.private.long": "Bidali jarraitzaileei besterik ez", @@ -379,23 +368,23 @@ "report.target": "{target} salatzen", "search.placeholder": "Bilatu", "search_popout.search_format": "Bilaketa aurreratuaren formatua", - "search_popout.tips.full_text": "Testu hutsarekin zuk idatzitako mezuak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.", + "search_popout.tips.full_text": "Testu hutsarekin zuk idatzitako bidalketak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.", "search_popout.tips.hashtag": "traola", - "search_popout.tips.status": "mezua", + "search_popout.tips.status": "bidalketa", "search_popout.tips.text": "Testu hutsak pantaila-izenak, erabiltzaile-izenak eta traolak bilatzen ditu", "search_popout.tips.user": "erabiltzailea", "search_results.accounts": "Jendea", "search_results.hashtags": "Traolak", - "search_results.statuses": "Tootak", - "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du tooten edukiaren bilaketa gaitu.", + "search_results.statuses": "Bidalketak", + "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du bidalketen edukiaren bilaketa gaitu.", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", - "status.admin_status": "Ireki mezu hau moderazio interfazean", + "status.admin_status": "Ireki bidalketa hau moderazio interfazean", "status.block": "Blokeatu @{name}", "status.bookmark": "Laster-marka", "status.cancel_reblog_private": "Kendu bultzada", - "status.cannot_reblog": "Mezu honi ezin zaio bultzada eman", - "status.copy": "Kopiatu mezuaren esteka", + "status.cannot_reblog": "Bidalketa honi ezin zaio bultzada eman", + "status.copy": "Kopiatu bidalketaren esteka", "status.delete": "Ezabatu", "status.detailed_status": "Elkarrizketaren ikuspegi xehetsua", "status.direct": "Mezu zuzena @{name}(r)i", @@ -408,14 +397,14 @@ "status.more": "Gehiago", "status.mute": "Mututu @{name}", "status.mute_conversation": "Mututu elkarrizketa", - "status.open": "Hedatu mezu hau", + "status.open": "Hedatu bidalketa hau", "status.pin": "Finkatu profilean", - "status.pinned": "Finkatutako toota", + "status.pinned": "Finkatutako bidalketa", "status.read_more": "Irakurri gehiago", "status.reblog": "Bultzada", "status.reblog_private": "Bultzada jatorrizko hartzaileei", "status.reblogged_by": "{name}(r)en bultzada", - "status.reblogs.empty": "Ez dio inork bultzada eman toot honi oraindik. Inork egiten duenean, hemen agertuko dira.", + "status.reblogs.empty": "Inork ez dio bultzada eman bidalketa honi oraindik. Inork egiten badu, hemen agertuko da.", "status.redraft": "Ezabatu eta berridatzi", "status.remove_bookmark": "Kendu laster-marka", "status.reply": "Erantzun", @@ -443,11 +432,11 @@ "time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko", "time_remaining.moments": "Amaitzekotan", "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "Beste zerbitzarietako {resource} ez da bistaratzen.", + "timeline_hint.resources.followers": "Jarraitzaileak", + "timeline_hint.resources.follows": "Jarraitzen", + "timeline_hint.resources.statuses": "Bidalketa zaharragoak", + "trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} hizketan", "trends.trending_now": "Joera orain", "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.", "units.short.billion": "{count}B", @@ -460,17 +449,17 @@ "upload_form.audio_description": "Deskribatu entzumen galera duten pertsonentzat", "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat", "upload_form.edit": "Editatu", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Aldatu koadro txikia", "upload_form.undo": "Ezabatu", "upload_form.video_description": "Deskribatu entzumen galera edo ikusmen urritasuna duten pertsonentzat", "upload_modal.analyzing_picture": "Irudia aztertzen…", "upload_modal.apply": "Aplikatu", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Aukeratu irudia", "upload_modal.description_placeholder": "Vaudeville itxurako filmean yogi ñaño bat jipoitzen dute Quebec-en whiski truk", "upload_modal.detect_text": "Antzeman testua iruditik", "upload_modal.edit_media": "Editatu media", "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR prestatzen…", "upload_modal.preview_label": "Aurreikusi ({ratio})", "upload_progress.label": "Igotzen...", "video.close": "Itxi bideoa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index b062ec18b..59b512591 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -22,6 +22,7 @@ "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.", "account.follows_you": "پیگیر شماست", "account.hide_reblogs": "نهفتن بازبوقهای @{name}", + "account.joined": "پیوسته از {date}", "account.last_status": "آخرین فعالیت", "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد", "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم میگیرد که چه کسی بتواند پیگیرش باشد.", @@ -70,7 +71,7 @@ "column.home": "خانه", "column.lists": "فهرستها", "column.mutes": "کاربران خموش", - "column.notifications": "اعلانها", + "column.notifications": "آگهداد", "column.pins": "بوقهای ثابت", "column.public": "نوشتههای همهجا", "column_back_button.label": "بازگشت", @@ -80,7 +81,7 @@ "column_header.pin": "ثابتکردن", "column_header.show_settings": "نمایش تنظیمات", "column_header.unpin": "رهاکردن", - "column_subheading.settings": "ساماندهی", + "column_subheading.settings": "تنظیمات", "community.column_settings.local_only": "فقط محلّی", "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "هنوز هیچ دامنهای پنهان نشده است.", "empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیدهاید. وقتی بوقی را بپسندید، اینجا نمایش خواهد یافت.", "empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش اینجا نمایش خواهد یافت.", + "empty_column.follow_recommendations": "ظاهرا هیچ پیشنهادی برای شما نمیتوانیم تولید کنیم. میتوانید از امکان جستجو برای یافتن افرادی که ممکن است بشناسید و یا کاوش میان هشتگهای داغ استفاده کنید.", "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیریای ندارید. وقتی چنین درخواستی بگیرید، اینجا نمایش خواهد یافت.", "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.", "empty_column.home": "فهرست خانگی شما خالی است! {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.", - "empty_column.home.public_timeline": "فهرست نوشتههای همهجا", + "empty_column.home.suggestions": "چند پیشنهاد را ببینید", "empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بفرستند، اینجا ظاهر خواهد شد.", "empty_column.lists": "هنوز هیچ فهرستی ندارید. هنگامی که فهرستی بسازید، اینجا دیده خواهد شد.", "empty_column.mutes": "هنوز هیچ کاربری را خموش نکردهاید.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کارهای بومی از ماستودون استفاده کنید.", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", + "follow_recommendations.done": "انجام شد", + "follow_recommendations.heading": "افرادی را که میخواهید فرستههایشان را ببینید دنبال کنید! اینها تعدادی پیشنهاد هستند.", + "follow_recommendations.lead": "فرستههای افرادی که دنبال میکنید به ترتیب زمانی در خوراک خانهتان نشان داده خواهد شد. از اشتباه کردن نترسید. میتوانید به همین سادگی در هر زمانی از دنبال کردن افراد دست بکشید!", "follow_request.authorize": "اجازه دهید", "follow_request.reject": "رد کنید", "follow_requests.unlocked_explanation": "با این که حسابتان قفل نیست، کارکنان {domain} فکر کردند که ممکن است بخواهید درخواستها از این حسابها را به صورت دستی بازبینی کنید.", @@ -191,7 +196,7 @@ "hashtag.column_header.tag_mode.none": "بدون {additional}", "hashtag.column_settings.select.no_options_message": "هیچ پیشنهادی پیدا نشد", "hashtag.column_settings.select.placeholder": "هشتگها را وارد کنید…", - "hashtag.column_settings.tag_mode.all": "همهٔ اینها", + "hashtag.column_settings.tag_mode.all": "همۀ اینـها", "hashtag.column_settings.tag_mode.any": "هرکدام از اینها", "hashtag.column_settings.tag_mode.none": "هیچکدام از اینها", "hashtag.column_settings.tag_toggle": "افزودن برچسبهایی بیشتر به این ستون", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}", - "introduction.federation.action": "بعدی", - "introduction.federation.federated.headline": "همگانی", - "introduction.federation.federated.text": "نوشتههای عمومی کارسازهای دیگر در این فهرست نمایش مییابند.", - "introduction.federation.home.headline": "خانه", - "introduction.federation.home.text": "فرستههای کسانی که شما آنها را پی میگیرید اینجا نمایش مییابند. شما میتوانید هر کسی را روی هر کارسازی پی بگیرید!", - "introduction.federation.local.headline": "محلّی", - "introduction.federation.local.text": "فرستههای عمومی کسانی که روی کارساز شما هستند در فهرست نوشتههای محلی نمایش مییابند.", - "introduction.interactions.action": "پایان خودآموز!", - "introduction.interactions.favourite.headline": "پسندیدن", - "introduction.interactions.favourite.text": "با پسندیدن یک بوق، شما آن را برای آینده ذخیره میکنید و به نویسنده میگویید که از بوقش خوشتان آمده.", - "introduction.interactions.reblog.headline": "بازبوقیدن", - "introduction.interactions.reblog.text": "اگر بخواهید نوشتهای را با پیگیران خودتان به اشتراک بگذارید، آن را بازمیبوقید.", - "introduction.interactions.reply.headline": "پاسخ", - "introduction.interactions.reply.text": "میتوانید به بوقهای خودتان و دیگران پاسخ دهید، تا در یک گفتگو به هم زنجیر شوند.", - "introduction.welcome.action": "بزن بریم!", - "introduction.welcome.headline": "نخستین گامها", - "introduction.welcome.text": "به دنیای شبکههای اجتماعی غیرمتمرکز خوش آمدید! به زودی میتوانید نوشتههایتان را منتشر کرده و با دوستانتان روی دامنهٔ وسیعی از کارسازها حرف بزنید. ولی این کارساز، {domain}، با بقیه فرق دارد، چرا که میزبان نمایهٔ شماست، پس نامش را به خاطر بسپارید.", "keyboard_shortcuts.back": "برای بازگشت", "keyboard_shortcuts.blocked": "برای گشودن فهرست کاربران خموش", "keyboard_shortcuts.boost": "برای بازبوقیدن", @@ -315,7 +303,7 @@ "notifications.clear_confirmation": "مطمئنید میخواهید همهٔ اعلانهایتان را برای همیشه پاک کنید؟", "notifications.column_settings.alert": "اعلانهای میزکار", "notifications.column_settings.favourite": "پسندیدهها:", - "notifications.column_settings.filter_bar.advanced": "نمایش همهٔ دستهها", + "notifications.column_settings.filter_bar.advanced": "نمایش همۀ دستهها", "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", "notifications.column_settings.filter_bar.show": "نمایش", "notifications.column_settings.follow": "پیگیران تازه:", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", "notifications.column_settings.status": "بوقهای جدید:", + "notifications.column_settings.unread_markers.category": "نشانهگذارهای آگاهیهای خواندهنشده", "notifications.filter.all": "همه", "notifications.filter.boosts": "بازبوقها", "notifications.filter.favourites": "پسندها", @@ -336,7 +325,7 @@ "notifications.filter.statuses": "بهروز رسانیها از کسانی که پیگیرشانید", "notifications.grant_permission": "اعطای مجوز.", "notifications.group": "{count} اعلان", - "notifications.mark_as_read": "نشانهگذاری همهٔ آگاهیها به عنوان خواندهشده", + "notifications.mark_as_read": "نشانهگذاری همۀ آگهدادها با فرنام خوانده شده", "notifications.permission_denied": "آگاهیهای میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", "notifications.permission_denied_alert": "از آنجا که پیش از این اجازهٔ مرورگر رد شده است، آگاهیهای میزکار نمیتوانند به کار بیفتند", "notifications.permission_required": "اعلانهای میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 28ff603e9..ae2a2eef6 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Muistiinpanot", + "account.account_note_header": "Muistiinpano", "account.add_or_remove_from_list": "Lisää tai poista listoilta", "account.badges.bot": "Botti", "account.badges.group": "Ryhmä", @@ -9,19 +9,20 @@ "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} viestii", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Ilmoita minulle, kun @{name} viestii", "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", "account.followers": "Seuraajaa", "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajat}}", + "account.following_counter": "{count, plural, one {{counter} seuraa} other {{counter} seuraa}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", + "account.joined": "Joined {date}", "account.last_status": "Aktiivinen viimeksi", "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", "account.locked_info": "Tämän tili on yksityinen. Käyttäjä vahvistaa itse kuka voi seurata häntä.", @@ -83,7 +84,7 @@ "column_subheading.settings": "Asetukset", "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Vain etäkäyttö", "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Tilin käyttäminen keskeytetty", "empty_column.account_timeline": "Ei ole 'toots' täällä!", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", @@ -159,21 +160,25 @@ "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.", "empty_column.favourited_statuses": "Et ole vielä lisännyt tuuttauksia suosikkeihisi. Kun teet niin, tuuttaus näkyy tässä.", "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä tuuttausta suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Sinulla ei ole vielä seurauspyyntöjä. Kun saat sellaisen, näkyy se tässä.", "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.", "empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.", - "empty_column.home.public_timeline": "yleinen aikajana", + "empty_column.home.suggestions": "Katso joitakin ehdotuksia", "empty_column.list": "Lista on vielä tyhjä. Listan jäsenten julkaisemat tilapäivitykset tulevat tähän näkyviin.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.", "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.", "errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", + "follow_recommendations.done": "Valmis", + "follow_recommendations.heading": "Seuraa ihmisiä, joilta haluaisit nähdä viestejä! Tässä on muutamia ehdotuksia.", + "follow_recommendations.lead": "Viestit seuraamiltasi henkilöiltä näkyvät aikajärjestyksessä kotinäytön syötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraaminen yhtä helposti milloin tahansa!", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", "follow_requests.unlocked_explanation": "Vaikka tilisi ei ole lukittu, {domain} ylläpitäjien mielestä haluat tarkistaa näiden tilien seurauspyynnöt manuaalisesti.", @@ -203,23 +208,6 @@ "intervals.full.days": "Päivä päiviä", "intervals.full.hours": "Tunti tunteja", "intervals.full.minutes": "Minuuti minuuteja", - "introduction.federation.action": "Seuraava", - "introduction.federation.federated.headline": "Federaatioitettu", - "introduction.federation.federated.text": "Julkisia viestejä muiden serverien that is not a word aikoo tulla federoituun aikajanaan.", - "introduction.federation.home.headline": "Koti", - "introduction.federation.home.text": "Viestit muilta pelaajilta jota seuraat aikovat tulla koti sivuusi. Voit seurata ketä vain missä vain serverillä!", - "introduction.federation.local.headline": "Paikallinen", - "introduction.federation.local.text": "Julkiset viestit muilta pelaajilta samalla serverillä tulevat sinun paikalliseen aikajanaan.", - "introduction.interactions.action": "Suorita harjoitus!", - "introduction.interactions.favourite.headline": "Lempi", - "introduction.interactions.favourite.text": "Toot is not a word.", - "introduction.interactions.reblog.headline": "Nopeutus", - "introduction.interactions.reblog.text": "Toot is not a word", - "introduction.interactions.reply.headline": "Vastaa", - "introduction.interactions.reply.text": "TOOT IS NOT A WORD", - "introduction.welcome.action": "Mennään!", - "introduction.welcome.headline": "Ensimmäiset askeleet", - "introduction.welcome.text": "Tervetuloa fediverseen! Muutaman hetken kuluttua voit lähettää viestejä ja jutella ystävillesi useiden palvelinten halki. Mutta tämä palvelin {domain}, on erityinen — sinun profiilisi sijaitsee sillä, joten muista sen nimi.", "keyboard_shortcuts.back": "liiku taaksepäin", "keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä", "keyboard_shortcuts.boost": "buustaa", @@ -255,8 +243,8 @@ "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", "keyboard_shortcuts.up": "siirry listassa ylöspäin", "lightbox.close": "Sulje", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Pakkaa kuvan näkymälaatikko", + "lightbox.expand": "Laajenna kuvan näkymälaatikko", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", "lists.account.add": "Lisää listaan", @@ -266,10 +254,10 @@ "lists.edit.submit": "Vaihda otsikko", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Jokainen seurattu käyttäjä", + "lists.replies_policy.list": "Luettelon jäsenet", + "lists.replies_policy.none": "Ei kukaan", + "lists.replies_policy.title": "Näytä vastaukset:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listat", "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}", @@ -277,9 +265,9 @@ "media_gallery.toggle_visible": "Säädä näkyvyyttä", "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Kesto", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Ikuisesti", "navigation_bar.apps": "Mobiilisovellukset", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", @@ -310,7 +298,7 @@ "notification.own_poll": "Kyselysi on päättynyt", "notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.reblog": "{name} buustasi tilaasi", - "notification.status": "{name} just posted", + "notification.status": "{name} juuri lähetetty", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.alert": "Työpöytäilmoitukset", @@ -327,23 +315,24 @@ "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Lukemattomat ilmoitusmerkit", "notifications.filter.all": "Kaikki", "notifications.filter.boosts": "Buustit", "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraa", "notifications.filter.mentions": "Maininnat", "notifications.filter.polls": "Kyselyn tulokset", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Päivitykset henkilöiltä, joita seuraat", + "notifications.grant_permission": "Myönnä lupa.", "notifications.group": "{count} ilmoitusta", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Merkitse jokainen ilmoitus luetuksi", + "notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty", + "notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin estetty", + "notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa lupaa ei ole myönnetty.", + "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön", + "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon} -painikkeen kautta.", + "notifications_permission_banner.title": "Älä anna minkään mennä ohi", + "picture_in_picture.restore": "Laita se takaisin", "poll.closed": "Suljettu", "poll.refresh": "Päivitä", "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}", @@ -443,7 +432,7 @@ "time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä", "time_remaining.moments": "Hetki jäljellä", "time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.", "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "Seuraa", "timeline_hint.resources.statuses": "Vanhemmat tuuttaukset", @@ -470,7 +459,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Valmistellaan OCR…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "video.close": "Sulje video", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 8eedb8d85..811e318b4 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -22,9 +22,10 @@ "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", + "account.joined": "Ici depuis {date}", "account.last_status": "Dernière activité", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", - "account.locked_info": "Ce compte est verrouillé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", + "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", "account.media": "Médias", "account.mention": "Mentionner @{name}", "account.moved_to": "{name} a déménagé vers :", @@ -32,13 +33,13 @@ "account.mute_notifications": "Ignorer les notifications de @{name}", "account.muted": "Masqué·e", "account.never_active": "Jamais", - "account.posts": "Pouets", - "account.posts_with_replies": "Pouets et réponses", + "account.posts": "Messages", + "account.posts_with_replies": "Partages et réponses", "account.report": "Signaler @{name}", "account.requested": "En attente d’approbation. Cliquez pour annuler la requête", "account.share": "Partager le profil de @{name}", "account.show_reblogs": "Afficher les partages de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Pouet} other {{counter} Pouets}}", + "account.statuses_counter": "{count, plural, one {{counter} Message} other {{counter} Messages}}", "account.unblock": "Débloquer @{name}", "account.unblock_domain": "Débloquer le domaine {domain}", "account.unendorse": "Ne plus recommander sur le profil", @@ -71,7 +72,7 @@ "column.lists": "Listes", "column.mutes": "Comptes masqués", "column.notifications": "Notifications", - "column.pins": "Pouets épinglés", + "column.pins": "Messages épinglés", "column.public": "Fil public global", "column_back_button.label": "Retour", "column_header.hide_settings": "Cacher les paramètres", @@ -84,10 +85,10 @@ "community.column_settings.local_only": "Local seulement", "community.column_settings.media_only": "Média uniquement", "community.column_settings.remote_only": "Distant seulement", - "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.", + "compose_form.direct_message_warning": "Ce message sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.", "compose_form.direct_message_warning_learn_more": "En savoir plus", "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur « non listé ». Seuls les pouets avec une visibilité « publique » peuvent être recherchés par hashtag.", - "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.", + "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos messages privés.", "compose_form.lock_disclaimer.lock": "verrouillé", "compose_form.placeholder": "Qu’avez-vous en tête ?", "compose_form.poll.add_option": "Ajouter un choix", @@ -101,15 +102,15 @@ "compose_form.sensitive.hide": "Marquer le média comme sensible", "compose_form.sensitive.marked": "{count, plural, one {Le média est marqué comme sensible} other {Les médias sont marqués comme sensibles}}", "compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible", - "compose_form.spoiler.marked": "Le texte est caché derrière un avertissement", - "compose_form.spoiler.unmarked": "Le texte n’est pas caché", + "compose_form.spoiler.marked": "Enlever l’avertissement de contenu", + "compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu", "compose_form.spoiler_placeholder": "Écrivez votre avertissement ici", "confirmation_modal.cancel": "Annuler", "confirmations.block.block_and_report": "Bloquer et signaler", "confirmations.block.confirm": "Bloquer", "confirmations.block.message": "Voulez-vous vraiment bloquer {name} ?", "confirmations.delete.confirm": "Supprimer", - "confirmations.delete.message": "Confirmez-vous la suppression de ce pouet ?", + "confirmations.delete.message": "Voulez-vous vraiment supprimer ce message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?", "confirmations.domain_block.confirm": "Bloquer tout le domaine", @@ -133,7 +134,7 @@ "directory.local": "De {domain} seulement", "directory.new_arrivals": "Inscrit·e·s récemment", "directory.recently_active": "Actif·ve·s récemment", - "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.", + "embed.instructions": "Intégrez ce message à votre site en copiant le code ci-dessous.", "embed.preview": "Il apparaîtra comme cela :", "emoji_button.activity": "Activité", "emoji_button.custom": "Personnalisés", @@ -150,20 +151,21 @@ "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", "empty_column.account_suspended": "Compte suspendu", - "empty_column.account_timeline": "Aucun pouet ici !", + "empty_column.account_timeline": "Aucun message ici !", "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", - "empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.", + "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.", - "empty_column.favourited_statuses": "Vous n’avez aucun pouet favoris pour le moment. Lorsque vous en mettrez un en favori, il apparaîtra ici.", - "empty_column.favourites": "Personne n’a encore mis ce pouet en favori. Lorsque quelqu’un le fera, il apparaîtra ici.", + "empty_column.favourited_statuses": "Vous n’avez pas encore de message en favori. Lorsque vous en ajouterez un, il apparaîtra ici.", + "empty_column.favourites": "Personne n’a encore ajouté ce message à ses favoris. Lorsque quelqu’un le fera, il apparaîtra ici.", + "empty_column.follow_recommendations": "Il semble qu’aucune suggestion n’ait pu être générée pour vous. Vous pouvez essayer d’utiliser la recherche pour découvrir des personnes que vous pourriez connaître ou explorer les hashtags tendance.", "empty_column.follow_requests": "Vous n’avez pas encore de demande de suivi. Lorsque vous en recevrez une, elle apparaîtra ici.", "empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.", "empty_column.home": "Vous ne suivez personne. Visitez {public} ou utilisez la recherche pour trouver d’autres personnes à suivre.", - "empty_column.home.public_timeline": "le fil public", - "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.", + "empty_column.home.suggestions": "Voir quelques suggestions", + "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, iels apparaîtront ici.", "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.", "empty_column.mutes": "Vous n’avez masqué aucun·e utilisateur·rice pour le moment.", "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", @@ -174,9 +176,12 @@ "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", + "follow_recommendations.done": "Terminé", + "follow_recommendations.heading": "Suivez les personnes dont vous aimeriez voir les messages ! Voici quelques suggestions.", + "follow_recommendations.lead": "Les messages des personnes que vous suivez apparaîtront par ordre chronologique sur votre fil d'accueil. Ne craignez pas de faire des erreurs, vous pouvez arrêter de suivre les gens aussi facilement à tout moment !", "follow_request.authorize": "Accepter", "follow_request.reject": "Rejeter", - "follow_requests.unlocked_explanation": "Même si votre compte n’est pas verrouillé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.", + "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.", "generic.saved": "Sauvegardé", "getting_started.developers": "Développeur·euse·s", "getting_started.directory": "Annuaire des profils", @@ -203,57 +208,40 @@ "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}}", - "introduction.federation.action": "Suivant", - "introduction.federation.federated.headline": "Fil public global", - "introduction.federation.federated.text": "Les messages publics provenant d'autres serveurs du fediverse apparaîtront dans le fil public global.", - "introduction.federation.home.headline": "Accueil", - "introduction.federation.home.text": "Les messages des personnes que vous suivez apparaîtront dans votre fil d'accueil. Vous pouvez suivre n'importe qui sur n'importe quel serveur !", - "introduction.federation.local.headline": "Fil public local", - "introduction.federation.local.text": "Les messages publics de personnes se trouvant sur le même serveur que vous apparaîtront sur le fil public local.", - "introduction.interactions.action": "Finir le tutoriel !", - "introduction.interactions.favourite.headline": "Favoris", - "introduction.interactions.favourite.text": "Vous pouvez garder un pouet pour plus tard et faire savoir à son auteur·ice que vous l’avez aimé, en l'ajoutant aux favoris.", - "introduction.interactions.reblog.headline": "Partager", - "introduction.interactions.reblog.text": "Vous pouvez partager les pouets d'autres personnes avec vos abonné·e·s en les repartageant.", - "introduction.interactions.reply.headline": "Répondre", - "introduction.interactions.reply.text": "Vous pouvez répondre aux pouets d'autres personnes et à vos propres pouets, ce qui les enchaînera dans une conversation.", - "introduction.welcome.action": "Allons-y !", - "introduction.welcome.headline": "Premiers pas", - "introduction.welcome.text": "Bienvenue dans le fédiverse ! Dans quelques instants, vous pourrez diffuser des messages et parler à vos ami·e·s sur une grande variété de serveurs. Mais ce serveur, {domain}, est spécial - il héberge votre profil, alors souvenez-vous de son nom.", - "keyboard_shortcuts.back": "revenir en arrière", - "keyboard_shortcuts.blocked": "ouvrir la liste des comptes bloqués", - "keyboard_shortcuts.boost": "partager", - "keyboard_shortcuts.column": "pour focaliser un statut dans l’une des colonnes", - "keyboard_shortcuts.compose": "cibler la zone de rédaction", + "keyboard_shortcuts.back": "Revenir en arrière", + "keyboard_shortcuts.blocked": "Ouvrir la liste des comptes bloqués", + "keyboard_shortcuts.boost": "Partager le message", + "keyboard_shortcuts.column": "Se placer dans une colonne", + "keyboard_shortcuts.compose": "se placer dans la zone de rédaction", "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "ouvrir la colonne des messages directs", - "keyboard_shortcuts.down": "descendre dans la liste", - "keyboard_shortcuts.enter": "pour ouvrir le statut", - "keyboard_shortcuts.favourite": "ajouter aux favoris", - "keyboard_shortcuts.favourites": "ouvrir la liste des favoris", - "keyboard_shortcuts.federated": "ouvrir le fil public global", + "keyboard_shortcuts.direct": "Ouvrir la colonne des messages directs", + "keyboard_shortcuts.down": "Descendre dans la liste", + "keyboard_shortcuts.enter": "Ouvrir le message", + "keyboard_shortcuts.favourite": "Ajouter le message aux favoris", + "keyboard_shortcuts.favourites": "Ouvrir la liste des favoris", + "keyboard_shortcuts.federated": "Ouvrir le fil public global", "keyboard_shortcuts.heading": "Raccourcis clavier", - "keyboard_shortcuts.home": "ouvrir le fil d’accueil", + "keyboard_shortcuts.home": "Ouvrir le fil d’accueil", "keyboard_shortcuts.hotkey": "Raccourci clavier", - "keyboard_shortcuts.legend": "afficher cet aide-mémoire", - "keyboard_shortcuts.local": "ouvrir le fil public local", + "keyboard_shortcuts.legend": "Afficher cet aide-mémoire", + "keyboard_shortcuts.local": "Ouvrir le fil public local", "keyboard_shortcuts.mention": "mentionner l’auteur·rice", - "keyboard_shortcuts.muted": "ouvrir la liste des comptes masqués", - "keyboard_shortcuts.my_profile": "ouvrir votre profil", - "keyboard_shortcuts.notifications": "ouvrir la colonne de notifications", + "keyboard_shortcuts.muted": "Ouvrir la liste des comptes masqués", + "keyboard_shortcuts.my_profile": "Ouvrir votre profil", + "keyboard_shortcuts.notifications": "Ouvrir la colonne de notifications", "keyboard_shortcuts.open_media": "ouvrir le média", - "keyboard_shortcuts.pinned": "ouvrir la liste des pouets épinglés", + "keyboard_shortcuts.pinned": "Ouvrir la liste des messages épinglés", "keyboard_shortcuts.profile": "ouvrir le profil de l’auteur·rice", - "keyboard_shortcuts.reply": "répondre", - "keyboard_shortcuts.requests": "ouvrir la liste de demandes d’abonnement", - "keyboard_shortcuts.search": "cibler la zone de recherche", - "keyboard_shortcuts.spoilers": "pour afficher/masquer le champ CW", - "keyboard_shortcuts.start": "ouvrir la colonne « Pour commencer »", - "keyboard_shortcuts.toggle_hidden": "déplier/replier le texte derrière un CW", - "keyboard_shortcuts.toggle_sensitivity": "afficher/cacher les médias", - "keyboard_shortcuts.toot": "démarrer un tout nouveau pouet", - "keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche", - "keyboard_shortcuts.up": "remonter dans la liste", + "keyboard_shortcuts.reply": "Répondre au message", + "keyboard_shortcuts.requests": "Ouvrir la liste de demandes d’abonnement", + "keyboard_shortcuts.search": "Se placer dans le champ de recherche", + "keyboard_shortcuts.spoilers": "Afficher/cacher le champ de CW", + "keyboard_shortcuts.start": "Ouvrir la colonne « Pour commencer »", + "keyboard_shortcuts.toggle_hidden": "Déplier/replier le texte derrière un CW", + "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher les médias", + "keyboard_shortcuts.toot": "Commencer un nouveau message", + "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche", + "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", "lightbox.compress": "Compresser la fenêtre de visualisation des images", "lightbox.expand": "Agrandir la fenêtre de visualisation des images", @@ -266,7 +254,7 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", - "lists.replies_policy.followed": "N’importe quel·le utilisateur·rice suivi·e", + "lists.replies_policy.followed": "Comptes que vous suivez", "lists.replies_policy.list": "Membres de la liste", "lists.replies_policy.none": "Personne", "lists.replies_policy.title": "Afficher les réponses à :", @@ -284,7 +272,7 @@ "navigation_bar.blocks": "Comptes bloqués", "navigation_bar.bookmarks": "Marque-pages", "navigation_bar.community_timeline": "Fil public local", - "navigation_bar.compose": "Rédiger un nouveau pouet", + "navigation_bar.compose": "Rédiger un nouveau message", "navigation_bar.direct": "Messages directs", "navigation_bar.discover": "Découvrir", "navigation_bar.domain_blocks": "Domaines bloqués", @@ -299,17 +287,17 @@ "navigation_bar.logout": "Déconnexion", "navigation_bar.mutes": "Comptes masqués", "navigation_bar.personal": "Personnel", - "navigation_bar.pins": "Pouets épinglés", + "navigation_bar.pins": "Messages épinglés", "navigation_bar.preferences": "Préférences", "navigation_bar.public_timeline": "Fil public global", "navigation_bar.security": "Sécurité", - "notification.favourite": "{name} a ajouté à ses favoris :", + "notification.favourite": "{name} a ajouté le message à ses favoris", "notification.follow": "{name} vous suit", "notification.follow_request": "{name} a demandé à vous suivre", "notification.mention": "{name} vous a mentionné·e :", "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", - "notification.reblog": "{name} a partagé votre statut", + "notification.reblog": "{name} a partagé votre message", "notification.status": "{name} vient de publier", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", @@ -325,8 +313,9 @@ "notifications.column_settings.push": "Notifications push", "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", - "notifications.column_settings.sound": "Émettre un son", - "notifications.column_settings.status": "Nouveaux pouets :", + "notifications.column_settings.sound": "Jouer un son", + "notifications.column_settings.status": "Nouveaux messages :", + "notifications.column_settings.unread_markers.category": "Marqueurs de notifications non lues", "notifications.filter.all": "Tout", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favoris", @@ -379,23 +368,23 @@ "report.target": "Signalement de {target}", "search.placeholder": "Rechercher", "search_popout.search_format": "Recherche avancée", - "search_popout.tips.full_text": "Un texte normal retourne les pouets que vous avez écris, mis en favori, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.", + "search_popout.tips.full_text": "Un texte normal retourne les messages que vous avez écrits, ajoutés à vos favoris, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondants.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "statuts", "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants", "search_popout.tips.user": "utilisateur·ice", "search_results.accounts": "Comptes", "search_results.hashtags": "Hashtags", - "search_results.statuses": "Pouets", - "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.", + "search_results.statuses": "Messages", + "search_results.statuses_fts_disabled": "La recherche de messages 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", + "status.admin_status": "Ouvrir ce message dans l’interface de modération", "status.block": "Bloquer @{name}", "status.bookmark": "Ajouter aux marque-pages", "status.cancel_reblog_private": "Annuler le partage", - "status.cannot_reblog": "Ce pouet ne peut pas être partagé", - "status.copy": "Copier le lien vers le pouet", + "status.cannot_reblog": "Ce message ne peut pas être partagé", + "status.copy": "Copier le lien vers le message", "status.delete": "Supprimer", "status.detailed_status": "Vue détaillée de la conversation", "status.direct": "Envoyer un message direct à @{name}", @@ -408,14 +397,14 @@ "status.more": "Plus", "status.mute": "Masquer @{name}", "status.mute_conversation": "Masquer la conversation", - "status.open": "Déplier ce statut", + "status.open": "Afficher le message entier", "status.pin": "Épingler sur le profil", - "status.pinned": "Pouet épinglé", + "status.pinned": "Message épinglé", "status.read_more": "En savoir plus", "status.reblog": "Partager", "status.reblog_private": "Partager à l’audience originale", "status.reblogged_by": "{name} a partagé", - "status.reblogs.empty": "Personne n’a encore partagé ce pouet. Lorsque quelqu’un le fera, il apparaîtra ici.", + "status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.", "status.redraft": "Supprimer et ré-écrire", "status.remove_bookmark": "Retirer des marque-pages", "status.reply": "Répondre", @@ -446,7 +435,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} des autres serveurs ne sont pas affichés.", "timeline_hint.resources.followers": "Les abonnés", "timeline_hint.resources.follows": "Les abonnements", - "timeline_hint.resources.statuses": "Les anciens pouets", + "timeline_hint.resources.statuses": "Messages plus anciens", "trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}", "trends.trending_now": "Tendance en ce moment", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 928742dd7..7c2dfc17b 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json new file mode 100644 index 000000000..6b0fe7a65 --- /dev/null +++ b/app/javascript/mastodon/locales/gd.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "Nòta", + "account.add_or_remove_from_list": "Cuir ris no thoir air falbh o na liostaichean", + "account.badges.bot": "Bot", + "account.badges.group": "Buidheann", + "account.block": "Bac @{name}", + "account.block_domain": "Bac an àrainn {domain}", + "account.blocked": "’Ga bhacadh", + "account.browse_more_on_origin_server": "Rùraich barrachd dheth air a’ phròifil thùsail", + "account.cancel_follow_request": "Sguir dhen iarrtas leantainn", + "account.direct": "Cuir teachdaireachd dhìreach gu @{name}", + "account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris", + "account.domain_blocked": "Chaidh an àrainn a bhacadh", + "account.edit_profile": "Deasaich a’ phròifil", + "account.enable_notifications": "Cuir brath thugam nuair a chuireas @{name} post ris", + "account.endorse": "Brosnaich air a’ phròifil", + "account.follow": "Lean air", + "account.followers": "Luchd-leantainn", + "account.followers.empty": "Chan eil neach sam bith a’ leantainn air a’ chleachdaiche seo fhathast.", + "account.followers_counter": "{count, plural, one {{counter} neach-leantainn} two {{counter} neach-leantainn} few {{counter} luchd-leantainn} other {{counter} luchd-leantainn}}", + "account.following_counter": "{count, plural, one {A’ leantainn air {counter}} two {A’ leantainn air {counter}} few {A’ leantainn air {counter}} other {A’ leantainn air {counter}}}", + "account.follows.empty": "Chan eil an cleachdaiche seo a’ leantainn air neach sam bith fhathast.", + "account.follows_you": "’Gad leantainn", + "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Gnìomhach an turas mu dheireadh", + "account.link_verified_on": "Chaidh dearbhadh cò leis a tha an ceangal seo {date}", + "account.locked_info": "Tha prìobhaideachd ghlaiste aig a’ chunntais seo. Nì an sealbhadair lèirmheas a làimh air cò dh’fhaodas leantainn orra.", + "account.media": "Meadhanan", + "account.mention": "Thoir iomradh air @{name}", + "account.moved_to": "Chaidh {name} imrich gu:", + "account.mute": "Mùch @{name}", + "account.mute_notifications": "Mùch na brathan o @{name}", + "account.muted": "’Ga mhùchadh", + "account.never_active": "Chan ann idir", + "account.posts": "Postaichean", + "account.posts_with_replies": "Postaichean ’s freagairtean", + "account.report": "Dèan gearan mu @{name}", + "account.requested": "A’ feitheamh air aontachadh. Briog airson sgur dhen iarrtas leantainn", + "account.share": "Co-roinn a’ phròifil aig @{name}", + "account.show_reblogs": "Seall na brosnachaidhean o @{name}", + "account.statuses_counter": "{count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}}", + "account.unblock": "Dì-bhac @{name}", + "account.unblock_domain": "Dì-bhac an àrainn {domain}", + "account.unendorse": "Na brosnaich air a’ phròifil", + "account.unfollow": "Na lean tuilleadh", + "account.unmute": "Dì-mhùch @{name}", + "account.unmute_notifications": "Dì-mhùch na brathan o @{name}", + "account_note.placeholder": "Briog airson nòta a chur ris", + "alert.rate_limited.message": "Feuch ris a-rithist às dèidh {retry_time, time, medium}.", + "alert.rate_limited.title": "Cuingeachadh ùine", + "alert.unexpected.message": "Thachair mearachd ris nach robh dùil.", + "alert.unexpected.title": "Oich!", + "announcement.announcement": "Brath-fios", + "autosuggest_hashtag.per_week": "{count} gach seachdain", + "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras", + "bundle_column_error.body": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.", + "bundle_column_error.retry": "Feuch ris a-rithist", + "bundle_column_error.title": "Mearachd lìonraidh", + "bundle_modal_error.close": "Dùin", + "bundle_modal_error.message": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.", + "bundle_modal_error.retry": "Feuch ris a-rithist", + "column.blocks": "Cleachdaichean bacte", + "column.bookmarks": "Comharran-lìn", + "column.community": "Loidhne-ama ionadail", + "column.direct": "Teachdaireachdan dìreach", + "column.directory": "Rùraich sna pròifilean", + "column.domain_blocks": "Àrainnean bacte", + "column.favourites": "Na h-annsachdan", + "column.follow_requests": "Iarrtasan leantainn", + "column.home": "Dachaigh", + "column.lists": "Liostaichean", + "column.mutes": "Cleachdaichean mùchte", + "column.notifications": "Brathan", + "column.pins": "Postaichean prìnichte", + "column.public": "Loidhne-ama cho-naisgte", + "column_back_button.label": "Air ais", + "column_header.hide_settings": "Falaich na roghainnean", + "column_header.moveLeft_settings": "Gluais an colbh dhan taobh chlì", + "column_header.moveRight_settings": "Gluais an colbh dhan taobh deas", + "column_header.pin": "Prìnich", + "column_header.show_settings": "Seall na roghainnean", + "column_header.unpin": "Dì-phrìnich", + "column_subheading.settings": "Roghainnean", + "community.column_settings.local_only": "Feadhainn ionadail a-mhàin", + "community.column_settings.media_only": "Meadhanan a-mhàin", + "community.column_settings.remote_only": "Feadhainn chèin a-mhàin", + "compose_form.direct_message_warning": "Cha dèid am post seo a chur ach dha na cleachdaichean air an dug thu iomradh.", + "compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh", + "compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais on a tha e falaichte o liostaichean. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.", + "compose_form.lock_disclaimer": "Chan eil an cunntas agad {locked}. ’S urrainn do dhuine sam bith leantainn ort is na postaichean agad a tha dhan luchd-leantainn agad a-mhàin a shealltainn.", + "compose_form.lock_disclaimer.lock": "glaiste", + "compose_form.placeholder": "Dè tha air d’ aire?", + "compose_form.poll.add_option": "Cuir roghainn ris", + "compose_form.poll.duration": "Faide a’ chunntais-bheachd", + "compose_form.poll.option_placeholder": "Roghainn {number}", + "compose_form.poll.remove_option": "Thoir an roghainn seo air falbh", + "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", + "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", + "compose_form.publish": "Postaich", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}", + "compose_form.sensitive.marked": "{count, plural, one {Tha comharra ris a’ mheadhan gu bheil e frionasach} two {Tha comharra ris na meadhanan gu bheil iad frionasach} few {Tha comharra ris na meadhanan gu bheil iad frionasach} other {Tha comharra ris na meadhanan gu bheil iad frionasach}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Chan eil comharra ris a’ mheadhan gun robh e frionasach} two {Chan eil comharra ris na meadhanan gun robh iad frionasach} few {Chan eil comharra ris na meadhanan gun robh iad frionasach} other {Chan eil comharra ris na meadhanan gun robh iad frionasach}}", + "compose_form.spoiler.marked": "Tha an teacsa falaichte air cùlaibh rabhaidh", + "compose_form.spoiler.unmarked": "Chan eil an teacsa flaichte", + "compose_form.spoiler_placeholder": "Sgrìobh an rabhadh agad an-seo", + "confirmation_modal.cancel": "Sguir dheth", + "confirmations.block.block_and_report": "Bac ⁊ dèan gearan", + "confirmations.block.confirm": "Bac", + "confirmations.block.message": "A bheil thu cinnteach gu bheil thu airson {name} a bhacadh?", + "confirmations.delete.confirm": "Sguab às", + "confirmations.delete.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?", + "confirmations.delete_list.confirm": "Sguab às", + "confirmations.delete_list.message": "A bheil thu cinnteach gu bheil thu airson an liosta seo a sguabadh às gu buan?", + "confirmations.domain_block.confirm": "Bac an àrainn uile gu lèir", + "confirmations.domain_block.message": "A bheil thu cinnteach dha-rìribh gu bheil thu airson an àrainn {domain} a bhacadh uile gu lèir? Mar as trice, foghnaidh gun dèan thu bacadh no mùchadh no dhà gu sònraichte agus bhiod sin na b’ fheàrr. Chan fhaic thu susbaint on àrainn ud air loidhne-ama phoblach sam bith no am measg nam brathan agad. Thèid an luchd-leantainn agad on àrainn ud a thoirt air falbh.", + "confirmations.logout.confirm": "Clàraich a-mach", + "confirmations.logout.message": "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?", + "confirmations.mute.confirm": "Mùch", + "confirmations.mute.explanation": "Cuiridh seo na postaichean uapa ’s na postaichean a bheir iomradh orra am falach ach chì iad-san na postaichean agad fhathast is faodaidh iad leantainn ort.", + "confirmations.mute.message": "A bheil thu cinnteach gu bheil thu airson {name} a mhùchadh?", + "confirmations.redraft.confirm": "Sguab às ⁊ dèan dreachd ùr", + "confirmations.redraft.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às agus dreachd ùr a thòiseachadh? Caillidh tu gach annsachd is brosnachadh air agus thèid freagairtean dhan phost thùsail ’nan dìlleachdanan.", + "confirmations.reply.confirm": "Freagair", + "confirmations.reply.message": "Ma bheir thu freagairt an-dràsta, thèid seo a sgrìobhadh thairis air an teachdaireachd a tha thu a’ sgrìobhadh an-dràsta. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", + "confirmations.unfollow.confirm": "Na lean tuilleadh", + "confirmations.unfollow.message": "A bheil thu cinnteach nach eil thu airson leantainn air {name} tuilleadh?", + "conversation.delete": "Sguab às an còmhradh", + "conversation.mark_as_read": "Cuir comharra gun deach a leughadh", + "conversation.open": "Seall an còmhradh", + "conversation.with": "Le {names}", + "directory.federated": "On cho-shaoghal aithnichte", + "directory.local": "O {domain} a-mhàin", + "directory.new_arrivals": "Feadhainn ùra", + "directory.recently_active": "Gnìomhach o chionn ghoirid", + "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.", + "embed.preview": "Seo an coltas a bhios air:", + "emoji_button.activity": "Gnìomhachd", + "emoji_button.custom": "Gnàthaichte", + "emoji_button.flags": "Brataichean", + "emoji_button.food": "Biadh ⁊ deoch", + "emoji_button.label": "Cuir a-steach Emoji", + "emoji_button.nature": "An nàdar", + "emoji_button.not_found": "Chan eil Emoji gnàthaichte ann!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Nithean", + "emoji_button.people": "Daoine", + "emoji_button.recent": "Air a chleachdadh o chionn ghoirid", + "emoji_button.search": "Lorg…", + "emoji_button.search_results": "Toraidhean an luirg", + "emoji_button.symbols": "Samhlaidhean", + "emoji_button.travel": "Siubhal ⁊ àitichean", + "empty_column.account_suspended": "Chaidh an cunntas a chur à rèim", + "empty_column.account_timeline": "Chan eil post an-seo!", + "empty_column.account_unavailable": "Chan eil a’ phròifil ri làimh", + "empty_column.blocks": "Cha do bhac thu cleachdaiche sam bith fhathast.", + "empty_column.bookmarked_statuses": "Chan eil comharra-lìn ri post agad fhathast. Nuair a nì thu comharra-lìn de dh’fhear, nochdaidh e an-seo.", + "empty_column.community": "Tha an loidhne-ama ionadail falamh. Sgrìobh rudeigin gu poblach airson toiseach-tòiseachaidh a dhèanamh!", + "empty_column.direct": "Chan eil teachdaireachd dhìreach agad fhathast. Nuair a chuireas no a gheibh thu tè, nochdaidh i an-seo.", + "empty_column.domain_blocks": "Cha deach àrainn sam bith a bhacadh fhathast.", + "empty_column.favourited_statuses": "Chan eil annsachd air post agad fhathast. Nuair a nì thu annsachd de dh’fhear, nochdaidh e an-seo.", + "empty_column.favourites": "Chan eil am post seo ’na annsachd aig duine sam bith fhathast. Nuair a nì daoine annsachd dheth, nochdaidh iad an-seo.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "Chan eil iarrtas air leantainn agad fhathast. Nuair gheibh thu fear, nochdaidh e an-seo.", + "empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.", + "empty_column.home": "Tha an loidhne-ama dachaigh agad falamh! Tadhail air {public} no dèan lorg airson toiseach-tòiseachaidh a dhèanamh is tachairt ri càch.", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "Chan eil dad air an liosta seo fhathast. Nuair a phostaicheas buill a tha air an liosta seo postaichean ùra, nochdaidh iad an-seo.", + "empty_column.lists": "Chan eil liosta agad fhathast. Nuair chruthaicheas tu tè, nochdaidh i an-seo.", + "empty_column.mutes": "Cha do mhùch thu cleachdaiche sam bith fhathast.", + "empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Dèan eadar-ghnìomh le càch airson tòiseachadh air còmhradh.", + "empty_column.public": "Chan eil dad an-seo! Sgrìobh rudeigin gu poblach no lean air càch o fhrithealaichean eile a làimh airson seo a lìonadh", + "error.unexpected_crash.explanation": "Air sàilleibh buga sa chòd againn no duilgheadas co-chòrdalachd leis a’ bhrabhsair, chan urrainn dhuinn an duilleag seo a shealltainn mar bu chòir.", + "error.unexpected_crash.explanation_addons": "Cha b’ urrainn dhuinn an duilleag seo a shealltainn mar bu chòir. Tha sinn an dùil gu do dh’adhbharaich tuilleadan a’ bhrabhsair no inneal eadar-theangachaidh fèin-obrachail a’ mhearachd.", + "error.unexpected_crash.next_steps": "Feuch an ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.", + "error.unexpected_crash.next_steps_addons": "Feuch an cuir thu à comas iad ’s gun ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.", + "errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd", + "errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas", + "follow_recommendations.done": "Deiseil", + "follow_recommendations.heading": "Lean air daoine ma tha thu airson nam postaichean aca fhaicinn! Seo moladh no dà dhut.", + "follow_recommendations.lead": "Nochdaidh na postaichean aig na daoine air a leanas tu a-rèir an ama air inbhir na dachaighe agad. Bi dàna on as urrainn dhut sgur de leantainn air daoine cuideachd uair sam bith!", + "follow_request.authorize": "Ùghdarraich", + "follow_request.reject": "Diùlt", + "follow_requests.unlocked_explanation": "Ged nach eil an cunntas agad glaiste, tha sgioba {domain} dhen bheachd gum b’ fheàirrde thu lèirmheas a dhèanamh air na h-iarrtasan leantainn o na cunntasan seo a làimh.", + "generic.saved": "Chaidh a shàbhaladh", + "getting_started.developers": "Luchd-leasachaidh", + "getting_started.directory": "Eòlaire nam pròifil", + "getting_started.documentation": "Docamaideadh", + "getting_started.heading": "Dèan toiseach-tòiseachaidh", + "getting_started.invite": "Thoir cuireadh do dhaoine", + "getting_started.open_source_notice": "’S e bathar-bog le bun-tùs fosgailte a th’ ann am Mastodon. ’S urrainn dhut cuideachadh leis no aithris a dhèanamh air duilgheadasan air GitHub fo {github}.", + "getting_started.security": "Roghainnean a’ chunntais", + "getting_started.terms": "Teirmichean na seirbheise", + "hashtag.column_header.tag_mode.all": "agus {additional}", + "hashtag.column_header.tag_mode.any": "no {additional}", + "hashtag.column_header.tag_mode.none": "às aonais {additional}", + "hashtag.column_settings.select.no_options_message": "Cha deach moladh sam bith a lorg", + "hashtag.column_settings.select.placeholder": "Cuir a-steach tagaichean hais…", + "hashtag.column_settings.tag_mode.all": "An fheadhainn seo uile", + "hashtag.column_settings.tag_mode.any": "Gin sam bith dhiubh", + "hashtag.column_settings.tag_mode.none": "Às aonais gin sam bith dhiubh", + "hashtag.column_settings.tag_toggle": "Gabh a-steach barrachd tagaichean sa cholbh seo", + "home.column_settings.basic": "Bunasach", + "home.column_settings.show_reblogs": "Seall na brosnachaidhean", + "home.column_settings.show_replies": "Seall na freagairtean", + "home.hide_announcements": "Falaich na brathan-fios", + "home.show_announcements": "Seall na brathan-fios", + "intervals.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", + "intervals.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}}", + "intervals.full.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}}", + "keyboard_shortcuts.back": "a sheòladh air ais", + "keyboard_shortcuts.blocked": "a dh’fhosgladh liosta nan cleachdaichean bacte", + "keyboard_shortcuts.boost": "’ga bhrosnachadh", + "keyboard_shortcuts.column": "a chur am fòcas air post air fear dhe na colbhan", + "keyboard_shortcuts.compose": "a chur am fòcas air raon teacsa an sgrìobhaidh", + "keyboard_shortcuts.description": "Tuairisgeul", + "keyboard_shortcuts.direct": "a dh’fhosgladh colbh nan teachdaireachdan dìreach", + "keyboard_shortcuts.down": "a ghluasad sìos air an liosta", + "keyboard_shortcuts.enter": "a dh’fhosgladh a’ phuist", + "keyboard_shortcuts.favourite": "’ga chur ris na h-annsachdan", + "keyboard_shortcuts.favourites": "a dh’fhosgladh liosta nan annsachdan", + "keyboard_shortcuts.federated": "a dh’fhosgladh na loidhne-ama co-naisgte", + "keyboard_shortcuts.heading": "Ath-ghoiridean a’ mheur-chlàir", + "keyboard_shortcuts.home": "a dh’fhosgladh loidhne-ama na dachaigh", + "keyboard_shortcuts.hotkey": "Grad-iuchair", + "keyboard_shortcuts.legend": "a shealltainn a’ chlàir-mhìneachaidh seo", + "keyboard_shortcuts.local": "a dh’fhosgladh na loidhne-ama ionadail", + "keyboard_shortcuts.mention": "a thoirt iomradh dhan ùghdar", + "keyboard_shortcuts.muted": "a dh’fhosgladh liosta nan cleachdaichean mùchte", + "keyboard_shortcuts.my_profile": "a dh’fhosgladh na pròifil agad", + "keyboard_shortcuts.notifications": "a dh’fhosgladh colbh nam brathan", + "keyboard_shortcuts.open_media": "a dh’fhosgladh nam meadhanan", + "keyboard_shortcuts.pinned": "a dh’fhosgladh liosta na postaichean prìnichte", + "keyboard_shortcuts.profile": "a dh’fhosgladh pròifil an ùghdair", + "keyboard_shortcuts.reply": "a fhreagairt", + "keyboard_shortcuts.requests": "a dh’fhosgladh liosta nan iarrtasan leantainn", + "keyboard_shortcuts.search": "a chur am fòcas air a lorg", + "keyboard_shortcuts.spoilers": "a shealltainn/fhalach raon an rabhaidh susbainte", + "keyboard_shortcuts.start": "a dh’fhosgladh colbh “dèan toiseach-tòiseachaidh”", + "keyboard_shortcuts.toggle_hidden": "a shealltainn/fhalach teacsa fo rabhadh susbainte", + "keyboard_shortcuts.toggle_sensitivity": "a shealltainn/fhalach meadhanan", + "keyboard_shortcuts.toot": "a thòiseachadh air post ùr", + "keyboard_shortcuts.unfocus": "a thoirt am fòcas far raon teacsa an sgrìobhaidh/an luirg", + "keyboard_shortcuts.up": "a ghluasad suas air an liosta", + "lightbox.close": "Dùin", + "lightbox.compress": "Co-theannaich bogsa sealladh an deilbh", + "lightbox.expand": "Leudaich bogsa sealladh an deilbh", + "lightbox.next": "Air adhart", + "lightbox.previous": "Air ais", + "lists.account.add": "Cuir ris an liosta", + "lists.account.remove": "Thoir air falbh on liosta", + "lists.delete": "Sguab às an liosta", + "lists.edit": "Deasaich an liosta", + "lists.edit.submit": "Atharraich an tiotal", + "lists.new.create": "Cuir liosta ris", + "lists.new.title_placeholder": "Tiotal na liosta ùir", + "lists.replies_policy.followed": "Cleachdaiche sam bith air a leanas mi", + "lists.replies_policy.list": "Buill na liosta", + "lists.replies_policy.none": "Na seall idir", + "lists.replies_policy.title": "Seall na freagairtean gu:", + "lists.search": "Lorg am measg nan daoine air a leanas tu", + "lists.subheading": "Na liostaichean agad", + "load_pending": "{count, plural, one {# nì ùr} two {# nì ùr} few {# nithean ùra} other {# nì ùr}}", + "loading_indicator.label": "’Ga luchdadh…", + "media_gallery.toggle_visible": "Falaich {number, plural, 1 {an dealbh} one {na dealbhan} two {na dealbhan} few {na dealbhan} other {na dealbhan}}", + "missing_indicator.label": "Cha deach càil a lorg", + "missing_indicator.sublabel": "Cha deach an goireas a lorg", + "mute_modal.duration": "Faide", + "mute_modal.hide_notifications": "A bheil thu airson na brathan fhalach on chleachdaiche seo?", + "mute_modal.indefinite": "Gun chrìoch", + "navigation_bar.apps": "Aplacaidean mobile", + "navigation_bar.blocks": "Cleachdaichean bacte", + "navigation_bar.bookmarks": "Comharran-lìn", + "navigation_bar.community_timeline": "Loidhne-ama ionadail", + "navigation_bar.compose": "Sgrìobh post ùr", + "navigation_bar.direct": "Teachdaireachdan dìreach", + "navigation_bar.discover": "Fidir", + "navigation_bar.domain_blocks": "Àrainnean bacte", + "navigation_bar.edit_profile": "Deasaich a’ phròifil", + "navigation_bar.favourites": "Na h-annsachdan", + "navigation_bar.filters": "Faclan mùchte", + "navigation_bar.follow_requests": "Iarrtasan leantainn", + "navigation_bar.follows_and_followers": "Dàimhean leantainn", + "navigation_bar.info": "Mun fhrithealaiche seo", + "navigation_bar.keyboard_shortcuts": "Grad-iuchraichean", + "navigation_bar.lists": "Liostaichean", + "navigation_bar.logout": "Clàraich a-mach", + "navigation_bar.mutes": "Cleachdaichean mùchte", + "navigation_bar.personal": "Pearsanta", + "navigation_bar.pins": "Postaichean prìnichte", + "navigation_bar.preferences": "Roghainnean", + "navigation_bar.public_timeline": "Loidhne-ama cho-naisgte", + "navigation_bar.security": "Tèarainteachd", + "notification.favourite": "Is annsa le {name} am post agad", + "notification.follow": "Tha {name} a’ leantainn ort a-nis", + "notification.follow_request": "Dh’iarr {name} leantainn ort", + "notification.mention": "Thug {name} iomradh ort", + "notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch", + "notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch", + "notification.reblog": "Bhrosnaich {name} am post agad", + "notification.status": "Tha {name} air rud a phostadh", + "notifications.clear": "Falamhaich na brathan", + "notifications.clear_confirmation": "A bheil thu cinnteach gu bheil thu airson na brathan uile agad fhalamhachadh gu buan?", + "notifications.column_settings.alert": "Brathan deasga", + "notifications.column_settings.favourite": "Na h-annsachdan:", + "notifications.column_settings.filter_bar.advanced": "Seall a h-uile roinn-seòrsa", + "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", + "notifications.column_settings.filter_bar.show": "Seall", + "notifications.column_settings.follow": "Luchd-leantainn ùr:", + "notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:", + "notifications.column_settings.mention": "Iomraidhean:", + "notifications.column_settings.poll": "Toraidhean cunntais-bheachd:", + "notifications.column_settings.push": "Brathan putaidh", + "notifications.column_settings.reblog": "Brosnachaidhean:", + "notifications.column_settings.show": "Seall sa cholbh", + "notifications.column_settings.sound": "Cluich fuaim", + "notifications.column_settings.status": "Postaichean ùra:", + "notifications.column_settings.unread_markers.category": "Comharran nach deach brath a leughadh", + "notifications.filter.all": "Na h-uile", + "notifications.filter.boosts": "Brosnachaidhean", + "notifications.filter.favourites": "Na h-annsachdan", + "notifications.filter.follows": "A’ leantainn air", + "notifications.filter.mentions": "Iomraidhean", + "notifications.filter.polls": "Toraidhean cunntais-bheachd", + "notifications.filter.statuses": "Naidheachdan nan daoine air a leanas tu", + "notifications.grant_permission": "Thoir cead.", + "notifications.group": "{count} brath(an)", + "notifications.mark_as_read": "Cuir comharra gun deach gach brath a leughadh", + "notifications.permission_denied": "Chan eil brathan deasga ri fhaighinn on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", + "notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", + "notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.", + "notifications_permission_banner.enable": "Cuir brathan deasga an comas", + "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de dh’eadar-ghnìomhan a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.", + "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh", + "picture_in_picture.restore": "Thoir air ais e", + "poll.closed": "Dùinte", + "poll.refresh": "Ath-nuadhaich", + "poll.total_people": "{count, plural, one {# neach} two {# neach} few {# daoine} other {# duine}}", + "poll.total_votes": "{count, plural, one {# bhòt} two {# bhòt} few {# bhòtaichean} other {# bhòt}}", + "poll.vote": "Bhòt", + "poll.voted": "Bhòt thu dhan fhreagairt seo", + "poll_button.add_poll": "Cuir cunntas-bheachd ris", + "poll_button.remove_poll": "Thoir air falbh an cunntas-bheachd", + "privacy.change": "Cuir gleus air prìobhaideachd a’ phuist", + "privacy.direct.long": "Chan fhaic ach na cleachdaichean le iomradh orra seo", + "privacy.direct.short": "Dìreach", + "privacy.private.long": "Chan fhaic ach na daoine a tha a’ leantainn ort seo", + "privacy.private.short": "Luchd-leantainn a-mhàin", + "privacy.public.long": "Seallaidh a h-uile duine seo ’s e ’ga shealltainn air loidhnichean-ama poblach", + "privacy.public.short": "Poblach", + "privacy.unlisted.long": "Seallaidh a h-uile duine seo ach cha dèid a shealltainn air loidhnichean-ama poblach", + "privacy.unlisted.short": "Falaichte o liostaichean", + "refresh": "Ath-nuadhaich", + "regeneration_indicator.label": "’Ga luchdadh…", + "regeneration_indicator.sublabel": "Tha inbhir na dachaigh agad ’ga ullachadh!", + "relative_time.days": "{number}l", + "relative_time.hours": "{number}u", + "relative_time.just_now": "an-dràsta", + "relative_time.minutes": "{number}u", + "relative_time.seconds": "{number}d", + "relative_time.today": "an-diugh", + "reply_indicator.cancel": "Sguir dheth", + "report.forward": "Sìn air adhart gu {target}", + "report.forward_hint": "Chaidh an cunntas a chlàradh air frithealaiche eile. A bheil thu airson lethbhreac dhen ghearan a chur dha-san gun ainm cuideachd?", + "report.hint": "Thèid do ghearan a chur gu maoir an fhrithealaiche agad. ’S urrainn dhut mìneachadh a sholar air carson a tha thu a’ gearan mun chunntas gu h-ìosal:", + "report.placeholder": "Beachdan a bharrachd", + "report.submit": "Cuir a-null", + "report.target": "A’ gearan mu {target}", + "search.placeholder": "Lorg", + "search_popout.search_format": "Fòrmat adhartach an luirg", + "search_popout.tips.full_text": "Bheir teacsa sìmplidh dhut na postaichean a sgrìobh thu, a tha nan annsachdan dhut, a bhrosnaich thu no san deach iomradh a thoirt ort cho math ri ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas.", + "search_popout.tips.hashtag": "taga hais", + "search_popout.tips.status": "post", + "search_popout.tips.text": "Bheir teacsa sìmplidh dhut na h-ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas", + "search_popout.tips.user": "cleachdaiche", + "search_results.accounts": "Daoine", + "search_results.hashtags": "Tagaichean hais", + "search_results.statuses": "Postaichean", + "search_results.statuses_fts_disabled": "Chan eil lorg phostaichean a-rèir an susbaint an comas air an fhrithealaiche Mastodon seo.", + "search_results.total": "{count, number} {count, plural, one {toradh} two {thoradh} few {toraidhean} other {toradh}}", + "status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}", + "status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd", + "status.block": "Bac @{name}", + "status.bookmark": "Cuir ris na comharran-lìn", + "status.cancel_reblog_private": "Na brosnaich tuilleadh", + "status.cannot_reblog": "Cha ghabh am post seo brosnachadh", + "status.copy": "Dèan lethbhreac dhen cheangal air a’ phost", + "status.delete": "Sguab às", + "status.detailed_status": "Mion-shealladh a’ chòmhraidh", + "status.direct": "Cuir teachdaireachd dhìreach gu @{name}", + "status.embed": "Leabaich", + "status.favourite": "Cuir ris na h-annsachdan", + "status.filtered": "Criathraichte", + "status.load_more": "Luchdaich barrachd dheth", + "status.media_hidden": "Meadhanan falaichte", + "status.mention": "Thoir iomradh air @{name}", + "status.more": "Barrachd", + "status.mute": "Mùch @{name}", + "status.mute_conversation": "Mùch an còmhradh", + "status.open": "Leudaich am post seo", + "status.pin": "Prìnich ris a’ phròifil", + "status.pinned": "Post prìnichte", + "status.read_more": "Leugh an còrr", + "status.reblog": "Brosnaich", + "status.reblog_private": "Brosnaich leis an t-so-fhaicsinneachd tùsail", + "status.reblogged_by": "Bhrosnaich {name} e", + "status.reblogs.empty": "Chan deach am post seo a bhrosnachadh le duine sam bith fhathast. Nuair a bhrosnaicheas cuideigin e, nochdaidh iad an-seo.", + "status.redraft": "Sguab às ⁊ dèan dreachd ùr", + "status.remove_bookmark": "Thoir an comharra-lìn air falbh", + "status.reply": "Freagair", + "status.replyAll": "Freagair dhan t-snàithlean", + "status.report": "Dèan gearan mu @{name}", + "status.sensitive_warning": "Susbaint fhrionasach", + "status.share": "Co-roinn", + "status.show_less": "Seall nas lugha dheth", + "status.show_less_all": "Seall nas lugha dhen a h-uile", + "status.show_more": "Seall barrachd dheth", + "status.show_more_all": "Seall barrachd dhen a h-uile", + "status.show_thread": "Seall an snàithlean", + "status.uncached_media_warning": "Chan eil seo ri fhaighinn", + "status.unmute_conversation": "Dì-mhùch an còmhradh", + "status.unpin": "Dì-phrìnich on phròifil", + "suggestions.dismiss": "Leig seachad am moladh", + "suggestions.header": "Dh’fhaoidte gu bheil ùidh agad ann an…", + "tabs_bar.federated_timeline": "Co-naisgte", + "tabs_bar.home": "Dachaigh", + "tabs_bar.local_timeline": "Ionadail", + "tabs_bar.notifications": "Brathan", + "tabs_bar.search": "Lorg", + "time_remaining.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air fhàgail", + "time_remaining.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air fhàgail", + "time_remaining.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}} air fhàgail", + "time_remaining.moments": "Cha doir e ach greiseag", + "time_remaining.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air fhàgail", + "timeline_hint.remote_resource_not_displayed": "Cha dèid {stòrasan} o fhrithealaichean eile a shealltainn.", + "timeline_hint.resources.followers": "Luchd-leantainn", + "timeline_hint.resources.follows": "A’ leantainn air", + "timeline_hint.resources.statuses": "Postaichean nas sine", + "trends.counter_by_accounts": "{count, plural, one {Tha {counter} neach} two {Tha {counter} neach} few {Tha {counter} daoine} other {Tha {counter} duine}} a’ bruidhinn", + "trends.trending_now": "A’ treandadh an-dràsta", + "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Slaod ⁊ leig às airson luchdadh suas", + "upload_button.label": "Cuir ris dealbhan, video no faidhle fuaime", + "upload_error.limit": "Luchdaich thu suas na tha ceadaichte dhut a dh’fhaidhlichean mu thràth.", + "upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.", + "upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag", + "upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne", + "upload_form.edit": "Deasaich", + "upload_form.thumbnail": "Atharraich an dealbhag", + "upload_form.undo": "Sguab às", + "upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne", + "upload_modal.analyzing_picture": "A’ sgrùdadh an deilbh…", + "upload_modal.apply": "Cuir an sàs", + "upload_modal.choose_image": "Tagh dealbh", + "upload_modal.description_placeholder": "Lorg Sìm fiù bò, cè ⁊ neup ’ad àth", + "upload_modal.detect_text": "Mothaich dhan teacsa on dealbh", + "upload_modal.edit_media": "Deasaich am meadhan", + "upload_modal.hint": "Briog no slaod an cearcall air an ro-shealladh airson puing an fhòcais a thaghadh a chithear air gach dealbhag dheth.", + "upload_modal.preparing_ocr": "Ag ullachadh OCR…", + "upload_modal.preview_label": "Ro-shealladh ({ratio})", + "upload_progress.label": "’Ga luchdadh suas…", + "video.close": "Dùin a’ video", + "video.download": "Luchdaich am faidhle a-nuas", + "video.exit_fullscreen": "Fàg modh na làn-sgrìn", + "video.expand": "Leudaich a’ video", + "video.fullscreen": "Làn-sgrìn", + "video.hide": "Falaich a’ video", + "video.mute": "Mùch an fhuaim", + "video.pause": "Cuir ’na stad", + "video.play": "Cluich", + "video.unmute": "Dì-mhùch an fhuaim" +} diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 854e31554..14638d625 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -22,6 +22,7 @@ "account.follows.empty": "Esta usuaria aínda non segue a ninguén.", "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", + "account.joined": "Uníuse {date}", "account.last_status": "Última actividade", "account.link_verified_on": "A propiedade desta ligazón foi verificada o {date}", "account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.", @@ -32,13 +33,13 @@ "account.mute_notifications": "Acalar as notificacións de @{name}", "account.muted": "Acalada", "account.never_active": "Nunca", - "account.posts": "Toots", - "account.posts_with_replies": "Toots e respostas", + "account.posts": "Publicacións", + "account.posts_with_replies": "Publicacións e respostas", "account.report": "Informar sobre @{name}", "account.requested": "Agardando aprovación. Preme para desbotar a solicitude de seguimento", "account.share": "Compartir o perfil de @{name}", "account.show_reblogs": "Amosar compartidos de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicacións}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Amosar {domain}", "account.unendorse": "Non amosar no perfil", @@ -71,7 +72,7 @@ "column.lists": "Listaxes", "column.mutes": "Usuarias acaladas", "column.notifications": "Notificacións", - "column.pins": "Toots fixados", + "column.pins": "Publicacións fixadas", "column.public": "Cronoloxía federada", "column_back_button.label": "Volver", "column_header.hide_settings": "Agochar axustes", @@ -84,12 +85,12 @@ "community.column_settings.local_only": "Só local", "community.column_settings.media_only": "Só multimedia", "community.column_settings.remote_only": "Só remoto", - "compose_form.direct_message_warning": "Este toot só será enviado ás usuarias mencionadas.", + "compose_form.direct_message_warning": "Esta publicación só será enviada ás usuarias mencionadas.", "compose_form.direct_message_warning_learn_more": "Coñecer máis", - "compose_form.hashtag_warning": "Este toot non aparecerá baixo ningún cancelo (hashtag) porque non está listado. Só se poden procurar toots públicos por cancelos.", + "compose_form.hashtag_warning": "Esta publicación non aparecerá baixo ningún cancelo (hashtag) porque non está listada. Só se poden procurar publicacións públicas por cancelos.", "compose_form.lock_disclaimer": "A túa conta non está {locked}. Todas poden seguirte para ollar os teus toots só para seguidoras.", "compose_form.lock_disclaimer.lock": "bloqueada", - "compose_form.placeholder": "Qué contas?", + "compose_form.placeholder": "Que contas?", "compose_form.poll.add_option": "Engadir unha opción", "compose_form.poll.duration": "Duración da enquisa", "compose_form.poll.option_placeholder": "Opción {number}", @@ -100,16 +101,16 @@ "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}", "compose_form.sensitive.marked": "{count, plural, one {Multimedia marcado como sensible} other {Multimedia marcados como sensibles}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", - "compose_form.spoiler.marked": "O texto está agochado tras un aviso", - "compose_form.spoiler.unmarked": "O texto non está agochado", + "compose_form.sensitive.unmarked": "{count, plural, one {Multimedia non marcado como sensible} other {Multimedia non marcado como sensible}}", + "compose_form.spoiler.marked": "Retirar o aviso sobre o contido", + "compose_form.spoiler.unmarked": "Engadir aviso sobre o contido", "compose_form.spoiler_placeholder": "Escribe o teu aviso aquí", "confirmation_modal.cancel": "Desbotar", "confirmations.block.block_and_report": "Bloquear e denunciar", "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "Tes a certeza de querer bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "Tes a certeza de querer eliminar este toot?", + "confirmations.delete.message": "Tes a certeza de querer eliminar esta publicación?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?", "confirmations.domain_block.confirm": "Agochar dominio enteiro", @@ -120,7 +121,7 @@ "confirmations.mute.explanation": "Isto agochará as publicacións delas ou nas que as mencionen, mais permitirá que vexan as túas publicacións e sexan seguidoras túas.", "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", - "confirmations.redraft.message": "Tes a certeza de querer eliminar este toot e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", + "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -133,7 +134,7 @@ "directory.local": "Só de {domain}", "directory.new_arrivals": "Recén chegadas", "directory.recently_active": "Activas recentemente", - "embed.instructions": "Engade este toot ó teu sitio web copiando o seguinte código.", + "embed.instructions": "Engade esta publicación ó teu sitio web copiando o seguinte código.", "embed.preview": "Así será mostrado:", "emoji_button.activity": "Actividade", "emoji_button.custom": "Personalizado", @@ -150,23 +151,24 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", "empty_column.account_suspended": "Conta suspendida", - "empty_column.account_timeline": "Non hai toots aquí!", + "empty_column.account_timeline": "Non hai publicacións aquí!", "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.", - "empty_column.bookmarked_statuses": "Aínda non marcaches ningún toot. Cando o fagas, aparecerán aquí.", + "empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.", "empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!", "empty_column.direct": "Aínda non tes mensaxes directas. Cando envíes ou recibas unha, amosarase aquí.", "empty_column.domain_blocks": "Aínda non hai dominios agochados.", - "empty_column.favourited_statuses": "Aínda non tes toots favoritos. Cando che goste algún, aparecerá aquí.", - "empty_column.favourites": "A ninguén lle gostou este toot polo momento. Cando a alguén lle goste, aparecerá aquí.", + "empty_column.favourited_statuses": "Aínda non tes publicacións favoritas. Cando che guste algunha, aparecerá aquí.", + "empty_column.favourites": "A ninguén lle gustou esta publicación polo momento. Cando a alguén lle guste, aparecerá aquí.", + "empty_column.follow_recommendations": "Semella que non temos suxestións para ti. Podes utilizar a busca para atopar persoas que coñezas ou explorar os cancelos en voga.", "empty_column.follow_requests": "Non tes peticións de seguimento. Cando recibas unha, amosarase aquí.", "empty_column.hashtag": "Aínda non hai nada con este cancelo.", - "empty_column.home": "A túa cronoloxía inicial está baleira! Visita {public} ou emprega a procura para atopar outras usuarias.", - "empty_column.home.public_timeline": "a cronoloxía pública", + "empty_column.home": "A túa cronoloxía inicial está baleira! Segue outras usuarias para enchela. {suggestions}", + "empty_column.home.suggestions": "Ver suxestións", "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.", - "empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.", + "empty_column.notifications": "Aínda non tes notificacións. Aparecerán cando outras persoas interactúen contigo.", "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo", "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.", "error.unexpected_crash.explanation_addons": "Non se puido mostrar correctamente a páxina. Habitualmente este erro está causado por algún engadido do navegador ou ferramentas de tradución automática.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", + "follow_recommendations.done": "Feito", + "follow_recommendations.heading": "Segue a persoas das que queiras ler publicacións! Aqui tes unhas suxestións.", + "follow_recommendations.lead": "As publicacións das persoas que segues aparecerán na túa cronoloxía de inicio ordenadas temporalmente. Non teñas medo a equivocarte, podes deixar de seguirlas igual de fácil en calquera momento!", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rexeitar", "follow_requests.unlocked_explanation": "Malia que a túa conta non é privada, a administración de {domain} pensou que quizabes terías que revisar de xeito manual as solicitudes de seguiminto.", @@ -203,57 +208,40 @@ "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}}", - "introduction.federation.action": "Seguinte", - "introduction.federation.federated.headline": "Federado", - "introduction.federation.federated.text": "Publicacións públicas doutros servidores do fediverso aparecerán na cronoloxía federada.", - "introduction.federation.home.headline": "Inicio", - "introduction.federation.home.text": "Publicacións de persoas que ti segues aparecerán na cronoloxía do inicio. Podes seguir calquera persoa en calquera servidor!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Publicacións públicas de persoas no teu mesmo servidor aparecerán na cronoloxía local.", - "introduction.interactions.action": "Rematar titorial!", - "introduction.interactions.favourite.headline": "Favorito", - "introduction.interactions.favourite.text": "Podes gardar un toot para depois e facer saber ó autor que che gostou marcandoo coma favorito.", - "introduction.interactions.reblog.headline": "Promover", - "introduction.interactions.reblog.text": "Podes compartir os toots doutras persoas coas túas seguidoras.", - "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Podes responder ós toots doutras persoas e ós teus propios, así ficarán encadeados nunha conversa.", - "introduction.welcome.action": "Imos!", - "introduction.welcome.headline": "Primeiros pasos", - "introduction.welcome.text": "Benvida ó fediverso! Nun intre poderás difundir mensaxes e falar coas túas amizades nun grande número de servidores. Mais este servidor, {domain}, é especial—hospeda o teu perfil, por iso lémbra o seu nome.", - "keyboard_shortcuts.back": "para volver atrás", - "keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas", - "keyboard_shortcuts.boost": "promover", - "keyboard_shortcuts.column": "para destacar un toot nunha das columnas", - "keyboard_shortcuts.compose": "para destacar a área de escritura", + "keyboard_shortcuts.back": "Volver atrás", + "keyboard_shortcuts.blocked": "Abrir lista de usuarias bloqueadas", + "keyboard_shortcuts.boost": "Promover publicación", + "keyboard_shortcuts.column": "Destacar unha columna", + "keyboard_shortcuts.compose": "Por o cursor na área de escritura", "keyboard_shortcuts.description": "Descrición", - "keyboard_shortcuts.direct": "para abrir a columna de mensaxes directas", - "keyboard_shortcuts.down": "para mover cara abaixo na listaxe", - "keyboard_shortcuts.enter": "para abrir toot", - "keyboard_shortcuts.favourite": "para engadir a favoritos", - "keyboard_shortcuts.favourites": "para abrir a listaxe dos favoritos", - "keyboard_shortcuts.federated": "para abrir a cronoloxía federada", + "keyboard_shortcuts.direct": "Para abrir a columna de mensaxes directas", + "keyboard_shortcuts.down": "Para mover cara abaixo na listaxe", + "keyboard_shortcuts.enter": "Para abrir publicación", + "keyboard_shortcuts.favourite": "Para engadir a favoritos", + "keyboard_shortcuts.favourites": "Para abrir a listaxe dos favoritos", + "keyboard_shortcuts.federated": "Para abrir a cronoloxía federada", "keyboard_shortcuts.heading": "Atallos do teclado", - "keyboard_shortcuts.home": "para abrir a cronoloxía inicial", + "keyboard_shortcuts.home": "Para abrir a cronoloxía inicial", "keyboard_shortcuts.hotkey": "Tecla de atallo", - "keyboard_shortcuts.legend": "para amosar esta lenda", - "keyboard_shortcuts.local": "para abrir a cronoloxía local", - "keyboard_shortcuts.mention": "para mencionar a autora", - "keyboard_shortcuts.muted": "abrir lista de usuarias acaladas", - "keyboard_shortcuts.my_profile": "para abrir o teu perfil", - "keyboard_shortcuts.notifications": "para abrir a columna das notificacións", - "keyboard_shortcuts.open_media": "para abrir o contido multimedia", - "keyboard_shortcuts.pinned": "para abrir a listaxe dos toots fixados", - "keyboard_shortcuts.profile": "para abrir o perfil da autora", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "para abrir a listaxe das peticións de seguimento", - "keyboard_shortcuts.search": "para destacar a procura", - "keyboard_shortcuts.spoilers": "mostrar/ocultar campo CW", - "keyboard_shortcuts.start": "para abrir a columna dos \"primeiros pasos\"", - "keyboard_shortcuts.toggle_hidden": "para amosar/agochar texto detrás do aviso de contido (AC)", - "keyboard_shortcuts.toggle_sensitivity": "para amosar/agochar contido multimedia", - "keyboard_shortcuts.toot": "para escribir un novo toot", - "keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura", - "keyboard_shortcuts.up": "para mover cara arriba na listaxe", + "keyboard_shortcuts.legend": "Para amosar esta lenda", + "keyboard_shortcuts.local": "Para abrir a cronoloxía local", + "keyboard_shortcuts.mention": "Para mencionar a autora", + "keyboard_shortcuts.muted": "Abrir lista de usuarias acaladas", + "keyboard_shortcuts.my_profile": "Para abrir o teu perfil", + "keyboard_shortcuts.notifications": "Para abrir a columna das notificacións", + "keyboard_shortcuts.open_media": "Para abrir o contido multimedia", + "keyboard_shortcuts.pinned": "Para abrir a listaxe das publicacións fixadas", + "keyboard_shortcuts.profile": "Para abrir o perfil da autora", + "keyboard_shortcuts.reply": "Para responder", + "keyboard_shortcuts.requests": "Para abrir a listaxe das peticións de seguimento", + "keyboard_shortcuts.search": "Por cursor na caixa de busca", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar campo CW", + "keyboard_shortcuts.start": "Para abrir a columna dos \"primeiros pasos\"", + "keyboard_shortcuts.toggle_hidden": "Para mostrar o texto tras Aviso de Contido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "Para amosar/agochar contido multimedia", + "keyboard_shortcuts.toot": "Para escribir unha nova publicación", + "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura", + "keyboard_shortcuts.up": "Para mover cara arriba na listaxe", "lightbox.close": "Fechar", "lightbox.compress": "Comprimir a caixa de vista da imaxe", "lightbox.expand": "Expandir a caixa de vista da imaxe", @@ -284,7 +272,7 @@ "navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Cronoloxía local", - "navigation_bar.compose": "Escribir un novo toot", + "navigation_bar.compose": "Escribir unha nova publicación", "navigation_bar.direct": "Mensaxes directas", "navigation_bar.discover": "Descubrir", "navigation_bar.domain_blocks": "Dominios agochados", @@ -299,17 +287,17 @@ "navigation_bar.logout": "Pechar sesión", "navigation_bar.mutes": "Usuarias silenciadas", "navigation_bar.personal": "Persoal", - "navigation_bar.pins": "Toots fixados", + "navigation_bar.pins": "Publicacións fixadas", "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Cronoloxía federada", "navigation_bar.security": "Seguranza", - "notification.favourite": "{name} marcou o teu toot coma favorito", + "notification.favourite": "{name} marcou a túa publicación como favorita", "notification.follow": "{name} comezou a seguirte", "notification.follow_request": "{name} solicitou seguirte", "notification.mention": "{name} mencionoute", "notification.own_poll": "A túa enquisa rematou", "notification.poll": "Unha enquisa na que votaches rematou", - "notification.reblog": "{name} compartiu o teu toot", + "notification.reblog": "{name} compartiu a túa publicación", "notification.status": "{name} publicou", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", @@ -326,7 +314,8 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir son", - "notifications.column_settings.status": "Novos toots:", + "notifications.column_settings.status": "Novas publicacións:", + "notifications.column_settings.unread_markers.category": "Indicadores de notificacións non lidas", "notifications.filter.all": "Todo", "notifications.filter.boosts": "Compartidos", "notifications.filter.favourites": "Favoritos", @@ -381,21 +370,21 @@ "search_popout.search_format": "Formato de procura avanzada", "search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", "search_popout.tips.hashtag": "cancelo", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "publicación", "search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e cancelos", "search_popout.tips.user": "usuaria", "search_results.accounts": "Persoas", "search_results.hashtags": "Cancelos", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.", + "search_results.statuses": "Publicacións", + "search_results.statuses_fts_disabled": "Procurar publicacións polo seu contido non está activado neste servidor do Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este toot na interface de moderación", + "status.admin_status": "Abrir esta publicación na interface de moderación", "status.block": "Bloquear a @{name}", "status.bookmark": "Marcar", "status.cancel_reblog_private": "Desfacer compartido", "status.cannot_reblog": "Esta publicación non pode ser promovida", - "status.copy": "Copiar ligazón ó toot", + "status.copy": "Copiar ligazón á publicación", "status.delete": "Eliminar", "status.detailed_status": "Vista detallada da conversa", "status.direct": "Mensaxe directa a @{name}", @@ -408,14 +397,14 @@ "status.more": "Máis", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversa", - "status.open": "Expandir este toot", + "status.open": "Expandir esta publicación", "status.pin": "Fixar no perfil", - "status.pinned": "Toot fixado", + "status.pinned": "Publicación fixada", "status.read_more": "Ler máis", "status.reblog": "Promover", "status.reblog_private": "Compartir coa audiencia orixinal", "status.reblogged_by": "{name} promoveu", - "status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.", + "status.reblogs.empty": "Aínda ninguén promoveu esta publicación. Cando alguén o faga, amosarase aquí.", "status.redraft": "Eliminar e reescribir", "status.remove_bookmark": "Eliminar marcador", "status.reply": "Responder", @@ -446,7 +435,7 @@ "timeline_hint.remote_resource_not_displayed": "Non se mostran {resource} desde outros servidores.", "timeline_hint.resources.followers": "Seguidoras", "timeline_hint.resources.follows": "Seguindo", - "timeline_hint.resources.statuses": "Toots antigos", + "timeline_hint.resources.statuses": "Publicacións antigas", "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} comentando", "trends.trending_now": "Tendencias actuais", "ui.beforeunload": "O borrador perderase se saes de Mastodon.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 123b2e855..ecc1b9eb1 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -22,6 +22,7 @@ "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.", "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", + "account.joined": "Joined {date}", "account.last_status": "פעילות אחרונה", "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}", "account.locked_info": "מצב הפרטיות של החשבון הנוכחי הוגדר כנעול. בעל החשבון קובע באופן פרטני מי יכול לעקוב אחריו.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.", "empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים.", - "empty_column.home.public_timeline": "ציר זמן בין-קהילתי", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "אין עדיין מאום ברשימה.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "קבלה", "follow_request.reject": "דחיה", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "ניווט חזרה", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "להדהד", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 7e0fe4e7a..0b987d38d 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -22,6 +22,7 @@ "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।", "account.follows_you": "आपको फॉलो करता है", "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", + "account.joined": "Joined {date}", "account.last_status": "अंतिम सक्रिय", "account.link_verified_on": "इस लिंक का स्वामित्व {date} को चेक किया गया था", "account.locked_info": "यह खाता गोपनीयता स्थिति लॉक करने के लिए सेट है। मालिक मैन्युअल रूप से समीक्षा करता है कि कौन उनको फॉलो कर सकता है।", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।", "empty_column.favourited_statuses": "आपके पास अभी कोई भी चहिता टूट नहीं है. जब आप किसी टूट को पसंद (स्टार) करेंगे, तब वो यहाँ दिखेगा।", "empty_column.favourites": "अभी तक किसी ने भी इस टूट को पसंद (स्टार) नहीं किया है. जब भी कोई इसे पसंद करेगा, उनका नाम यहाँ दिखेगा।", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "अभी तक किसी ने भी आपका अनुसरण करने की विनती नहीं की है. जब भी कोई आपको विनती भेजेगा, वो यहाँ दिखेगी.", "empty_column.hashtag": "यह हैशटैग अभी तक खाली है।", "empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।", - "empty_column.home.public_timeline": "सार्वजनिक कालक्रम", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.", "empty_column.lists": "आपके पास अभी तक कोई सूची नहीं है। जब आप एक बनाते हैं, तो यह यहां दिखाई देगा।", "empty_column.mutes": "आपने अभी तक किसी भी उपयोगकर्ता को म्यूट नहीं किया है।", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "अधिकार दें", "follow_request.reject": "अस्वीकार करें", "follow_requests.unlocked_explanation": "हालाँकि आपका खाता लॉक नहीं है, फिर भी {domain} डोमेन स्टाफ ने सोचा कि आप इन खातों के मैन्युअल अनुरोधों की समीक्षा करना चाहते हैं।", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "अगला", - "introduction.federation.federated.headline": "फ़ेडरेटेड", - "introduction.federation.federated.text": "महासंघ के अन्य सर्वरों से सार्वजनिक पद संघटित समय-सीमा में दिखाई देंगे।", - "introduction.federation.home.headline": "होम", - "introduction.federation.home.text": "आपके द्वारा अनुसरण किए जाने वाले लोगों के पोस्ट आपके होम फीड में दिखाई देंगे। आप किसी भी सर्वर पर किसी को भी फॉलो कर सकते हैं!", - "introduction.federation.local.headline": "लोकल", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "पसंदीदा", - "introduction.interactions.favourite.text": "आप बाद में इसके लिए एक टोट को बचा सकते हैं, और लेखक को यह बता दें कि आपको यह पसंद आया, इसे फेवर करके।", - "introduction.interactions.reblog.headline": "बूस्ट", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "जवाब", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "आइए शुरू करते हैं!", - "introduction.welcome.headline": "पहले कदम", - "introduction.welcome.text": "फेडवर्स में आपका स्वागत है! कुछ ही क्षणों में, आप संदेशों को प्रसारित करने और अपने दोस्तों से विस्तृत सर्वर पर बात करने में सक्षम होंगे। लेकिन यह सर्वर, {domain}, विशेष है - यह आपकी प्रोफ़ाइल को होस्ट करता है, इसलिए इसका नाम याद रखें।", "keyboard_shortcuts.back": "वापस जाने के लिए", "keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए", "keyboard_shortcuts.boost": "बढ़ावा देने के लिए", @@ -274,7 +262,7 @@ "lists.subheading": "आपकी सूचियाँ", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "लोड हो रहा है...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "नहीं मिला", "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "कॉलम में दिखाएँ", "notifications.column_settings.sound": "ध्वनि चलाएँ", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "सभी", "notifications.filter.boosts": "बूस्ट", "notifications.filter.favourites": "पसंदीदा", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index f1b78eda4..77da48c90 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu", "account.cancel_follow_request": "Otkaži zahtjev za praćenje", "account.direct": "Pošalji poruku @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Nemoj me obavjestiti kada @{name} napravi objavu", "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Obavjesti me kada @{name} napravi objavu", "account.endorse": "Istakni na profilu", "account.follow": "Prati", "account.followers": "Pratitelji", @@ -22,6 +22,7 @@ "account.follows.empty": "Korisnik/ca još ne prati nikoga.", "account.follows_you": "Prati te", "account.hide_reblogs": "Sakrij boostove od @{name}", + "account.joined": "Joined {date}", "account.last_status": "Posljednja aktivnost", "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}", "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.", @@ -122,16 +123,16 @@ "confirmations.redraft.confirm": "Izbriši i ponovno uredi", "confirmations.redraft.message": "Jeste li sigurni da želite izbrisati ovaj toot i ponovno ga urediti? Favoriti i boostovi bit će izgubljeni, a odgovori na izvornu objavu bit će odvojeni.", "confirmations.reply.confirm": "Odgovori", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.message": "Odgovaranje sada će prepisati poruku koju upravo pišete. Jeste li sigurni da želite nastaviti?", "confirmations.unfollow.confirm": "Prestani pratiti", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "confirmations.unfollow.message": "Jeste li sigurni da želite prestati pratiti {name}?", "conversation.delete": "Izbriši razgovor", "conversation.mark_as_read": "Označi kao pročitano", "conversation.open": "Prikaži razgovor", "conversation.with": "S {names}", - "directory.federated": "From known fediverse", + "directory.federated": "Iz znanog fediversa", "directory.local": "Samo iz {domain}", - "directory.new_arrivals": "New arrivals", + "directory.new_arrivals": "Novi korisnici", "directory.recently_active": "Nedavno aktivni", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Evo kako će izgledati:", @@ -153,16 +154,17 @@ "empty_column.account_timeline": "Ovdje nema tootova!", "empty_column.account_unavailable": "Profil nije dostupan", "empty_column.blocks": "Još niste blokirali nikoga.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "Još nemaš niti jedan označeni toot. Kada označiš jedan, prikazad će se ovdje.", "empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.domain_blocks": "Još nema blokiranih domena.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.", "empty_column.home": "Vaša početna vremenska crta je prazna! Posjetite {public} ili koristite tražilicu kako biste započeli i upoznali druge korisnike.", - "empty_column.home.public_timeline": "javnu vremensku crtu", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "Niste utišali nijednog korisnika.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Prijavi problem", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autoriziraj", "follow_request.reject": "Odbij", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dan} other {# dana}}", "intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}", - "introduction.federation.action": "Sljedeće", - "introduction.federation.federated.headline": "Federalno", - "introduction.federation.federated.text": "Javne objave s drugih poslužitelja fediverzuma prikazat će se u federalnoj vremenskoj crti.", - "introduction.federation.home.headline": "Početna", - "introduction.federation.home.text": "Objave ljudi koje pratite prikazat će se na Vašoj početnoj stranici. Možete pratiti bilo koga na bilo kojem poslužitelju!", - "introduction.federation.local.headline": "Lokalno", - "introduction.federation.local.text": "Javne objave ljudi na istom poslužitelju prikazat će se u lokalnoj vremenskoj crti.", - "introduction.interactions.action": "Dovrši tutorijal!", - "introduction.interactions.favourite.headline": "Favoriti", - "introduction.interactions.favourite.text": "Toot možete spremiti za kasnije i javiti njegovom autoru da Vam se sviđa tako što ga označite kao favorit.", - "introduction.interactions.reblog.headline": "Boostanje", - "introduction.interactions.reblog.text": "Tuđe tootove možete dijeliti sa svojim pratiteljima tako što ih boostate.", - "introduction.interactions.reply.headline": "Odgovaranje", - "introduction.interactions.reply.text": "Možete odgovoriti na tuđe i svoje tootove, čime će se oni povezati u razgovor.", - "introduction.welcome.action": "Krenimo!", - "introduction.welcome.headline": "Prvi koraci", - "introduction.welcome.text": "Dobro došli na fediverzum! Za nekoliko trenutaka moći ćete dijeliti poruke i razgovara sa svojim prijateljima kroz široki raspon poslužitelja. Ali ovaj poslužitelj, {domain}, je poseban — on sadrži Vaš profil, pa zapamtite njegovo ime.", "keyboard_shortcuts.back": "za vraćanje natrag", "keyboard_shortcuts.blocked": "za otvaranje liste blokiranih korisnika", "keyboard_shortcuts.boost": "za boostanje", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Sve", "notifications.filter.boosts": "Boostovi", "notifications.filter.favourites": "Favoriti", @@ -381,7 +370,7 @@ "search_popout.search_format": "Format naprednog pretraživanja", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "status", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "korisnik", "search_results.accounts": "Ljudi", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index a0ae7305c..d20c893c8 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -9,7 +9,7 @@ "account.browse_more_on_origin_server": "További böngészés az eredeti profilon", "account.cancel_follow_request": "Követési kérelem törlése", "account.direct": "Közvetlen üzenet @{name} számára", - "account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl", + "account.disable_notifications": "Ne figyelmeztessen, ha @{name} bejegyzést tesz közzé", "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", "account.enable_notifications": "Figyelmeztess, ha @{name} tülköl", @@ -22,6 +22,7 @@ "account.follows.empty": "Ez a felhasználó még senkit sem követ.", "account.follows_you": "Követ téged", "account.hide_reblogs": "@{name} megtolásainak némítása", + "account.joined": "Joined {date}", "account.last_status": "Utoljára aktív", "account.link_verified_on": "A linket ellenőriztük: {date}", "account.locked_info": "Ez a fiók zárt. A tulajdonos engedélyezi, hogy ki követheti őt.", @@ -32,8 +33,8 @@ "account.mute_notifications": "@{name} értesítéseinek némítása", "account.muted": "Némítva", "account.never_active": "Soha", - "account.posts": "Tülkölés", - "account.posts_with_replies": "Tülkölés és válaszok", + "account.posts": "Bejegyzések", + "account.posts_with_replies": "Bejegyzések és válaszok", "account.report": "@{name} jelentése", "account.requested": "Engedélyre vár. Kattints a követési kérés visszavonásához", "account.share": "@{name} profiljának megosztása", @@ -71,7 +72,7 @@ "column.lists": "Listák", "column.mutes": "Némított felhasználók", "column.notifications": "Értesítések", - "column.pins": "Kitűzött tülkök", + "column.pins": "Kitűzött bejegyzések", "column.public": "Nyilvános idővonal", "column_back_button.label": "Vissza", "column_header.hide_settings": "Beállítások elrejtése", @@ -84,10 +85,10 @@ "community.column_settings.local_only": "Csak helyi", "community.column_settings.media_only": "Csak média", "community.column_settings.remote_only": "Csak távoli", - "compose_form.direct_message_warning": "Ezt a tülköt csak a benne megemlített felhasználók láthatják majd.", + "compose_form.direct_message_warning": "Ezt a bejegyzést csak a benne megemlített felhasználók láthatják majd.", "compose_form.direct_message_warning_learn_more": "Tudj meg többet", - "compose_form.hashtag_warning": "Ez a tülköd nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak nyilvános tülkök kereshetőek hashtaggel.", - "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt üzeneteidet.", + "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel listázatlan. Csak a nyilvános bejegyzések kereshetők hashtaggel.", + "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.", "compose_form.lock_disclaimer.lock": "lezárva", "compose_form.placeholder": "Mi jár a fejedben?", "compose_form.poll.add_option": "Lehetőség hozzáadása", @@ -109,7 +110,7 @@ "confirmations.block.confirm": "Letiltás", "confirmations.block.message": "Biztos, hogy letiltod: {name}?", "confirmations.delete.confirm": "Törlés", - "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a tülkölést?", + "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a bejegyzést?", "confirmations.delete_list.confirm": "Törlés", "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?", "confirmations.domain_block.confirm": "Teljes domain elrejtése", @@ -150,19 +151,20 @@ "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", "empty_column.account_suspended": "Fiók felfüggesztve", - "empty_column.account_timeline": "Itt nincs tülkölés!", + "empty_column.account_timeline": "Itt nincs bejegyzés!", "empty_column.account_unavailable": "A profil nem érhető el", "empty_column.blocks": "Még senkit sem tiltottál le.", - "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött tülköd sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.", + "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.", "empty_column.community": "A helyi idővonal üres. Tülkölj egyet nyilvánosan, hogy elindítsd az eseményeket!", "empty_column.direct": "Még nincs egy közvetlen üzeneted sem. Ha küldesz vagy kapsz egyet, itt fog megjelenni.", "empty_column.domain_blocks": "Még nem rejtettél el egyetlen domaint sem.", "empty_column.favourited_statuses": "Még nincs egy kedvenc tülköd sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.", "empty_column.favourites": "Még senki sem jelölte ezt a tülköt kedvencként. Ha valaki mégis megteszi, itt fogjuk mutatni.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Még nincs egy követési kérésed sem. Ha kapsz egyet, itt fogjuk feltüntetni.", "empty_column.hashtag": "Jelenleg nem található semmi ezzel a hashtaggel.", "empty_column.home": "A saját idővonalad üres! Látogasd meg a {public} oldalt vagy használd a keresőt, hogy megismerj másokat.", - "empty_column.home.public_timeline": "a nyilvános idővonal", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "A lista jelenleg üres. Ha a listatagok tülkölnek, itt fognak megjelenni.", "empty_column.lists": "Még nem hoztál létre listát. Ha csinálsz egyet, itt látszik majd.", "empty_column.mutes": "Még egy felhasználót sem némítottál le.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", + "follow_recommendations.done": "Kész", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Engedélyezés", "follow_request.reject": "Elutasítás", "follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni a fiók követési kéréseit.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Következő", - "introduction.federation.federated.headline": "Föderációs", - "introduction.federation.federated.text": "A fediverzum más szervereiről származó nyilvános tülkök a föderációs idővonalon jelennek meg.", - "introduction.federation.home.headline": "Kezdőlap", - "introduction.federation.home.text": "A saját idővonaladon az általad követett emberek tülkjei jelennek meg. Bárkit követhetsz, bármelyik kiszolgálón.", - "introduction.federation.local.headline": "Helyi", - "introduction.federation.local.text": "A helyi idővonalon a veled közös kiszolgálón lévő emberek nyilvános tülkjei jelennek meg.", - "introduction.interactions.action": "Oktatóanyag befejezése!", - "introduction.interactions.favourite.headline": "Kedvenc", - "introduction.interactions.favourite.text": "A kedvenc funkcióval elrakhatsz későbbre egy tülköt, illetve közölheted a szerzővel, hogy tetszett a megosztása.", - "introduction.interactions.reblog.headline": "Megtolás", - "introduction.interactions.reblog.text": "A saját követőiddel mások tülkjeit is megoszthatod úgy, hogy megtolod őket.", - "introduction.interactions.reply.headline": "Válasz", - "introduction.interactions.reply.text": "Saját vagy mások tülkjeire válaszolva egy beszélgetési láncot alakíthatsz ki.", - "introduction.welcome.action": "Csapjunk bele!", - "introduction.welcome.headline": "Első lépések", - "introduction.welcome.text": "Üdv a fediverzumban! Pár pillanat múlva már küldheted is üzeneteidet barátaidnak bármely szerveren. Ez a szerver {domain} viszont különleges. Ez tartja nyilván a profilod, szóval jegyezd meg a nevét.", "keyboard_shortcuts.back": "visszafelé navigálás", "keyboard_shortcuts.blocked": "letiltott felhasználók listájának megnyitása", "keyboard_shortcuts.boost": "megtolás", @@ -251,7 +239,7 @@ "keyboard_shortcuts.start": "\"Első lépések\" megnyitása", "keyboard_shortcuts.toggle_hidden": "tartalmi figyelmeztetéssel ellátott szöveg mutatása/elrejtése", "keyboard_shortcuts.toggle_sensitivity": "média mutatása/elrejtése", - "keyboard_shortcuts.toot": "új tülk írása", + "keyboard_shortcuts.toot": "új bejegyzés írása", "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele", "keyboard_shortcuts.up": "felfelé mozdítás a listában", "lightbox.close": "Bezárás", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", "notifications.column_settings.status": "Új tülkök:", + "notifications.column_settings.unread_markers.category": "Olvasatlan értesítés jelzők", "notifications.filter.all": "Mind", "notifications.filter.boosts": "Megtolások", "notifications.filter.favourites": "Kedvencnek jelölések", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 5cdba58e8..a3fd51347 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -22,6 +22,7 @@ "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", + "account.joined": "Joined {date}", "account.last_status": "Վերջին թութը", "account.link_verified_on": "Սոյն յղման տիրապետումը ստուգուած է՝ {date}֊ին", "account.locked_info": "Սոյն հաշուի գաղտնիութեան մակարդակը նշուած է որպէս՝ փակ։ Հաշուի տէրն ընտրում է, թէ ով կարող է հետեւել իրեն։", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։", "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։", "empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։", "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։", "empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։", - "empty_column.home.public_timeline": "հրապարակային հոսք", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։", "empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։", "empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# օր} other {# օր}}", "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}", "intervals.full.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}}", - "introduction.federation.action": "Յաջորդ", - "introduction.federation.federated.headline": "Դաշնային", - "introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։", - "introduction.federation.home.headline": "Հիմնական", - "introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։", - "introduction.federation.local.headline": "Տեղային", - "introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։", - "introduction.interactions.action": "Աւարտել թթի դասընթացը", - "introduction.interactions.favourite.headline": "Նախընտրելի", - "introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հաւանելով այն։", - "introduction.interactions.reblog.headline": "Տարածել", - "introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։", - "introduction.interactions.reply.headline": "Պատասխանել", - "introduction.interactions.reply.text": "Արձագանքիր ուրիշների եւ քո թթերին, դրանք կը դարսուեն մէկ ընդհանուր քննարկման շղթայով։", - "introduction.welcome.action": "Գնացի՜նք։", - "introduction.welcome.headline": "Առաջին քայլեր", - "introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։", "keyboard_shortcuts.back": "ետ նաւարկելու համար", "keyboard_shortcuts.blocked": "արգելափակուած օգտատէրերի ցանկը բացելու համար", "keyboard_shortcuts.boost": "տարածելու համար", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Ցուցադրել սիւնում", "notifications.column_settings.sound": "Ձայն հանել", "notifications.column_settings.status": "Նոր թթեր։", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Բոլորը", "notifications.filter.boosts": "Տարածածները", "notifications.filter.favourites": "Հաւանածները", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 24f100b6a..ef76f295b 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -22,6 +22,7 @@ "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", + "account.joined": "Bergabung {date}", "account.last_status": "Terakhir aktif", "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}", "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikuti mereka.", @@ -49,7 +50,7 @@ "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", "alert.rate_limited.title": "Batasan tingkat", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Ups!", "announcement.announcement": "Pengumuman", "autosuggest_hashtag.per_week": "{count} per minggu", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Tidak ada topik tersembunyi.", "empty_column.favourited_statuses": "Anda belum memiliki toot favorit. Ketika Anda mengirim atau menerimanya, maka akan muncul di sini.", "empty_column.favourites": "Tidak ada seorangpun yang memfavoritkan toot ini. Ketika seseorang melakukannya, maka akan muncul disini.", + "empty_column.follow_recommendations": "Sepertinya tak ada saran yang dibuat untuk Anda. Anda dapat coba menggunakan pencarian untuk menemukan orang yang Anda ketahui atau menjelajahi tagar yang sedang tren.", "empty_column.follow_requests": "Anda belum memiliki permintaan mengikuti. Ketika Anda menerimanya, maka akan muncul disini.", "empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.", "empty_column.home": "Linimasa anda kosong! Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.", - "empty_column.home.public_timeline": "linimasa publik", + "empty_column.home.suggestions": "Lihat beberapa saran", "empty_column.list": "Tidak ada postingan di list ini. Ketika anggota dari list ini memposting status baru, status tersebut akan tampil disini.", "empty_column.lists": "Anda belum memiliki daftar. Ketika Anda membuatnya, maka akan muncul disini.", "empty_column.mutes": "Anda belum membisukan siapapun.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi murni.", "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", + "follow_recommendations.done": "Selesai", + "follow_recommendations.heading": "Ikuti orang yang ingin Anda lihat kirimannya! Ini ada beberapa saran.", + "follow_recommendations.lead": "Kiriman dari orang yang Anda ikuti akan tampil berdasar waktu di beranda Anda. Jangan takut membuat kesalahan, Anda dapat berhenti mengikuti mereka dengan mudah kapan saja!", "follow_request.authorize": "Izinkan", "follow_request.reject": "Tolak", "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, other {# hari}}", "intervals.full.hours": "{number, plural, other {# jam}}", "intervals.full.minutes": "{number, plural, other {# menit}}", - "introduction.federation.action": "Selanjutnya", - "introduction.federation.federated.headline": "Gabungan", - "introduction.federation.federated.text": "Pos publik dari server fediverse lain akan muncul di linimasa gabungan.", - "introduction.federation.home.headline": "Beranda", - "introduction.federation.home.text": "Pos dari orang yang Anda ikuti akan muncul di beranda. Anda dapat mengikuti siapa pun dari server mana pun!", - "introduction.federation.local.headline": "Lokal", - "introduction.federation.local.text": "Pos publik dari orang yang ada di server sama denganmu akan muncul di linimasa lokal.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favorit", - "introduction.interactions.favourite.text": "Anda dapat menyimpan toot untuk dibaca nanti, biarkan penulis tahu Anda menyukainya, dengan memfavoritkannya.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Anda dapat membagikan toot orang lain kepada pengikut Anda dengan mem-boost-nya.", - "introduction.interactions.reply.headline": "Balas", - "introduction.interactions.reply.text": "Anda dapat membalas toot Anda dan orang lain, yang akan menjalin dalam satu percakapan.", - "introduction.welcome.action": "Ayo!", - "introduction.welcome.headline": "Langkah pertama", - "introduction.welcome.text": "Selamat datang di fediverse! Beberapa saat lagi, Anda dapat menyiarkan pesan dan berbincang dengan teman lintas server. Namun server ini, {domain}, spesial--ia menyimpan profil Anda, jadi ingatlah namanya.", "keyboard_shortcuts.back": "untuk kembali", "keyboard_shortcuts.blocked": "buka daftar pengguna terblokir", "keyboard_shortcuts.boost": "untuk menyebarkan", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", "notifications.column_settings.status": "Toot baru:", + "notifications.column_settings.unread_markers.category": "Penanda notifikasi belum dibaca", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Boost", "notifications.filter.favourites": "Favorit", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 998799b9f..390b9f1f8 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Sequas tu", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "Esas ankore nulo en ta gretovorto.", "empty_column.home": "Tu sequas ankore nulu. Vizitez {public} od uzez la serchilo por komencar e renkontrar altra uzeri.", - "empty_column.home.public_timeline": "la publika tempolineo", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Yurizar", "follow_request.reject": "Refuzar", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.sound": "Plear sono", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index d90156835..427c75d18 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Minnispunkturinn þinn fyrir @{name}", + "account.account_note_header": "Minnispunktur", "account.add_or_remove_from_list": "Bæta á eða fjarlægja af listum", "account.badges.bot": "Róbót", "account.badges.group": "Hópur", @@ -22,6 +22,7 @@ "account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.", "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", + "account.joined": "Gerðist þátttakandi {date}", "account.last_status": "Síðasta virkni", "account.link_verified_on": "Eignarhald á þessum tengli var athugað þann {date}", "account.locked_info": "Staða gagnaleyndar á þessum aðgangi er stillt á læsingu. Eigandinn yfirfer handvirkt hverjir geti fylgst með honum.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Það eru engin falin lén ennþá.", "empty_column.favourited_statuses": "Þú átt ennþá engin eftirlætistíst. Þegar þú setur tíst í eftirlæti, munu þau birtast hér.", "empty_column.favourites": "Enginn hefur ennþá set þetta tíst í eftirlæti. Þegar einhverjir gera það, munu þeir birtast hér.", + "empty_column.follow_recommendations": "Það lítur út fyrir að ekki hafi verið hægt að útbúa neinar tillögur fyrir þig. Þú getur reynt að leita að fólki sem þú gætir þekkt eða skoðað myllumerki sem eru í umræðunni.", "empty_column.follow_requests": "Þú átt ennþá engar beiðnir um að fylgja þér. Þegar þú færð slíkar beiðnir, munu þær birtast hér.", "empty_column.hashtag": "Það er ekkert ennþá undir þessu myllumerki.", - "empty_column.home": "Heimatímalínan þín er tóm! Skoðaðu {public} eða notaðu leitina til að komast í ganf og finna annað fólk.", - "empty_column.home.public_timeline": "opinbera tímalínan", + "empty_column.home": "Heimatímalínan þín er tóm! Skoðaðu {public} eða notaðu leitina til að komast í gang og finna annað fólk.", + "empty_column.home.suggestions": "Skoðaðu nokkrar tillögur", "empty_column.list": "Það er ennþá ekki neitt á þessum lista. Þegar meðlimir á listanum senda inn nýjar stöðufærslur, munu þær birtast hér.", "empty_column.lists": "Þú ert ennþá ekki með neina lista. Þegar þú byrð til einhvern lista, munu hann birtast hér.", "empty_column.mutes": "Þú hefur ekki þaggað niður í neinum notendum ennþá.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", + "follow_recommendations.done": "Lokið", + "follow_recommendations.heading": "Fylgstu með fólki sem þú vilt sjá færslur frá! Hér eru nokkrar tillögur.", + "follow_recommendations.lead": "Færslur frá fólki sem þú fylgist með eru birtar í tímaröð á heimastreyminu þínu. Þú þarft ekki að hræðast mistök, það er jafn auðvelt að hætta að fylgjast með fólki hvenær sem er!", "follow_request.authorize": "Heimila", "follow_request.reject": "Hafna", "follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}}", "intervals.full.minutes": "{number, plural, one {# mínúta} other {# mínútur}}", - "introduction.federation.action": "Næsta", - "introduction.federation.federated.headline": "Sameiginlegt", - "introduction.federation.federated.text": "Opinberar færslur frá öðrum vefþjónum í skýjasambandinu birtast á sameiginlegu tímalínunni.", - "introduction.federation.home.headline": "Heim", - "introduction.federation.home.text": "Færslur frá fólki sem þú fylgist með birtast í heimastreyminu þínu. Þú getur fylgst með hverjum sem er á hvaða vefþjóni sem er!", - "introduction.federation.local.headline": "Staðvært", - "introduction.federation.local.text": "Opinberar færslur frá fólki á sama vefþjóni og þú birtast á staðværu tímalínunni.", - "introduction.interactions.action": "Ljúka leiðarvísinum!", - "introduction.interactions.favourite.headline": "Eftirlæti", - "introduction.interactions.favourite.text": "Þú getur vistað tíst til að eiga í handraðanum og látið höfundinn vita að þér hafi líkað það með því að setja það í eftirlætin þín.", - "introduction.interactions.reblog.headline": "Endurbirting", - "introduction.interactions.reblog.text": "Þú getur deilt tístum frá öðru fólki til þeirra sem fylgjast með þér með því að endurbirta færslurnar.", - "introduction.interactions.reply.headline": "Svara", - "introduction.interactions.reply.text": "Þú getur svarað tístum frá öðru fólki og eins sjálfum þér, sem mun binda tístin saman í samtal.", - "introduction.welcome.action": "Drífum okkur!", - "introduction.welcome.headline": "Fyrstu skrefin", - "introduction.welcome.text": "Velkomin í skýjasambandið (fediverse)! Eftir augnablik geturðu farið að útvarpa skilaboðum og spjalla við vini þína úti um víða veröld, allt í gegnum ýmsar gerðir vefþjóna sem samt geta talað saman. En þessi vefþjónn, {domain}, er sérstakur — hann hýsir notandasniðið þitt, þannig að þú skalt muna hvað hann heitir.", "keyboard_shortcuts.back": "að fara til baka", "keyboard_shortcuts.blocked": "að opna lista yfir útilokaða notendur", "keyboard_shortcuts.boost": "að endurbirta", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Sýna í dálki", "notifications.column_settings.sound": "Spila hljóð", "notifications.column_settings.status": "Ný tíst:", + "notifications.column_settings.unread_markers.category": "Merki fyrir ólesnar tilkynningar", "notifications.filter.all": "Allt", "notifications.filter.boosts": "Endurbirtingar", "notifications.filter.favourites": "Eftirlæti", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index b63b231ae..a87963784 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -7,7 +7,7 @@ "account.block_domain": "Blocca dominio {domain}", "account.blocked": "Bloccat*", "account.browse_more_on_origin_server": "Sfoglia ulteriormente sul profilo originale", - "account.cancel_follow_request": "Annulla richiesta di seguirti", + "account.cancel_follow_request": "Annulla richiesta di seguire", "account.direct": "Messaggio diretto a @{name}", "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post", "account.domain_blocked": "Dominio bloccato", @@ -15,16 +15,17 @@ "account.enable_notifications": "Avvisami quando @{name} pubblica un post", "account.endorse": "Mostra sul profilo", "account.follow": "Segui", - "account.followers": "Seguaci", + "account.followers": "Follower", "account.followers.empty": "Ancora nessuno segue questo utente.", - "account.followers_counter": "{count, plural, one {{counter} Seguace} other {{counter} Seguaci}}", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following_counter": "{count, plural, other {{counter} Seguiti}}", "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", + "account.joined": "Registrato dal {date}", "account.last_status": "Ultima attività", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", - "account.locked_info": "Lo stato di privacy del profilo è impostato a bloccato. Il proprietario revisiona manualmente chi lo può seguire.", + "account.locked_info": "Questo è un account privato. Il proprietario approva manualmente chi può seguirlo.", "account.media": "Media", "account.mention": "Menziona @{name}", "account.moved_to": "{name} si è trasferito su:", @@ -43,12 +44,12 @@ "account.unblock_domain": "Sblocca il dominio {domain}", "account.unendorse": "Non mostrare sul profilo", "account.unfollow": "Smetti di seguire", - "account.unmute": "Non silenziare @{name}", - "account.unmute_notifications": "Non silenziare le notifiche da @{name}", + "account.unmute": "Riattiva @{name}", + "account.unmute_notifications": "Riattiva le notifiche da @{name}", "account_note.placeholder": "Clicca per aggiungere una nota", "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.", "alert.rate_limited.title": "Limitazione per eccesso di richieste", - "alert.unexpected.message": "Si è verificato un errore inatteso.", + "alert.unexpected.message": "Si è verificato un errore imprevisto.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", "autosuggest_hashtag.per_week": "{count} per settimana", @@ -87,7 +88,7 @@ "compose_form.direct_message_warning": "Questo toot sarà inviato solo agli utenti menzionati.", "compose_form.direct_message_warning_learn_more": "Scopri di più", "compose_form.hashtag_warning": "Questo toot non sarà elencato sotto alcun hashtag poiché senza elenco. Solo i toot pubblici possono essere ricercati per hashtag.", - "compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti per vedere i tuoi post solo per seguaci.", + "compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti e vedere le tue pubblicazioni visibili solo dai follower.", "compose_form.lock_disclaimer.lock": "bloccato", "compose_form.placeholder": "A cosa stai pensando?", "compose_form.poll.add_option": "Aggiungi una scelta", @@ -113,7 +114,7 @@ "confirmations.delete_list.confirm": "Cancella", "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", "confirmations.domain_block.confirm": "Blocca l'intero dominio", - "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna timeline pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.", + "confirmations.domain_block.message": "Sei davvero, davvero sicur@ di voler bloccare {domain} completamente? Nella maggioranza dei casi, è preferibile e sufficiente bloccare o silenziare pochi account in modo mirato. Non vedrai più il contenuto da quel dominio né nelle timeline pubbliche né nelle tue notifiche. Anzi, verranno rimossi dai follower gli account di questo dominio.", "confirmations.logout.confirm": "Disconnettiti", "confirmations.logout.message": "Sei sicuro di volerti disconnettere?", "confirmations.mute.confirm": "Silenzia", @@ -124,7 +125,7 @@ "confirmations.reply.confirm": "Rispondi", "confirmations.reply.message": "Rispondere ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?", "confirmations.unfollow.confirm": "Smetti di seguire", - "confirmations.unfollow.message": "Sei sicuro di non voler più seguire {name}?", + "confirmations.unfollow.message": "Sei sicur@ di non voler più seguire {name}?", "conversation.delete": "Elimina conversazione", "conversation.mark_as_read": "Segna come letto", "conversation.open": "Visualizza conversazione", @@ -159,24 +160,28 @@ "empty_column.domain_blocks": "Non vi sono domini nascosti.", "empty_column.favourited_statuses": "Non hai ancora segnato nessun toot come apprezzato. Quando lo farai, comparirà qui.", "empty_column.favourites": "Nessuno ha ancora segnato questo toot come apprezzato. Quando qualcuno lo farà, apparirà qui.", - "empty_column.follow_requests": "Non hai ancora ricevuto nessuna richiesta di seguirti. Quando ne arriveranno, saranno mostrate qui.", + "empty_column.follow_recommendations": "Sembra che nessun suggerimento possa essere generato per te. Puoi provare a usare la ricerca per cercare persone che potresti conoscere o esplorare hashtag di tendenza.", + "empty_column.follow_requests": "Non hai ancora ricevuto nessuna richiesta di follow. Quando ne riceverai una, verrà mostrata qui.", "empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.", "empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.", - "empty_column.home.public_timeline": "la timeline pubblica", + "empty_column.home.suggestions": "Vedi alcuni suggerimenti", "empty_column.list": "Non c'è ancora niente in questa lista. Quando i membri di questa lista pubblicheranno nuovi stati, appariranno qui.", "empty_column.lists": "Non hai ancora nessuna lista. Quando ne creerai qualcuna, comparirà qui.", "empty_column.mutes": "Non hai ancora silenziato nessun utente.", "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", - "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", + "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o segui utenti da altri server per riempire questo spazio", "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.", "error.unexpected_crash.explanation_addons": "Questa pagina non può essere visualizzata correttamente. Questo errore è probabilmente causato da un componente aggiuntivo del browser o da strumenti di traduzione automatica.", "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.", "error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e ad aggiornare la pagina. Se questo non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser o un'app diversi.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala il problema", + "follow_recommendations.done": "Fatto", + "follow_recommendations.heading": "Segui le persone da cui vuoi vedere i messaggi! Ecco alcuni suggerimenti.", + "follow_recommendations.lead": "I messaggi da persone che segui verranno visualizzati in ordine cronologico nel tuo home feed. Non abbiate paura di commettere errori, potete smettere di seguire le persone altrettanto facilmente in qualsiasi momento!", "follow_request.authorize": "Autorizza", "follow_request.reject": "Rifiuta", - "follow_requests.unlocked_explanation": "Anche se il tuo account non è bloccato, lo staff di {domain} ha pensato che potresti voler esaminare manualmente le richieste di seguirti di questi account.", + "follow_requests.unlocked_explanation": "Benché il tuo account non sia privato, lo staff di {domain} ha pensato che potresti voler approvare manualmente le richieste di follow da questi account.", "generic.saved": "Salvato", "getting_started.developers": "Sviluppatori", "getting_started.directory": "Directory dei profili", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Avanti", - "introduction.federation.federated.headline": "Federato", - "introduction.federation.federated.text": "I post pubblici provenienti da altri server del fediverse saranno mostrati nella timeline federata.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "I post scritti da persone che segui saranno mostrati nella timeline home. Puoi seguire chiunque su qualunque server!", - "introduction.federation.local.headline": "Locale", - "introduction.federation.local.text": "I post pubblici scritti da persone sul tuo stesso server saranno mostrati nella timeline locale.", - "introduction.interactions.action": "Finisci il tutorial!", - "introduction.interactions.favourite.headline": "Apprezza", - "introduction.interactions.favourite.text": "Puoi salvare un toot e tenerlo per dopo, e far sapere all'autore che ti è piaciuto, segnandolo come apprezzato.", - "introduction.interactions.reblog.headline": "Condividi", - "introduction.interactions.reblog.text": "Con la condivisione puoi segnalare i toot di altre persone ai tuoi seguaci .", - "introduction.interactions.reply.headline": "Rispondi", - "introduction.interactions.reply.text": "Puoi rispondere ai toot, sia a quelli di altri sia ai tuoi, e i toot saranno collegati a formare una conversazione.", - "introduction.welcome.action": "Andiamo!", - "introduction.welcome.headline": "Primi passi", - "introduction.welcome.text": "Benvenuto/a nel fediverse! Tra poco potrai inviare messaggi e parlare con i tuoi amici su una grande varietà di server. Ma questo server, {domain}, è speciale: ospita il tuo profilo, quindi ricordati il suo nome.", "keyboard_shortcuts.back": "per tornare indietro", "keyboard_shortcuts.blocked": "per aprire l'elenco degli utenti bloccati", "keyboard_shortcuts.boost": "per condividere", @@ -245,7 +233,7 @@ "keyboard_shortcuts.pinned": "per aprire l'elenco dei toot fissati in cima", "keyboard_shortcuts.profile": "per aprire il profilo dell'autore", "keyboard_shortcuts.reply": "per rispondere", - "keyboard_shortcuts.requests": "per aprire l'elenco delle richieste di seguirti", + "keyboard_shortcuts.requests": "per aprire l'elenco di richieste di follow", "keyboard_shortcuts.search": "per spostare il focus sulla ricerca", "keyboard_shortcuts.spoilers": "per mostrare/nascondere il campo CW", "keyboard_shortcuts.start": "per aprire la colonna \"Come iniziare\"", @@ -305,7 +293,7 @@ "navigation_bar.security": "Sicurezza", "notification.favourite": "{name} ha apprezzato il tuo post", "notification.follow": "{name} ha iniziato a seguirti", - "notification.follow_request": "{name} ha chiesto di seguirti", + "notification.follow_request": "{name} ti ha mandato una richiesta di follow", "notification.mention": "{name} ti ha menzionato", "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", @@ -318,8 +306,8 @@ "notifications.column_settings.filter_bar.advanced": "Mostra tutte le categorie", "notifications.column_settings.filter_bar.category": "Filtro rapido", "notifications.column_settings.filter_bar.show": "Mostra", - "notifications.column_settings.follow": "Nuovi seguaci:", - "notifications.column_settings.follow_request": "Nuove richieste di seguirti:", + "notifications.column_settings.follow": "Nuovi follower:", + "notifications.column_settings.follow_request": "Nuove richieste di follow:", "notifications.column_settings.mention": "Menzioni:", "notifications.column_settings.poll": "Risultati del sondaggio:", "notifications.column_settings.push": "Notifiche push", @@ -327,10 +315,11 @@ "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", "notifications.column_settings.status": "Nuovi toot:", + "notifications.column_settings.unread_markers.category": "Marcatori di notifica non letti", "notifications.filter.all": "Tutti", "notifications.filter.boosts": "Condivisioni", "notifications.filter.favourites": "Apprezzati", - "notifications.filter.follows": "Seguaci", + "notifications.filter.follows": "Follower", "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", "notifications.filter.statuses": "Aggiornamenti dalle persone che segui", @@ -355,7 +344,7 @@ "privacy.change": "Modifica privacy del post", "privacy.direct.long": "Invia solo a utenti menzionati", "privacy.direct.short": "Diretto in privato", - "privacy.private.long": "Invia solo ai seguaci", + "privacy.private.long": "Invia solo ai follower", "privacy.private.short": "Privato", "privacy.public.long": "Invia alla timeline pubblica", "privacy.public.short": "Pubblico", @@ -367,8 +356,8 @@ "relative_time.days": "{number}g", "relative_time.hours": "{number}o", "relative_time.just_now": "ora", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number} minuti", + "relative_time.seconds": "{number} secondi", "relative_time.today": "oggi", "reply_indicator.cancel": "Annulla", "report.forward": "Inoltra a {target}", @@ -444,7 +433,7 @@ "time_remaining.moments": "Restano pochi istanti", "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left", "timeline_hint.remote_resource_not_displayed": "{resource] da altri server non sono mostrati.", - "timeline_hint.resources.followers": "Seguaci", + "timeline_hint.resources.followers": "Follower", "timeline_hint.resources.follows": "Segue", "timeline_hint.resources.statuses": "Toot meno recenti", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index e4334ccc4..bd3580e9d 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -22,6 +22,7 @@ "account.follows.empty": "まだ誰もフォローしていません。", "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", + "account.joined": "{date} に登録", "account.last_status": "最後の活動", "account.link_verified_on": "このリンクの所有権は{date}に確認されました", "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。", @@ -163,10 +164,11 @@ "empty_column.domain_blocks": "ブロックしているドメインはありません。", "empty_column.favourited_statuses": "まだ何もお気に入り登録していません。お気に入り登録するとここに表示されます。", "empty_column.favourites": "まだ誰もお気に入り登録していません。お気に入り登録されるとここに表示されます。", + "empty_column.follow_recommendations": "おすすめを生成できませんでした。検索を使って知り合いを探したり、トレンドハッシュタグを見てみましょう。", "empty_column.follow_requests": "まだフォローリクエストを受けていません。フォローリクエストを受けるとここに表示されます。", "empty_column.hashtag": "このハッシュタグはまだ使われていません。", "empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。", - "empty_column.home.public_timeline": "連合タイムライン", + "empty_column.home.suggestions": "おすすめを見る", "empty_column.list": "このリストにはまだなにもありません。このリストのメンバーが新しいトゥートをするとここに表示されます。", "empty_column.lists": "まだリストがありません。リストを作るとここに表示されます。", "empty_column.mutes": "まだ誰もミュートしていません。", @@ -178,6 +180,9 @@ "error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。", "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", + "follow_recommendations.done": "完了", + "follow_recommendations.heading": "投稿を見たい人をフォローしてください!ここにおすすめがあります。", + "follow_recommendations.lead": "あなたがフォローしている人の投稿は、ホームフィードに時系列で表示されます。いつでも簡単に解除できるので、気軽にフォローしてみてください!", "follow_request.authorize": "許可", "follow_request.reject": "拒否", "follow_requests.unlocked_explanation": "あなたのアカウントは承認制ではありませんが、{domain} のスタッフはこれらのアカウントからのフォローリクエストの確認が必要であると判断しました。", @@ -207,23 +212,6 @@ "intervals.full.days": "{number}日", "intervals.full.hours": "{number}時間", "intervals.full.minutes": "{number}分", - "introduction.federation.action": "次へ", - "introduction.federation.federated.headline": "連合タイムライン", - "introduction.federation.federated.text": "Fediverseの他のサーバーからの公開投稿は連合タイムラインに表示されます。", - "introduction.federation.home.headline": "ホームタイムライン", - "introduction.federation.home.text": "フォローしている人々の投稿はホームタイムラインに表示されます。どこのサーバーの誰でもフォローできます!", - "introduction.federation.local.headline": "ローカルタイムライン", - "introduction.federation.local.text": "同じサーバーにいる人々の公開投稿はローカルタイムラインに表示されます。", - "introduction.interactions.action": "はじめよう!", - "introduction.interactions.favourite.headline": "お気に入り", - "introduction.interactions.favourite.text": "お気に入り登録することで後から見られるよう保存したり、「好き」を相手に伝えたりできます。", - "introduction.interactions.reblog.headline": "ブースト", - "introduction.interactions.reblog.text": "ブーストすることでフォロワーにそのトゥートを共有できます。", - "introduction.interactions.reply.headline": "返信", - "introduction.interactions.reply.text": "自身や人々のトゥートに返信することで、一連の会話に繋げることができます。", - "introduction.welcome.action": "はじめる!", - "introduction.welcome.headline": "はじめに", - "introduction.welcome.text": "Fediverseの世界へようこそ!あと少しでメッセージを配信したり、さまざまなサーバーを越えた友達と話せるようになります。ところで、ここ{domain}は特別なサーバーです…あなたのプロフィールを持つ主体のサーバーですので、名前を覚えておきましょう。", "keyboard_shortcuts.back": "戻る", "keyboard_shortcuts.blocked": "ブロックしたユーザーのリストを開く", "keyboard_shortcuts.boost": "ブースト", @@ -332,6 +320,7 @@ "notifications.column_settings.show": "カラムに表示", "notifications.column_settings.sound": "通知音を再生", "notifications.column_settings.status": "新しいトゥート:", + "notifications.column_settings.unread_markers.category": "未読マーカー", "notifications.filter.all": "すべて", "notifications.filter.boosts": "ブースト", "notifications.filter.favourites": "お気に入り", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index ad3b1b033..714ec2e49 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "ამ ჰეშტეგში ჯერ არაფერია.", "empty_column.home": "თქვენი სახლის თაიმლაინი ცარიელია! ესტუმრეთ {public}-ს ან დასაწყისისთვის გამოიყენეთ ძებნა, რომ შეხვდეთ სხვა მომხმარებლებს.", - "empty_column.home.public_timeline": "ღია თაიმლაინი", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "ამ სიაში ჯერ არაფერია. როდესაც სიის წევრები დაპოსტავენ ახალ სტატუსებს, ისინი გამოჩნდებიან აქ.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "ავტორიზაცია", "follow_request.reject": "უარყოფა", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "უკან გადასასვლელად", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "დასაბუსტად", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "გამოჩნდეს სვეტში", "notifications.column_settings.sound": "ხმის დაკვრა", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index cf9860f1e..175a509ff 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli", "account.cancel_follow_request": "Sefsex asuter n uḍfar", "account.direct": "Izen usrid i @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Ḥbes ur iyi-d-ttazen ara ilɣa mi ara d-isuffeɣ @{name}", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}", "account.endorse": "Welleh fell-as deg umaɣnu-inek", "account.follow": "Ḍfer", "account.followers": "Imeḍfaren", @@ -22,6 +22,7 @@ "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", + "account.joined": "Joined {date}", "account.last_status": "Armud aneggaru", "account.link_verified_on": "Taɣara n useɣwen-a tettwasenqed ass n {date}", "account.locked_info": "Amiḍan-agi uslig isekweṛ. D bab-is kan i izemren ad yeǧǧ, s ufus-is, win ara t-iḍefṛen.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.", "empty_column.favourited_statuses": "Ulac ula yiwet n tjewwaqt deg yismenyifen-ik ar tura. Ticki Tella-d yiwet, ad d-ban da.", "empty_column.favourites": "Ula yiwen ur yerri tajewwaqt-agi deg yismenyifen-is. Melmi i d-yella waya, ad d-yettwasken da.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Ulac ɣur-k ula yiwen n usuter n teḍfeṛt. Ticki teṭṭfeḍ-d yiwen ad d-yettwasken da.", "empty_column.hashtag": "Ar tura ulac kra n ugbur yesɛan assaɣ ɣer uhacṭag-agi.", "empty_column.home": "Tasuddemt tagejdant n yisallen d tilemt! Ẓer {public} neɣ nadi ad tafeḍ imseqdacen-nniḍen ad ten-ḍefṛeḍ.", - "empty_column.home.public_timeline": "tasuddemt tazayezt n yisallen", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Ar tura ur yelli kra deg umuɣ-a. Ad d-yettwasken da ticki iɛeggalen n wumuɣ-a suffɣen-d kra.", "empty_column.lists": "Ulac ɣur-k kra n wumuɣ yakan. Ad d-tettwasken da ticki tesluleḍ-d yiwet.", "empty_column.mutes": "Ulac ɣur-k imseqdacen i yettwasgugmen.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Ssireg", "follow_request.reject": "Agi", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}", "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}", "intervals.full.minutes": "{number, plural, one {# n tesdat} other {# n tesdatin}}", - "introduction.federation.action": "Uḍfiṛ", - "introduction.federation.federated.headline": "Amatu", - "introduction.federation.federated.text": "Iznan izuyaz i d-yekkan seg yiqeddacen-nniḍen n fediverse ad banen deg tsuddemt tazayezt tamatut n yisallen.", - "introduction.federation.home.headline": "Agejdan", - "introduction.federation.home.text": "Iznan n yemdanen i teṭṭafaṛeḍ ad banen deg tsuddemt n umagger. Tzemreḍ ad tḍefṛeḍ win tebɣiḍ deg uqeddac i tebɣiḍ!", - "introduction.federation.local.headline": "Adigan", - "introduction.federation.local.text": "Iznan izuyaz n yemdanen i yellan deg yiwen uqeddac akked kečč ad d-banen deg tsuddemt tazayezt tadigant.", - "introduction.interactions.action": "Fakk tameskant!", - "introduction.interactions.favourite.headline": "Ismenyifen", - "introduction.interactions.favourite.text": "Tzemreḍ ad teǧǧeḍ kra n tjewwaqt i ticki, daγen ad tiniḍ i bab-is d akken taɛǧeb-ik, s tmerna-ines ɣer yismenyifen-ik.", - "introduction.interactions.reblog.headline": "Bḍu tikelt-nniḍen", - "introduction.interactions.reblog.text": "Tzemreḍ ad tebḍuḍ tijewwaqin n medden akk d yimeḍfaṛen-ik s beṭṭu-nsent tikelt-nniḍen.", - "introduction.interactions.reply.headline": "Err", - "introduction.interactions.reply.text": "Tzemreḍ ad terreḍ ɣef tjewwaqin-ik·im akked tid n medden-nniḍen, aya atent-id-icudd ta deffir ta deg yiwen udiwenni.", - "introduction.welcome.action": "Bdu!", - "introduction.welcome.headline": "Isurifen imenza", - "introduction.welcome.text": "Anṣuf ɣer fediverse! Deg kra n yimiren, ad tizmireḍ ad tzzuzreḍ iznan neγ ad tmeslayeḍ i yemddukkal deg waṭas n yiqeddacen. Maca aqeddac-agi, {domain}, mačči am wiyaḍ - deg-s i yella umaɣnu-ik, ihi cfu ɣef yisem-is.", "keyboard_shortcuts.back": "i tuɣalin ɣer deffir", "keyboard_shortcuts.blocked": "akken ad teldiḍ umuɣ n yimseqdacen yettwasḥebsen", "keyboard_shortcuts.boost": "i beṭṭu tikelt-nniḍen", @@ -268,7 +256,7 @@ "lists.new.title_placeholder": "Azwel amaynut n tebdart", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "Ula yiwen·t", "lists.replies_policy.title": "Ssken-d tiririyin i:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", "lists.subheading": "Tibdarin-ik·im", @@ -277,7 +265,7 @@ "media_gallery.toggle_visible": "Ffer {number, plural, one {tugna} other {tugniwin}}", "missing_indicator.label": "Ulac-it", "missing_indicator.sublabel": "Ur nufi ara aɣbalu-a", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Tanzagt", "mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Isnasen izirazen", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu", "notifications.column_settings.sound": "Rmed imesli", "notifications.column_settings.status": "Tiẓenẓunin timaynutin:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", "notifications.filter.favourites": "Ismenyifen", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 04a0f9140..95abf9381 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -22,6 +22,7 @@ "account.follows.empty": "Ешкімге жазылмапты.", "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", + "account.joined": "Joined {date}", "account.last_status": "Соңғы белсенділік", "account.link_verified_on": "Сілтеме меншігі расталған күн {date}", "account.locked_info": "Бұл қолданушы өзі туралы мәліметтерді жасырған. Тек жазылғандар ғана көре алады.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Бұғатталған домен жоқ.", "empty_column.favourited_statuses": "Ешқандай жазба 'Таңдаулылар' тізіміне қосылмапты. Қосылғаннан кейін осында жинала бастайды.", "empty_column.favourites": "Бұл постты әлі ешкім 'Таңдаулылар' тізіміне қоспапты. Біреу бастағаннан кейін осында көрінетін болады.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Әлі ешқандай жазылуға сұранымдар келмеді. Жаңа сұранымдар осында көрінетін болады.", "empty_column.hashtag": "Бұндай хэштегпен әлі ешкім жазбапты.", "empty_column.home": "Әлі ешкімге жазылмапсыз. Бәлкім {public} жазбаларын қарап немесе іздеуді қолданып көрерсіз.", - "empty_column.home.public_timeline": "ашық желі", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Бұл тізімде ештеңе жоқ.", "empty_column.lists": "Әзірше ешқандай тізіміңіз жоқ. Біреуін құрғаннан кейін осы жерде көрінетін болады.", "empty_column.mutes": "Әзірше ешқандай үнсізге қойылған қолданушы жоқ.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", "errors.unexpected_crash.report_issue": "Мәселені хабарла", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Авторизация", "follow_request.reject": "Қабылдамау", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# күн} other {# күн}}", "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}", "intervals.full.minutes": "{number, plural, one {# минут} other {# минут}}", - "introduction.federation.action": "Келесі", - "introduction.federation.federated.headline": "Жаһандық", - "introduction.federation.federated.text": "Жаһандық желідегі жазбалар осында көрінетін болады.", - "introduction.federation.home.headline": "Басты бет", - "introduction.federation.home.text": "Жазылған адамдарыңыздың жазбалары осында шығады. Кез келген серверден жазылуыңызға болады!", - "introduction.federation.local.headline": "Жергілікті", - "introduction.federation.local.text": "Жергілікті желіде жазылған жазбалар осында шығатын болады.", - "introduction.interactions.action": "Оқулық аяқталды!", - "introduction.interactions.favourite.headline": "Таңдаулы", - "introduction.interactions.favourite.text": "Жазбаларды таңдаулыға сақтауға болады, осылайша авторына ұнағанын білдіре аласыз.", - "introduction.interactions.reblog.headline": "Бөлісу", - "introduction.interactions.reblog.text": "Ұнаған жазбаларды өз оқырмандарыңызбен бөлісе аласыз.", - "introduction.interactions.reply.headline": "Жауап", - "introduction.interactions.reply.text": "Жазбаларға жауап жаза аласыз, осылайша пікірталас өрбітуіңізге болады.", - "introduction.welcome.action": "Кеттік!", - "introduction.welcome.headline": "Алғашқы қадамдар", - "introduction.welcome.text": "Желіге қош келдіңіз! Бірнеше минуттан кейін желіде жазба қалдырып, медиа бөлісіп, басқалармен пікірталасқа қатысып ортаға қосыла аласыз. . Бірақ бұл сервер {domain} - бұл ерекше, ол сіздің профиліңізді қояды, сондықтан оның есімін есіңізде сақтаңыз.", "keyboard_shortcuts.back": "артқа қайту", "keyboard_shortcuts.blocked": "бұғатталғандар тізімін ашу", "keyboard_shortcuts.boost": "жазба бөлісу", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Бағанда көрсет", "notifications.column_settings.sound": "Дыбысын қос", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Барлығы", "notifications.filter.boosts": "Бөлісулер", "notifications.filter.favourites": "Таңдаулылар", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index a5025bb72..46f4d3b34 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 10f7eabcf..29c1f550f 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -22,9 +22,10 @@ "account.follows.empty": "이 유저는 아직 아무도 팔로우하고 있지 않습니다.", "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", + "account.joined": "{date}에 가입함", "account.last_status": "마지막 활동", "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨", - "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로어를 승인합니다.", + "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로워를 승인합니다.", "account.media": "미디어", "account.mention": "@{name}에게 글쓰기", "account.moved_to": "{name}는 계정을 이동했습니다:", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "아직 숨겨진 도메인이 없습니다.", "empty_column.favourited_statuses": "아직 즐겨찾기 한 툿이 없습니다. 툿을 즐겨찾기 하면 여기에 나타납니다.", "empty_column.favourites": "아직 아무도 이 툿을 즐겨찾기 하지 않았습니다. 누군가 즐겨찾기를 하면 여기에 그들이 나타납니다.", + "empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.", "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.", "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.", "empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.", - "empty_column.home.public_timeline": "연합 타임라인", + "empty_column.home.suggestions": "몇몇의 제안 보기", "empty_column.list": "리스트에 아직 아무 것도 없습니다.", "empty_column.lists": "아직 리스트가 없습니다. 리스트를 만들면 여기에 나타납니다.", "empty_column.mutes": "아직 아무도 뮤트하지 않았습니다.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "그것들을 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", + "follow_recommendations.done": "완료", + "follow_recommendations.heading": "게시물을 받아 볼 사람들을 팔로우 하세요! 여기 몇몇의 추천이 있습니다.", + "follow_recommendations.lead": "당신이 팔로우 하는 사람들의 게시물이 시간순으로 정렬되어 당신의 홈 피드에 표시될 것입니다. 실수를 두려워 하지 마세요, 언제든지 쉽게 팔로우 취소를 할 수 있습니다!", "follow_request.authorize": "허가", "follow_request.reject": "거부", "follow_requests.unlocked_explanation": "당신의 계정이 잠기지 않았다고 할 지라도, {domain}의 스탭은 당신이 이 계정들로부터의 팔로우 요청을 수동으로 확인하길 원한다고 생각했습니다.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number} 일", "intervals.full.hours": "{number} 시간", "intervals.full.minutes": "{number} 분", - "introduction.federation.action": "다음", - "introduction.federation.federated.headline": "연합", - "introduction.federation.federated.text": "페디버스의 다른 서버의 공개 게시물이 연합 타임라인에 나타납니다.", - "introduction.federation.home.headline": "홈", - "introduction.federation.home.text": "당신이 팔로우 하고 있는 사람의 게시물이 홈 타임라인에 나타납니다. 어느 서버에 있는 사람이라도 팔로우가 가능합니다!", - "introduction.federation.local.headline": "로컬", - "introduction.federation.local.text": "같은 서버에 있는 공개 게시물은 로컬 타임라인에 나타납니다.", - "introduction.interactions.action": "튜토리얼 마치기!", - "introduction.interactions.favourite.headline": "즐겨찾기", - "introduction.interactions.favourite.text": "나중을 위해 툿을 저장할 수 있습니다, 그리고 작성자에게 당신이 이 글을 마음에 들어한다는 걸 알립니다.", - "introduction.interactions.reblog.headline": "부스트", - "introduction.interactions.reblog.text": "부스트를 통해 다른 사람의 툿을 당신의 팔로워들에게 공유할 수 있습니다.", - "introduction.interactions.reply.headline": "답글", - "introduction.interactions.reply.text": "다른 사람이나 나의 툿에 답글을 달 수 있습니다, 이 답글은 하나의 타래글로 이어집니다.", - "introduction.welcome.action": "출발!", - "introduction.welcome.headline": "첫걸음", - "introduction.welcome.text": "페디버스에 오신 것을 환영합니다! 잠시 후, 당신은 수 많은 다양한 서버들에 존재하는 친구들에게 메시지를 보내고 대화 할 수 있게 됩니다. 하지만 이 서버, {domain}은 특별합니다. 이 서버는 당신의 프로필을 제공하니 이름을 기억하세요.", "keyboard_shortcuts.back": "뒤로가기", "keyboard_shortcuts.blocked": "차단한 유저 리스트 열기", "keyboard_shortcuts.boost": "부스트", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", "notifications.column_settings.status": "새 툿:", + "notifications.column_settings.unread_markers.category": "읽지 않음 알림 마커", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", "notifications.filter.favourites": "즐겨찾기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 3c359d222..fadc6b3a6 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -22,6 +22,7 @@ "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.", "account.follows_you": "شوێنکەوتووەکانت", "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", + "account.joined": "Joined {date}", "account.last_status": "دوایین چالاکی", "account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە", "account.locked_info": "تایبەتمەندی ئەم هەژمارەیە ڕیکخراوە بۆ قوفڵدراوە. خاوەنەکە بە دەستی پێداچوونەوە دەکات کە کێ دەتوانێت شوێنیان بکەوێت.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.", "empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.", "empty_column.favourites": "کەس ئەم توتەی دڵخواز نەکردووە،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "تۆ هێشتا هیچ داواکارییەکی بەدواداچووت نیە. کاتێک یەکێکت بۆ هات، لێرە دەرئەکەویت.", "empty_column.hashtag": "هێشتا هیچ شتێک لەم هاشتاگەدا نییە.", "empty_column.home": "تایم لاینی ماڵەوەت بەتاڵە! سەردانی {public} بکە یان گەڕان بەکاربێنە بۆ دەستپێکردن و بینینی بەکارهێنەرانی تر.", - "empty_column.home.public_timeline": "هێڵی کاتی گشتی", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "هێشتا هیچ شتێک لەم لیستەدا نییە. کاتێک ئەندامانی ئەم لیستە دەنگی نوێ بڵاودەکەن، لێرە دەردەکەون.", "empty_column.lists": "تۆ هێشتا هیچ لیستت دروست نەکردووە، کاتێک دانەیەک دروست دەکەیت، لێرە پیشان دەدرێت.", "empty_column.mutes": "تۆ هێشتا هیچ بەکارهێنەرێکت بێدەنگ نەکردووە.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.", "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "دهسهڵاتپێدراو", "follow_request.reject": "ڕەتکردنەوە", "follow_requests.unlocked_explanation": "هەرچەندە هەژمارەکەت داخراو نییە، ستافی {domain} وا بیریان کردەوە کە لەوانەیە بتانەوێت پێداچوونەوە بە داواکاریەکانی ئەم هەژمارەدا بکەن بە دەستی.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}", "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}", "intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}", - "introduction.federation.action": "داهاتوو", - "introduction.federation.federated.headline": "گشتی", - "introduction.federation.federated.text": "نووسراوە گشتیەکان لە خزمەتگوزاریەکانی تری جیهانی دەرئەکەون لە هێڵی گشتی.", - "introduction.federation.home.headline": "سەرەتا", - "introduction.federation.home.text": "ئەو بابەتانەی کە بەشوێنیان دەکەویت لە پەڕەی ژوورەکەت دەردەکەوێت. دەتوانیت شوێن هەموو کەسێک بکەویت لەسەر هەر ڕاژەیەک!", - "introduction.federation.local.headline": "ناوخۆیی", - "introduction.federation.local.text": "نووسراوە گشتیەکان لە خەڵک لەسەر هەمان ڕاژە وەک تۆ دەردەکەون لە هێڵی کاتی ناوخۆیی.", - "introduction.interactions.action": "خوێندنی تەواوبکە!", - "introduction.interactions.favourite.headline": "دڵخواز", - "introduction.interactions.favourite.text": "دەتوانیت پاشترتوتێک پاشەکەوت بکەیت، با نووسەر بزانێت کە تۆ حەزت لێ بوو، بە ئارەزووی خۆت.", - "introduction.interactions.reblog.headline": "بەهێزکردن", - "introduction.interactions.reblog.text": "دەتوانیت دەنگی کەسانی تر هاوبەش بکەیت لەگەڵ شوێنکەوتوانی خۆت بە بەهێزکردنیان.", - "introduction.interactions.reply.headline": "وەڵام", - "introduction.interactions.reply.text": "دەتوانیت وەڵامی کەسانی تر و توتەکانی خۆت بدەوە، کە لە گفتوگۆیەکدا بە یەکەوە زنجیریان دەکات.", - "introduction.welcome.action": "با بڕۆین!", - "introduction.welcome.headline": "هەنگاوی یەکەم", - "introduction.welcome.text": "بەخێربێیت بۆتۆڕەکۆمەڵەییەکانی چربووە! لە چەند ساتێکی کەمدا دەتوانیت پەیامەکان پەخش بکەیت و لەگەڵ هاوڕێکانت لە ناو چەندین جۆر لە ڕاژەکان قسە بکەیت.. بەڵام ئەم ڕاژانە، {domain}، جیاوزە لەگەڵ ئەوانی دیکە بۆ ئەوە کە میوانداری پرۆفایلەکەت دەکان، بۆیە ناوەکەیت لەبیربێت.", "keyboard_shortcuts.back": "بۆ گەڕانەوە", "keyboard_shortcuts.blocked": "بۆ کردنەوەی لیستی بەکارهێنەرە بلۆککراوەکان", "keyboard_shortcuts.boost": "بۆ بەهێزکردن", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "لە ستووندا پیشان بدە", "notifications.column_settings.sound": "لێدانی دەنگ", "notifications.column_settings.status": "توتەکانی نوێ:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "هەموو", "notifications.filter.boosts": "دووبارەتوتەکان", "notifications.filter.favourites": "دڵخوازەکان", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json new file mode 100644 index 000000000..df2e21494 --- /dev/null +++ b/app/javascript/mastodon/locales/kw.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "Note", + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.badges.group": "Group", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Holyoryon", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Gwarnyans", + "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", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "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", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "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.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 46dc0975d..783808dda 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index f075731fe..0b56c6f13 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -12,16 +12,17 @@ "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Man paziņot, kad @{name} publicē ierakstu", "account.endorse": "Izcelts profilā", "account.follow": "Sekot", "account.followers": "Sekotāji", "account.followers.empty": "Šim lietotājam nav sekotāju.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, zero {{counter} sekotāju} one {{counter} sekotājs} other {{counter} sekotāji}}", + "account.following_counter": "{count, plural, zero {Seko {counter} kontiem} one {Seko {counter} kontam} other {Seko {counter} kontiem}}", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", + "account.joined": "Joined {date}", "account.last_status": "Pēdējā aktivitāte", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", "account.locked_info": "Šī konta privātuma status ir iestatīts slēgts. Īpašnieks izskatīs un izvēlēsies kas viņam drīkst sekot.", @@ -50,8 +51,8 @@ "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Negaidīta kļūda.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", + "announcement.announcement": "Paziņojums", + "autosuggest_hashtag.per_week": "{count} nedēļā", "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", @@ -63,7 +64,7 @@ "column.bookmarks": "Grāmatzīmes", "column.community": "Lokālā laika līnija", "column.direct": "Privātās ziņas", - "column.directory": "Browse profiles", + "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Paslēptie domēni", "column.favourites": "Favorīti", "column.follow_requests": "Sekotāju pieprasījumi", @@ -91,9 +92,9 @@ "compose_form.lock_disclaimer.lock": "slēgts", "compose_form.placeholder": "Ko vēlies publicēt?", "compose_form.poll.add_option": "Pievienot izvēli", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.duration": "Aptaujas ilgums", + "compose_form.poll.option_placeholder": "Izvēle Nr. {number}", + "compose_form.poll.remove_option": "Noņemt šo izvēli", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Publicēt", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Slēpto domēnu vēl nav.", "empty_column.favourited_statuses": "Tev vēl nav iemīļoto ziņojumu. Kad Tev tādu būs tie šeit parādīsies.", "empty_column.favourites": "Neviens šo ziņojumu nav pievienojis favorītiem. Kad tādu būs tie šeit parādīsies.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Šobrīd neviens nav pieteicies tev sekot. Kad kāds pieteiksies tas parādīsies šeit.", "empty_column.hashtag": "Ar šo haštagu nekas nav atrodams.", "empty_column.home": "Tava laika līnija ir tukša! Apmeklē federatīvo laika līniju vai uzmeklē kādu meklētājā lai satiktu citus.", - "empty_column.home.public_timeline": "publiskā laika līnija", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Šis saraksts ir tukšs. Kad šī saraksta dalībnieki atjaunos statusu tas parādīsies šeit.", "empty_column.lists": "Tev nav neviena saraksta. Kad tādu būs tie parādīsies šeit.", "empty_column.mutes": "Tu neesi nevienu apklusinājis.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autorizēt", "follow_request.reject": "Noraidīt", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 6dac40e8b..964571a58 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -22,6 +22,7 @@ "account.follows.empty": "Корисникот не следи никој сеуште.", "account.follows_you": "Те следи тебе", "account.hide_reblogs": "Сокриј буст од @{name}", + "account.joined": "Joined {date}", "account.last_status": "Последно активен", "account.link_verified_on": "Сопстевноста на овај линк беше проверен на {date}", "account.locked_info": "Статусот на приватност на овај корисник е сетиран како заклучен. Корисникот одлучува кој можи да го следи него.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "Немате сокриени домеини уште.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "јавен времеплов", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Пријавете проблем", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Одобри", "follow_request.reject": "Одбиј", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# ден} other {# дена}}", "intervals.full.hours": "{number, plural, one {# час} other {# часа}}", "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}", - "introduction.federation.action": "Следно", - "introduction.federation.federated.headline": "Федеративно", - "introduction.federation.federated.text": "Јавни објави од други сервери од fediverse ќе се појават во федеративниот времеплов.", - "introduction.federation.home.headline": "Дома", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Локално", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Заврши туторијал!", - "introduction.interactions.favourite.headline": "Омилени", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Бустирај", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Одговори", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Да започнеме!", - "introduction.welcome.headline": "Почетни чекори", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "за да одите назад", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Прикажи во колона", "notifications.column_settings.sound": "Свири звуци", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Сите", "notifications.filter.boosts": "Бустови", "notifications.filter.favourites": "Омилени", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4f44f3800..0303176b4 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -1,34 +1,35 @@ { "account.account_note_header": "കുറിപ്പ്", - "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക", + "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ/മാറ്റുകയോ ചെയ്യുക", "account.badges.bot": "റോബോട്ട്", "account.badges.group": "ഗ്രൂപ്പ്", "account.block": "@{name} -നെ തടയുക", - "account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക", + "account.block_domain": "{domain} എന്ന മേഖല തടയുക", "account.blocked": "തടഞ്ഞു", "account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക", "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", - "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", + "account.direct": "@{name}-ന്(ക്ക്) നേരിട്ട് സന്ദേശം അയക്കുക", "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക", - "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", + "account.domain_blocked": "മേഖല തടഞ്ഞു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", "account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക", "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക", "account.follow": "പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} പിന്തുടരുന്നവർ} other {{counter} പിന്തുടരുന്നവർ}}", + "account.following_counter": "{count, plural, one {{counter} പിന്തുടരുന്നു} other {{counter} പിന്തുടരുന്നു}}", "account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു", "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക", + "account.joined": "Joined {date}", "account.last_status": "അവസാനം കണ്ടത്", "account.link_verified_on": "ഈ ലിങ്കിന്റെ ഉടമസ്തത {date} ഇൽ ഉറപ്പാക്കിയതാണ്", "account.locked_info": "ഈ അംഗത്വത്തിന്റെ സ്വകാര്യതാ നിലപാട് അനുസരിച്ച് പിന്തുടരുന്നവരെ തിരഞ്ഞെടുക്കാനുള്ള വിവേചനാധികാരം ഉടമസ്ഥനിൽ നിഷിപ്തമായിരിക്കുന്നു.", "account.media": "മീഡിയ", "account.mention": "@{name} സൂചിപ്പിക്കുക", "account.moved_to": "{name} ഇതിലേക്ക് മാറിയിരിക്കുന്നു:", - "account.mute": "നിശ്ശബ്ദമാക്കുക @{name}", + "account.mute": "@{name}-നെ(യെ) നിശ്ശബ്ദമാക്കൂ", "account.mute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ നിശബ്ദമാക്കുക", "account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു", "account.never_active": "ഒരിക്കലും ഇല്ല", @@ -36,12 +37,12 @@ "account.posts_with_replies": "ടൂട്ടുകളും മറുപടികളും", "account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}", "account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക", - "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക", + "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കിടുക", "account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക", "account.statuses_counter": "{count, plural, one {{counter} ടൂട്ട്} other {{counter} ടൂട്ടുകൾ}}", - "account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}", - "account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക", - "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക", + "account.unblock": "@{name} തടഞ്ഞത് മാറ്റുക", + "account.unblock_domain": "{domain} എന്ന മേഖല വെളിപ്പെടുത്തുക", + "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കരുത്", "account.unfollow": "പിന്തുടരുന്നത് നിര്ത്തുക", "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}", "account.unmute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രസിദ്ധപ്പെടുത്തുക", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "മറയ്ക്കപ്പെട്ടിരിക്കുന്ന മേഖലകൾ ഇതുവരെ ഇല്ല.", "empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "ഈ ഹാഷ്ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "പൊതു സമയരേഖ", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", "follow_request.reject": "നിരസിക്കുക", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "അടുത്തത്", - "introduction.federation.federated.headline": "സംയുക്തമാക്കിയ", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "ഹോം", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "പ്രാദേശികം", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "പഠനസഹായി പൂർത്തീകരിക്കുക!", - "introduction.interactions.favourite.headline": "പ്രിയപ്പെട്ടത്", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "ബൂസ്റ്റ് ചെയ്യുക", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "മറുപടി", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "നമുക്ക് തുടങ്ങാം!", - "introduction.welcome.headline": "ആദ്യ ചുവടുവെപ്പുകൾ", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക", @@ -237,7 +225,7 @@ "keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ", - "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.mention": "രചയിതാവിനെ സൂചിപ്പിക്കാൻ", "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ", "keyboard_shortcuts.notifications": "to open notifications column", @@ -246,8 +234,8 @@ "keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്", "keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ", "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.search": "തിരയൽ ഫോക്കസ് ചെയ്യുന്നതിന്", + "keyboard_shortcuts.spoilers": "CW ഫീൽഡ് കാണിക്കാൻ/മറയ്ക്കാൻ", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "മീഡിയ കാണിക്കുന്നതിനും/മറയ്ക്കുന്നതിനും", @@ -274,7 +262,7 @@ "lists.subheading": "എന്റെ പട്ടികകൾ", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "ലോഡിംഗ്...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "കാണാനില്ല", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "കാലാവധി", @@ -306,7 +294,7 @@ "notification.favourite": "{name} favourited your status", "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു", - "notification.mention": "{name} mentioned you", + "notification.mention": "{name} നിങ്ങളെ സൂചിപ്പിച്ചു", "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", @@ -318,20 +306,21 @@ "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക", "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.show": "കാണിക്കുക", - "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow": "പുതിയ പിന്തുടരുന്നവർ:", "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", - "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.mention": "സൂചനകൾ:", "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.push": "പുഷ് അറിയിപ്പുകൾ", "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "എല്ലാം", "notifications.filter.boosts": "ബൂസ്റ്റുകൾ", "notifications.filter.favourites": "പ്രിയപ്പെട്ടവ", "notifications.filter.follows": "പിന്തുടരുന്നു", - "notifications.filter.mentions": "Mentions", + "notifications.filter.mentions": "സൂചനകൾ", "notifications.filter.polls": "പോൾ ഫലങ്ങൾ", "notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്ഡേറ്റുകൾ", "notifications.grant_permission": "അനുമതി നൽകുക.", @@ -358,14 +347,14 @@ "privacy.private.long": "Post to followers only", "privacy.private.short": "പിന്തുടരുന്നവർക്ക് മാത്രം", "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", + "privacy.public.short": "എല്ലാവര്ക്കും", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", "refresh": "പുതുക്കുക", "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}ദിവസം", + "relative_time.hours": "{number}മണി", "relative_time.just_now": "ഇപ്പോൾ", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", @@ -431,15 +420,15 @@ "status.uncached_media_warning": "ലഭ്യമല്ല", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", + "suggestions.dismiss": "നിർദ്ദേശം ഒഴിവാക്കൂ", "suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…", "tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ", "tabs_bar.home": "ഹോം", "tabs_bar.local_timeline": "പ്രാദേശികം", "tabs_bar.notifications": "അറിയിപ്പുകൾ", "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.days": "{number, plural, one {# ദിവസം} other {# ദിവസങ്ങൾ}} ബാക്കി", + "time_remaining.hours": "{number, plural, one {# മണിക്കൂർ} other {# മണിക്കൂർ}} ശേഷിക്കുന്നു", "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", @@ -467,20 +456,20 @@ "upload_modal.apply": "പ്രയോഗിക്കുക", "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", + "upload_modal.detect_text": "ചിത്രത്തിൽ നിന്ന് വാചകം കണ്ടെത്തുക", "upload_modal.edit_media": "മീഡിയ തിരുത്തുക", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "OCR തയ്യാറാക്കുന്നു…", - "upload_modal.preview_label": "Preview ({ratio})", + "upload_modal.preview_label": "പൂര്വ്വദൃശ്യം({ratio})", "upload_progress.label": "Uploading…", "video.close": "വീഡിയോ അടയ്ക്കുക", "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക", - "video.expand": "Expand video", + "video.expand": "വീഡിയോ വികസപ്പിക്കൂ", "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", "video.hide": "വീഡിയോ മറയ്ക്കുക", - "video.mute": "Mute sound", - "video.pause": "Pause", + "video.mute": "ശബ്ദം നിശബ്ദമാക്കൂ", + "video.pause": "താൽക്കാലികമായി നിർത്തുക", "video.play": "പ്ലേ", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 8559665b9..371e42765 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -22,6 +22,7 @@ "account.follows.empty": "हा वापरकर्ता अजूनपर्यंत कोणाचा अनुयायी नाही.", "account.follows_you": "तुमचा अनुयायी आहे", "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा", + "account.joined": "Joined {date}", "account.last_status": "शेवटचे सक्रिय", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index ec992c679..56cf7ab10 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -1,179 +1,184 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.account_note_header": "Catatan", + "account.add_or_remove_from_list": "Tambah atau Buang dari senarai", "account.badges.bot": "Bot", - "account.badges.group": "Group", - "account.block": "Block @{name}", + "account.badges.group": "Kumpulan", + "account.block": "Sekat @{name}", "account.block_domain": "Hide everything from {domain}", - "account.blocked": "Blocked", - "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Cancel follow request", - "account.direct": "Direct message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.blocked": "Disekat", + "account.browse_more_on_origin_server": "Layari selebihnya di profil original", + "account.cancel_follow_request": "Batalkan permintaan mengikuti", + "account.direct": "Mesej langsung @{name}", + "account.disable_notifications": "Berhenti memaklumi saya apabila @{name} mengirim", "account.domain_blocked": "Domain hidden", - "account.edit_profile": "Edit profile", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Feature on profile", - "account.follow": "Follow", - "account.followers": "Followers", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.last_status": "Last active", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.edit_profile": "Sunting profil", + "account.enable_notifications": "Maklumi saya apabila @{name} mengirim", + "account.endorse": "Tampilkan di profil", + "account.follow": "Ikuti", + "account.followers": "Pengikut", + "account.followers.empty": "Belum ada yang mengikuti pengguna ini.", + "account.followers_counter": "{count, plural, one {{counter} Pengikut} other {{counter} Pengikut}}", + "account.following_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}", + "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", + "account.follows_you": "Mengikuti anda", + "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Terakhir aktif", + "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}", + "account.locked_info": "Status privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.", "account.media": "Media", - "account.mention": "Mention @{name}", - "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", + "account.mention": "Sebut @{name}", + "account.moved_to": "{name} telah berpindah ke:", + "account.mute": "Bisukan @{name}", + "account.mute_notifications": "Bisukan pemberitahuan daripada @{name}", + "account.muted": "Dibisukan", + "account.never_active": "Jangan sesekali", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", - "account.report": "Report @{name}", + "account.report": "Laporkan @{name}", "account.requested": "Awaiting approval", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", + "account.share": "Kongsi profil @{name}", + "account.show_reblogs": "Tunjukkan galakan daripada @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account.unblock": "Unblock @{name}", + "account.unblock": "Nyahsekat @{name}", "account.unblock_domain": "Unhide {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", + "account.unendorse": "Jangan tampilkan di profil", + "account.unfollow": "Nyahikut", + "account.unmute": "Nyahbisukan @{name}", + "account.unmute_notifications": "Nyahbisukan pemberitahuan daripada @{name}", "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "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", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", - "column.bookmarks": "Bookmarks", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", + "alert.rate_limited.message": "Sila cuba semula selepas {retry_time, time, medium}.", + "alert.rate_limited.title": "Kadar terhad", + "alert.unexpected.message": "Berlaku ralat di luar jangkaan.", + "alert.unexpected.title": "Alamak!", + "announcement.announcement": "Pengumuman", + "autosuggest_hashtag.per_week": "{count} seminggu", + "boost_modal.combo": "Anda boleh mengetik {combo} untuk melangkauinya lain kali", + "bundle_column_error.body": "Terdapat kesilapan ketika memuatkan komponen ini.", + "bundle_column_error.retry": "Cuba lagi", + "bundle_column_error.title": "Masalah rangkaian", + "bundle_modal_error.close": "Tutup", + "bundle_modal_error.message": "Ada yang tidak kena semasa memuatkan komponen ini.", + "bundle_modal_error.retry": "Cuba lagi", + "column.blocks": "Pengguna yang disekat", + "column.bookmarks": "Penanda buku", + "column.community": "Garis masa tempatan", + "column.direct": "Mesej langsung", + "column.directory": "Buka profil", "column.domain_blocks": "Hidden domains", - "column.favourites": "Favourites", - "column.follow_requests": "Follow requests", - "column.home": "Home", - "column.lists": "Lists", - "column.mutes": "Muted users", - "column.notifications": "Notifications", + "column.favourites": "Kegemaran", + "column.follow_requests": "Permintaan ikutan", + "column.home": "Laman Utama", + "column.lists": "Senarai", + "column.mutes": "Pengguna yang dibisukan", + "column.notifications": "Pemberitahuan", "column.pins": "Pinned toot", - "column.public": "Federated timeline", - "column_back_button.label": "Back", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", - "community.column_settings.local_only": "Local only", + "column.public": "Garis masa bersekutu", + "column_back_button.label": "Kembali", + "column_header.hide_settings": "Sembunyikan tetapan", + "column_header.moveLeft_settings": "Alih lajur ke kiri", + "column_header.moveRight_settings": "Alih lajur ke kanan", + "column_header.pin": "Sematkan", + "column_header.show_settings": "Tunjukkan tetapan", + "column_header.unpin": "Nyahsemat", + "column_subheading.settings": "Tetapan", + "community.column_settings.local_only": "Tempatan sahaja", "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Jauh sahaja", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", + "compose_form.lock_disclaimer": "Akaun anda tidak {locked}. Sesiapapun boleh mengikuti anda untuk melihat kiriman pengikut-sahaja anda.", + "compose_form.lock_disclaimer.lock": "dikunci", "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.add_option": "Tambah pilihan", + "compose_form.poll.duration": "Tempoh undian", + "compose_form.poll.option_placeholder": "Pilihan {number}", + "compose_form.poll.remove_option": "Buang pilihan ini", + "compose_form.poll.switch_to_multiple": "Ubah kepada membenarkan aneka undian", + "compose_form.poll.switch_to_single": "Ubah kepada undian pilihan tunggal", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.sensitive.hide": "{count, plural, one {Tandakan media sbg sensitif} other {Tandakan media sbg sensitif}}", + "compose_form.sensitive.marked": "{count, plural, one {Media telah ditanda sbg sensitif} other {Media telah ditanda sbg sensitif}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media tidak ditanda sbg sensitif} other {Media tidak ditanda sbg sensitif}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", + "compose_form.spoiler_placeholder": "Tulis amaran anda di sini", + "confirmation_modal.cancel": "Batal", + "confirmations.block.block_and_report": "Sekat & Lapor", + "confirmations.block.confirm": "Sekat", + "confirmations.block.message": "Anda pasti mahu menyekat {name}?", + "confirmations.delete.confirm": "Padam", "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.delete_list.confirm": "Padam", + "confirmations.delete_list.message": "Anda pasti mahu memadam senarai ini selama-lamanya?", "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.domain_block.message": "Anda betul-betul, sungguh-sungguh pasti mahu menyekat keseluruhan {domain}? Biasanya sekatan dan bisuan tersasar sudah memadai dan baik. Anda tidak akan dapat melihat kandungan dari 'domain' di sebarang garis masa awam mahupun pemberitahuan anda. Pengikut anda dari 'domain' itu juga akan dikeluarkan.", + "confirmations.logout.confirm": "Log keluar", + "confirmations.logout.message": "Anda pasti mahu log keluar?", + "confirmations.mute.confirm": "Bisukan", + "confirmations.mute.explanation": "Ini akan menyembunyikan kiriman-kiriman daripada mereka, juga kiriman yang menyebut mereka, tapi masih membenarkan mereka melihat kiriman-kiriman anda dan mengikuti anda.", + "confirmations.mute.message": "Anda pasti mahu membisukan {name}?", + "confirmations.redraft.confirm": "Padam & rangka semula", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", - "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", + "confirmations.reply.confirm": "Balas", + "confirmations.reply.message": "Membalas sekarang akan menghapuskan mesej yang anda sedang karang. Anda pasti mahu teruskan?", + "confirmations.unfollow.confirm": "Nyahikut", + "confirmations.unfollow.message": "Anda pasti mahu nyahikuti {name}?", + "conversation.delete": "Padam perbualan", + "conversation.mark_as_read": "Tanda sudah dibaca", + "conversation.open": "Lihat perbualan", + "conversation.with": "Dengan {names}", + "directory.federated": "Dari fediverse yang diketahui", + "directory.local": "Dari {domain} sahaja", + "directory.new_arrivals": "Ketibaan baharu", + "directory.recently_active": "Aktif baru-baru ini", "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objects", - "emoji_button.people": "People", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", - "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", - "emoji_button.travel": "Travel & Places", - "empty_column.account_suspended": "Account suspended", + "embed.preview": "Begini rupanya nanti:", + "emoji_button.activity": "Aktiviti", + "emoji_button.custom": "Tersendiri", + "emoji_button.flags": "Bendera", + "emoji_button.food": "Makanan & Minuman", + "emoji_button.label": "Masukkan emoji", + "emoji_button.nature": "Alam Semulajadi", + "emoji_button.not_found": "Tiada emojo!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objek", + "emoji_button.people": "Orang", + "emoji_button.recent": "Kerap digunakan", + "emoji_button.search": "Cari...", + "emoji_button.search_results": "Hasil carian", + "emoji_button.symbols": "Simbol", + "emoji_button.travel": "Kembara & Tempat", + "empty_column.account_suspended": "Akaun digantung", "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.account_unavailable": "Profil tidak tersedia", + "empty_column.blocks": "Anda belum menyekat sesiapa.", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.community": "Garis masa tempatan kosong. Tulislah secara awam untuk memulakan sesuatu!", + "empty_column.direct": "Anda belum mempunyai mesej langsung. Ia akan terpapar di sini apabila anda menghantar atau menerimanya.", "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "Anda belum mempunyai permintaan ikutan. Ia akan terpapar di sini apabila ada nanti.", + "empty_column.hashtag": "Belum ada apa-apa dengan hashtag ini.", + "empty_column.home": "Garis masa halaman utama anda kosong! Lawati {public} atau lakukan carian untuk bermula dan berjumpa para pengguna lain.", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.lists": "Anda belum mempunyai sebarang senarai. Ia akan terpapar di sini apabila anda merekanya.", + "empty_column.mutes": "Anda belum membisukan sesiapa.", + "empty_column.notifications": "Anda belum ada sebarang pemberitahuan. Berhubunglah dengan yang lain untuk memulakan perbualan.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", + "error.unexpected_crash.explanation": "Disebabkan 'bug' pada kod kami ataupun isu kesesuaian penyemak imbas, halaman ini tidak dapat dipaparkan dengan tepat.", + "error.unexpected_crash.explanation_addons": "Laman ini tidak dapat dipaparkan dengan tepat. Kesilapan ini mungkin berpunca daripada add-on ataupun peralatan terjemahan automatik penyemak imbas.", + "error.unexpected_crash.next_steps": "Cuba segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.", + "error.unexpected_crash.next_steps_addons": "Cuba menyahdayakannya dan segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.", + "errors.unexpected_crash.copy_stacktrace": "Salin 'stacktrace' ke papan klip", + "errors.unexpected_crash.report_issue": "Laporkan masalah", + "follow_recommendations.done": "Selesai", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -245,124 +233,125 @@ "keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.requests": "untuk membuka senarai permintaan ikutan", + "keyboard_shortcuts.search": "untuk carian bertumpu", + "keyboard_shortcuts.spoilers": "untuk memapar/menyembunyikan bidang CW", + "keyboard_shortcuts.start": "untuk membuka lajur \"bermula\"", + "keyboard_shortcuts.toggle_hidden": "untuk memapar/menyembunyikan teks di belakang CW", + "keyboard_shortcuts.toggle_sensitivity": "untuk memapar/menyembunyikan media", "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", + "keyboard_shortcuts.up": "untuk ke atas dalam senarai", + "lightbox.close": "Tutup", + "lightbox.compress": "Kecilkan kotak tengok gambar", + "lightbox.expand": "Besarkan kotak tengok gambar", + "lightbox.next": "Seterusnya", + "lightbox.previous": "Sebelumnya", + "lists.account.add": "Tambah ke senarai", + "lists.account.remove": "Keluarkan dari senarai", + "lists.delete": "Padam senarai", + "lists.edit": "Sunting senarai", + "lists.edit.submit": "Ubah tajuk", + "lists.new.create": "Tambah senarai", + "lists.new.title_placeholder": "Tajuk senarai baharu", + "lists.replies_policy.followed": "Sesiapa yang diikuti", + "lists.replies_policy.list": "Ahli-ahli dalam senarai", + "lists.replies_policy.none": "Tiada sesiapa", + "lists.replies_policy.title": "Tunjukkan balasan kepada:", + "lists.search": "Cari dalam kalangan orang yang anda ikuti", + "lists.subheading": "Senarai anda", + "load_pending": "{count, plural, one {# item baharu} other {# item baharu}}", + "loading_indicator.label": "Memuatkan...", + "media_gallery.toggle_visible": "Sembunyikan {number, plural, one {gambar} other {gambar}}", + "missing_indicator.label": "Tidak dijumpai", + "missing_indicator.sublabel": "Sumber ini gagal ditemukan", + "mute_modal.duration": "Tempoh", + "mute_modal.hide_notifications": "Sembunyikan pemberitahuan daripada pengguna ini?", + "mute_modal.indefinite": "Tak tentu", + "navigation_bar.apps": "Aplikasi mudah alih", + "navigation_bar.blocks": "Pengguna yang disekat", + "navigation_bar.bookmarks": "Penanda buku", + "navigation_bar.community_timeline": "Garis masa tempatan", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "navigation_bar.direct": "Mesej langsung", + "navigation_bar.discover": "Teroka", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.edit_profile": "Sunting profil", + "navigation_bar.favourites": "Kegemaran", + "navigation_bar.filters": "Perkataan yang dibisukan", + "navigation_bar.follow_requests": "Permintaan ikutan", + "navigation_bar.follows_and_followers": "Ikutan dan pengikut", "navigation_bar.info": "About this instance", - "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", + "navigation_bar.keyboard_shortcuts": "Kekunci Pantas", + "navigation_bar.lists": "Senarai", + "navigation_bar.logout": "Log Keluar", + "navigation_bar.mutes": "Pengguna yang dibisukan", + "navigation_bar.personal": "Peribadi", "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", + "navigation_bar.preferences": "Aturan", + "navigation_bar.public_timeline": "Garis masa bersekutu", + "navigation_bar.security": "Keselamatan", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", + "notification.follow": "{name} mengikuti anda", + "notification.follow_request": "{name} meminta untuk mengikuti anda", + "notification.mention": "{name} menyebut anda", + "notification.own_poll": "Undian anda telah tamat", + "notification.poll": "Sebuah undian yang anda undi telah tamat", "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", + "notification.status": "{name} baru sahaja membuat kiriman", + "notifications.clear": "Bersihkan pemberitahuan", + "notifications.clear_confirmation": "Anda pasti mahu membuang semua pemberitahuan anda selama-lamanya?", + "notifications.column_settings.alert": "Pemberitahuan desktop", + "notifications.column_settings.favourite": "Kegemaran:", + "notifications.column_settings.filter_bar.advanced": "Papar semua kategori", + "notifications.column_settings.filter_bar.category": "Bar penapis pantas", + "notifications.column_settings.filter_bar.show": "Papar", + "notifications.column_settings.follow": "Pengikut baharu:", + "notifications.column_settings.follow_request": "Permintaan ikutan baharu:", + "notifications.column_settings.mention": "Sebutan:", + "notifications.column_settings.poll": "Keputusan undian:", + "notifications.column_settings.push": "Pemberitahuan tolak", + "notifications.column_settings.reblog": "Galakan:", + "notifications.column_settings.show": "Papar dalam lajur", + "notifications.column_settings.sound": "Mainkan bunyi", "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "notifications.column_settings.unread_markers.category": "Penanda pemberitahuan belum dibaca", + "notifications.filter.all": "Semua", + "notifications.filter.boosts": "Galakan", + "notifications.filter.favourites": "Kegemaran", + "notifications.filter.follows": "Ikutan", + "notifications.filter.mentions": "Sebutan", + "notifications.filter.polls": "Keputusan undian", + "notifications.filter.statuses": "Kemaskini dari orang yang anda ikuti", + "notifications.grant_permission": "Beri kebenaran.", + "notifications.group": "{count} pemberitahuan", + "notifications.mark_as_read": "Tandakan semua pemberitahuan sebagai sudah dibaca", + "notifications.permission_denied": "Pemberitahuan desktop tidak tersedia kerana permintaan kebenaran penyemak imbas sebelum ini ditolak", + "notifications.permission_denied_alert": "Pemberitahuan desktop tidak boleh didayakan kerana kebenaran penyemak imbas ditolak sebelum ini", + "notifications.permission_required": "Pemberitahuan desktop tidak tersedia kerana keizinan yang diperlukan tidak diberi.", + "notifications_permission_banner.enable": "Dayakan pemberitahuan desktop", + "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan desktop. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan desktop melalui butang {icon} di atas sesudah didayakan.", + "notifications_permission_banner.title": "Takkan terlepas apa-apa", + "picture_in_picture.restore": "Letak semula", + "poll.closed": "Ditutup", + "poll.refresh": "Muat Semula", + "poll.total_people": "{count, plural, one {# orang} other {# orang}}", + "poll.total_votes": "{count, plural, one {# undian} other {# undian}}", + "poll.vote": "Undi", + "poll.voted": "Anda mengundi jawapan ini", + "poll_button.add_poll": "Tambah undian", + "poll_button.remove_poll": "Buang undian", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Langsung", "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", + "privacy.private.short": "Pengikut sahaja", "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", + "privacy.public.short": "Awam", "privacy.unlisted.long": "Do not show in public timelines", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", + "privacy.unlisted.short": "Tidak tersenarai", + "refresh": "Muat Semula", + "regeneration_indicator.label": "Memuatkan…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", @@ -423,58 +412,58 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "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", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", + "status.show_less": "Papar sedikit", + "status.show_less_all": "Papar sedikit untuk semua", + "status.show_more": "Papar lagi", + "status.show_more_all": "Papar lebih untuk semua", + "status.show_thread": "Tunjukkan perbincangan", + "status.uncached_media_warning": "Tidak tersedia", + "status.unmute_conversation": "Nyahbisukan perbualan", + "status.unpin": "Nyahsemat daripada profil", + "suggestions.dismiss": "Batalkan cadangan", + "suggestions.header": "Anda mungkin berminat dengan…", + "tabs_bar.federated_timeline": "Bersekutu", + "tabs_bar.home": "Laman utama", + "tabs_bar.local_timeline": "Tempatan", + "tabs_bar.notifications": "Pemberitahuan", + "tabs_bar.search": "Cari", + "time_remaining.days": "tinggal {number, plural, one {# hari} other {# hari}}", + "time_remaining.hours": "tinggal {number, plural, one {# jam} other {# jam}}", + "time_remaining.minutes": "tinggal {number, plural, one {# minit} other {# minit}}", + "time_remaining.moments": "Masa yang tinggal", + "time_remaining.seconds": "tinggal {number, plural, one {# saat} other {# saat}}", + "timeline_hint.remote_resource_not_displayed": "{resource} dari pelayan lain tidak dipaparkan.", + "timeline_hint.resources.followers": "Pengikut", + "timeline_hint.resources.follows": "Ikutan", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "trends.counter_by_accounts": "{count, plural, one {{counter} orang}other {{counter} orang}} bercakap", + "trends.trending_now": "Trending kini", + "ui.beforeunload": "Draf anda akan terhapus jika anda meninggalkan Mastodon.", "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "units.short.million": "{count}J", + "units.short.thousand": "{count}R", + "upload_area.title": "Seret & letak untuk muat naik", + "upload_button.label": "Tambah fail gambar, video atau audio", + "upload_error.limit": "Sudah melebihi had muat naik.", + "upload_error.poll": "Tidak boleh memuat naik fail bersama undian.", + "upload_form.audio_description": "Menjelaskan untuk orang yang ada masalah pendengaran", + "upload_form.description": "Menjelaskan untuk orang yang ada masalah penglihatan", + "upload_form.edit": "Sunting", + "upload_form.thumbnail": "Ubah gambar kecil", + "upload_form.undo": "Padam", + "upload_form.video_description": "Menjelaskan untuk orang yang ada masalah pendengaran atau penglihatan", + "upload_modal.analyzing_picture": "Meneliti gambar…", + "upload_modal.apply": "Guna", + "upload_modal.choose_image": "Pilih gambar", "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.preparing_ocr": "Preparing OCR…", - "upload_modal.preview_label": "Preview ({ratio})", + "upload_modal.detect_text": "Cam perkataan daripada gambar", + "upload_modal.edit_media": "Sunting media", + "upload_modal.hint": "Ketik atau seret ke bulatan pada pratonton untuk memilih titik tumpu yang akan kelihatan pada semua gambar kecil.", + "upload_modal.preparing_ocr": "Mempersiapkan OCR…", + "upload_modal.preview_label": "Pratonton ({ratio})", "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", + "video.close": "Tutup video", + "video.download": "Muat turun fail", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", "video.fullscreen": "Full screen", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 095114255..6c305aae6 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -10,7 +10,7 @@ "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", "account.disable_notifications": "Geef geen melding meer wanneer @{name} toot", - "account.domain_blocked": "Server verborgen", + "account.domain_blocked": "Domein geblokkeerd", "account.edit_profile": "Profiel bewerken", "account.enable_notifications": "Geef een melding wanneer @{name} toot", "account.endorse": "Op profiel weergeven", @@ -21,7 +21,8 @@ "account.following_counter": "{count, plural, one {{counter} volgend} other {{counter} volgend}}", "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", - "account.hide_reblogs": "Verberg boosts van @{name}", + "account.hide_reblogs": "Boosts van @{name} verbergen", + "account.joined": "Joined {date}", "account.last_status": "Laatst actief", "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}", "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie hen kan volgen.", @@ -37,14 +38,14 @@ "account.report": "@{name} rapporteren", "account.requested": "Wacht op goedkeuring. Klik om het volgverzoek te annuleren", "account.share": "Profiel van @{name} delen", - "account.show_reblogs": "Toon boosts van @{name}", + "account.show_reblogs": "Boosts van @{name} tonen", "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toots}}", "account.unblock": "@{name} deblokkeren", "account.unblock_domain": "{domain} niet langer verbergen", "account.unendorse": "Niet op profiel weergeven", "account.unfollow": "Ontvolgen", "account.unmute": "@{name} niet langer negeren", - "account.unmute_notifications": "@{name} meldingen niet langer negeren", + "account.unmute_notifications": "Meldingen van @{name} niet langer negeren", "account_note.placeholder": "Klik om een opmerking toe te voegen", "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", "alert.rate_limited.title": "Beperkt te gebruiken", @@ -64,7 +65,7 @@ "column.community": "Lokale tijdlijn", "column.direct": "Directe berichten", "column.directory": "Gebruikersgids", - "column.domain_blocks": "Genegeerde servers", + "column.domain_blocks": "Geblokkeerde domeinen", "column.favourites": "Favorieten", "column.follow_requests": "Volgverzoeken", "column.home": "Start", @@ -84,7 +85,7 @@ "community.column_settings.local_only": "Alleen lokaal", "community.column_settings.media_only": "Alleen media", "community.column_settings.remote_only": "Alleen andere servers", - "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd. Echter, de beheerders en moderatoren van jouw en de ontvangende server(s) kunnen dit bericht mogelijk wel bekijken.", + "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd.", "compose_form.direct_message_warning_learn_more": "Meer leren", "compose_form.hashtag_warning": "Deze toot valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare toots kunnen via hashtags gevonden worden.", "compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de toots zien die je alleen aan jouw volgers hebt gericht.", @@ -101,8 +102,8 @@ "compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}", "compose_form.sensitive.marked": "{count, plural, one {Media is als gevoelig gemarkeerd} other {Media is als gevoelig gemarkeerd}}", "compose_form.sensitive.unmarked": "{count, plural, one {Media is niet als gevoelig gemarkeerd} other {Media is niet als gevoelig gemarkeerd}}", - "compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen", - "compose_form.spoiler.unmarked": "Tekst is niet verborgen", + "compose_form.spoiler.marked": "Inhoudswaarschuwing verwijderen", + "compose_form.spoiler.unmarked": "Inhoudswaarschuwing toevoegen", "compose_form.spoiler_placeholder": "Waarschuwingstekst", "confirmation_modal.cancel": "Annuleren", "confirmations.block.block_and_report": "Blokkeren en rapporteren", @@ -148,23 +149,24 @@ "emoji_button.search": "Zoeken...", "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", - "emoji_button.travel": "Reizen en plekken", + "emoji_button.travel": "Reizen en locaties", "empty_column.account_suspended": "Account opgeschort", "empty_column.account_timeline": "Hier zijn geen toots!", "empty_column.account_unavailable": "Profiel is niet beschikbaar", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", "empty_column.bookmarked_statuses": "Jij hebt nog geen toots aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.", - "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", + "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de spits af te bijten!", "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.", - "empty_column.domain_blocks": "Er zijn nog geen genegeerde servers.", + "empty_column.domain_blocks": "Er zijn nog geen geblokkeerde domeinen.", "empty_column.favourited_statuses": "Jij hebt nog geen favoriete toots. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.", "empty_column.favourites": "Niemand heeft deze toot nog aan hun favorieten toegevoegd. Wanneer iemand dit doet, valt dat hier te zien.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", - "empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.", - "empty_column.home.public_timeline": "de globale tijdlijn", + "empty_column.home": "Deze tijdlijn is leeg! Volg meer mensen om het te vullen. {suggestions}", + "empty_column.home.suggestions": "Enkele aanbevelingen bekijken", "empty_column.list": "Er is nog niks te zien in deze lijst. Wanneer lijstleden nieuwe toots publiceren, zijn deze hier te zien.", - "empty_column.lists": "Jij hebt nog enkele lijst. Wanneer je er eentje hebt aangemaakt, valt deze hier te zien.", + "empty_column.lists": "Jij hebt nog geen enkele lijst. Wanneer je er eentje hebt aangemaakt, valt deze hier te zien.", "empty_column.mutes": "Jij hebt nog geen gebruikers genegeerd.", "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", + "follow_recommendations.done": "Klaar", + "follow_recommendations.heading": "Volg mensen waarvan je graag toots wil zien! Hier zijn enkele aanbevelingen.", + "follow_recommendations.lead": "Toots van mensen die je volgt zullen in chronologische volgorde onder start verschijnen. Wees niet bang om hierin fouten te maken, want je kunt mensen op elk moment net zo eenvoudig ontvolgen!", "follow_request.authorize": "Goedkeuren", "follow_request.reject": "Afkeuren", "follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.", @@ -189,7 +194,7 @@ "hashtag.column_header.tag_mode.all": "en {additional}", "hashtag.column_header.tag_mode.any": "of {additional}", "hashtag.column_header.tag_mode.none": "zonder {additional}", - "hashtag.column_settings.select.no_options_message": "Geen voorstellen gevonden", + "hashtag.column_settings.select.no_options_message": "Geen aanbevelingen gevonden", "hashtag.column_settings.select.placeholder": "Vul hashtags in…", "hashtag.column_settings.tag_mode.all": "Allemaal", "hashtag.column_settings.tag_mode.any": "Een van deze", @@ -203,57 +208,40 @@ "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}", "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}", "intervals.full.minutes": "{number, plural, one {# minuut} other {# minuten}}", - "introduction.federation.action": "Volgende", - "introduction.federation.federated.headline": "Globaal", - "introduction.federation.federated.text": "Openbare toots van mensen op andere servers in de fediverse verschijnen op de globale tijdlijn.", - "introduction.federation.home.headline": "Start", - "introduction.federation.home.text": "Toots van mensen die jij volgt verschijnen onder start. Je kunt iedereen op elke server volgen!", - "introduction.federation.local.headline": "Lokaal", - "introduction.federation.local.text": "Openbare toots van mensen die ook op jouw server zitten verschijnen op de lokale tijdlijn.", - "introduction.interactions.action": "Introductie beëindigen!", - "introduction.interactions.favourite.headline": "Favorieten", - "introduction.interactions.favourite.text": "Je kunt door een toot aan jouw favorieten toe te voegen, deze voor later bewaren en de auteur laten weten dat je de toot leuk vind.", - "introduction.interactions.reblog.headline": "Boosten", - "introduction.interactions.reblog.text": "Je kunt toots van andere mensen met jouw volgers delen door deze te boosten.", - "introduction.interactions.reply.headline": "Reageren", - "introduction.interactions.reply.text": "Je kunt op toots van andere mensen en op die van jezelf reageren, waardoor er een gesprek ontstaat.", - "introduction.welcome.action": "Laten we beginnen!", - "introduction.welcome.headline": "Eerste stappen", - "introduction.welcome.text": "Welkom in de fediverse! Binnen enkele ogenblikken kun jij berichten (toots) versturen en met vrienden op veel verschillende servers praten. Maar deze server, {domain}, is speciaal—het herbergt jouw profiel, onthou dus de naam.", - "keyboard_shortcuts.back": "om terug te gaan", - "keyboard_shortcuts.blocked": "om de door jou geblokkeerde gebruikers te tonen", - "keyboard_shortcuts.boost": "om te boosten", - "keyboard_shortcuts.column": "om op een toot te focussen in één van de kolommen", - "keyboard_shortcuts.compose": "om het tekstvak voor toots te focussen", + "keyboard_shortcuts.back": "Ga terug", + "keyboard_shortcuts.blocked": "Geblokkeerde gebruikers tonen", + "keyboard_shortcuts.boost": "Toot boosten", + "keyboard_shortcuts.column": "Op één van de kolommen focussen", + "keyboard_shortcuts.compose": "Tekstveld voor toots focussen", "keyboard_shortcuts.description": "Omschrijving", - "keyboard_shortcuts.direct": "om jouw directe berichten te tonen", - "keyboard_shortcuts.down": "om naar beneden door de lijst te bewegen", - "keyboard_shortcuts.enter": "om de toot volledig te tonen", - "keyboard_shortcuts.favourite": "om aan jouw favorieten toe te voegen", - "keyboard_shortcuts.favourites": "om jouw lijst met favorieten te tonen", - "keyboard_shortcuts.federated": "om de globale tijdlijn te tonen", + "keyboard_shortcuts.direct": "Jouw directe berichten tonen", + "keyboard_shortcuts.down": "Naar beneden in de lijst bewegen", + "keyboard_shortcuts.enter": "Toot volledig tonen", + "keyboard_shortcuts.favourite": "Aan jouw favorieten toevoegen", + "keyboard_shortcuts.favourites": "Favorieten tonen", + "keyboard_shortcuts.federated": "Globale tijdlijn tonen", "keyboard_shortcuts.heading": "Sneltoetsen", - "keyboard_shortcuts.home": "om jouw starttijdlijn te tonen", + "keyboard_shortcuts.home": "Start tonen", "keyboard_shortcuts.hotkey": "Sneltoets", - "keyboard_shortcuts.legend": "om deze legenda te tonen", - "keyboard_shortcuts.local": "om de lokale tijdlijn te tonen", - "keyboard_shortcuts.mention": "om de auteur te vermelden", - "keyboard_shortcuts.muted": "om de door jou genegeerde gebruikers te tonen", - "keyboard_shortcuts.my_profile": "om jouw profiel te tonen", - "keyboard_shortcuts.notifications": "om jouw meldingen te tonen", - "keyboard_shortcuts.open_media": "om media te openen", - "keyboard_shortcuts.pinned": "om jouw vastgezette toots te tonen", - "keyboard_shortcuts.profile": "om het gebruikersprofiel te openen", - "keyboard_shortcuts.reply": "om te reageren", - "keyboard_shortcuts.requests": "om jouw volgverzoeken te tonen", - "keyboard_shortcuts.search": "om het zoekvak te focussen", - "keyboard_shortcuts.spoilers": "om het waarschuwingstekstveld (CW) te tonen/verbergen", - "keyboard_shortcuts.start": "om de \"Aan de slag\"-kolom te tonen", - "keyboard_shortcuts.toggle_hidden": "om een waarschuwingstekst (CW) te tonen/verbergen", - "keyboard_shortcuts.toggle_sensitivity": "om media te tonen/verbergen", - "keyboard_shortcuts.toot": "om een nieuwe toot te starten", - "keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen", - "keyboard_shortcuts.up": "om omhoog te bewegen in de lijst", + "keyboard_shortcuts.legend": "Deze legenda tonen", + "keyboard_shortcuts.local": "Lokale tijdlijn tonen", + "keyboard_shortcuts.mention": "Auteur vermelden", + "keyboard_shortcuts.muted": "Genegeerde gebruikers tonen", + "keyboard_shortcuts.my_profile": "Jouw profiel tonen", + "keyboard_shortcuts.notifications": "Meldingen tonen", + "keyboard_shortcuts.open_media": "Media openen", + "keyboard_shortcuts.pinned": "Jouw vastgezette toots tonen", + "keyboard_shortcuts.profile": "Gebruikersprofiel auteur openen", + "keyboard_shortcuts.reply": "Reageren", + "keyboard_shortcuts.requests": "Jouw volgverzoeken tonen", + "keyboard_shortcuts.search": "Zoekveld focussen", + "keyboard_shortcuts.spoilers": "Tekst van een inhoudswaarschuwing tonen/verbergen", + "keyboard_shortcuts.start": "\"Aan de slag\" tonen", + "keyboard_shortcuts.toggle_hidden": "Inhoudswaarschuwing tonen/verbergen", + "keyboard_shortcuts.toggle_sensitivity": "Media tonen/verbergen", + "keyboard_shortcuts.toot": "Nieuwe toot schrijven", + "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen", + "keyboard_shortcuts.up": "Naar boven in de lijst bewegen", "lightbox.close": "Sluiten", "lightbox.compress": "Afbeelding passend weergeven", "lightbox.expand": "Afbeelding groot weergeven", @@ -287,7 +275,7 @@ "navigation_bar.compose": "Nieuw toot schrijven", "navigation_bar.direct": "Directe berichten", "navigation_bar.discover": "Ontdekken", - "navigation_bar.domain_blocks": "Genegeerde servers", + "navigation_bar.domain_blocks": "Geblokkeerde domeinen", "navigation_bar.edit_profile": "Profiel bewerken", "navigation_bar.favourites": "Favorieten", "navigation_bar.filters": "Filters", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", "notifications.column_settings.status": "Nieuwe toots:", + "notifications.column_settings.unread_markers.category": "Markeringen voor ongelezen meldingen", "notifications.filter.all": "Alles", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favorieten", @@ -371,12 +360,12 @@ "relative_time.seconds": "{number}s", "relative_time.today": "vandaag", "reply_indicator.cancel": "Annuleren", - "report.forward": "Doorsturen naar {target}", - "report.forward_hint": "Het account bevindt zich op een andere server. Stuur daar eveneens een geanonimiseerde kopie van de rapportage naartoe?", + "report.forward": "Naar {target} doorsturen", + "report.forward_hint": "Het account bevindt zich op een andere server. Wil je daar eveneens een geanonimiseerde kopie van deze rapportage naar toe sturen?", "report.hint": "De rapportage wordt naar de moderator(en) van jouw server gestuurd. Je kunt hieronder een uitleg geven waarom je dit account rapporteert:", "report.placeholder": "Extra opmerkingen", "report.submit": "Verzenden", - "report.target": "Rapporteer {target}", + "report.target": "{target} rapporteren", "search.placeholder": "Zoeken", "search_popout.search_format": "Geavanceerd zoeken", "search_popout.tips.full_text": "Gebruik gewone tekst om te zoeken in jouw toots, gebooste toots, favorieten en in toots waarin je bent vermeldt, en tevens naar gebruikersnamen, weergavenamen en hashtags.", @@ -387,7 +376,7 @@ "search_results.accounts": "Gebruikers", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodonserver niet ingeschakeld.", + "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodon-server niet ingeschakeld.", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_status": "Deze toot in de moderatie-omgeving openen", @@ -431,7 +420,7 @@ "status.uncached_media_warning": "Niet beschikbaar", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", - "suggestions.dismiss": "Voorstel verwerpen", + "suggestions.dismiss": "Aanbeveling verwerpen", "suggestions.header": "Je bent waarschijnlijk ook geïnteresseerd in…", "tabs_bar.federated_timeline": "Globaal", "tabs_bar.home": "Start", @@ -448,8 +437,8 @@ "timeline_hint.resources.follows": "Volgend", "timeline_hint.resources.statuses": "Oudere toots", "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten", - "trends.trending_now": "Trends", - "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", + "trends.trending_now": "Huidige trends", + "ui.beforeunload": "Je concept gaat verloren wanneer je Mastodon verlaat.", "units.short.billion": "{count} mrd.", "units.short.million": "{count} mln.", "units.short.thousand": "{count}k", @@ -466,7 +455,7 @@ "upload_modal.analyzing_picture": "Afbeelding analyseren…", "upload_modal.apply": "Toepassen", "upload_modal.choose_image": "Kies een afbeelding", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.description_placeholder": "Pa's wijze lynx bezag vroom het fikse aquaduct", "upload_modal.detect_text": "Tekst in een afbeelding detecteren", "upload_modal.edit_media": "Media bewerken", "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 38a95533c..234b2175c 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -22,6 +22,7 @@ "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", + "account.joined": "Joined {date}", "account.last_status": "Sist aktiv", "account.link_verified_on": "Eigarskap for denne lenkja vart sist sjekka {date}", "account.locked_info": "Denne kontoen er privat. Eigaren kan sjølv velja kven som kan fylgja han.", @@ -141,7 +142,7 @@ "emoji_button.food": "Mat & drikke", "emoji_button.label": "Legg til emoji", "emoji_button.nature": "Natur", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Ingen emojojoer!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objekt", "emoji_button.people": "Folk", "emoji_button.recent": "Ofte brukt", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Det er ingen gøymde domene ennå.", "empty_column.favourited_statuses": "Du har ingen favoritt-tut ennå. Når du merkjer ein som favoritt, så dukkar det opp her.", "empty_column.favourites": "Ingen har merkt dette tutet som favoritt enno. Når nokon gjer det, så dukkar det opp her.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", "empty_column.home": "Heime-tidslinja di er tom! Besøk {public} eller søk for å starte og å møte andre brukarar.", - "empty_column.home.public_timeline": "den offentlege tidslina", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.", "empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.", "empty_column.mutes": "Du har ikkje målbunde nokon brukarar enno.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte {domain} tilsette at du ville gå gjennom førespurnadar frå desse kontoane manuelt.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# time} other {# timar}}", "intervals.full.minutes": "{number, plural, one {# minutt} other {# minutt}}", - "introduction.federation.action": "Neste", - "introduction.federation.federated.headline": "Føderert", - "introduction.federation.federated.text": "Offentlege innlegg frå andre tenarar i fødiverset dukkar opp i den fødererte tidslina.", - "introduction.federation.home.headline": "Heim", - "introduction.federation.home.text": "Innlegg frå folk du fylgjer dukkar opp i heimetidslina di. Du kan fylgja kven som helst frå kva tenar som helst!", - "introduction.federation.local.headline": "Lokal", - "introduction.federation.local.text": "Offentlege innlegg frå folk på same tenar som deg, dukkar opp i den lokale tidslina.", - "introduction.interactions.action": "Fullfør omvisning!", - "introduction.interactions.favourite.headline": "Merk som favoritt", - "introduction.interactions.favourite.text": "Du kan lagra eit tut til seinare og lata forfattaren vita at du likte det med å merkja det som favoritt.", - "introduction.interactions.reblog.headline": "Framhev", - "introduction.interactions.reblog.text": "Du kan dela andre folk sine tut med å framheva dei.", - "introduction.interactions.reply.headline": "Svar", - "introduction.interactions.reply.text": "Du kan svare på andre folk sine tutar, som gjer at dei vert lenka saman i ein samtale.", - "introduction.welcome.action": "Lat oss koma i gang!", - "introduction.welcome.headline": "Fyrste steg", - "introduction.welcome.text": "Velkommen til fediverset! Om nokre minutt vil du kunne kringkaste meldingar og snakke med dine vener rundt omkring på eit bredt spekter av tenarar. Men denne tenaren, {domain}, er spesiell – den er vert for profilen din, så hugs namnet på den.", "keyboard_shortcuts.back": "for å gå tilbake", "keyboard_shortcuts.blocked": "for å opna lista med blokkerte brukarar", "keyboard_shortcuts.boost": "for å framheva", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", "notifications.column_settings.status": "Nye tuter:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", @@ -450,9 +439,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} folk}} pratar", "trends.trending_now": "Populært no", "ui.beforeunload": "Kladden din forsvinn om du forlèt Mastodon no.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}m.ard", + "units.short.million": "{count}mill", + "units.short.thousand": "{count}T", "upload_area.title": "Drag & slepp for å lasta opp", "upload_button.label": "Legg til medium", "upload_error.limit": "Du har gått over opplastingsgrensa.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index e64bf4a5a..08205aed2 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -22,6 +22,7 @@ "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", + "account.joined": "Joined {date}", "account.last_status": "Sist aktiv", "account.link_verified_on": "Eierskap av denne lenken ble sjekket {date}", "account.locked_info": "Denne kontoens personvernstatus er satt til låst. Eieren vurderer manuelt hvem som kan følge dem.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Det er ingen skjulte domener enda.", "empty_column.favourited_statuses": "Du har ikke likt noen tuter enda. Når du liker en, vil den dukke opp her.", "empty_column.favourites": "Ingen har likt denne tuten enda. Når noen gjør det, vil de dukke opp her.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.", "empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.", "empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.", - "empty_column.home.public_timeline": "en offentlig tidslinje", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Det er ingenting i denne listen ennå. Når medlemmene av denne listen legger ut nye statuser vil de dukke opp her.", "empty_column.lists": "Du har ingen lister enda. Når du lager en, vil den dukke opp her.", "empty_column.mutes": "Du har ikke dempet noen brukere enda.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autorisér", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural,one {# dag} other {# dager}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minutt} other {# minutter}}", - "introduction.federation.action": "Neste", - "introduction.federation.federated.headline": "Felles", - "introduction.federation.federated.text": "Offentlige innlegg fra andre tjenere i strømiverset vil dukke opp i fellestidslinjen.", - "introduction.federation.home.headline": "Hjem", - "introduction.federation.home.text": "Innlegg fra folk du følger vil dukke opp på hjemmestrømmen din. Du kan følge hvem som helst på enhver tjener!", - "introduction.federation.local.headline": "Lokalt", - "introduction.federation.local.text": "Offentlige innlegg fra folk på samme tjener som deg, vil dukke opp i den lokale tidslinjen.", - "introduction.interactions.action": "Avslutt veiledningen!", - "introduction.interactions.favourite.headline": "Lik", - "introduction.interactions.favourite.text": "Du kan lagre en tut til senere, og la forfatteren vite at du satte pris på det, ved å like det.", - "introduction.interactions.reblog.headline": "Fremhev", - "introduction.interactions.reblog.text": "Du kan dele andre folks tutinger med dine følgere ved å fremheve dem.", - "introduction.interactions.reply.headline": "Svar", - "introduction.interactions.reply.text": "Du kan svare på tuten til andre folk og til deg selv, som vil binde dem sammen til en samtale.", - "introduction.welcome.action": "La oss sette i gang!", - "introduction.welcome.headline": "De første skritt", - "introduction.welcome.text": "Velkommen til strømiverset! Om noen øyeblikk, vil du kunne sende meldinger og snakke med dine venner over et bredt spekter av tjenere. Men denne tjeneren, {domain}, er spesiell, for den inneholder profilen din, så husk på navnet dens.", "keyboard_shortcuts.back": "for å navigere tilbake", "keyboard_shortcuts.blocked": "åpne listen over blokkerte brukere", "keyboard_shortcuts.boost": "å fremheve", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", "notifications.column_settings.status": "Nye tuter:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", "notifications.filter.favourites": "Favoritter", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index f56d337d3..d93fff97d 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -22,6 +22,7 @@ "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", + "account.joined": "Arribèt en {date}", "account.last_status": "Darrièra activitat", "account.link_verified_on": "La proprietat d’aqueste ligam foguèt verificada lo {date}", "account.locked_info": "L’estatut de privacitat del compte es configurat sus clavat. Lo proprietari causís qual pòt sègre son compte.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "I a pas encara cap de domeni amagat.", "empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quand n’auretz un, apareisserà aquí.", "empty_column.favourites": "Degun a pas encara mes en favorit aqueste tut. Quand qualqu’un o farà, apareisserà aquí.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Avètz pas encara de demanda d’abonament. Quand n’auretz una apareisserà aquí.", "empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.", "empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.", - "empty_column.home.public_timeline": "lo flux public", + "empty_column.home.suggestions": "Veire mai de suggestions", "empty_column.list": "I a pas res dins la lista pel moment. Quand de membres d’aquesta lista publiquen de novèls estatuts los veiretz aquí.", "empty_column.lists": "Encara avètz pas cap de lista. Quand ne creetz una, apareisserà aquí.", "empty_column.mutes": "Encara avètz pas mes en silenci degun.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", + "follow_recommendations.done": "Acabat", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Acceptar", "follow_request.reject": "Regetar", "follow_requests.unlocked_explanation": "Encara que vòstre compte siasque pas verrolhat, la còla de {domain} pensèt que volriatz benlèu repassar las demandas d’abonament d’aquestes comptes.", @@ -203,23 +208,6 @@ "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}}", - "introduction.federation.action": "Seguent", - "introduction.federation.federated.headline": "Federat", - "introduction.federation.federated.text": "Los tuts publics d’autres servidors del fediverse apareisseràn dins lo flux d’actualitats.", - "introduction.federation.home.headline": "Acuèlh", - "introduction.federation.home.text": "Los tuts del mond que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de mond ont que siasquen !", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los tuts publics del mond del meteis servidor que vosautres apareisseràn dins lo flux local.", - "introduction.interactions.action": "Acabar la leiçon !", - "introduction.interactions.favourite.headline": "Favorit", - "introduction.interactions.favourite.text": "Podètz enregistrar un tut per mai tard, e avisar l’autor que l’avètz aimat, en l’ajustant als favorits.", - "introduction.interactions.reblog.headline": "Partejar", - "introduction.interactions.reblog.text": "Podètz partejar los tuts dels autres amb vòstres seguidors en los partejant.", - "introduction.interactions.reply.headline": "Respondre", - "introduction.interactions.reply.text": "Podètz respondre als tuts dels autres e a vòstres tuts, seràn amassats en una conversacion.", - "introduction.welcome.action": "Anem-i !", - "introduction.welcome.headline": "Primièrs passes", - "introduction.welcome.text": "La benvenguda al fediverse ! D’aquí un momenton, poiretz enviar de messatges e charrar amd d’amics via mantuns servidors. Mas aqueste servidor, {domain}, es especial perque alberga vòstre perfil, doncas oblidatz pas son nom.", "keyboard_shortcuts.back": "anar enrèire", "keyboard_shortcuts.blocked": "dobrir la lista d’utilizaires blocats", "keyboard_shortcuts.boost": "partejar", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", "notifications.column_settings.status": "Tuts novèls :", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Totas", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favorits", @@ -450,7 +439,7 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persona ne parla} other {{counter} personas ne parlan}}", "trends.trending_now": "Tendéncia del moment", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Md", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Lisatz e depausatz per mandar", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json new file mode 100644 index 000000000..1b311b04d --- /dev/null +++ b/app/javascript/mastodon/locales/pa.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "Note", + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.badges.group": "Group", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "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", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "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", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "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.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index f03a0086e..acad358ac 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -22,6 +22,7 @@ "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.", "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", + "account.joined": "Dołączył(a) {date}", "account.last_status": "Ostatnia aktywność", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.", @@ -116,7 +117,7 @@ "confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?", "confirmations.delete_list.confirm": "Usuń", "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?", - "confirmations.domain_block.confirm": "Ukryj wszysyko z domeny", + "confirmations.domain_block.confirm": "Ukryj wszystko z domeny", "confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.", "confirmations.logout.confirm": "Wyloguj", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", @@ -163,10 +164,11 @@ "empty_column.domain_blocks": "Brak ukrytych domen.", "empty_column.favourited_statuses": "Nie dodałeś(-aś) żadnego wpisu do ulubionych. Kiedy to zrobisz, pojawi się on tutaj.", "empty_column.favourites": "Nikt nie dodał tego wpisu do ulubionych. Gdy ktoś to zrobi, pojawi się tutaj.", + "empty_column.follow_recommendations": "Wygląda na to, że nie można wygenerować dla Ciebie żadnych sugestii. Możesz spróbować wyszukać osoby, które znasz, lub przeglądać popularne hashtagi.", "empty_column.follow_requests": "Nie masz żadnych próśb o możliwość śledzenia. Kiedy ktoś utworzy ją, pojawi się tutaj.", "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy(-a)!", "empty_column.home": "Nie śledzisz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.", - "empty_column.home.public_timeline": "globalna oś czasu", + "empty_column.home.suggestions": "Zobacz kilka sugestii", "empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.", "empty_column.lists": "Nie masz żadnych list. Kiedy utworzysz jedną, pojawi się tutaj.", "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.", @@ -178,6 +180,9 @@ "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", + "follow_recommendations.done": "Gotowe", + "follow_recommendations.heading": "Śledź ludzi, których wpisy chcesz czytać. Oto kilka propozycji.", + "follow_recommendations.lead": "Wpisy osób, które śledzisz będą pojawiać się w porządku chronologicznym na stronie głównej. Nie bój się popełniać błędów, możesz bez problemu przestać śledzić każdego w każdej chwili!", "follow_request.authorize": "Autoryzuj", "follow_request.reject": "Odrzuć", "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość śledzenia.", @@ -207,23 +212,6 @@ "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", - "introduction.federation.action": "Dalej", - "introduction.federation.federated.headline": "Oś czasu federacji", - "introduction.federation.federated.text": "Publiczne wpisy osób z tego całego Fediwersum pojawiają się na lokalnej osi czasu.", - "introduction.federation.home.headline": "Strona główna", - "introduction.federation.home.text": "Wpisy osób które śledzisz pojawią się na stronie głównej. Możesz zacząć śledzić użytkowników dowolnego serwera!", - "introduction.federation.local.headline": "Lokalna oś czasu", - "introduction.federation.local.text": "Publiczne wpisy osób z tego samego serwera pojawiają się na lokalnej osi czasu.", - "introduction.interactions.action": "Zakończ poradnik!", - "introduction.interactions.favourite.headline": "Ulubione", - "introduction.interactions.favourite.text": "Możesz zapisać wpis na później i pokazać autorowi, że Ci się spodobał, jeżeli dodasz go .", - "introduction.interactions.reblog.headline": "Podbicia", - "introduction.interactions.reblog.text": "Możesz podzielić się wpisem innego użytkownikami z osobami które Cię śledzą podbijając go.", - "introduction.interactions.reply.headline": "Odpowiedzi", - "introduction.interactions.reply.text": "Możesz odpowiadać na wpisy swoje i innych, tworząc konwersację.", - "introduction.welcome.action": "Rozpocznij!", - "introduction.welcome.headline": "Pierwsze kroki", - "introduction.welcome.text": "Witmay w Fediwersum! Za chwilę dowiesz się, jak przekazywać wiadomości i rozmawiać ze znajomymi pomiędzy różnymi serwerami. Ale ten serwer – {domain} jest wyjątkowy, ponieważ zawiera Twój profil – zapamiętaj więc jego nazwę.", "keyboard_shortcuts.back": "aby cofnąć się", "keyboard_shortcuts.blocked": "aby przejść do listy zablokowanych użytkowników", "keyboard_shortcuts.boost": "aby podbić wpis", @@ -332,6 +320,7 @@ "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", "notifications.column_settings.status": "Nowe wpisy:", + "notifications.column_settings.unread_markers.category": "Znaczniki nieprzeczytanych powiadomień", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", "notifications.filter.favourites": "Ulubione", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 2e0adfa9c..fed22080c 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -22,6 +22,7 @@ "account.follows.empty": "Nada aqui.", "account.follows_you": "Segue você", "account.hide_reblogs": "Ocultar boosts de @{name}", + "account.joined": "Joined {date}", "account.last_status": "Ativo pela última vez", "account.link_verified_on": "Posse deste link foi verificada em {date}", "account.locked_info": "Esta conta está trancada. Sua solicitação para seguir requer aprovação manual do usuário.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Não há domínios bloqueados ainda.", "empty_column.favourited_statuses": "Nada aqui. Quando você favoritar um toot, ele aparecerá aqui.", "empty_column.favourites": "Nada aqui. Quando alguém favoritar, o autor aparecerá aqui.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Nada aqui. Quando você tiver seguidores pendentes, eles aparecerão aqui.", "empty_column.hashtag": "Nada aqui.", "empty_column.home": "Sua linha do tempo está vazia! Visite {public} ou use a pesquisa para começar e conhecer outros usuários.", - "empty_column.home.public_timeline": "a linha do tempo pública", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Não há nada nesta lista ainda. Quando membros desta lista postarem novos statuses, eles vão aparecer aqui.", "empty_column.lists": "Nada aqui. Quando você criar listas, elas aparecerão aqui.", "empty_column.mutes": "Nada aqui.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência", "errors.unexpected_crash.report_issue": "Denunciar problema", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Aprovar", "follow_request.reject": "Vetar", "follow_requests.unlocked_explanation": "Embora sua conta não esteja trancada, o staff de {domain} achou que você podia querer revisar pedidos para te seguir destas contas manualmente.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "introduction.federation.action": "Próximo", - "introduction.federation.federated.headline": "Federada", - "introduction.federation.federated.text": "Posts públicos de outros servidores do fediverso vão aparecer na linha do tempo federada.", - "introduction.federation.home.headline": "Início", - "introduction.federation.home.text": "Posts de pessoas que você segue vão aparecer no seu feed de início. Você pode seguir qualquer pessoa em qualquer servidor!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Posts públicos de pessoas no mesmo servidor que você vão aparecer na linha do tempo local.", - "introduction.interactions.action": "Terminar tutorial!", - "introduction.interactions.favourite.headline": "Favoritos", - "introduction.interactions.favourite.text": "Ao favoritar, você sinaliza ao autor que você gostou do toot.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Ao dar boost, você compartilha toots de outras pessoas para seus seguidores.", - "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Você pode responder aos toots de outras pessoas e formar uma conversa ou responder aos seus e formar uma sequência.", - "introduction.welcome.action": "Vamos lá!", - "introduction.welcome.headline": "Primeiros passos", - "introduction.welcome.text": "Boas vindas ao fediverso! Em alguns momentos, você vai poder transmitir mensagens e falar com pessoas amigas através de uma variedade de servidores. Mas este servidor, {domain}, é especial—é onde seu perfil está hospedado, então lembre do nome dele.", "keyboard_shortcuts.back": "voltar", "keyboard_shortcuts.blocked": "abrir lista de usuários bloqueados", "keyboard_shortcuts.boost": "dar boost", @@ -323,12 +311,13 @@ "notifications.column_settings.mention": "Menções:", "notifications.column_settings.poll": "Enquetes:", "notifications.column_settings.push": "Enviar notificações", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Melhoramentos:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Tocar som", "notifications.column_settings.status": "Novos toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Tudo", - "notifications.filter.boosts": "Boosts", + "notifications.filter.boosts": "Melhoramentos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguindo", "notifications.filter.mentions": "Menções", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index dd3b4eba2..7b93449e0 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -1,14 +1,14 @@ { "account.account_note_header": "A tua nota para @{name}", "account.add_or_remove_from_list": "Adicionar ou remover das listas", - "account.badges.bot": "Bot", + "account.badges.bot": "Robô", "account.badges.group": "Grupo", "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo do domínio {domain}", "account.blocked": "Bloqueado(a)", "account.browse_more_on_origin_server": "Encontrar mais no perfil original", "account.cancel_follow_request": "Cancelar pedido para seguir", - "account.direct": "Enviar mensagem directa para @{name}", + "account.direct": "Enviar mensagem direta para @{name}", "account.disable_notifications": "Parar de me notificar das publicações de @{name}", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", @@ -22,9 +22,10 @@ "account.follows.empty": "Este utilizador ainda não segue ninguém.", "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", + "account.joined": "Ingressou em {date}", "account.last_status": "Última atividade", "account.link_verified_on": "A posse deste link foi verificada em {date}", - "account.locked_info": "O estatuto de privacidade desta conta é fechado. O dono revê manualmente quem a pode seguir.", + "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem a pode seguir.", "account.media": "Média", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} mudou a sua conta para:", @@ -87,9 +88,9 @@ "compose_form.direct_message_warning": "Esta publicação será enviada apenas para os utilizadores mencionados.", "compose_form.direct_message_warning_learn_more": "Conhecer mais", "compose_form.hashtag_warning": "Este toot não será listado em nenhuma hashtag por ser não listado. Apenas toots públics podem ser pesquisados por hashtag.", - "compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te e ver as publicações direcionadas apenas a seguidores.", + "compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", - "compose_form.placeholder": "Em que estás a pensar?", + "compose_form.placeholder": "Em que está a pensar?", "compose_form.poll.add_option": "Adicionar uma opção", "compose_form.poll.duration": "Duração da votação", "compose_form.poll.option_placeholder": "Opção {number}", @@ -109,9 +110,9 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "De certeza que queres bloquear {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "De certeza que queres eliminar esta publicação?", + "confirmations.delete.message": "De certeza que quer eliminar esta publicação?", "confirmations.delete_list.confirm": "Eliminar", - "confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?", + "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?", "confirmations.domain_block.confirm": "Esconder tudo deste domínio", "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.", "confirmations.logout.confirm": "Terminar sessão", @@ -119,8 +120,8 @@ "confirmations.mute.confirm": "Silenciar", "confirmations.mute.explanation": "Isto irá esconder publicações deles ou publicações que os mencionem, mas irá permitir que vejam as suas publicações e sejam seus seguidores.", "confirmations.mute.message": "De certeza que queres silenciar {name}?", - "confirmations.redraft.confirm": "Apagar & redigir", - "confirmations.redraft.message": "Tens a certeza que queres apagar e redigir esta publicação? Os favoritos e as partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.", + "confirmations.redraft.confirm": "Eliminar & reescrever", + "confirmations.redraft.message": "Tem a certeza que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder agora irá reescrever a mensagem que está a compor actualmente. Tem a certeza que quer continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -155,16 +156,17 @@ "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", "empty_column.bookmarked_statuses": "Ainda não adicionou nenhum toot aos Itens salvos. Quando adicionar, eles serão exibidos aqui.", "empty_column.community": "A timeline local está vazia. Escreve algo publicamente para começar!", - "empty_column.direct": "Ainda não tens qualquer mensagem directa. Quando enviares ou receberes alguma, ela irá aparecer aqui.", + "empty_column.direct": "Ainda não tem qualquer mensagem direta. Quando enviar ou receber alguma, ela irá aparecer aqui.", "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.", "empty_column.favourited_statuses": "Ainda não tens quaisquer toots favoritos. Quando tiveres algum, ele irá aparecer aqui.", "empty_column.favourites": "Ainda ninguém marcou este toot como favorito. Quando alguém o fizer, ele irá aparecer aqui.", + "empty_column.follow_recommendations": "Parece que não foi possível gerar nenhuma sugestão para si. Pode tentar utilizar a pesquisa para procurar pessoas que conheça ou explorar as hashtags em destaque.", "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.", "empty_column.hashtag": "Não foram encontradas publicações com essa hashtag.", "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.", - "empty_column.home.public_timeline": "Cronologia pública", + "empty_column.home.suggestions": "Ver algumas sugestões", "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.", - "empty_column.lists": "Ainda não tens qualquer lista. Quando criares uma, ela irá aparecer aqui.", + "empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.", "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.", "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", @@ -174,16 +176,19 @@ "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", + "follow_recommendations.done": "Concluído", + "follow_recommendations.heading": "Siga pessoas das quais gostaria de ver publicações! Aqui estão algumas sugestões.", + "follow_recommendations.lead": "As publicações das pessoas que segue serão exibidos em ordem cronológica na sua página inicial. Não tenha medo de cometer erros, você pode deixar de seguir as pessoas tão facilmente a qualquer momento!", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rejeitar", - "follow_requests.unlocked_explanation": "Apesar de a sua não estar bloqueada, a administração de {domain} pensa que poderá querer rever os pedidos dessas contas manualmente.", + "follow_requests.unlocked_explanation": "Apesar de a sua não ser privada, a administração de {domain} pensa que poderá querer rever manualmente os pedidos de seguimento dessas contas.", "generic.saved": "Salvo", "getting_started.developers": "Responsáveis pelo desenvolvimento", - "getting_started.directory": "Directório de perfil", + "getting_started.directory": "Diretório de perfis", "getting_started.documentation": "Documentação", "getting_started.heading": "Primeiros passos", "getting_started.invite": "Convidar pessoas", - "getting_started.open_source_notice": "Mastodon é software de código aberto (open source). Podes contribuir ou reportar problemas no GitHub do projecto: {github}.", + "getting_started.open_source_notice": "Mastodon é um software de código aberto. Podes contribuir ou reportar problemas no GitHub do projeto: {github}.", "getting_started.security": "Segurança", "getting_started.terms": "Termos de serviço", "hashtag.column_header.tag_mode.all": "e {additional}", @@ -203,30 +208,13 @@ "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "introduction.federation.action": "Seguinte", - "introduction.federation.federated.headline": "Federada", - "introduction.federation.federated.text": "Publicações públicas de outras instâncias do fediverso aparecerão na cronologia federada.", - "introduction.federation.home.headline": "Início", - "introduction.federation.home.text": "As publicações das pessoas que segues aparecerão na tua coluna de início. Podes seguir qualquer pessoa em qualquer instância!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que tu aparecerão na coluna local.", - "introduction.interactions.action": "Terminar o tutorial!", - "introduction.interactions.favourite.headline": "Favorito", - "introduction.interactions.favourite.text": "Podes guardar um toot para depois e deixar o autor saber que gostaste dele, marcando-o como favorito.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Podes partilhar os toots de outras pessoas com os teus seguidores partilhando-os.", - "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Tu podes responder a toots de outras pessoas e aos teus, o que os irá juntar numa conversa.", - "introduction.welcome.action": "Vamos!", - "introduction.welcome.headline": "Primeiros passos", - "introduction.welcome.text": "Bem-vindo ao fediverso! Em pouco tempo poderás enviar mensagens e falar com os seus amigos numa grande variedade de instâncias. Mas esta instância, {domain}, é especial—ela alberga o seu perfil. Por isso, lembre-se do seu nome.", "keyboard_shortcuts.back": "para voltar", "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados", "keyboard_shortcuts.boost": "para partilhar", "keyboard_shortcuts.column": "para focar uma publicação numa das colunas", "keyboard_shortcuts.compose": "para focar na área de publicação", "keyboard_shortcuts.description": "Descrição", - "keyboard_shortcuts.direct": "para abrir a coluna das mensagens directas", + "keyboard_shortcuts.direct": "para abrir a coluna das mensagens diretas", "keyboard_shortcuts.down": "para mover para baixo na lista", "keyboard_shortcuts.enter": "para expandir uma publicação", "keyboard_shortcuts.favourite": "para adicionar aos favoritos", @@ -261,7 +249,7 @@ "lightbox.previous": "Anterior", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", - "lists.delete": "Remover lista", + "lists.delete": "Eliminar lista", "lists.edit": "Editar lista", "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", @@ -285,7 +273,7 @@ "navigation_bar.bookmarks": "Itens salvos", "navigation_bar.community_timeline": "Cronologia local", "navigation_bar.compose": "Escrever novo toot", - "navigation_bar.direct": "Mensagens directas", + "navigation_bar.direct": "Mensagens diretas", "navigation_bar.discover": "Descobrir", "navigation_bar.domain_blocks": "Domínios escondidos", "navigation_bar.edit_profile": "Editar perfil", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", "notifications.column_settings.status": "Novos toots:", + "notifications.column_settings.unread_markers.category": "Marcadores de notificação não lidas", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", @@ -363,7 +352,7 @@ "privacy.unlisted.short": "Não listar", "refresh": "Actualizar", "regeneration_indicator.label": "A carregar…", - "regeneration_indicator.sublabel": "A tua home está a ser preparada!", + "regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", "relative_time.just_now": "agora", @@ -379,7 +368,7 @@ "report.target": "Denunciar", "search.placeholder": "Pesquisar", "search_popout.search_format": "Formato avançado de pesquisa", - "search_popout.tips.full_text": "Texto simples devolve publicações que tu escreveste, marcaste como favorita, partilhaste ou em que foste mencionado, tal como nomes de utilizador correspondentes, alcunhas e hashtags.", + "search_popout.tips.full_text": "Texto simples devolve publicações que escreveu, marcou como favorita, partilhou ou em que foi mencionado, tal como nomes de utilizador, alcunhas e hashtags.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "publicação", "search_popout.tips.text": "O texto simples retorna a correspondência de nomes, utilizadores e hashtags", @@ -398,7 +387,7 @@ "status.copy": "Copiar o link para a publicação", "status.delete": "Eliminar", "status.detailed_status": "Vista de conversação detalhada", - "status.direct": "Mensagem directa @{name}", + "status.direct": "Mensagem direta @{name}", "status.embed": "Incorporar", "status.favourite": "Adicionar aos favoritos", "status.filtered": "Filtrada", @@ -461,7 +450,7 @@ "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais", "upload_form.edit": "Editar", "upload_form.thumbnail": "Alterar miniatura", - "upload_form.undo": "Apagar", + "upload_form.undo": "Eliminar", "upload_form.video_description": "Descreva para pessoas com diminuição da acuidade auditiva ou visual", "upload_modal.analyzing_picture": "A analizar imagem…", "upload_modal.apply": "Aplicar", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index a80bfa822..c1a6b9883 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -22,6 +22,7 @@ "account.follows.empty": "Acest utilizator nu urmărește pe nimeni încă.", "account.follows_you": "Te urmărește", "account.hide_reblogs": "Ascunde impulsurile de la @{name}", + "account.joined": "Joined {date}", "account.last_status": "Ultima activitate", "account.link_verified_on": "Deținerea acestui link a fost verificată la {date}", "account.locked_info": "Acest profil este privat. Această persoană gestionează manual cine o urmărește.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Nu sunt domenii blocate încă.", "empty_column.favourited_statuses": "Nu ai nici o postare favorită încă. Când vei favoriza una, va fi afișată aici.", "empty_column.favourites": "Nimeni nu are această postare adăugată la favorite. Când cineva o va face va fi afișat aici.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Nu ai încă nici o cerere de urmărire. Când vei primi una, va fi afișată aici.", "empty_column.hashtag": "Acest hashtag nu a fost folosit încă.", "empty_column.home": "Fluxul tău este gol. Vizitează {public} sau fă o căutare pentru a începe să cunoști oameni noi.", - "empty_column.home.public_timeline": "fluxul public", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Nu este nimic încă în această listă. Când membrii acestei liste vor începe să posteze, va apărea aici.", "empty_column.lists": "Nu ai încă nici o listă. Când vei crea una, va apărea aici.", "empty_column.mutes": "Nu ai ignorat nici un utilizator încă.", @@ -174,10 +176,13 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiați stiva în clipboard", "errors.unexpected_crash.report_issue": "Raportați o problemă", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Autorizează", "follow_request.reject": "Respinge", "follow_requests.unlocked_explanation": "Chiar dacă contul dvs nu este blocat, personalul {domain} a crezut că ați putea dori să revizuiți cererile de la aceste conturi în mod manual.", - "generic.saved": "Saved", + "generic.saved": "Salvat", "getting_started.developers": "Dezvoltatori", "getting_started.directory": "Explorează", "getting_started.documentation": "Documentație", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural,one {# zi} other {# zile}}", "intervals.full.hours": "{number, plural, one {# oră} other {# ore}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minute}}", - "introduction.federation.action": "Următorul", - "introduction.federation.federated.headline": "Federalizat", - "introduction.federation.federated.text": "Postările publice de pe alte servere din rețea vor apărea in fluxul global.", - "introduction.federation.home.headline": "Acasă", - "introduction.federation.home.text": "Postările de la persoanele pe care le urmărești vor apărea în fluxul tău \"Acasă\". Poți urmări pe orice de pe orice server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Postările publice de la persoanele de pe acest server vor apărea în fluxul local.", - "introduction.interactions.action": "Încheie ghidul!", - "introduction.interactions.favourite.headline": "Favorite", - "introduction.interactions.favourite.text": "Poți salva o postare pentru a fi citită mai târziu și poți anunța autorul să știe că iți place adăugând-o la favorite.", - "introduction.interactions.reblog.headline": "Impuls", - "introduction.interactions.reblog.text": "Poți împărtăși postările altora cu urmăritorii tăi impulsionându-le.", - "introduction.interactions.reply.headline": "Răspunde", - "introduction.interactions.reply.text": "Poți răspunde la postările tale și alte altora, care se vor lărgii în discuții.", - "introduction.welcome.action": "Să începem!", - "introduction.welcome.headline": "Primii pași", - "introduction.welcome.text": "Bun Venit în federație! În câteva momente, vei putea să transmiți mesaje și să participi la discuții cu oameni noi într-o varietate foarte largă de servere din întreaga lume. Dar în special acest server, {domain}, găzduiește profilul tău, deci reține numele acestuia.", "keyboard_shortcuts.back": "navighează înapoi", "keyboard_shortcuts.blocked": "să deschidă lista utilizatorilor blocați", "keyboard_shortcuts.boost": "să impulsioneze", @@ -268,7 +256,7 @@ "lists.new.title_placeholder": "Titlu pentru noua listă", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "Nimeni", "lists.replies_policy.title": "Show replies to:", "lists.search": "Caută printre persoanele pe care le urmărești", "lists.subheading": "Listele tale", @@ -277,7 +265,7 @@ "media_gallery.toggle_visible": "Ascunde media", "missing_indicator.label": "Nu a fost găsit", "missing_indicator.sublabel": "Această resursă nu a putut fi găsită", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durata", "mute_modal.hide_notifications": "Ascunzi notificările de la acest utilizator?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicații mobile", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Arată în coloană", "notifications.column_settings.sound": "Redă sunet", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Toate", "notifications.filter.boosts": "Impulsuri", "notifications.filter.favourites": "Favorite", @@ -342,8 +331,8 @@ "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Nu rata niciodată nimic", + "picture_in_picture.restore": "Pune-l înapoi", "poll.closed": "Închis", "poll.refresh": "Reîmprospătează", "poll.total_people": "{count, plural, one {# persoană} other {# persoane}}", @@ -368,7 +357,7 @@ "relative_time.hours": "{number}o", "relative_time.just_now": "acum", "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.seconds": "{number}", "relative_time.today": "azi", "reply_indicator.cancel": "Anulează", "report.forward": "Redirecționează către {target}", @@ -450,8 +439,8 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "În tendință acum", "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", + "units.short.billion": "{count}Mld", + "units.short.million": "{count}Mln", "units.short.thousand": "{count}K", "upload_area.title": "Trage și eliberează pentru a încărca", "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)", @@ -460,12 +449,12 @@ "upload_form.audio_description": "Descrie pentru persoanele cu deficiență a auzului", "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere", "upload_form.edit": "Editează", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Schimbă miniatura", "upload_form.undo": "Șterge", "upload_form.video_description": "Descrie pentru persoanele cu pierdere a auzului sau tulburări de vedere", "upload_modal.analyzing_picture": "Se analizează imaginea…", "upload_modal.apply": "Aplică", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Alege imaginea", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detectare text din imagine", "upload_modal.edit_media": "Editați media", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 3ce050759..c2737f457 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -22,6 +22,7 @@ "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", + "account.joined": "Присоединился {date}", "account.last_status": "Последняя активность", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", @@ -98,9 +99,9 @@ "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.publish": "Запостить", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}", - "compose_form.sensitive.marked": "Медиафайл отмечен как деликатный", - "compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный", + "compose_form.sensitive.hide": "Отметить медиа{count, plural, one {файл} other {файлы}} как «деликатного характера»", + "compose_form.sensitive.marked": "Медиа{count, plural, one {файл отмечен} other {файлы отмечены}} как «деликатного характера»", + "compose_form.sensitive.unmarked": "Медиа{count, plural, one {файл} other {файлы}} не отмечены как «деликатного характера»", "compose_form.spoiler.marked": "Текст скрыт за предупреждением", "compose_form.spoiler.unmarked": "Текст не скрыт", "compose_form.spoiler_placeholder": "Текст предупреждения", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Скрытых доменов пока нет.", "empty_column.favourited_statuses": "Вы не добавили ни один пост в «Избранное». Как только вы это сделаете, он появится здесь.", "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.", + "empty_column.follow_recommendations": "Похоже, у нас нет предложений для вас. Вы можете попробовать поискать людей, которых уже знаете, или изучить актуальные хэштеги.", "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.", "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.", "empty_column.home": "Пока вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.", - "empty_column.home.public_timeline": "публичные ленты", + "empty_column.home.suggestions": "Посмотреть некоторые предложения", "empty_column.list": "В этом списке пока ничего нет.", "empty_column.lists": "У вас ещё нет списков. Созданные вами списки будут показаны здесь.", "empty_column.mutes": "Вы ещё никого не добавляли в список игнорируемых.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.", "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", + "follow_recommendations.done": "Готово", + "follow_recommendations.heading": "Подпишитесь на людей, от которые вы хотели бы видеть посты! Вот несколько предложений.", + "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибаться, вы можете отписаться от людей так же легко в любое время!", "follow_request.authorize": "Авторизовать", "follow_request.reject": "Отказать", "follow_requests.unlocked_explanation": "Этот запрос отправлен с учётной записи, для которой администрация {domain} включила ручную проверку подписок.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}", - "introduction.federation.action": "Далее", - "introduction.federation.federated.headline": "Глобальная лента", - "introduction.federation.federated.text": "Публичные посты с других серверов федеративной сети расположатся в глобальной ленте.", - "introduction.federation.home.headline": "Домашняя лента", - "introduction.federation.home.text": "Посты людей, на которых вы подписаны, будут отображаться в домашней ленте. Подписываться можно на кого угодно, независимо от узла.", - "introduction.federation.local.headline": "Локальная лента", - "introduction.federation.local.text": "Публичные посты от людей с того же сервера, что и вы, будут отображены в локальной ленте.", - "introduction.interactions.action": "Завершить обучение", - "introduction.interactions.favourite.headline": "Помечайте избранное", - "introduction.interactions.favourite.text": "Дайте автору знать, что пост вам понравился и вернитесь к нему позже, добавив его в избранное.", - "introduction.interactions.reblog.headline": "Продвигайте", - "introduction.interactions.reblog.text": "Делитесь постами других людей со своими подписчиками, продвигая их в своём профиле.", - "introduction.interactions.reply.headline": "Отвечайте", - "introduction.interactions.reply.text": "Отвечайте на свои или чужие посты, образуя цепочки сообщений — обсуждения.", - "introduction.welcome.action": "Поехали!", - "introduction.welcome.headline": "Первые шаги", - "introduction.welcome.text": "Добро пожаловать в Федиверс! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями с любых узлов. Но этот узел — {domain} — особенный: на нём располагается ваш профиль, так что не забудьте его название.", "keyboard_shortcuts.back": "перейти назад", "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных", "keyboard_shortcuts.boost": "продвинуть пост", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Отображать в списке", "notifications.column_settings.sound": "Проигрывать звук", "notifications.column_settings.status": "Новые посты:", + "notifications.column_settings.unread_markers.category": "Маркеры непрочитанных уведомлений", "notifications.filter.all": "Все", "notifications.filter.boosts": "Продвижения", "notifications.filter.favourites": "Отметки «избранного»", @@ -421,7 +410,7 @@ "status.reply": "Ответить", "status.replyAll": "Ответить всем", "status.report": "Пожаловаться", - "status.sensitive_warning": "Деликатное содержимое", + "status.sensitive_warning": "Содержимое «деликатного характера»", "status.share": "Поделиться", "status.show_less": "Свернуть", "status.show_less_all": "Свернуть все спойлеры в ветке", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 4656aa275..be9f06d1d 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -22,6 +22,7 @@ "account.follows.empty": "न कोऽप्यनुसृतो वर्तते", "account.follows_you": "त्वामनुसरति", "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्", + "account.joined": "Joined {date}", "account.last_status": "गतसक्रियता", "account.link_verified_on": "अन्तर्जालस्थानस्यास्य स्वामित्वं परीक्षितमासीत् {date} दिने", "account.locked_info": "एतस्या लेखायाः गुह्यता \"निषिद्ध\"इति वर्तते । स्वामी स्वयञ्चिनोति कोऽनुसर्ता भवितुमर्हतीति ।", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "न निषिद्धप्रदेशाः सन्ति ।", "empty_column.favourited_statuses": "न प्रियदौत्यानि सन्ति । यदा प्रीतिरित्यङ्क्यतेऽत्र दृश्यते ।", "empty_column.favourites": "नैतद्दौत्यं प्रियमस्ति कस्मै अपि । यदा कस्मै प्रियं भवति तदाऽत्र दृश्यते ।", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "नाऽनुसरणानुरोधस्ते वर्तते । यदैको प्राप्यतेऽत्र दृश्यते ।", "empty_column.hashtag": "नाऽस्मिन् प्रचलितवस्तुचिह्ने किमपि ।", "empty_column.home": "गृहसमयतालिका रिक्ताऽस्ति । गम्यतां {public} वाऽन्वेषणैः प्रारभ्यतां मेलनं क्रियताञ्च ।", - "empty_column.home.public_timeline": "सार्वजनिकसमयतालिका", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "न किमपि वर्तते सूच्यामस्याम् । यदा सूच्याः सदस्या नवदौत्यानि प्रकटीकुर्वन्ति तदाऽत्राऽऽयान्ति ।", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index e1b4e3998..32eadde94 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -1,7 +1,7 @@ { "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Agiunghe o boga dae is listas", - "account.badges.bot": "Bot", + "account.badges.bot": "Robot", "account.badges.group": "Grupu", "account.block": "Bloca @{name}", "account.block_domain": "Bloca su domìniu {domain}", @@ -22,33 +22,34 @@ "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", + "account.joined": "Joined {date}", "account.last_status": "Ùrtima atividade", "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}", "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", "account.media": "Cuntenutu multimediale", - "account.mention": "Mentova a @{name}", + "account.mention": "Mèntova a @{name}", "account.moved_to": "{name} at cambiadu a:", "account.mute": "Pone a @{name} a sa muda", "account.mute_notifications": "Disativa is notìficas de @{name}", "account.muted": "A sa muda", "account.never_active": "Mai", - "account.posts": "Tuts", - "account.posts_with_replies": "Tuts e rispostas", + "account.posts": "Publicatziones", + "account.posts_with_replies": "Publicatziones e rispostas", "account.report": "Signala @{name}", "account.requested": "Abetende s'aprovatzione. Incarca pro annullare sa rechesta de sighidura", "account.share": "Cumpartzi su profilu de @{name}", "account.show_reblogs": "Ammustra is cumpartziduras de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuts}}", + "account.statuses_counter": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}", "account.unblock": "Isbloca a @{name}", "account.unblock_domain": "Isbloca su domìniu {domain}", "account.unendorse": "Non cussiges in su profilu", "account.unfollow": "Non sigas prus", - "account.unmute": "Torra a ativare @{name}", + "account.unmute": "Torra a ativare a @{name}", "account.unmute_notifications": "Ativa notìficas pro @{name}", "account_note.placeholder": "Incarca pro agiùnghere una nota", "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", - "alert.unexpected.message": "B'at àpidu una faddina.", + "alert.unexpected.message": "Ddoe est istada una faddina.", "alert.unexpected.title": "Oh!", "announcement.announcement": "Annùntziu", "autosuggest_hashtag.per_week": "{count} a sa chida", @@ -71,7 +72,7 @@ "column.lists": "Listas", "column.mutes": "Persones a sa muda", "column.notifications": "Notìficas", - "column.pins": "Tuts apicados", + "column.pins": "Publicatziones apicadas", "column.public": "Lìnia de tempus federada", "column_back_button.label": "A coa", "column_header.hide_settings": "Cua is cunfiguratziones", @@ -84,9 +85,9 @@ "community.column_settings.local_only": "Isceti locale", "community.column_settings.media_only": "Isceti multimediale", "community.column_settings.remote_only": "Isceti remotu", - "compose_form.direct_message_warning": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.", + "compose_form.direct_message_warning": "Custa publicatzione at a èssere imbiada isceti a is persones mentovadas.", "compose_form.direct_message_warning_learn_more": "Àteras informatziones", - "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu. Isceti is tuts pùblicos podent èssere chircados cun etichetas.", + "compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est listada. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.", "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.", "compose_form.lock_disclaimer.lock": "blocadu", "compose_form.placeholder": "A ite ses pensende?", @@ -101,39 +102,39 @@ "compose_form.sensitive.hide": "{count, plural, one {Marca elementu multimediale comente a sensìbile} other {Marca elementos multimediales comente sensìbiles}}", "compose_form.sensitive.marked": "{count, plural, one {Elementu multimediale marcadu comente a sensìbile} other {Elementos multimediales marcados comente a sensìbiles}}", "compose_form.sensitive.unmarked": "{count, plural, one {Elementu multimediale non marcadu comente a sensìbile} other {Elementos multimediales non marcados comente a sensìbiles}}", - "compose_form.spoiler.marked": "Su testu est cuadu in fatu de s'avisu", - "compose_form.spoiler.unmarked": "Su testu no est cuadu", + "compose_form.spoiler.marked": "Boga avisu de cuntenutu", + "compose_form.spoiler.unmarked": "Agiunghe avisu de cuntenutu", "compose_form.spoiler_placeholder": "Iscrie s'avisu tuo inoghe", "confirmation_modal.cancel": "Annulla", "confirmations.block.block_and_report": "Bloca e signala", "confirmations.block.confirm": "Bloca", "confirmations.block.message": "Seguru chi boles blocare {name}?", "confirmations.delete.confirm": "Cantzella", - "confirmations.delete.message": "Seguru chi boles cantzellare custu tut?", + "confirmations.delete.message": "Seguru chi boles cantzellare custa publicatzione?", "confirmations.delete_list.confirm": "Cantzella", "confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?", "confirmations.domain_block.confirm": "Bloca totu su domìniu", - "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.", + "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare {domain}? In sa parte manna de is casos, pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.", "confirmations.logout.confirm": "Essi·nche", "confirmations.logout.message": "Seguru chi boles essire?", "confirmations.mute.confirm": "A sa muda", - "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mentovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.", + "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mèntovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.", "confirmations.mute.message": "Seguru chi boles pònnere a {name} a sa muda?", "confirmations.redraft.confirm": "Cantzella e torra a fàghere", - "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custu tut? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", + "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", "confirmations.reply.confirm": "Risponde", - "confirmations.reply.message": "Rispondende immoe as a subraiscrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", + "confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", "confirmations.unfollow.confirm": "Non sigas prus", "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?", "conversation.delete": "Cantzella arresonada", "conversation.mark_as_read": "Signala comente lèghidu", - "conversation.open": "Ammsutra arresonada", + "conversation.open": "Ammustra arresonada", "conversation.with": "Cun {names}", "directory.federated": "Dae unu fediversu connotu", "directory.local": "Isceti dae {domain}", "directory.new_arrivals": "Arribos noos", - "directory.recently_active": "Ativos dae pagu", - "embed.instructions": "Inserta custu tut in su situ web tuo copiende su còdighe de suta.", + "directory.recently_active": "Cun atividade dae pagu", + "embed.instructions": "Inserta custa publicatzione in su situ web tuo copiende su còdighe de suta.", "embed.preview": "At a aparèssere aici:", "emoji_button.activity": "Atividade", "emoji_button.custom": "Personalizadu", @@ -149,21 +150,22 @@ "emoji_button.search_results": "Resurtados de sa chirca", "emoji_button.symbols": "Sìmbulos", "emoji_button.travel": "Biàgios e logos", - "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "Perunu tut inoghe!", + "empty_column.account_suspended": "Contu suspèndidu", + "empty_column.account_timeline": "Peruna publicatzione inoghe!", "empty_column.account_unavailable": "Su profilu no est a disponimentu", "empty_column.blocks": "No as blocadu ancora nemos.", - "empty_column.bookmarked_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", + "empty_column.bookmarked_statuses": "Non tenes ancora peruna publicatzione in is marcadores. Cando nd'as a agiùnghere una, at a èssere ammustrada inoghe.", "empty_column.community": "Sa lìnia de tempus locale est bòida. Iscrie inoghe pro cumintzare sa festa!", "empty_column.direct": "Non tenes ancora perunu messàgiu deretu. Cando nd'as a imbiare o nd'as a retzire unu, at a èssere ammustradu inoghe.", "empty_column.domain_blocks": "Non tenes ancora perunu domìniu blocadu.", - "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is preferidos. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", - "empty_column.favourites": "Nemos at marcadu ancora custu tut comente preferidu. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", + "empty_column.favourited_statuses": "Non tenes ancora peruna publicatzione in is preferidos. Cando nd'as a agiùnghere una, at a èssere ammustrada inoghe.", + "empty_column.favourites": "Nemos at marcadu ancora custa publicatzione comente preferida. Cando calicunu dd'at a fàghere, at a èssere ammustrada inoghe.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Non tenes ancora peruna rechesta de sighidura. Cando nd'as a retzire una, at a èssere ammustrada inoghe.", "empty_column.hashtag": "Ancora nudda in custa eticheta.", "empty_column.home": "Sa lìnia de tempus printzipale tua est bòida. Visita {public} o imprea sa chirca pro cumintzare e agatare àteras persones.", - "empty_column.home.public_timeline": "sa lìnia de tempus pùblica", - "empty_column.list": "Nudda ancora in custa lista. Cando is persones de custa lista ant a publicare àteros istados, ant a aparèssere inoghe.", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "Nudda ancora in custa lista. Cando is persones de custa lista ant a publicare, is publicatziones ant a aparèssere inoghe.", "empty_column.lists": "Non tenes ancora peruna lista. Cando nd'as a creare una, at a èssere ammustrada inoghe.", "empty_column.mutes": "No as postu ancora nemos a sa muda.", "empty_column.notifications": "Non tenes ancora peruna notìfica. Chistiona cun una persone pro cumintzare un'arresonada.", @@ -173,7 +175,10 @@ "error.unexpected_crash.next_steps": "Proa de torrare a carrigare sa pàgina. Si custu no acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", - "errors.unexpected_crash.report_issue": "Signala unu problema", + "errors.unexpected_crash.report_issue": "Sinnala unu problema", + "follow_recommendations.done": "Fatu", + "follow_recommendations.heading": "Sighi gente de chie boles bìdere is publicatziones! Càstia custos cussìgios.", + "follow_recommendations.lead": "Is messàgios de gente a sa chi ses sighende ant a èssere ammustrados in òrdine cronològicu in sa lìnia de tempus printzipale tua. Non timas de fàghere errores, acabbare de sighire gente est fàtzile in cale si siat momentu!", "follow_request.authorize": "Autoriza", "follow_request.reject": "Refuda", "follow_requests.unlocked_explanation": "Fintzas si su contu tuo no est blocadu, su personale de {domain} at pensadu chi forsis bolias revisionare a manu is rechestas de custos contos.", @@ -183,7 +188,7 @@ "getting_started.documentation": "Documentatzione", "getting_started.heading": "Comente cumintzare", "getting_started.invite": "Invita gente", - "getting_started.open_source_notice": "Mastodon est de còdighe abertu. Bi podes contribuire o signalare faddinas in {github}.", + "getting_started.open_source_notice": "Mastodon est de còdighe abertu. Bi podes contribuire o sinnalare faddinas in {github}.", "getting_started.security": "Cunfiguratziones de su contu", "getting_started.terms": "Cunditziones de su servìtziu", "hashtag.column_header.tag_mode.all": "e {additional}", @@ -203,32 +208,15 @@ "intervals.full.days": "{number, plural, one {# die} other {# dies}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", - "introduction.federation.action": "Sighi", - "introduction.federation.federated.headline": "Federada", - "introduction.federation.federated.text": "Is publicatziones pùblicas de àteros serbidores de su fediversu ant a aparèssere in sa lìnia de tempus federada.", - "introduction.federation.home.headline": "Printzipale", - "introduction.federation.home.text": "Is messàgios de sa gente chi sighis ant a aparèssere in sa lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore!", - "introduction.federation.local.headline": "Locale", - "introduction.federation.local.text": "Is publicatziones pùblicas de sa gente de su pròpiu serbidore tuo ant a aparèssere in sa lìnia de tempus locale.", - "introduction.interactions.action": "Acabba su tutoriale!", - "introduction.interactions.favourite.headline": "Preferidos", - "introduction.interactions.favourite.text": "Podes sarvare unu tut pro ddu lèghere prus tardu, e fàghere ischire a chie dd'apat iscritu chi t'est pràghidu marchende·ddu comente a preferidu.", - "introduction.interactions.reblog.headline": "Cumpartzi", - "introduction.interactions.reblog.text": "Cun is cumpartziduras podes fàghere connòschere tuts de àtera gente a chie ti sighit.", - "introduction.interactions.reply.headline": "Risponde", - "introduction.interactions.reply.text": "Podes rispòndere a is tuts de àtera gente e a is tuos pròpios, e ant a èssere unidos in un'arresonada.", - "introduction.welcome.action": "Ajò, andamus!", - "introduction.welcome.headline": "Primos passos", - "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·ti·nde su nòmine.", - "keyboard_shortcuts.back": "pro navigare in segus", + "keyboard_shortcuts.back": "pro navigare a coa", "keyboard_shortcuts.blocked": "pro abèrrere sa lista de persones blocadas", "keyboard_shortcuts.boost": "pro cumpartzire", - "keyboard_shortcuts.column": "pro atzentrare unu tut in una de is colunnas", + "keyboard_shortcuts.column": "pro atzentrare una publicatzione in una de is colunnas", "keyboard_shortcuts.compose": "pro atzentrare in s'àrea de cumpositzione de testu", "keyboard_shortcuts.description": "Descritzione", "keyboard_shortcuts.direct": "pro abèrrere sa colunna de messàgios diretos", "keyboard_shortcuts.down": "pro mòere in bàsciu in sa lista", - "keyboard_shortcuts.enter": "pro abèrrere su tut", + "keyboard_shortcuts.enter": "pro abèrrere una publicatzione", "keyboard_shortcuts.favourite": "pro marcare comente a preferidu", "keyboard_shortcuts.favourites": "pro abèrrere sa lista de preferidos", "keyboard_shortcuts.federated": "pro abèrrere sa lìnia de tempus federada", @@ -242,7 +230,7 @@ "keyboard_shortcuts.my_profile": "pro abèrrere su profilu tuo", "keyboard_shortcuts.notifications": "pro abèrrere sa colunna de notificatziones", "keyboard_shortcuts.open_media": "pro abèrrere elementos multimediales", - "keyboard_shortcuts.pinned": "pro abèrrere lista de tuts apicados", + "keyboard_shortcuts.pinned": "pro abèrrere sa lista de publicatziones apicadas", "keyboard_shortcuts.profile": "pro abèrrere su profilu de s'autore", "keyboard_shortcuts.reply": "pro rispòndere", "keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura", @@ -251,13 +239,13 @@ "keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"", "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC", "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare elementos multimediales", - "keyboard_shortcuts.toot": "pro cumintzare a iscrìere unu tut nou", + "keyboard_shortcuts.toot": "pro cumintzare a iscrìere una publicatzione noa", "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "pro mòere in susu in sa lista", "lightbox.close": "Serra", "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines", "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines", - "lightbox.next": "Sighi", + "lightbox.next": "Imbeniente", "lightbox.previous": "Pretzedente", "lists.account.add": "Agiunghe a sa lista", "lists.account.remove": "Boga dae sa lista", @@ -266,9 +254,9 @@ "lists.edit.submit": "Muda su tìtulu", "lists.new.create": "Agiunghe lista", "lists.new.title_placeholder": "Tìtulu de sa lista noa", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Cale si siat persone chi sighis", + "lists.replies_policy.list": "Persones de sa lista", + "lists.replies_policy.none": "Nemos", "lists.replies_policy.title": "Ammustra is rispostas a:", "lists.search": "Chirca intre sa gente chi ses sighende", "lists.subheading": "Is listas tuas", @@ -284,7 +272,7 @@ "navigation_bar.blocks": "Persones blocadas", "navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.community_timeline": "Lìnia de tempus locale", - "navigation_bar.compose": "Cumpone unu tut nou", + "navigation_bar.compose": "Cumpone una publicatzione noa", "navigation_bar.direct": "Messàgios diretos", "navigation_bar.discover": "Iscoberi", "navigation_bar.domain_blocks": "Domìnios blocados", @@ -292,24 +280,24 @@ "navigation_bar.favourites": "Preferidos", "navigation_bar.filters": "Faeddos a sa muda", "navigation_bar.follow_requests": "Rechestas de sighidura", - "navigation_bar.follows_and_followers": "Persones chi sighis e chi ti sighint", + "navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras", "navigation_bar.info": "Informatziones de su serbidore", "navigation_bar.keyboard_shortcuts": "Teclas de atzessu diretu", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Essi", "navigation_bar.mutes": "Persones a sa muda", "navigation_bar.personal": "Informatziones personales", - "navigation_bar.pins": "Tuts apicados", + "navigation_bar.pins": "Publicatziones apicadas", "navigation_bar.preferences": "Preferèntzias", "navigation_bar.public_timeline": "Lìnia de tempus federada", "navigation_bar.security": "Seguresa", - "notification.favourite": "{name} at marcadu s'istadu tuo comente a preferidu", + "notification.favourite": "{name} at marcadu sa publicatzione tua comente a preferida", "notification.follow": "{name} ti sighit", "notification.follow_request": "{name} at dimandadu de ti sighire", "notification.mention": "{name} t'at mentovadu", "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", - "notification.reblog": "{name} at cumpartzidu su tut tuo", + "notification.reblog": "{name} at cumpartzidu sa publicatzione tua", "notification.status": "{name} at publicadu cosa", "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", @@ -320,26 +308,27 @@ "notifications.column_settings.filter_bar.show": "Ammustra", "notifications.column_settings.follow": "Sighiduras noas:", "notifications.column_settings.follow_request": "Rechestas noas de sighidura:", - "notifications.column_settings.mention": "Mentovos:", + "notifications.column_settings.mention": "Mèntovos:", "notifications.column_settings.poll": "Resurtados de su sondàgiu:", "notifications.column_settings.push": "Notìficas push", "notifications.column_settings.reblog": "Cumpartziduras:", "notifications.column_settings.show": "Ammustra in sa colunna", "notifications.column_settings.sound": "Reprodue unu sonu", - "notifications.column_settings.status": "Tuts noos:", + "notifications.column_settings.status": "Publicatziones noas:", + "notifications.column_settings.unread_markers.category": "Marcadores de notìficas de lèghere", "notifications.filter.all": "Totus", "notifications.filter.boosts": "Cumpartziduras", "notifications.filter.favourites": "Preferidos", "notifications.filter.follows": "Sighende", - "notifications.filter.mentions": "Mentovos", + "notifications.filter.mentions": "Mèntovos", "notifications.filter.polls": "Resurtados de su sondàgiu", "notifications.filter.statuses": "Atualizatziones dae gente chi sighis", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Dona su permissu.", "notifications.group": "{count} notìficas", "notifications.mark_as_read": "Sinnala ònnia notìfica comente lèghida", "notifications.permission_denied": "Is notìficas de iscrivania non sunt a disponimentu pro neghe de rechestas de permissu chi sunt istadas dennegadas in antis", "notifications.permission_denied_alert": "Is notìficas de iscrivania non podent èssere abilitadas, ca su permissu de su navigadore est istadu dennegadu in antis", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Is notìficas de iscrivania no sunt a disponimentu ca ammancat su permissu rechèdidu.", "notifications_permission_banner.enable": "Abilita is notìficas de iscrivania", "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.", "notifications_permission_banner.title": "Non ti perdas mai nudda", @@ -352,7 +341,7 @@ "poll.voted": "As votadu custa risposta", "poll_button.add_poll": "Agiunghe unu sondàgiu", "poll_button.remove_poll": "Cantzella su sondàgiu", - "privacy.change": "Acontza s'istadu de riservadesa", + "privacy.change": "Modìfica s'istadu de riservadesa", "privacy.direct.long": "Visìbile isceti pro is persones mentovadas", "privacy.direct.short": "Deretu", "privacy.private.long": "Visìbile isceti pro chie ti sighit", @@ -364,11 +353,11 @@ "refresh": "Atualiza", "regeneration_indicator.label": "Carrighende…", "regeneration_indicator.sublabel": "Preparende sa lìnia de tempus printzipale tua.", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}o", + "relative_time.days": "{number} dies a oe", + "relative_time.hours": "{number} oras a immoe", "relative_time.just_now": "immoe", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number} minutos a immoe", + "relative_time.seconds": "{number} segundos a immoe", "relative_time.today": "oe", "reply_indicator.cancel": "Annulla", "report.forward": "Torra a imbiare a {target}", @@ -379,23 +368,23 @@ "report.target": "Informende de {target}", "search.placeholder": "Chirca", "search_popout.search_format": "Formadu de chirca avantzada", - "search_popout.tips.full_text": "Testu sèmplitze pro agatare istados chi as iscritu, marcadu comente a preferidos, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines de utente, nòmines visualizados e etichetas chi ddu includent.", + "search_popout.tips.full_text": "Testu sèmplitze pro agatare publicatziones chi as iscritu, marcadu comente a preferidas, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines, nòmines de utente e etichetas.", "search_popout.tips.hashtag": "eticheta", - "search_popout.tips.status": "tut", + "search_popout.tips.status": "publicatzione", "search_popout.tips.text": "Testu sèmplitze pro agatare nòmines visualizados, nòmines de utente e etichetas", "search_popout.tips.user": "utente", "search_results.accounts": "Gente", "search_results.hashtags": "Etichetas", - "search_results.statuses": "Tuts", - "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", + "search_results.statuses": "Publicatziones", + "search_results.statuses_fts_disabled": "Sa chirca de publicatziones pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resurtadu} other {resurtados}}", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", - "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione", - "status.block": "Bloca @{name}", + "status.admin_status": "Aberi custa publicatzione in s'interfache de moderatzione", + "status.block": "Bloca a @{name}", "status.bookmark": "Sinnalibru", "status.cancel_reblog_private": "Iscontza sa cumpartzidura", "status.cannot_reblog": "Custa publicatzione non podet èssere cumpartzida", - "status.copy": "Còpia su ligòngiu a su tut tuo", + "status.copy": "Còpia su ligòngiu a sa publicatzione tua", "status.delete": "Cantzella", "status.detailed_status": "Visualizatzione de detàlliu de arresonada", "status.direct": "Messàgiu deretu a @{name}", @@ -404,18 +393,18 @@ "status.filtered": "Filtradu", "status.load_more": "Càrriga·nde àteros", "status.media_hidden": "Elementos multimediales cuados", - "status.mention": "Mentova @{name}", + "status.mention": "Mèntova a @{name}", "status.more": "Àteru", - "status.mute": "Pone @{name} a sa muda", + "status.mute": "Pone a @{name} a sa muda", "status.mute_conversation": "Pone s'arresonada a sa muda", - "status.open": "Ismànnia custu tut", + "status.open": "Ismànnia custa publicatzione", "status.pin": "Apica in su profilu", - "status.pinned": "Tut apicadu", + "status.pinned": "Publicatzione apicada", "status.read_more": "Leghe·nde àteru", "status.reblog": "Cumpartzi", "status.reblog_private": "Cumpartzi cun is utentes originales", "status.reblogged_by": "{name} at cumpartzidu", - "status.reblogs.empty": "Nemos at ancora cumpartzidu custu tut. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", + "status.reblogs.empty": "Nemos at ancora cumpartzidu custa publicatzione. Cando calicunu dd'at a fàghere, at a èssere ammustrada inoghe.", "status.redraft": "Cantzella e torra a iscrìere", "status.remove_bookmark": "Boga su sinnalibru", "status.reply": "Risponde", @@ -446,7 +435,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} dae àteros serbidores non benint ammustrados.", "timeline_hint.resources.followers": "Sighiduras", "timeline_hint.resources.follows": "Sighende", - "timeline_hint.resources.statuses": "Tuts prus betzos", + "timeline_hint.resources.statuses": "Publicatziones prus betzas", "trends.counter_by_accounts": "{count, plural, one {{counter} persone} other {{counter} persones}} chistionende", "trends.trending_now": "Est tendèntzia immoe", "ui.beforeunload": "S'abbotzu tuo at a èssere pèrdidu si essis dae Mastodon.", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json new file mode 100644 index 000000000..bb5070529 --- /dev/null +++ b/app/javascript/mastodon/locales/si.json @@ -0,0 +1,475 @@ +{ + "account.account_note_header": "සටහන", + "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", + "account.badges.bot": "ස්වයං ක්රමලේඛය", + "account.badges.group": "සමූහය", + "account.block": "@{name} අවහිර කරන්න", + "account.block_domain": "{domain} වසම අවහිර කරන්න", + "account.blocked": "අවහිර කර ඇත", + "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "@{name} සෘජු පණිවිඩය", + "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් දීම නවත්වන්න", + "account.domain_blocked": "වසම අවහිර කර ඇත", + "account.edit_profile": "පැතිකඩ සංස්කරණය", + "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", + "account.endorse": "පැතිකඩෙහි විශේෂාංගය", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", + "account.last_status": "අවසන් වරට සක්රීය", + "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදි", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "මාධ්යය", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "@{name} නිහඬ කරන්න", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "@{name} වාර්තා කරන්න", + "account.requested": "Awaiting approval", + "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "@{name} අනවහිර කරන්න", + "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", + "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "සටහන එකතු කිරීමට ක්ලික් කරන්න", + "alert.rate_limited.message": "කරුණාකර {retry_time, time, medium} ට පසු නැවත උත්සාහ කරන්න.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "අපොයි!", + "announcement.announcement": "නිවේදනය", + "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": "නැවත උත්සාහ කරන්න", + "bundle_column_error.title": "ජාලයේ දෝෂයකි", + "bundle_modal_error.close": "වසන්න", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", + "column.blocks": "අවහිර කළ පරිශීලකයින්", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "පැතිකඩයන් පිරික්සන්න", + "column.domain_blocks": "අවහිර කළ වසම්", + "column.favourites": "ප්රියතමයන්", + "column.follow_requests": "Follow requests", + "column.home": "මුල් පිටුව", + "column.lists": "ලැයිස්තු", + "column.mutes": "නිහඬ කළ පරිශීලකයන්", + "column.notifications": "දැනුම්දීම්", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "ආපසු", + "column_header.hide_settings": "සැකසුම් සඟවන්න", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "සැකසුම් පෙන්වන්න", + "column_header.unpin": "Unpin", + "column_subheading.settings": "සැකසුම්", + "community.column_settings.local_only": "ස්ථානීයව පමණයි", + "community.column_settings.media_only": "මාධ්ය පමණයි", + "community.column_settings.remote_only": "දුරස්ථව පමණයි", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", + "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", + "compose_form.poll.add_option": "තේරීමක් එකතු කරන්න", + "compose_form.poll.duration": "මත විමසීමේ කාලය", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "මෙම තේරීම ඉවත් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.publish": "පිඹින්න", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "පාඨය සඟවා නැත", + "compose_form.spoiler_placeholder": "ඔබගේ අවවාදය මෙහි ලියන්න", + "confirmation_modal.cancel": "අවලංගු", + "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", + "confirmations.block.confirm": "අවහිර", + "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට අවශ්ය බව විශ්වාසද?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "නික්මෙන්න", + "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්ය බව විශ්වාසද?", + "confirmations.mute.confirm": "නිශ්ශබ්ද", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්ය බව විශ්වාසද?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "පිළිතුර", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "කියවූ ලෙස සලකුණු කරන්න", + "conversation.open": "සංවාදය බලන්න", + "conversation.with": "{names} සමඟ", + "directory.federated": "From known fediverse", + "directory.local": "{domain} වෙතින් පමණි", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "ක්රියාකාරකම", + "emoji_button.custom": "අභිරුචි", + "emoji_button.flags": "Flags", + "emoji_button.food": "ආහාර සහ පාන", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "මිනිසුන්", + "emoji_button.recent": "නිතර භාවිතා වූ", + "emoji_button.search": "සොයන්න...", + "emoji_button.search_results": "සෙවුම් ප්රතිඵල", + "emoji_button.symbols": "සංකේත", + "emoji_button.travel": "චාරිකා සහ ස්ථාන", + "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "අවහිර කළ වසම් නොමැත.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_request.authorize": "Authorize", + "follow_request.reject": "ප්රතික්ෂේප", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "සංවර්ධකයින්", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "මිනිසුන්ට ආරාධනා කරන්න", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "ගිණුමේ සැකසුම්", + "getting_started.terms": "සේවාවේ කොන්දේසි", + "hashtag.column_header.tag_mode.all": "සහ {additional}", + "hashtag.column_header.tag_mode.any": "හෝ {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "යෝජනා කිසිවක් හමු නොවිණි", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", + "hashtag.column_settings.tag_mode.any": "මෙයින් ඕනෑම එකක්", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "මූලික", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "ප්රතිචාර පෙන්වන්න", + "home.hide_announcements": "නිවේදන සඟවන්න", + "home.show_announcements": "නිවේදන පෙන්වන්න", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "වසන්න", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "ඊළඟ", + "lightbox.previous": "පෙර", + "lists.account.add": "ලැයිස්තුවට එකතු කරන්න", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "ලැයිස්තුව සංස්කරණය කරන්න", + "lists.edit.submit": "Change title", + "lists.new.create": "ලැයිස්තුව එකතු කරන්න", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "පූරණය වෙමින්...", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "නික්මෙන්න", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "පුද්ගලික", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "ආරක්ෂාව", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "පෙන්වන්න", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "සියල්ල", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "මනාපය", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "නැවුම් කරන්න", + "regeneration_indicator.label": "පූරණය වෙමින්…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "දැන්", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "අද", + "reply_indicator.cancel": "අවලංගු කරන්න", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "අමතර අදහස්", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "සොයන්න", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "පරිශීලක", + "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.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "පෙරන ලද", + "status.load_more": "තව පූරණය කරන්න", + "status.media_hidden": "මාධ්ය සඟවා ඇත", + "status.mention": "Mention @{name}", + "status.more": "තව", + "status.mute": "@{name} නිහඬ කරන්න", + "status.mute_conversation": "සංවාදය නිහඬ කරන්න", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "පිළිතුරු", + "status.replyAll": "Reply to thread", + "status.report": "@{name} වාර්තා කරන්න", + "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", + "status.share": "බෙදාගන්න", + "status.show_less": "අඩුවෙන් පෙන්වන්න", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "මුල් පිටුව", + "tabs_bar.local_timeline": "ස්ථානීය", + "tabs_bar.notifications": "දැනුම්දීම්", + "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", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "උඩුගත කිරීමට ඇද දමන්න", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "ගොනුව උඩුගත කළ හැකි සීමාව ඉක්මවා ඇත.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "සංස්කරණය", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "පින්තූරය විශ්ලේෂණය කරමින්…", + "upload_modal.apply": "යොදන්න", + "upload_modal.choose_image": "පින්තුරයක් තෝරන්න", + "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", + "upload_modal.detect_text": "පින්තූරයෙන් පාඨ හඳුනාගන්න", + "upload_modal.edit_media": "මාධ්ය සංස්කරණය", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "පෙරදසුන ({ratio})", + "upload_progress.label": "උඩුගත වෙමින්...", + "video.close": "Close video", + "video.download": "ගොනුව බාගන්න", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "පූර්ණ තිරය", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "විරාමය", + "video.play": "ධාවනය", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 9bb0aa8ce..d10f29aaf 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -22,6 +22,7 @@ "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", "account.follows_you": "Nasleduje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", + "account.joined": "Joined {date}", "account.last_status": "Naposledy aktívny", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", "empty_column.favourited_statuses": "Nemáš obľúbené ešte žiadne príspevky. Keď si nejaký obľúbiš, bude zobrazený práve tu.", "empty_column.favourites": "Tento toot si ešte nikto neobľúbil. Ten kto si ho obľúbi, bude zobrazený tu.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.", "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.", "empty_column.home": "Tvoja lokálna osa je zatiaľ prázdna! Pre začiatok navštív {public}, alebo použi vyhľadávanie a nájdi tak aj iných užívateľov.", - "empty_column.home.public_timeline": "verejná časová os", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.", "empty_column.lists": "Nemáš ešte žiadne zoznamy. Keď nejaký vytvoríš, bude zobrazený práve tu.", "empty_column.mutes": "Ešte si nestĺmil žiadných užívateľov.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "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.", - "introduction.federation.home.headline": "Domovská", - "introduction.federation.home.text": "Príspevky od ľudí ktorých nasleduješ sa zobrazia na tvojej domovskej nástenke. Môžeš nasledovať hocikoho na ktoromkoľvek serveri!", - "introduction.federation.local.headline": "Miestna", - "introduction.federation.local.text": "Verejné príspevky od ľudí v rámci toho istého serveru na akom si aj ty, budú zobrazované na miestnej časovej osi.", - "introduction.interactions.action": "Ukonči návod!", - "introduction.interactions.favourite.headline": "Obľúbené", - "introduction.interactions.favourite.text": "Obľúbením si môžeš príspevok uložiť na neskôr, a zároveň dať jeho autorovi vedieť, že sa ti páčil.", - "introduction.interactions.reblog.headline": "Vyzdvihni", - "introduction.interactions.reblog.text": "Môžeš zdieľať príspevky iných ľudí s tvojími následovateľmi tak, že ich vyzdvihneš.", - "introduction.interactions.reply.headline": "Odpovedz", - "introduction.interactions.reply.text": "Odpovedať môžeš na príspevky iných ľudí, aj na svoje vlastné, čím sa spolu prepoja do konverzácie.", - "introduction.welcome.action": "Poďme do toho!", - "introduction.welcome.headline": "Prvé kroky", - "introduction.welcome.text": "Vitaj vo fediverse! Za malú chvíľu budeš môcť posielať správy a rozpovedať sa so svojími priateľmi cez širokú škálu rôznorodých serverov. Ale tento server, {domain}, je špeciálny v tom, že ukladá tvoj profil, takže si jeho názov zapametaj.", "keyboard_shortcuts.back": "dostať sa naspäť", "keyboard_shortcuts.blocked": "otvor zoznam blokovaných užívateľov", "keyboard_shortcuts.boost": "vyzdvihnúť", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", "notifications.filter.favourites": "Obľúbené", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index ca29c4455..2790a4d19 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -22,6 +22,7 @@ "account.follows.empty": "Ta uporabnik še ne sledi nikomur.", "account.follows_you": "Sledi tebi", "account.hide_reblogs": "Skrij spodbude od @{name}", + "account.joined": "Joined {date}", "account.last_status": "Zadnja dejavnost", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Še vedno ni skritih domen.", "empty_column.favourited_statuses": "Nimate priljubljenih tutov. Ko boste vzljubili kakšnega, se bo prikazal tukaj.", "empty_column.favourites": "Nihče še ni vzljubil tega tuta. Ko ga bo nekdo, se bo pojavil tukaj.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Nimate prošenj za sledenje. Ko boste prejeli kakšno, se bo prikazala tukaj.", "empty_column.hashtag": "V tem ključniku še ni nič.", "empty_column.home": "Vaša domača časovnica je prazna! Obiščite {public} ali uporabite iskanje, da se boste srečali druge uporabnike.", - "empty_column.home.public_timeline": "javna časovnica", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.", "empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.", "empty_column.mutes": "Niste utišali še nobenega uporabnika.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Overi", "follow_request.reject": "Zavrni", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}", "intervals.full.minutes": "{number, plural, one {# minuta} two {# minuti} few {# minute} other {# minut}}", - "introduction.federation.action": "Naprej", - "introduction.federation.federated.headline": "Združeno", - "introduction.federation.federated.text": "Javne objave iz drugih strežnikov fediverse-a bodo prikazane v združeni časovnici.", - "introduction.federation.home.headline": "Domov", - "introduction.federation.home.text": "Objave oseb, ki jim sledite, bodo prikazane v vaši domači časovnici. Lahko sledite vsakomur na katerem koli strežniku!", - "introduction.federation.local.headline": "Lokalno", - "introduction.federation.local.text": "Javne objave ljudi na istem strežniku, se bodo prikazale na lokalni časovnici.", - "introduction.interactions.action": "Zaključi vadnico!", - "introduction.interactions.favourite.headline": "Vzljubi", - "introduction.interactions.favourite.text": "Tut lahko shranite za pozneje in ga vzljubite ter s tem pokažete avtorju, da vam je ta tut priljubljen.", - "introduction.interactions.reblog.headline": "Spodbudi", - "introduction.interactions.reblog.text": "Tute drugih ljudi lahko delite z vašimi sledilci, tako da spodbudite tute.", - "introduction.interactions.reply.headline": "Odgovori", - "introduction.interactions.reply.text": "Lahko odgovarjate na tuje in vaše tute, kar bo odgovore povezalo v pogovor.", - "introduction.welcome.action": "Gremo!", - "introduction.welcome.headline": "Prvi koraki", - "introduction.welcome.text": "Dobrodošli v fediverse-u! Čez nekaj trenutkov boste lahko oddajali sporočila in se pogovarjali s prijatelji prek različnih strežnikov. Vendar je ta strežnik {domain} poseben - gosti vaš profil, zato si zapomnite njegovo ime.", "keyboard_shortcuts.back": "pojdi nazaj", "keyboard_shortcuts.blocked": "odpri seznam blokiranih uporabnikov", "keyboard_shortcuts.boost": "spodbudi", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Prikaži v stolpcu", "notifications.column_settings.sound": "Predvajaj zvok", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Vse", "notifications.filter.boosts": "Spodbude", "notifications.filter.favourites": "Priljubljeni", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index b45f62cd5..de274500a 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Shënimi juaj për @{name}", + "account.account_note_header": "Shënim", "account.add_or_remove_from_list": "Shtoni ose Hiqni prej listash", "account.badges.bot": "Robot", "account.badges.group": "Grup", @@ -7,7 +7,7 @@ "account.block_domain": "Blloko përkatësinë {domain}", "account.blocked": "E bllokuar", "account.browse_more_on_origin_server": "Shfletoni më tepër rreth profilit origjinal", - "account.cancel_follow_request": "Anulo kërkesën e ndjekjes", + "account.cancel_follow_request": "Anulo kërkesë ndjekjeje", "account.direct": "Mesazh i drejtpërdrejtë për @{name}", "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}", "account.domain_blocked": "Përkatësia u bllokua", @@ -16,12 +16,13 @@ "account.endorse": "Pasqyrojeni në profil", "account.follow": "Ndiqeni", "account.followers": "Ndjekës", - "account.followers.empty": "Këtë përdorues ende s’e ndjek njeri.", + "account.followers.empty": "Këtë përdorues ende s’e ndjek kush.", "account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}", - "account.following_counter": "{count, plural, other {{counter} të Ndjekur}}", - "account.follows.empty": "Ky përdorues ende s’ndjek njeri.", + "account.following_counter": "{count, plural, one {{counter} i Ndjekur} other {{counter} të Ndjekur}}", + "account.follows.empty": "Ky përdorues ende s’ndjek kënd.", "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", + "account.joined": "U bë pjesë më {date}", "account.last_status": "Aktiv së fundi më", "account.link_verified_on": "Pronësia e kësaj lidhjeje qe kontrolluar më {date}", "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.", @@ -45,14 +46,14 @@ "account.unfollow": "Resht së ndjekuri", "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}", - "account_note.placeholder": "S’u dha koment", + "account_note.placeholder": "Klikoni për të shtuar shënim", "alert.rate_limited.message": "Ju lutemi, riprovoni pas {retry_time, time, medium}.", "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", - "announcement.announcement": "Njoftim", + "announcement.announcement": "Lajmërim", "autosuggest_hashtag.per_week": "{count} për javë", - "boost_modal.combo": "Mund të shtypni {combo}, që kjo të anashkalohet herës tjetër", + "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", "bundle_column_error.retry": "Riprovoni", "bundle_column_error.title": "Gabim rrjeti", @@ -90,7 +91,7 @@ "compose_form.lock_disclaimer": "Llogaria juaj s’është {locked}. Mund ta ndjekë cilido, për të parë postimet tuaja vetëm për ndjekësit.", "compose_form.lock_disclaimer.lock": "e kyçur", "compose_form.placeholder": "Ç’bluani në mendje?", - "compose_form.poll.add_option": "Shto zgjedhje", + "compose_form.poll.add_option": "Shtoni një zgjedhje", "compose_form.poll.duration": "Kohëzgjatje pyetësori", "compose_form.poll.option_placeholder": "Zgjedhja {number}", "compose_form.poll.remove_option": "Hiqe këtë zgjedhje", @@ -98,14 +99,14 @@ "compose_form.poll.switch_to_single": "Ndrysho votimin për të lejuar vetëm një zgjedhje", "compose_form.publish": "Mesazh", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Vëri shenjë medias si rezervat", - "compose_form.sensitive.marked": "Media është shënuar si rezervat", - "compose_form.sensitive.unmarked": "Media s’është shënuar si rezervat", - "compose_form.spoiler.marked": "Teksti është fshehur pas sinjalizimit", - "compose_form.spoiler.unmarked": "Teksti s’është i fshehur", + "compose_form.sensitive.hide": "{count, plural, one {Vëri shenjë medias si rezervat} other {Vëru shenjë mediave si rezervat}}", + "compose_form.sensitive.marked": "{count, plural, one {Medias i është vënë shenjë rezervat} other {Mediave u është vënë shenjë si rezervat}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media s’ka shenjë si rezervat} other {Mediat s’kanë shenja si rezervat}}", + "compose_form.spoiler.marked": "Hiq sinjalizim lënde", + "compose_form.spoiler.unmarked": "Shtoni sinjalizim lënde", "compose_form.spoiler_placeholder": "Shkruani këtu sinjalizimin tuaj", "confirmation_modal.cancel": "Anuloje", - "confirmations.block.block_and_report": "Bllokoje & Raportojeni", + "confirmations.block.block_and_report": "Bllokojeni & Raportojeni", "confirmations.block.confirm": "Bllokoje", "confirmations.block.message": "Jeni i sigurt se doni të bllokohet {name}?", "confirmations.delete.confirm": "Fshije", @@ -139,7 +140,7 @@ "emoji_button.custom": "Vetjak", "emoji_button.flags": "Flamuj", "emoji_button.food": "Ushqim & Pije", - "emoji_button.label": "Futni emotikonë", + "emoji_button.label": "Futni emoxhi", "emoji_button.nature": "Natyrë", "emoji_button.not_found": "No emojos!!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objekte", @@ -159,21 +160,25 @@ "empty_column.domain_blocks": "Ende s’ka përkatësi të fshehura.", "empty_column.favourited_statuses": "S’keni ende ndonjë mesazh të parapëlqyer. Kur parapëlqeni një të tillë, ai do të shfaqet këtu.", "empty_column.favourites": "Askush s’e ka parapëlqyer ende këtë mesazh. Kur e bën dikush, ai do të shfaqet këtu.", + "empty_column.follow_recommendations": "Duket se s’u prodhuan dot sugjerime për ju. Mund të provoni të kërkoni për persona që mund të njihni, ose të eksploroni hashtag-ë që janë në modë.", "empty_column.follow_requests": "Ende s’keni ndonjë kërkesë ndjekjeje. Kur të merrni një të tillë, do të shfaqet këtu.", "empty_column.hashtag": "Ende s’ka gjë nën këtë hashtag.", "empty_column.home": "Rrjedha juaj kohore është e zbrazët! Vizitoni {public} ose përdorni kërkimin që t’ia filloni dhe të takoni përdorues të tjerë.", - "empty_column.home.public_timeline": "rrjedha kohore publike", + "empty_column.home.suggestions": "Shihni disa sugjerime", "empty_column.list": "Në këtë listë ende s’ka gjë. Kur anëtarë të kësaj liste postojnë gjendje të reja, ato do të shfaqen këtu.", "empty_column.lists": "Ende s’keni ndonjë listë. Kur të krijoni një të tillë, do të duket këtu.", "empty_column.mutes": "S’keni heshtuar ende ndonjë përdorues.", "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", - "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë", + "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që kjo të mbushet", "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.", "error.unexpected_crash.explanation_addons": "Kjo faqe s’u shfaq dot saktë. Ky gabim ka gjasa të jetë shkaktuar nga një shtesë shfletuesi ose një mjet përkthimi të automatizuar.", "error.unexpected_crash.next_steps": "Provoni të freskoni faqen. Nëse kjo s’bën punë, mundeni ende të jeni në gjendje të përdorni Mastodon-in që nga një shfletues tjetër ose nga ndonjë aplikacion origjinal prej projektit.", "error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.", "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", + "follow_recommendations.done": "U bë", + "follow_recommendations.heading": "Ndiqni persona prej të cilëve doni të shihni postime! Ja ca sugjerime.", + "follow_recommendations.lead": "Postimet prej personash që ndiqni do të shfaqen në rend kohor te prurja juaj kryesore. Mos kini frikë të bëni gabime, mund të ndalni po aq kollaj ndjekjen e dikujt, në çfarëdo kohe!", "follow_request.authorize": "Autorizoje", "follow_request.reject": "Hidhe tej", "follow_requests.unlocked_explanation": "Edhe pse llogaria juaj s’është e kyçur, ekipi i {domain} mendoi se mund të donit të shqyrtonit dorazi kërkesa ndjekjeje prej këtyre llogarive.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}", "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}", "intervals.full.minutes": "{number, plural, one {# minutë} other {# minuta}}", - "introduction.federation.action": "Pasuesi", - "introduction.federation.federated.headline": "Të federuara", - "introduction.federation.federated.text": "Postimet publike nga shërbyes të tjerë të fediversit do të shfaqen te rrjedha kohore e të federuarve.", - "introduction.federation.home.headline": "Vatër", - "introduction.federation.home.text": "Postime prej personash që ndiqni do të shfaqen te prurja juaj vatër. Mund të ndiqni këdo, në çfarëdo shërbyesi!", - "introduction.federation.local.headline": "Vendore", - "introduction.federation.local.text": "Postimet publike prej personash në të njëjtin shërbyes me ju do të shfaqen te rrjedha kohore vendore.", - "introduction.interactions.action": "Përfundojeni përkujdesoren!", - "introduction.interactions.favourite.headline": "Parapëlqejeni", - "introduction.interactions.favourite.text": "Duke e parapëlqyer, një mesazh mund ta ruani për më vonë dhe t’i bëni të ditur autorit se e pëlqyet.", - "introduction.interactions.reblog.headline": "Përforcim", - "introduction.interactions.reblog.text": "Mesazhet e të tjerëve mund t’i ndani me ndjekësit tuaj duke i përforcuar.", - "introduction.interactions.reply.headline": "Përgjigjuni", - "introduction.interactions.reply.text": "Mund t'u përgjigjeni mesazheve tuaja dhe atyre të personave të tjerë, çka do t’i lidhë ato tok në një bisedë.", - "introduction.welcome.action": "Shkojmë!", - "introduction.welcome.headline": "Hapat e parë", - "introduction.welcome.text": "Mirë se vini në fedivers! Brenda pak çastesh do të jeni në gjendje të transmetoni mesazhe dhe të bisedoni me miqtë tuaj nëpër një larmi të madhe shërbyesish. Por ky shërbyes, {domain}, është i veçantë—strehon profilin tuaj, ndaj mbajeni mend emrin e tij.", "keyboard_shortcuts.back": "për shkuarje mbrapsht", "keyboard_shortcuts.blocked": "për hapje liste përdoruesish të bllokuar", "keyboard_shortcuts.boost": "për përforcim", @@ -324,9 +312,10 @@ "notifications.column_settings.poll": "Përfundime pyetësori:", "notifications.column_settings.push": "Njoftime Push", "notifications.column_settings.reblog": "Përforcime:", - "notifications.column_settings.show": "Shfaq në shtylla", + "notifications.column_settings.show": "Shfaqi në shtylla", "notifications.column_settings.sound": "Luaj një tingull", "notifications.column_settings.status": "Mesazhe të rinj:", + "notifications.column_settings.unread_markers.category": "Shenja njoftimesh të palexuara", "notifications.filter.all": "Krejt", "notifications.filter.boosts": "Përforcime", "notifications.filter.favourites": "Të parapëlqyer", @@ -337,11 +326,11 @@ "notifications.grant_permission": "Akordoji leje.", "notifications.group": "{count}s njoftime", "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar", - "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.", + "notifications.permission_denied": "S’merren dot njoftime në desktop, ngaqë më herët shfletuesit i janë mohuar lejet për këtë", "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.", "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", - "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.", + "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në desktop, pasi të jenë aktivizuar.", "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", "picture_in_picture.restore": "Ktheje ku qe", "poll.closed": "I mbyllur", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 88c9df59b..61e37ba53 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "Trenutno nema ništa na ovom heštegu.", "empty_column.home": "Vaša lajna je prazna! Posetite {public} ili koristite pretragu da počnete i upoznajete nove ljude.", - "empty_column.home.public_timeline": "javna lajna", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "U ovoj listi još nema ničega. Kada članovi liste objave nove statuse, oni će se pojavljivati ovde.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Odobri", "follow_request.reject": "Odbij", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "da odete nazad", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "da podržite", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.sound": "Puštaj zvuk", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 2509c9085..24a4c832c 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -1,27 +1,28 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Напомена", "account.add_or_remove_from_list": "Додај или Одстрани са листа", "account.badges.bot": "Бот", "account.badges.group": "Група", "account.block": "Блокирај @{name}", "account.block_domain": "Сакриј све са домена {domain}", "account.blocked": "Блокиран", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Погледајте још на оригиналном профилу", "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Прекини обавештавање за објаве корисника @{name}", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Обавести ме када @{name} објави", "account.endorse": "Приказати на профилу", "account.follow": "Запрати", "account.followers": "Пратиоци", "account.followers.empty": "Тренутно нико не прати овог корисника.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} пратилац} few {{counter} пратиоца} other {{counter} пратилаца}}", + "account.following_counter": "{count, plural, one {{counter} прати} few {{counter} прати} other {{counter} прати}}", "account.follows.empty": "Корисник тренутно не прати никога.", "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", + "account.joined": "Joined {date}", "account.last_status": "Последњи пут активан/на", "account.link_verified_on": "Власништво над овом везом је проверено {date}", "account.locked_info": "Статус приватности овог налога је подешен на закључано. Власник ручно прегледа ко га може пратити.", @@ -38,7 +39,7 @@ "account.requested": "Чекам одобрење. Кликните да поништите захтев за праћење", "account.share": "Подели профил корисника @{name}", "account.show_reblogs": "Прикажи подршке од корисника @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}}", "account.unblock": "Одблокирај корисника @{name}", "account.unblock_domain": "Одблокирај домен {domain}", "account.unendorse": "Не истичи на профилу", @@ -81,9 +82,9 @@ "column_header.show_settings": "Прикажи поставке", "column_header.unpin": "Откачи", "column_subheading.settings": "Поставке", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Само локално", "community.column_settings.media_only": "Само Медији", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Само удаљено", "compose_form.direct_message_warning": "Ова труба ће бити послата споменутим корисницима.", "compose_form.direct_message_warning_learn_more": "Сазнајте више", "compose_form.hashtag_warning": "Ова труба неће бити излистана под било којом тарабом јер је сакривена. Само јавне трубе могу бити претражене тарабом.", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Резултати претраге", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Путовања и места", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Налог суспендован", "empty_column.account_timeline": "Овде нема труба!", "empty_column.account_unavailable": "Профил недоступан", "empty_column.blocks": "Још увек немате блокираних корисника.", @@ -159,25 +160,29 @@ "empty_column.domain_blocks": "Још увек нема сакривених домена.", "empty_column.favourited_statuses": "Још увек немате труба које су вам се свиделе. Када вам се једна свиди, појавиће се овде.", "empty_column.favourites": "Још увек се никоме није свидела ова труба. Када се некоме свиди, појавиће се овде.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Још увек немате захтева за праћење. Када примите захтев, појавиће се овде.", "empty_column.hashtag": "Тренутно нема ништа на овој означеној тараби.", "empty_column.home": "Ваша временска линија је празна! Посетите {public} или користите претрагу да почнете и да упознате нове људе.", - "empty_column.home.public_timeline": "јавна временска линија", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "У овој листи још нема ничега. Када чланови листе објаве нове статусе, они ће се појавити овде.", "empty_column.lists": "Још увек немате ниједну листу. Када направите једну, појавиће се овде.", "empty_column.mutes": "Још увек немате ућутканих корисника.", "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.", "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину", "error.unexpected_crash.explanation": "Због грешке у нашем коду или проблема са компатибилношћу прегледача, ова страница се није могла правилно приказати.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ова страница се није могла правилно приказати. Ову грешку вероватно узрокују додаци прегледача или алати за аутоматско превођење.", "error.unexpected_crash.next_steps": "Покушајте да освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Мастодон путем другог прегледача или матичне апликације.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Покушајте да их онемогућите и освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Mastodon преко другог прегледача или матичне апликације.", "errors.unexpected_crash.copy_stacktrace": "Копирај \"stacktrace\" у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Одобри", "follow_request.reject": "Одбиј", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} је помислило да бисте можда желели ручно да прегледате захтеве за праћење са ових налога.", + "generic.saved": "Сачувано", "getting_started.developers": "Програмери", "getting_started.directory": "Профил фасцикле", "getting_started.documentation": "Документација", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# дан} other {# дана}}", "intervals.full.hours": "{number, plural, one {# сат} other {# сати}}", "intervals.full.minutes": "{number, plural, one {# минут} other {# минута}}", - "introduction.federation.action": "Даље", - "introduction.federation.federated.headline": "Федерисано", - "introduction.federation.federated.text": "Јавне објаве са осталих сервера из здружених инстанци ће се појавити у федерисаној временској линији.", - "introduction.federation.home.headline": "Почетна", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "да одете назад", "keyboard_shortcuts.blocked": "да отворите листу блокираних корисника", "keyboard_shortcuts.boost": "да подржите", @@ -241,7 +229,7 @@ "keyboard_shortcuts.muted": "да отворите листу ућутканих корисника", "keyboard_shortcuts.my_profile": "да отворите ваш профил", "keyboard_shortcuts.notifications": "да отворите колону обавештења", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "за отварање медија", "keyboard_shortcuts.pinned": "да отворите листу закачених труба", "keyboard_shortcuts.profile": "да отворите профил аутора", "keyboard_shortcuts.reply": "да одговорите", @@ -250,39 +238,39 @@ "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "да отворите колону \"почнимо\"", "keyboard_shortcuts.toggle_hidden": "да прикажете/сакријте текст иза CW-а", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "за приказивање/сакривање медија", "keyboard_shortcuts.toot": "да започнете скроз нову трубу", "keyboard_shortcuts.unfocus": "да одфокусирате/не будете више на претрази/прављењу нове трубе", "keyboard_shortcuts.up": "да се померите на горе у листи", "lightbox.close": "Затвори", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Умањи преглед слике", + "lightbox.expand": "Увећај преглед слике", "lightbox.next": "Следећи", "lightbox.previous": "Претходни", "lists.account.add": "Додај на листу", "lists.account.remove": "Уклони са листе", "lists.delete": "Обриши листу", "lists.edit": "Измени листу", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Промени наслов", "lists.new.create": "Додај листу", "lists.new.title_placeholder": "Наслов нове листе", "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.list": "Чланови листе", + "lists.replies_policy.none": "Нико", + "lists.replies_policy.title": "Прикажи одговоре на:", "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": "Није пронађено", "missing_indicator.sublabel": "Овај ресурс није пронађен", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Трајање", "mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Неодређен", "navigation_bar.apps": "Мобилне апликације", "navigation_bar.blocks": "Блокирани корисници", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "Маркери", "navigation_bar.community_timeline": "Локална временска линија", "navigation_bar.compose": "Саставите нову трубу", "navigation_bar.direct": "Директне поруке", @@ -298,60 +286,61 @@ "navigation_bar.lists": "Листе", "navigation_bar.logout": "Одјава", "navigation_bar.mutes": "Ућуткани корисници", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Лично", "navigation_bar.pins": "Прикачене трубе", "navigation_bar.preferences": "Подешавања", "navigation_bar.public_timeline": "Здружена временска линија", "navigation_bar.security": "Безбедност", "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени", "notification.follow": "{name} Вас је запратио/ла", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} је затражио да Вас запрати", "notification.mention": "{name} Вас је поменуо/ла", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", + "notification.own_poll": "Ваша анкета је завршена", + "notification.poll": "Завршена је анкета у којој сте гласали", "notification.reblog": "{name} је подржао/ла Ваш статус", - "notification.status": "{name} just posted", + "notification.status": "{name} управо објавио", "notifications.clear": "Очисти обавештења", "notifications.clear_confirmation": "Да ли сте сигурно да трајно желите да очистите Ваша обавештења?", "notifications.column_settings.alert": "Обавештења на радној површини", "notifications.column_settings.favourite": "Омиљени:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Прикажи све категорије", + "notifications.column_settings.filter_bar.category": "Трака за брзи филтер", + "notifications.column_settings.filter_bar.show": "Прикажи", "notifications.column_settings.follow": "Нови пратиоци:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "Нови захтеви за праћење:", "notifications.column_settings.mention": "Помињања:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Резултати анкете:", "notifications.column_settings.push": "Гурај обавештења", "notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.sound": "Пуштај звук", - "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.column_settings.status": "Нови тутови:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "Све", + "notifications.filter.boosts": "Подршки", + "notifications.filter.favourites": "Омиљене", + "notifications.filter.follows": "Праћени", + "notifications.filter.mentions": "Помињања", + "notifications.filter.polls": "Резултати анкете", + "notifications.filter.statuses": "Ажурирања од људи које пратите", + "notifications.grant_permission": "Одобри дозволу.", "notifications.group": "{count} обавештења", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications.mark_as_read": "Означи свако обавештење као прочитано", + "notifications.permission_denied": "Обавештења на радној површини нису доступна због претходно одбијеног захтева за дозволом прегледача", + "notifications.permission_denied_alert": "Обавештења на радној површини не могу бити омогућена, јер је дозвола прегледача раније била одбијена", + "notifications.permission_required": "Обавештења на радној површини нису доступна јер потребна дозвола није додељена.", + "notifications_permission_banner.enable": "Омогућити обавештења на радној површини", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "notifications_permission_banner.title": "Ништа не пропустите", + "picture_in_picture.restore": "Врати то назад", + "poll.closed": "Затворено", + "poll.refresh": "Освежи", + "poll.total_people": "{count, plural, one {# особа} few {# особе} other {# особа}}", + "poll.total_votes": "{count, plural, one {# гласање} few {# гласања} other {# гласања}}", + "poll.vote": "Гласајте", + "poll.voted": "Гласали сте за овај одговор", + "poll_button.add_poll": "Додај анкету", + "poll_button.remove_poll": "Уклони анкету", "privacy.change": "Подеси статус приватности", "privacy.direct.long": "Објави само корисницима који су поменути", "privacy.direct.short": "Директно", @@ -361,15 +350,15 @@ "privacy.public.short": "Јавно", "privacy.unlisted.long": "Не објављуј на јавним временским линијама", "privacy.unlisted.short": "Неизлистано", - "refresh": "Refresh", + "refresh": "Освежи", "regeneration_indicator.label": "Учитавање…", "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}д", + "relative_time.hours": "{number}х", "relative_time.just_now": "сада", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", + "relative_time.minutes": "{number}м", + "relative_time.seconds": "{number}с", + "relative_time.today": "данас", "reply_indicator.cancel": "Поништи", "report.forward": "Проследити {target}", "report.forward_hint": "Налог је са другог сервера. Послати анонимну копију пријаве и тамо?", @@ -428,7 +417,7 @@ "status.show_more": "Прикажи више", "status.show_more_all": "Прикажи више за све", "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", + "status.uncached_media_warning": "Није доступно", "status.unmute_conversation": "Укључи преписку", "status.unpin": "Откачи са профила", "suggestions.dismiss": "Dismiss suggestion", @@ -438,43 +427,43 @@ "tabs_bar.local_timeline": "Локално", "tabs_bar.notifications": "Обавештења", "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.days": "Остало {number, plural, one {# дан} few {# дана} other {# дана}}", + "time_remaining.hours": "Остало {number, plural, one {# сат} few {# сата} other {# сати}}", + "time_remaining.minutes": "Остало {number, plural, one {# минут} few {# минута} other {# минута}}", "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "time_remaining.seconds": "Остало {number, plural, one {# секунд} few {# секунде} other {# секунди}}", + "timeline_hint.remote_resource_not_displayed": "{resource} са других сервера се не приказују.", + "timeline_hint.resources.followers": "Пратиоци", + "timeline_hint.resources.follows": "Праћени", + "timeline_hint.resources.statuses": "Старији тут", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Trending now", "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}Б", + "units.short.million": "{count}М", + "units.short.thousand": "{count}К", "upload_area.title": "Превуците овде да отпремите", "upload_button.label": "Додај мултимедију (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Опишите за особе са оштећеним видом", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.edit": "Уреди", + "upload_form.thumbnail": "Промени приказ слика", "upload_form.undo": "Обриши", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "upload_modal.analyzing_picture": "Анализа слике…", + "upload_modal.apply": "Примени", + "upload_modal.choose_image": "Изабери слику", "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.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.preparing_ocr": "Preparing OCR…", - "upload_modal.preview_label": "Preview ({ratio})", + "upload_modal.preview_label": "Преглед ({ratio})", "upload_progress.label": "Отпремам...", "video.close": "Затвори видео", - "video.download": "Download file", + "video.download": "Преузимање датотеке", "video.exit_fullscreen": "Напусти цео екран", "video.expand": "Прошири видео", "video.fullscreen": "Цео екран", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index a0fc4a4f3..fa336579a 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -22,6 +22,7 @@ "account.follows.empty": "Denna användare följer inte någon än.", "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", + "account.joined": "Gick med {date}", "account.last_status": "Senast aktiv", "account.link_verified_on": "Ägarskap för detta konto kontrollerades den {date}", "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.", @@ -38,7 +39,7 @@ "account.requested": "Inväntar godkännande. Klicka för att avbryta följarförfrågan", "account.share": "Dela @{name}s profil", "account.show_reblogs": "Visa knuffar från @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} Tuta} other {{counter} Tutor}}", "account.unblock": "Avblockera @{name}", "account.unblock_domain": "Sluta dölja {domain}", "account.unendorse": "Visa inte på profil", @@ -108,9 +109,9 @@ "confirmations.block.block_and_report": "Blockera & rapportera", "confirmations.block.confirm": "Blockera", "confirmations.block.message": "Är du säker på att du vill blockera {name}?", - "confirmations.delete.confirm": "Ta bort", - "confirmations.delete.message": "Är du säker på att du vill ta bort denna status?", - "confirmations.delete_list.confirm": "Ta bort", + "confirmations.delete.confirm": "Radera", + "confirmations.delete.message": "Är du säker på att du vill radera denna status?", + "confirmations.delete_list.confirm": "Radera", "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?", "confirmations.domain_block.confirm": "Dölj hela domänen", "confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer inte se innehåll från den domänen i den allmänna tidslinjen eller i dina aviseringar. Dina följare från den domänen komer att tas bort.", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Sökresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Resor & platser", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Kontot är avstängt", "empty_column.account_timeline": "Inga inlägg här!", "empty_column.account_unavailable": "Profilen ej tillgänglig", "empty_column.blocks": "Du har ännu ej blockerat några användare.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.", "empty_column.favourited_statuses": "Du har inga favoritmarkerade toots än. När du favoritmarkerar en kommer den visas här.", "empty_column.favourites": "Ingen har favoritmarkerat den här tooten än. När någon gör det kommer den visas här.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.", - "empty_column.home.public_timeline": "den publika tidslinjen", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.", "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.", "empty_column.mutes": "Du har ännu inte tystat några användare.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.", "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", + "follow_recommendations.done": "Klar", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Godkänn", "follow_request.reject": "Avvisa", "follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain} personalen att du kanske vill granska dessa följares förfrågningar manuellt.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# timme} other {# timmar}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minuter}}", - "introduction.federation.action": "Nästa", - "introduction.federation.federated.headline": "Federerad", - "introduction.federation.federated.text": "Publika inlägg från andra servrar i servernätverket visas i den förenade tidslinjen.", - "introduction.federation.home.headline": "Hem", - "introduction.federation.home.text": "Inlägg från personer du följer kommer att visas i din hemtidlinje. Du kan följa vem du vill på vald server!", - "introduction.federation.local.headline": "Lokal", - "introduction.federation.local.text": "Publika inlägg från personer på samma server som du kommer att visas på den lokala tidslinjen.", - "introduction.interactions.action": "Slutför introduktionsguide!", - "introduction.interactions.favourite.headline": "Favorit", - "introduction.interactions.favourite.text": "Du kan spara en tut till senare, och visa författaren att du gillade den genom att göra den till favorit.", - "introduction.interactions.reblog.headline": "Knuffa", - "introduction.interactions.reblog.text": "Du kan dela andra personers tutar med dina följare genom att knuffa dem.", - "introduction.interactions.reply.headline": "Svara", - "introduction.interactions.reply.text": "Du kan besvara andra personers och dina egna tutar, vilket kommer att koppla ihop dem i en konversation.", - "introduction.welcome.action": "Sätt igång!", - "introduction.welcome.headline": "Första stegen", - "introduction.welcome.text": "Välkommen till fediverse! Om några ögonblick kommer du kunna sända ut meddelanden och prata med dina vänner över en mängd servrar. Men den här servern, {domain}, är speciell — den är hem åt din profil, så kom ihåg vad den heter.", "keyboard_shortcuts.back": "för att gå bakåt", "keyboard_shortcuts.blocked": "för att öppna listan över blockerade användare", "keyboard_shortcuts.boost": "för att knuffa", @@ -268,8 +256,8 @@ "lists.new.title_placeholder": "Ny listrubrik", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.none": "Ingen", + "lists.replies_policy.title": "Visa svar till:", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", "load_pending": "{count, plural, other {# objekt}}", @@ -277,9 +265,9 @@ "media_gallery.toggle_visible": "Växla synlighet", "missing_indicator.label": "Hittades inte", "missing_indicator.sublabel": "Den här resursen kunde inte hittas", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Varaktighet", "mute_modal.hide_notifications": "Dölj aviseringar från denna användare?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Obestämt", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.bookmarks": "Bokmärken", @@ -310,7 +298,7 @@ "notification.own_poll": "Din röstning har avslutats", "notification.poll": "En omröstning du röstat i har avslutats", "notification.reblog": "{name} knuffade din status", - "notification.status": "{name} just posted", + "notification.status": "{name} skrev just", "notifications.clear": "Rensa aviseringar", "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?", "notifications.column_settings.alert": "Skrivbordsaviseringar", @@ -326,24 +314,25 @@ "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nya tutor:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "Alla", "notifications.filter.boosts": "Knuffar", "notifications.filter.favourites": "Favoriter", "notifications.filter.follows": "Följer", "notifications.filter.mentions": "Omnämningar", "notifications.filter.polls": "Omröstningsresultat", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Uppdateringar från personer som du följer", "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} aviseringar", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Markera varje avisering som läst", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar", "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Missa aldrig något", + "picture_in_picture.restore": "Lägg tillbaka det", "poll.closed": "Stängd", "poll.refresh": "Ladda om", "poll.total_people": "{persons, plural, one {# person} other {# personer}}", @@ -380,13 +369,13 @@ "search.placeholder": "Sök", "search_popout.search_format": "Avancerat sökformat", "search_popout.tips.full_text": "Enkel text returnerar statusar där du har skrivit, favoriserat, knuffat eller nämnts samt med matchande användarnamn, visningsnamn och hashtags.", - "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.hashtag": "hash-tagg", "search_popout.tips.status": "status", "search_popout.tips.text": "Enkel text returnerar matchande visningsnamn, användarnamn och hashtags", "search_popout.tips.user": "användare", "search_results.accounts": "Människor", "search_results.hashtags": "Hashtaggar", - "search_results.statuses": "Toots", + "search_results.statuses": "Tutor", "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", @@ -396,7 +385,7 @@ "status.cancel_reblog_private": "Ta bort knuff", "status.cannot_reblog": "Detta inlägg kan inte knuffas", "status.copy": "Kopiera länk till status", - "status.delete": "Ta bort", + "status.delete": "Radera", "status.detailed_status": "Detaljerad samtalsvy", "status.direct": "Direktmeddela @{name}", "status.embed": "Bädda in", @@ -461,7 +450,7 @@ "upload_form.description": "Beskriv för synskadade", "upload_form.edit": "Beskriv", "upload_form.thumbnail": "Ändra miniatyr", - "upload_form.undo": "Ta bort", + "upload_form.undo": "Radera", "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", "upload_modal.analyzing_picture": "Analyserar bild…", "upload_modal.apply": "Verkställ", @@ -470,7 +459,7 @@ "upload_modal.detect_text": "Upptäck bildens text", "upload_modal.edit_media": "Redigera meida", "upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Förbereder OCR…", "upload_modal.preview_label": "Förhandstitt ({ratio})", "upload_progress.label": "Laddar upp...", "video.close": "Stäng video", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 70f6ab152..1b311b04d 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 8f5f06cc4..3d0d80e37 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -22,6 +22,7 @@ "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", + "account.joined": "Joined {date}", "account.last_status": "கடைசி செயல்பாடு", "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}", "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "தடுக்கப்பட்டக் களங்கள் இதுவரை இல்லை.", "empty_column.favourited_statuses": "உங்களுக்குப் பிடித்த டூட்டுகள் இதுவரை இல்லை. ஒரு டூட்டில் நீங்கள் விருப்பக்குறி இட்டால், அது இங்கே காண்பிக்கப்படும்.", "empty_column.favourites": "இந்த டூட்டில் இதுவரை யாரும் விருப்பக்குறி இடவில்லை. யாரேனும் விரும்பினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "வாசகர் கோரிக்கைகள் இதுவரை ஏதும் இல்லை. யாரேனும் கோரிக்கையை அனுப்பினால், அது இங்கே காண்பிக்கப்படும்.", "empty_column.hashtag": "இந்த சிட்டையில் இதுவரை ஏதும் இல்லை.", "empty_column.home": "உங்கள் மாஸ்டடான் வீட்டில் யாரும் இல்லை. {public} -இல் சென்று பார்க்கவும், அல்லது தேடல் கருவியைப் பயன்படுத்திப் பிற பயனர்களைக் கண்டடையவும்.", - "empty_column.home.public_timeline": "பொது டைம்லைன்", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "இந்தப் பட்டியலில் இதுவரை ஏதும் இல்லை. இப்பட்டியலின் உறுப்பினர்கள் புதிய டூட்டுகளை இட்டால். அவை இங்கே காண்பிக்கப்படும்.", "empty_column.lists": "இதுவரை நீங்கள் எந்தப் பட்டியலையும் உருவாக்கவில்லை. உருவாக்கினால், அது இங்கே காண்பிக்கப்படும்.", "empty_column.mutes": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "அனுமதியளி", "follow_request.reject": "நிராகரி", "follow_requests.unlocked_explanation": "உங்கள் கணக்கு பூட்டப்படவில்லை என்றாலும், இந்தக் கணக்குகளிலிருந்து உங்களைப் பின்தொடர விரும்பும் கோரிக்கைகளை நீங்கள் பரீசீலிப்பது நலம் என்று {domain} ஊழியர் எண்ணுகிறார்.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# நாள்} other {# நாட்கள்}}", "intervals.full.hours": "{number, plural, one {# மணிநேரம்} other {# மணிநேரங்கள்}}", "intervals.full.minutes": "{number, plural, one {# நிமிடம்} other {# நிமிடங்கள்}}", - "introduction.federation.action": "அடுத்து", - "introduction.federation.federated.headline": "கூட்டமைந்த", - "introduction.federation.federated.text": "ஃபெடிவெர்சின் மற்ற சர்வர்களிலிருந்து இடப்படும் பொதுப் பதிவுகள் இந்த மாஸ்டடான் ஆலமரத்தில் தோன்றும்.", - "introduction.federation.home.headline": "முகப்பு", - "introduction.federation.home.text": "நீங்கள் பின்தொடரும் நபர்களின் இடுகைகள் உங்கள் மாஸ்டடான் வீட்டில் தோன்றும். உங்களால் எந்த சர்வரில் உள்ள எவரையும் பின்பற்ற முடியும்!", - "introduction.federation.local.headline": "அருகாமை", - "introduction.federation.local.text": "உங்கள் சர்வரில் இருக்கும் மற்ற நபர்களின் பொதுப் பதிவுகள் இந்த மாஸ்டடான் முச்சந்தியில் தோன்றும்.", - "introduction.interactions.action": "பயிற்சியை நிறைவு செய்!", - "introduction.interactions.favourite.headline": "விருப்பம்", - "introduction.interactions.favourite.text": "ஒரு டூட்டில் விருப்பக்குறி இடுவதன் மூலம் உங்கள் விருப்பத்தை அதை எழுதியவருக்குத் தெரியப்படுத்த முடியும், மேலும் அந்த டூட்டை மறுவாசிப்பிற்காக சேமிக்கமுடியும்.", - "introduction.interactions.reblog.headline": "பகிர்", - "introduction.interactions.reblog.text": "மற்றவர்களின் டூட்டுகளைப் பகிர்வதன் மூலம் அவற்றை உங்கள் வாசகர்களுக்குக் காண்பிக்க முடியும்.", - "introduction.interactions.reply.headline": "மறுமொழி", - "introduction.interactions.reply.text": "உங்களால் மற்றவர்களின் டூட்டுகளிலும் உங்கள் டூட்டுகளிலும் மறுமொழி இட முடியும். அவை ஒன்றோடு ஒன்றாக சங்கிலிபோல் பின்னப்பட்டு உரையாடலாக மாறும்.", - "introduction.welcome.action": "வாருங்கள் துவங்கலாம்!", - "introduction.welcome.headline": "முதற்படிகள்", - "introduction.welcome.text": "ஃபெடிவெர்ஸ் உங்களை அன்புடன் வரவேற்கிறது! இன்னும் சில நிமிடங்களில் உங்களால் செய்திகளை உலகிற்குச் சொல்லமுடியும். பல்வேறு சர்வர்களில் இருக்கும் உங்கள் நண்பர்களோடு பேச முடியும். ஆனால், இந்த சர்வர் {domain} மிகவும் தனித்துவமானது, ஏனெனில் உங்கள் பக்கத்தை இதுதான் வழங்குகிறது, எனவே இதன் பெயரை நினைவில் கொள்ளுங்கள்.", "keyboard_shortcuts.back": "பின் செல்ல", "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்கள் பட்டியலைத் திறக்க", "keyboard_shortcuts.boost": "பகிர", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "பத்தியில் காண்பி", "notifications.column_settings.sound": "ஒலி விளையாட", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "எல்லா", "notifications.filter.boosts": "மதிப்பை உயர்த்து", "notifications.filter.favourites": "விருப்பத்துக்குகந்த", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 70f6ab152..c2ce475b8 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -22,10 +22,11 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", + "account.media": "Mûi-thé", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", "account.mute": "Mute @{name}", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 994682a67..306c1ec9f 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -22,6 +22,7 @@ "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.", "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది", "account.locked_info": "ఈ ఖాతా యొక్క గోప్యత స్థితి లాక్ చేయబడి వుంది. ఈ ఖాతాను ఎవరు అనుసరించవచ్చో యజమానే నిర్ణయం తీసుకుంటారు.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "దాచబడిన డొమైన్లు ఇంకా ఏమీ లేవు.", "empty_column.favourited_statuses": "మీకు ఇష్టపడిన టూట్లు ఇంకా ఎమీ లేవు. మీరు ఒకదానిని ఇష్టపడినప్పుడు, అది ఇక్కడ కనిపిస్తుంది.", "empty_column.favourites": "ఈ టూట్ను ఇంకా ఎవరూ ఇష్టపడలేదు. ఎవరైనా అలా చేసినప్పుడు, అవి ఇక్కడ కనబడతాయి.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "మీకు ఇంకా ఫాలో రిక్వెస్టులు ఏమీ రాలేదు. మీకు ఒకటి రాగానే, అది ఇక్కడ కనబడుతుంది.", "empty_column.hashtag": "ఇంకా హాష్ ట్యాగ్లో ఏమీ లేదు.", "empty_column.home": "మీ హోమ్ కాలక్రమం ఖాళీగా ఉంది! {Public} ను సందర్శించండి లేదా ఇతర వినియోగదారులను కలుసుకోవడానికి మరియు అన్వేషణ కోసం శోధనను ఉపయోగించండి.", - "empty_column.home.public_timeline": "ప్రజా కాలక్రమం", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "ఇంకా ఈ జాబితాలో ఏదీ లేదు. ఈ జాబితాలోని సభ్యులు కొత్త స్టేటస్ లను పోస్ట్ చేసినప్పుడు, అవి ఇక్కడ కనిపిస్తాయి.", "empty_column.lists": "మీకు ఇంకా జాబితాలు ఏమీ లేవు. మీరు ఒకటి సృష్టించగానే, అది ఇక్కడ కనబడుతుంది.", "empty_column.mutes": "మీరు ఇంకా ఏ వినియోగదారులనూ మ్యూట్ చేయలేదు.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "అనుమతించు", "follow_request.reject": "తిరస్కరించు", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "తరువాత", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "ఫెడివర్స్ లోని ఇతర సర్వర్లకు చెందిన పబ్లిక్ టూట్లు ఫెడరేటెడ్ టైంలైన్ లో కనిపిస్తాయి.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "మీరు అనుసరిస్తున్న ఖాతాల టూట్లు హోం ఫీడ్ లో కనిపిస్తాయి. ఏ సర్వర్లో ఎవరినైనా మీరు అనుసరించవచ్చు!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "ఈ సర్వరుకు చెందిన ఖాతాల పబ్లిక్ టూట్లు లోకల్ టైంలైన్ లో కనిపిస్తాయి.", - "introduction.interactions.action": "బోధనను ముగించు!", - "introduction.interactions.favourite.headline": "ఇష్టం", - "introduction.interactions.favourite.text": "మీరు ఏదైనా టూట్ను భవిష్యత్తు కోసం దాచుకోవచ్చు మరియు మీకు ఆ టూట్ నచ్చినందని తెలియజేయడం కోసం \"ఇష్టం\" ను నొక్కి రచయితకు తెలియజేయవచ్చు.", - "introduction.interactions.reblog.headline": "బూస్ట్", - "introduction.interactions.reblog.text": "వేరే వ్యక్తుల టూట్లను బూస్ట్ చేయడం ద్వారా ఆ టూట్ను మీ అనుచరులతో పంచుకోవచ్చు.", - "introduction.interactions.reply.headline": "ప్రత్యుత్తరం", - "introduction.interactions.reply.text": "మీరు ఇతర వ్యక్తుల టూట్లకు, మీ స్వంత టూత్లకు ప్రత్యుత్తరం ఇవ్వడం వల్ల గొలుసు చర్చ ప్రారంభమవుతుంది.", - "introduction.welcome.action": "ఇక ప్రారంభించు!", - "introduction.welcome.headline": "మొదటి మెట్లు", - "introduction.welcome.text": "ఫెడివర్స్ కు స్వాగతం! మరి కొంతసేపట్లో మీరు సందేశాలను ప్రసారం చేయవచ్చు మరియు వేర్వేరు సర్వర్లలో వున్న మీ స్నేహితులతో మాట్లాడవచ్చు. కానీ ఈ సర్వరు, {domain}, ప్రత్యేకమైనది - ఇది మీ ప్రొఫైలును హోస్టు చేస్తుంది, కాబట్టి ఈ సర్వరు పేరును గుర్తుంచుకోండి.", "keyboard_shortcuts.back": "వెనక్కి తిరిగి వెళ్ళడానికి", "keyboard_shortcuts.blocked": "బ్లాక్ చేయబడిన వినియోగదారుల జాబితాను తెరవడానికి", "keyboard_shortcuts.boost": "బూస్ట్ చేయడానికి", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "నిలువు వరుసలో చూపు", "notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "అన్నీ", "notifications.filter.boosts": "బూస్ట్లు", "notifications.filter.favourites": "ఇష్టాలు", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 30ec26809..fa2aef25a 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -22,6 +22,7 @@ "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร", "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", + "account.joined": "Joined {date}", "account.last_status": "ใช้งานล่าสุด", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", @@ -101,8 +102,8 @@ "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", "compose_form.sensitive.marked": "{count, plural, other {มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", "compose_form.sensitive.unmarked": "{count, plural, other {ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", - "compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน", - "compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ", + "compose_form.spoiler.marked": "เอาคำเตือนเนื้อหาออก", + "compose_form.spoiler.unmarked": "เพิ่มคำเตือนเนื้อหา", "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่", "confirmation_modal.cancel": "ยกเลิก", "confirmations.block.block_and_report": "ปิดกั้นแล้วรายงาน", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "ยังไม่มีโดเมนที่ปิดกั้นอยู่", "empty_column.favourited_statuses": "คุณยังไม่มีโพสต์ที่ชื่นชอบใด ๆ เมื่อคุณชื่นชอบโพสต์ โพสต์จะปรากฏที่นี่", "empty_column.favourites": "ยังไม่มีใครชื่นชอบโพสต์นี้ เมื่อใครสักคนชื่นชอบ เขาจะปรากฏที่นี่", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "คุณยังไม่มีคำขอติดตามใด ๆ เมื่อคุณได้รับคำขอ คำขอจะปรากฏที่นี่", "empty_column.hashtag": "ยังไม่มีสิ่งใดในแฮชแท็กนี้", "empty_column.home": "เส้นเวลาหน้าแรกของคุณว่างเปล่า! เยี่ยมชม {public} หรือใช้การค้นหาเพื่อเริ่มต้นใช้งานและพบปะผู้ใช้อื่น ๆ", - "empty_column.home.public_timeline": "เส้นเวลาสาธารณะ", + "empty_column.home.suggestions": "ดูข้อเสนอแนะบางอย่าง", "empty_column.list": "ยังไม่มีสิ่งใดในรายการนี้ เมื่อสมาชิกของรายการนี้โพสต์โพสต์ใหม่ โพสต์จะปรากฏที่นี่", "empty_column.lists": "คุณยังไม่มีรายการใด ๆ เมื่อคุณสร้างรายการ รายการจะปรากฏที่นี่", "empty_column.mutes": "คุณยังไม่ได้ซ่อนผู้ใช้ใด ๆ", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", + "follow_recommendations.done": "เสร็จสิ้น", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "อนุญาต", "follow_request.reject": "ปฏิเสธ", "follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, other {# วัน}}", "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", "intervals.full.minutes": "{number, plural, other {# นาที}}", - "introduction.federation.action": "ถัดไป", - "introduction.federation.federated.headline": "ที่ติดต่อกับภายนอก", - "introduction.federation.federated.text": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของเฟดิเวิร์สจะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก", - "introduction.federation.home.headline": "หน้าแรก", - "introduction.federation.home.text": "โพสต์จากผู้คนที่คุณติดตามจะปรากฏในฟีดหน้าแรกของคุณ คุณสามารถติดตามใครก็ตามในเซิร์ฟเวอร์ใดก็ตาม!", - "introduction.federation.local.headline": "ในเซิร์ฟเวอร์", - "introduction.federation.local.text": "โพสต์สาธารณะจากผู้คนในเซิร์ฟเวอร์เดียวกันกับคุณจะปรากฏในเส้นเวลาในเซิร์ฟเวอร์", - "introduction.interactions.action": "เสร็จสิ้นบทช่วยสอน!", - "introduction.interactions.favourite.headline": "ชื่นชอบ", - "introduction.interactions.favourite.text": "คุณสามารถบันทึกโพสต์ไว้ในภายหลังและแจ้งให้ผู้สร้างทราบว่าคุณชอบโพสต์โดยการชื่นชอบโพสต์", - "introduction.interactions.reblog.headline": "ดัน", - "introduction.interactions.reblog.text": "คุณสามารถแบ่งปันโพสต์ของผู้อื่นกับผู้ติดตามของคุณโดยการดันโพสต์", - "introduction.interactions.reply.headline": "ตอบกลับ", - "introduction.interactions.reply.text": "คุณสามารถตอบกลับโพสต์ของผู้อื่นและของคุณเอง ซึ่งจะเชื่อมโยงโพสต์เข้าด้วยกันในการสนทนา", - "introduction.welcome.action": "ไปกันเลย!", - "introduction.welcome.headline": "ขั้นตอนแรก", - "introduction.welcome.text": "ยินดีต้อนรับสู่เฟดิเวิร์ส! ในอีกสักครู่ คุณจะสามารถออกอากาศข้อความและพูดคุยกับเพื่อน ๆ ของคุณผ่านเซิร์ฟเวอร์ที่หลากหลาย แต่เซิร์ฟเวอร์นี้ {domain} มีความพิเศษคือเป็นเซิร์ฟเวอร์ที่โฮสต์โปรไฟล์ของคุณ ดังนั้นจดจำชื่อของเซิร์ฟเวอร์ไว้", "keyboard_shortcuts.back": "เพื่อนำทางย้อนกลับ", "keyboard_shortcuts.blocked": "เพื่อเปิดรายการผู้ใช้ที่ปิดกั้นอยู่", "keyboard_shortcuts.boost": "เพื่อดัน", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "แสดงในคอลัมน์", "notifications.column_settings.sound": "เล่นเสียง", "notifications.column_settings.status": "โพสต์ใหม่:", + "notifications.column_settings.unread_markers.category": "เครื่องหมายการแจ้งเตือนที่ยังไม่ได้อ่าน", "notifications.filter.all": "ทั้งหมด", "notifications.filter.boosts": "การดัน", "notifications.filter.favourites": "รายการโปรด", @@ -334,7 +323,7 @@ "notifications.filter.mentions": "การกล่าวถึง", "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น", "notifications.filter.statuses": "การอัปเดตจากผู้คนที่คุณติดตาม", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "ให้สิทธิอนุญาต", "notifications.group": "{count} การแจ้งเตือน", "notifications.mark_as_read": "ทำเครื่องหมายทุกการแจ้งเตือนว่าอ่านแล้ว", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", @@ -352,7 +341,7 @@ "poll.voted": "คุณได้ลงคะแนนให้กับคำตอบนี้", "poll_button.add_poll": "เพิ่มการสำรวจความคิดเห็น", "poll_button.remove_poll": "เอาการสำรวจความคิดเห็นออก", - "privacy.change": "ปรับเปลี่ยนความเป็นส่วนตัวของโพสต์", + "privacy.change": "เปลี่ยนความเป็นส่วนตัวของโพสต์", "privacy.direct.long": "ปรากฏแก่ผู้ใช้ที่กล่าวถึงเท่านั้น", "privacy.direct.short": "โดยตรง", "privacy.private.long": "ปรากฏแก่ผู้ติดตามเท่านั้น", @@ -431,7 +420,7 @@ "status.uncached_media_warning": "ไม่พร้อมใช้งาน", "status.unmute_conversation": "เลิกซ่อนการสนทนา", "status.unpin": "ถอนหมุดจากโปรไฟล์", - "suggestions.dismiss": "ยกเลิกข้อเสนอแนะ", + "suggestions.dismiss": "ปิดข้อเสนอแนะ", "suggestions.header": "คุณอาจสนใจ…", "tabs_bar.federated_timeline": "ที่ติดต่อกับภายนอก", "tabs_bar.home": "หน้าแรก", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 1d56d169c..ec97545e7 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -22,6 +22,7 @@ "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", + "account.joined": "{date} tarihinde katıldı", "account.last_status": "Son etkinlik", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceliyor.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.", "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.", + "empty_column.follow_recommendations": "Öyle görünüyor ki sizin için hiçbir öneri oluşturulamıyor. Tanıdığınız kişileri aramak için aramayı kullanabilir veya öne çıkanlara bakabilirsiniz.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", - "empty_column.home.public_timeline": "herkese açık zaman tüneli", + "empty_column.home.suggestions": "Bazı önerileri görün", "empty_column.list": "Bu listede henüz hiçbir şey yok.", "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.", "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.", "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", + "follow_recommendations.done": "Tamam", + "follow_recommendations.heading": "Gönderilerini görmek isteyeceğiniz kişileri takip edin! Burada bazı öneriler bulabilirsiniz.", + "follow_recommendations.lead": "Takip ettiğiniz kişilerin gönderileri anasayfa akışınızda kronolojik sırada görünmeye devam edecek. Hata yapmaktan çekinmeyin, kişileri istediğiniz anda kolayca takipten çıkabilirsiniz!", "follow_request.authorize": "İzin Ver", "follow_request.reject": "Reddet", "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa bile, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}", "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}", - "introduction.federation.action": "İleri", - "introduction.federation.federated.headline": "Birleşik", - "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.", - "introduction.federation.home.headline": "Ana Sayfa", - "introduction.federation.home.text": "Takip ettiğiniz kişilerin yayınları ana sayfada gösterilecek. Herhangi bir sunucudaki herkesi takip edebilirsiniz!", - "introduction.federation.local.headline": "Yerel", - "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", - "introduction.interactions.action": "Öğreticiyi bitir!", - "introduction.interactions.favourite.headline": "Beğeni", - "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.", - "introduction.interactions.reblog.headline": "Boostla", - "introduction.interactions.reblog.text": "Başkalarının tootlarını boostlayarak onları kendi takipçilerinizle paylaşabillirsiniz.", - "introduction.interactions.reply.headline": "Yanıt", - "introduction.interactions.reply.text": "Başkalarının ve kendinizin tootlarına cevap verebilirsiniz. Bu, onları bir konuşmada zincirli bir şekilde gösterecektir.", - "introduction.welcome.action": "Hadi başlayalım!", - "introduction.welcome.headline": "İlk adımlar", - "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", "keyboard_shortcuts.back": "geriye gitmek için", "keyboard_shortcuts.blocked": "engellenen kullanıcılar listesini açmak için", "keyboard_shortcuts.boost": "boostlamak için", @@ -266,9 +254,9 @@ "lists.edit.submit": "Başlığı değiştir", "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", - "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.followed": "Takip edilen herhangi bir kullanıcı", "lists.replies_policy.list": "Listenin üyeleri", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "Hiç kimse", "lists.replies_policy.title": "Yanıtları göster:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Sütunda göster", "notifications.column_settings.sound": "Ses çal", "notifications.column_settings.status": "Yeni tootlar:", + "notifications.column_settings.unread_markers.category": "Okunmamış bildirim işaretleri", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", "notifications.filter.favourites": "Beğeniler", @@ -334,12 +323,12 @@ "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", "notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "İzin ver.", "notifications.group": "{count} bildirim", "notifications.mark_as_read": "Her bildirimi okundu olarak işaretle", "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor", "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Masaüstü bildirimleri, gereksinim duyulan izin verilmediği için mevcut değil.", "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 224c51301..fe6ca5f3e 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -3,35 +3,36 @@ "account.add_or_remove_from_list": "Исемлеккә кертү я бетерү", "account.badges.bot": "Бот", "account.badges.group": "Төркем", - "account.block": "Block @{name}", + "account.block": "@{name} блоклау", "account.block_domain": "Block domain {domain}", - "account.blocked": "Blocked", + "account.blocked": "Блокланган", "account.browse_more_on_origin_server": "Тулырак оригинал профилендә карап була", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", - "account.edit_profile": "Edit profile", + "account.edit_profile": "Профильны үзгәртү", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", - "account.follow": "Follow", + "account.follow": "Языл", "account.followers": "Followers", "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", + "account.follows_you": "Сезгә язылган", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", + "account.media": "Медиа", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", - "account.never_active": "Never", + "account.never_active": "Беркайчан да", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", @@ -42,45 +43,45 @@ "account.unblock": "Unblock @{name}", "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", + "account.unfollow": "Язылынмау", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Ой!", "announcement.announcement": "Announcement", "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", "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", + "bundle_modal_error.close": "Ябу", "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "Кыстыргычлар", "column.community": "Local timeline", "column.direct": "Direct messages", "column.directory": "Browse profiles", "column.domain_blocks": "Blocked domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", - "column.home": "Home", + "column.home": "Баш бит", "column.lists": "Lists", "column.mutes": "Muted users", "column.notifications": "Notifications", "column.pins": "Pinned toot", "column.public": "Federated timeline", - "column_back_button.label": "Back", + "column_back_button.label": "Кире", "column_header.hide_settings": "Hide settings", "column_header.moveLeft_settings": "Move column to the left", "column_header.moveRight_settings": "Move column to the right", "column_header.pin": "Pin", "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", + "column_subheading.settings": "Көйләүләр", "community.column_settings.local_only": "Local only", "community.column_settings.media_only": "Media only", "community.column_settings.remote_only": "Remote only", @@ -104,26 +105,26 @@ "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", + "confirmation_modal.cancel": "Баш тарту", "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", + "confirmations.block.confirm": "Блоклау", "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", + "confirmations.delete.confirm": "Бетерү", "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Бетерү", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", + "confirmations.logout.confirm": "Чыгу", "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", + "confirmations.mute.confirm": "Тавышсыз", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.reply.confirm": "Reply", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.confirm": "Язылынмау", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "conversation.delete": "Delete conversation", "conversation.mark_as_read": "Mark as read", @@ -135,17 +136,17 @@ "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", + "emoji_button.activity": "Активлык", + "emoji_button.custom": "Куелган", + "emoji_button.flags": "Байраклар", "emoji_button.food": "Food & Drink", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Nature", "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objects", - "emoji_button.people": "People", + "emoji_button.people": "Кешеләр", "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", + "emoji_button.search": "Эзләү...", "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,10 +176,13 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "Сакланды", "getting_started.developers": "Developers", "getting_started.directory": "Profile directory", "getting_started.documentation": "Documentation", @@ -203,29 +208,12 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "Тасвирлама", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "to open status", @@ -254,13 +242,13 @@ "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", + "lightbox.close": "Ябу", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", + "lightbox.next": "Киләсе", + "lightbox.previous": "Алдагы", "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", + "lists.account.remove": "Исемлектән бетерергә", "lists.delete": "Delete list", "lists.edit": "Edit list", "lists.edit.submit": "Change title", @@ -274,21 +262,21 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Дәвамлык", "mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "Кыстыргычлар", "navigation_bar.community_timeline": "Local timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.edit_profile": "Профильны үзгәртү", "navigation_bar.favourites": "Favourites", "navigation_bar.filters": "Muted words", "navigation_bar.follow_requests": "Follow requests", @@ -300,9 +288,9 @@ "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", + "navigation_bar.preferences": "Caylaw", "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", + "navigation_bar.security": "Хәвефсезлек", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", "notification.follow_request": "{name} has requested to follow you", @@ -317,7 +305,7 @@ "notifications.column_settings.favourite": "Favourites:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.show": "Күрсәтү", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", @@ -327,7 +315,8 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", + "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.filter.all": "Бөтенесе", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", @@ -344,8 +333,8 @@ "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "poll.closed": "Ябык", + "poll.refresh": "Яңарту", "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", @@ -361,42 +350,42 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Visible for all, but not in public timelines", "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", + "refresh": "Яңарту", + "regeneration_indicator.label": "Йөкләү...", "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", + "relative_time.days": "{number}к", + "relative_time.hours": "{number}с", + "relative_time.just_now": "хәзер", + "relative_time.minutes": "{number}м", + "relative_time.seconds": "{number}сек", + "relative_time.today": "бүген", + "reply_indicator.cancel": "Баш тарту", "report.forward": "Forward to {target}", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.submit": "Җибәрү", "report.target": "Report {target}", - "search.placeholder": "Search", + "search.placeholder": "Эзләү", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "status", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", + "search_popout.tips.user": "кулланучы", + "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.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", + "status.block": "@{name} блоклау", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", "status.copy": "Copy link to status", - "status.delete": "Delete", + "status.delete": "Бетерү", "status.detailed_status": "Detailed conversation view", "status.direct": "Direct message @{name}", "status.embed": "Embed", @@ -405,7 +394,7 @@ "status.load_more": "Load more", "status.media_hidden": "Media hidden", "status.mention": "Mention @{name}", - "status.more": "More", + "status.more": "Күбрәк", "status.mute": "Mute @{name}", "status.mute_conversation": "Mute conversation", "status.open": "Expand this status", @@ -422,7 +411,7 @@ "status.replyAll": "Reply to thread", "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", - "status.share": "Share", + "status.share": "Уртаклашу", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", @@ -434,10 +423,10 @@ "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", + "tabs_bar.home": "Баш бит", + "tabs_bar.local_timeline": "Җирле", "tabs_bar.notifications": "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", @@ -459,12 +448,12 @@ "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", + "upload_form.edit": "Үзгәртү", "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", + "upload_form.undo": "Бетерү", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", + "upload_modal.apply": "Куллан", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", @@ -473,14 +462,14 @@ "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", - "video.close": "Close video", + "video.close": "Видеоны ябу", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", - "video.fullscreen": "Full screen", + "video.fullscreen": "Тулы экран", "video.hide": "Hide video", "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", + "video.pause": "Туктату", + "video.play": "Уйнату", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 70f6ab152..1b311b04d 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -22,6 +22,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 941e43c99..5e21d00fc 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -1,18 +1,18 @@ { - "account.account_note_header": "Ваша примітка для @{name}", + "account.account_note_header": "Примітка", "account.add_or_remove_from_list": "Додати або видалити зі списків", "account.badges.bot": "Бот", "account.badges.group": "Група", "account.block": "Заблокувати @{name}", - "account.block_domain": "Заглушити {domain}", + "account.block_domain": "Заблокувати домен {domain}", "account.blocked": "Заблоковані", "account.browse_more_on_origin_server": "Переглянути більше в оригіналі", "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Не повідомляти мене про дописи @{name}", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Повідомляти мене про дописи @{name}", "account.endorse": "Публікувати у профілі", "account.follow": "Підписатися", "account.followers": "Підписники", @@ -22,6 +22,7 @@ "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.follows_you": "Підписаний(-а) на вас", "account.hide_reblogs": "Сховати передмухи від @{name}", + "account.joined": "Долучення {date}", "account.last_status": "Крайня активність", "account.link_verified_on": "Права власності на це посилання були перевірені {date}", "account.locked_info": "Статус конфіденційності цього облікового запису встановлено у заблокований. Власник вручну переглядає, хто може за ним стежити.", @@ -149,7 +150,7 @@ "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Обліковий запис заблоковано", "empty_column.account_timeline": "Тут дмухалок немає!", "empty_column.account_unavailable": "Профіль недоступний", "empty_column.blocks": "Ви ще не заблокували жодного користувача.", @@ -159,21 +160,25 @@ "empty_column.domain_blocks": "Тут поки немає прихованих доменів.", "empty_column.favourited_statuses": "У вас ще немає вподобаних дмухів. Коли ви щось вподобаєте, воно з'явиться тут.", "empty_column.favourites": "Ніхто ще не вподобав цього дмуху. Коли хтось це зробить, вони з'являться тут.", + "empty_column.follow_recommendations": "Схоже, для вас не буде створено жодної пропозиції. Ви можете спробувати скористатися пошуком людей, яких ви можете знати або переглянути популярні хештеґи.", "empty_column.follow_requests": "У вас ще немає запитів на підписку. Коли ви їх отримаєте, вони з'являться тут.", "empty_column.hashtag": "Дописів з цим хештегом поки не існує.", "empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.", - "empty_column.home.public_timeline": "публічні стрічки", + "empty_column.home.suggestions": "Переглянути пропозиції", "empty_column.list": "Немає нічого в цьому списку. Коли його учасники дмухнуть нові статуси, вони з'являться тут.", "empty_column.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.", "empty_column.mutes": "Ви ще не заглушили жодного користувача.", "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку", "error.unexpected_crash.explanation": "Ця сторінка не може бути коректно відображена через баґ у нашому коді або через проблему сумісності браузера.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку викликано додатком браузера або автоматичним засобом перекладу.", "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний додаток.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.", "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", + "follow_recommendations.done": "Готово", + "follow_recommendations.heading": "Підпишіться на людей, чиї дописи ви хочете бачити! Ось деякі пропозиції.", + "follow_recommendations.lead": "Дописи від людей, за якими ви стежите, з'являться в хронологічному порядку у вашій домашній стрічці. Не бійся помилятися, ви можете відписатися від людей так само легко в будь-який час!", "follow_request.authorize": "Авторизувати", "follow_request.reject": "Відмовити", "follow_requests.unlocked_explanation": "Хоча ваш обліковий запис не заблоковано, працівники {domain} припускають, що, можливо, ви хотіли б переглянути ці запити на підписку.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", - "introduction.federation.action": "Далі", - "introduction.federation.federated.headline": "Глобальна", - "introduction.federation.federated.text": "Публічні пости з інших серверів федіверсу будуть з'являтися у глобальній стрічці.", - "introduction.federation.home.headline": "Головна", - "introduction.federation.home.text": "Пости від людей, за якими ви слідкуєте, з'являться у Вашій домашній стрічці. Ви можете слідкувати за кожним на будь-якому сервері!", - "introduction.federation.local.headline": "Локальна", - "introduction.federation.local.text": "Публічні пости від людей на сервері, на якому Ви знаходитесь, будуть з'являтися у локальній стрічці.", - "introduction.interactions.action": "Завершити вступ!", - "introduction.interactions.favourite.headline": "Улюблене", - "introduction.interactions.favourite.text": "Ви можете зберегти дмух на потім і повідомити автора, що він вам сподобався, додавши його в улюблене.", - "introduction.interactions.reblog.headline": "Передмухнути", - "introduction.interactions.reblog.text": "Ви можете ділитися дмухами інших людей зі своїми підписниками, передмухуючи їх.", - "introduction.interactions.reply.headline": "Відповісти", - "introduction.interactions.reply.text": "Ви можете відповідати на дмухи інших людей та власні, створюючи ланцюжки розмов.", - "introduction.welcome.action": "Поїхали!", - "introduction.welcome.headline": "Перші кроки", - "introduction.welcome.text": "Вітаємо у федіверсі! Невдовзі ви зможете поширювати повідомлення та спілкуватися зі своїми друзями на розмаїтті серверів. Але цей сервер, {domain}, є особливим — на ньому розміщений ваш профіль, тож запам'ятайте його назву.", "keyboard_shortcuts.back": "переходити назад", "keyboard_shortcuts.blocked": "відкрити список заблокованих користувачів", "keyboard_shortcuts.boost": "передмухувати", @@ -255,8 +243,8 @@ "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "рухатися вверх списком", "lightbox.close": "Закрити", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Стиснути поле перегляду зображень", + "lightbox.expand": "Розгорнути поле перегляду зображень", "lightbox.next": "Далі", "lightbox.previous": "Назад", "lists.account.add": "Додати до списку", @@ -266,10 +254,10 @@ "lists.edit.submit": "Змінити назву", "lists.new.create": "Додати список", "lists.new.title_placeholder": "Нова назва списку", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Будь-який відстежуваний користувач", + "lists.replies_policy.list": "Учасники списку", + "lists.replies_policy.none": "Ніхто", + "lists.replies_policy.title": "Показати відповіді для:", "lists.search": "Шукати серед людей, на яких ви підписані", "lists.subheading": "Ваші списки", "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}", @@ -277,9 +265,9 @@ "media_gallery.toggle_visible": "Показати/приховати", "missing_indicator.label": "Не знайдено", "missing_indicator.sublabel": "Ресурс не знайдений", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Тривалість", "mute_modal.hide_notifications": "Приховати сповіщення від користувача?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Не визначено", "navigation_bar.apps": "Мобільні додатки", "navigation_bar.blocks": "Заблоковані користувачі", "navigation_bar.bookmarks": "Закладки", @@ -310,7 +298,7 @@ "notification.own_poll": "Ваше опитування завершено", "notification.poll": "Опитування, у якому ви голосували, закінчилося", "notification.reblog": "{name} передмухнув(-ла) Ваш допис", - "notification.status": "{name} just posted", + "notification.status": "{name} щойно дописує", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?", "notifications.column_settings.alert": "Сповіщення на комп'ютері", @@ -326,24 +314,25 @@ "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звуки", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Нові дмухи:", + "notifications.column_settings.unread_markers.category": "Мітки непрочитаних сповіщень", "notifications.filter.all": "Усі", "notifications.filter.boosts": "Передмухи", "notifications.filter.favourites": "Улюблені", "notifications.filter.follows": "Підписки", "notifications.filter.mentions": "Згадки", "notifications.filter.polls": "Результати опитування", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Оновлення від людей, на яких ви підписані", + "notifications.grant_permission": "Надати дозвіл.", "notifications.group": "{count} сповіщень", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Позначити всі сповіщення прочитаними", + "notifications.permission_denied": "Сповіщення стільниці недоступні через раніше відхилений запит дозволів для браузера", + "notifications.permission_denied_alert": "Сповіщення не можна ввімкнути оскільки у дозволі вже було відмовлено раніше", + "notifications.permission_required": "Сповіщення на стільниці не доступні, оскільки необхідний дозвіл не надано.", + "notifications_permission_banner.enable": "Увімкнути сповіщення стільниці", + "notifications_permission_banner.how_to_control": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.", + "notifications_permission_banner.title": "Не проґавте нічого", + "picture_in_picture.restore": "Повернути назад", "poll.closed": "Закрито", "poll.refresh": "Оновити", "poll.total_people": "{count, plural, one {# особа} other {# осіб}}", @@ -470,7 +459,7 @@ "upload_modal.detect_text": "Виявити текст на малюнку", "upload_modal.edit_media": "Редагувати медіа", "upload_modal.hint": "Клацніть або перетягніть коло на превью, щоб обрати точку, яку буде завжди видно на мініатюрах.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Підготовка OCR…", "upload_modal.preview_label": "Переглянути ({ratio})", "upload_progress.label": "Завантаження...", "video.close": "Закрити відео", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index aaccf1d83..4c5132149 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -22,6 +22,7 @@ "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".", "account.follows_you": "آپ کا پیروکار ہے", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", + "account.joined": "Joined {date}", "account.last_status": "آخری فعال", "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی", "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "ابھی تک کوئی چھپا ہوا ڈومین نہیں ہے.", "empty_column.favourited_statuses": "آپ کا کوئی پسندیدہ ٹوٹ نہیں ہے. جب آپ پسند کریں گے، یہاں نظر آئےگا.", "empty_column.favourites": "ابھی تک کسی نے بھی اس ٹوٹ کو پسند نہیں کیا ہے. جب بھی کوئی اسے پسند کرے گا، ان کا نام یہاں نظر آئے گا.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "ابھی تک آپ کی پیری کرنے کی درخواست نہیں کی ہے. جب کوئی درخواست کرے گا، ان کا نام یہاں نظر آئے گا.", "empty_column.hashtag": "ابھی یہ ہیش ٹیگ خالی ہے.", "empty_column.home": "آپ کا خانگی جدول خالی ہے! {public} دیکھیں یا شروعات کیلئے تلاش کریں اور دیگر صارفین سے ملیں.", - "empty_column.home.public_timeline": "جدولِ عام", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "یہ فہرست ابھی خالی ہے. جب اس فہرست کے ارکان کچھ تحریر کریں گے، یہاں نظر آئے گا.", "empty_column.lists": "ابھی آپ کی کوئی فہرست نہیں ہے. جب آپ بنائیں گے، وہ یہاں نظر آئے گی.", "empty_column.mutes": "آپ نے ابھی کسی صارف کو خاموش نہیں کیا ہے.", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "اجازت دیں", "follow_request.reject": "انکار کریں", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "اگلا", - "introduction.federation.federated.headline": "مجموعی", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -274,7 +262,7 @@ "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index d22b8d704..595c6997e 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -13,7 +13,7 @@ "account.domain_blocked": "Người đã chặn", "account.edit_profile": "Chỉnh sửa trang cá nhân", "account.enable_notifications": "Thông báo khi @{name} đăng tút", - "account.endorse": "Vinh danh người này", + "account.endorse": "Tôn vinh người này", "account.follow": "Theo dõi", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", @@ -22,10 +22,11 @@ "account.follows.empty": "Người này chưa theo dõi ai.", "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn chia sẻ từ @{name}", + "account.joined": "Đã tham gia {date}", "account.last_status": "Online", "account.link_verified_on": "Liên kết này đã được xác thực vào {date}", "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", - "account.media": "Bộ sưu tập", + "account.media": "Media", "account.mention": "Nhắc đến @{name}", "account.moved_to": "{name} đã dời sang:", "account.mute": "Ẩn @{name}", @@ -33,19 +34,19 @@ "account.muted": "Đã ẩn", "account.never_active": "Chưa có bất cứ hoạt động nào", "account.posts": "Tút", - "account.posts_with_replies": "Tương tác", + "account.posts_with_replies": "Trả lời", "account.report": "Báo cáo @{name}", "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi", - "account.share": "Chia sẻ hồ sơ @{name}", + "account.share": "Chia sẻ trang @{name}", "account.show_reblogs": "Hiện chia sẻ từ @{name}", "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", - "account.unendorse": "Ngưng vinh danh người này", + "account.unendorse": "Ngưng tôn vinh người này", "account.unfollow": "Ngưng theo dõi", "account.unmute": "Bỏ ẩn @{name}", "account.unmute_notifications": "Hiển lại thông báo từ @{name}", - "account_note.placeholder": "Bạn có điều gì thú vị muốn nói về người này?", + "account_note.placeholder": "Nhấn để thêm", "alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.", "alert.rate_limited.title": "Vượt giới hạn", "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.", @@ -65,7 +66,7 @@ "column.direct": "Tin nhắn", "column.directory": "Tìm người cùng sở thích", "column.domain_blocks": "Máy chủ đã chặn", - "column.favourites": "Lượt thích", + "column.favourites": "Thích", "column.follow_requests": "Yêu cầu theo dõi", "column.home": "Bảng tin", "column.lists": "Danh sách", @@ -82,7 +83,7 @@ "column_header.unpin": "Không ghim", "column_subheading.settings": "Cài đặt", "community.column_settings.local_only": "Chỉ máy chủ của bạn", - "community.column_settings.media_only": "Chỉ ảnh/video", + "community.column_settings.media_only": "Chỉ Media", "community.column_settings.remote_only": "Chỉ người dùng ở máy chủ khác", "compose_form.direct_message_warning": "Tút này sẽ chỉ gửi cho người được nhắc đến.", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", @@ -98,9 +99,9 @@ "compose_form.poll.switch_to_single": "Chỉ cho phép chọn duy nhất một lựa chọn", "compose_form.publish": "Tút", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Nội dung là nhạy cảm} other {Nội dung là nhạy cảm}}", - "compose_form.sensitive.marked": "{count, plural, one {Nội dung đã đánh dấu là nhạy cảm} other {Nội dung đã đánh dấu là nhạy cảm}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Nội dung này bình thường} other {Nội dung này bình thường}}", + "compose_form.sensitive.hide": "{count, plural, other {Đánh dấu nội dung nhạy cảm}}", + "compose_form.sensitive.marked": "{count, plural, other {Nội dung này nhạy cảm}}", + "compose_form.sensitive.unmarked": "{count, plural, other {Nội dung này bình thường}}", "compose_form.spoiler.marked": "Hủy nội dung ẩn", "compose_form.spoiler.unmarked": "Tạo nội dung ẩn", "compose_form.spoiler_placeholder": "Viết nội dung ẩn của bạn ở đây", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "Chưa ẩn bất kỳ máy chủ nào.", "empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.", "empty_column.favourites": "Chưa có ai thích tút này.", + "empty_column.follow_recommendations": "Bạn chưa có gợi ý theo dõi nào. Hãy thử tìm kiếm những người thú vị hoặc khám phá những hashtag xu hướng.", "empty_column.follow_requests": "Bạn chưa có yêu cầu theo dõi nào.", "empty_column.hashtag": "Chưa có bài đăng nào dùng hashtag này.", - "empty_column.home": "Chưa có bất cứ gì! Hãy bắt đầu bằng cách tìm kiếm hoặc truy cập {public} để theo dõi những người bạn quan tâm.", - "empty_column.home.public_timeline": "tút công khai", + "empty_column.home": "Bảng tin của bạn đang trống! Hãy theo dõi nhiều người hơn. {suggestions}", + "empty_column.home.suggestions": "Gợi ý dành cho bạn", "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", "empty_column.lists": "Bạn chưa tạo danh sách nào.", "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.", @@ -174,12 +176,15 @@ "error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.", "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", + "follow_recommendations.done": "Xong", + "follow_recommendations.heading": "Theo dõi những người bạn muốn đọc tút của họ! Dưới đây là vài gợi ý.", + "follow_recommendations.lead": "Tút từ những người bạn theo dõi sẽ hiện theo thứ tự thời gian trên bảng tin. Đừng ngại, bạn có thể dễ dàng ngưng theo dõi họ bất cứ lúc nào!", "follow_request.authorize": "Cho phép", "follow_request.reject": "Từ chối", "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "generic.saved": "Đã lưu", "getting_started.developers": "Nhà phát triển", - "getting_started.directory": "Mạng lưới", + "getting_started.directory": "Cộng đồng", "getting_started.documentation": "Tài liệu", "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, other {# ngày}}", "intervals.full.hours": "{number, plural, other {# giờ}}", "intervals.full.minutes": "{number, plural, other {# phút}}", - "introduction.federation.action": "Tiếp theo", - "introduction.federation.federated.headline": "Mạng liên hợp", - "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Thế giới.", - "introduction.federation.home.headline": "Bảng tin", - "introduction.federation.home.text": "Bảng tin là nơi hiển thị bài đăng từ những người bạn theo dõi. Bạn có thể theo dõi bất cứ ai trên bất cứ máy chủ nào!", - "introduction.federation.local.headline": "Cộng đồng", - "introduction.federation.local.text": "Cộng đồng là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.", - "introduction.interactions.action": "Tôi đã hiểu rồi!", - "introduction.interactions.favourite.headline": "Thích", - "introduction.interactions.favourite.text": "Thích một tút có nghĩa là bạn tâm đắc nội dung của tút và muốn lưu giữ để sau này xem lại.", - "introduction.interactions.reblog.headline": "Chia sẻ", - "introduction.interactions.reblog.text": "Với tính năng chia sẻ, bạn có thể chia sẻ tút của người khác cho những người theo dõi bạn.", - "introduction.interactions.reply.headline": "Trả lời", - "introduction.interactions.reply.text": "Bạn có thể trả lời tút của những người khác và tút của bạn, từ đó tạo nên những cuộc hội thoại.", - "introduction.welcome.action": "Bắt đầu nào!", - "introduction.welcome.headline": "Hướng dẫn người mới", - "introduction.welcome.text": "Chào mừng bạn đến mạng xã hội liên hợp! Tại đây bạn có thể đăng tải nội dung và trao đổi với bạn bè của mình trên các máy chủ khác nhau. Máy chủ {domain} là nơi lưu trữ trang cá nhân của bạn.", "keyboard_shortcuts.back": "trở lại", "keyboard_shortcuts.blocked": "mở danh sách người đã chặn", "keyboard_shortcuts.boost": "chia sẻ", @@ -269,12 +257,12 @@ "lists.replies_policy.followed": "Người theo dõi", "lists.replies_policy.list": "Người trong danh sách", "lists.replies_policy.none": "Không ai", - "lists.replies_policy.title": "Cho phép bình luận với:", + "lists.replies_policy.title": "Cho phép trả lời với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}", "loading_indicator.label": "Đang tải...", - "media_gallery.toggle_visible": "Ẩn {number, plural, one {hình ảnh} other {hình ảnh}}", + "media_gallery.toggle_visible": "{number, plural, other {Ẩn hình ảnh}}", "missing_indicator.label": "Không tìm thấy", "missing_indicator.sublabel": "Nội dung này không còn tồn tại", "mute_modal.duration": "Thời hạn", @@ -289,10 +277,10 @@ "navigation_bar.discover": "Khám phá", "navigation_bar.domain_blocks": "Máy chủ đã ẩn", "navigation_bar.edit_profile": "Trang cá nhân", - "navigation_bar.favourites": "Lượt thích", + "navigation_bar.favourites": "Thích", "navigation_bar.filters": "Bộ lọc từ ngữ", "navigation_bar.follow_requests": "Yêu cầu theo dõi", - "navigation_bar.follows_and_followers": "Lượt theo dõi", + "navigation_bar.follows_and_followers": "Quan hệ", "navigation_bar.info": "Về máy chủ này", "navigation_bar.keyboard_shortcuts": "Phím tắt", "navigation_bar.lists": "Danh sách", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Thông báo trên thanh menu", "notifications.column_settings.sound": "Kèm theo tiếng \"bíp\"", "notifications.column_settings.status": "Tút mới:", + "notifications.column_settings.unread_markers.category": "Đánh dấu những thông báo chưa đọc", "notifications.filter.all": "Toàn bộ", "notifications.filter.boosts": "Chia sẻ", "notifications.filter.favourites": "Thích", @@ -346,8 +335,8 @@ "picture_in_picture.restore": "Hiển thị bình thường", "poll.closed": "Kết thúc", "poll.refresh": "Làm mới", - "poll.total_people": "{count, plural, one {# người} other {# người}}", - "poll.total_votes": "{count, plural, one {# người} other {# người}}", + "poll.total_people": "{count, plural, other {# người bình chọn}}", + "poll.total_votes": "{count, plural, other {# người bình chọn}}", "poll.vote": "Bình chọn", "poll.voted": "Bạn đã bình chọn rồi", "poll_button.add_poll": "Tạo bình chọn", @@ -364,9 +353,9 @@ "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", - "relative_time.days": "{number} ngày", + "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "mới", + "relative_time.just_now": "vừa xong", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hôm nay", @@ -403,7 +392,7 @@ "status.favourite": "Thích", "status.filtered": "Bộ lọc", "status.load_more": "Xem thêm", - "status.media_hidden": "Ảnh/video đã ẩn", + "status.media_hidden": "Đã ẩn", "status.mention": "Nhắc đến @{name}", "status.more": "Thêm", "status.mute": "Ẩn @{name}", @@ -419,7 +408,7 @@ "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Hủy lưu", "status.reply": "Trả lời", - "status.replyAll": "Trả lời tất cả", + "status.replyAll": "Trả lời người đăng tút", "status.report": "Báo cáo @{name}", "status.sensitive_warning": "Nhạy cảm", "status.share": "Chia sẻ", @@ -427,7 +416,7 @@ "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Xem thêm", "status.show_more_all": "Hiển thị tất cả", - "status.show_thread": "Toàn bộ chủ đề", + "status.show_thread": "Toàn chủ đề", "status.uncached_media_warning": "Uncached", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên trang cá nhân", @@ -435,12 +424,12 @@ "suggestions.header": "Có thể bạn quan tâm…", "tabs_bar.federated_timeline": "Thế giới", "tabs_bar.home": "Bảng tin", - "tabs_bar.local_timeline": "Cộng đồng", + "tabs_bar.local_timeline": "Máy chủ", "tabs_bar.notifications": "Thông báo", "tabs_bar.search": "Tìm kiếm", - "time_remaining.days": "Kết thúc sau {number, plural, other {# ngày}}", - "time_remaining.hours": "Kết thúc sau {number, plural, other {# giờ}}", - "time_remaining.minutes": "Kết thúc sau {number, plural, other {# phút}}", + "time_remaining.days": "Còn {number, plural, other {# ngày}}", + "time_remaining.hours": "Còn {number, plural, other {# giờ}}", + "time_remaining.minutes": "Còn {number, plural, other {# phút}}", "time_remaining.moments": "Còn lại", "time_remaining.seconds": "Chỉ còn {number, plural, other {# giây}}", "timeline_hint.remote_resource_not_displayed": "{resource} từ máy chủ khác sẽ không hiển thị.", diff --git a/app/javascript/mastodon/locales/whitelist_af.json b/app/javascript/mastodon/locales/whitelist_af.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_af.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_es-MX.json b/app/javascript/mastodon/locales/whitelist_es-MX.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_es-MX.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_gd.json b/app/javascript/mastodon/locales/whitelist_gd.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_gd.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_kw.json b/app/javascript/mastodon/locales/whitelist_kw.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_kw.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_pa.json b/app/javascript/mastodon/locales/whitelist_pa.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_pa.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_si.json b/app/javascript/mastodon/locales/whitelist_si.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_si.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index e2c69c116..fdbc1c210 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -22,15 +22,16 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "ⴹⴼⵕⵏ ⴽⵯⵏ", "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Joined {date}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "ⴰⵙⵏⵖⵎⵉⵙ", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", + "account.mute": "ⵥⵥⵉⵥⵏ @{name}", + "account.mute_notifications": "ⵥⵥⵉⵥⵏ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵙⴳ @{name}", + "account.muted": "ⵉⵜⵜⵓⵥⵉⵥⵏ", "account.never_active": "ⵓⵙⴰⵔ", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", @@ -88,7 +89,7 @@ "compose_form.direct_message_warning_learn_more": "ⵙⵙⵏ ⵓⴳⴳⴰⵔ", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", + "compose_form.lock_disclaimer.lock": "ⵉⵜⵜⵓⵔⴳⵍ", "compose_form.placeholder": "ⵎⴰⵢⴷ ⵉⵍⵍⴰⵏ ⴳ ⵉⵅⴼ ⵏⵏⴽ?", "compose_form.poll.add_option": "Add a choice", "compose_form.poll.duration": "Poll duration", @@ -138,7 +139,7 @@ "emoji_button.activity": "Activity", "emoji_button.custom": "Custom", "emoji_button.flags": "ⵉⵛⵏⵢⴰⵍⵏ", - "emoji_button.food": "Food & Drink", + "emoji_button.food": "ⵓⵜⵛⵉ & ⵜⵉⵙⵙⵉ", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Nature", "emoji_button.not_found": "ⵓⵍⴰ ⵉⵎⵓⵊⵉ!! (╯°□°)╯︵ ┻━┻", @@ -159,14 +160,15 @@ "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", @@ -174,8 +176,11 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", + "follow_request.reject": "ⴰⴳⵢ", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", "generic.saved": "Saved", "getting_started.developers": "Developers", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# ⵜⵓⵙⴷⵉⴷⵜ} other {# ⵜⵓⵙⴷⵉⴷⵉⵏ}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "ⴰⵙⵏⵓⴱⴳ", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "ⴰⴷⵖⴰⵔⴰⵏ", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "ⵔⴰⵔ", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", @@ -244,7 +232,7 @@ "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.reply": "ⵉ ⵓⵔⴰⵔⵉ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", @@ -268,8 +256,8 @@ "lists.new.title_placeholder": "ⴰⵣⵡⵍ ⵏ ⵜⵍⴳⴰⵎⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.none": "ⴰⵡⴷ ⵢⴰⵏ", + "lists.replies_policy.title": "ⵙⴽⵏ ⵜⵉⵔⴰⵔⵉⵏ ⵉ:", "lists.search": "Search among people you follow", "lists.subheading": "ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ", "load_pending": "{count, plural, one {# ⵓⴼⵔⴷⵉⵙ ⴰⵎⴰⵢⵏⵓ} other {# ⵉⴼⵔⴷⴰⵙ ⵉⵎⴰⵢⵏⵓⵜⵏ}}", @@ -285,17 +273,17 @@ "navigation_bar.bookmarks": "Bookmarks", "navigation_bar.community_timeline": "Local timeline", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "ⵜⵓⵣⵉⵏⵉⵏ ⵜⵓⵙⵔⵉⴷⵉⵏ", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.edit_profile": "ⵙⵏⴼⵍ ⵉⴼⵔⵙ", "navigation_bar.favourites": "Favourites", "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follow_requests": "ⵜⵓⵜⵔⴰⵡⵉⵏ ⵏ ⵓⴹⴼⴰⵕ", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", + "navigation_bar.info": "ⵅⴼ ⵓⵎⴰⴽⴽⴰⵢ ⴰ", "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", + "navigation_bar.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ", "navigation_bar.logout": "ⴼⴼⵖ", "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", @@ -304,7 +292,7 @@ "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", + "notification.follow": "ⵉⴹⴼⴼⴰⵔ ⴽ {name}", "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", "notification.own_poll": "Your poll has ended", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "ⵖⵔ ⵉⵎⵙⵍⵉ", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "ⴰⴽⴽⵯ", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", @@ -347,11 +336,11 @@ "poll.closed": "ⵉⵜⵜⵓⵔⴳⵍ", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# ⵓⴼⴳⴰⵏ} other {# ⵉⴼⴳⴰⵏⵏ}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.total_votes": "{count, plural, one {# ⵓⵙⵜⵜⴰⵢ} other {# ⵉⵙⵜⵜⴰⵢⵏ}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", "poll_button.add_poll": "ⵔⵏⵓ ⵢⴰⵏ ⵢⵉⴷⵣ", - "poll_button.remove_poll": "Remove poll", + "poll_button.remove_poll": "ⵙⵙⵉⵜⵢ ⵉⴷⵣ", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Visible for mentioned users only", "privacy.direct.short": "ⵜⵓⵔⴷⵉⵜ", @@ -447,14 +436,14 @@ "timeline_hint.resources.followers": "ⵉⵎⴹⴼⴰⵕⵏ", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} ⵓⴼⴳⴰⵏ} other {{counter} ⵉⴼⴳⴰⵏⵏ}} ⴰⴳ ⵙⵙⴰⵡⴰⵍⵏ", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", + "upload_button.label": "ⵔⵏⵓ ⵜⴰⵡⵍⴰⴼⵜ, ⴰⴼⵉⴷⵢⵓ ⵏⵖ ⴰⴼⴰⵢⵍⵓ ⵙ ⵉⵎⵙⵍⵉ", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", @@ -465,7 +454,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "ⴷⵖⵔ ⵜⴰⵡⵍⴰⴼⵜ", "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", @@ -478,9 +467,9 @@ "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", "video.fullscreen": "Full screen", - "video.hide": "Hide video", + "video.hide": "ⴼⴼⵔ ⴰⴼⵉⴷⵢⵓ", "video.mute": "Mute sound", - "video.pause": "Pause", + "video.pause": "ⵙⴱⴷⴷ", "video.play": "ⵖⵔ", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 6c746bf96..9849134a6 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -22,6 +22,7 @@ "account.follows.empty": "此用户目前尚未关注任何人。", "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", + "account.joined": "加入于 {date}", "account.last_status": "最近活动", "account.link_verified_on": "此链接的所有权已在 {date} 检查", "account.locked_info": "此账户已锁嘟。账户的主人会手动审核关注者。", @@ -34,7 +35,7 @@ "account.never_active": "从未活跃", "account.posts": "嘟文", "account.posts_with_replies": "嘟文和回复", - "account.report": "举报 @{name}", + "account.report": "报告 @{name}", "account.requested": "正在等待对方同意。点击以取消发送关注请求", "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", @@ -105,7 +106,7 @@ "compose_form.spoiler.unmarked": "正文未被折叠", "compose_form.spoiler_placeholder": "折叠部分的警告消息", "confirmation_modal.cancel": "取消", - "confirmations.block.block_and_report": "屏蔽与举报", + "confirmations.block.block_and_report": "屏蔽与报告", "confirmations.block.confirm": "屏蔽", "confirmations.block.message": "你确定要屏蔽 {name} 吗?", "confirmations.delete.confirm": "删除", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "目前没有被隐藏的站点。", "empty_column.favourited_statuses": "你还没有喜欢过任何嘟文。喜欢过的嘟文会显示在这里。", "empty_column.favourites": "没有人喜欢过这条嘟文。如果有人喜欢了,就会显示在这里。", + "empty_column.follow_recommendations": "似乎无法为您生成任何建议。您可以尝试使用搜索寻找您可能知道的人或探索热门标签。", "empty_column.follow_requests": "你没有收到新的关注请求。收到了之后就会显示在这里。", "empty_column.hashtag": "这个话题标签下暂时没有内容。", "empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。", - "empty_column.home.public_timeline": "公共时间轴", + "empty_column.home.suggestions": "查看一些建议", "empty_column.list": "此列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", + "follow_recommendations.done": "完成", + "follow_recommendations.heading": "关注你感兴趣的用户!这里有一些推荐。", + "follow_recommendations.lead": "你关注的人发布的消息,会在你的主页动态里按时间顺序呈现。别担心,你也可以随时取消关注!", "follow_request.authorize": "同意", "follow_request.reject": "拒绝", "follow_requests.unlocked_explanation": "虽说你没有锁嘟,但是 {domain} 的工作人员觉得你可能想手工审核关注请求。", @@ -203,23 +208,6 @@ "intervals.full.days": "{number} 天", "intervals.full.hours": "{number} 小时", "intervals.full.minutes": "{number} 分钟", - "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "跨站", - "introduction.federation.federated.text": "联邦宇宙中其他服务器的公开嘟文会显示在跨站时间轴中。", - "introduction.federation.home.headline": "主页", - "introduction.federation.home.text": "你所关注的用户的动态会显示在主页里。你可以关注任何服务器上的任何人!", - "introduction.federation.local.headline": "本站", - "introduction.federation.local.text": "你所关注的用户的动态会显示在主页里,你可以关注任何服务器上的任何人。", - "introduction.interactions.action": "教程结束!", - "introduction.interactions.favourite.headline": "喜欢", - "introduction.interactions.favourite.text": "通过喜欢一条嘟文,你可以保存它以便以后阅读,并且告诉作者你喜欢它。", - "introduction.interactions.reblog.headline": "转嘟", - "introduction.interactions.reblog.text": "通过转嘟,你可以向你的关注者分享其他人的嘟文。", - "introduction.interactions.reply.headline": "回复", - "introduction.interactions.reply.text": "你可以回复其他嘟文,这些回复会像对话一样关联在一起。", - "introduction.welcome.action": "让我们开始吧!", - "introduction.welcome.headline": "首先", - "introduction.welcome.text": "欢迎来到联邦宇宙!很快,您就可以发布信息并和您的朋友交流,这些消息将发送到联邦中的各个服务器中。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。", "keyboard_shortcuts.back": "返回上一页", "keyboard_shortcuts.blocked": "打开被屏蔽用户列表", "keyboard_shortcuts.boost": "转嘟", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.sound": "播放音效", "notifications.column_settings.status": "新嘟文:", + "notifications.column_settings.unread_markers.category": "未读通知标记", "notifications.filter.all": "全部", "notifications.filter.boosts": "转嘟", "notifications.filter.favourites": "喜欢", @@ -371,12 +360,12 @@ "relative_time.seconds": "{number}秒", "relative_time.today": "今天", "reply_indicator.cancel": "取消", - "report.forward": "转发举报至 {target}", - "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的举报?", - "report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报该用户的理由:", + "report.forward": "转发报告至 {target}", + "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的报告?", + "report.hint": "报告将会发送给你所在服务器的监察员。你可以在下面填写报告该用户的理由:", "report.placeholder": "备注", "report.submit": "提交", - "report.target": "举报 {target}", + "report.target": "报告 {target}", "search.placeholder": "搜索", "search_popout.search_format": "高级搜索格式", "search_popout.tips.full_text": "输入关键词检索所有你发送、喜欢、转嘟过或提及到你的嘟文,以及其他用户公开的用户名、昵称和话题标签。", @@ -420,7 +409,7 @@ "status.remove_bookmark": "移除书签", "status.reply": "回复", "status.replyAll": "回复所有人", - "status.report": "举报 @{name}", + "status.report": "报告 @{name}", "status.sensitive_warning": "敏感内容", "status.share": "分享", "status.show_less": "隐藏内容", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 1a62ccbb3..68e99886f 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -22,6 +22,7 @@ "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", + "account.joined": "Joined {date}", "account.last_status": "上次活躍時間", "account.link_verified_on": "此連結的所有權已在 {date} 檢查過", "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "尚未隱藏任何網域。", "empty_column.favourited_statuses": "你還沒收藏任何文章。這裡將會顯示你收藏的嘟文。", "empty_column.favourites": "還沒有人收藏這則文章。這裡將會顯示被收藏的嘟文。", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個標籤暫時未有內容。", "empty_column.home": "你還沒有關注任何使用者。快看看{public},向其他使用者搭訕吧。", - "empty_column.home.public_timeline": "公共時間軸", + "empty_column.home.suggestions": "See some suggestions", "empty_column.list": "這個列表暫時未有內容。", "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", "empty_column.mutes": "你尚未靜音任何使用者。", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", + "follow_recommendations.done": "Done", + "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", "follow_requests.unlocked_explanation": "即使您的帳戶未上鎖,{domain} 的工作人員認為您可能想手動審核來自這些帳戶的關注請求。", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", - "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "已知服務站", - "introduction.federation.federated.text": "來自社交聯盟其他網站的公開文章,將會顯示在站點跨站時間軸上。", - "introduction.federation.home.headline": "首頁", - "introduction.federation.home.text": "你所關注使用者的文章,將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", - "introduction.federation.local.headline": "本站", - "introduction.federation.local.text": "與你共用一個服務站使用者的公開文章,將會顯示在本站時間軸中。", - "introduction.interactions.action": "完成使用教學", - "introduction.interactions.favourite.headline": "最愛", - "introduction.interactions.favourite.text": "你能用將文章加入「最愛的文章」,一方便把儲存文章稍候觀看,也同時對作者表示支持。", - "introduction.interactions.reblog.headline": "轉推", - "introduction.interactions.reblog.text": "你可以透過「轉推文章」把文章分享給你的關注者。", - "introduction.interactions.reply.headline": "回覆", - "introduction.interactions.reply.text": "你可以回覆其他人或自己的文章,這麼做會把這些回覆串成一串對話。", - "introduction.welcome.action": "開始旅程吧!", - "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟社交網絡 (fediverse)!稍後你就可以廣播訊息,同時與多個服務站的不同朋友聊天。但留意 {domain} 這個服務站非常特別——它託管了你的個人資料啊!所以請記住它。", "keyboard_shortcuts.back": "返回", "keyboard_shortcuts.blocked": "開啟封鎖名單", "keyboard_shortcuts.boost": "轉推", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "播放音效", "notifications.column_settings.status": "新的文章", + "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉推", "notifications.filter.favourites": "最愛", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index cc996e91b..9b98451ad 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -22,6 +22,7 @@ "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注了您", "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", + "account.joined": "加入於 {date}", "account.last_status": "上次活躍時間", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", "account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。", @@ -159,10 +160,11 @@ "empty_column.domain_blocks": "尚未封鎖任何網域。", "empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。", "empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。", + "empty_column.follow_recommendations": "似乎未能為您生成任何建議。您可以嘗試使用搜尋來尋找您可能認識的人,或是探索熱門主題標籤。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", - "empty_column.home.public_timeline": "公開時間軸", + "empty_column.home.suggestions": "檢視部份建議", "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。", "empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。", "empty_column.mutes": "您尚未靜音任何使用者。", @@ -174,6 +176,9 @@ "error.unexpected_crash.next_steps_addons": "請嘗試關閉他們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "回報問題", + "follow_recommendations.done": "完成", + "follow_recommendations.heading": "追蹤您想檢視其貼文的人!這裡有一些建議。", + "follow_recommendations.lead": "來自您追蹤的人的貼文將會按時間順序顯示在您的家 feed 上。不要害怕犯錯,您隨時都可以取消追蹤其他人!", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳號的追蹤請求。", @@ -203,23 +208,6 @@ "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", - "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "聯邦", - "introduction.federation.federated.text": "來自聯盟宇宙中其他伺服器的公開嘟文將會在聯邦時間軸中顯示。", - "introduction.federation.home.headline": "首頁", - "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", - "introduction.federation.local.headline": "本機", - "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", - "introduction.interactions.action": "完成教學!", - "introduction.interactions.favourite.headline": "收藏", - "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", - "introduction.interactions.reblog.headline": "轉嘟", - "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", - "introduction.interactions.reply.headline": "回覆", - "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", - "introduction.welcome.action": "開始旅程吧!", - "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟宇宙!稍候您就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它承載了您的個人資料,所以請記住它的名字。", "keyboard_shortcuts.back": "返回上一頁", "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", "keyboard_shortcuts.boost": "轉嘟", @@ -327,6 +315,7 @@ "notifications.column_settings.show": "在欄位中顯示", "notifications.column_settings.sound": "播放聲音", "notifications.column_settings.status": "新嘟文:", + "notifications.column_settings.unread_markers.category": "未讀通知標記", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", diff --git a/app/javascript/mastodon/reducers/suggestions.js b/app/javascript/mastodon/reducers/suggestions.js index 834be728f..1a6e66ee7 100644 --- a/app/javascript/mastodon/reducers/suggestions.js +++ b/app/javascript/mastodon/reducers/suggestions.js @@ -19,18 +19,18 @@ export default function suggestionsReducer(state = initialState, action) { return state.set('isLoading', true); case SUGGESTIONS_FETCH_SUCCESS: return state.withMutations(map => { - map.set('items', fromJS(action.accounts.map(x => x.id))); + map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id })))); map.set('isLoading', false); }); case SUGGESTIONS_FETCH_FAIL: return state.set('isLoading', false); case SUGGESTIONS_DISMISS: - return state.update('items', list => list.filterNot(id => id === action.id)); + return state.update('items', list => list.filterNot(x => x.account === action.id)); case ACCOUNT_BLOCK_SUCCESS: case ACCOUNT_MUTE_SUCCESS: - return state.update('items', list => list.filterNot(id => id === action.relationship.id)); + return state.update('items', list => list.filterNot(x => x.account === action.relationship.id)); case DOMAIN_BLOCK_SUCCESS: - return state.update('items', list => list.filterNot(id => action.accounts.includes(id))); + return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account))); default: return state; } diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js index 9156db021..b66c19fd5 100644 --- a/app/javascript/mastodon/reducers/timelines.js +++ b/app/javascript/mastodon/reducers/timelines.js @@ -9,6 +9,7 @@ import { TIMELINE_CONNECT, TIMELINE_DISCONNECT, TIMELINE_LOAD_PENDING, + TIMELINE_MARK_AS_PARTIAL, } from '../actions/timelines'; import { ACCOUNT_BLOCK_SUCCESS, @@ -168,6 +169,12 @@ export default function timelines(state = initialState, action) { initialTimeline, map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items), ); + case TIMELINE_MARK_AS_PARTIAL: + return state.update( + action.timeline, + initialTimeline, + map => map.set('isPartial', true).set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('unread', 0), + ); default: return state; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2059aa8f3..9d936e684 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1307,6 +1307,29 @@ overflow: hidden; text-decoration: none; font-size: 14px; + + &--with-note { + strong { + display: inline; + } + } + } + + &__note { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: $ui-secondary-color; + } +} + +.follow-recommendations-account { + .icon-button { + color: $ui-primary-color; + + &.active { + color: $valid-value-color; + } } } @@ -2459,6 +2482,65 @@ a.account__display-name { border-color: darken($ui-base-color, 8%); } +.column-title { + text-align: center; + padding: 40px; + + .logo { + fill: $primary-text-color; + width: 50px; + margin: 0 auto; + margin-bottom: 40px; + } + + h3 { + font-size: 24px; + line-height: 1.5; + font-weight: 700; + margin-bottom: 10px; + } + + p { + font-size: 16px; + line-height: 24px; + font-weight: 400; + color: $darker-text-color; + } +} + +.column-actions { + display: flex; + align-items: center; + justify-content: center; + padding: 40px; + padding-top: 40px; + padding-bottom: 200px; + + &__background { + position: absolute; + left: 0; + bottom: 0; + height: 220px; + width: auto; + } +} + +.column-list { + margin: 0 20px; + border: 1px solid lighten($ui-base-color, 8%); + background: darken($ui-base-color, 2%); + border-radius: 4px; + + &__empty-message { + padding: 40px; + text-align: center; + font-size: 16px; + line-height: 24px; + font-weight: 400; + color: $darker-text-color; + } +} + .compose-panel { width: 285px; margin-top: 10px; @@ -6687,6 +6769,17 @@ noscript { } } + .account__header__joined { + font-size: 14px; + padding: 5px 15px; + color: $darker-text-color; + + .columns-area--mobile & { + padding-left: 20px; + padding-right: 20px; + } + } + .account__header__fields { margin: 0; border-top: 1px solid lighten($ui-base-color, 12%); diff --git a/app/lib/account_reach_finder.rb b/app/lib/account_reach_finder.rb new file mode 100644 index 000000000..706ce8c1f --- /dev/null +++ b/app/lib/account_reach_finder.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class AccountReachFinder + def initialize(account) + @account = account + end + + def inboxes + (followers_inboxes + reporters_inboxes + relay_inboxes).uniq + end + + private + + def followers_inboxes + @account.followers.inboxes + end + + def reporters_inboxes + Account.where(id: @account.targeted_reports.select(:account_id)).inboxes + end + + def relay_inboxes + Relay.enabled.pluck(:inbox_url) + end +end diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 2b5d3ffc2..3baee4ca4 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -144,7 +144,7 @@ class ActivityPub::Activity end def delete_later!(uri) - redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, uri) + redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, true) end def status_from_object @@ -210,12 +210,22 @@ class ActivityPub::Activity end end - def lock_or_return(key, expire_after = 7.days.seconds) + def lock_or_return(key, expire_after = 2.hours.seconds) yield if redis.set(key, true, nx: true, ex: expire_after) ensure redis.del(key) end + def lock_or_fail(key) + RedisLock.acquire({ redis: Redis.current, key: key }) do |lock| + if lock.acquired? + yield + else + raise Mastodon::RaceConditionError + end + end + end + def fetch? !@options[:delivery] end diff --git a/app/lib/activitypub/activity/announce.rb b/app/lib/activitypub/activity/announce.rb index ae8b2db75..9f778ffb9 100644 --- a/app/lib/activitypub/activity/announce.rb +++ b/app/lib/activitypub/activity/announce.rb @@ -4,29 +4,29 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity def perform return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity? - RedisLock.acquire(lock_options) do |lock| - if lock.acquired? - original_status = status_from_object + lock_or_fail("announce:#{@object['id']}") do + original_status = status_from_object - return reject_payload! if original_status.nil? || !announceable?(original_status) + return reject_payload! if original_status.nil? || !announceable?(original_status) - @status = Status.find_by(account: @account, reblog: original_status) + @status = Status.find_by(account: @account, reblog: original_status) - return @status unless @status.nil? + return @status unless @status.nil? - @status = Status.create!( - account: @account, - reblog: original_status, - uri: @json['id'], - created_at: @json['published'], - override_timestamps: @options[:override_timestamps], - visibility: visibility_from_audience - ) + @status = Status.create!( + account: @account, + reblog: original_status, + uri: @json['id'], + created_at: @json['published'], + override_timestamps: @options[:override_timestamps], + visibility: visibility_from_audience + ) - distribute(@status) - else - raise Mastodon::RaceConditionError + original_status.tags.each do |tag| + tag.use!(@account) end + + distribute(@status) end @status @@ -69,8 +69,4 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity def reblog_of_local_status? status_from_uri(object_uri)&.account&.local? end - - def lock_options - { redis: Redis.current, key: "announce:#{@object['id']}" } - end end diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index f10fc5f43..763c417f9 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -45,19 +45,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def create_status return reject_payload! if unsupported_object_type? || invalid_origin?(object_uri) || tombstone_exists? || !related_to_local_activity? - RedisLock.acquire(lock_options) do |lock| - if lock.acquired? - return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator + lock_or_fail("create:#{object_uri}") do + return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator - @status = find_existing_status + @status = find_existing_status - if @status.nil? - process_status - elsif @options[:delivered_to_account_id].present? - postprocess_audience_and_deliver - end - else - raise Mastodon::RaceConditionError + if @status.nil? + process_status + elsif @options[:delivered_to_account_id].present? + postprocess_audience_and_deliver end end @@ -88,7 +84,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity resolve_thread(@status) fetch_replies(@status) - check_for_spam distribute(@status) forward_for_reply end @@ -169,7 +164,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def attach_tags(status) @tags.each do |tag| status.tags << tag - TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility? + tag.use!(@account, status: status, at_time: status.created_at) if status.public_visibility? end @mentions.each do |mention| @@ -314,13 +309,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity poll = replied_to_status.preloadable_poll already_voted = true - RedisLock.acquire(poll_lock_options) do |lock| - if lock.acquired? - already_voted = poll.votes.where(account: @account).exists? - poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri) - else - raise Mastodon::RaceConditionError - end + lock_or_fail("vote:#{replied_to_status.poll_id}:#{@account.id}") do + already_voted = poll.votes.where(account: @account).exists? + poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri) end increment_voters_count! unless already_voted @@ -498,10 +489,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity Tombstone.exists?(uri: object_uri) end - def check_for_spam - SpamCheck.perform(@status) - end - def forward_for_reply return unless @status.distributable? && @json['signature'].present? && reply_to_local? @@ -519,12 +506,4 @@ class ActivityPub::Activity::Create < ActivityPub::Activity poll.reload retry end - - def lock_options - { redis: Redis.current, key: "create:#{object_uri}" } - end - - def poll_lock_options - { redis: Redis.current, key: "vote:#{replied_to_status.poll_id}:#{@account.id}" } - end end diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb index 2e5293b83..801647cf7 100644 --- a/app/lib/activitypub/activity/delete.rb +++ b/app/lib/activitypub/activity/delete.rb @@ -20,33 +20,35 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity def delete_note return if object_uri.nil? - unless invalid_origin?(object_uri) - RedisLock.acquire(lock_options) { |_lock| delete_later!(object_uri) } - Tombstone.find_or_create_by(uri: object_uri, account: @account) - end + lock_or_return("delete_status_in_progress:#{object_uri}", 5.minutes.seconds) do + unless invalid_origin?(object_uri) + # This lock ensures a concurrent `ActivityPub::Activity::Create` either + # does not create a status at all, or has finished saving it to the + # database before we try to load it. + # Without the lock, `delete_later!` could be called after `delete_arrived_first?` + # and `Status.find` before `Status.create!` + lock_or_fail("create:#{object_uri}") { delete_later!(object_uri) } - @status = Status.find_by(uri: object_uri, account: @account) - @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? + Tombstone.find_or_create_by(uri: object_uri, account: @account) + end - return if @status.nil? + @status = Status.find_by(uri: object_uri, account: @account) + @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? - if @status.distributable? - forward_for_reply - forward_for_reblogs - end + return if @status.nil? - delete_now! + forward! if @json['signature'].present? && @status.distributable? + delete_now! + end end - def forward_for_reblogs - return if @json['signature'].blank? - - rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id) - inboxes = Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes - [@account.preferred_inbox_url] + def rebloggers_ids + return @rebloggers_ids if defined?(@rebloggers_ids) + @rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id) + end - ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url| - [payload, rebloggers_ids.first, inbox_url] - end + def inboxes_for_reblogs + Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes end def replied_to_status @@ -58,13 +60,19 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity !replied_to_status.nil? && replied_to_status.account.local? end - def forward_for_reply - return unless @json['signature'].present? && reply_to_local? + def inboxes_for_reply + replied_to_status.account.followers.inboxes + end + + def forward! + inboxes = inboxes_for_reblogs + inboxes += inboxes_for_reply if reply_to_local? + inboxes -= [@account.preferred_inbox_url] - inboxes = replied_to_status.account.followers.inboxes - [@account.preferred_inbox_url] + sender_id = reply_to_local? ? replied_to_status.account_id : rebloggers_ids.first - ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url| - [payload, replied_to_status.account_id, inbox_url] + ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes.uniq) do |inbox_url| + [payload, sender_id, inbox_url] end end @@ -75,8 +83,4 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity def payload @payload ||= Oj.dump(@json) end - - def lock_options - { redis: Redis.current, key: "create:#{object_uri}" } - end end diff --git a/app/lib/activitypub/activity/flag.rb b/app/lib/activitypub/activity/flag.rb index 8dfc76f0a..b0443849a 100644 --- a/app/lib/activitypub/activity/flag.rb +++ b/app/lib/activitypub/activity/flag.rb @@ -10,6 +10,8 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity target_accounts.each do |target_account| target_statuses = target_statuses_by_account[target_account.id] + next if target_account.suspended? + ReportService.new.call( @account, target_account, diff --git a/app/lib/admin/system_check/sidekiq_process_check.rb b/app/lib/admin/system_check/sidekiq_process_check.rb index c44d86c44..22446edaf 100644 --- a/app/lib/admin/system_check/sidekiq_process_check.rb +++ b/app/lib/admin/system_check/sidekiq_process_check.rb @@ -7,7 +7,6 @@ class Admin::SystemCheck::SidekiqProcessCheck < Admin::SystemCheck::BaseCheck mailers pull scheduler - ingress ).freeze def pass? diff --git a/app/lib/application_extension.rb b/app/lib/application_extension.rb index 1d80b8c6d..e61cd0721 100644 --- a/app/lib/application_extension.rb +++ b/app/lib/application_extension.rb @@ -4,6 +4,8 @@ module ApplicationExtension extend ActiveSupport::Concern included do - validates :website, url: true, if: :website? + validates :name, length: { maximum: 60 } + validates :website, url: true, length: { maximum: 2_000 }, if: :website? + validates :redirect_uri, length: { maximum: 2_000 } end end diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb index 2cd6ef7ad..8907ade4c 100644 --- a/app/lib/delivery_failure_tracker.rb +++ b/app/lib/delivery_failure_tracker.rb @@ -17,6 +17,10 @@ class DeliveryFailureTracker UnavailableDomain.find_by(domain: @host)&.destroy end + def clear_failures! + Redis.current.del(exhausted_deliveries_key) + end + def days Redis.current.scard(exhausted_deliveries_key) || 0 end @@ -25,6 +29,10 @@ class DeliveryFailureTracker !UnavailableDomain.where(domain: @host).exists? end + def exhausted_deliveries_days + Redis.current.smembers(exhausted_deliveries_key).sort.map { |date| Date.new(date.slice(0, 4).to_i, date.slice(4, 2).to_i, date.slice(6, 2).to_i) } + end + alias reset! track_success! class << self @@ -44,6 +52,24 @@ class DeliveryFailureTracker def reset!(url) new(url).reset! end + + def warning_domains + domains = Redis.current.keys(exhausted_deliveries_key_by('*')).map do |key| + key.delete_prefix(exhausted_deliveries_key_by('')) + end + + domains - UnavailableDomain.all.pluck(:domain) + end + + def warning_domains_map + warning_domains.index_with { |domain| Redis.current.scard(exhausted_deliveries_key_by(domain)) } + end + + private + + def exhausted_deliveries_key_by(host) + "exhausted_deliveries:#{host}" + end end private diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 90e6652a9..d57508ef9 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -219,6 +219,36 @@ class FeedManager end end + # Clear all statuses from or mentioning target_account from a list feed + # @param [List] list + # @param [Account] target_account + # @return [void] + def clear_from_list(list, target_account) + timeline_key = key(:list, list.id) + timeline_status_ids = redis.zrange(timeline_key, 0, -1) + statuses = Status.where(id: timeline_status_ids).select(:id, :reblog_of_id, :account_id).to_a + reblogged_ids = Status.where(id: statuses.map(&:reblog_of_id).compact, account: target_account).pluck(:id) + with_mentions_ids = Mention.active.where(status_id: statuses.flat_map { |s| [s.id, s.reblog_of_id] }.compact, account: target_account).pluck(:status_id) + + target_statuses = statuses.select do |status| + status.account_id == target_account.id || reblogged_ids.include?(status.reblog_of_id) || with_mentions_ids.include?(status.id) || with_mentions_ids.include?(status.reblog_of_id) + end + + target_statuses.each do |status| + unpush_from_list(list, status) + end + end + + # Clear all statuses from or mentioning target_account from an account's lists + # @param [Account] account + # @param [Account] target_account + # @return [void] + def clear_from_lists(account, target_account) + List.where(account: account).each do |list| + clear_from_list(list, target_account) + end + end + # Populate home feed of account from scratch # @param [Account] account # @return [void] diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 02ebe6f89..b26138642 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -118,7 +118,7 @@ class Formatter end def format_field(account, str, **options) - html = account.local? ? encode_and_link_urls(str, me: true) : reformat(str) + html = account.local? ? encode_and_link_urls(str, me: true, with_domain: true) : reformat(str) html = encode_custom_emojis(html, account.emojis, options[:autoplay]) if options[:custom_emojify] html.html_safe # rubocop:disable Rails/OutputSafety end @@ -187,7 +187,7 @@ class Formatter elsif entity[:hashtag] link_to_hashtag(entity) elsif entity[:screen_name] - link_to_mention(entity, accounts) + link_to_mention(entity, accounts, options) end end end @@ -352,22 +352,37 @@ class Formatter encode(entity[:url]) end - def link_to_mention(entity, linkable_accounts) + def link_to_mention(entity, linkable_accounts, options = {}) acct = entity[:screen_name] - return link_to_account(acct) unless linkable_accounts + return link_to_account(acct, options) unless linkable_accounts - account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) } - account ? mention_html(account) : "@#{encode(acct)}" + same_username_hits = 0 + account = nil + username, domain = acct.split('@') + domain = nil if TagManager.instance.local_domain?(domain) + + linkable_accounts.each do |item| + same_username = item.username.casecmp(username).zero? + same_domain = item.domain.nil? ? domain.nil? : item.domain.casecmp(domain)&.zero? + + if same_username && !same_domain + same_username_hits += 1 + elsif same_username && same_domain + account = item + end + end + + account ? mention_html(account, with_domain: same_username_hits.positive? || options[:with_domain]) : "@#{encode(acct)}" end - def link_to_account(acct) + def link_to_account(acct, options = {}) username, domain = acct.split('@') domain = nil if TagManager.instance.local_domain?(domain) account = EntityCache.instance.mention(username, domain) - account ? mention_html(account) : "@#{encode(acct)}" + account ? mention_html(account, with_domain: options[:with_domain]) : "@#{encode(acct)}" end def link_to_hashtag(entity) @@ -388,7 +403,7 @@ class Formatter "<a href=\"#{encode(tag_url(tag))}\" class=\"mention hashtag\" rel=\"tag\">#<span>#{encode(tag)}</span></a>" end - def mention_html(account) - "<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>" + def mention_html(account, with_domain: false) + "<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(with_domain ? account.pretty_acct : account.username)}</span></a></span>" end end diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb index 188aa4a27..f5bc20346 100644 --- a/app/lib/potential_friendship_tracker.rb +++ b/app/lib/potential_friendship_tracker.rb @@ -27,11 +27,5 @@ class PotentialFriendshipTracker def remove(account_id, target_account_id) redis.zrem("interactions:#{account_id}", target_account_id) end - - def get(account_id, limit: 20, offset: 0) - account_ids = redis.zrevrange("interactions:#{account_id}", offset, limit) - return [] if account_ids.empty? - Account.searchable.where(id: account_ids) - end end end diff --git a/app/lib/spam_check.rb b/app/lib/spam_check.rb deleted file mode 100644 index dcb2db9ca..000000000 --- a/app/lib/spam_check.rb +++ /dev/null @@ -1,198 +0,0 @@ -# frozen_string_literal: true - -class SpamCheck - include Redisable - include ActionView::Helpers::TextHelper - - # Threshold over which two Nilsimsa values are considered - # to refer to the same text - NILSIMSA_COMPARE_THRESHOLD = 95 - - # Nilsimsa doesn't work well on small inputs, so below - # this size, we check only for exact matches with MD5 - NILSIMSA_MIN_SIZE = 10 - - # How long to keep the trail of digests between updates, - # there is no reason to store it forever - EXPIRE_SET_AFTER = 1.week.seconds - - # How many digests to keep in an account's trail. If it's - # too small, spam could rotate around different message templates - MAX_TRAIL_SIZE = 10 - - # How many detected duplicates to allow through before - # considering the message as spam - THRESHOLD = 5 - - def initialize(status) - @account = status.account - @status = status - end - - def skip? - disabled? || already_flagged? || trusted? || no_unsolicited_mentions? || solicited_reply? - end - - def spam? - if insufficient_data? - false - elsif nilsimsa? - digests_over_threshold?('nilsimsa') { |_, other_digest| nilsimsa_compare_value(digest, other_digest) >= NILSIMSA_COMPARE_THRESHOLD } - else - digests_over_threshold?('md5') { |_, other_digest| other_digest == digest } - end - end - - def flag! - auto_report_status! - end - - def remember! - # The scores in sorted sets don't actually have enough bits to hold an exact - # value of our snowflake IDs, so we use it only for its ordering property. To - # get the correct status ID back, we have to save it in the string value - - redis.zadd(redis_key, @status.id, digest_with_algorithm) - redis.zremrangebyrank(redis_key, 0, -(MAX_TRAIL_SIZE + 1)) - redis.expire(redis_key, EXPIRE_SET_AFTER) - end - - def reset! - redis.del(redis_key) - end - - def hashable_text - return @hashable_text if defined?(@hashable_text) - - @hashable_text = @status.text - @hashable_text = remove_mentions(@hashable_text) - @hashable_text = strip_tags(@hashable_text) unless @status.local? - @hashable_text = normalize_unicode(@status.spoiler_text + ' ' + @hashable_text) - @hashable_text = remove_whitespace(@hashable_text) - end - - def insufficient_data? - hashable_text.blank? - end - - def digest - @digest ||= begin - if nilsimsa? - Nilsimsa.new(hashable_text).hexdigest - else - Digest::MD5.hexdigest(hashable_text) - end - end - end - - def digest_with_algorithm - if nilsimsa? - ['nilsimsa', digest, @status.id].join(':') - else - ['md5', digest, @status.id].join(':') - end - end - - class << self - def perform(status) - spam_check = new(status) - - return if spam_check.skip? - - if spam_check.spam? - spam_check.flag! - else - spam_check.remember! - end - end - end - - private - - def disabled? - !Setting.spam_check_enabled - end - - def remove_mentions(text) - return text.gsub(Account::MENTION_RE, '') if @status.local? - - Nokogiri::HTML.fragment(text).tap do |html| - mentions = @status.mentions.map { |mention| ActivityPub::TagManager.instance.url_for(mention.account) } - - html.traverse do |element| - element.unlink if element.name == 'a' && mentions.include?(element['href']) - end - end.to_s - end - - def normalize_unicode(text) - text.unicode_normalize(:nfkc).downcase - end - - def remove_whitespace(text) - text.gsub(/\s+/, ' ').strip - end - - def auto_report_status! - status_ids = Status.where(visibility: %i(public unlisted)).where(id: matching_status_ids).pluck(:id) + [@status.id] if @status.distributable? - ReportService.new.call(Account.representative, @account, status_ids: status_ids, comment: I18n.t('spam_check.spam_detected')) - end - - def already_flagged? - @account.silenced? || @account.targeted_reports.unresolved.where(account_id: -99).exists? - end - - def trusted? - @account.trust_level > Account::TRUST_LEVELS[:untrusted] || (@account.local? && @account.user_staff?) - end - - def no_unsolicited_mentions? - @status.mentions.all? { |mention| mention.silent? || (!@account.local? && !mention.account.local?) || mention.account.following?(@account) } - end - - def solicited_reply? - !@status.thread.nil? && @status.thread.mentions.where(account: @account).exists? - end - - def nilsimsa_compare_value(first, second) - first = [first].pack('H*') - second = [second].pack('H*') - bits = 0 - - 0.upto(31) do |i| - bits += Nilsimsa::POPC[255 & (first[i].ord ^ second[i].ord)].ord - end - - 128 - bits # -128 <= Nilsimsa Compare Value <= 128 - end - - def nilsimsa? - hashable_text.size > NILSIMSA_MIN_SIZE - end - - def other_digests - redis.zrange(redis_key, 0, -1) - end - - def digests_over_threshold?(filter_algorithm) - other_digests.select do |record| - algorithm, other_digest, status_id = record.split(':') - - next unless algorithm == filter_algorithm - - yield algorithm, other_digest, status_id - end.size >= THRESHOLD - end - - def matching_status_ids - if nilsimsa? - other_digests.filter_map { |record| record.split(':')[2] if record.start_with?('nilsimsa') && nilsimsa_compare_value(digest, record.split(':')[1]) >= NILSIMSA_COMPARE_THRESHOLD } - else - other_digests.filter_map { |record| record.split(':')[2] if record.start_with?('md5') && record.split(':')[1] == digest } - end - end - - def redis_key - @redis_key ||= "spam_check:#{@account.id}" - end -end diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 35b191dad..735d66a4f 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -6,11 +6,22 @@ class StatusReachFinder end def inboxes - Account.where(id: reached_account_ids).inboxes + (reached_account_inboxes + followers_inboxes + relay_inboxes).uniq end private + def reached_account_inboxes + # When the status is a reblog, there are no interactions with it + # directly, we assume all interactions are with the original one + + if @status.reblog? + [] + else + Account.where(id: reached_account_ids).inboxes + end + end + def reached_account_ids [ replied_to_account_id, @@ -49,4 +60,20 @@ class StatusReachFinder def replies_account_ids @status.replies.pluck(:account_id) end + + def followers_inboxes + if @status.in_reply_to_local_account? && @status.distributable? + @status.account.followers.or(@status.thread.account.followers).inboxes + else + @status.account.followers.inboxes + end + end + + def relay_inboxes + if @status.public_visibility? + Relay.enabled.pluck(:inbox_url) + else + [] + end + end end diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb index 29dde128c..a1d12a654 100644 --- a/app/lib/tag_manager.rb +++ b/app/lib/tag_manager.rb @@ -22,14 +22,6 @@ class TagManager uri.normalized_host end - def same_acct?(canonical, needle) - return true if canonical.casecmp(needle).zero? - - username, domain = needle.split('@') - - local_domain?(domain) && canonical.casecmp(username).zero? - end - def local_url?(url) uri = Addressable::URI.parse(url).normalize return false unless uri.host diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb new file mode 100644 index 000000000..03e40f923 --- /dev/null +++ b/app/lib/video_metadata_extractor.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class VideoMetadataExtractor + attr_reader :duration, :bitrate, :video_codec, :audio_codec, + :colorspace, :width, :height, :frame_rate + + def initialize(path) + @path = path + @metadata = Oj.load(ffmpeg_command_output, mode: :strict, symbol_keys: true) + + parse_metadata + rescue Terrapin::ExitStatusError, Oj::ParseError + @invalid = true + rescue Terrapin::CommandNotFoundError + raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffprobe` command. Please install ffmpeg.' + end + + def valid? + !@invalid + end + + private + + def ffmpeg_command_output + command = Terrapin::CommandLine.new('ffprobe', '-i :path -print_format :format -show_format -show_streams -show_error -loglevel :loglevel') + command.run(path: @path, format: 'json', loglevel: 'fatal') + end + + def parse_metadata + if @metadata.key?(:format) + @duration = @metadata[:format][:duration].to_f + @bitrate = @metadata[:format][:bit_rate].to_i + end + + if @metadata.key?(:streams) + video_streams = @metadata[:streams].select { |stream| stream[:codec_type] == 'video' } + audio_streams = @metadata[:streams].select { |stream| stream[:codec_type] == 'audio' } + + if (video_stream = video_streams.first) + @video_codec = video_stream[:codec_name] + @colorspace = video_stream[:pix_fmt] + @width = video_stream[:width] + @height = video_stream[:height] + @frame_rate = video_stream[:avg_frame_rate] == '0/0' ? nil : Rational(video_stream[:avg_frame_rate]) + end + + if (audio_stream = audio_streams.first) + @audio_codec = audio_stream[:codec_name] + end + end + + @invalid = true if @metadata.key?(:error) + end +end diff --git a/app/models/account.rb b/app/models/account.rb index 2e7d9f543..53c6a43a6 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -6,12 +6,8 @@ # id :bigint(8) not null, primary key # username :string default(""), not null # domain :string -# secret :string default(""), not null # private_key :text # public_key :text default(""), not null -# remote_url :string default(""), not null -# salmon_url :string default(""), not null -# hub_url :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # note :text default(""), not null @@ -49,12 +45,18 @@ # avatar_storage_schema_version :integer # header_storage_schema_version :integer # devices_url :string -# sensitized_at :datetime # suspension_origin :integer +# sensitized_at :datetime # class Account < ApplicationRecord - self.ignored_columns = %w(subscription_expires_at) + self.ignored_columns = %w( + subscription_expires_at + secret + remote_url + salmon_url + hub_url + ) USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i @@ -114,7 +116,7 @@ class Account < ApplicationRecord scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } scope :searchable, -> { without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).left_outer_joins(:account_stat) } - scope :tagged_with, ->(tag) { joins(:accounts_tags).where(accounts_tags: { tag_id: tag }) } + scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } scope :by_recent_status, -> { order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc, accounts.id desc')) } scope :by_recent_sign_in, -> { order(Arel.sql('(case when users.current_sign_in_at is null then 1 else 0 end) asc, users.current_sign_in_at desc, accounts.id desc')) } scope :popular, -> { order('account_stats.followers_count desc') } @@ -238,6 +240,7 @@ class Account < ApplicationRecord transaction do create_deletion_request! update!(suspended_at: date, suspension_origin: origin) + create_canonical_email_block! end end @@ -245,6 +248,7 @@ class Account < ApplicationRecord transaction do deletion_request&.destroy! update!(suspended_at: nil, suspension_origin: nil) + destroy_canonical_email_block! end end @@ -280,19 +284,13 @@ class Account < ApplicationRecord if hashtags_map.key?(tag.name) hashtags_map.delete(tag.name) else - transaction do - tags.delete(tag) - tag.decrement_count!(:accounts_count) - end + tags.delete(tag) end end # Add hashtags that were so far missing hashtags_map.each_value do |tag| - transaction do - tags << tag - tag.increment_count!(:accounts_count) - end + tags << tag end end @@ -365,7 +363,7 @@ class Account < ApplicationRecord end def excluded_from_timeline_account_ids - Rails.cache.fetch("exclude_account_ids_for:#{id}") { blocking.pluck(:target_account_id) + blocked_by.pluck(:account_id) + muting.pluck(:target_account_id) } + Rails.cache.fetch("exclude_account_ids_for:#{id}") { block_relationships.pluck(:target_account_id) + blocked_by_relationships.pluck(:account_id) + mute_relationships.pluck(:target_account_id) } end def excluded_from_timeline_domains @@ -570,4 +568,16 @@ class Account < ApplicationRecord def clean_feed_manager FeedManager.instance.clean_feeds!(:home, [id]) end + + def create_canonical_email_block! + return unless local? && user_email.present? + + CanonicalEmailBlock.create(reference_account: self, email: user_email) + end + + def destroy_canonical_email_block! + return unless local? + + CanonicalEmailBlock.where(reference_account: self).delete_all + end end diff --git a/app/models/account_suggestions.rb b/app/models/account_suggestions.rb new file mode 100644 index 000000000..d1774e62f --- /dev/null +++ b/app/models/account_suggestions.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +class AccountSuggestions + SOURCES = [ + AccountSuggestions::SettingSource, + AccountSuggestions::PastInteractionsSource, + AccountSuggestions::GlobalSource, + ].freeze + + def self.get(account, limit) + SOURCES.each_with_object([]) do |source_class, suggestions| + source_suggestions = source_class.new.get( + account, + skip_account_ids: suggestions.map(&:account_id), + limit: limit - suggestions.size + ) + + suggestions.concat(source_suggestions) + end + end + + def self.remove(account, target_account_id) + SOURCES.each do |source_class| + source = source_class.new + source.remove(account, target_account_id) + end + end +end diff --git a/app/models/account_suggestions/global_source.rb b/app/models/account_suggestions/global_source.rb new file mode 100644 index 000000000..ac764de50 --- /dev/null +++ b/app/models/account_suggestions/global_source.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class AccountSuggestions::GlobalSource < AccountSuggestions::Source + def key + :global + end + + def get(account, skip_account_ids: [], limit: 40) + account_ids = account_ids_for_locale(account.user_locale) - [account.id] - skip_account_ids + + as_ordered_suggestions( + scope(account).where(id: account_ids), + account_ids + ).take(limit) + end + + def remove(_account, _target_account_id) + nil + end + + private + + def scope(account) + Account.searchable + .followable_by(account) + .not_excluded_by_account(account) + .not_domain_blocked_by_account(account) + end + + def account_ids_for_locale(locale) + Redis.current.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i) + end + + def to_ordered_list_key(account) + account.id + end +end diff --git a/app/models/account_suggestions/past_interactions_source.rb b/app/models/account_suggestions/past_interactions_source.rb new file mode 100644 index 000000000..d169394f1 --- /dev/null +++ b/app/models/account_suggestions/past_interactions_source.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class AccountSuggestions::PastInteractionsSource < AccountSuggestions::Source + include Redisable + + def key + :past_interactions + end + + def get(account, skip_account_ids: [], limit: 40) + account_ids = account_ids_for_account(account.id, limit + skip_account_ids.size) - skip_account_ids + + as_ordered_suggestions( + scope.where(id: account_ids), + account_ids + ).take(limit) + end + + def remove(account, target_account_id) + redis.zrem("interactions:#{account.id}", target_account_id) + end + + private + + def scope + Account.searchable + end + + def account_ids_for_account(account_id, limit) + redis.zrevrange("interactions:#{account_id}", 0, limit).map(&:to_i) + end + + def to_ordered_list_key(account) + account.id + end +end diff --git a/app/models/account_suggestions/setting_source.rb b/app/models/account_suggestions/setting_source.rb new file mode 100644 index 000000000..be9eff233 --- /dev/null +++ b/app/models/account_suggestions/setting_source.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +class AccountSuggestions::SettingSource < AccountSuggestions::Source + def key + :staff + end + + def get(account, skip_account_ids: [], limit: 40) + return [] unless setting_enabled? + + as_ordered_suggestions( + scope(account).where(setting_to_where_condition).where.not(id: skip_account_ids), + usernames_and_domains + ).take(limit) + end + + def remove(_account, _target_account_id) + nil + end + + private + + def scope(account) + Account.searchable + .followable_by(account) + .not_excluded_by_account(account) + .not_domain_blocked_by_account(account) + .where(locked: false) + .where.not(id: account.id) + end + + def usernames_and_domains + @usernames_and_domains ||= setting_to_usernames_and_domains + end + + def setting_enabled? + setting.present? + end + + def setting_to_where_condition + usernames_and_domains.map do |(username, domain)| + Arel::Nodes::Grouping.new( + Account.arel_table[:username].lower.eq(username.downcase).and( + Account.arel_table[:domain].lower.eq(domain&.downcase) + ) + ) + end.reduce(:or) + end + + def setting_to_usernames_and_domains + setting.split(',').map do |str| + username, domain = str.strip.gsub(/\A@/, '').split('@', 2) + domain = nil if TagManager.instance.local_domain?(domain) + + next if username.blank? + + [username, domain] + end.compact + end + + def setting + Setting.bootstrap_timeline_accounts + end + + def to_ordered_list_key(account) + [account.username, account.domain] + end +end diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb new file mode 100644 index 000000000..bd1068d20 --- /dev/null +++ b/app/models/account_suggestions/source.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +class AccountSuggestions::Source + def key + raise NotImplementedError + end + + def get(_account, **kwargs) + raise NotImplementedError + end + + def remove(_account, target_account_id) + raise NotImplementedError + end + + protected + + def as_ordered_suggestions(scope, ordered_list) + return [] if ordered_list.empty? + + map = scope.index_by(&method(:to_ordered_list_key)) + + ordered_list.map { |ordered_list_key| map[ordered_list_key] }.compact.map do |account| + AccountSuggestions::Suggestion.new( + account: account, + source: key + ) + end + end + + def to_ordered_list_key(_account) + raise NotImplementedError + end +end diff --git a/app/models/account_suggestions/suggestion.rb b/app/models/account_suggestions/suggestion.rb new file mode 100644 index 000000000..2c6f4d27f --- /dev/null +++ b/app/models/account_suggestions/suggestion.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AccountSuggestions::Suggestion < ActiveModelSerializers::Model + attributes :account, :source + + delegate :id, to: :account, prefix: true +end diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb new file mode 100644 index 000000000..3a3cebc55 --- /dev/null +++ b/app/models/account_summary.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: account_summaries +# +# account_id :bigint(8) primary key +# language :string +# sensitive :boolean +# + +class AccountSummary < ApplicationRecord + self.primary_key = :account_id + + scope :safe, -> { where(sensitive: false) } + scope :localized, ->(locale) { where(language: locale) } + scope :filtered, -> { joins(arel_table.join(FollowRecommendationSuppression.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:account_id].eq(FollowRecommendationSuppression.arel_table[:account_id])).join_sources).where(FollowRecommendationSuppression.arel_table[:id].eq(nil)) } + + def self.refresh + Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false) + end + + def readonly? + true + end +end diff --git a/app/models/account_tag_stat.rb b/app/models/account_tag_stat.rb deleted file mode 100644 index 3c36c155a..000000000 --- a/app/models/account_tag_stat.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true -# == Schema Information -# -# Table name: account_tag_stats -# -# id :bigint(8) not null, primary key -# tag_id :bigint(8) not null -# accounts_count :bigint(8) default(0), not null -# hidden :boolean default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# - -class AccountTagStat < ApplicationRecord - belongs_to :tag, inverse_of: :account_tag_stat - - def increment_count!(key) - update(key => public_send(key) + 1) - end - - def decrement_count!(key) - update(key => [public_send(key) - 1, 0].max) - end -end diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index 3a1b67e06..a1c156a8b 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -17,12 +17,14 @@ class Admin::ActionLogFilter create_domain_allow: { target_type: 'DomainAllow', action: 'create' }.freeze, create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze, create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze, + create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze, demote_user: { target_type: 'User', action: 'demote' }.freeze, destroy_announcement: { target_type: 'Announcement', action: 'destroy' }.freeze, destroy_custom_emoji: { target_type: 'CustomEmoji', action: 'destroy' }.freeze, destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze, destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze, destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze, + destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze, destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb new file mode 100644 index 000000000..a8546d65a --- /dev/null +++ b/app/models/canonical_email_block.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: canonical_email_blocks +# +# id :bigint(8) not null, primary key +# canonical_email_hash :string default(""), not null +# reference_account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class CanonicalEmailBlock < ApplicationRecord + include EmailHelper + + belongs_to :reference_account, class_name: 'Account' + + validates :canonical_email_hash, presence: true + + def email=(email) + self.canonical_email_hash = email_to_canonical_email_hash(email) + end + + def self.block?(email) + where(canonical_email_hash: email_to_canonical_email_hash(email)).exists? + end +end diff --git a/app/models/concerns/account_associations.rb b/app/models/concerns/account_associations.rb index 98849f8fc..aaf371ebd 100644 --- a/app/models/concerns/account_associations.rb +++ b/app/models/concerns/account_associations.rb @@ -63,5 +63,8 @@ module AccountAssociations # Account deletion requests has_one :deletion_request, class_name: 'AccountDeletionRequest', inverse_of: :account, dependent: :destroy + + # Follow recommendations + has_one :follow_recommendation_suppression, inverse_of: :account, dependent: :destroy end end diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 51e8e04a8..958f6c78e 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -184,6 +184,14 @@ module AccountInteractions active_relationships.where(target_account: other_account).exists? end + def following_anyone? + active_relationships.exists? + end + + def not_following_anyone? + !following_anyone? + end + def blocking?(other_account) block_relationships.where(target_account: other_account).exists? end diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 7cb03b819..f14357932 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -21,7 +21,8 @@ # class CustomEmoji < ApplicationRecord - LIMIT = 50.kilobytes + LOCAL_LIMIT = (ENV['MAX_EMOJI_SIZE'] || 50.kilobytes).to_i + LIMIT = [LOCAL_LIMIT, (ENV['MAX_REMOTE_EMOJI_SIZE'] || 200.kilobytes).to_i].max SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}' @@ -38,7 +39,9 @@ class CustomEmoji < ApplicationRecord before_validation :downcase_domain - validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT } + validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true + validates_attachment_size :image, less_than: LIMIT, unless: :local? + validates_attachment_size :image, less_than: LOCAL_LIMIT, if: :local? validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 } scope :local, -> { where(domain: nil) } diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb new file mode 100644 index 000000000..e552b5a88 --- /dev/null +++ b/app/models/follow_recommendation.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: follow_recommendations +# +# account_id :bigint(8) primary key +# rank :decimal(, ) +# reason :text is an Array +# + +class FollowRecommendation < ApplicationRecord + self.primary_key = :account_id + + belongs_to :account_summary, foreign_key: :account_id + belongs_to :account, foreign_key: :account_id + + scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } + + def self.refresh + Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false) + end + + def readonly? + true + end +end diff --git a/app/models/follow_recommendation_filter.rb b/app/models/follow_recommendation_filter.rb new file mode 100644 index 000000000..acf03cd84 --- /dev/null +++ b/app/models/follow_recommendation_filter.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class FollowRecommendationFilter + KEYS = %i( + language + status + ).freeze + + attr_reader :params, :language + + def initialize(params) + @language = params.delete('language') || I18n.locale + @params = params + end + + def results + if params['status'] == 'suppressed' + Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a + else + account_ids = Redis.current.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i) + accounts = Account.where(id: account_ids).index_by(&:id) + + account_ids.map { |id| accounts[id] }.compact + end + end +end diff --git a/app/models/follow_recommendation_suppression.rb b/app/models/follow_recommendation_suppression.rb new file mode 100644 index 000000000..170506b85 --- /dev/null +++ b/app/models/follow_recommendation_suppression.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: follow_recommendation_suppressions +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class FollowRecommendationSuppression < ApplicationRecord + include Redisable + + belongs_to :account + + after_commit :remove_follow_recommendations, on: :create + + private + + def remove_follow_recommendations + redis.pipelined do + I18n.available_locales.each do |locale| + redis.zrem("follow_recommendations:#{locale}", account_id) + end + end + end +end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index 59fefcdf6..0b6f7629a 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -29,7 +29,7 @@ class FollowRequest < ApplicationRecord validates :account_id, uniqueness: { scope: :target_account_id } def authorize! - account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri) + account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri, bypass_limit: true) MergeWorker.perform_async(target_account.id, account.id) if account.local? destroy! end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 26d6d3abf..698933c9f 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -21,6 +21,10 @@ class Form::AccountBatch approve! when 'reject' reject! + when 'suppress_follow_recommendation' + suppress_follow_recommendation! + when 'unsuppress_follow_recommendation' + unsuppress_follow_recommendation! end end @@ -79,4 +83,18 @@ class Form::AccountBatch records.each { |account| authorize(account.user, :reject?) } .each { |account| DeleteAccountService.new.call(account, reserve_email: false, reserve_username: false) } end + + def suppress_follow_recommendation! + authorize(:follow_recommendation, :suppress?) + + accounts.each do |account| + FollowRecommendationSuppression.create(account: account) + end + end + + def unsuppress_follow_recommendation! + authorize(:follow_recommendation, :unsuppress?) + + FollowRecommendationSuppression.where(account_id: account_ids).destroy_all + end end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 999d835e6..0276ec058 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -16,7 +16,6 @@ class Form::AdminSettings open_deletion timeline_preview show_staff_badge - enable_bootstrap_timeline_accounts bootstrap_timeline_accounts flavour skin @@ -35,7 +34,6 @@ class Form::AdminSettings mascot show_reblogs_in_public_timelines show_replies_in_public_timelines - spam_check_enabled trends trendable_by_default show_domain_blocks @@ -49,7 +47,6 @@ class Form::AdminSettings open_deletion timeline_preview show_staff_badge - enable_bootstrap_timeline_accounts activity_api_enabled peers_api_enabled show_known_fediverse_at_about_page @@ -59,7 +56,6 @@ class Form::AdminSettings enable_keybase show_reblogs_in_public_timelines show_replies_in_public_timelines - spam_check_enabled trends trendable_by_default noindex diff --git a/app/models/instance.rb b/app/models/instance.rb index 29be03662..8949be054 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -10,10 +10,13 @@ class Instance < ApplicationRecord self.primary_key = :domain + attr_accessor :failure_days + has_many :accounts, foreign_key: :domain, primary_key: :domain belongs_to :domain_block, foreign_key: :domain, primary_key: :domain belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain + belongs_to :unavailable_domain, foreign_key: :domain, primary_key: :domain # skipcq: RB-RL1031 scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 0598d8fea..9e533c4aa 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -4,6 +4,8 @@ class InstanceFilter KEYS = %i( limited by_domain + warning + unavailable ).freeze attr_reader :params @@ -13,7 +15,7 @@ class InstanceFilter end def results - scope = Instance.includes(:domain_block, :domain_allow).order(accounts_count: :desc) + scope = Instance.includes(:domain_block, :domain_allow, :unavailable_domain).order(accounts_count: :desc) params.each do |key, value| scope.merge!(scope_for(key, value.to_s.strip)) if value.present? @@ -32,6 +34,10 @@ class InstanceFilter Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc')) when 'by_domain' Instance.matches_domain(value) + when 'warning' + Instance.where(domain: DeliveryFailureTracker.warning_domains) + when 'unavailable' + Instance.joins(:unavailable_domain) else raise "Unknown filter: #{key}" end diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 96386d841..a6ab22f61 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -287,7 +287,7 @@ class MediaAttachment < ApplicationRecord if instance.file_content_type == 'image/gif' [:gif_transcoder, :blurhash_transcoder] elsif VIDEO_MIME_TYPES.include?(instance.file_content_type) - [:video_transcoder, :blurhash_transcoder, :type_corrector] + [:transcoder, :blurhash_transcoder, :type_corrector] elsif AUDIO_MIME_TYPES.include?(instance.file_content_type) [:image_extractor, :transcoder, :type_corrector] else @@ -388,7 +388,7 @@ class MediaAttachment < ApplicationRecord # paths but ultimately the same file, so it makes sense to memoize the # result while disregarding the path def ffmpeg_data(path = nil) - @ffmpeg_data ||= FFMPEG::Movie.new(path) + @ffmpeg_data ||= VideoMetadataExtractor.new(path) end def enqueue_processing diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index b0ce9d112..3a59bad93 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -44,7 +44,7 @@ class SessionActivation < ApplicationRecord end def activate(**options) - activation = create!(options) + activation = create!(**options) purge_old activation end diff --git a/app/models/status.rb b/app/models/status.rb index 7bedbef07..9f673ee53 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -167,6 +167,10 @@ class Status < ApplicationRecord attributes['local'] || uri.nil? end + def in_reply_to_local_account? + reply? && thread&.account&.local? + end + def reblog? !reblog_of_id.nil? end diff --git a/app/models/tag.rb b/app/models/tag.rb index bb93a52e2..735c30608 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -20,10 +20,8 @@ class Tag < ApplicationRecord has_and_belongs_to_many :statuses has_and_belongs_to_many :accounts - has_and_belongs_to_many :sample_accounts, -> { local.discoverable.popular.limit(3) }, class_name: 'Account' has_many :featured_tags, dependent: :destroy, inverse_of: :tag - has_one :account_tag_stat, dependent: :destroy HASHTAG_SEPARATORS = "_\u00B7\u200c" HASHTAG_NAME_RE = "([[:word:]_][[:word:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:word:]#{HASHTAG_SEPARATORS}]*[[:word:]_])|([[:word:]_]*[[:alpha:]][[:word:]_]*)" @@ -38,28 +36,11 @@ class Tag < ApplicationRecord scope :usable, -> { where(usable: [true, nil]) } scope :listable, -> { where(listable: [true, nil]) } scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) } - scope :discoverable, -> { listable.joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) } scope :recently_used, ->(account) { joins(:statuses).where(statuses: { id: account.statuses.select(:id).limit(1000) }).group(:id).order(Arel.sql('count(*) desc')) } - scope :matches_name, ->(value) { where(arel_table[:name].matches("#{value}%")) } - - delegate :accounts_count, - :accounts_count=, - :increment_count!, - :decrement_count!, - to: :account_tag_stat - - after_save :save_account_tag_stat + scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index update_index('tags#tag', :self) - def account_tag_stat - super || build_account_tag_stat - end - - def cached_sample_accounts - Rails.cache.fetch("#{cache_key}/sample_accounts", expires_in: 12.hours) { sample_accounts } - end - def to_param name end @@ -94,6 +75,10 @@ class Tag < ApplicationRecord requested_review_at.present? end + def use!(account, status: nil, at_time: Time.now.utc) + TrendingTags.record_use!(self, account, status: status, at_time: at_time) + end + def trending? TrendingTags.trending?(self) end @@ -126,10 +111,10 @@ class Tag < ApplicationRecord end def search_for(term, limit = 5, offset = 0, options = {}) - normalized_term = normalize(term.strip) - pattern = sanitize_sql_like(normalized_term) + '%' - query = Tag.listable.where(arel_table[:name].lower.matches(pattern)) - query = query.where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil))) if options[:exclude_unreviewed] + stripped_term = term.strip + + query = Tag.listable.matches_name(stripped_term) + query = query.merge(matching_name(stripped_term).or(where.not(reviewed_at: nil))) if options[:exclude_unreviewed] query.order(Arel.sql('length(name) ASC, name ASC')) .limit(limit) @@ -145,7 +130,7 @@ class Tag < ApplicationRecord end def matching_name(name_or_names) - names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s } + names = Array(name_or_names).map { |name| arel_table.lower(normalize(name)) } if names.size == 1 where(arel_table[:name].lower.eq(names.first)) @@ -154,8 +139,6 @@ class Tag < ApplicationRecord end end - private - def normalize(str) str.gsub(/\A#/, '') end @@ -163,11 +146,6 @@ class Tag < ApplicationRecord private - def save_account_tag_stat - return unless account_tag_stat&.changed? - account_tag_stat.save - end - def validate_name_change errors.add(:name, I18n.t('tags.does_not_match_previous_name')) unless name_was.mb_chars.casecmp(name.mb_chars).zero? end diff --git a/app/models/tag_filter.rb b/app/models/tag_filter.rb index a9ff5b703..85bfcbea5 100644 --- a/app/models/tag_filter.rb +++ b/app/models/tag_filter.rb @@ -33,8 +33,6 @@ class TagFilter def scope_for(key, value) case key.to_s - when 'directory' - Tag.discoverable when 'reviewed' Tag.reviewed.order(reviewed_at: :desc) when 'unreviewed' diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb index 9c2aa0ee8..31890b082 100644 --- a/app/models/trending_tags.rb +++ b/app/models/trending_tags.rb @@ -13,19 +13,23 @@ class TrendingTags class << self include Redisable - def record_use!(tag, account, at_time = Time.now.utc) - return if account.silenced? || account.bot? || !tag.usable? || !(tag.trendable? || tag.requires_review?) + def record_use!(tag, account, status: nil, at_time: Time.now.utc) + return unless tag.usable? && !account.silenced? + # Even if a tag is not allowed to trend, we still need to + # record the stats since they can be displayed in other places increment_historical_use!(tag.id, at_time) increment_unique_use!(tag.id, account.id, at_time) increment_use!(tag.id, at_time) - tag.update(last_status_at: Time.now.utc) if tag.last_status_at.nil? || tag.last_status_at < 12.hours.ago + # Only update when the tag was last used once every 12 hours + # and only if a status is given (lets use ignore reblogs) + tag.update(last_status_at: at_time) if status.present? && (tag.last_status_at.nil? || (tag.last_status_at < at_time && tag.last_status_at < 12.hours.ago)) end def update!(at_time = Time.now.utc) tag_ids = redis.smembers("#{KEY}:used:#{at_time.beginning_of_day.to_i}") + redis.zrange(KEY, 0, -1) - tags = Tag.where(id: tag_ids.uniq) + tags = Tag.trendable.where(id: tag_ids.uniq) # First pass to calculate scores and update the set diff --git a/app/models/user.rb b/app/models/user.rb index eb5b95c2b..5c5e926e6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -370,15 +370,20 @@ class User < ApplicationRecord protected - def send_devise_notification(notification, *args) + def send_devise_notification(notification, *args, **kwargs) # This method can be called in `after_update` and `after_commit` hooks, # but we must make sure the mailer is actually called *after* commit, # otherwise it may work on stale data. To do this, figure out if we are # within a transaction. + + # It seems like devise sends keyword arguments as a hash in the last + # positional argument + kwargs = args.pop if args.last.is_a?(Hash) && kwargs.empty? + if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self) - pending_devise_notifications << [notification, args] + pending_devise_notifications << [notification, args, kwargs] else - render_and_send_devise_message(notification, *args) + render_and_send_devise_message(notification, *args, **kwargs) end end @@ -389,8 +394,8 @@ class User < ApplicationRecord end def send_pending_devise_notifications - pending_devise_notifications.each do |notification, args| - render_and_send_devise_message(notification, *args) + pending_devise_notifications.each do |notification, args, kwargs| + render_and_send_devise_message(notification, *args, **kwargs) end # Empty the pending notifications array because the @@ -403,8 +408,8 @@ class User < ApplicationRecord @pending_devise_notifications ||= [] end - def render_and_send_devise_message(notification, *args) - devise_mailer.send(notification, self, *args).deliver_later + def render_and_send_devise_message(notification, *args, **kwargs) + devise_mailer.send(notification, self, *args, **kwargs).deliver_later end def set_approved @@ -458,9 +463,7 @@ class User < ApplicationRecord end def regenerate_feed! - return unless Redis.current.setnx("account:#{account_id}:regeneration", true) - Redis.current.expire("account:#{account_id}:regeneration", 1.day.seconds) - RegenerationWorker.perform_async(account_id) + RegenerationWorker.perform_async(account_id) if Redis.current.set("account:#{account_id}:regeneration", true, nx: true, ex: 1.day.seconds) end def needs_feed_update? diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index c407a7789..6e46573ae 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -24,81 +24,101 @@ class Web::PushSubscription < ApplicationRecord validates :key_p256dh, presence: true validates :key_auth, presence: true - def push(notification) - I18n.with_locale(associated_user&.locale || I18n.default_locale) do - push_payload(payload_for_notification(notification), 48.hours.seconds) - end + delegate :locale, to: :associated_user + + def encrypt(payload) + Webpush::Encryption.encrypt(payload, key_p256dh, key_auth) + end + + def audience + @audience ||= Addressable::URI.parse(endpoint).normalized_site + end + + def crypto_key_header + p256ecdsa = vapid_key.public_key_for_push_header + + "p256ecdsa=#{p256ecdsa}" + end + + def authorization_header + jwt = JWT.encode({ aud: audience, exp: 24.hours.from_now.to_i, sub: "mailto:#{contact_email}" }, vapid_key.curve, 'ES256', typ: 'JWT') + + "WebPush #{jwt}" end def pushable?(notification) - data&.key?('alerts') && ActiveModel::Type::Boolean.new.cast(data['alerts'][notification.type.to_s]) + policy_allows_notification?(notification) && alert_enabled_for_notification_type?(notification) end def associated_user return @associated_user if defined?(@associated_user) - @associated_user = if user_id.nil? - session_activation.user - else - user - end + @associated_user = begin + if user_id.nil? + session_activation.user + else + user + end + end end def associated_access_token return @associated_access_token if defined?(@associated_access_token) - @associated_access_token = if access_token_id.nil? - find_or_create_access_token.token - else - access_token.token - end + @associated_access_token = begin + if access_token_id.nil? + find_or_create_access_token.token + else + access_token.token + end + end end class << self def unsubscribe_for(application_id, resource_owner) - access_token_ids = Doorkeeper::AccessToken.where(application_id: application_id, resource_owner_id: resource_owner.id, revoked_at: nil) - .pluck(:id) - + access_token_ids = Doorkeeper::AccessToken.where(application_id: application_id, resource_owner_id: resource_owner.id, revoked_at: nil).pluck(:id) where(access_token_id: access_token_ids).delete_all end end private - def push_payload(message, ttl = 5.minutes.seconds) - Webpush.payload_send( - message: Oj.dump(message), - endpoint: endpoint, - p256dh: key_p256dh, - auth: key_auth, - ttl: ttl, - ssl_timeout: 10, - open_timeout: 10, - read_timeout: 10, - vapid: { - subject: "mailto:#{::Setting.site_contact_email}", - private_key: Rails.configuration.x.vapid_private_key, - public_key: Rails.configuration.x.vapid_public_key, - } - ) - end - - def payload_for_notification(notification) - ActiveModelSerializers::SerializableResource.new( - notification, - serializer: Web::NotificationSerializer, - scope: self, - scope_name: :current_push_subscription - ).as_json - end - def find_or_create_access_token Doorkeeper::AccessToken.find_or_create_for( application: Doorkeeper::Application.find_by(superapp: true), - resource_owner: session_activation.user_id, + resource_owner: user_id || session_activation.user_id, scopes: Doorkeeper::OAuth::Scopes.from_string('read write follow push'), expires_in: Doorkeeper.configuration.access_token_expires_in, use_refresh_token: Doorkeeper.configuration.refresh_token_enabled? ) end + + def vapid_key + @vapid_key ||= Webpush::VapidKey.from_keys(Rails.configuration.x.vapid_public_key, Rails.configuration.x.vapid_private_key) + end + + def contact_email + @contact_email ||= ::Setting.site_contact_email + end + + def alert_enabled_for_notification_type?(notification) + truthy?(data&.dig('alerts', notification.type.to_s)) + end + + def policy_allows_notification?(notification) + case data&.dig('policy') + when nil, 'all' + true + when 'none' + false + when 'followed' + notification.account.following?(notification.from_account) + when 'follower' + notification.from_account.following?(notification.account) + end + end + + def truthy?(val) + ActiveModel::Type::Boolean.new.cast(val) + end end diff --git a/app/policies/delivery_policy.rb b/app/policies/delivery_policy.rb new file mode 100644 index 000000000..24d06c168 --- /dev/null +++ b/app/policies/delivery_policy.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class DeliveryPolicy < ApplicationPolicy + def clear_delivery_errors? + admin? + end + + def restart_delivery? + admin? + end + + def stop_delivery? + admin? + end +end diff --git a/app/policies/follow_recommendation_policy.rb b/app/policies/follow_recommendation_policy.rb new file mode 100644 index 000000000..68cd0e547 --- /dev/null +++ b/app/policies/follow_recommendation_policy.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class FollowRecommendationPolicy < ApplicationPolicy + def show? + staff? + end + + def suppress? + staff? + end + + def unsuppress? + staff? + end +end diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index 759ef30f9..d92aae7b3 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -13,7 +13,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer :inbox, :outbox, :featured, :featured_tags, :preferred_username, :name, :summary, :url, :manually_approves_followers, - :discoverable + :discoverable, :published has_one :public_key, serializer: ActivityPub::PublicKeySerializer @@ -158,6 +158,10 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer !object.suspended? && !object.also_known_as.empty? end + def published + object.created_at.midnight.iso8601 + end + class CustomEmojiSerializer < ActivityPub::EmojiSerializer end diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index 5cc42c7cf..36886181f 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -55,6 +55,10 @@ class REST::AccountSerializer < ActiveModel::Serializer full_asset_url(object.suspended? ? object.header.default_url : object.header_static_url) end + def created_at + object.created_at.midnight.as_json + end + def last_status_at object.last_status_at&.to_date&.iso8601 end diff --git a/app/serializers/rest/suggestion_serializer.rb b/app/serializers/rest/suggestion_serializer.rb new file mode 100644 index 000000000..3d697fd9f --- /dev/null +++ b/app/serializers/rest/suggestion_serializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class REST::SuggestionSerializer < ActiveModel::Serializer + attributes :source + + has_one :account, serializer: REST::AccountSerializer +end diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb index df17d9079..c48288b3b 100644 --- a/app/services/activitypub/fetch_remote_key_service.rb +++ b/app/services/activitypub/fetch_remote_key_service.rb @@ -5,6 +5,8 @@ class ActivityPub::FetchRemoteKeyService < BaseService # Returns account that owns the key def call(uri, id: true, prefetched_body: nil) + return if uri.blank? + if prefetched_body.nil? if id @json = fetch_resource_without_id_validation(uri) diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 27b088240..2c80175e7 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -88,6 +88,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.url = url || @uri @account.uri = @uri @account.actor_type = actor_type + @account.created_at = @json['published'] if @json['published'].present? end def set_immediate_attributes! @@ -102,7 +103,7 @@ class ActivityPub::ProcessAccountService < BaseService end def set_fetchable_key! - @account.public_key = public_key || '' + @account.public_key = public_key || '' end def set_fetchable_attributes! diff --git a/app/services/after_block_service.rb b/app/services/after_block_service.rb index 314919df8..899e84be4 100644 --- a/app/services/after_block_service.rb +++ b/app/services/after_block_service.rb @@ -6,6 +6,7 @@ class AfterBlockService < BaseService @target_account = target_account clear_home_feed! + clear_list_feeds! clear_notifications! clear_conversations! end @@ -16,6 +17,10 @@ class AfterBlockService < BaseService FeedManager.instance.clear_from_home(@account, @target_account) end + def clear_list_feeds! + FeedManager.instance.clear_from_lists(@account, @target_account) + end + def clear_conversations! AccountConversation.where(account: @account).where('? = ANY(participant_account_ids)', @target_account.id).in_batches.destroy_all end diff --git a/app/services/bootstrap_timeline_service.rb b/app/services/bootstrap_timeline_service.rb index 8412aa7e7..e1a1b98c3 100644 --- a/app/services/bootstrap_timeline_service.rb +++ b/app/services/bootstrap_timeline_service.rb @@ -5,48 +5,13 @@ class BootstrapTimelineService < BaseService @source_account = source_account autofollow_inviter! - autofollow_bootstrap_timeline_accounts! if Setting.enable_bootstrap_timeline_accounts end private def autofollow_inviter! return unless @source_account&.user&.invite&.autofollow? - FollowService.new.call(@source_account, @source_account.user.invite.user.account) - end - - def autofollow_bootstrap_timeline_accounts! - bootstrap_timeline_accounts.each do |target_account| - begin - FollowService.new.call(@source_account, target_account) - rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError - nil - end - end - end - - def bootstrap_timeline_accounts - return @bootstrap_timeline_accounts if defined?(@bootstrap_timeline_accounts) - - @bootstrap_timeline_accounts = bootstrap_timeline_accounts_usernames.empty? ? admin_accounts : local_unlocked_accounts(bootstrap_timeline_accounts_usernames) - end - - def bootstrap_timeline_accounts_usernames - @bootstrap_timeline_accounts_usernames ||= (Setting.bootstrap_timeline_accounts || '').split(',').map { |str| str.strip.gsub(/\A@/, '') }.reject(&:blank?) - end - def admin_accounts - User.admins - .includes(:account) - .where(accounts: { locked: false }) - .map(&:account) - end - - def local_unlocked_accounts(usernames) - Account.local - .without_suspended - .where(username: usernames) - .where(locked: false) - .where(moved_to_account_id: nil) + FollowService.new.call(@source_account, @source_account.user.invite.user.account) end end diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index d3db07a74..329262cca 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -30,6 +30,11 @@ class FollowService < BaseService ActivityTracker.increment('activity:interactions') + # When an account follows someone for the first time, avoid showing + # an empty home feed while the follow request is being processed + # and the feeds are being merged + mark_home_feed_as_partial! if @source_account.not_following_anyone? + if (@target_account.locked? && !@options[:bypass_locked]) || @source_account.silenced? || @target_account.activitypub? request_follow! elsif @target_account.local? @@ -39,6 +44,10 @@ class FollowService < BaseService private + def mark_home_feed_as_partial! + redis.set("account:#{@source_account.id}:regeneration", true, nx: true, ex: 1.day.seconds) + end + def following_not_possible? @target_account.nil? || @target_account.id == @source_account.id || @target_account.suspended? end diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index e8e139b05..c42b79db8 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -8,8 +8,7 @@ class ProcessHashtagsService < BaseService Tag.find_or_create_by_names(tags) do |tag| status.tags << tag records << tag - - TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility? + tag.use!(status.account, status: status, at_time: status.created_at) if status.public_visibility? end return unless status.distributable? diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 570cd8272..ec4cb11f9 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -43,7 +43,6 @@ class ProcessMentionsService < BaseService end status.save! - check_for_spam(status) mentions.each { |mention| create_notification(mention) } end @@ -72,8 +71,4 @@ class ProcessMentionsService < BaseService def resolve_account_service ResolveAccountService.new end - - def check_for_spam(status) - SpamCheck.perform(status) - end end diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb index 6f018e24b..f41276de0 100644 --- a/app/services/reblog_service.rb +++ b/app/services/reblog_service.rb @@ -35,6 +35,7 @@ class ReblogService < BaseService create_notification(reblog) bump_potential_friendship(account, reblog) + record_use(account, reblog) reblog end @@ -59,6 +60,16 @@ class ReblogService < BaseService PotentialFriendshipTracker.record(account.id, reblog.reblog.account_id, :reblog) end + def record_use(account, reblog) + return unless reblog.public_visibility? + + original_status = reblog.reblog + + original_status.tags.each do |tag| + tag.use!(account) + end + end + def build_json(reblog) Oj.dump(serialize_payload(ActivityPub::ActivityPresenter.from_status(reblog), ActivityPub::ActivitySerializer, signer: reblog.account)) end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 764ed288d..5cc1dba06 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -16,6 +16,8 @@ class RemoveStatusService < BaseService @account = status.account @options = options + @status.discard + RedisLock.acquire(lock_options) do |lock| if lock.acquired? remove_from_self if @account.local? @@ -27,10 +29,7 @@ class RemoveStatusService < BaseService # original object being removed implicitly removes reblogs # of it. The Delete activity of the original is forwarded # separately. - if @account.local? && !@options[:original_removed] - remove_from_remote_followers - remove_from_remote_reach - end + remove_from_remote_reach if @account.local? && !@options[:original_removed] # Since reblogs don't mention anyone, don't get reblogged, # favourited and don't contain their own media attachments @@ -42,7 +41,6 @@ class RemoveStatusService < BaseService remove_from_public remove_from_media if @status.media_attachments.any? remove_from_direct if status.direct_visibility? - remove_from_spam_check remove_media end @@ -85,13 +83,10 @@ class RemoveStatusService < BaseService end def remove_from_remote_reach - return if @status.reblog? - - # People who got mentioned in the status, or who - # reblogged it from someone else might not follow - # the author and wouldn't normally receive the - # delete notification - so here, we explicitly - # send it to them + # Followers, relays, people who got mentioned in the status, + # or who reblogged it from someone else might not follow + # the author and wouldn't normally receive the delete + # notification - so here, we explicitly send it to them status_reach_finder = StatusReachFinder.new(@status) @@ -100,24 +95,6 @@ class RemoveStatusService < BaseService end end - def remove_from_remote_followers - ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url| - [signed_activity_json, @account.id, inbox_url] - end - - relay! if relayable? - end - - def relayable? - @status.public_visibility? - end - - def relay! - ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| - [signed_activity_json, @account.id, inbox_url] - end - end - def signed_activity_json @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account)) end @@ -171,10 +148,6 @@ class RemoveStatusService < BaseService @status.media_attachments.destroy_all end - def remove_from_spam_check - redis.zremrangebyscore("spam_check:#{@status.account_id}", @status.id, @status.id) - end - def lock_options { redis: Redis.current, key: "distribute:#{@status.id}" } end diff --git a/app/services/report_service.rb b/app/services/report_service.rb index 9d9c7d6c9..bc0a8b464 100644 --- a/app/services/report_service.rb +++ b/app/services/report_service.rb @@ -10,6 +10,8 @@ class ReportService < BaseService @comment = options.delete(:comment) || '' @options = options + raise ActiveRecord::RecordNotFound if @target_account.suspended? + create_report! notify_staff! forward_to_origin! if !@target_account.local? && ActiveModel::Type::Boolean.new.cast(@options[:forward]) diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index b8ddeb2ad..493995447 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -122,7 +122,7 @@ class ResolveAccountService < BaseService return false if @options[:check_delivery_availability] && !DeliveryFailureTracker.available?(@domain) return false if @options[:skip_webfinger] - @account.nil? || (@account.ostatus? && @account.possibly_stale?) + @account.nil? || @account.possibly_stale? end def activitypub_ready? diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 9f4da91d4..b8dc8d5e0 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -42,7 +42,13 @@ class SuspendAccountService < BaseService end def distribute_update_actor! - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) if @account.local? + return unless @account.local? + + account_reach_finder = AccountReachFinder.new(@account) + + ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url| + [signed_activity_json, @account.id, inbox_url] + end end def unmerge_from_home_timelines! @@ -90,4 +96,8 @@ class SuspendAccountService < BaseService end end end + + def signed_activity_json + @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account)) + end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index ce9ee48ed..949c670aa 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -12,6 +12,7 @@ class UnsuspendAccountService < BaseService merge_into_home_timelines! merge_into_list_timelines! publish_media_attachments! + distribute_update_actor! end private @@ -36,6 +37,16 @@ class UnsuspendAccountService < BaseService # @account would now be nil. end + def distribute_update_actor! + return unless @account.local? + + account_reach_finder = AccountReachFinder.new(@account) + + ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url| + [signed_activity_json, @account.id, inbox_url] + end + end + def merge_into_home_timelines! @account.followers_for_local_distribution.find_each do |follower| FeedManager.instance.merge_into_home(@account, follower) @@ -81,4 +92,8 @@ class UnsuspendAccountService < BaseService end end end + + def signed_activity_json + @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account)) + end end diff --git a/app/validators/blacklisted_email_validator.rb b/app/validators/blacklisted_email_validator.rb index 1ca73fdcc..eb66ad93d 100644 --- a/app/validators/blacklisted_email_validator.rb +++ b/app/validators/blacklisted_email_validator.rb @@ -6,26 +6,25 @@ class BlacklistedEmailValidator < ActiveModel::Validator @email = user.email - user.errors.add(:email, :blocked) if blocked_email? + user.errors.add(:email, :blocked) if blocked_email_provider? + user.errors.add(:email, :taken) if blocked_canonical_email? end private - def blocked_email? - on_blacklist? || not_on_whitelist? + def blocked_email_provider? + disallowed_through_email_domain_block? || disallowed_through_configuration? || not_allowed_through_configuration? end - def on_blacklist? - return true if EmailDomainBlock.block?(@email) - return false if Rails.configuration.x.email_domains_blacklist.blank? - - domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.') - regexp = Regexp.new("@(.+\\.)?(#{domains})", true) + def blocked_canonical_email? + CanonicalEmailBlock.block?(@email) + end - regexp.match?(@email) + def disallowed_through_email_domain_block? + EmailDomainBlock.block?(@email) end - def not_on_whitelist? + def not_allowed_through_configuration? return false if Rails.configuration.x.email_domains_whitelist.blank? domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.') @@ -33,4 +32,13 @@ class BlacklistedEmailValidator < ActiveModel::Validator @email !~ regexp end + + def disallowed_through_configuration? + return false if Rails.configuration.x.email_domains_blacklist.blank? + + domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.') + regexp = Regexp.new("@(.+\\.)?(#{domains})", true) + + regexp.match?(@email) + end end diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb index 723302ec9..8f7d96b8e 100644 --- a/app/validators/existing_username_validator.rb +++ b/app/validators/existing_username_validator.rb @@ -4,11 +4,25 @@ class ExistingUsernameValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) return if value.blank? + usernames_and_domains = begin + value.split(',').map do |str| + username, domain = str.strip.gsub(/\A@/, '').split('@') + domain = nil if TagManager.instance.local_domain?(domain) + + next if username.blank? + + [str, username, domain] + end.compact + end + + usernames_with_no_accounts = usernames_and_domains.filter_map do |(str, username, domain)| + str unless Account.find_remote(username, domain) + end + if options[:multiple] - missing_usernames = value.split(',').map { |username| username.strip.gsub(/\A@/, '') }.filter_map { |username| username unless Account.find_local(username) } - record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: missing_usernames.join(', '))) if missing_usernames.any? + record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: usernames_with_no_accounts.join(', '))) if usernames_with_no_accounts.any? else - record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) unless Account.find_local(value.strip.gsub(/\A@/, '')) + record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) if usernames_with_no_accounts.any? || usernames_and_domains.size > 1 end end end diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index 52fb0d946..76dec18b1 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -1,9 +1,9 @@ .public-account-header{:class => ("inactive" if account.moved?)} .public-account-header__image - = image_tag (current_account&.user&.setting_auto_play_gif ? account.header_original_url : account.header_static_url), class: 'parallax' + = image_tag (prefers_autoplay? ? account.header_original_url : account.header_static_url), class: 'parallax' .public-account-header__bar = link_to short_account_url(account), class: 'avatar' do - = image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url), id: 'profile_page_avatar', data: {original: full_asset_url(account.avatar_original_url), static: full_asset_url(account.avatar_static_url), autoplay: current_account&.user&.setting_auto_play_gif} + = image_tag (prefers_autoplay? ? account.avatar_original_url : account.avatar_static_url), id: 'profile_page_avatar', data: { original: full_asset_url(account.avatar_original_url), static: full_asset_url(account.avatar_static_url), autoplay: prefers_autoplay? } .public-account-header__tabs .public-account-header__tabs__name %h1 diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index f2f0c813d..e25b80846 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -5,7 +5,7 @@ .flash-message-stack - @system_checks.each do |message| .flash-message.warning - = t("admin.system_checks.#{message.key}.message_html", message.value ? { value: content_tag(:strong, message.value) } : {}) + = t("admin.system_checks.#{message.key}.message_html", value: message.value ? content_tag(:strong, message.value) : nil) - if message.action = link_to t("admin.system_checks.#{message.key}.action"), message.action @@ -79,8 +79,6 @@ = feature_hint(link_to(t('admin.dashboard.trends'), edit_admin_settings_path), @trends_enabled) %li = feature_hint(link_to(t('admin.dashboard.feature_relay'), admin_relays_path), @relay_enabled) - %li - = feature_hint(link_to(t('admin.dashboard.feature_spam_check'), edit_admin_settings_path), @spam_check_enabled) .dashboard__widgets__versions %div diff --git a/app/views/admin/follow_recommendations/_account.html.haml b/app/views/admin/follow_recommendations/_account.html.haml new file mode 100644 index 000000000..af5a4aaf7 --- /dev/null +++ b/app/views/admin/follow_recommendations/_account.html.haml @@ -0,0 +1,20 @@ +.batch-table__row + %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox + = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id + .batch-table__row__content.batch-table__row__content--unpadded + %table.accounts-table + %tbody + %tr + %td= account_link_to account + %td.accounts-table__count.optional + = number_to_human account.statuses_count, strip_insignificant_zeros: true + %small= t('accounts.posts', count: account.statuses_count).downcase + %td.accounts-table__count.optional + = number_to_human account.followers_count, strip_insignificant_zeros: true + %small= t('accounts.followers', count: account.followers_count).downcase + %td.accounts-table__count + - if account.last_status_at.present? + %time.time-ago{ datetime: account.last_status_at.to_date.iso8601, title: l(account.last_status_at.to_date) }= l account.last_status_at + - else + \- + %small= t('accounts.last_active') diff --git a/app/views/admin/follow_recommendations/show.html.haml b/app/views/admin/follow_recommendations/show.html.haml new file mode 100644 index 000000000..2878f07d7 --- /dev/null +++ b/app/views/admin/follow_recommendations/show.html.haml @@ -0,0 +1,38 @@ +- content_for :page_title do + = t('admin.follow_recommendations.title') + +%p= t('admin.follow_recommendations.description_html') + +%hr.spacer/ + += form_tag admin_follow_recommendations_path, method: 'GET', class: 'simple_form' do + .filters + .filter-subset.filter-subset--with-select + %strong= t('admin.follow_recommendations.language') + .input.select.optional + = select_tag :language, options_for_select(I18n.available_locales.map { |key| [human_locale(key), key]}, @language) + + .filter-subset + %strong= t('admin.follow_recommendations.status') + %ul + %li= filter_link_to t('admin.accounts.moderation.active'), status: nil + %li= filter_link_to t('admin.follow_recommendations.suppressed'), status: 'suppressed' + += form_for(@form, url: admin_follow_recommendations_path, method: :patch) do |f| + - RelationshipFilter::KEYS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - if params[:status].blank? && can?(:suppress, :follow_recommendation) + = f.button safe_join([fa_icon('times'), t('admin.follow_recommendations.suppress')]), name: :suppress, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + - if params[:status] == 'suppressed' && can?(:unsuppress, :follow_recommendation) + = f.button safe_join([fa_icon('plus'), t('admin.follow_recommendations.unsuppress')]), name: :unsuppress, class: 'table-action-link', type: :submit + .batch-table__body + - if @accounts.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'account', collection: @accounts, locals: { f: f } diff --git a/app/views/admin/instances/_exhausted_deliveries_days.haml b/app/views/admin/instances/_exhausted_deliveries_days.haml new file mode 100644 index 000000000..e581f542d --- /dev/null +++ b/app/views/admin/instances/_exhausted_deliveries_days.haml @@ -0,0 +1,2 @@ +%li.negative-hint + = l(exhausted_deliveries_days) diff --git a/app/views/admin/instances/_instance.html.haml b/app/views/admin/instances/_instance.html.haml index 188d0d984..990cf9ec8 100644 --- a/app/views/admin/instances/_instance.html.haml +++ b/app/views/admin/instances/_instance.html.haml @@ -22,4 +22,12 @@ = t('admin.accounts.whitelisted') - else = t('admin.accounts.no_limits_imposed') + - if instance.failure_days + = ' / ' + %span.negative-hint + = t('admin.instances.delivery.warning_message', count: instance.failure_days) + - if instance.unavailable_domain + = ' / ' + %span.negative-hint + = t('admin.instances.delivery.unavailable_message') .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml index 7c7958786..797948d94 100644 --- a/app/views/admin/instances/index.html.haml +++ b/app/views/admin/instances/index.html.haml @@ -16,6 +16,24 @@ - unless whitelist_mode? %li= filter_link_to t('admin.instances.moderation.limited'), limited: '1' + .filter-subset + %strong= t('admin.instances.delivery.title') + %ul + %li= filter_link_to t('admin.instances.delivery.all'), warning: nil, unavailable: nil + %li= filter_link_to t('admin.instances.delivery.warning'), warning: '1', unavailable: nil + %li= filter_link_to t('admin.instances.delivery.unavailable'), warning: nil, unavailable: '1' + + .back-link + = link_to admin_instances_path() do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_all') + = link_to admin_instances_path(limited: 1) do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_limited') + = link_to admin_instances_path(warning: 1) do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_warning') + - unless whitelist_mode? = form_tag admin_instances_url, method: 'GET', class: 'simple_form' do .fields-group diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index 0b9382771..462529338 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -1,6 +1,18 @@ - content_for :page_title do = @instance.domain +.filters + .back-link + = link_to admin_instances_path() do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_all') + = link_to admin_instances_path(limited: 1) do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_limited') + = link_to admin_instances_path(warning: 1) do + %i.fa.fa-chevron-left.fa-fw + = t('admin.instances.back_to_warning') + .dashboard__counters %div = link_to admin_accounts_path(remote: '1', by_domain: @instance.domain) do @@ -48,6 +60,13 @@ = simple_format(h(@instance.public_comment)) .speech-bubble__owner= t 'admin.instances.public_comment' +- unless @exhausted_deliveries_days.empty? + %h4= t 'admin.instances.delivery_error_days' + %ul + = render partial: 'exhausted_deliveries_days', collection: @exhausted_deliveries_days + %p.hint + = t 'admin.instances.delivery_error_hint', count: DeliveryFailureTracker::FAILURE_DAYS_THRESHOLD + %hr.spacer/ %div.action-buttons @@ -59,3 +78,9 @@ = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button' - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button' + - if @instance.delivery_failure_tracker.available? + - unless @exhausted_deliveries_days.empty? + = link_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button' + = link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button' + - else + = link_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post }, class: 'button' diff --git a/app/views/admin/rules/index.html.haml b/app/views/admin/rules/index.html.haml index 3b069d083..4fb993ad0 100644 --- a/app/views/admin/rules/index.html.haml +++ b/app/views/admin/rules/index.html.haml @@ -1,8 +1,9 @@ - content_for :page_title do = t('admin.rules.title') -.simple_form - %p.hint= t('admin.rules.description') +%p= t('admin.rules.description_html') + +%hr.spacer/ - if can? :create, :rule = simple_form_for @rule, url: admin_rules_path do |f| diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index fa8d8441e..373811ea3 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -47,10 +47,7 @@ %hr.spacer/ .fields-group - = f.input :enable_bootstrap_timeline_accounts, as: :boolean, wrapper: :with_label, label: t('admin.settings.enable_bootstrap_timeline_accounts.title'), hint: t('admin.settings.enable_bootstrap_timeline_accounts.desc_html') - - .fields-group - = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label, label: t('admin.settings.bootstrap_timeline_accounts.title'), hint: t('admin.settings.bootstrap_timeline_accounts.desc_html'), disabled: !Setting.enable_bootstrap_timeline_accounts + = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label, label: t('admin.settings.bootstrap_timeline_accounts.title'), hint: t('admin.settings.bootstrap_timeline_accounts.desc_html') %hr.spacer/ @@ -69,10 +66,10 @@ - unless whitelist_mode? .fields-group - = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html') + = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html'), recommended: true .fields-group - = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html') + = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html'), recommended: true .fields-group = f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html') @@ -101,9 +98,6 @@ .fields-group = f.input :show_replies_in_public_timelines, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_replies_in_public_timelines.title'), hint: t('admin.settings.show_replies_in_public_timelines.desc_html') - .fields-group - = f.input :spam_check_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.spam_check_enabled.title'), hint: t('admin.settings.spam_check_enabled.desc_html') - %hr.spacer/ .fields-group diff --git a/app/views/admin/tags/_tag.html.haml b/app/views/admin/tags/_tag.html.haml index 287d28e53..adf4ca7b2 100644 --- a/app/views/admin/tags/_tag.html.haml +++ b/app/views/admin/tags/_tag.html.haml @@ -10,8 +10,6 @@ = tag.name %small - = t('admin.tags.in_directory', count: tag.accounts_count) - • = t('admin.tags.unique_uses_today', count: tag.history.first[:accounts]) - if tag.trending? diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index 72eef18a9..e25b0ae84 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -3,12 +3,6 @@ .filters .filter-subset - %strong= t('admin.tags.context') - %ul - %li= filter_link_to t('generic.all'), directory: nil - %li= filter_link_to t('admin.tags.directory'), directory: '1' - - .filter-subset %strong= t('admin.tags.review') %ul %li= filter_link_to t('generic.all'), reviewed: nil, unreviewed: nil, pending_review: nil @@ -20,8 +14,9 @@ %strong= t('generic.order_by') %ul %li= filter_link_to t('admin.tags.most_recent'), popular: nil, active: nil - %li= filter_link_to t('admin.tags.most_popular'), popular: '1', active: nil %li= filter_link_to t('admin.tags.last_active'), active: '1', popular: nil + %li= filter_link_to t('admin.tags.most_popular'), popular: '1', active: nil + = form_tag admin_tags_url, method: 'GET', class: 'simple_form' do .fields-group diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index c9a147587..c4caffda1 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -10,15 +10,6 @@ %div .dashboard__counters__num= number_with_delimiter @accounts_week .dashboard__counters__label= t 'admin.tags.accounts_week' - %div - - if @tag.accounts_count > 0 - = link_to explore_hashtag_path(@tag) do - .dashboard__counters__num= number_with_delimiter @tag.accounts_count - .dashboard__counters__label= t 'admin.tags.directory' - - else - %div - .dashboard__counters__num= number_with_delimiter @tag.accounts_count - .dashboard__counters__label= t 'admin.tags.directory' %hr.spacer/ @@ -30,8 +21,8 @@ .fields-group = f.input :usable, as: :boolean, wrapper: :with_label - = f.input :trendable, as: :boolean, wrapper: :with_label, disabled: !Setting.trends - = f.input :listable, as: :boolean, wrapper: :with_label, disabled: !Setting.profile_directory + = f.input :trendable, as: :boolean, wrapper: :with_label + = f.input :listable, as: :boolean, wrapper: :with_label .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/media/player.html.haml b/app/views/media/player.html.haml index 191586248..c1d630a63 100644 --- a/app/views/media/player.html.haml +++ b/app/views/media/player.html.haml @@ -9,8 +9,11 @@ = render partial: 'layouts/theme', object: @core = render partial: 'layouts/theme', object: @theme +:ruby + meta = @media_attachment.file.meta || {} + - if @media_attachment.video? - = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), frameRate: @media_attachment.file.meta.dig('original', 'frame_rate'), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description, media: [ActiveModelSerializers::SerializableResource.new(@media_attachment, serializer: REST::MediaAttachmentSerializer)].as_json do + = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), frameRate: meta.dig('original', 'frame_rate'), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description, media: [ActiveModelSerializers::SerializableResource.new(@media_attachment, serializer: REST::MediaAttachmentSerializer)].as_json do %video{ controls: 'controls' } %source{ src: @media_attachment.file.url(:original) } - elsif @media_attachment.gifv? @@ -18,6 +21,6 @@ %video{ autoplay: 'autoplay', muted: 'muted', loop: 'loop' } %source{ src: @media_attachment.file.url(:original) } - elsif @media_attachment.audio? - = react_component :audio, src: @media_attachment.file.url(:original), poster: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.account.avatar_static_url, backgroundColor: @media_attachment.file.meta.dig('colors', 'background'), foregroundColor: @media_attachment.file.meta.dig('colors', 'foreground'), accentColor: @media_attachment.file.meta.dig('colors', 'accent'), width: 670, height: 380, fullscreen: true, alt: @media_attachment.description, duration: @media_attachment.file.meta.dig(:original, :duration) do + = react_component :audio, src: @media_attachment.file.url(:original), poster: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.account.avatar_static_url, backgroundColor: meta.dig('colors', 'background'), foregroundColor: meta.dig('colors', 'foreground'), accentColor: meta.dig('colors', 'accent'), width: 670, height: 380, fullscreen: true, alt: @media_attachment.description, duration: meta.dig(:original, :duration) do %audio{ controls: 'controls' } %source{ src: @media_attachment.file.url(:original) } diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index 93af131e5..daf164949 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -2,13 +2,13 @@ .p-author.h-card = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'detailed-status__display-name u-url', target: stream_link_target, rel: 'noopener' do .detailed-status__display-avatar - - if current_account&.user&.setting_auto_play_gif || autoplay + - if prefers_autoplay? = image_tag status.account.avatar_original_url, alt: '', class: 'account__avatar u-photo' - else = image_tag status.account.avatar_static_url, alt: '', class: 'account__avatar u-photo' %span.display-name %bdi - %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay) + %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: prefers_autoplay?) %span.display-name__account = acct(status.account) = fa_icon('lock') if status.account.locked? @@ -18,28 +18,22 @@ .status__content.emojify{ :data => ({ spoiler: current_account&.user&.setting_expand_spoilers ? 'expanded' : 'folded' } if status.spoiler_text?) }< - if status.spoiler_text? %p< - %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} + %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: prefers_autoplay?)} %button.status__content__spoiler-link= t('statuses.show_more') .e-content - = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) + = Formatter.instance.format(status, custom_emojify: true, autoplay: prefers_autoplay?) - if status.preloadable_poll - = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do - = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } + = render_poll_component(status) - if !status.media_attachments.empty? - if status.media_attachments.first.video? - - video = status.media_attachments.first - = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 670, height: 380, detailed: true, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_video_component(status, width: 670, height: 380, detailed: true) - elsif status.media_attachments.first.audio? - - audio = status.media_attachments.first - = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 670, height: 380, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_audio_component(status, width: 670, height: 380) - else - = react_component :media_gallery, height: 380, sensitive: sensitized?(status, current_account), standalone: true, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_media_gallery_component(status, height: 380, standalone: true) - elsif status.preview_card - = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json + = render_card_component(status) .detailed-status__meta %data.dt-published{ value: status.created_at.to_time.iso8601 } diff --git a/app/views/statuses/_poll.html.haml b/app/views/statuses/_poll.html.haml index 64e62e97c..3546a923e 100644 --- a/app/views/statuses/_poll.html.haml +++ b/app/views/statuses/_poll.html.haml @@ -12,7 +12,7 @@ %span.poll__number>< = "#{percent.round}%" %span.poll__option__text - = Formatter.instance.format_poll_option(status, option, autoplay: autoplay) + = Formatter.instance.format_poll_option(status, option, autoplay: prefers_autoplay?) - if own_votes.include?(index) %span.poll__voted %i.poll__voted__mark.fa.fa-check @@ -23,7 +23,7 @@ %label.poll__option>< %span.poll__input{ class: poll.multiple? ? 'checkbox' : nil}>< %span.poll__option__text - = Formatter.instance.format_poll_option(status, option, autoplay: autoplay) + = Formatter.instance.format_poll_option(status, option, autoplay: prefers_autoplay?) .poll__footer - unless show_results %button.button.button-secondary{ disabled: true } diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index ab163245d..a7c78b997 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -13,13 +13,13 @@ = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'status__display-name u-url', target: stream_link_target, rel: 'noopener noreferrer' do .status__avatar %div - - if current_account&.user&.setting_auto_play_gif || autoplay + - if prefers_autoplay? = image_tag status.account.avatar_original_url, alt: '', class: 'u-photo account__avatar' - else = image_tag status.account.avatar_static_url, alt: '', class: 'u-photo account__avatar' %span.display-name %bdi - %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay) + %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: prefers_autoplay?) = ' ' %span.display-name__account = acct(status.account) @@ -27,28 +27,22 @@ .status__content.emojify{ :data => ({ spoiler: current_account&.user&.setting_expand_spoilers ? 'expanded' : 'folded' } if status.spoiler_text?) }< - if status.spoiler_text? %p< - %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} + %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: prefers_autoplay?)} %button.status__content__spoiler-link= t('statuses.show_more') .e-content< - = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) + = Formatter.instance.format(status, custom_emojify: true, autoplay: prefers_autoplay?) - if status.preloadable_poll - = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do - = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } + = render_poll_component(status) - if !status.media_attachments.empty? - if status.media_attachments.first.video? - - video = status.media_attachments.first - = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 610, height: 343, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_video_component(status, width: 610, height: 343) - elsif status.media_attachments.first.audio? - - audio = status.media_attachments.first - = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 610, height: 343, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_audio_component(status, width: 610, height: 343) - else - = react_component :media_gallery, height: 343, sensitive: sensitized?(status, current_account), autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do - = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + = render_media_gallery_component(status, height: 343) - elsif status.preview_card - = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json + = render_card_component(status) - if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id && !hide_show_thread = link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__content__read-more-button', target: stream_link_target, rel: 'noopener noreferrer' do diff --git a/app/views/statuses/_status.html.haml b/app/views/statuses/_status.html.haml index 13a06519c..9f3197d0d 100644 --- a/app/views/statuses/_status.html.haml +++ b/app/views/statuses/_status.html.haml @@ -5,7 +5,6 @@ is_successor ||= false direct_reply_id ||= false parent_id ||= false - autoplay ||= current_account&.user&.setting_auto_play_gif is_direct_parent = direct_reply_id == status.id is_direct_child = parent_id == status.in_reply_to_id centered ||= include_threads && !is_predecessor && !is_successor @@ -19,7 +18,7 @@ .entry{ class: entry_classes } = link_to_older ActivityPub::TagManager.instance.url_for(@next_ancestor) - = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }, autoplay: autoplay + = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id } .entry{ class: entry_classes } @@ -39,14 +38,14 @@ %span = t('stream_entries.pinned') - = render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, autoplay: autoplay, hide_show_thread: is_predecessor || is_successor + = render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, hide_show_thread: is_predecessor || is_successor - if include_threads - if @since_descendant_thread_id .entry{ class: entry_classes } = link_to_newer short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1) - @descendant_threads.each do |thread| - = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }, autoplay: autoplay + = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id } - if thread[:next_status] .entry{ class: entry_classes } diff --git a/app/views/statuses/embed.html.haml b/app/views/statuses/embed.html.haml index 2f111f53f..18d62fd8e 100644 --- a/app/views/statuses/embed.html.haml +++ b/app/views/statuses/embed.html.haml @@ -1,2 +1,2 @@ .activity-stream.activity-stream--headless - = render 'status', status: @status, centered: true, autoplay: @autoplay + = render 'status', status: @status, centered: true diff --git a/app/views/user_mailer/webauthn_enabled.text.erb b/app/views/user_mailer/webauthn_enabled.text.erb index 4c233fefb..d4482a69b 100644 --- a/app/views/user_mailer/webauthn_enabled.text.erb +++ b/app/views/user_mailer/webauthn_enabled.text.erb @@ -1,7 +1,7 @@ -<%= t 'devise.mailer.webauthn_credentia.added.title' %> +<%= t 'devise.mailer.webauthn_credential.added.title' %> === -<%= t 'devise.mailer.webauthn_credentia.added.explanation' %> +<%= t 'devise.mailer.webauthn_credential.added.explanation' %> => <%= edit_user_registration_url %> diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb index 9b4814644..09898ca49 100644 --- a/app/workers/activitypub/distribution_worker.rb +++ b/app/workers/activitypub/distribution_worker.rb @@ -35,7 +35,7 @@ class ActivityPub::DistributionWorker # Deliver the status to all followers. # If the status is a reply to another local status, also forward it to that # status' authors' followers. - @inboxes ||= if @status.reply? && @status.thread.account.local? && @status.distributable? + @inboxes ||= if @status.in_reply_to_local_account? && @status.distributable? @account.followers.or(@status.thread.account.followers).inboxes else @account.followers.inboxes diff --git a/app/workers/import/relationship_worker.rb b/app/workers/import/relationship_worker.rb index 4a7100435..6791b15c3 100644 --- a/app/workers/import/relationship_worker.rb +++ b/app/workers/import/relationship_worker.rb @@ -5,7 +5,7 @@ class Import::RelationshipWorker sidekiq_options queue: 'pull', retry: 8, dead: false - def perform(account_id, target_account_uri, relationship, options = {}) + def perform(account_id, target_account_uri, relationship, options) from_account = Account.find(account_id) target_domain = domain(target_account_uri) target_account = stoplight_wrap_request(target_domain) { ResolveAccountService.new.call(target_account_uri, { check_delivery_availability: true }) } @@ -16,7 +16,7 @@ class Import::RelationshipWorker case relationship when 'follow' begin - FollowService.new.call(from_account, target_account, options) + FollowService.new.call(from_account, target_account, **options) rescue ActiveRecord::RecordInvalid raise if FollowLimitValidator.limit_for_account(from_account) < from_account.following_count end @@ -27,7 +27,7 @@ class Import::RelationshipWorker when 'unblock' UnblockService.new.call(from_account, target_account) when 'mute' - MuteService.new.call(from_account, target_account, options) + MuteService.new.call(from_account, target_account, **options) when 'unmute' UnmuteService.new.call(from_account, target_account) end diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb index 74ef7d4da..6ebb9a400 100644 --- a/app/workers/merge_worker.rb +++ b/app/workers/merge_worker.rb @@ -3,11 +3,11 @@ class MergeWorker include Sidekiq::Worker - sidekiq_options queue: 'pull' - def perform(from_account_id, into_account_id) FeedManager.instance.merge_into_home(Account.find(from_account_id), Account.find(into_account_id)) rescue ActiveRecord::RecordNotFound true + ensure + Redis.current.del("account:#{into_account_id}:regeneration") end end diff --git a/app/workers/redownload_media_worker.rb b/app/workers/redownload_media_worker.rb index 0638cd0f0..343caa32c 100644 --- a/app/workers/redownload_media_worker.rb +++ b/app/workers/redownload_media_worker.rb @@ -3,6 +3,7 @@ class RedownloadMediaWorker include Sidekiq::Worker include ExponentialBackoff + include JsonLdHelper sidekiq_options queue: 'pull', retry: 3 @@ -15,6 +16,14 @@ class RedownloadMediaWorker media_attachment.download_thumbnail! media_attachment.save rescue ActiveRecord::RecordNotFound - true + # Do nothing + rescue Mastodon::UnexpectedResponseError => e + response = e.response + + if response_error_unsalvageable?(response) + # Give up + else + raise e + end end end diff --git a/app/workers/scheduler/follow_recommendations_scheduler.rb b/app/workers/scheduler/follow_recommendations_scheduler.rb new file mode 100644 index 000000000..cb1e15961 --- /dev/null +++ b/app/workers/scheduler/follow_recommendations_scheduler.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +class Scheduler::FollowRecommendationsScheduler + include Sidekiq::Worker + include Redisable + + sidekiq_options retry: 0 + + # The maximum number of accounts that can be requested in one page from the + # API is 80, and the suggestions API does not allow pagination. This number + # leaves some room for accounts being filtered during live access + SET_SIZE = 100 + + def perform + # Maintaining a materialized view speeds-up subsequent queries significantly + AccountSummary.refresh + FollowRecommendation.refresh + + fallback_recommendations = FollowRecommendation.limit(SET_SIZE).index_by(&:account_id) + + I18n.available_locales.each do |locale| + recommendations = begin + if AccountSummary.safe.filtered.localized(locale).exists? # We can skip the work if no accounts with that language exist + FollowRecommendation.localized(locale).limit(SET_SIZE).index_by(&:account_id) + else + {} + end + end + + # Use language-agnostic results if there are not enough language-specific ones + missing = SET_SIZE - recommendations.keys.size + + if missing.positive? + added = 0 + + # Avoid duplicate results + fallback_recommendations.each_value do |recommendation| + next if recommendations.key?(recommendation.account_id) + + recommendations[recommendation.account_id] = recommendation + added += 1 + + break if added >= missing + end + end + + redis.pipelined do + redis.del(key(locale)) + + recommendations.each_value do |recommendation| + redis.zadd(key(locale), recommendation.rank, recommendation.account_id) + end + end + end + end + + private + + def key(locale) + "follow_recommendations:#{locale}" + end +end diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb index 8bba9ca75..1b77dfdd9 100644 --- a/app/workers/thread_resolve_worker.rb +++ b/app/workers/thread_resolve_worker.rb @@ -14,5 +14,7 @@ class ThreadResolveWorker child_status.thread = parent_status child_status.save! + rescue ActiveRecord::RecordNotFound + true end end diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index 46aeaa30b..57f5b5c22 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -3,22 +3,67 @@ class Web::PushNotificationWorker include Sidekiq::Worker - sidekiq_options backtrace: true, retry: 5 + sidekiq_options queue: 'push', retry: 5 + + TTL = 48.hours.to_s + URGENCY = 'normal' def perform(subscription_id, notification_id) - subscription = ::Web::PushSubscription.find(subscription_id) - notification = Notification.find(notification_id) + @subscription = Web::PushSubscription.find(subscription_id) + @notification = Notification.find(notification_id) + + # Polymorphically associated activity could have been deleted + # in the meantime, so we have to double-check before proceeding + return unless @notification.activity.present? && @subscription.pushable?(@notification) + + payload = @subscription.encrypt(push_notification_json) - subscription.push(notification) unless notification.activity.nil? - rescue Webpush::ResponseError => e - code = e.response.code.to_i + request_pool.with(@subscription.audience) do |http_client| + request = Request.new(:post, @subscription.endpoint, body: payload.fetch(:ciphertext), http_client: http_client) - if (400..499).cover?(code) && ![408, 429].include?(code) - subscription.destroy! - else - raise e + request.add_headers( + 'Content-Type' => 'application/octet-stream', + 'Ttl' => TTL, + 'Urgency' => URGENCY, + 'Content-Encoding' => 'aesgcm', + 'Encryption' => "salt=#{Webpush.encode64(payload.fetch(:salt)).delete('=')}", + 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{@subscription.crypto_key_header}", + 'Authorization' => @subscription.authorization_header + ) + + request.perform do |response| + # If the server responds with an error in the 4xx range + # that isn't about rate-limiting or timeouts, we can + # assume that the subscription is invalid or expired + # and must be removed + + if (400..499).cover?(response.code) && ![408, 429].include?(response.code) + @subscription.destroy! + elsif !(200...300).cover?(response.code) + raise Mastodon::UnexpectedResponseError, response + end + end end rescue ActiveRecord::RecordNotFound true end + + private + + def push_notification_json + json = I18n.with_locale(@subscription.locale || I18n.default_locale) do + ActiveModelSerializers::SerializableResource.new( + @notification, + serializer: Web::NotificationSerializer, + scope: @subscription, + scope_name: :current_push_subscription + ).as_json + end + + Oj.dump(json) + end + + def request_pool + RequestPool.current + end end |