From 995e15c24ab24bf153463299ded92db89116fa13 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Thu, 7 Mar 2024 11:03:41 +0000 Subject: [PATCH 01/26] Add Jawi Malay to posting languages (#29098) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 65ade9fd2a7015..539020ece94c8a 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -109,6 +109,7 @@ module LanguagesHelper mn: ['Mongolian', 'Монгол хэл'].freeze, mr: ['Marathi', 'मराठी'].freeze, ms: ['Malay', 'Bahasa Melayu'].freeze, + 'ms-Arab': ['Jawi Malay', 'بهاس ملايو'].freeze, mt: ['Maltese', 'Malti'].freeze, my: ['Burmese', 'ဗမာစာ'].freeze, na: ['Nauru', 'Ekakairũ Naoero'].freeze, From c01f4cebed27a1c11085e8aebe7719b3cee7ae7f Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Thu, 7 Mar 2024 11:04:31 +0000 Subject: [PATCH 02/26] Add Mohawk to posting languages (#27115) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 539020ece94c8a..79d8cf794c729f 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -197,6 +197,7 @@ module LanguagesHelper kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze, + moh: ['Mohawk', 'Kanienʼkéha'].freeze, pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze, sco: ['Scots', 'Scots'].freeze, sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze, From 653ce43abe0a928d944a15c433d2c8324f9b5e2a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Thu, 7 Mar 2024 12:11:14 +0100 Subject: [PATCH 03/26] Update `json-jwt` gem to fix CVE-2023-51774 (#29520) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6ee799eab2ca2c..59b24e1035d4e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -357,7 +357,7 @@ GEM jmespath (1.6.2) json (2.7.1) json-canonicalization (1.0.0) - json-jwt (1.15.3) + json-jwt (1.15.3.1) activesupport (>= 4.2) aes_key_wrap bindata From 50b17f7e10fe2576f0526768a9269f3013932d8a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 7 Mar 2024 15:53:37 +0100 Subject: [PATCH 04/26] Add notification policies and notification requests (#29366) --- .../v1/notifications/policies_controller.rb | 37 +++ .../v1/notifications/requests_controller.rb | 75 +++++ .../api/v1/notifications_controller.rb | 7 +- app/models/concerns/account/associations.rb | 7 +- app/models/notification.rb | 11 +- app/models/notification_permission.rb | 16 ++ app/models/notification_policy.rb | 36 +++ app/models/notification_request.rb | 53 ++++ .../rest/notification_policy_serializer.rb | 16 ++ .../rest/notification_request_serializer.rb | 16 ++ .../accept_notification_request_service.rb | 8 + app/services/notify_service.rb | 259 +++++++++++------- .../preferences/notifications/show.html.haml | 8 - app/workers/unfilter_notifications_worker.rb | 37 +++ config/locales/an.yml | 1 - config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 1 - config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 1 - config/locales/de.yml | 1 - config/locales/el.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/en.yml | 1 - config/locales/eo.yml | 1 - config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 1 - config/locales/he.yml | 1 - config/locales/hu.yml | 1 - config/locales/hy.yml | 1 - config/locales/id.yml | 1 - config/locales/ie.yml | 1 - config/locales/io.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/kab.yml | 2 - config/locales/kk.yml | 1 - config/locales/ko.yml | 1 - config/locales/ku.yml | 1 - config/locales/lad.yml | 1 - config/locales/lv.yml | 1 - config/locales/ms.yml | 1 - config/locales/my.yml | 1 - config/locales/nl.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/oc.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/sc.yml | 1 - config/locales/sco.yml | 1 - config/locales/si.yml | 1 - config/locales/sk.yml | 1 - config/locales/sl.yml | 1 - config/locales/sq.yml | 1 - config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 1 - config/locales/ta.yml | 1 - config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 1 - config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - config/locales/zh-TW.yml | 1 - config/routes/api.rb | 11 + ...221195424_add_filtered_to_notifications.rb | 7 + ...0221195828_create_notification_requests.rb | 18 ++ ...tification_request_ids_to_timestamp_ids.rb | 15 + ...2193403_create_notification_permissions.rb | 12 + ...0222203722_create_notification_policies.rb | 15 + ...620_add_filtered_index_on_notifications.rb | 9 + ..._migrate_interaction_settings_to_policy.rb | 46 ++++ db/schema.rb | 44 ++- .../notifications_controller_spec.rb | 4 +- .../notification_permission_fabricator.rb | 6 + .../notification_policy_fabricator.rb | 9 + .../notification_request_fabricator.rb | 8 + spec/models/notification_policy_spec.rb | 25 ++ spec/models/notification_request_spec.rb | 44 +++ spec/requests/api/v1/conversations_spec.rb | 1 + .../api/v1/notifications/policies_spec.rb | 48 ++++ .../api/v1/notifications/requests_spec.rb | 107 ++++++++ spec/services/notify_service_spec.rb | 248 ++++++++++++----- 104 files changed, 1092 insertions(+), 243 deletions(-) create mode 100644 app/controllers/api/v1/notifications/policies_controller.rb create mode 100644 app/controllers/api/v1/notifications/requests_controller.rb create mode 100644 app/models/notification_permission.rb create mode 100644 app/models/notification_policy.rb create mode 100644 app/models/notification_request.rb create mode 100644 app/serializers/rest/notification_policy_serializer.rb create mode 100644 app/serializers/rest/notification_request_serializer.rb create mode 100644 app/services/accept_notification_request_service.rb create mode 100644 app/workers/unfilter_notifications_worker.rb create mode 100644 db/migrate/20240221195424_add_filtered_to_notifications.rb create mode 100644 db/migrate/20240221195828_create_notification_requests.rb create mode 100644 db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb create mode 100644 db/migrate/20240222193403_create_notification_permissions.rb create mode 100644 db/migrate/20240222203722_create_notification_policies.rb create mode 100644 db/migrate/20240227191620_add_filtered_index_on_notifications.rb create mode 100644 db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb create mode 100644 spec/fabricators/notification_permission_fabricator.rb create mode 100644 spec/fabricators/notification_policy_fabricator.rb create mode 100644 spec/fabricators/notification_request_fabricator.rb create mode 100644 spec/models/notification_policy_spec.rb create mode 100644 spec/models/notification_request_spec.rb create mode 100644 spec/requests/api/v1/notifications/policies_spec.rb create mode 100644 spec/requests/api/v1/notifications/requests_spec.rb diff --git a/app/controllers/api/v1/notifications/policies_controller.rb b/app/controllers/api/v1/notifications/policies_controller.rb new file mode 100644 index 00000000000000..1ec336f9a594dc --- /dev/null +++ b/app/controllers/api/v1/notifications/policies_controller.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class Api::V1::Notifications::PoliciesController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :show + before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: :update + + before_action :require_user! + before_action :set_policy + + def show + render json: @policy, serializer: REST::NotificationPolicySerializer + end + + def update + @policy.update!(resource_params) + render json: @policy, serializer: REST::NotificationPolicySerializer + end + + private + + def set_policy + @policy = NotificationPolicy.find_or_initialize_by(account: current_account) + + with_read_replica do + @policy.summarize! + end + end + + def resource_params + params.permit( + :filter_not_following, + :filter_not_followers, + :filter_new_accounts, + :filter_private_mentions + ) + end +end diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb new file mode 100644 index 00000000000000..dbb987153084b9 --- /dev/null +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +class Api::V1::Notifications::RequestsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: :index + + before_action :require_user! + before_action :set_request, except: :index + + after_action :insert_pagination_headers, only: :index + + def index + with_read_replica do + @requests = load_requests + @relationships = relationships + end + + render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships + end + + def accept + AcceptNotificationRequestService.new.call(@request) + render_empty + end + + def dismiss + @request.update!(dismissed: true) + render_empty + end + + private + + def load_requests + requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed)).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + limit_param(DEFAULT_ACCOUNTS_LIMIT), + params_slice(:max_id, :since_id, :min_id) + ) + + NotificationRequest.preload_cache_collection(requests) do |statuses| + cache_collection(statuses, Status) + end + end + + def relationships + StatusRelationshipsPresenter.new(@requests.map(&:last_status), current_user&.account_id) + end + + def set_request + @request = NotificationRequest.where(account: current_account).find(params[:id]) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_notifications_requests_url pagination_params(max_id: pagination_max_id) unless @requests.empty? + end + + def prev_path + api_v1_notifications_requests_url pagination_params(min_id: pagination_since_id) unless @requests.empty? + end + + def pagination_max_id + @requests.last.id + end + + def pagination_since_id + @requests.first.id + end + + def pagination_params(core_params) + params.slice(:dismissed).permit(:dismissed).merge(core_params) + end +end diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb index 406ab97538f245..52280ef6072536 100644 --- a/app/controllers/api/v1/notifications_controller.rb +++ b/app/controllers/api/v1/notifications_controller.rb @@ -49,7 +49,8 @@ def browserable_account_notifications current_account.notifications.without_suspended.browserable( types: Array(browserable_params[:types]), exclude_types: Array(browserable_params[:exclude_types]), - from_account_id: browserable_params[:account_id] + from_account_id: browserable_params[:account_id], + include_filtered: truthy_param?(:include_filtered) ) end @@ -78,10 +79,10 @@ def pagination_since_id end def browserable_params - params.permit(:account_id, types: [], exclude_types: []) + params.permit(:account_id, :include_filtered, types: [], exclude_types: []) end def pagination_params(core_params) - params.slice(:limit, :account_id, :types, :exclude_types).permit(:limit, :account_id, types: [], exclude_types: []).merge(core_params) + params.slice(:limit, :account_id, :types, :exclude_types, :include_filtered).permit(:limit, :account_id, :include_filtered, types: [], exclude_types: []).merge(core_params) end end diff --git a/app/models/concerns/account/associations.rb b/app/models/concerns/account/associations.rb index 2bb6fed5ad0047..b2e9d255fd8adf 100644 --- a/app/models/concerns/account/associations.rb +++ b/app/models/concerns/account/associations.rb @@ -15,10 +15,15 @@ module Account::Associations has_many :favourites, inverse_of: :account, dependent: :destroy has_many :bookmarks, inverse_of: :account, dependent: :destroy has_many :mentions, inverse_of: :account, dependent: :destroy - has_many :notifications, inverse_of: :account, dependent: :destroy has_many :conversations, class_name: 'AccountConversation', dependent: :destroy, inverse_of: :account has_many :scheduled_statuses, inverse_of: :account, dependent: :destroy + # Notifications + has_many :notifications, inverse_of: :account, dependent: :destroy + has_one :notification_policy, inverse_of: :account, dependent: :destroy + has_many :notification_permissions, inverse_of: :account, dependent: :destroy + has_many :notification_requests, inverse_of: :account, dependent: :destroy + # Pinned statuses has_many :status_pins, inverse_of: :account, dependent: :destroy has_many :pinned_statuses, -> { reorder('status_pins.created_at DESC') }, through: :status_pins, class_name: 'Status', source: :status diff --git a/app/models/notification.rb b/app/models/notification.rb index 54212d675f1f9b..e322daea4a9ee2 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -12,6 +12,7 @@ # account_id :bigint(8) not null # from_account_id :bigint(8) not null # type :string +# filtered :boolean default(FALSE), not null # class Notification < ApplicationRecord @@ -89,7 +90,7 @@ def target_status end class << self - def browserable(types: [], exclude_types: [], from_account_id: nil) + def browserable(types: [], exclude_types: [], from_account_id: nil, include_filtered: false) requested_types = if types.empty? TYPES else @@ -99,6 +100,7 @@ def browserable(types: [], exclude_types: [], from_account_id: nil) requested_types -= exclude_types.map(&:to_sym) all.tap do |scope| + scope.merge!(where(filtered: false)) unless include_filtered || from_account_id.present? scope.merge!(where(from_account_id: from_account_id)) if from_account_id.present? scope.merge!(where(type: requested_types)) unless requested_types.size == TYPES.size end @@ -144,6 +146,8 @@ def preload_cache_collection_target_statuses(notifications, &_block) after_initialize :set_from_account before_validation :set_from_account + after_destroy :remove_from_notification_request + private def set_from_account @@ -158,4 +162,9 @@ def set_from_account self.from_account_id = activity&.id end end + + def remove_from_notification_request + notification_request = NotificationRequest.find_by(account_id: account_id, from_account_id: from_account_id) + notification_request&.reconsider_existence! + end end diff --git a/app/models/notification_permission.rb b/app/models/notification_permission.rb new file mode 100644 index 00000000000000..e0001473f815a8 --- /dev/null +++ b/app/models/notification_permission.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_permissions +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# +class NotificationPermission < ApplicationRecord + belongs_to :account + belongs_to :from_account, class_name: 'Account' +end diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb new file mode 100644 index 00000000000000..f10b0c2a816e9e --- /dev/null +++ b/app/models/notification_policy.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_policies +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# filter_not_following :boolean default(FALSE), not null +# filter_not_followers :boolean default(FALSE), not null +# filter_new_accounts :boolean default(FALSE), not null +# filter_private_mentions :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class NotificationPolicy < ApplicationRecord + belongs_to :account + + has_many :notification_requests, primary_key: :account_id, foreign_key: :account_id, dependent: nil, inverse_of: false + + attr_reader :pending_requests_count, :pending_notifications_count + + MAX_MEANINGFUL_COUNT = 100 + + def summarize! + @pending_requests_count = pending_notification_requests.first + @pending_notifications_count = pending_notification_requests.last + end + + private + + def pending_notification_requests + @pending_notification_requests ||= notification_requests.where(dismissed: false).limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) + end +end diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb new file mode 100644 index 00000000000000..7ae7e46d1b8339 --- /dev/null +++ b/app/models/notification_request.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_requests +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null +# last_status_id :bigint(8) not null +# notifications_count :bigint(8) default(0), not null +# dismissed :boolean default(FALSE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class NotificationRequest < ApplicationRecord + include Paginable + + MAX_MEANINGFUL_COUNT = 100 + + belongs_to :account + belongs_to :from_account, class_name: 'Account' + belongs_to :last_status, class_name: 'Status' + + before_save :prepare_notifications_count + + def self.preload_cache_collection(requests) + cached_statuses_by_id = yield(requests.filter_map(&:last_status)).index_by(&:id) # Call cache_collection in block + + requests.each do |request| + request.last_status = cached_statuses_by_id[request.last_status_id] unless request.last_status_id.nil? + end + end + + def reconsider_existence! + return if dismissed? + + prepare_notifications_count + + if notifications_count.positive? + save + else + destroy + end + end + + private + + def prepare_notifications_count + self.notifications_count = Notification.where(account: account, from_account: from_account).limit(MAX_MEANINGFUL_COUNT).count + end +end diff --git a/app/serializers/rest/notification_policy_serializer.rb b/app/serializers/rest/notification_policy_serializer.rb new file mode 100644 index 00000000000000..4967c3e3206b09 --- /dev/null +++ b/app/serializers/rest/notification_policy_serializer.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class REST::NotificationPolicySerializer < ActiveModel::Serializer + attributes :filter_not_following, + :filter_not_followers, + :filter_new_accounts, + :filter_private_mentions, + :summary + + def summary + { + pending_requests_count: object.pending_requests_count.to_s, + pending_notifications_count: object.pending_notifications_count.to_s, + } + end +end diff --git a/app/serializers/rest/notification_request_serializer.rb b/app/serializers/rest/notification_request_serializer.rb new file mode 100644 index 00000000000000..581959d8273b4f --- /dev/null +++ b/app/serializers/rest/notification_request_serializer.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class REST::NotificationRequestSerializer < ActiveModel::Serializer + attributes :id, :created_at, :updated_at, :notifications_count + + belongs_to :from_account, key: :account, serializer: REST::AccountSerializer + belongs_to :last_status, serializer: REST::StatusSerializer + + def id + object.id.to_s + end + + def notifications_count + object.notifications_count.to_s + end +end diff --git a/app/services/accept_notification_request_service.rb b/app/services/accept_notification_request_service.rb new file mode 100644 index 00000000000000..e49eae6fd300e2 --- /dev/null +++ b/app/services/accept_notification_request_service.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class AcceptNotificationRequestService < BaseService + def call(request) + NotificationPermission.create!(account: request.account, from_account: request.from_account) + UnfilterNotificationsWorker.perform_async(request.id) + end +end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 13eb20986e3e65..428fdb4d47c79b 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -11,126 +11,195 @@ class NotifyService < BaseService status ).freeze - def call(recipient, type, activity) - @recipient = recipient - @activity = activity - @notification = Notification.new(account: @recipient, type: type, activity: @activity) + class DismissCondition + def initialize(notification) + @recipient = notification.account + @sender = notification.from_account + @notification = notification + end - return if recipient.user.nil? || blocked? + def dismiss? + blocked = @recipient.unavailable? + blocked ||= from_self? && @notification.type != :poll - @notification.save! + return blocked if message? && from_staff? - # It's possible the underlying activity has been deleted - # between the save call and now - return if @notification.activity.nil? + blocked ||= domain_blocking? + blocked ||= @recipient.blocking?(@sender) + blocked ||= @recipient.muting_notifications?(@sender) + blocked ||= conversation_muted? + blocked ||= blocked_mention? if message? + blocked + end - push_notification! - push_to_conversation! if direct_message? - send_email! if email_needed? - rescue ActiveRecord::RecordInvalid - nil - end + private - private + def blocked_mention? + FeedManager.instance.filter?(:mentions, @notification.target_status, @recipient) + end - def blocked_mention? - FeedManager.instance.filter?(:mentions, @notification.mention.status, @recipient) - end + def message? + @notification.type == :mention + end - def following_sender? - return @following_sender if defined?(@following_sender) + def from_staff? + @sender.local? && @sender.user.present? && @sender.user_role&.overrides?(@recipient.user_role) + end - @following_sender = @recipient.following?(@notification.from_account) || @recipient.requested?(@notification.from_account) - end + def from_self? + @recipient.id == @sender.id + end - def optional_non_follower? - @recipient.user.settings['interactions.must_be_follower'] && !@notification.from_account.following?(@recipient) - end + def domain_blocking? + @recipient.domain_blocking?(@sender.domain) && !following_sender? + end - def optional_non_following? - @recipient.user.settings['interactions.must_be_following'] && !following_sender? - end + def conversation_muted? + @notification.target_status && @recipient.muting_conversation?(@notification.target_status.conversation) + end - def message? - @notification.type == :mention + def following_sender? + @recipient.following?(@sender) + end end - def direct_message? - message? && @notification.target_status.direct_visibility? - end + class FilterCondition + NEW_ACCOUNT_THRESHOLD = 30.days.freeze - # Returns true if the sender has been mentioned by the recipient up the thread - def response_to_recipient? - return false if @notification.target_status.in_reply_to_id.nil? + NEW_FOLLOWER_THRESHOLD = 3.days.freeze - # Using an SQL CTE to avoid unneeded back-and-forth with SQL server in case of long threads - !Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @notification.from_account.id, depth_limit: 100]).zero? - WITH RECURSIVE ancestors(id, in_reply_to_id, mention_id, path, depth) AS ( - SELECT s.id, s.in_reply_to_id, m.id, ARRAY[s.id], 0 - FROM statuses s - LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id - WHERE s.id = :id - UNION ALL - SELECT s.id, s.in_reply_to_id, m.id, st.path || s.id, st.depth + 1 - FROM ancestors st - JOIN statuses s ON s.id = st.in_reply_to_id - LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id - WHERE st.mention_id IS NULL AND NOT s.id = ANY(path) AND st.depth < :depth_limit - ) - SELECT COUNT(*) - FROM ancestors st - JOIN statuses s ON s.id = st.id - WHERE st.mention_id IS NOT NULL AND s.visibility = 3 - SQL - end + def initialize(notification) + @notification = notification + @recipient = notification.account + @sender = notification.from_account + @policy = NotificationPolicy.find_or_initialize_by(account: @recipient) + end - def from_staff? - @notification.from_account.local? && @notification.from_account.user.present? && @notification.from_account.user_role&.overrides?(@recipient.user_role) - end + def filter? + return false if override_for_sender? - def optional_non_following_and_direct? - direct_message? && - @recipient.user.settings['interactions.must_be_following_dm'] && - !following_sender? && - !response_to_recipient? - end + from_limited? || + filtered_by_not_following_policy? || + filtered_by_not_followers_policy? || + filtered_by_new_accounts_policy? || + filtered_by_private_mentions_policy? + end - def hellbanned? - @notification.from_account.silenced? && !following_sender? - end + private - def from_self? - @recipient.id == @notification.from_account.id - end + def filtered_by_not_following_policy? + @policy.filter_not_following? && not_following? + end - def domain_blocking? - @recipient.domain_blocking?(@notification.from_account.domain) && !following_sender? - end + def filtered_by_not_followers_policy? + @policy.filter_not_followers? && not_follower? + end + + def filtered_by_new_accounts_policy? + @policy.filter_new_accounts? && new_account? + end + + def filtered_by_private_mentions_policy? + @policy.filter_private_mentions? && not_following? && private_mention_not_in_response? + end - def blocked? - blocked = @recipient.unavailable? - blocked ||= from_self? && @notification.type != :poll + def not_following? + !@recipient.following?(@sender) + end + + def not_follower? + follow = Follow.find_by(account: @sender, target_account: @recipient) + follow.nil? || follow.created_at > NEW_FOLLOWER_THRESHOLD.ago + end + + def new_account? + @sender.created_at > NEW_ACCOUNT_THRESHOLD.ago + end + + def override_for_sender? + NotificationPermission.exists?(account: @recipient, from_account: @sender) + end + + def from_limited? + @sender.silenced? && not_following? + end + + def private_mention_not_in_response? + @notification.type == :mention && @notification.target_status.direct_visibility? && !response_to_recipient? + end - return blocked if message? && from_staff? + def response_to_recipient? + return false if @notification.target_status.in_reply_to_id.nil? - blocked ||= domain_blocking? - blocked ||= @recipient.blocking?(@notification.from_account) - blocked ||= @recipient.muting_notifications?(@notification.from_account) - blocked ||= hellbanned? - blocked ||= optional_non_follower? - blocked ||= optional_non_following? - blocked ||= optional_non_following_and_direct? - blocked ||= conversation_muted? - blocked ||= blocked_mention? if @notification.type == :mention - blocked + statuses_that_mention_sender.positive? + end + + def statuses_that_mention_sender + Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @sender.id, depth_limit: 100]) + WITH RECURSIVE ancestors(id, in_reply_to_id, mention_id, path, depth) AS ( + SELECT s.id, s.in_reply_to_id, m.id, ARRAY[s.id], 0 + FROM statuses s + LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id + WHERE s.id = :id + UNION ALL + SELECT s.id, s.in_reply_to_id, m.id, st.path || s.id, st.depth + 1 + FROM ancestors st + JOIN statuses s ON s.id = st.in_reply_to_id + LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id + WHERE st.mention_id IS NULL AND NOT s.id = ANY(path) AND st.depth < :depth_limit + ) + SELECT COUNT(*) + FROM ancestors st + JOIN statuses s ON s.id = st.id + WHERE st.mention_id IS NOT NULL AND s.visibility = 3 + SQL + end end - def conversation_muted? - if @notification.target_status - @recipient.muting_conversation?(@notification.target_status.conversation) + def call(recipient, type, activity) + return if recipient.user.nil? + + @recipient = recipient + @activity = activity + @notification = Notification.new(account: @recipient, type: type, activity: @activity) + + # For certain conditions we don't need to create a notification at all + return if dismiss? + + @notification.filtered = filter? + @notification.save! + + # It's possible the underlying activity has been deleted + # between the save call and now + return if @notification.activity.nil? + + if @notification.filtered? + update_notification_request! else - false + push_notification! + push_to_conversation! if direct_message? + send_email! if email_needed? end + rescue ActiveRecord::RecordInvalid + nil + end + + private + + def dismiss? + DismissCondition.new(@notification).dismiss? + end + + def filter? + FilterCondition.new(@notification).filter? + end + + def update_notification_request! + return unless @notification.type == :mention + + notification_request = NotificationRequest.find_or_initialize_by(account_id: @recipient.id, from_account_id: @notification.from_account_id) + notification_request.last_status_id = @notification.target_status.id + notification_request.save end def push_notification! @@ -150,6 +219,10 @@ def push_to_conversation! AccountConversation.add_status(@recipient, @notification.target_status) end + def direct_message? + @notification.type == :mention && @notification.target_status.direct_visibility? + end + def push_to_web_push_subscriptions! ::Web::PushNotificationWorker.push_bulk(web_push_subscriptions.select { |subscription| subscription.pushable?(@notification) }) { |subscription| [subscription.id, @notification.id] } end diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index d9d496c7fa5f14..de318dda5437c1 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -40,11 +40,3 @@ label_method: ->(setting) { I18n.t("simple_form.labels.notification_emails.software_updates.#{setting}") }, label: I18n.t('simple_form.labels.notification_emails.software_updates.label'), wrapper: :with_label - - %h4= t 'notifications.other_settings' - - .fields-group - = f.simple_fields_for :settings, current_user.settings do |ff| - = ff.input :'interactions.must_be_follower', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_follower') - = ff.input :'interactions.must_be_following', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following') - = ff.input :'interactions.must_be_following_dm', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following_dm') diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb new file mode 100644 index 00000000000000..223654aa165b01 --- /dev/null +++ b/app/workers/unfilter_notifications_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class UnfilterNotificationsWorker + include Sidekiq::Worker + + def perform(notification_request_id) + @notification_request = NotificationRequest.find(notification_request_id) + + push_to_conversations! + unfilter_notifications! + remove_request! + rescue ActiveRecord::RecordNotFound + true + end + + private + + def push_to_conversations! + notifications_with_private_mentions.find_each { |notification| AccountConversation.add_status(@notification_request.account, notification.target_status) } + end + + def unfilter_notifications! + filtered_notifications.in_batches.update_all(filtered: false) + end + + def remove_request! + @notification_request.destroy! + end + + def filtered_notifications + Notification.where(account: @notification_request.account, from_account: @notification_request.from_account, filtered: true) + end + + def notifications_with_private_mentions + filtered_notifications.joins(mention: :status).merge(Status.where(visibility: :direct)).includes(mention: :status) + end +end diff --git a/config/locales/an.yml b/config/locales/an.yml index edfdb44b35aa82..7ad1986b24a1da 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1288,7 +1288,6 @@ an: notifications: email_events: Eventos pa notificacions per correu electronico email_events_hint: 'Tría los eventos pa los quals deseyas recibir notificacions:' - other_settings: Atros achustes de notificacions number: human: decimal_units: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 2b2052172e22fe..8e9338d80ad64a 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1594,7 +1594,6 @@ ar: administration_emails: إشعارات البريد الإلكتروني الإدارية email_events: الأحداث للإشعارات عبر البريد الإلكتروني email_events_hint: 'اختر الأحداث التي تريد أن تصِلَك اشعارات عنها:' - other_settings: إعدادات أخرى للإشعارات number: human: decimal_units: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index da7e99c2fac5a4..ee9105b05ff258 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -695,7 +695,6 @@ ast: notifications: email_events: Unviu d'avisos per corréu electrónicu email_events_hint: 'Seleiciona los eventos de los que quies recibir avisos:' - other_settings: Configuración d'otros avisos number: human: decimal_units: diff --git a/config/locales/be.yml b/config/locales/be.yml index 34e0722ba9e373..bd75870a18c439 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1547,7 +1547,6 @@ be: administration_emails: Апавяшчэнні эл. пошты для адміністратара email_events: Падзеі для апавяшчэнняў эл. пошты email_events_hint: 'Выберыце падзеі, аб якіх вы хочаце атрымліваць апавяшчэнні:' - other_settings: Іншыя налады апавяшчэнняў number: human: decimal_units: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 15c671d5392fe3..3d1b6d291fd11e 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1490,7 +1490,6 @@ bg: administration_emails: Администраторски известия по имейла email_events: Събития за известия по имейл email_events_hint: 'Изберете събития, за които искате да получавате известия:' - other_settings: Настройки за други известия number: human: decimal_units: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index d80fb598e381ee..d4213a258ed1b9 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1495,7 +1495,6 @@ ca: administration_emails: Notificacions per correu-e de l'Admin email_events: Esdeveniments per a notificacions de correu electrònic email_events_hint: 'Selecciona els esdeveniments per als quals vols rebre notificacions:' - other_settings: Altres opcions de notificació number: human: decimal_units: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index fec8f73323e71f..7f1c28defc147f 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -840,7 +840,6 @@ ckb: notifications: email_events: رووداوەکان بۆ ئاگاداری ئیمەیلی email_events_hint: 'ئەو ڕووداوانە دیاریبکە کە دەتەوێت ئاگانامەکان وەربگری بۆ:' - other_settings: ڕێکبەندەکانی ئاگانامەکانی تر otp_authentication: code_hint: کۆدێک داخڵ بکە کە دروست کراوە لەلایەن ئەپی ڕەسەنایەتیەوە بۆ دڵنیابوون description_html: ئەگەر تۆ هاتنەژوورەوەی دوو قۆناغی بە یارمەتی ئەپێکی پەسەندکردن چالاک بکەن، پێویستە بۆ چوونەژوورەوە ، بە تەلەفۆنەکەتان کە کۆدیکتان بۆ دروستدەکات دەستپێگەیشتنتان هەبێت. diff --git a/config/locales/co.yml b/config/locales/co.yml index c3c185c2f5861d..ecf860645548cc 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -809,7 +809,6 @@ co: notifications: email_events: Avvenimenti da nutificà cù l'e-mail email_events_hint: 'Selezziunate l''avvenimenti per quelli vulete riceve nutificazione:' - other_settings: Altri parametri di nutificazione number: human: decimal_units: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 69640a261f9ada..fd24ac05c64d48 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1547,7 +1547,6 @@ cs: administration_emails: E-mailová oznámení administrátora email_events: Události pro e-mailová oznámení email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:' - other_settings: Další nastavení oznámení number: human: decimal_units: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 19343146f3a11d..241d599464aee0 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1599,7 +1599,6 @@ cy: administration_emails: Hysbysiadau e-bost gweinyddol email_events: Digwyddiadau ar gyfer hysbysiadau e-bost email_events_hint: 'Dewiswch ddigwyddiadau yr ydych am dderbyn hysbysiadau ar eu cyfer:' - other_settings: Gosodiadau hysbysiadau arall number: human: decimal_units: diff --git a/config/locales/da.yml b/config/locales/da.yml index 62e28cef165beb..6bc0d967973218 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1495,7 +1495,6 @@ da: administration_emails: Admin e-mailnotifikationer email_events: Begivenheder for e-mailnotifikationer email_events_hint: 'Vælg begivenheder, for hvilke notifikationer skal modtages:' - other_settings: Andre notifikationsindstillinger number: human: decimal_units: diff --git a/config/locales/de.yml b/config/locales/de.yml index 123942672e78c6..06361223731738 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1495,7 +1495,6 @@ de: administration_emails: Admin-E-Mail-Benachrichtigungen email_events: Benachrichtigungen per E-Mail email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen per E-Mail erhalten möchtest:' - other_settings: Weitere Benachrichtigungseinstellungen number: human: decimal_units: diff --git a/config/locales/el.yml b/config/locales/el.yml index c641d4dca96812..12d70df976ee50 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1383,7 +1383,6 @@ el: notifications: email_events: Συμβάντα για ειδοποιήσεις μέσω email email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:' - other_settings: Άλλες ρυθμίσεις ειδοποιήσεων number: human: decimal_units: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 6b2554fe153eea..ac7e5082760e9f 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1490,7 +1490,6 @@ en-GB: administration_emails: Admin e-mail notifications email_events: Events for e-mail notifications email_events_hint: 'Select events that you want to receive notifications for:' - other_settings: Other notifications settings number: human: decimal_units: diff --git a/config/locales/en.yml b/config/locales/en.yml index cff244a4b9d86c..8199fa52c7b06b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1495,7 +1495,6 @@ en: administration_emails: Admin e-mail notifications email_events: Events for e-mail notifications email_events_hint: 'Select events that you want to receive notifications for:' - other_settings: Other notifications settings number: human: decimal_units: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index bc694578b74b6d..4e518cd194eeb7 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1425,7 +1425,6 @@ eo: administration_emails: Admin retpoŝtaj sciigoj email_events: Eventoj por retpoŝtaj sciigoj email_events_hint: 'Elekti la eventojn pri kioj vi volas ricevi sciigojn:' - other_settings: Aliaj agordoj de sciigoj number: human: decimal_units: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 37fcc11d782eb0..06bacc79d1682a 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1495,7 +1495,6 @@ es-AR: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Seleccioná los eventos para los que querés recibir notificaciones:' - other_settings: Configuración de otras notificaciones number: human: decimal_units: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 26dbc2dfb8e4de..4d2e8ff2573e00 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1495,7 +1495,6 @@ es-MX: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:' - other_settings: Otros ajustes de notificaciones number: human: decimal_units: diff --git a/config/locales/es.yml b/config/locales/es.yml index 795658013832d8..5204b116e349aa 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1495,7 +1495,6 @@ es: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:' - other_settings: Otros ajustes de notificaciones number: human: decimal_units: diff --git a/config/locales/et.yml b/config/locales/et.yml index ed25488ce43966..6bdb54a50eed51 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1490,7 +1490,6 @@ et: administration_emails: Admini e-postiteavitused email_events: E-posti teadete sündmused email_events_hint: 'Vali sündmused, mille kohta soovid teavitusi:' - other_settings: Muud teadete sätted number: human: decimal_units: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index fb3013e0084232..f49456afb2d04c 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1496,7 +1496,6 @@ eu: administration_emails: Administratzailearen posta elektroniko bidezko jakinarazpenak email_events: E-mail jakinarazpenentzako gertaerak email_events_hint: 'Hautatu jaso nahi dituzun gertaeren jakinarazpenak:' - other_settings: Bezte jakinarazpen konfigurazioak number: human: decimal_units: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 4339e06c3471a2..7fab495af81f65 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1271,7 +1271,6 @@ fa: notifications: email_events: رویدادها برای آگاهی‌های رایانامه‌ای email_events_hint: 'گزینش رویدادهایی که می‌خواهید برایشان آگاهی دریافت کنید:' - other_settings: سایر تنظیمات آگاهی‌ها number: human: decimal_units: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index dc303991bcea68..4cd255c2f4d5a3 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1495,7 +1495,6 @@ fi: administration_emails: Ylläpitäjän sähköposti-ilmoitukset email_events: Sähköposti-ilmoitusten tapahtumat email_events_hint: 'Valitse tapahtumat, joista haluat saada ilmoituksia:' - other_settings: Muut ilmoitusasetukset number: human: decimal_units: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 6a8dd9b2ee69a9..c7dca591f680bf 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1495,7 +1495,6 @@ fo: administration_emails: Fráboðanir um teldupost til umsitarar email_events: Hendingar fyri teldupostfráboðanir email_events_hint: 'Vel hendingar, sum tú vil hava fráboðanir um:' - other_settings: Aðrar fráboðanarstillingar number: human: decimal_units: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 97cb08c9184b93..381a8f582a7ddb 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1490,7 +1490,6 @@ fr-CA: administration_emails: Notifications par e-mail de l’admin email_events: Événements pour les notifications par courriel email_events_hint: 'Sélectionnez les événements pour lesquels vous souhaitez recevoir des notifications :' - other_settings: Autres paramètres de notifications number: human: decimal_units: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b085937c767473..0d706accf12388 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1490,7 +1490,6 @@ fr: administration_emails: Notifications par e-mail de l’admin email_events: Événements pour les notifications par courriel email_events_hint: 'Sélectionnez les événements pour lesquels vous souhaitez recevoir des notifications :' - other_settings: Autres paramètres de notifications number: human: decimal_units: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index caa88dcfe44fee..2fb9f3e4d2956b 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1490,7 +1490,6 @@ fy: administration_emails: E-mailmeldingen behearder email_events: E-mailmeldingen foar eveneminten email_events_hint: 'Selektearje eveneminten wêrfoar’t jo meldingen ûntfange wolle:' - other_settings: Oare meldingsynstellingen number: human: decimal_units: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index e2a43564c0c3a5..ede38df0d9e442 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1532,7 +1532,6 @@ gd: administration_emails: Brathan puist-d na rianachd email_events: Tachartasan nam brathan puist-d email_events_hint: 'Tagh na tachartasan dhan a bheil thu airson brathan fhaighinn:' - other_settings: Roghainnean eile nam brathan number: human: decimal_units: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 8520b90ead0f2c..c3d0f1d99ae5fa 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1495,7 +1495,6 @@ gl: administration_emails: Notificacións de Admin por correo electrónico email_events: Eventos para os correos de notificación email_events_hint: 'Escolle os eventos sobre os que queres recibir notificacións:' - other_settings: Outros axustes das notificacións number: human: decimal_units: diff --git a/config/locales/he.yml b/config/locales/he.yml index 55ab576142dcb8..766a6537731129 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1547,7 +1547,6 @@ he: administration_emails: התראות לדוא"ל חשבון מנהל email_events: ארועים להתראות דוא"ל email_events_hint: 'בחר/י ארועים עבורים תרצה/י לקבל התראות:' - other_settings: הגדרות התראות אחרות number: human: decimal_units: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 733d883da06c92..00566514c91156 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1495,7 +1495,6 @@ hu: administration_emails: Adminisztrátori e-mail-értesítések email_events: Események email értesítésekhez email_events_hint: 'Válaszd ki azokat az eseményeket, melyekről értesítést szeretnél:' - other_settings: Értesítések egyéb beállításai number: human: decimal_units: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index b0d8f008641ffd..d870f5073c38d7 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -672,7 +672,6 @@ hy: subject: "%{name}-ը փոխել է գրառումը" notifications: email_events_hint: Ընտրիր իրադարձութիւնները, որոնց վերաբերեալ ցանկանում ես ստանալ ծանուցումներ․ - other_settings: Ծանուցումների այլ կարգաւորումներ number: human: decimal_units: diff --git a/config/locales/id.yml b/config/locales/id.yml index e7f42e115b0760..a32ee8407a1ae1 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1257,7 +1257,6 @@ id: notifications: email_events: Event untuk notifikasi email email_events_hint: 'Pilih event yang ingin Anda terima notifikasinya:' - other_settings: Pengaturan notifikasi lain number: human: decimal_units: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index eec8569bb28a39..55aba94d180901 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1495,7 +1495,6 @@ ie: administration_emails: Email-notificationes pri administration email_events: Evenimentes por email-notificationes email_events_hint: 'Selecte li evenimentes pri queles tu vole reciver notificationes:' - other_settings: Parametres pri altri notificationes number: human: decimal_units: diff --git a/config/locales/io.yml b/config/locales/io.yml index 189f616a4e0c48..e85641b9237112 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1472,7 +1472,6 @@ io: administration_emails: Jerala retpostonotifiki email_events: Eventi por retpostoavizi email_events_hint: 'Selektez eventi quon vu volas ganar avizi:' - other_settings: Altra avizopcioni number: human: decimal_units: diff --git a/config/locales/is.yml b/config/locales/is.yml index da6eee9e205dbd..771ed2fbf1fc7b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1499,7 +1499,6 @@ is: administration_emails: Kerfisstjórnunartilkynningar í tölvupósti email_events: Atburðir fyrir tilkynningar í tölvupósti email_events_hint: 'Veldu þá atburði sem þú vilt fá tilkynningar í tölvupósti þegar þeir koma upp:' - other_settings: Aðrar stillingar varðandi tilkynningar number: human: decimal_units: diff --git a/config/locales/it.yml b/config/locales/it.yml index 3adb4f6c6500ae..d85f0359d190f4 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1497,7 +1497,6 @@ it: administration_emails: Notifiche email amministratore email_events: Eventi per notifiche via email email_events_hint: 'Seleziona gli eventi per i quali vuoi ricevere le notifiche:' - other_settings: Altre impostazioni delle notifiche number: human: decimal_units: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 460f02d0a58eeb..15e66631f55061 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1469,7 +1469,6 @@ ja: administration_emails: 管理にかかわるメール通知 email_events: メールによる通知 email_events_hint: '受信する通知を選択:' - other_settings: その他の通知設定 number: human: decimal_units: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index d42481092617f3..d278c15c93f467 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -626,8 +626,6 @@ kab: subject: Yuder-ik·ikem-id %{name} reblog: subject: "%{name} yesselha addad-ik·im" - notifications: - other_settings: Iɣewwaṛen nniḍen n yilɣa number: human: decimal_units: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 2cd894befb398c..9528c0950f73e5 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -539,7 +539,6 @@ kk: notifications: email_events: E-mail ескертпелеріне шаралар email_events_hint: 'Ескертпе болып келетін шараларды таңда:' - other_settings: Ескертпелердің басқа баптаулары number: human: decimal_units: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 45a95139f04800..1e53006cbbb7df 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1471,7 +1471,6 @@ ko: administration_emails: 관리자 이메일 알림 email_events: 이메일 알림에 대한 이벤트 email_events_hint: '알림 받을 이벤트를 선택해주세요:' - other_settings: 기타 알림 설정 number: human: decimal_units: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index d744aaa90323c7..91ab75ceb085a2 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1285,7 +1285,6 @@ ku: notifications: email_events: Bûyer bo agahdariyên e-nameyê email_events_hint: 'Bûyera ku tu dixwazî agahdariyan jê wergerî hilbijêre:' - other_settings: Sazkariya agahdariyên din number: human: decimal_units: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 13e29f927ee030..bed6b44d39890f 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1495,7 +1495,6 @@ lad: administration_emails: Avizos de administrasyon por posta email_events: Evenimyentos para avizos por posta email_events_hint: 'Eskoje los evenimientos para los kualos keres risivir avizos:' - other_settings: Otras preferensyas de avizos number: human: decimal_units: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 89bdf5f05f9192..dc4c39083cd86d 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1513,7 +1513,6 @@ lv: administration_emails: Administrators e-pasta paziņojumi email_events: E-pasta paziņojumu notikumi email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:' - other_settings: Citu paziņojumu iestatījumi number: human: decimal_units: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 81f1851b1e9185..e20dfd09e0840d 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1442,7 +1442,6 @@ ms: administration_emails: Notifikasi e-mel pentadbir email_events: Acara untuk pemberitahuan e-mel email_events_hint: 'Pilih acara yang ingin anda terima pemberitahuan:' - other_settings: Tetapan notifikasi lain number: human: decimal_units: diff --git a/config/locales/my.yml b/config/locales/my.yml index 18f5c6a2d05fba..f2c115c17c1134 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1445,7 +1445,6 @@ my: administration_emails: စီမံခန့်ခွဲသူ အီးမေးလ် အသိပေးချက်များ email_events: အီးမေးလ်သတိပေးချက်များအတွက်အကြောင်းအရာများ email_events_hint: အသိပေးချက်များရယူမည့် အစီအစဉ်များကို ရွေးပါ - - other_settings: အခြားအသိပေးချက်များ၏ သတ်မှတ်ချက်များ number: human: decimal_units: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index c935e9f4aadb45..ac49efddf1f323 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1495,7 +1495,6 @@ nl: administration_emails: E-mailmeldingen beheerder email_events: E-mailmeldingen voor gebeurtenissen email_events_hint: 'Selecteer gebeurtenissen waarvoor je meldingen wilt ontvangen:' - other_settings: Andere meldingsinstellingen number: human: decimal_units: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index aecd148e28cf1f..52ed45a675b956 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1495,7 +1495,6 @@ nn: administration_emails: Administrator sine epost-varsler email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' - other_settings: Andre varslingsinnstillinger number: human: decimal_units: diff --git a/config/locales/no.yml b/config/locales/no.yml index 481e28e863e099..db56a065faa5f1 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1490,7 +1490,6 @@ administration_emails: Administrators e-postvarslinger email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' - other_settings: Andre varslingsinnstillinger number: human: decimal_units: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index b8330992c901ce..32b7da6272a33d 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -724,7 +724,6 @@ oc: notifications: email_events: Eveniments per las notificacions per corrièl email_events_hint: 'Seleccionatz los eveniments que volètz recebre :' - other_settings: Autres paramètres de notificacion number: human: decimal_units: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f7c5d60f657a7c..9253f2d020c78a 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1547,7 +1547,6 @@ pl: administration_emails: Administracyjne powiadomienia e-mail email_events: 'Powiadamiaj e-mailem o:' email_events_hint: 'Wybierz wydarzenia, o których chcesz otrzymywać powiadomienia:' - other_settings: Inne ustawienia powiadomień number: human: decimal_units: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 86972f9ef16bd1..58e734d9eb0c77 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1491,7 +1491,6 @@ pt-BR: administration_emails: Notificações por e-mail sobre administração email_events: Eventos para notificações por e-mail email_events_hint: 'Selecione os eventos que deseja receber notificações:' - other_settings: Outras opções para notificações number: human: decimal_units: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 0786ba2ed4f5c9..ebc7f84f4f0edb 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1495,7 +1495,6 @@ pt-PT: administration_emails: Notificções administrativas por e-mail email_events: Eventos para notificações por e-mail email_events_hint: 'Selecione os casos para os quais deseja receber notificações:' - other_settings: Outras opções de notificações number: human: decimal_units: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 3f15b064f0f156..1c718c95b2e2ab 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1542,7 +1542,6 @@ ru: administration_emails: Уведомления администратора по электронной почте email_events: События для e-mail уведомлений email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:' - other_settings: Остальные настройки уведомлений number: human: decimal_units: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 533764606bc142..33ca7ab1d2f78b 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -865,7 +865,6 @@ sc: notifications: email_events: Eventos pro notìficas cun posta eletrònica email_events_hint: 'Seletziona eventos pro is chi boles retzire notìficas:' - other_settings: Àteras configuratziones de notìficas number: human: decimal_units: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index dc273d2d836057..d5628c01bc8e9f 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1275,7 +1275,6 @@ sco: notifications: email_events: Events fir email notes email_events_hint: 'Pick events thit ye''r wantin tae get notes fir:' - other_settings: Ither notes settins number: human: decimal_units: diff --git a/config/locales/si.yml b/config/locales/si.yml index ac292d6cf8143d..28488197c57c30 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1144,7 +1144,6 @@ si: notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' - other_settings: වෙනත් දැනුම්දීම් සැකසුම් number: human: decimal_units: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d97cfac0ea8c2f..e93cec19f6a20e 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1085,7 +1085,6 @@ sk: notifications: email_events: Udalosti oznamované emailom email_events_hint: 'Vyber si udalosti, pre ktoré chceš dostávať oboznámenia:' - other_settings: Ostatné oboznamovacie nastavenia otp_authentication: enable: Povoľ pagination: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index c9b2343b693dd5..863b3d72496401 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1547,7 +1547,6 @@ sl: administration_emails: E-poštna obvestila skrbnika email_events: Dogodki za e-obvestila email_events_hint: 'Izberite dogodke, za katere želite prejmati obvestila:' - other_settings: Druge nastavitve obvestil number: human: decimal_units: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 4293271bb242c4..d3d5a262fd178f 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1491,7 +1491,6 @@ sq: administration_emails: Njoftime email për përgjegjësin email_events: Akte për njoftim me email email_events_hint: 'Përzgjidhni akte për të cilët doni të merrni njoftime:' - other_settings: Rregullimet të tjera njoftimesh number: human: decimal_units: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a1f6df067fabd6..7c7fb390fe397b 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1516,7 +1516,6 @@ sr-Latn: administration_emails: Obaveštenja e-poštom od administratora email_events: Događaji za obaveštenja e-poštom email_events_hint: 'Izaberite dešavanja za koja želite da primate obaveštenja:' - other_settings: Ostala podešavanja obaveštenja number: human: decimal_units: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 494b41a7540a1c..c5b42e6b9eaed6 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1516,7 +1516,6 @@ sr: administration_emails: Обавештења е-поштом од администратора email_events: Догађаји за обавештења е-поштом email_events_hint: 'Изаберите дешавања за која желите да примате обавештења:' - other_settings: Остала подешавања обавештења number: human: decimal_units: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d0f3994b4e3be9..108c17fc9f39c1 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1489,7 +1489,6 @@ sv: administration_emails: Admin e-postaviseringar email_events: Händelser för e-postnotiser email_events_hint: 'Välj händelser som du vill ta emot aviseringar för:' - other_settings: Andra aviseringsinställningar number: human: decimal_units: diff --git a/config/locales/ta.yml b/config/locales/ta.yml index b035a602c262c5..3a22b572b11d46 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -212,7 +212,6 @@ ta: notifications: email_events: மின்னஞ்சல் அறிவிப்புகளுக்கான நிகழ்வுகள் email_events_hint: 'எந்த நிகழ்வுகளுக்கு அறிவிப்புகளைப் பெற வேண்டும் என்று தேர்வு செய்க:' - other_settings: அறிவிப்புகள் குறித்த பிற அமைப்புகள் polls: errors: invalid_choice: நீங்கள் தேர்வு செய்த விருப்பம் கிடைக்கவில்லை diff --git a/config/locales/th.yml b/config/locales/th.yml index 5253dd6b787884..b212300220e0c9 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1469,7 +1469,6 @@ th: administration_emails: การแจ้งเตือนอีเมลผู้ดูแล email_events: เหตุการณ์สำหรับการแจ้งเตือนอีเมล email_events_hint: 'เลือกเหตุการณ์ที่คุณต้องการรับการแจ้งเตือน:' - other_settings: การตั้งค่าการแจ้งเตือนอื่น ๆ number: human: decimal_units: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 7dbec9abbdda7a..3732e53ab96d05 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1495,7 +1495,6 @@ tr: administration_emails: Yönetici e-posta bildirimleri email_events: E-posta bildirimi gönderilecek etkinlikler email_events_hint: 'Bildirim almak istediğiniz olayları seçin:' - other_settings: Diğer bildirim ayarları number: human: decimal_units: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 7273a0ff2b965f..231f0028fd411d 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1547,7 +1547,6 @@ uk: administration_emails: Сповіщення е-пошти адміністратора email_events: Події, про які сповіщати електронною поштою email_events_hint: 'Оберіть події, про які ви хочете отримувати сповіщення:' - other_settings: Інші налаштування сповіщень number: human: decimal_units: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index e362c97a41b69e..2afb6aa4c15820 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1467,7 +1467,6 @@ vi: administration_emails: Email thông báo admin email_events: Email email_events_hint: 'Chọn những hoạt động sẽ gửi thông báo qua email:' - other_settings: Chặn thông báo từ number: human: decimal_units: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 46a0e401524d6f..93c741915d279d 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1469,7 +1469,6 @@ zh-CN: administration_emails: 管理员电子邮件通知 email_events: 电子邮件通知事件 email_events_hint: 选择你想要收到通知的事件: - other_settings: 其它通知设置 number: human: decimal_units: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index e666e4965d250b..62649864c735e0 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1464,7 +1464,6 @@ zh-HK: administration_emails: 管理員電郵通知 email_events: 電郵通知活動 email_events_hint: 選擇你想接收通知的活動: - other_settings: 其他通知設定 number: human: decimal_units: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 3cd358383099ea..f50f685bb4c2e1 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1471,7 +1471,6 @@ zh-TW: administration_emails: 管理員電子郵件通知 email_events: 電子郵件通知設定 email_events_hint: 選取您想接收通知的事件: - other_settings: 其他通知設定 number: human: decimal_units: diff --git a/config/routes/api.rb b/config/routes/api.rb index 853a44e0e10b14..18a247e9fde678 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -150,6 +150,17 @@ end end + namespace :notifications do + resources :requests, only: :index do + member do + post :accept + post :dismiss + end + end + + resource :policy, only: [:show, :update] + end + resources :notifications, only: [:index, :show] do collection do post :clear diff --git a/db/migrate/20240221195424_add_filtered_to_notifications.rb b/db/migrate/20240221195424_add_filtered_to_notifications.rb new file mode 100644 index 00000000000000..99e98a58b86fea --- /dev/null +++ b/db/migrate/20240221195424_add_filtered_to_notifications.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddFilteredToNotifications < ActiveRecord::Migration[7.1] + def change + add_column :notifications, :filtered, :boolean, default: false, null: false + end +end diff --git a/db/migrate/20240221195828_create_notification_requests.rb b/db/migrate/20240221195828_create_notification_requests.rb new file mode 100644 index 00000000000000..98aa630408f950 --- /dev/null +++ b/db/migrate/20240221195828_create_notification_requests.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CreateNotificationRequests < ActiveRecord::Migration[7.1] + def change + create_table :notification_requests do |t| + t.references :account, null: false, foreign_key: { on_delete: :cascade }, index: false + t.references :from_account, null: false, foreign_key: { to_table: :accounts, on_delete: :cascade } + t.references :last_status, null: false, foreign_key: { to_table: :statuses, on_delete: :nullify } + t.bigint :notifications_count, null: false, default: 0 + t.boolean :dismissed, null: false, default: false + + t.timestamps + end + + add_index :notification_requests, [:account_id, :from_account_id], unique: true + add_index :notification_requests, [:account_id, :id], where: 'dismissed = false', order: { id: :desc } + end +end diff --git a/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb b/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb new file mode 100644 index 00000000000000..8503f452fe2596 --- /dev/null +++ b/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class NotificationRequestIdsToTimestampIds < ActiveRecord::Migration[7.1] + def up + safety_assured do + execute("ALTER TABLE notification_requests ALTER COLUMN id SET DEFAULT timestamp_id('notification_requests')") + end + end + + def down + execute('LOCK notification_requests') + execute("SELECT setval('notification_requests_id_seq', (SELECT MAX(id) FROM notification_requests))") + execute("ALTER TABLE notification_requests ALTER COLUMN id SET DEFAULT nextval('notification_requests_id_seq')") + end +end diff --git a/db/migrate/20240222193403_create_notification_permissions.rb b/db/migrate/20240222193403_create_notification_permissions.rb new file mode 100644 index 00000000000000..6e2b6196c20b49 --- /dev/null +++ b/db/migrate/20240222193403_create_notification_permissions.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class CreateNotificationPermissions < ActiveRecord::Migration[7.1] + def change + create_table :notification_permissions do |t| + t.references :account, null: false, foreign_key: true + t.references :from_account, null: false, foreign_key: { to_table: :accounts } + + t.timestamps + end + end +end diff --git a/db/migrate/20240222203722_create_notification_policies.rb b/db/migrate/20240222203722_create_notification_policies.rb new file mode 100644 index 00000000000000..e9d35510a865ee --- /dev/null +++ b/db/migrate/20240222203722_create_notification_policies.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CreateNotificationPolicies < ActiveRecord::Migration[7.1] + def change + create_table :notification_policies do |t| + t.references :account, null: false, foreign_key: true, index: { unique: true } + t.boolean :filter_not_following, null: false, default: false + t.boolean :filter_not_followers, null: false, default: false + t.boolean :filter_new_accounts, null: false, default: false + t.boolean :filter_private_mentions, null: false, default: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240227191620_add_filtered_index_on_notifications.rb b/db/migrate/20240227191620_add_filtered_index_on_notifications.rb new file mode 100644 index 00000000000000..ca34452472610b --- /dev/null +++ b/db/migrate/20240227191620_add_filtered_index_on_notifications.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddFilteredIndexOnNotifications < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + def change + add_index :notifications, [:account_id, :id, :type], where: 'filtered = false', order: { id: :desc }, name: 'index_notifications_on_filtered', algorithm: :concurrently + end +end diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb new file mode 100644 index 00000000000000..a167baadcc8f8b --- /dev/null +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + # Dummy classes, to make migration possible across version changes + class Account < ApplicationRecord + has_one :user, inverse_of: :account + has_one :notification_policy, inverse_of: :account + end + + class User < ApplicationRecord + belongs_to :account + end + + class NotificationPolicy < ApplicationRecord + belongs_to :account + end + + def up + User.includes(account: :notification_policy).find_each do |user| + deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + policy = user.account.notification_policy || user.account.build_notification_policy + requires_new_policy = false + + if deserialized_settings['interactions.must_be_follower'] + policy.filter_not_followers = true + requires_new_policy = true + end + + if deserialized_settings['interactions.must_be_following'] + policy.filter_not_following = true + requires_new_policy = true + end + + if deserialized_settings['interactions.must_be_following_dm'] + policy.filter_private_mentions = true + requires_new_policy = true + end + + policy.save if requires_new_policy && policy.changed? + end + end + + def down; end +end diff --git a/db/schema.rb b/db/schema.rb index 50f4e7189dfee1..97917d0456c474 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_01_11_033014) do +ActiveRecord::Schema[7.1].define(version: 2024_03_04_090449) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -666,6 +666,40 @@ t.index ["target_account_id"], name: "index_mutes_on_target_account_id" end + create_table "notification_permissions", force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "from_account_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_notification_permissions_on_account_id" + t.index ["from_account_id"], name: "index_notification_permissions_on_from_account_id" + end + + create_table "notification_policies", force: :cascade do |t| + t.bigint "account_id", null: false + t.boolean "filter_not_following", default: false, null: false + t.boolean "filter_not_followers", default: false, null: false + t.boolean "filter_new_accounts", default: false, null: false + t.boolean "filter_private_mentions", default: true, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_notification_policies_on_account_id", unique: true + end + + create_table "notification_requests", id: :bigint, default: -> { "timestamp_id('notification_requests'::text)" }, force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "from_account_id", null: false + t.bigint "last_status_id", null: false + t.bigint "notifications_count", default: 0, null: false + t.boolean "dismissed", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id", "from_account_id"], name: "index_notification_requests_on_account_id_and_from_account_id", unique: true + t.index ["account_id", "id"], name: "index_notification_requests_on_account_id_and_id", order: { id: :desc }, where: "(dismissed = false)" + t.index ["from_account_id"], name: "index_notification_requests_on_from_account_id" + t.index ["last_status_id"], name: "index_notification_requests_on_last_status_id" + end + create_table "notifications", force: :cascade do |t| t.bigint "activity_id", null: false t.string "activity_type", null: false @@ -674,7 +708,9 @@ t.bigint "account_id", null: false t.bigint "from_account_id", null: false t.string "type" + t.boolean "filtered", default: false, null: false t.index ["account_id", "id", "type"], name: "index_notifications_on_account_id_and_id_and_type", order: { id: :desc } + t.index ["account_id", "id", "type"], name: "index_notifications_on_filtered", order: { id: :desc }, where: "(filtered = false)" t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type" t.index ["from_account_id"], name: "index_notifications_on_from_account_id" end @@ -1255,6 +1291,12 @@ add_foreign_key "mentions", "statuses", on_delete: :cascade add_foreign_key "mutes", "accounts", column: "target_account_id", name: "fk_eecff219ea", on_delete: :cascade add_foreign_key "mutes", "accounts", name: "fk_b8d8daf315", on_delete: :cascade + add_foreign_key "notification_permissions", "accounts" + add_foreign_key "notification_permissions", "accounts", column: "from_account_id" + add_foreign_key "notification_policies", "accounts" + add_foreign_key "notification_requests", "accounts", column: "from_account_id", on_delete: :cascade + add_foreign_key "notification_requests", "accounts", on_delete: :cascade + add_foreign_key "notification_requests", "statuses", column: "last_status_id", on_delete: :nullify add_foreign_key "notifications", "accounts", column: "from_account_id", name: "fk_fbd6b0bf9e", on_delete: :cascade add_foreign_key "notifications", "accounts", name: "fk_c141c8ee55", on_delete: :cascade add_foreign_key "oauth_access_grants", "oauth_applications", column: "application_id", name: "fk_34d54b0a33", on_delete: :cascade diff --git a/spec/controllers/settings/preferences/notifications_controller_spec.rb b/spec/controllers/settings/preferences/notifications_controller_spec.rb index b61d7461ce6900..e0f0bc55a7580d 100644 --- a/spec/controllers/settings/preferences/notifications_controller_spec.rb +++ b/spec/controllers/settings/preferences/notifications_controller_spec.rb @@ -24,14 +24,13 @@ describe 'PUT #update' do it 'updates notifications settings' do - user.settings.update('notification_emails.follow': false, 'interactions.must_be_follower': true) + user.settings.update('notification_emails.follow': false) user.save put :update, params: { user: { settings_attributes: { 'notification_emails.follow': '1', - 'interactions.must_be_follower': '0', }, }, } @@ -39,7 +38,6 @@ expect(response).to redirect_to(settings_preferences_notifications_path) user.reload expect(user.settings['notification_emails.follow']).to be true - expect(user.settings['interactions.must_be_follower']).to be false end end end diff --git a/spec/fabricators/notification_permission_fabricator.rb b/spec/fabricators/notification_permission_fabricator.rb new file mode 100644 index 00000000000000..d421ddd81f4aac --- /dev/null +++ b/spec/fabricators/notification_permission_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:notification_permission) do + account + from_account { Fabricate.build(:account) } +end diff --git a/spec/fabricators/notification_policy_fabricator.rb b/spec/fabricators/notification_policy_fabricator.rb new file mode 100644 index 00000000000000..f33438fec7daa9 --- /dev/null +++ b/spec/fabricators/notification_policy_fabricator.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +Fabricator(:notification_policy) do + account + filter_not_following false + filter_not_followers false + filter_new_accounts false + filter_private_mentions true +end diff --git a/spec/fabricators/notification_request_fabricator.rb b/spec/fabricators/notification_request_fabricator.rb new file mode 100644 index 00000000000000..05a13b8ef8010d --- /dev/null +++ b/spec/fabricators/notification_request_fabricator.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +Fabricator(:notification_request) do + account + from_account { Fabricate.build(:account) } + last_status { Fabricate.build(:status) } + dismissed false +end diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb new file mode 100644 index 00000000000000..bbfa548cf4b5c4 --- /dev/null +++ b/spec/models/notification_policy_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe NotificationPolicy do + describe '#summarize!' do + subject { Fabricate(:notification_policy) } + + let(:sender) { Fabricate(:account) } + + before do + Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender)) + Fabricate(:notification_request, account: subject.account, from_account: sender) + subject.summarize! + end + + it 'sets pending_requests_count' do + expect(subject.pending_requests_count).to eq 1 + end + + it 'sets pending_notifications_count' do + expect(subject.pending_notifications_count).to eq 2 + end + end +end diff --git a/spec/models/notification_request_spec.rb b/spec/models/notification_request_spec.rb new file mode 100644 index 00000000000000..f4613aaedeb3b7 --- /dev/null +++ b/spec/models/notification_request_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe NotificationRequest do + describe '#reconsider_existence!' do + subject { Fabricate(:notification_request, dismissed: dismissed) } + + let(:dismissed) { false } + + context 'when there are remaining notifications' do + before do + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account)) + subject.reconsider_existence! + end + + it 'leaves request intact' do + expect(subject.destroyed?).to be false + end + + it 'updates notifications_count' do + expect(subject.notifications_count).to eq 1 + end + end + + context 'when there are no notifications' do + before do + subject.reconsider_existence! + end + + context 'when dismissed' do + let(:dismissed) { true } + + it 'leaves request intact' do + expect(subject.destroyed?).to be false + end + end + + it 'removes the request' do + expect(subject.destroyed?).to be true + end + end + end +end diff --git a/spec/requests/api/v1/conversations_spec.rb b/spec/requests/api/v1/conversations_spec.rb index e2327d9a9374bd..caa0f5c52c0975 100644 --- a/spec/requests/api/v1/conversations_spec.rb +++ b/spec/requests/api/v1/conversations_spec.rb @@ -12,6 +12,7 @@ describe 'GET /api/v1/conversations', :sidekiq_inline do before do + user.account.follow!(other.account) PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct') PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') end diff --git a/spec/requests/api/v1/notifications/policies_spec.rb b/spec/requests/api/v1/notifications/policies_spec.rb new file mode 100644 index 00000000000000..fe6bdbd97355f8 --- /dev/null +++ b/spec/requests/api/v1/notifications/policies_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Policies' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/notifications/policy', :sidekiq_inline do + subject do + get '/api/v1/notifications/policy', headers: headers, params: params + end + + let(:params) { {} } + + before do + Fabricate(:notification_request, account: user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + end + + describe 'PUT /api/v1/notifications/policy' do + subject do + put '/api/v1/notifications/policy', headers: headers, params: params + end + + let(:params) { {} } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb new file mode 100644 index 00000000000000..64675d562c6474 --- /dev/null +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -0,0 +1,107 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Requests' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/notifications/requests', :sidekiq_inline do + subject do + get '/api/v1/notifications/requests', headers: headers, params: params + end + + let(:params) { {} } + + before do + Fabricate(:notification_request, account: user.account) + Fabricate(:notification_request, account: user.account, dismissed: true) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + + context 'with dismissed' do + let(:params) { { dismissed: '1' } } + + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + end + + describe 'POST /api/v1/notifications/requests/:id/accept' do + subject do + post "/api/v1/notifications/requests/#{notification_request.id}/accept", headers: headers + end + + let(:notification_request) { Fabricate(:notification_request, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'creates notification permission' do + subject + + expect(NotificationPermission.find_by(account: notification_request.account, from_account: notification_request.from_account)).to_not be_nil + end + + context 'when notification request belongs to someone else' do + let(:notification_request) { Fabricate(:notification_request) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/notifications/requests/:id/dismiss' do + subject do + post "/api/v1/notifications/requests/#{notification_request.id}/dismiss", headers: headers + end + + let(:notification_request) { Fabricate(:notification_request, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'dismisses the notification request' do + subject + + expect(notification_request.reload.dismissed?).to be true + end + + context 'when notification request belongs to someone else' do + let(:notification_request) { Fabricate(:notification_request) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb index e818fadcbe8d65..57ff326c732c7c 100644 --- a/spec/services/notify_service_spec.rb +++ b/spec/services/notify_service_spec.rb @@ -41,7 +41,8 @@ it 'does not notify when sender is silenced and not followed' do sender.silence! - expect { subject }.to_not change(Notification, :count) + subject + expect(Notification.find_by(activity: activity).filtered?).to be true end it 'does not notify when recipient is suspended' do @@ -49,66 +50,6 @@ expect { subject }.to_not change(Notification, :count) end - context 'with direct messages' do - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct)) } - let(:type) { :mention } - - before do - user.settings.update('interactions.must_be_following_dm': enabled) - user.save - end - - context 'when recipient is supposed to be following sender' do - let(:enabled) { true } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - - context 'when the message chain is initiated by recipient, but is not direct message' do - let(:reply_to) { Fabricate(:status, account: recipient) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - end - - context 'when the message chain is initiated by recipient, but without a mention to the sender, even if the sender sends multiple messages in a row' do - let(:reply_to) { Fabricate(:status, account: recipient) } - let(:dummy_reply) { Fabricate(:status, account: sender, visibility: :direct, thread: reply_to) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: dummy_reply)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - end - - context 'when the message chain is initiated by the recipient with a mention to the sender' do - let(:reply_to) { Fabricate(:status, account: recipient, visibility: :direct) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does notify' do - expect { subject }.to change(Notification, :count) - end - end - end - - context 'when recipient is NOT supposed to be following sender' do - let(:enabled) { false } - - it 'does notify' do - expect { subject }.to change(Notification, :count) - end - end - end - describe 'reblogs' do let(:status) { Fabricate(:status, account: Fabricate(:account)) } let(:activity) { Fabricate(:status, account: sender, reblog: status) } @@ -187,4 +128,189 @@ end end end + + describe NotifyService::FilterCondition do + subject { described_class.new(notification) } + + let(:activity) { Fabricate(:mention, status: Fabricate(:status)) } + let(:notification) { Fabricate(:notification, type: :mention, activity: activity, from_account: activity.status.account, account: activity.account) } + + describe '#filter?' do + context 'when sender is silenced' do + before do + notification.from_account.silence! + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when recipient follows sender' do + before do + notification.account.follow!(notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering not-followed senders' do + before do + Fabricate(:notification_policy, account: notification.account, filter_not_following: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender is followed by recipient' do + before do + notification.account.follow!(notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering not-followers' do + before do + Fabricate(:notification_policy, account: notification.account, filter_not_followers: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender follows recipient' do + before do + notification.from_account.follow!(notification.account) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + end + + context 'when sender follows recipient for longer than 3 days' do + before do + follow = notification.from_account.follow!(notification.account) + follow.update(created_at: 4.days.ago) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering new accounts' do + before do + Fabricate(:notification_policy, account: notification.account, filter_new_accounts: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender is older than 30 days' do + before do + notification.from_account.update(created_at: 31.days.ago) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is not filtering anyone' do + before do + Fabricate(:notification_policy, account: notification.account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when recipient is filtering unsolicited private mentions' do + before do + Fabricate(:notification_policy, account: notification.account, filter_private_mentions: true) + end + + context 'when notification is not a private mention' do + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when notification is a private mention' do + before do + notification.target_status.update(visibility: :direct) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when the message chain is initiated by recipient, but sender is not mentioned' do + before do + original_status = Fabricate(:status, account: notification.account, visibility: :direct) + notification.target_status.update(thread: original_status) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + end + + context 'when the message chain is initiated by recipient, and sender is mentioned' do + before do + original_status = Fabricate(:status, account: notification.account, visibility: :direct) + notification.target_status.update(thread: original_status) + Fabricate(:mention, status: original_status, account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + end + end + end end From 509528e2dc2f87d59bc385efee82a9a83bb1b63f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 18:33:54 +0100 Subject: [PATCH 05/26] Update dependency pg to v1.5.6 (#29477) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 59b24e1035d4e5..047465fae64c29 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -505,7 +505,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.5.5) + pg (1.5.6) pghero (3.4.1) activerecord (>= 6) posix-spawn (0.3.15) From e8605a69d22e369e34914548338c15c053db9667 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 19:02:24 +0100 Subject: [PATCH 06/26] Update omniauth packages (#25306) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renaud Chaput --- Gemfile.lock | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 047465fae64c29..73ddfb4cff5eeb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -465,11 +465,11 @@ GEM statsd-ruby (~> 1.4, >= 1.4.0) oj (3.16.3) bigdecimal (>= 3.0) - omniauth (2.1.1) + omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection - omniauth-cas (3.0.0.beta.1) + omniauth-cas (3.0.0) addressable (~> 2.8) nokogiri (~> 1.12) omniauth (~> 2.1) @@ -543,8 +543,9 @@ GEM httpclient json-jwt (>= 1.11.0) rack (>= 2.1.0) - rack-protection (3.0.5) - rack + rack-protection (3.2.0) + base64 (>= 0.1.0) + rack (~> 2.2, >= 2.2.4) rack-proxy (0.7.6) rack rack-session (1.0.2) From e85a2aa18dfb619e64f6f5acc6c401f72587fc72 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 8 Mar 2024 10:10:07 +0100 Subject: [PATCH 07/26] Fix interaction settings migration error when encountering no settings (#29529) --- .../20240304090449_migrate_interaction_settings_to_policy.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb index a167baadcc8f8b..0e9a42f8df6c3d 100644 --- a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -20,6 +20,9 @@ class NotificationPolicy < ApplicationRecord def up User.includes(account: :notification_policy).find_each do |user| deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + + next if deserialized_settings.nil? + policy = user.account.notification_policy || user.account.build_notification_policy requires_new_policy = false From 81400b02b12115a5f3b6d386f1741b5deedf5cd8 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Sun, 10 Mar 2024 10:25:13 +0000 Subject: [PATCH 08/26] Add nds locale to posting languages (#27434) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 79d8cf794c729f..9e1c0a7db1d416 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -198,6 +198,7 @@ module LanguagesHelper ldn: ['Láadan', 'Láadan'].freeze, lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze, moh: ['Mohawk', 'Kanienʼkéha'].freeze, + nds: ['Low German', 'Plattdüütsch'].freeze, pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze, sco: ['Scots', 'Scots'].freeze, sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze, From f85168b1893722a5fa7d499f5fc5a6b5f5ad3d90 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 08:37:04 +0100 Subject: [PATCH 09/26] New Crowdin Translations (automated) (#29467) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 6 + app/javascript/mastodon/locales/bg.json | 4 +- app/javascript/mastodon/locales/br.json | 5 +- app/javascript/mastodon/locales/de.json | 4 +- app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es-MX.json | 6 +- app/javascript/mastodon/locales/es.json | 14 +- app/javascript/mastodon/locales/et.json | 20 +- app/javascript/mastodon/locales/fi.json | 12 +- app/javascript/mastodon/locales/gd.json | 18 +- app/javascript/mastodon/locales/ia.json | 5 + app/javascript/mastodon/locales/kab.json | 56 +- app/javascript/mastodon/locales/lt.json | 554 +++++---- app/javascript/mastodon/locales/lv.json | 204 ++-- app/javascript/mastodon/locales/nl.json | 4 +- app/javascript/mastodon/locales/no.json | 1 + app/javascript/mastodon/locales/ru.json | 2 +- app/javascript/mastodon/locales/ry.json | 20 +- app/javascript/mastodon/locales/sk.json | 1055 +++++++++--------- app/javascript/mastodon/locales/sr-Latn.json | 6 + app/javascript/mastodon/locales/sr.json | 3 +- app/javascript/mastodon/locales/tok.json | 44 +- app/javascript/mastodon/locales/zh-TW.json | 28 +- config/locales/activerecord.kab.yml | 2 +- config/locales/activerecord.sk.yml | 12 +- config/locales/af.yml | 2 - config/locales/an.yml | 2 - config/locales/ar.yml | 2 - config/locales/ast.yml | 2 - config/locales/be.yml | 37 +- config/locales/bg.yml | 44 +- config/locales/br.yml | 11 +- config/locales/ca.yml | 37 +- config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 2 - config/locales/cy.yml | 37 +- config/locales/da.yml | 37 +- config/locales/de.yml | 39 +- config/locales/devise.et.yml | 1 + config/locales/devise.fi.yml | 2 +- config/locales/devise.fr-CA.yml | 1 + config/locales/devise.fr.yml | 1 + config/locales/devise.gd.yml | 10 + config/locales/devise.lv.yml | 12 +- config/locales/devise.no.yml | 1 + config/locales/devise.sk.yml | 143 +-- config/locales/devise.sv.yml | 2 + config/locales/doorkeeper.lv.yml | 6 +- config/locales/doorkeeper.sk.yml | 178 +-- config/locales/doorkeeper.tr.yml | 4 +- config/locales/doorkeeper.zh-TW.yml | 6 +- config/locales/el.yml | 2 - config/locales/en-GB.yml | 2 - config/locales/eo.yml | 2 - config/locales/es-AR.yml | 45 +- config/locales/es-MX.yml | 43 +- config/locales/es.yml | 41 +- config/locales/et.yml | 45 +- config/locales/eu.yml | 37 +- config/locales/fa.yml | 2 - config/locales/fi.yml | 42 +- config/locales/fo.yml | 37 +- config/locales/fr-CA.yml | 44 +- config/locales/fr.yml | 42 +- config/locales/fy.yml | 23 +- config/locales/gd.yml | 86 +- config/locales/gl.yml | 37 +- config/locales/he.yml | 37 +- config/locales/hr.yml | 1 - config/locales/hu.yml | 37 +- config/locales/hy.yml | 1 - config/locales/id.yml | 2 - config/locales/ie.yml | 37 +- config/locales/io.yml | 2 - config/locales/is.yml | 37 +- config/locales/it.yml | 37 +- config/locales/ja.yml | 39 +- config/locales/ka.yml | 1 - config/locales/kab.yml | 60 +- config/locales/kk.yml | 1 - config/locales/ko.yml | 48 +- config/locales/ku.yml | 2 - config/locales/lad.yml | 21 +- config/locales/lt.yml | 406 +++++-- config/locales/lv.yml | 114 +- config/locales/ms.yml | 2 - config/locales/my.yml | 2 - config/locales/nl.yml | 37 +- config/locales/nn.yml | 37 +- config/locales/no.yml | 27 +- config/locales/oc.yml | 1 - config/locales/pl.yml | 37 +- config/locales/pt-BR.yml | 2 - config/locales/pt-PT.yml | 37 +- config/locales/ro.yml | 1 - config/locales/ru.yml | 2 - config/locales/sc.yml | 1 - config/locales/sco.yml | 2 - config/locales/si.yml | 1 - config/locales/simple_form.ca.yml | 4 +- config/locales/simple_form.et.yml | 2 + config/locales/simple_form.fi.yml | 2 +- config/locales/simple_form.fy.yml | 2 + config/locales/simple_form.gd.yml | 4 +- config/locales/simple_form.ja.yml | 2 + config/locales/simple_form.kab.yml | 9 + config/locales/simple_form.lv.yml | 14 +- config/locales/simple_form.no.yml | 2 + config/locales/simple_form.sr-Latn.yml | 2 + config/locales/simple_form.sr.yml | 2 + config/locales/simple_form.sv.yml | 2 + config/locales/simple_form.vi.yml | 2 + config/locales/simple_form.zh-TW.yml | 14 +- config/locales/sk.yml | 13 +- config/locales/sl.yml | 37 +- config/locales/sq.yml | 36 +- config/locales/sr-Latn.yml | 58 +- config/locales/sr.yml | 44 +- config/locales/sv.yml | 46 +- config/locales/th.yml | 29 +- config/locales/tr.yml | 37 +- config/locales/uk.yml | 8 +- config/locales/vi.yml | 39 +- config/locales/zh-CN.yml | 37 +- config/locales/zh-HK.yml | 2 - config/locales/zh-TW.yml | 129 ++- 127 files changed, 3437 insertions(+), 1451 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 2eebd1369cd6b8..914c15ad9536f4 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -277,7 +277,13 @@ "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", "follow_requests.unlocked_explanation": "حتى وإن كان حسابك غير مقفل، يعتقد فريق {domain} أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.", + "follow_suggestions.curated_suggestion": "اختيار الموظفين", "follow_suggestions.dismiss": "لا تُظهرها مجدّدًا", + "follow_suggestions.hints.featured": "تم اختيار هذا الملف الشخصي يدوياً من قبل فريق {domain}.", + "follow_suggestions.hints.friends_of_friends": "هذا الملف الشخصي مشهور بين الأشخاص الذين تتابعهم.", + "follow_suggestions.hints.most_followed": "هذا الملف الشخصي هو واحد من الأكثر متابعة على {domain}.", + "follow_suggestions.hints.most_interactions": "هذا الملف الشخصي قد حصل مؤخرا على الكثير من الاهتمام على {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "هذا الملف الشخصي مشابه للملفات الشخصية التي تابعتها مؤخرا.", "follow_suggestions.personalized_suggestion": "توصية مخصصة", "follow_suggestions.popular_suggestion": "توصية رائجة", "follow_suggestions.view_all": "عرض الكل", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index f08ca46af80af5..93823496b755e5 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -480,7 +480,7 @@ "onboarding.action.back": "Върнете ме обратно", "onboarding.actions.back": "Върнете ме обратно", "onboarding.actions.go_to_explore": "Виж тенденции", - "onboarding.actions.go_to_home": "Към началния ви инфоканал", + "onboarding.actions.go_to_home": "Към началния ми инфоканал", "onboarding.compose.template": "Здравейте, #Mastodon!", "onboarding.follows.empty": "За съжаление, в момента не могат да бъдат показани резултати. Може да опитате да търсите или да разгледате, за да намерите кого да последвате, или опитайте отново по-късно.", "onboarding.follows.lead": "Може да бъдете куратор на началния си инфоканал. Последвайки повече хора, по-деен и по-интересен ще става. Тези профили може да са добра начална точка, от която винаги по-късно да спрете да следвате!", @@ -504,7 +504,7 @@ "onboarding.start.skip": "Желаете ли да прескочите?", "onboarding.start.title": "Успяхте!", "onboarding.steps.follow_people.body": "Може да бъдете куратор на инфоканала си. Хайде да го запълним с интересни хора.", - "onboarding.steps.follow_people.title": "Последвайте {count, plural, one {един човек} other {# души}}", + "onboarding.steps.follow_people.title": "Персонализиране на началния ви инфоканал", "onboarding.steps.publish_status.body": "Поздравете целия свят.", "onboarding.steps.publish_status.title": "Направете първата си публикация", "onboarding.steps.setup_profile.body": "Други са по-вероятно да взаимодействат с вас с попълнения профил.", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 5ce52d527a42ee..3b376ac47033e7 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -113,6 +113,7 @@ "column.directory": "Mont a-dreuz ar profiloù", "column.domain_blocks": "Domani berzet", "column.favourites": "Muiañ-karet", + "column.firehose": "Redoù war-eeun", "column.follow_requests": "Rekedoù heuliañ", "column.home": "Degemer", "column.lists": "Listennoù", @@ -143,6 +144,8 @@ "compose_form.lock_disclaimer.lock": "prennet", "compose_form.placeholder": "Petra emaoc'h o soñjal e-barzh ?", "compose_form.poll.duration": "Pad ar sontadeg", + "compose_form.poll.multiple": "Meur a choaz", + "compose_form.poll.option_placeholder": "Choaz {number}", "compose_form.poll.single": "Dibabit unan", "compose_form.poll.switch_to_multiple": "Kemmañ ar sontadeg evit aotren meur a zibab", "compose_form.poll.switch_to_single": "Kemmañ ar sontadeg evit aotren un dibab hepken", @@ -441,7 +444,7 @@ "onboarding.action.back": "Distreiñ", "onboarding.actions.back": "Distreiñ", "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_home": "Mont d'ho red degemer", "onboarding.compose.template": "Salud #Mastodon!", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2c9431481064ca..3700b5d91d2581 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -151,7 +151,7 @@ "compose_form.poll.single": "Einfachauswahl", "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben", "compose_form.poll.switch_to_single": "Nur Einfachauswahl erlauben", - "compose_form.poll.type": "Stil", + "compose_form.poll.type": "Art", "compose_form.publish": "Veröffentlichen", "compose_form.publish_form": "Neuer Beitrag", "compose_form.reply": "Antworten", @@ -277,7 +277,7 @@ "follow_request.authorize": "Genehmigen", "follow_request.reject": "Ablehnen", "follow_requests.unlocked_explanation": "Auch wenn dein Konto öffentlich bzw. nicht geschützt ist, haben die Moderator*innen von {domain} gedacht, dass du diesen Follower lieber manuell bestätigen solltest.", - "follow_suggestions.curated_suggestion": "Vom Server empfohlen", + "follow_suggestions.curated_suggestion": "Vom Server-Team empfohlen", "follow_suggestions.dismiss": "Nicht mehr anzeigen", "follow_suggestions.hints.featured": "Dieses Profil wurde vom {domain}-Team ausgewählt.", "follow_suggestions.hints.friends_of_friends": "Dieses Profil ist bei deinen Followern beliebt.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 3b63c505e4424d..ead3355589f76c 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -271,7 +271,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.title.status": "Filtrar un mensaje", - "firehose.all": "Todas", + "firehose.all": "Todos", "firehose.local": "Este servidor", "firehose.remote": "Otros servidores", "follow_request.authorize": "Autorizar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index aa935e410efbfd..ba54843236c4a2 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -279,15 +279,15 @@ "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.", "follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.dismiss": "No mostrar de nuevo", - "follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.", + "follow_suggestions.hints.featured": "Este perfil ha sido seleccionado a mano por el equipo de {domain}.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", "follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.", - "follow_suggestions.hints.most_interactions": "Este perfil ha estado recibiendo recientemente mucha atención en {domain}.", + "follow_suggestions.hints.most_interactions": "Este perfil ha estado recibiendo mucha atención en {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.", "follow_suggestions.personalized_suggestion": "Sugerencia personalizada", "follow_suggestions.popular_suggestion": "Sugerencia popular", "follow_suggestions.view_all": "Ver todo", - "follow_suggestions.who_to_follow": "A quién seguir", + "follow_suggestions.who_to_follow": "Recomendamos seguir", "followed_tags": "Hashtags seguidos", "footer.about": "Acerca de", "footer.directory": "Directorio de perfiles", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 25ff1157fd8d95..b4cc241814716c 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -529,15 +529,15 @@ "poll_button.add_poll": "Añadir una encuesta", "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", - "privacy.direct.long": "Todos los mencionados en el post", + "privacy.direct.long": "Visible únicamente por los mencionados en la publicación", "privacy.direct.short": "Personas específicas", - "privacy.private.long": "Solo tus seguidores", + "privacy.private.long": "Visible únicamente por tus seguidores", "privacy.private.short": "Seguidores", - "privacy.public.long": "Cualquiera dentro y fuera de Mastodon", - "privacy.public.short": "Público", - "privacy.unlisted.additional": "Esto se comporta exactamente igual que el público, excepto que la publicación no aparecerá en la cronología en directo o en las etiquetas, la exploración o búsqueda de Mastodon, incluso si está optado por activar la cuenta de usuario.", - "privacy.unlisted.long": "Menos fanfares algorítmicos", - "privacy.unlisted.short": "Público tranquilo", + "privacy.public.long": "Visible por todo el mundo, dentro y fuera de Mastodon", + "privacy.public.short": "Pública", + "privacy.unlisted.additional": "Se comporta exactamente igual que la visibilidad pública, excepto que la publicación no aparecerá en las cronologías públicas o en las etiquetas, la sección de Explorar o la búsqueda de Mastodon, incluso si has habilitado la opción de búsqueda en tu perfil.", + "privacy.unlisted.long": "Sin algoritmos de descubrimiento", + "privacy.unlisted.short": "Pública silenciosa", "privacy_policy.last_updated": "Actualizado por última vez {date}", "privacy_policy.title": "Política de Privacidad", "recommended": "Recomendado", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index be8bec616d0c79..be0c262c32c542 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -21,7 +21,7 @@ "account.blocked": "Blokeeritud", "account.browse_more_on_origin_server": "Vaata rohkem algsel profiilil", "account.cancel_follow_request": "Võta jälgimistaotlus tagasi", - "account.copy": "Kopeeri link profiili", + "account.copy": "Kopeeri profiili link", "account.direct": "Maini privaatselt @{name}", "account.disable_notifications": "Peata teavitused @{name} postitustest", "account.domain_blocked": "Domeen peidetud", @@ -277,6 +277,17 @@ "follow_request.authorize": "Autoriseeri", "follow_request.reject": "Hülga", "follow_requests.unlocked_explanation": "Kuigi su konto pole lukustatud, soovitab {domain} personal siiski nende kontode jälgimistaotlused käsitsi üle vaadata.", + "follow_suggestions.curated_suggestion": "Teiste valitud", + "follow_suggestions.dismiss": "Ära enam näita", + "follow_suggestions.hints.featured": "Selle kasutajaprofiili on soovitanud {domain} kasutajad.", + "follow_suggestions.hints.friends_of_friends": "See kasutajaprofiil on jälgitavate seas populaarne.", + "follow_suggestions.hints.most_followed": "See on {domain} enim jälgitud kasutajaprofiil.", + "follow_suggestions.hints.most_interactions": "See on {domain} viimasel ajal enim tähelepanu saanud kasutajaprofiil.", + "follow_suggestions.hints.similar_to_recently_followed": "See kasutajaprofiil sarnaneb neile, mida oled hiljuti jälgima asunud.", + "follow_suggestions.personalized_suggestion": "Isikupärastatud soovitus", + "follow_suggestions.popular_suggestion": "Popuplaarne soovitus", + "follow_suggestions.view_all": "Vaata kõiki", + "follow_suggestions.who_to_follow": "Keda jälgida", "followed_tags": "Jälgitavad märksõnad", "footer.about": "Teave", "footer.directory": "Profiilikataloog", @@ -473,7 +484,7 @@ "onboarding.compose.template": "Tere, #Mastodon!", "onboarding.follows.empty": "Kahjuks ei saa hetkel tulemusi näidata. Proovi kasutada otsingut või lehitse uurimise lehte, et leida inimesi, keda jälgida, või proovi hiljem uuesti.", "onboarding.follows.lead": "Haldad ise oma koduvoogu. Mida rohkemaid inimesi jälgid, seda aktiivsem ja huvitavam see on. Need profiilid võiksid olla head alustamiskohad — saad nende jälgimise alati lõpetada!", - "onboarding.follows.title": "Populaarne Mastodonis", + "onboarding.follows.title": "Isikupärasta oma koduvoogu", "onboarding.profile.discoverable": "Muuda mu profiil avastatavaks", "onboarding.profile.discoverable_hint": "Kui nõustud enda avastamisega Mastodonis, võivad sinu postitused ilmuda otsingutulemustes ja trendides ning sinu profiili võidakse soovitada sinuga sarnaste huvidega inimestele.", "onboarding.profile.display_name": "Näidatav nimi", @@ -493,11 +504,11 @@ "onboarding.start.skip": "Soovid kohe edasi hüpata?", "onboarding.start.title": "Said valmis!", "onboarding.steps.follow_people.body": "Haldad oma koduvoogu. Täida see huvitavate inimestega.", - "onboarding.steps.follow_people.title": "Jälgi {count, plural, one {üht inimest} other {# inimest}}", + "onboarding.steps.follow_people.title": "Isikupärasta oma koduvoogu", "onboarding.steps.publish_status.body": "Ütle maailmale tere.", "onboarding.steps.publish_status.title": "Tee oma esimene postitus", "onboarding.steps.setup_profile.body": "Täidetud profiili korral suhtlevad teised sinuga tõenäolisemalt.", - "onboarding.steps.setup_profile.title": "Kohanda oma profiili", + "onboarding.steps.setup_profile.title": "Isikupärasta oma profiili", "onboarding.steps.share_profile.body": "Anna sõpradele teada, kuidas sind Mastodonist leida!", "onboarding.steps.share_profile.title": "Jaga oma profiili", "onboarding.tips.2fa": "Kas sa teadsid? Saad oma kontot muuta turvalisemaks valides konto seadetes kaheastmelise autoriseerimise. See töötab mistahes sinu valitud TOTP-äpiga, telefoninumbrit pole vaja!", @@ -524,6 +535,7 @@ "privacy.private.short": "Jälgijad", "privacy.public.long": "Nii kasutajad kui mittekasutajad", "privacy.public.short": "Avalik", + "privacy.unlisted.additional": "See on olemuselt küll avalik, aga postitus ei ilmu voogudes ega märksõnades, lehitsedes ega Mastodoni otsingus, isegi kui konto on seadistustes avalik.", "privacy.unlisted.long": "Vähem algoritmilisi teavitusi", "privacy.unlisted.short": "Vaikselt avalik", "privacy_policy.last_updated": "Viimati uuendatud {date}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 484baae1228460..7588b084fd670b 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -201,9 +201,9 @@ "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", "dismissable_banner.community_timeline": "Nämä ovat tuoreimpia julkaisuja käyttäjiltä, joiden tili on palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", - "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeimmalle.", - "dismissable_banner.explore_statuses": "Tänään nämä sosiaalisen verkon julkaisut keräävät eniten huomiota. Uusimmat, tehostetuimmat ja suosikeiksi lisätyimmät julkaisut nousevat listauksessa korkeammalle.", - "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeammalle.", + "dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikeiksi lisätyimmät julkaisut nousevat listauksessa korkeammalle.", + "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeammalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Tältä se näyttää:", @@ -284,7 +284,7 @@ "follow_suggestions.hints.most_followed": "Tämä profiili on yksi seuratuimmista palvelimella {domain}.", "follow_suggestions.hints.most_interactions": "Tämä profiili on viime aikoina saanut paljon huomiota palvelimella {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Tämä profiili on samankaltainen kuin profiilit, joita olet viimeksi seurannut.", - "follow_suggestions.personalized_suggestion": "Personoitu ehdotus", + "follow_suggestions.personalized_suggestion": "Mukautettu ehdotus", "follow_suggestions.popular_suggestion": "Suosittu ehdotus", "follow_suggestions.view_all": "Näytä kaikki", "follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi", @@ -504,7 +504,7 @@ "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin ilman alkuunpääsyohjeistuksia?", "onboarding.start.title": "Olet tehnyt sen!", "onboarding.steps.follow_people.body": "Mastodon perustuu sinua kiinnostavien henkilöjen julkaisujen seuraamiseen.", - "onboarding.steps.follow_people.title": "Mukauta kotisyötteesi", + "onboarding.steps.follow_people.title": "Mukauta kotisyötettäsi", "onboarding.steps.publish_status.body": "Tervehdi maailmaa sanoin, kuvin tai äänestyksin {emoji}", "onboarding.steps.publish_status.title": "Laadi ensimmäinen julkaisusi", "onboarding.steps.setup_profile.body": "Täydentämällä profiilisi tietoja tehostat vuorovaikutteisuutta.", @@ -657,7 +657,7 @@ "status.filter": "Suodata tämä julkaisu", "status.filtered": "Suodatettu", "status.hide": "Piilota julkaisu", - "status.history.created": "{name} luotu {date}", + "status.history.created": "{name} loi {date}", "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", "status.media.open": "Avaa napsauttamalla", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index d775a7b027129d..f4d12d6337c034 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -145,10 +145,10 @@ "compose_form.lock_disclaimer": "Chan eil an cunntas agad {locked}. ’S urrainn do dhuine sam bith ’gad leantainn is na postaichean agad a tha ag amas air an 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.duration": "Faide a’ chunntais-bheachd", - "compose_form.poll.multiple": "Iomadh roghainn", + "compose_form.poll.duration": "Faide a’ chunntais", + "compose_form.poll.multiple": "Iomadh-roghainn", "compose_form.poll.option_placeholder": "Roghainn {number}", - "compose_form.poll.single": "Tagh aonan", + "compose_form.poll.single": "Aonan", "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.poll.type": "Stoidhle", @@ -277,7 +277,13 @@ "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.", + "follow_suggestions.curated_suggestion": "Roghainn an sgioba", "follow_suggestions.dismiss": "Na seall seo a-rithist", + "follow_suggestions.hints.featured": "Chaidh a’ phròifil seo a thaghadh le sgioba {domain} a làimh.", + "follow_suggestions.hints.friends_of_friends": "Tha fèill mhòr air a’ phròifil seo am measg nan daoine a leanas tu.", + "follow_suggestions.hints.most_followed": "Tha a’ phròifil seo am measg an fheadhainn a leanar as trice air {domain}.", + "follow_suggestions.hints.most_interactions": "Chaidh mòran aire a thoirt air a’ phròifil seo air {domain} o chionn goirid.", + "follow_suggestions.hints.similar_to_recently_followed": "Tha a’ phròifil seo coltach ris na pròifilean air an lean thu o chionn goirid.", "follow_suggestions.personalized_suggestion": "Moladh pearsanaichte", "follow_suggestions.popular_suggestion": "Moladh air a bheil fèill mhòr", "follow_suggestions.view_all": "Seall na h-uile", @@ -479,9 +485,11 @@ "onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.", "onboarding.follows.lead": "’S e do prìomh-doras do Mhastodon a th’ ann san dachaigh. Mar as motha an t-uiread de dhaoine a leanas tu ’s ann nas beòthaile inntinniche a bhios i. Seo moladh no dhà dhut airson tòiseachadh:", "onboarding.follows.title": "Cuir dreach pearsanta air do dhachaigh", - "onboarding.profile.discoverable": "Bu mhath leam gun gabh a’ phròifil agam a lorg", + "onboarding.profile.discoverable": "Bu mhath leam gun gabh a’ phròifil agam a rùrachadh", + "onboarding.profile.discoverable_hint": "Ma chuir thu romhad gun gabh a’ phròifil agad a rùrachadh air Mastodon, faodaidh na postaichean agad nochdadh ann an toraidhean luirg agus treandaichean agus dh’fhaoidte gun dèid a’ phròifil agad a mholadh dhan fheadhainn aig a bheil ùidhean coltach ri d’ ùidhean-sa.", "onboarding.profile.display_name": "Ainm-taisbeanaidh", "onboarding.profile.display_name_hint": "D’ ainm slàn no spòrsail…", + "onboarding.profile.lead": "’S urrainn dhut seo a choileanadh uair sam bith eile sna roghainnean far am bi roghainnean gnàthachaidh eile ri làimh dhut cuideachd.", "onboarding.profile.note": "Cunntas-beatha", "onboarding.profile.note_hint": "’S urrainn dhut @iomradh a thoirt air càch no air #tagaicheanHais…", "onboarding.profile.save_and_continue": "Sàbhail ’s lean air adhart", @@ -527,6 +535,8 @@ "privacy.private.short": "Luchd-leantainn", "privacy.public.long": "Duine sam bith taobh a-staigh no a-muigh Mhastodon", "privacy.public.short": "Poblach", + "privacy.unlisted.additional": "Tha seo coltach ris an fhaicsinneachd phoblach ach cha nochd am post air loidhnichean-ama an t-saoghail phoblaich, nan tagaichean hais no an rùrachaidh no ann an toraidhean luirg Mhastodon fiù ’s ma thug thu ro-aonta airson sin seachad.", + "privacy.unlisted.long": "Ìre bheag an algairim", "privacy.unlisted.short": "Poblach ach sàmhach", "privacy_policy.last_updated": "An t-ùrachadh mu dheireadh {date}", "privacy_policy.title": "Poileasaidh prìobhaideachd", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 599688cc07315c..31c9ef7394c350 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -197,6 +197,7 @@ "firehose.all": "Toto", "firehose.local": "Iste servitor", "firehose.remote": "Altere servitores", + "follow_request.reject": "Rejectar", "follow_suggestions.dismiss": "Non monstrar novemente", "follow_suggestions.personalized_suggestion": "Suggestion personalisate", "follow_suggestions.popular_suggestion": "Suggestion personalisate", @@ -204,6 +205,7 @@ "footer.about": "A proposito de", "footer.directory": "Directorio de profilos", "footer.get_app": "Obtene le application", + "footer.invite": "Invitar personas", "footer.keyboard_shortcuts": "Accessos directe de claviero", "footer.privacy_policy": "Politica de confidentialitate", "footer.source_code": "Vider le codice fonte", @@ -244,6 +246,7 @@ "keyboard_shortcuts.muted": "Aperir lista de usatores silentiate", "keyboard_shortcuts.my_profile": "Aperir tu profilo", "keyboard_shortcuts.notifications": "Aperir columna de notificationes", + "keyboard_shortcuts.open_media": "Aperir medio", "keyboard_shortcuts.profile": "Aperir le profilo del autor", "keyboard_shortcuts.reply": "Responder al message", "keyboard_shortcuts.spoilers": "Monstrar/celar le campo CW", @@ -273,9 +276,11 @@ "navigation_bar.blocks": "Usatores blocate", "navigation_bar.bookmarks": "Marcapaginas", "navigation_bar.community_timeline": "Chronologia local", + "navigation_bar.compose": "Componer un nove message", "navigation_bar.direct": "Mentiones private", "navigation_bar.discover": "Discoperir", "navigation_bar.domain_blocks": "Dominios blocate", + "navigation_bar.explore": "Explorar", "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Parolas silentiate", "navigation_bar.lists": "Listas", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index c45543a80332ed..94f620491fd39f 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -1,5 +1,8 @@ { "about.contact": "Anermis:", + "about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.", + "about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.", + "about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}", "about.rules": "Ilugan n uqeddac", "account.account_note_header": "Tazmilt", "account.add_or_remove_from_list": "Rnu neɣ kkes seg tebdarin", @@ -10,13 +13,15 @@ "account.block_short": "Sewḥel", "account.blocked": "Yettusewḥel", "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli", - "account.cancel_follow_request": "Withdraw follow request", + "account.cancel_follow_request": "Sefsex taḍfart", "account.copy": "Nɣel assaɣ ɣer umaɣnu", + "account.direct": "Bder-d @{name} weḥd-s", "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": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}", "account.endorse": "Welleh fell-as deg umaɣnu-inek", + "account.featured_tags.last_status_at": "Tasuffeɣt taneggarut ass n {date}", "account.featured_tags.last_status_never": "Ulac tisuffaɣ", "account.follow": "Ḍfer", "account.followers": "Imeḍfaren", @@ -27,14 +32,17 @@ "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.go_to_profile": "Ddu ɣer umaɣnu", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", - "account.joined_short": "Izeddi da", + "account.joined_short": "Izeddi da seg ass n", "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.", "account.media": "Timidyatin", "account.mention": "Bder-d @{name}", + "account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :", "account.mute": "Sgugem @{name}", + "account.mute_notifications_short": "Susem ilɣa", "account.mute_short": "Sgugem", "account.muted": "Yettwasgugem", + "account.no_bio": "Ulac aglam i d-yettunefken.", "account.open_original_page": "Ldi asebter anasli", "account.posts": "Tisuffaɣ", "account.posts_with_replies": "Tisuffaɣ d tririyin", @@ -69,6 +77,7 @@ "bundle_modal_error.close": "Mdel", "bundle_modal_error.message": "Tella-d kra n tuccḍa mi d-yettali ugbur-agi.", "bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen", + "closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.", "closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen", "closed_registrations_modal.title": "Ajerred deg Masṭudun", "column.about": "Ɣef", @@ -99,6 +108,7 @@ "community.column_settings.remote_only": "Anmeggag kan", "compose.language.change": "Beddel tutlayt", "compose.language.search": "Nadi tutlayin …", + "compose.published.body": "Yeffeɣ-d yizen-nni.", "compose.published.open": "Ldi", "compose.saved.body": "Tettwasekles tsuffeɣt.", "compose_form.direct_message_warning_learn_more": "Issin ugar", @@ -111,6 +121,7 @@ "compose_form.poll.multiple": "Aṭas n ufran", "compose_form.poll.option_placeholder": "Taxtiṛt {number}", "compose_form.poll.single": "Fren yiwen", + "compose_form.poll.type": "Aɣanib", "compose_form.publish": "Suffeɣ", "compose_form.publish_form": "Tasuffeɣt tamaynut", "compose_form.reply": "Err", @@ -128,6 +139,7 @@ "confirmations.discard_edit_media.confirm": "Sefsex", "confirmations.domain_block.confirm": "Ffer taɣult meṛṛa", "confirmations.edit.confirm": "Ẓreg", + "confirmations.edit.message": "Abeddel tura ad d-yaru izen-nni i d-tegreḍ akka tura. Tetḥeqqeḍ tebɣiḍ ad tkemmleḍ?", "confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.mute.confirm": "Sgugem", @@ -142,14 +154,18 @@ "conversation.mark_as_read": "Creḍ yettwaɣṛa", "conversation.open": "Ssken adiwenni", "conversation.with": "Akked {names}", + "copy_icon_button.copied": "Yettwanɣel ɣer ufus", "copypaste.copied": "Yettwanɣel", + "copypaste.copy_to_clipboard": "Nɣel ɣer afus", "directory.federated": "Deg fedivers yettwasnen", "directory.local": "Seg {domain} kan", "directory.new_arrivals": "Imaynuten id yewḍen", "directory.recently_active": "Yermed xas melmi kan", "disabled_account_banner.account_settings": "Iɣewwaṛen n umiḍan", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "dismissable_banner.dismiss": "Agi", + "dismissable_banner.explore_links": "D tiqsiḍin n yisallen i yettwabḍan ass-a deg web inmetti. Tiqsiḍin n yisallen timaynutin i d-yettwassufɣen s wugar n medden yemgaraden, d tid i d-yufraren ugar.", + "dismissable_banner.explore_statuses": "Ti d tisufaɣ seg uzeṭṭa anmetti i d-yettawin tamyigawt ass-a. Tisufaɣ timaynutin yesεan aṭas n lǧehd d tid iḥemmlen s waṭas, ttwaεlayit d timezwura.", + "dismissable_banner.explore_tags": "D wiyi i d ihacṭagen i d-yettawin tamyigawt deg web anmetti ass-a. Ihacṭagen i sseqdacen ugar n medden, εlayit d imezwura.", "embed.instructions": "Ẓẓu addad-agi deg usmel-inek s wenγal n tangalt yellan sdaw-agi.", "embed.preview": "Akka ara d-iban:", "emoji_button.activity": "Aqeddic", @@ -221,19 +237,28 @@ "hashtag.column_settings.tag_mode.any": "Yiwen seg-sen", "hashtag.column_settings.tag_mode.none": "Yiwen ala seg-sen", "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} imtekki} other {{counter} n imtekkiyen}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa", "hashtag.follow": "Ḍfeṛ ahacṭag", + "hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}", "home.column_settings.basic": "Igejdanen", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", "home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !", "home.show_announcements": "Ssken-d ulɣuyen", + "interaction_modal.description.favourite": "S umiḍan ɣef Mastodon, tzemreḍ ad tesmenyifeḍ tasuffeɣt-a akken ad teǧǧeḍ amaru ad iẓer belli tḥemmleḍ-tt u ad tt-id-tsellkeḍ i ticki.", + "interaction_modal.description.follow": "S umiḍan deg Mastodon, tzemreḍ ad tḍefreḍ {name} akken ad d-teṭṭfeḍ iznan-is deg lxiḍ-ik·im agejdan.", + "interaction_modal.description.reblog": "S umiḍan deg Mastodon, tzemreḍ ad tesnerniḍ tasuffeɣt-a akken ad tt-tebḍuḍ d yineḍfaren-ik·im.", + "interaction_modal.description.reply": "S umiḍan deg Mastodon, tzemreḍ ad d-terreḍ ɣef tsuffeɣt-a.", + "interaction_modal.login.action": "Awi-yi ɣer uqeddac-iw", + "interaction_modal.login.prompt": "Taɣult n uqeddac-ik·im agejdan, amedya mastodon.social", "interaction_modal.no_account_yet": "Ulac-ik·ikem deg Maṣṭudun?", "interaction_modal.on_another_server": "Deg uqeddac nniḍen", "interaction_modal.on_this_server": "Deg uqeddac-ayi", "interaction_modal.sign_in": "Ur tekcimeḍ ara ɣer uqeddac-a. Anda yella umiḍan-ik·im ?", + "interaction_modal.sign_in_hint": "Ihi : Wa d asmel ideg tjerdeḍ. Ma ur tecfiḍ ara, nadi imayl n ummager deg tenkult-ik·im. Tzemreḍ daɣen ad d-tefkeḍ isem-ik·im n useqdac ummid ! (amedya @Mastodon@mastodon.social)", "interaction_modal.title.follow": "Ḍfer {name}", "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}", "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}", @@ -311,6 +336,7 @@ "navigation_bar.lists": "Tibdarin", "navigation_bar.logout": "Ffeɣ", "navigation_bar.mutes": "Iseqdacen yettwasusmen", + "navigation_bar.opened_in_classic_interface": "Tisuffaɣ, imiḍanen akked isebtar-nniḍen igejdanen ldin-d s wudem amezwer deg ugrudem web aklasiki.", "navigation_bar.personal": "Udmawan", "navigation_bar.pins": "Tisuffaɣ yettwasenṭḍen", "navigation_bar.preferences": "Imenyafen", @@ -361,12 +387,18 @@ "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", "onboarding.profile.display_name": "Isem ara d-yettwaskanen", + "onboarding.profile.note_hint": "Tzemreḍ ad d-@tbedreḍ imdanen niḍen neɣ #ihacṭagen …", + "onboarding.profile.save_and_continue": "Sekles, tkemmleḍ", + "onboarding.profile.title": "Asbadu n umaɣnu", + "onboarding.profile.upload_avatar": "Sali tugna n umaɣnu", + "onboarding.profile.upload_header": "Sali tacacit n umaɣnu", + "onboarding.share.lead": "Ini-asen i medden amek ara k·m-id-afen deg Mastodon!", "onboarding.share.message": "Nekk d {username} deg #Mastodon! Ḍfer iyi-d sya {url}", "onboarding.share.title": "Bḍu amaɣnu-inek·inem", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.start.title": "Tseggmeḍ-tt !", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", + "onboarding.steps.follow_people.body": "Aḍfer n medden yelhan, d tikti n Mastodon.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Aru tasuffeɣt-inek·inem tamezwarutt", @@ -377,6 +409,7 @@ "picture_in_picture.restore": "Err-it amkan-is", "poll.closed": "Tfukk", "poll.refresh": "Smiren", + "poll.reveal": "Wali igmaḍ", "poll.total_people": "{count, plural, one {# n wemdan} other {# n yemdanen}}", "poll.total_votes": "{count, plural, one {# n udɣaṛ} other {# n yedɣaṛen}}", "poll.vote": "Dɣeṛ", @@ -385,10 +418,13 @@ "poll_button.remove_poll": "Kkes asenqed", "privacy.change": "Seggem tabaḍnit n yizen", "privacy.direct.long": "Wid akk i d-yettwabdaren deg tuffeɣt", + "privacy.direct.short": "Imdanen ulmisen", "privacy.private.long": "Ala wid i k-yeṭṭafaṛen", "privacy.private.short": "Imeḍfaren", "privacy.public.long": "Kra n win yellan deg Masṭudun neɣ berra-s", "privacy.public.short": "Azayez", + "privacy.unlisted.long": "Kra kan n ilguritmen", + "privacy_policy.last_updated": "Aleqqem aneggaru {date}", "privacy_policy.title": "Tasertit tabaḍnit", "refresh": "Smiren", "regeneration_indicator.label": "Yessalay-d…", @@ -412,9 +448,11 @@ "report.next": "Uḍfiṛ", "report.placeholder": "Iwenniten-nniḍen", "report.reasons.dislike": "Ur t-ḥemmleɣ ara", + "report.reasons.other": "D ayen nniḍen", "report.reasons.spam": "D aspam", "report.submit": "Azen", "report.target": "Mmel {target}", + "report.thanks.title": "Ur tebɣiḍ ara ad twaliḍ aya?", "report.unfollow": "Seḥbes aḍfar n @{name}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "Ayen nniḍen", @@ -422,7 +460,13 @@ "report_notification.open": "Ldi aneqqis", "search.no_recent_searches": "Ulac inadiyen ineggura", "search.placeholder": "Nadi", + "search.quick_action.account_search": "Imaɣnuten mṣadan d {x}", + "search.quick_action.go_to_account": "Ddu ɣer umaɣnu {x}", + "search.quick_action.go_to_hashtag": "Ddu ɣer uhacṭag {x}", + "search.quick_action.open_url": "Ldi tansa URL deg Mastodon", + "search.quick_action.status_search": "Tisuffaɣ mṣadan d {x}", "search.search_or_paste": "Nadi neɣ senṭeḍ URL", + "search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.", "search_popout.language_code": "Tangalt ISO n tutlayt", "search_popout.options": "Iwellihen n unadi", "search_popout.recent": "Inadiyen ineggura", @@ -471,6 +515,7 @@ "status.report": "Cetki ɣef @{name}", "status.sensitive_warning": "Agbur amḥulfu", "status.share": "Bḍu", + "status.show_filter_reason": "Ssken-d akken yebɣu yili", "status.show_less": "Ssken-d drus", "status.show_less_all": "Semẓi akk tisuffɣin", "status.show_more": "Ssken-d ugar", @@ -516,6 +561,7 @@ "upload_modal.preparing_ocr": "Aheyyi n OCR…", "upload_modal.preview_label": "Taskant ({ratio})", "upload_progress.label": "Asali iteddu...", + "username.taken": "Yettwaṭṭef yisem-a n useqdac. Ɛreḍ wayeḍ", "video.close": "Mdel tabidyutt", "video.download": "Sidered afaylu", "video.exit_fullscreen": "Ffeɣ seg ugdil ačuran", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 35722b0e0deb7f..8b757484cee3e6 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -27,8 +27,8 @@ "account.domain_blocked": "Užblokuotas domenas", "account.edit_profile": "Redaguoti profilį", "account.enable_notifications": "Pranešti man, kai @{name} paskelbia", - "account.endorse": "Rekomenduoti profilyje", - "account.featured_tags.last_status_at": "Paskutinį kartą paskelbta {date}", + "account.endorse": "Rodyti profilyje", + "account.featured_tags.last_status_at": "Paskutinis įrašas {date}", "account.featured_tags.last_status_never": "Nėra įrašų", "account.featured_tags.title": "{name} rekomenduojami saitažodžiai", "account.follow": "Sekti", @@ -53,7 +53,7 @@ "account.mute_notifications_short": "Nutildyti pranešimus", "account.mute_short": "Nutildyti", "account.muted": "Nutildytas", - "account.mutual": "Abipusis", + "account.mutual": "Bendri", "account.no_bio": "Nėra pateikto aprašymo.", "account.open_original_page": "Atidaryti originalinį puslapį", "account.posts": "Įrašai", @@ -72,7 +72,7 @@ "account.unmute": "Atšaukti nutildymą @{name}", "account.unmute_notifications_short": "Atšaukti nutildymą pranešimams", "account.unmute_short": "Atšaukti nutildymą", - "account_note.placeholder": "Spustelėk norėdamas (-a) pridėti pastabą", + "account_note.placeholder": "Spustelėk norint pridėti pastabą.", "admin.dashboard.daily_retention": "Naudotojų pasilikimo rodiklis pagal dieną po registracijos", "admin.dashboard.monthly_retention": "Naudotojų pasilikimo rodiklis pagal mėnesį po registracijos", "admin.dashboard.retention.average": "Vidurkis", @@ -89,21 +89,21 @@ "announcement.announcement": "Skelbimas", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", - "boost_modal.combo": "Gali paspausti {combo}, kad praleisti kitą kartą", + "boost_modal.combo": "Galima paspausti {combo}, kad praleisti kitą kartą.", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", - "bundle_column_error.error.body": "Užklausos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", + "bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", "bundle_column_error.error.title": "O, ne!", "bundle_column_error.network.body": "Bandant užkrauti šį puslapį įvyko klaida. Tai galėjo atsitikti dėl laikinos tavo interneto ryšio arba šio serverio problemos.", "bundle_column_error.network.title": "Tinklo klaida", "bundle_column_error.retry": "Bandyti dar kartą", - "bundle_column_error.return": "Grįžti į pradžią", + "bundle_column_error.return": "Grįžti į pagrindinį", "bundle_column_error.routing.body": "Prašyto puslapio nepavyko rasti. Ar esi tikras (-a), kad adreso juostoje nurodytas URL adresas yra teisingas?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Uždaryti", "bundle_modal_error.message": "Kraunant šį komponentą kažkas nepavyko.", "bundle_modal_error.retry": "Bandyti dar kartą", "closed_registrations.other_server_instructions": "Kadangi Mastodon yra decentralizuotas, gali susikurti paskyrą kitame serveryje ir vis tiek bendrauti su šiuo serveriu.", - "closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, tačiau nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą domene {domain}.", + "closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, bet nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą domene {domain}.", "closed_registrations_modal.find_another_server": "Rasti kitą serverį", "closed_registrations_modal.preamble": "Mastodon yra decentralizuotas, todėl nesvarbu, kur susikursi paskyrą, galėsi sekti ir bendrauti su bet kuriuo šiame serveryje esančiu asmeniu. Jį gali net savarankiškai talpinti!", "closed_registrations_modal.title": "Užsiregistruoti Mastodon", @@ -116,7 +116,7 @@ "column.domain_blocks": "Užblokuoti domenai", "column.favourites": "Mėgstamiausi", "column.firehose": "Tiesioginiai srautai", - "column.follow_requests": "Sekimo prašymus", + "column.follow_requests": "Sekimo prašymai", "column.home": "Pagrindinis", "column.lists": "Sąrašai", "column.mutes": "Nutildyti naudotojai", @@ -131,7 +131,7 @@ "column_header.show_settings": "Rodyti nustatymus", "column_header.unpin": "Atsegti", "column_subheading.settings": "Nustatymai", - "community.column_settings.local_only": "Tik vietinis", + "community.column_settings.local_only": "Tik vietinė", "community.column_settings.media_only": "Tik medija", "community.column_settings.remote_only": "Tik nuotolinis", "compose.language.change": "Keisti kalbą", @@ -140,17 +140,17 @@ "compose.published.open": "Atidaryti", "compose.saved.body": "Įrašas išsaugotas.", "compose_form.direct_message_warning_learn_more": "Sužinoti daugiau", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Mastodon įrašai nėra šifruojami nuo galo iki galo. Per Mastodon nesidalyk jokia slapta informacija.", "compose_form.hashtag_warning": "Šis įrašas nebus įtraukta į jokį saitažodį, nes ji nėra vieša. Tik viešų įrašų galima ieškoti pagal saitažodį.", "compose_form.lock_disclaimer": "Tavo paskyra nėra {locked}. Bet kas gali sekti tave ir peržiūrėti tik sekėjams skirtus įrašus.", "compose_form.lock_disclaimer.lock": "užrakinta", "compose_form.placeholder": "Kas tavo mintyse?", "compose_form.poll.duration": "Apklausos trukmė", "compose_form.poll.multiple": "Keli pasirinkimai", - "compose_form.poll.option_placeholder": "{number} pasirinkimas", + "compose_form.poll.option_placeholder": "{number} parinktis", "compose_form.poll.single": "Pasirinkti vieną", - "compose_form.poll.switch_to_multiple": "Keisti apklausą, kad būtų galima pasirinkti kelis pasirinkimus", - "compose_form.poll.switch_to_single": "Pakeisti apklausą, kad būtų galima pasirinkti vieną variantą", + "compose_form.poll.switch_to_multiple": "Keisti apklausą, kad būtų galima pasirinkti kelis pasirinkimus.", + "compose_form.poll.switch_to_single": "Keisti apklausą, kad būtų galima pasirinkti vieną pasirinkimą", "compose_form.poll.type": "Stilius", "compose_form.publish": "Skelbti", "compose_form.publish_form": "Naujas įrašas", @@ -166,24 +166,26 @@ "confirmations.cancel_follow_request.confirm": "Atšaukti prašymą", "confirmations.cancel_follow_request.message": "Ar tikrai nori atšaukti savo prašymą sekti {name}?", "confirmations.delete.confirm": "Ištrinti", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "Ar tikrai nori ištrinti šį įrašą?", "confirmations.delete_list.confirm": "Ištrinti", "confirmations.delete_list.message": "Ar tikrai nori visam laikui ištrinti šį sąrašą?", "confirmations.discard_edit_media.confirm": "Atmesti", "confirmations.discard_edit_media.message": "Turi neišsaugotų medijos aprašymo ar peržiūros pakeitimų, vis tiek juos atmesti?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Blokuoti visą domeną", + "confirmations.domain_block.message": "Ar tikrai, tikrai nori užblokuoti visą {domain}? Daugeliu atvejų užtenka kelių tikslinių blokavimų arba nutildymų. Šio domeno turinio nematysi jokiose viešose laiko skalėse ar pranešimuose. Tavo sekėjai iš to domeno bus pašalinti.", "confirmations.edit.confirm": "Redaguoti", "confirmations.edit.message": "Redaguojant dabar, bus perrašyta šiuo metu kuriama žinutė. Ar tikrai nori tęsti?", "confirmations.logout.confirm": "Atsijungti", "confirmations.logout.message": "Ar tikrai nori atsijungti?", "confirmations.mute.confirm": "Nutildyti", - "confirmations.mute.explanation": "Tai paslėps jų įrašus ir įrašus, kuriuose jie menėmi, tačiau jie vis tiek galės matyti tavo įrašus ir sekti.", - "confirmations.mute.message": "Ar tikrai norite nutildyti {name}?", - "confirmations.redraft.confirm": "Ištrinti ir perrašyti", + "confirmations.mute.explanation": "Tai paslėps jų įrašus ir įrašus, kuriuose jie menėmi, bet jie vis tiek galės matyti tavo įrašus ir sekti.", + "confirmations.mute.message": "Ar tikrai nori nutildyti {name}?", + "confirmations.redraft.confirm": "Ištrinti ir parengti iš naujo", + "confirmations.redraft.message": "Ar tikrai nori ištrinti šį įrašą ir parengti jį iš naujo kaip juodraštį? Bus prarastos mėgstamiausios ir pakėlimai, o atsakymai į originalinį įrašą taps liekamojais.", "confirmations.reply.confirm": "Atsakyti", "confirmations.reply.message": "Atsakant dabar, bus perrašyta metu kuriama žinutė. Ar tikrai nori tęsti?", "confirmations.unfollow.confirm": "Nebesekti", - "confirmations.unfollow.message": "Ar tikrai norite atsisakyti sekimo {name}?", + "confirmations.unfollow.message": "Ar tikrai nori nebesekti {name}?", "conversation.delete": "Ištrinti pokalbį", "conversation.mark_as_read": "Žymėti kaip skaitytą", "conversation.open": "Peržiūrėti pokalbį", @@ -191,87 +193,94 @@ "copy_icon_button.copied": "Nukopijuota į iškarpinę", "copypaste.copied": "Nukopijuota", "copypaste.copy_to_clipboard": "Kopijuoti į iškarpinę", - "directory.local": "Iš {domain} tik", - "directory.new_arrivals": "Naujos prekės", - "directory.recently_active": "Neseniai aktyvus", + "directory.federated": "Iš žinomų fediversų", + "directory.local": "Tik iš {domain}", + "directory.new_arrivals": "Nauji atvykėliai", + "directory.recently_active": "Neseniai aktyvus (-i)", "disabled_account_banner.account_settings": "Paskyros nustatymai", - "disabled_account_banner.text": "Jūsų paskyra {disabledAccount} šiuo metu yra išjungta.", + "disabled_account_banner.text": "Tavo paskyra {disabledAccount} šiuo metu išjungta.", + "dismissable_banner.community_timeline": "Tai – naujausi vieši įrašai, kuriuos paskelbė žmonės, kurių paskyros talpinamos {domain}.", "dismissable_banner.dismiss": "Atmesti", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_statuses": "Tai įrašai iš viso socialinio tinklo, kurie šiandien sulaukia vis daugiau dėmesio. Naujesni įrašai, turintys daugiau boosts ir mėgstamiausių įrašų, yra vertinami aukščiau.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Štai kaip tai atrodys:", + "dismissable_banner.explore_links": "Tai – naujienos, kuriomis šiandien daugiausiai bendrinamasi socialiniame žiniatinklyje. Naujesnės naujienų istorijos, kurias paskelbė daugiau skirtingų žmonių, vertinamos aukščiau.", + "dismissable_banner.explore_statuses": "Tai – įrašai iš viso socialinio žiniatinklio, kurie šiandien sulaukia daug dėmesio. Naujesni įrašai, turintys daugiau pakėlimų ir mėgstamų, vertinami aukščiau.", + "dismissable_banner.explore_tags": "Tai – saitažodžiai, kurie šiandien sulaukia daug dėmesio socialiniame žiniatinklyje. Saitažodžiai, kuriuos naudoja daugiau skirtingų žmonių, vertinami aukščiau.", + "dismissable_banner.public_timeline": "Tai – naujausi vieši įrašai, kuriuos socialiniame žiniatinklyje paskelbė žmonės, sekantys {domain}.", + "embed.instructions": "Įterpk šį įrašą į savo svetainę nukopijavus (-usi) toliau pateiktą kodą.", + "embed.preview": "Štai, kaip tai atrodys:", "emoji_button.activity": "Veikla", "emoji_button.clear": "Išvalyti", "emoji_button.custom": "Pasirinktinis", "emoji_button.flags": "Vėliavos", - "emoji_button.food": "Maistas ir Gėrimai", + "emoji_button.food": "Maistas ir gėrimai", "emoji_button.label": "Įterpti veidelius", "emoji_button.nature": "Gamta", - "emoji_button.not_found": "Nerasta jokių tinkamų jaustukų", + "emoji_button.not_found": "Nerasta jokių tinkamų jaustukų.", "emoji_button.objects": "Objektai", "emoji_button.people": "Žmonės", - "emoji_button.recent": "Dažniausiai naudojama", - "emoji_button.search": "Paieška...", + "emoji_button.recent": "Dažniausiai naudojami", + "emoji_button.search": "Ieškoti...", "emoji_button.search_results": "Paieškos rezultatai", "emoji_button.symbols": "Simboliai", - "emoji_button.travel": "Kelionės ir Vietos", - "empty_column.account_hides_collections": "Šis naudotojas (-a) pasirinko nepadaryti šią informaciją prieinamą", - "empty_column.account_suspended": "Paskyra sustabdyta", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profilis neprieinamas", - "empty_column.blocks": "Dar neužblokavote nė vieno naudotojo.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "Vietinė laiko juosta yra tuščia. Parašykite ką nors viešai, kad pradėtumėte veikti!", - "empty_column.direct": "Dar neturite jokių privačių paminėjimų. Kai išsiųsite arba gausite tokį pranešimą, jis bus rodomas čia.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "Dar neturite mėgstamiausių įrašų. Kai vieną iš jų pamėgsite, jis bus rodomas čia.", - "empty_column.follow_requests": "Dar neturite jokių sekimo užklausų. Kai gausite tokį prašymą, jis bus rodomas čia.", - "empty_column.followed_tags": "Dar nesekėte jokių grotažymių. Kai tai padarysite, jie bus rodomi čia.", + "emoji_button.travel": "Kelionės ir vietos", + "empty_column.account_hides_collections": "Šis (-i) naudotojas (-a) pasirinko nepadaryti šią informaciją prieinamą.", + "empty_column.account_suspended": "Paskyra sustabdyta.", + "empty_column.account_timeline": "Nėra įrašų čia.", + "empty_column.account_unavailable": "Profilis neprieinamas.", + "empty_column.blocks": "Dar neužblokavai nė vieno naudotojo.", + "empty_column.bookmarked_statuses": "Dar neturi nė vienos įrašo žymės. Kai vieną iš jų pridėsi į žymes, jis bus rodomas čia.", + "empty_column.community": "Vietinė laiko skalė tuščia. Parašyk ką nors viešai, kad pradėtum bendrauti!", + "empty_column.direct": "Dar neturi jokių privačių paminėjimų. Kai išsiųsi arba gausi vieną iš jų, jis bus rodomas čia.", + "empty_column.domain_blocks": "Dar nėra užblokuotų domenų.", + "empty_column.explore_statuses": "Šiuo metu niekas nėra tendencinga. Patikrink vėliau.", + "empty_column.favourited_statuses": "Dar neturi mėgstamų įrašų. Kai vieną iš jų pamėgsi, jis bus rodomas čia.", + "empty_column.favourites": "Šio įrašo dar niekas nepamėgo. Kai kas nors tai padarys, jie bus rodomi čia.", + "empty_column.follow_requests": "Dar neturi jokių sekimo prašymų. Kai gausi tokį prašymą, jis bus rodomas čia.", + "empty_column.followed_tags": "Dar neseki jokių saitažodžių. Kai tai padarysi, jie bus rodomi čia.", "empty_column.hashtag": "Nėra nieko šiame saitažodyje kol kas.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {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": "Dar neturite jokių sąrašų. Kai jį sukursite, jis bus rodomas čia.", - "empty_column.mutes": "Dar nesate nutildę nė vieno naudotojo.", - "empty_column.notifications": "Dar neturite jokių pranešimų. Kai kiti žmonės su jumis bendraus, matysite tai čia.", - "empty_column.public": "Čia nieko nėra! Parašykite ką nors viešai arba rankiniu būdu sekite naudotojus iš kitų serverių, kad jį užpildytumėte", - "error.unexpected_crash.explanation": "Dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos šis puslapis negalėjo būti rodomas teisingai.", - "error.unexpected_crash.explanation_addons": "Šį puslapį nepavyko teisingai parodyti. Šią klaidą greičiausiai sukėlė naršyklės priedas arba automatinio vertimo įrankiai.", - "error.unexpected_crash.next_steps": "Pabandykite atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsite naudotis \"Mastodon\" naudodami kitą naršyklę arba vietinę programėlę.", - "error.unexpected_crash.next_steps_addons": "Pabandykite juos išjungti ir atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsite naudotis \"Mastodon\" naudodami kitą naršyklę arba vietinę programėlę.", - "errors.unexpected_crash.report_issue": "Pranešti apie triktį", + "empty_column.home": "Tavo pagrindinio laiko skalė tuščia! Sek daugiau žmonių, kad ją užpildytum.", + "empty_column.list": "Nėra nieko šiame sąraše kol kas. Kai šio sąrašo nariai paskelbs naujų įrašų, jie bus rodomi čia.", + "empty_column.lists": "Dar neturi jokių sąrašų. Kai jį sukursi, jis bus rodomas čia.", + "empty_column.mutes": "Dar nesi nutildęs (-usi) nė vieno naudotojo.", + "empty_column.notifications": "Dar neturi jokių pranešimų. Kai kiti žmonės su tavimi bendraus, matysi tai čia.", + "empty_column.public": "Čia nieko nėra! Parašyk ką nors viešai arba rankiniu būdu sek naudotojus iš kitų serverių, kad jį užpildytum.", + "error.unexpected_crash.explanation": "Dėl mūsų kodo riktos arba naršyklės suderinamumo problemos šis puslapis negalėjo būti rodomas teisingai.", + "error.unexpected_crash.explanation_addons": "Šį puslapį nepavyko parodyti teisingai. Šią klaidą greičiausiai sukėlė naršyklės priedas arba automatinio vertimo įrankiai.", + "error.unexpected_crash.next_steps": "Pabandyk atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsi naudotis Mastodon per kitą naršyklę arba savąją programėlę.", + "error.unexpected_crash.next_steps_addons": "Pabandyk juos išjungti ir atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsi naudotis Mastodon per kitą naršyklę arba savąją programėlę.", + "errors.unexpected_crash.copy_stacktrace": "Kopijuoti dėklo eigą į iškarpinę", + "errors.unexpected_crash.report_issue": "Pranešti apie problemą", "explore.search_results": "Paieškos rezultatai", "explore.suggested_follows": "Žmonės", "explore.title": "Naršyti", "explore.trending_links": "Naujienos", "explore.trending_statuses": "Įrašai", "explore.trending_tags": "Saitažodžiai", - "filter_modal.added.context_mismatch_explanation": "Ši filtro kategorija netaikoma kontekste, kuriame peržiūrėjote šį pranešimą. Jei norite, kad pranešimas būtų filtruojamas ir šiame kontekste, turėsite redaguoti filtrą.", - "filter_modal.added.context_mismatch_title": "Konteksto neatitikimas!", - "filter_modal.added.expired_explanation": "Ši filtro kategorija nustojo galioti, kad ji būtų taikoma, turėsite pakeisti galiojimo datą.", - "filter_modal.added.expired_title": "Pasibaigė filtro galiojimo laikas!", - "filter_modal.added.review_and_configure": "Norėdami peržiūrėti ir toliau konfigūruoti šią filtro kategoriją, eikite į {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filtro nuostatos", + "filter_modal.added.context_mismatch_explanation": "Ši filtro kategorija netaikoma kontekstui, kuriame peržiūrėjai šį įrašą. Jei nori, kad įrašas būtų filtruojamas ir šiame kontekste, turėsi redaguoti filtrą.", + "filter_modal.added.context_mismatch_title": "Konteksto neatitikimas.", + "filter_modal.added.expired_explanation": "Ši filtro kategorija nustojo galioti. Kad ji būtų taikoma, turėsi pakeisti galiojimo datą.", + "filter_modal.added.expired_title": "Baigėsi filtro galiojimas.", + "filter_modal.added.review_and_configure": "Norint peržiūrėti ir toliau konfigūruoti šią filtro kategoriją, eik į nuorodą {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filtro nustatymai", "filter_modal.added.settings_link": "nustatymų puslapis", - "filter_modal.added.short_explanation": "Šis pranešimas buvo įtrauktas į šią filtro kategoriją: {title}.", - "filter_modal.added.title": "Pridėtas filtras!", - "filter_modal.select_filter.context_mismatch": "netaikoma šiame kontekste", - "filter_modal.select_filter.expired": "nebegalioja", + "filter_modal.added.short_explanation": "Šis įrašas buvo pridėtas į šią filtro kategoriją: {title}.", + "filter_modal.added.title": "Pridėtas filtras.", + "filter_modal.select_filter.context_mismatch": "netaikoma šiame kontekste.", + "filter_modal.select_filter.expired": "nebegalioja.", "filter_modal.select_filter.prompt_new": "Nauja kategorija: {name}", "filter_modal.select_filter.search": "Ieškoti arba sukurti", - "filter_modal.select_filter.subtitle": "Naudoti esamą kategoriją arba sukurti naują", + "filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.", "filter_modal.select_filter.title": "Filtruoti šį įrašą", - "filter_modal.title.status": "Filtruoti šį įrašą", + "filter_modal.title.status": "Filtruoti įrašą", "firehose.all": "Visi", "firehose.local": "Šis serveris", "firehose.remote": "Kiti serveriai", - "follow_request.authorize": "Autorizuoti", + "follow_request.authorize": "Leisti", "follow_request.reject": "Atmesti", - "follow_requests.unlocked_explanation": "Nors tavo paskyra neužrakinta, {domain} personalas mano, kad galbūt norėsi rankiniu būdu patikrinti šių paskyrų sekimo užklausas.", + "follow_requests.unlocked_explanation": "Nors tavo paskyra neužrakinta, {domain} personalas mano, kad galbūt norėsi rankiniu būdu patikrinti šių paskyrų sekimo prašymus.", "follow_suggestions.curated_suggestion": "Personalo pasirinkimai", "follow_suggestions.dismiss": "Daugiau nerodyti", - "follow_suggestions.hints.friends_of_friends": "Šis profilis yra populiarus tarp žmonių, kuriuos sekei.", + "follow_suggestions.hints.featured": "Šį profilį atrinko {domain} komanda.", + "follow_suggestions.hints.friends_of_friends": "Šis profilis yra populiarus tarp žmonių, kuriuos seki.", "follow_suggestions.hints.most_followed": "Šis profilis yra vienas iš labiausiai sekamų {domain}.", "follow_suggestions.hints.most_interactions": "Pastaruoju metu šis profilis sulaukia daug dėmesio šiame {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Šis profilis panašus į profilius, kuriuos neseniai sekei.", @@ -279,7 +288,7 @@ "follow_suggestions.popular_suggestion": "Populiarus pasiūlymas", "follow_suggestions.view_all": "Peržiūrėti viską", "follow_suggestions.who_to_follow": "Ką sekti", - "followed_tags": "Sekamos saitažodžiai", + "followed_tags": "Sekami saitažodžiai", "footer.about": "Apie", "footer.directory": "Profilių katalogas", "footer.get_app": "Gauti programėlę", @@ -289,214 +298,243 @@ "footer.source_code": "Peržiūrėti šaltinio kodą", "footer.status": "Būsena", "generic.saved": "Išsaugoti", - "getting_started.heading": "Pradedant", + "getting_started.heading": "Kaip pradėti", "hashtag.column_header.tag_mode.all": "ir {additional}", "hashtag.column_header.tag_mode.any": "ar {additional}", "hashtag.column_header.tag_mode.none": "be {additional}", - "hashtag.column_settings.select.no_options_message": "Pasiūlymų nerasta", - "hashtag.column_settings.select.placeholder": "Įvesti grotažymes…", + "hashtag.column_settings.select.no_options_message": "Pasiūlymų nerasta.", + "hashtag.column_settings.select.placeholder": "Įvesti saitažodžius…", "hashtag.column_settings.tag_mode.all": "Visi šie", - "hashtag.column_settings.tag_mode.any": "Bet kuris šių", + "hashtag.column_settings.tag_mode.any": "Bet kuris iš šių", "hashtag.column_settings.tag_mode.none": "Nė vienas iš šių", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.counter_by_accounts": "{count, plural,one {{counter} dalyvis}other {{counter} dalyviai}}", - "hashtag.counter_by_uses": "{count, plural, one {{counter} įrašas} other {{counter} įrašų}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} įrašas} other {{counter} įrašų}} šiandien", - "hashtag.follow": "Sekti grotažymę", - "hashtag.unfollow": "Nesekti grotažymės", - "hashtags.and_other": "…ir{count, plural,other {#daugiau}}", - "home.column_settings.basic": "Pagrindinis", - "home.column_settings.show_reblogs": "Rodyti \"boosts\"", + "hashtag.column_settings.tag_toggle": "Įtraukti papildomas šio stulpelio žymes", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} dalyvis} few {{counter} dalyviai} many {{counter} dalyvio} other {{counter} dalyvių}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} įrašas} few {{counter} įrašai} many {{counter} įrašo} other {{counter} įrašų}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} įrašas} few {{counter} įrašai} many {{counter} įrašo} other {{counter} įrašų}} šiandien", + "hashtag.follow": "Sekti saitažodį", + "hashtag.unfollow": "Nebesekti saitažodį", + "hashtags.and_other": "…ir {count, plural, one {# daugiau} few {# daugiau} many {# daugiau}other {# daugiau}}", + "home.column_settings.basic": "Paprastas", + "home.column_settings.show_reblogs": "Rodyti pakėlimus", "home.column_settings.show_replies": "Rodyti atsakymus", "home.hide_announcements": "Slėpti skelbimus", - "home.pending_critical_update.link": "Žiūrėti atnaujinimus", - "home.pending_critical_update.title": "Galimas kritinis saugumo atnaujinimas!", + "home.pending_critical_update.body": "Kuo greičiau atnaujink savo Mastodon serverį!", + "home.pending_critical_update.link": "Žiūrėti naujinimus", + "home.pending_critical_update.title": "Galimas kritinis saugumo naujinimas.", + "home.show_announcements": "Rodyti skelbimus", + "interaction_modal.description.favourite": "Su Mastodon paskyra gali pamėgti šį įrašą, kad autorius (-ė) žinotų, jog vertinti tai ir išsaugoti jį vėliau.", + "interaction_modal.description.follow": "Su Mastodon paskyra gali sekti {name}, kad gautum jų įrašus į pagrindinį srautą.", + "interaction_modal.description.reblog": "Su Mastodon paskyra gali pakelti šią įrašą ir pasidalyti juo su savo sekėjais.", + "interaction_modal.description.reply": "Su Mastodon paskyra gali atsakyti į šį įrašą.", + "interaction_modal.login.action": "Į pagrindinį puslapį", + "interaction_modal.login.prompt": "Tavo pagrindinio serverio domenas, pvz., mastodon.social.", "interaction_modal.no_account_yet": "Nesi Mastodon?", "interaction_modal.on_another_server": "Kitame serveryje", "interaction_modal.on_this_server": "Šiame serveryje", - "interaction_modal.sign_in": "Nesi prisijungęs (-usi) prie šio serverio. Kur yra laikoma tavo paskyra?", + "interaction_modal.sign_in": "Nesi prisijungęs (-usi) prie šio serverio. Kur yra talpinama tavo paskyra?", "interaction_modal.sign_in_hint": "Patarimas: tai svetainė, kurioje užsiregistravai. Jei neprisimeni, ieškok sveikinimo el. laiško savo pašto dėžutėje. Taip pat gali įvesti visą savo naudotojo vardą (pvz., @Mastodon@mastodon.social).", - "interaction_modal.title.favourite": "Mėgstamiausias {name} įrašas", + "interaction_modal.title.favourite": "Pamėgti {name} įrašą", "interaction_modal.title.follow": "Sekti {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.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", + "interaction_modal.title.reblog": "Pakelti {name} įrašą", + "interaction_modal.title.reply": "Atsakyti į {name} įrašą", + "intervals.full.days": "{number, plural, one {# diena} few {# dienos} many {# dienos} other {# dienų}}", + "intervals.full.hours": "{number, plural, one {# valanda} few {# valandos} many {# valandos} other {# valandų}}", + "intervals.full.minutes": "{number, plural, one {# minutė} few {# minutes} many {# minutės} other {# minučių}}", + "keyboard_shortcuts.back": "Naršyti atgal", + "keyboard_shortcuts.blocked": "Atidaryti užblokuotų naudotojų sąrašą", + "keyboard_shortcuts.boost": "Pakelti įrašą", + "keyboard_shortcuts.column": "Fokusuoti stulpelį", + "keyboard_shortcuts.compose": "Fokusuoti rengykles teksto sritį", + "keyboard_shortcuts.description": "Aprašymas", + "keyboard_shortcuts.direct": "atidaryti privačių paminėjimų stulpelį", + "keyboard_shortcuts.down": "Perkelti žemyn sąraše", + "keyboard_shortcuts.enter": "Atidaryti įrašą", + "keyboard_shortcuts.favourite": "Pamėgti įrašą", + "keyboard_shortcuts.favourites": "Atidaryti mėgstamųjų sąrašą", + "keyboard_shortcuts.federated": "Atidaryti federacinę laiko skalę", + "keyboard_shortcuts.heading": "Spartieji klavišai", + "keyboard_shortcuts.home": "Atidaryti pagrindinį laiko skalę", "keyboard_shortcuts.hotkey": "Spartusis klavišas", - "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.legend": "Rodyti šią legendą", + "keyboard_shortcuts.local": "Atidaryti vietinę laiko skalę", + "keyboard_shortcuts.mention": "Paminėti autorių (-ę)", + "keyboard_shortcuts.muted": "Atidaryti nutildytų naudotojų sąrašą", + "keyboard_shortcuts.my_profile": "Atidaryti savo profilį", + "keyboard_shortcuts.notifications": "Atidaryti pranešimų stulpelį", "keyboard_shortcuts.open_media": "Atidaryti mediją", - "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.pinned": "Atidaryti prisegtų įrašų sąrašą", + "keyboard_shortcuts.profile": "Atidaryti autoriaus (-ės) profilį", + "keyboard_shortcuts.reply": "Atsakyti į įrašą", + "keyboard_shortcuts.requests": "Atidaryti sekimo prašymų sąrašą", + "keyboard_shortcuts.search": "Fokusuoti paieškos juostą", + "keyboard_shortcuts.spoilers": "Rodyti / slėpti TĮ lauką", + "keyboard_shortcuts.start": "Atidarykite stulpelį Kaip pradėti", + "keyboard_shortcuts.toggle_hidden": "Rodyti / slėpti tekstą po TĮ", "keyboard_shortcuts.toggle_sensitivity": "Rodyti / slėpti mediją", - "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.toot": "Pradėti naują įrašą", + "keyboard_shortcuts.unfocus": "Nebefokusuoti rengykles teksto sritį / paiešką", + "keyboard_shortcuts.up": "Perkelti į viršų sąraše", "lightbox.close": "Uždaryti", + "lightbox.compress": "Suspausti vaizdo peržiūros langelį", + "lightbox.expand": "Išplėsti vaizdo peržiūros langelį", "lightbox.next": "Kitas", "lightbox.previous": "Ankstesnis", "limited_account_hint.action": "Vis tiek rodyti profilį", - "limited_account_hint.title": "Šį profilį paslėpė {domain} moderatoriai.", + "limited_account_hint.title": "Šį profilį paslėpė {domain} prižiūrėtojai.", "link_preview.author": "Sukūrė {name}", "lists.account.add": "Pridėti į sąrašą", "lists.account.remove": "Pašalinti iš sąrašo", "lists.delete": "Ištrinti sąrašą", "lists.edit": "Redaguoti sąrašą", - "lists.edit.submit": "Prierašo pakeitimas", + "lists.edit.submit": "Keisti pavadinimą", + "lists.exclusive": "Slėpti šiuos įrašus iš pagrindinio", "lists.new.create": "Pridėti sąrašą", "lists.new.title_placeholder": "Naujas sąrašo pavadinimas", - "lists.replies_policy.followed": "Bet kuris sekamas naudotojas", - "lists.replies_policy.list": "Sąrašo nariai", - "lists.replies_policy.none": "Nei vienas", + "lists.replies_policy.followed": "Bet kuriam sekamam naudotojui", + "lists.replies_policy.list": "Sąrašo nariams", + "lists.replies_policy.none": "Nei vienam", "lists.replies_policy.title": "Rodyti atsakymus:", "lists.search": "Ieškoti tarp sekamų žmonių", - "lists.subheading": "Jūsų sąrašai", + "lists.subheading": "Tavo sąrašai", + "load_pending": "{count, plural, one {# naujas elementas} few {# nauji elementai} many {# naujo elemento} other {# naujų elementų}}", "loading_indicator.label": "Kraunama…", "media_gallery.toggle_visible": "{number, plural, one {Slėpti vaizdą} few {Slėpti vaizdus} many {Slėpti vaizdo} other {Slėpti vaizdų}}", - "moved_to_account_banner.text": "Tavo paskyra {disabledAccount} šiuo metu yra išjungta, nes persikėlei į {movedToAccount}.", + "moved_to_account_banner.text": "Tavo paskyra {disabledAccount} šiuo metu išjungta, nes persikėlei į {movedToAccount}.", "mute_modal.duration": "Trukmė", "mute_modal.hide_notifications": "Slėpti šio naudotojo pranešimus?", - "mute_modal.indefinite": "Neribotas", + "mute_modal.indefinite": "Neribota", "navigation_bar.about": "Apie", - "navigation_bar.advanced_interface": "Atidarykite išplėstinę žiniatinklio sąsają", + "navigation_bar.advanced_interface": "Atidaryti išplėstinę žiniatinklio sąsają", "navigation_bar.blocks": "Užblokuoti naudotojai", "navigation_bar.bookmarks": "Žymės", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.community_timeline": "Vietinė laiko skalė", + "navigation_bar.compose": "Sukurti naują įrašą", "navigation_bar.direct": "Privatūs paminėjimai", "navigation_bar.discover": "Atrasti", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Užblokuoti domenai", "navigation_bar.explore": "Naršyti", - "navigation_bar.favourites": "Mėgstamiausi", - "navigation_bar.filters": "Nutylėti žodžiai", - "navigation_bar.follow_requests": "Sekti prašymus", - "navigation_bar.followed_tags": "Sekti grotažymę", + "navigation_bar.favourites": "Mėgstami", + "navigation_bar.filters": "Nutildyti žodžiai", + "navigation_bar.follow_requests": "Sekimo prašymai", + "navigation_bar.followed_tags": "Sekami saitažodžiai", "navigation_bar.follows_and_followers": "Sekimai ir sekėjai", "navigation_bar.lists": "Sąrašai", "navigation_bar.logout": "Atsijungti", - "navigation_bar.mutes": "Užtildyti naudotojai", + "navigation_bar.mutes": "Nutildyti naudotojai", "navigation_bar.opened_in_classic_interface": "Įrašai, paskyros ir kiti konkretūs puslapiai pagal numatytuosius nustatymus atidaromi klasikinėje žiniatinklio sąsajoje.", "navigation_bar.personal": "Asmeninis", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.pins": "Prisegti įrašai", "navigation_bar.preferences": "Nuostatos", - "navigation_bar.public_timeline": "Federuota laiko juosta", + "navigation_bar.public_timeline": "Federacinė laiko skalė", "navigation_bar.search": "Ieškoti", "navigation_bar.security": "Apsauga", - "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", - "notification.admin.report": "{name} pranešė.{target}", + "not_signed_in_indicator.not_signed_in": "Norint pasiekti šį išteklį, reikia prisijungti.", + "notification.admin.report": "{name} pranešė {target}", "notification.admin.sign_up": "{name} užsiregistravo", - "notification.favourite": "{name} pamėgo jūsų įrašą", - "notification.follow": "{name} pradėjo jus sekti", - "notification.follow_request": "{name} nori tapti jūsų sekėju", - "notification.mention": "{name} paminėjo jus", + "notification.favourite": "{name} pamėgo tavo įrašą", + "notification.follow": "{name} seka tave", + "notification.follow_request": "{name} paprašė tave sekti", + "notification.mention": "{name} paminėjo tave", "notification.own_poll": "Tavo apklausa baigėsi", "notification.poll": "Apklausa, kurioje balsavai, pasibaigė", - "notification.reblog": "{name} boosted your status", + "notification.reblog": "{name} pakėlė tavo įrašą", "notification.status": "{name} ką tik paskelbė", "notification.update": "{name} redagavo įrašą", "notifications.clear": "Išvalyti pranešimus", "notifications.clear_confirmation": "Ar tikrai nori visam laikui išvalyti visus pranešimus?", - "notifications.column_settings.admin.report": "Nauji ataskaitos:", - "notifications.column_settings.admin.sign_up": "Nauji prisiregistravimai:", + "notifications.column_settings.admin.report": "Naujos ataskaitos:", + "notifications.column_settings.admin.sign_up": "Naujos registracijos:", "notifications.column_settings.alert": "Darbalaukio pranešimai", - "notifications.column_settings.favourite": "Mėgstamiausi:", + "notifications.column_settings.favourite": "Mėgstami:", "notifications.column_settings.filter_bar.advanced": "Rodyti visas kategorijas", - "notifications.column_settings.filter_bar.category": "Greito filtro juosta", + "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", "notifications.column_settings.filter_bar.show_bar": "Rodyti filtro juostą", "notifications.column_settings.follow": "Nauji sekėjai:", - "notifications.column_settings.follow_request": "Nauji prašymai sekti:", + "notifications.column_settings.follow_request": "Nauji sekimo prašymai:", "notifications.column_settings.mention": "Paminėjimai:", "notifications.column_settings.poll": "Balsavimo rezultatai:", - "notifications.column_settings.push": "\"Push\" pranešimai", + "notifications.column_settings.push": "Stumdomieji pranešimai", "notifications.column_settings.reblog": "Pakėlimai:", "notifications.column_settings.show": "Rodyti stulpelyje", "notifications.column_settings.sound": "Paleisti garsą", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nauji įrašai:", "notifications.column_settings.unread_notifications.category": "Neperskaityti pranešimai", "notifications.column_settings.unread_notifications.highlight": "Paryškinti neperskaitytus pranešimus", "notifications.column_settings.update": "Redagavimai:", "notifications.filter.all": "Visi", - "notifications.filter.boosts": "\"Boost\" kiekis", - "notifications.filter.favourites": "Mėgstamiausi", + "notifications.filter.boosts": "Pakėlimai", + "notifications.filter.favourites": "Mėgstami", "notifications.filter.follows": "Sekimai", "notifications.filter.mentions": "Paminėjimai", "notifications.filter.polls": "Balsavimo rezultatai", - "notifications.filter.statuses": "Atnaujinimai iš žmonių kuriuos sekate", + "notifications.filter.statuses": "Naujinimai iš žmonių, kuriuos seki", "notifications.grant_permission": "Suteikti leidimą.", "notifications.group": "{count} pranešimai", "notifications.mark_as_read": "Pažymėti kiekvieną pranešimą kaip perskaitytą", - "notifications.permission_denied": "Darbalaukio pranešimai nepasiekiami dėl anksčiau atmestos naršyklės leidimų užklausos", - "notifications.permission_denied_alert": "Negalima įjungti darbalaukio pranešimų, nes prieš tai naršyklės leidimas buvo atmestas", - "notifications.permission_required": "Darbalaukio pranešimai nepasiekiami, nes nesuteiktas reikiamas leidimas.", + "notifications.permission_denied": "Darbalaukio pranešimai nepasiekiami dėl anksčiau atmestos naršyklės leidimų užklausos.", + "notifications.permission_denied_alert": "Negalima įjungti darbalaukio pranešimų, nes prieš tai naršyklės leidimas buvo atmestas.", + "notifications.permission_required": "Darbalaukio pranešimai nepasiekiami, nes nebuvo suteiktas reikiamas leidimas.", "notifications_permission_banner.enable": "Įjungti darbalaukio pranešimus", - "notifications_permission_banner.how_to_control": "Jei norite gauti pranešimus, kai \"Mastodon\" nėra atidarytas, įjunkite darbalaukio pranešimus. Įjungę darbalaukio pranešimus, galite tiksliai valdyti, kokių tipų sąveikos generuoja darbalaukio pranešimus, naudodamiesi pirmiau esančiu mygtuku {icon}.", - "notifications_permission_banner.title": "Niekada nieko nepraleiskite", - "onboarding.action.back": "Gražinkite mane atgal", - "onboarding.actions.back": "Gražinkite mane atgal", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "notifications_permission_banner.how_to_control": "Jei nori gauti pranešimus, kai Mastodon nėra atidarytas, įjunk darbalaukio pranešimus. Įjungęs (-usi) darbalaukio pranešimus, gali tiksliai valdyti, kokių tipų sąveikos generuoja darbalaukio pranešimus, naudojant pirmiau esančiu mygtuku {icon}.", + "notifications_permission_banner.title": "Niekada nieko nepraleisk", + "onboarding.action.back": "Grąžinti mane atgal", + "onboarding.actions.back": "Grąžinti mane atgal", + "onboarding.actions.go_to_explore": "Į tendencijų puslapį", + "onboarding.actions.go_to_home": "Į mano pagrindinį srautų puslapį", "onboarding.compose.template": "Sveiki #Mastodon!", - "onboarding.follows.empty": "Deja, šiuo metu jokių rezultatų parodyti negalima. Galite pabandyti naudoti paiešką arba naršyti atradimo puslapyje, kad surastumėte žmonių, kuriuos norite sekti, arba pabandyti vėliau.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.follows.empty": "Deja, šiuo metu jokių rezultatų parodyti negalima. Gali pabandyti naudoti paiešką arba naršyti atradimo puslapį, kad surastum žmonių, kuriuos nori sekti, arba bandyti vėliau.", + "onboarding.follows.lead": "Tavo pagrindinis srautas – pagrindinis būdas patirti Mastodon. Kuo daugiau žmonių seksi, tuo jis bus aktyvesnis ir įdomesnis. Norint pradėti, pateikiame keletą pasiūlymų:", + "onboarding.follows.title": "Suasmenink savo pagrindinį srautą", "onboarding.profile.discoverable": "Padaryti mano profilį atrandamą", - "onboarding.profile.discoverable_hint": "Kai pasirenki Mastodon atrandamumą, tavo įrašai gali būti rodomi paieškos rezultatuose ir trendose, o profilis gali būti siūlomas panašių interesų turintiems žmonėms.", + "onboarding.profile.discoverable_hint": "Kai pasirenki Mastodon atrandamumą, tavo įrašai gali būti rodomi paieškos rezultatuose ir tendencijose, o profilis gali būti siūlomas panašių pomėgių turintiems žmonėms.", "onboarding.profile.display_name": "Rodomas vardas", "onboarding.profile.display_name_hint": "Tavo pilnas vardas arba linksmas vardas…", "onboarding.profile.lead": "Gali visada tai užbaigti vėliau nustatymuose, kur yra dar daugiau pritaikymo parinkčių.", "onboarding.profile.note": "Biografija", "onboarding.profile.note_hint": "Gali @paminėti kitus žmones arba #saitažodžius…", "onboarding.profile.save_and_continue": "Išsaugoti ir tęsti", - "onboarding.profile.title": "Profilio konfigūravimas", + "onboarding.profile.title": "Profilio sąranka", "onboarding.profile.upload_avatar": "Įkelti profilio nuotrauką", "onboarding.profile.upload_header": "Įkelti profilio antraštę", - "onboarding.share.lead": "Praneškite žmonėms, kaip jus rasti \"Mastodon\"!", - "onboarding.share.message": "Aš {username} #Mastodon! Ateik sekti manęs adresu {url}", + "onboarding.share.lead": "Leisk žmonėms sužinoti, kaip tave rasti Mastodon!", + "onboarding.share.message": "Aš {username}, esant #Mastodon! Ateik sekti manęs adresu {url}.", "onboarding.share.next_steps": "Galimi kiti žingsniai:", - "onboarding.share.title": "Bendrinkite savo profilį", - "onboarding.start.lead": "Dabar esi Mastodon dalis – unikalios decentralizuotos socialinės žiniasklaidos platformos, kurioje tu, o ne algoritmas, pats nustatai savo patirtį. Pradėkime tavo kelionę šioje naujoje socialinėje erdvėje:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "Jums pavyko!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Susikūrk savo pirmąjį įrašą", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "picture_in_picture.restore": "Padėkite jį atgal", - "poll.closed": "Uždaryti", + "onboarding.share.title": "Bendrink savo profilį", + "onboarding.start.lead": "Dabar esi Mastodon dalis – unikalios decentralizuotos socialinės medijos platformos, kurioje tu, o ne algoritmas, pats nustatai savo patirtį. Pradėkime tavo kelionę šioje naujoje socialinėje erdvėje:", + "onboarding.start.skip": "Nereikia pagalbos pradėti?", + "onboarding.start.title": "Tau pavyko!", + "onboarding.steps.follow_people.body": "Sekti įdomius žmones – tai, kas yra Mastodon.", + "onboarding.steps.follow_people.title": "Suasmenink savo pagrindinį srautą", + "onboarding.steps.publish_status.body": "Sakyk labas pasauliui tekstu, nuotraukomis, vaizdo įrašais arba apklausomis {emoji}.", + "onboarding.steps.publish_status.title": "Sukūrk savo pirmąjį įrašą", + "onboarding.steps.setup_profile.body": "Padidink savo sąveiką turint išsamų profilį.", + "onboarding.steps.setup_profile.title": "Suasmenink savo profilį", + "onboarding.steps.share_profile.body": "Leisk draugams sužinoti, kaip tave rasti Mastodon.", + "onboarding.steps.share_profile.title": "Bendrink savo Mastodon profilį", + "onboarding.tips.2fa": "Ar žinojai? Savo paskyrą gali apsaugoti nustatęs (-usi) dviejų veiksnių tapatybės nustatymą paskyros nustatymuose. Jis veikia su bet kuria pasirinkta TOTP programėle, telefono numeris nebūtinas.", + "onboarding.tips.accounts_from_other_servers": "Ar žinojai? Kadangi Mastodon decentralizuotas, kai kurie profiliai, su kuriais susidursi, bus talpinami ne tavo, o kituose serveriuose. Ir vis tiek galėsi su jais sklandžiai bendrauti! Jų serveris yra antroje naudotojo vardo pusėje.", + "onboarding.tips.migration": "Ar žinojai? Jei manai, kad {domain} serveris ateityje tau netiks, gali persikelti į kitą Mastodon serverį neprarandant savo sekėjų. Gali net talpinti savo paties serverį.", + "onboarding.tips.verification": "Ar žinojai? Savo paskyrą gali patvirtinti pateikęs (-usi) nuorodą į Mastodon profilį savo interneto svetainėje ir pridėjęs (-usi) svetainę prie savo profilio. Nereikia jokių mokesčių ar dokumentų.", + "password_confirmation.exceeds_maxlength": "Slaptažodžio patvirtinimas viršija maksimalų slaptažodžio ilgį.", + "password_confirmation.mismatching": "Slaptažodžio patvirtinimas nesutampa.", + "picture_in_picture.restore": "Padėti jį atgal", + "poll.closed": "Uždaryta", "poll.refresh": "Atnaujinti", "poll.reveal": "Peržiūrėti rezultatus", + "poll.total_people": "{count, plural, one {# žmogus} few {# žmonės} many {# žmogus} other {# žmonių}}", + "poll.total_votes": "{count, plural, one {# balsas} few {# balsai} many {# balso} other {# balsų}}", "poll.vote": "Balsuoti", "poll.voted": "Tu balsavai už šį atsakymą", "poll.votes": "{votes, plural, one {# balsas} few {# balsai} many {# balso} other {# balsų}}", "poll_button.add_poll": "Pridėti apklausą", - "poll_button.remove_poll": "Šalinti apklausą", - "privacy.change": "Adjust status privacy", + "poll_button.remove_poll": "Pašalinti apklausą", + "privacy.change": "Keisti įrašo privatumą", "privacy.direct.long": "Visus, paminėtus įraše", "privacy.direct.short": "Konkretūs žmonės", "privacy.private.long": "Tik sekėjams", "privacy.private.short": "Sekėjai", "privacy.public.long": "Bet kas iš Mastodon ir ne Mastodon", - "privacy.public.short": "Viešas", + "privacy.public.short": "Vieša", "privacy.unlisted.additional": "Tai veikia lygiai taip pat, kaip ir vieša, tik įrašas nebus rodomas tiesioginiuose srautuose, saitažodžiose, naršyme ar Mastodon paieškoje, net jei esi įtraukęs (-usi) visą paskyrą.", "privacy.unlisted.long": "Mažiau algoritminių fanfarų", "privacy.unlisted.short": "Tyliai vieša", @@ -504,8 +542,14 @@ "privacy_policy.title": "Privatumo politika", "recommended": "Rekomenduojama", "refresh": "Atnaujinti", - "regeneration_indicator.label": "Kraunasi…", + "regeneration_indicator.label": "Kraunama…", + "regeneration_indicator.sublabel": "Ruošiamas tavo pagrindinis srautas!", + "relative_time.days": "{number} d.", + "relative_time.full.days": "prieš {number, plural, one {# dieną} few {# dienas} many {# dienos} other {# dienų}}", + "relative_time.full.hours": "prieš {number, plural, one {# valandą} few {# valandas} many {# valandos} other {# valandų}}", "relative_time.full.just_now": "ką tik", + "relative_time.full.minutes": "prieš {number, plural, one {# minutę} few {# minutes} many {# minutės} other {# minučių}}", + "relative_time.full.seconds": "prieš {number, plural, one {# sekundę} few {# sekundes} many {# sekundės} other {# sekundžių}}", "relative_time.hours": "{number} val.", "relative_time.just_now": "dabar", "relative_time.minutes": "{number} min.", @@ -515,15 +559,20 @@ "reply_indicator.cancel": "Atšaukti", "reply_indicator.poll": "Apklausa", "report.block": "Blokuoti", - "report.categories.legal": "Legalus", + "report.block_explanation": "Jų įrašų nematysi. Jie negalės matyti tavo įrašų ar sekti tavęs. Jie galės pamatyti, kad yra užblokuoti.", + "report.categories.legal": "Teisinės", "report.categories.other": "Kita", "report.categories.spam": "Šlamštas", "report.categories.violation": "Turinys pažeidžia vieną ar daugiau serverio taisyklių", - "report.category.subtitle": "Pasirinkite tinkamiausią variantą", + "report.category.subtitle": "Pasirink geriausią atitikmenį.", + "report.category.title": "Papasakok mums, kas vyksta su šiuo {type}", "report.category.title_account": "profilis", "report.category.title_status": "įrašas", "report.close": "Atlikta", - "report.comment.title": "Ar yra dar kas nors, ką, jūsų manymu, turėtume žinoti?", + "report.comment.title": "Ar yra dar kas nors, ką, tavo manymu, turėtume žinoti?", + "report.forward": "Persiųsti į {target}", + "report.forward_hint": "Paskyra yra iš kito serverio. Siųsti anoniminę šios ataskaitos kopiją ir ten?", + "report.mute": "Nutildyti", "report.mute_explanation": "Jų įrašų nematysi. Jie vis tiek gali tave sekti ir matyti įrašus, bet nežinos, kad jie nutildyti.", "report.next": "Tęsti", "report.placeholder": "Papildomi komentarai", @@ -532,41 +581,42 @@ "report.reasons.legal": "Tai nelegalu", "report.reasons.legal_description": "Manai, kad tai pažeidžia tavo arba serverio šalies įstatymus", "report.reasons.other": "Tai kažkas kita", - "report.reasons.other_description": "Šis klausimas neatitinka kitų kategorijų", + "report.reasons.other_description": "Problema netinka kitoms kategorijoms", "report.reasons.spam": "Tai šlamštas", "report.reasons.spam_description": "Kenkėjiškos nuorodos, netikras įsitraukimas arba pasikartojantys atsakymai", "report.reasons.violation": "Tai pažeidžia serverio taisykles", "report.reasons.violation_description": "Žinai, kad tai pažeidžia konkrečias taisykles", - "report.rules.subtitle": "Pasirink viską, kas tinka", + "report.rules.subtitle": "Pasirink viską, kas tinka.", "report.rules.title": "Kokios taisyklės pažeidžiamos?", - "report.statuses.subtitle": "Pasirinkti viską, kas tinka", - "report.statuses.title": "Ar yra kokių nors įrašų, patvirtinančių šį pranešimą?", + "report.statuses.subtitle": "Pasirink viską, kas tinka.", + "report.statuses.title": "Ar yra kokių nors įrašų, patvirtinančių šį ataskaitą?", "report.submit": "Pateikti", - "report.target": "Report {target}", - "report.thanks.take_action": "Čia pateikiamos galimybės kontroliuoti, ką matote \"Mastodon\":", - "report.thanks.take_action_actionable": "Kol tai peržiūrėsime, galite imtis veiksmų prieš @{name}:", - "report.thanks.title": "Nenorite to matyti?", - "report.thanks.title_actionable": "Ačiū, kad pranešėte, mes tai išnagrinėsime.", + "report.target": "Pranešama apie {target}", + "report.thanks.take_action": "Štai parinktys, kaip kontroliuoti, ką matai Mastodon:", + "report.thanks.take_action_actionable": "Kol peržiūrėsime, gali imtis veiksmų prieš {name}:", + "report.thanks.title": "Nenori to matyti?", + "report.thanks.title_actionable": "Ačiū, kad pranešei, mes tai išnagrinėsime.", "report.unfollow": "Nebesekti @{name}", - "report.unfollow_explanation": "Jūs sekate šią paskyrą. Norėdami nebematyti jų įrašų savo pagrindiniame kanale, panaikinkite jų sekimą.", - "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", - "report_notification.categories.legal": "Legalus", + "report.unfollow_explanation": "Tu seki šią paskyrą. Jei nori nebematyti jų įrašų savo pagrindiniame sraute, nebesek jų.", + "report_notification.attached_statuses": "Pridėti {count, plural, one {{count} įrašas} few {{count} įrašai} many {{count} įrašo} other {{count} įrašų}}", + "report_notification.categories.legal": "Teisinės", "report_notification.categories.other": "Kita", "report_notification.categories.spam": "Šlamštas", "report_notification.categories.violation": "Taisyklės pažeidimas", - "search.no_recent_searches": "Paieškos įrašų nėra", + "report_notification.open": "Atidaryti ataskaitą", + "search.no_recent_searches": "Nėra naujausių paieškų.", "search.placeholder": "Paieška", "search.quick_action.account_search": "Profiliai, atitinkantys {x}", "search.quick_action.go_to_account": "Eiti į profilį {x}", - "search.quick_action.go_to_hashtag": "Eiti į hashtag {x}", + "search.quick_action.go_to_hashtag": "Eiti į saitažodį {x}", "search.quick_action.open_url": "Atidaryti URL adresą Mastodon", "search.quick_action.status_search": "Pranešimai, atitinkantys {x}", - "search.search_or_paste": "Ieškok arba įklijuok URL", + "search.search_or_paste": "Ieškoti arba įklijuoti URL", "search_popout.full_text_search_disabled_message": "Nepasiekima {domain}.", "search_popout.full_text_search_logged_out_message": "Pasiekiama tik prisijungus.", "search_popout.language_code": "ISO kalbos kodas", "search_popout.options": "Paieškos nustatymai", - "search_popout.quick_actions": "Greiti veiksmai", + "search_popout.quick_actions": "Spartūs veiksmai", "search_popout.recent": "Naujausios paieškos", "search_popout.specific_date": "konkreti data", "search_popout.user": "naudotojas", @@ -575,23 +625,25 @@ "search_results.hashtags": "Saitažodžiai", "search_results.nothing_found": "Nepavyko rasti nieko pagal šiuos paieškos terminus.", "search_results.see_all": "Žiūrėti viską", - "search_results.statuses": "Toots", + "search_results.statuses": "Įrašai", "search_results.title": "Ieškoti {q}", "server_banner.about_active_users": "Žmonės, kurie naudojosi šiuo serveriu per pastarąsias 30 dienų (mėnesio aktyvūs naudotojai)", "server_banner.active_users": "aktyvūs naudotojai", "server_banner.administered_by": "Administruoja:", - "server_banner.introduction": "{domain} yra decentralizuoto socialinio tinklo, kurį valdo {mastodon}, dalis.", + "server_banner.introduction": "{domain} – decentralizuoto socialinio tinklo dalis, kurį palaiko {mastodon}.", "server_banner.learn_more": "Sužinoti daugiau", "server_banner.server_stats": "Serverio statistika:", "sign_in_banner.create_account": "Sukurti paskyrą", "sign_in_banner.sign_in": "Prisijungimas", - "sign_in_banner.sso_redirect": "Prisijungti arba Registruotis", + "sign_in_banner.sso_redirect": "Prisijungti arba užsiregistruoti", "sign_in_banner.text": "Prisijunk, kad galėtum sekti profilius arba saitažodžius, mėgsti, bendrinti ir atsakyti į įrašus. Taip pat gali bendrauti iš savo paskyros kitame serveryje.", - "status.admin_account": "Atvira moderavimo sąsaja @{name}", - "status.admin_domain": "Atvira moderavimo sąsaja {domain}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Atidaryti prižiūrėjimo sąsają @{name}", + "status.admin_domain": "Atidaryti prižiūrėjimo sąsają {domain}", + "status.admin_status": "Atidaryti šį įrašą prižiūrėjimo sąsajoje", "status.block": "Blokuoti @{name}", - "status.bookmark": "Žymė", + "status.bookmark": "Pridėti į žymės", + "status.cancel_reblog_private": "Nebepakelti", + "status.cannot_reblog": "Šis įrašas negali būti pakeltas.", "status.copy": "Kopijuoti nuorodą į įrašą", "status.delete": "Ištrinti", "status.detailed_status": "Išsami pokalbio peržiūra", @@ -599,15 +651,15 @@ "status.direct_indicator": "Privatus paminėjimas", "status.edit": "Redaguoti", "status.edited": "Redaguota {date}", - "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Įterptas", - "status.favourite": "Mėgstamiausias", + "status.edited_x_times": "Redaguota {count, plural, one {{count} kartą} few {{count} kartus} many {{count} karto} other {{count} kartų}}", + "status.embed": "Įterpti", + "status.favourite": "Pamėgti", "status.filter": "Filtruoti šį įrašą", "status.filtered": "Filtruota", "status.hide": "Slėpti įrašą", - "status.history.created": "{name} sukurtas {date}", - "status.history.edited": "{name} redaguotas {date}", - "status.load_more": "Pakrauti daugiau", + "status.history.created": "{name} sukurta {date}", + "status.history.edited": "{name} redaguota {date}", + "status.load_more": "Krauti daugiau", "status.media.open": "Spausk, kad atidaryti", "status.media.show": "Spausk, kad matyti", "status.media_hidden": "Paslėpta medija", @@ -615,15 +667,20 @@ "status.more": "Daugiau", "status.mute": "Nutildyti @{name}", "status.mute_conversation": "Nutildyti pokalbį", - "status.open": "Expand this status", + "status.open": "Išplėsti šį įrašą", "status.pin": "Prisegti prie profilio", "status.pinned": "Prisegtas įrašas", "status.read_more": "Skaityti daugiau", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Ištrinti ir iš naujo parengti juodraštį", + "status.reblog": "Pakelti", + "status.reblog_private": "Pakelti su originaliu matomumu", + "status.reblogged_by": "{name} pakėlė", + "status.reblogs.empty": "Šio įrašo dar niekas nepakėlė. Kai kas nors tai padarys, jie bus rodomi čia.", + "status.redraft": "Ištrinti ir parengti iš naujo", + "status.remove_bookmark": "Pašalinti žymę", + "status.replied_to": "Atsakyta į {name}", "status.reply": "Atsakyti", "status.replyAll": "Atsakyti į giją", - "status.report": "Pranešti @{name}", + "status.report": "Pranešti apie @{name}", "status.sensitive_warning": "Jautrus turinys", "status.share": "Bendrinti", "status.show_filter_reason": "Rodyti vis tiek", @@ -632,37 +689,62 @@ "status.show_more": "Rodyti daugiau", "status.show_more_all": "Rodyti daugiau visiems", "status.show_original": "Rodyti originalą", - "status.title.with_attachments": "{user}{attachmentCount, plural, one {priedas} few {{attachmentCount} priedai} many {{attachmentCount} priedo} other {{attachmentCount} priedų}}", + "status.title.with_attachments": "{user} paskelbė {attachmentCount, plural, one {priedą} few {{attachmentCount} priedus} many {{attachmentCount} priedo} other {{attachmentCount} priedų}}", "status.translate": "Versti", - "status.translated_from_with": "Išversta iš {lang} naudojant {provider}", - "status.uncached_media_warning": "Peržiūra nepasiekiama", - "subscribed_languages.lead": "Po pakeitimo tavo pagrindinėje ir sąrašo laiko juostose bus rodomi tik įrašai pasirinktomis kalbomis. Jei nori gauti įrašus visomis kalbomis, pasirink nė vieno.", - "tabs_bar.home": "Pradžia", + "status.translated_from_with": "Išversta iš {lang} naudojant {provider}.", + "status.uncached_media_warning": "Peržiūra nepasiekiama.", + "status.unmute_conversation": "Atšaukti pokalbio nutildymą", + "status.unpin": "Atsegti iš profilio", + "subscribed_languages.lead": "Po pakeitimo tavo pagrindinėje ir sąrašo laiko skalėje bus rodomi tik įrašai pasirinktomis kalbomis. Jei nori gauti įrašus visomis kalbomis, pasirink nė vieno.", + "subscribed_languages.save": "Išsaugoti pakeitimus", + "subscribed_languages.target": "Keisti prenumeruojamas kalbas {target}", + "tabs_bar.home": "Pagrindinis", "tabs_bar.notifications": "Pranešimai", - "time_remaining.days": "Liko {number, plural, one {# diena} few {# dienos} many {# dieno} other {# dienų}}", - "timeline_hint.remote_resource_not_displayed": "{resource} iš kitų serverių nerodomas.", + "time_remaining.days": "liko {number, plural, one {# diena} few {# dienos} many {# dienos} other {# dienų}}", + "time_remaining.hours": "liko {number, plural, one {# valanda} few {# valandos} many {# valandos} other {# valandų}}", + "time_remaining.minutes": "liko {number, plural, one {# minutė} few {# minutės} many {# minutės} other {# minučių}}", + "time_remaining.moments": "liko akimirkos", + "time_remaining.seconds": "liko {number, plural, one {# sekundė} few {# sekundės} many {# sekundės} other {# sekundžių}}", + "timeline_hint.remote_resource_not_displayed": "{resource} iš kitų serverių nerodomi.", "timeline_hint.resources.followers": "Sekėjai", "timeline_hint.resources.follows": "Seka", "timeline_hint.resources.statuses": "Senesni įrašai", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} žmogus} few {{counter} žmonės} many {{counter} žmogus} other {{counter} žmonių}} per {days, plural, one {dieną} few {{days} dienas} many {{days} dienas} other {{days} dienų}}", + "trends.trending_now": "Tendencinga dabar", "ui.beforeunload": "Jei paliksi Mastodon, tavo juodraštis bus prarastas.", + "units.short.billion": "{count} mlrd.", + "units.short.million": "{count} mln.", "units.short.thousand": "{count} tūkst.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "upload_area.title": "Nuvilk, kad įkeltum", + "upload_button.label": "Pridėti vaizdų, vaizdo įrašą arba garso failą", + "upload_error.limit": "Viršyta failo įkėlimo riba.", + "upload_error.poll": "Failų įkėlimas neleidžiamas su apklausomis.", + "upload_form.audio_description": "Aprašyk žmonėms, kurie yra kurtieji ar neprigirdintys.", + "upload_form.description": "Aprašyk žmonėms, kurie yra aklieji arba silpnaregiai.", "upload_form.edit": "Redaguoti", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.thumbnail": "Keisti miniatiūrą", + "upload_form.video_description": "Aprašyk žmonėms, kurie yra kurtieji, neprigirdintys, aklieji ar silpnaregiai.", + "upload_modal.analyzing_picture": "Analizuojamas vaizdas…", + "upload_modal.apply": "Taikyti", + "upload_modal.applying": "Pritaikoma…", "upload_modal.choose_image": "Pasirinkti vaizdą", "upload_modal.description_placeholder": "Greita rudoji lapė peršoka tinginį šunį", + "upload_modal.detect_text": "Aptikti tekstą iš nuotraukos", "upload_modal.edit_media": "Redaguoti mediją", + "upload_modal.hint": "Spustelėk arba nuvilk apskritimą peržiūroje, kad pasirinktum centrinį tašką, kuris visada bus matomas visose miniatiūrose.", + "upload_modal.preparing_ocr": "Rengimas OCR…", + "upload_modal.preview_label": "Peržiūra ({ratio})", "upload_progress.label": "Įkeliama...", "upload_progress.processing": "Apdorojama…", "username.taken": "Šis naudotojo vardas užimtas. Pabandyk kitą.", "video.close": "Uždaryti vaizdo įrašą", "video.download": "Atsisiųsti failą", "video.exit_fullscreen": "Išeiti iš viso ekrano", + "video.expand": "Išplėsti vaizdo įrašą", "video.fullscreen": "Visas ekranas", "video.hide": "Slėpti vaizdo įrašą", - "video.mute": "Nutildyti garsą", + "video.mute": "Išjungti garsą", + "video.pause": "Pristabdyti", "video.play": "Leisti", - "video.unmute": "Atitildyti garsą" + "video.unmute": "Įjungti garsą" } diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 07a7b25a799bb5..8044e789230878 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -21,24 +21,26 @@ "account.blocked": "Bloķēts", "account.browse_more_on_origin_server": "Pārlūkot vairāk sākotnējā profilā", "account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu", + "account.copy": "Ievietot saiti uz profilu starpliktuvē", "account.direct": "Pieminēt @{name} privāti", "account.disable_notifications": "Pārtraukt man paziņot, kad @{name} publicē ierakstu", "account.domain_blocked": "Domēns ir bloķēts", - "account.edit_profile": "Rediģēt profilu", + "account.edit_profile": "Labot profilu", "account.enable_notifications": "Paziņot man, kad @{name} publicē ierakstu", "account.endorse": "Izcelts profilā", "account.featured_tags.last_status_at": "Beidzamā ziņa {date}", "account.featured_tags.last_status_never": "Ierakstu nav", "account.featured_tags.title": "{name} izceltie tēmturi", "account.follow": "Sekot", + "account.follow_back": "Sekot atpakaļ", "account.followers": "Sekotāji", "account.followers.empty": "Šim lietotājam vēl nav sekotāju.", - "account.followers_counter": "{count, plural, one {{counter} Sekotājs} other {{counter} Sekotāji}}", + "account.followers_counter": "{count, plural, zero {{counter} sekotāju} one {{counter} sekotājs} other {{counter} sekotāji}}", "account.following": "Seko", - "account.following_counter": "{count, plural, one {{counter} sekojamais} other {{counter} sekojamie}}", + "account.following_counter": "{count, plural, zero{{counter} sekojamo} one {{counter} sekojamais} other {{counter} sekojamie}}", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.go_to_profile": "Doties uz profilu", - "account.hide_reblogs": "Slēpt @{name} izceltas ziņas", + "account.hide_reblogs": "Paslēpt @{name} pastiprinātos ierakstus", "account.in_memoriam": "Piemiņai.", "account.joined_short": "Pievienojās", "account.languages": "Mainīt abonētās valodas", @@ -51,13 +53,14 @@ "account.mute_notifications_short": "Izslēgt paziņojumu skaņu", "account.mute_short": "Apklusināt", "account.muted": "Apklusināts", + "account.mutual": "Savstarpējs", "account.no_bio": "Apraksts nav sniegts.", "account.open_original_page": "Atvērt oriģinālo lapu", "account.posts": "Ieraksti", "account.posts_with_replies": "Ieraksti un atbildes", "account.report": "Sūdzēties par @{name}", "account.requested": "Gaida apstiprinājumu. Nospied, lai atceltu sekošanas pieparasījumu", - "account.requested_follow": "{name} nosūtīja tev sekošanas pieprasījumu", + "account.requested_follow": "{name} nosūtīja Tev sekošanas pieprasījumu", "account.share": "Dalīties ar @{name} profilu", "account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus", "account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", @@ -97,18 +100,18 @@ "bundle_column_error.routing.body": "Pieprasīto lapu nevarēja atrast. Vai esi pārliecināts, ka URL adreses joslā ir pareizs?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Aizvērt", - "bundle_modal_error.message": "Kaut kas nogāja greizi, ielādējot šo komponenti.", + "bundle_modal_error.message": "Kaut kas nogāja greizi šīs sastāvdaļas ielādēšanas laikā.", "bundle_modal_error.retry": "Mēģināt vēlreiz", "closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.", - "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši {domain}, lai lietotu Mastodon.", + "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu {domain}, bet, lūdzu, ņem vērā, ka Tev nav nepieciešams tieši {domain} konts, lai lietotu Mastodon!", "closed_registrations_modal.find_another_server": "Atrast citu serveri", - "closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur tu izveido savu kontu, varēsi sekot līdzi un sazināties ar ikvienu šajā serverī. Tu pat vari vadīt to pats!", + "closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur Tu izveido savu kontu, varēsi sekot un mijiedarboties ar ikvienu šajā serverī. Tu pat vari to pašizvietot!", "closed_registrations_modal.title": "Reģistrēšanās Mastodon", "column.about": "Par", "column.blocks": "Bloķētie lietotāji", "column.bookmarks": "Grāmatzīmes", "column.community": "Vietējā laika līnija", - "column.direct": "Privāti pieminēti", + "column.direct": "Privātas pieminēšanas", "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Bloķētie domēni", "column.favourites": "Iecienītie", @@ -133,21 +136,28 @@ "community.column_settings.remote_only": "Tikai attālinātie", "compose.language.change": "Mainīt valodu", "compose.language.search": "Meklēt valodas...", - "compose.published.body": "Ziņa publicēta.", + "compose.published.body": "Ieraksts publicēta.", "compose.published.open": "Atvērt", "compose.saved.body": "Ziņa saglabāta.", "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk", - "compose_form.encryption_warning": "Ziņas vietnē Mastodon nav pilnībā šifrētas. Nedalies ar sensitīvu informāciju caur Mastodon.", + "compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jutīgu informāciju caur Mastodon!", "compose_form.hashtag_warning": "Šī ziņa netiks norādīta zem nevienas atsauces, jo tā nav publiska. Tikai publiskās ziņās var meklēt pēc atsauces.", - "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var tev piesekot un redzēt tikai sekotājiem paredzētos ziņojumus.", + "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot, lai redzētu tikai sekotājiem paredzētos ierakstus.", "compose_form.lock_disclaimer.lock": "slēgts", - "compose_form.placeholder": "Kas tev padomā?", + "compose_form.placeholder": "Kas Tev padomā?", "compose_form.poll.duration": "Aptaujas ilgums", + "compose_form.poll.multiple": "Vairākas izvēles iespējas", + "compose_form.poll.option_placeholder": "Izvēle {number}", + "compose_form.poll.single": "Jāizvēlas viens", "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", + "compose_form.publish": "Iesūtīt", "compose_form.publish_form": "Jauns ieraksts", + "compose_form.reply": "Atbildēt", + "compose_form.save_changes": "Atjaunināt", "compose_form.spoiler.marked": "Noņemt satura brīdinājumu", "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", + "compose_form.spoiler_placeholder": "Satura brīdinājums (pēc izvēles)", "confirmation_modal.cancel": "Atcelt", "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", @@ -157,28 +167,29 @@ "confirmations.delete.confirm": "Dzēst", "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", "confirmations.delete_list.confirm": "Dzēst", - "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", + "confirmations.delete_list.message": "Vai tiešām neatgriezeniski izdzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", - "confirmations.discard_edit_media.message": "Tev ir nesaglabātas izmaiņas multivides aprakstā vai priekšskatījumā. Vēlies tās atmest?", + "confirmations.discard_edit_media.message": "Ir nesaglabātas izmaiņas informācijas nesēja aprakstā vai priekšskatījumā. Vēlies tās atmest tik un tā?", "confirmations.domain_block.confirm": "Bloķēt visu domēnu", "confirmations.domain_block.message": "Vai tu tiešām vēlies bloķēt visu domēnu {domain}? Parasti pietiek, ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.", - "confirmations.edit.confirm": "Rediģēt", + "confirmations.edit.confirm": "Labot", "confirmations.edit.message": "Rediģējot, tiks pārrakstīts ziņojums, kuru tu šobrīd raksti. Vai tiešām vēlies turpināt?", "confirmations.logout.confirm": "Iziet", "confirmations.logout.message": "Vai tiešām vēlies izrakstīties?", "confirmations.mute.confirm": "Apklusināt", - "confirmations.mute.explanation": "Šādi no viņiem tiks slēptas ziņas un ziņas, kurās viņi tiek pieminēti, taču viņi joprojām varēs redzēt tavas ziņas un sekot tev.", + "confirmations.mute.explanation": "Šādi tiks slēpti ieraksti no viņiem un ieraksti, kuros viņi tiek pieminēti, taču viņi joprojām varēs redzēt Tavus ierakstus un sekot Tev.", "confirmations.mute.message": "Vai tiešām vēlies apklusināt {name}?", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", "confirmations.redraft.message": "Vai tiešām vēlies dzēst šo ziņu un no jauna noformēt to? Izlase un pastiprinājumi tiks zaudēti, un atbildes uz sākotnējo ziņu tiks atstātas bez autoratlīdzības.", "confirmations.reply.confirm": "Atbildēt", - "confirmations.reply.message": "Ja tagad atbildēsi, tavs ziņas uzmetums tiks dzēsts. Vai tiešām vēlies turpināt?", + "confirmations.reply.message": "Tūlītēja atbildēšana pārrakstīs pašlaik sastādīto ziņu. Vai tiešām turpināt?", "confirmations.unfollow.confirm": "Pārstāt sekot", "confirmations.unfollow.message": "Vai tiešam vairs nevēlies sekot lietotājam {name}?", "conversation.delete": "Dzēst sarunu", "conversation.mark_as_read": "Atzīmēt kā izlasītu", "conversation.open": "Skatīt sarunu", "conversation.with": "Ar {names}", + "copy_icon_button.copied": "Ievietots starpliktuvē", "copypaste.copied": "Nokopēts", "copypaste.copy_to_clipboard": "Kopēt uz starpliktuvi", "directory.federated": "No pazīstamas federācijas", @@ -187,12 +198,12 @@ "directory.recently_active": "Nesen aktīvie", "disabled_account_banner.account_settings": "Konta iestatījumi", "disabled_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots.", - "dismissable_banner.community_timeline": "Šīs ir jaunākās publiskās ziņas no personām, kuru kontus mitina {domain}.", + "dismissable_banner.community_timeline": "Šie ir jaunākie publiskie ieraksti no cilvēkiem, kuru konti ir mitināti {domain}.", "dismissable_banner.dismiss": "Atcelt", "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.", - "dismissable_banner.explore_statuses": "Ieraksti, kas šobrīd gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti neseni ieraksti, kas pastiprināti un pievienoti izlasēm.", + "dismissable_banner.explore_statuses": "Šie ir ieraksti, kas šodien gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti jaunāki ieraksti, kuri tiek vairāk pastiprināti un ievietoti izlasēs.", "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", - "dismissable_banner.public_timeline": "Šīs ir jaunākās publiskās ziņas no lietotājiem sociālajā tīmeklī, kurām seko lietotāji domēnā {domain}.", + "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", "embed.preview": "Tas izskatīsies šādi:", "emoji_button.activity": "Aktivitāte", @@ -215,22 +226,22 @@ "empty_column.account_timeline": "Šeit ziņojumu nav!", "empty_column.account_unavailable": "Profils nav pieejams", "empty_column.blocks": "Pašreiz tu neesi nevienu bloķējis.", - "empty_column.bookmarked_statuses": "Pašreiz tev nav neviena grāmatzīmēm pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.", + "empty_column.bookmarked_statuses": "Pašlaik Tev nav neviena grāmatzīmēs pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.", "empty_column.community": "Vietējā laika līnija ir tukša. Uzraksti kaut ko publiski, lai viss notiktu!", - "empty_column.direct": "Jums vēl nav nevienas privātas pieminēšanas. Nosūtot vai saņemot to, tas tiks parādīts šeit.", + "empty_column.direct": "Tev vēl nav privātu pieminēšanu. Kad Tu nosūtīsi vai saņemsi kādu, tā pārādīsies šeit.", "empty_column.domain_blocks": "Vēl nav neviena bloķēta domēna.", - "empty_column.explore_statuses": "Pašlaik nekā aktuāla nav. Pārbaudi vēlāk!", - "empty_column.favourited_statuses": "Tev vēl nav nevienas iecienītākās ziņas. Kad iecienīsi kādu, tas tiks parādīts šeit.", + "empty_column.explore_statuses": "Pašlaik nav nekā aktuāla. Ieskaties šeit vēlāk!", + "empty_column.favourited_statuses": "Tev vēl nav iecienītāko ierakstu. Kad pievienosi kādu izlasei, tas tiks parādīts šeit.", "empty_column.favourites": "Šo ziņu neviens vēl nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.", - "empty_column.follow_requests": "Šobrīd tev nav sekošanas pieprasījumu. Kad kāds pieteiksies tev sekot, pieprasījums parādīsies šeit.", + "empty_column.follow_requests": "Šobrīd Tev nav sekošanas pieprasījumu. Kad saņemsi kādu, tas parādīsies šeit.", "empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", - "empty_column.home": "Tava mājas laikrinda ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem.", - "empty_column.list": "Šis saraksts pašreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.", - "empty_column.lists": "Pašreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", + "empty_column.home": "Tava mājas laikjosla ir tukša. Seko vairāk cilvēkiem, lai to piepildītu!", + "empty_column.list": "Pagaidām šajā sarakstā nekā nav. Kad šī saraksta dalībnieki ievietos jaunus ierakstus, tie parādīsies šeit.", + "empty_column.lists": "Pašlaik Tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", - "empty_column.notifications": "Tev vēl nav paziņojumu. Kad citi cilvēki ar tevi mijiedarbosies, tu to redzēsi šeit.", - "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", + "empty_column.notifications": "Tev vēl nav paziņojumu. Kad citi cilvēki ar Tevi mijiedarbosies, Tu to redzēsi šeit.", + "empty_column.public": "Šeit nekā nav! Ieraksti kaut ko publiski vai seko lietotājiem no citiem serveriem, lai iegūtu saturu", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", @@ -239,13 +250,13 @@ "errors.unexpected_crash.report_issue": "Ziņot par problēmu", "explore.search_results": "Meklēšanas rezultāti", "explore.suggested_follows": "Cilvēki", - "explore.title": "Pārlūkot", + "explore.title": "Izpētīt", "explore.trending_links": "Jaunumi", - "explore.trending_statuses": "Ziņas", + "explore.trending_statuses": "Ieraksti", "explore.trending_tags": "Tēmturi", - "filter_modal.added.context_mismatch_explanation": "Šī filtra kategorija neattiecas uz kontekstu, kurā esi piekļuvis šai ziņai. Ja vēlies, lai ziņa tiktu filtrēta arī šajā kontekstā, tev būs jārediģē filtrs.", + "filter_modal.added.context_mismatch_explanation": "Šī atlases kategorija neattiecas uz kontekstu, kurā esi piekļuvis šim ierakstam. Ja vēlies, lai ieraksts tiktu atlasīts arī šajā kontekstā, Tev būs jālabo atlase.", "filter_modal.added.context_mismatch_title": "Konteksta neatbilstība!", - "filter_modal.added.expired_explanation": "Šai filtra kategorijai ir beidzies derīguma termiņš. Lai to lietotu, tev būs jāmaina derīguma termiņš.", + "filter_modal.added.expired_explanation": "Šai atlases kategorijai ir beidzies derīguma termiņš. Lai to lietotu, Tev būs jāmaina derīguma termiņš.", "filter_modal.added.expired_title": "Filtra termiņš beidzies!", "filter_modal.added.review_and_configure": "Lai pārskatītu un tālāk konfigurētu šo filtru kategoriju, dodies uz {settings_link}.", "filter_modal.added.review_and_configure_title": "Filtra iestatījumi", @@ -255,7 +266,7 @@ "filter_modal.select_filter.context_mismatch": "neattiecas uz šo kontekstu", "filter_modal.select_filter.expired": "beidzies", "filter_modal.select_filter.prompt_new": "Jauna kategorija: {name}", - "filter_modal.select_filter.search": "Meklē vai izveido", + "filter_modal.select_filter.search": "Meklēt vai izveidot", "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", @@ -264,7 +275,11 @@ "firehose.remote": "Citi serveri", "follow_request.authorize": "Autorizēt", "follow_request.reject": "Noraidīt", - "follow_requests.unlocked_explanation": "Lai gan tavs konts nav bloķēts, {domain} darbinieki iedomājās, ka, iespējams, vēlēsies pārskatīt pieprasījumus no šiem kontiem.", + "follow_requests.unlocked_explanation": "Lai gan Tavs konts nav slēgts, {domain} darbinieki iedomājās, ka Tu varētu vēlēties pašrocīgi pārskatīt sekošanas pieprasījumus no šiem kontiem.", + "follow_suggestions.curated_suggestion": "Darbinieku izvēle", + "follow_suggestions.dismiss": "Vairs nerādīt", + "follow_suggestions.view_all": "Skatīt visu", + "follow_suggestions.who_to_follow": "Kam sekot", "followed_tags": "Sekojamie tēmturi", "footer.about": "Par", "footer.directory": "Profilu direktorija", @@ -286,8 +301,8 @@ "hashtag.column_settings.tag_mode.none": "Neviens no šiem", "hashtag.column_settings.tag_toggle": "Pievienot kolonnai papildu tēmturus", "hashtag.counter_by_accounts": "{count, plural, one {{counter} dalībnieks} other {{counter} dalībnieki}}", - "hashtag.counter_by_uses": "{count, plural, zero {{counter} ziņa} one {{counter} ieraksts} other {{counter} ziņas}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} ziņa} other {{counter} ziņas}} šodien", + "hashtag.counter_by_uses": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", + "hashtag.counter_by_uses_today": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}} šodien", "hashtag.follow": "Sekot tēmturim", "hashtag.unfollow": "Pārstāt sekot tēmturim", "hashtags.and_other": "..un {count, plural, other {# vairāk}}", @@ -300,16 +315,16 @@ "home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!", "home.show_announcements": "Rādīt paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", - "interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.", - "interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.", + "interaction_modal.description.follow": "Ar Mastodon kontu Tu vari sekot {name}, lai saņemtu lietotāja ierakstus savā mājas plūsmā.", + "interaction_modal.description.reblog": "Ar Mastodon kontu Tu vari izvirzīt šo ierakstu, lai kopīgotu to ar saviem sekotājiem.", "interaction_modal.description.reply": "Ar Mastodon kontu tu vari atbildēt uz šo ziņu.", - "interaction_modal.login.action": "Nogādā mani mājās", + "interaction_modal.login.action": "Nogādāt mani mājās", "interaction_modal.login.prompt": "Tavas mājvietas servera domēns, piem., mastodon.social", "interaction_modal.no_account_yet": "Neesi Mastodon?", "interaction_modal.on_another_server": "Citā serverī", "interaction_modal.on_this_server": "Šajā serverī", - "interaction_modal.sign_in": "Tu neesi pieteicies šajā serverī. Kur tiek mitināts tavs konts?", - "interaction_modal.sign_in_hint": "Padoms: Šī ir vietne, kurā tu piereģistrējies. Ja neatceries, meklē sveiciena e-pastu savā iesūtnē. Vari arī ievadīt pilnu lietotājvārdu! (piem., @Mastodon@mastodon.social)", + "interaction_modal.sign_in": "Tu neesi pieteicies šajā serverī. Kur tiek mitināts Tavs konts?", + "interaction_modal.sign_in_hint": "Padoms: tā ir tīmekļvietne, kurā Tu reģistrējies. Ja neatceries, jāmeklē sveiciena e-pasts savā iesūtnē. Vari arī ievadīt pilnu lietotājvārdu (piem., @Mastodon@mastodon.social).", "interaction_modal.title.favourite": "Pievienot {name} ziņu izlasei", "interaction_modal.title.follow": "Sekot {name}", "interaction_modal.title.reblog": "Pastiprināt {name} ierakstu", @@ -361,12 +376,12 @@ "link_preview.author": "Pēc {name}", "lists.account.add": "Pievienot sarakstam", "lists.account.remove": "Noņemt no saraksta", - "lists.delete": "Dzēst sarakstu", - "lists.edit": "Rediģēt sarakstu", + "lists.delete": "Izdzēst sarakstu", + "lists.edit": "Labot sarakstu", "lists.edit.submit": "Mainīt virsrakstu", - "lists.exclusive": "Paslēpt šīs ziņas no mājvietas", + "lists.exclusive": "Nerādīt šos ierakstus sākumā", "lists.new.create": "Pievienot sarakstu", - "lists.new.title_placeholder": "Jaunais saraksta nosaukums", + "lists.new.title_placeholder": "Jaunā saraksta nosaukums", "lists.replies_policy.followed": "Jebkuram sekotajam lietotājam", "lists.replies_policy.list": "Saraksta dalībniekiem", "lists.replies_policy.none": "Nevienam", @@ -374,8 +389,9 @@ "lists.search": "Meklēt starp cilvēkiem, kuriem tu seko", "lists.subheading": "Tavi saraksti", "load_pending": "{count, plural, one {# jauna lieta} other {# jaunas lietas}}", + "loading_indicator.label": "Ielādē…", "media_gallery.toggle_visible": "{number, plural, one {Slēpt attēlu} other {Slēpt attēlus}}", - "moved_to_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots, jo pārcēlies uz kontu {movedToAccount}.", + "moved_to_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots, jo Tu pārcēlies uz kontu {movedToAccount}.", "mute_modal.duration": "Ilgums", "mute_modal.hide_notifications": "Slēpt paziņojumus no šī lietotāja?", "mute_modal.indefinite": "Beztermiņa", @@ -385,10 +401,10 @@ "navigation_bar.bookmarks": "Grāmatzīmes", "navigation_bar.community_timeline": "Vietējā laika līnija", "navigation_bar.compose": "Veidot jaunu ziņu", - "navigation_bar.direct": "Privāti pieminēti", + "navigation_bar.direct": "Privātas pieminēšanas", "navigation_bar.discover": "Atklāt", "navigation_bar.domain_blocks": "Bloķētie domēni", - "navigation_bar.explore": "Pārlūkot", + "navigation_bar.explore": "Izpētīt", "navigation_bar.favourites": "Izlase", "navigation_bar.filters": "Apklusinātie vārdi", "navigation_bar.follow_requests": "Sekošanas pieprasījumi", @@ -397,23 +413,23 @@ "navigation_bar.lists": "Saraksti", "navigation_bar.logout": "Iziet", "navigation_bar.mutes": "Apklusinātie lietotāji", - "navigation_bar.opened_in_classic_interface": "Ziņas, konti un citas noteiktas lapas pēc noklusējuma tiek atvērtas klasiskajā tīmekļa saskarnē.", + "navigation_bar.opened_in_classic_interface": "Ieraksti, konti un citas noteiktas lapas pēc noklusējuma tiek atvērtas klasiskajā tīmekļa saskarnē.", "navigation_bar.personal": "Personīgie", "navigation_bar.pins": "Piespraustās ziņas", "navigation_bar.preferences": "Iestatījumi", "navigation_bar.public_timeline": "Apvienotā laika līnija", "navigation_bar.search": "Meklēt", "navigation_bar.security": "Drošība", - "not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.", + "not_signed_in_indicator.not_signed_in": "Ir jāpiesakās, lai piekļūtu šim resursam.", "notification.admin.report": "{name} ziņoja par {target}", "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", - "notification.follow": "{name} uzsāka tev sekot", - "notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu", - "notification.mention": "{name} pieminēja tevi", + "notification.follow": "{name} uzsāka Tev sekot", + "notification.follow_request": "{name} nosūtīja Tev sekošanas pieprasījumu", + "notification.mention": "{name} pieminēja Tevi", "notification.own_poll": "Tava aptauja ir noslēgusies", "notification.poll": "Aptauja, kurā tu piedalījies, ir noslēgusies", - "notification.reblog": "{name} pastiprināja tavu ierakstu", + "notification.reblog": "{name} pastiprināja Tavu ierakstu", "notification.status": "{name} tikko publicēja", "notification.update": "{name} rediģēja ierakstu", "notifications.clear": "Notīrīt paziņojumus", @@ -427,7 +443,7 @@ "notifications.column_settings.filter_bar.show_bar": "Rādīt filtru joslu", "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", - "notifications.column_settings.mention": "Pieminējumi:", + "notifications.column_settings.mention": "Pieminēšanas:", "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", "notifications.column_settings.reblog": "Pastiprinātie ieraksti:", @@ -441,7 +457,7 @@ "notifications.filter.boosts": "Pastiprinātie ieraksti", "notifications.filter.favourites": "Izlases", "notifications.filter.follows": "Seko", - "notifications.filter.mentions": "Pieminējumi", + "notifications.filter.mentions": "Pieminēšanas", "notifications.filter.polls": "Aptaujas rezultāti", "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", "notifications.grant_permission": "Piešķirt atļauju.", @@ -458,27 +474,36 @@ "onboarding.actions.go_to_explore": "Skatīt tendences", "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", "onboarding.compose.template": "Sveiki, #Mastodon!", - "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", + "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.", "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Populārs Mastodon", - "onboarding.share.lead": "Paziņo citiem, kā viņi tevi var atrast Mastodon!", + "onboarding.profile.discoverable": "Padarīt manu profilu atklājamu", + "onboarding.profile.display_name": "Attēlojamais vārds", + "onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…", + "onboarding.profile.note": "Apraksts", + "onboarding.profile.note_hint": "Tu vari @pieminēt citus cilvēkus vai #tēmturus…", + "onboarding.profile.save_and_continue": "Saglabāt un turpināt", + "onboarding.profile.title": "Profila iestatīšana", + "onboarding.profile.upload_avatar": "Augšupielādēt profila attēlu", + "onboarding.profile.upload_header": "Augšupielādēt profila galveni", + "onboarding.share.lead": "Dari cilvēkiem zināmu, ka viņi var Tevi atrast Mastodon!", "onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}", "onboarding.share.next_steps": "Iespējamie nākamie soļi:", "onboarding.share.title": "Kopīgo savu profilu", - "onboarding.start.lead": "Tagad tu esat daļa no Mastodon — unikālas, decentralizētas sociālo mediju platformas, kurā tu, nevis algoritms, veido savu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", + "onboarding.start.lead": "Tagad Tu esi daļa no Mastodon — vienreizējas, decentralizētas sociālās mediju platformas, kurā Tu, nevis algoritms, veido Tavu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", "onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}", "onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", - "onboarding.steps.setup_profile.body": "Citi, visticamāk, sazināsies ar tevi, izmantojot aizpildītu profilu.", + "onboarding.steps.setup_profile.body": "Palielini mijiedarbību ar aptverošu profilu!", "onboarding.steps.setup_profile.title": "Pielāgo savu profilu", - "onboarding.steps.share_profile.body": "Paziņo saviem draugiem, kā tevi atrast Mastodon!", + "onboarding.steps.share_profile.body": "Dari saviem draugiem zināmu, kā Tevi atrast Mastodon!", "onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu", - "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divu faktoru autentifikāciju. Tas darbojas ar jebkuru tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", + "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divpakāpju autentifikāciju. Tas darbojas ar jebkuru Tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", "onboarding.tips.accounts_from_other_servers": "Vai zināji? Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!", - "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu personīgo serveri!", + "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu serveri!", "onboarding.tips.verification": "Vai zināji? Tu vari verificēt savu kontu, ievietojot saiti uz savu Mastodon profilu savā vietnē un pievienojot vietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti!", "password_confirmation.exceeds_maxlength": "Paroles apstiprināšana pārsniedz maksimālo paroles garumu", "password_confirmation.mismatching": "Paroles apstiprinājums neatbilst", @@ -494,9 +519,14 @@ "poll_button.add_poll": "Pievienot aptauju", "poll_button.remove_poll": "Noņemt aptauju", "privacy.change": "Mainīt ieraksta privātumu", + "privacy.direct.long": "Visi ierakstā pieminētie", + "privacy.direct.short": "Noteikti cilvēki", + "privacy.private.long": "Tikai Tavi sekotāji", + "privacy.private.short": "Sekotāji", "privacy.public.short": "Publiska", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", + "recommended": "Ieteicams", "refresh": "Atsvaidzināt", "regeneration_indicator.label": "Ielādē…", "regeneration_indicator.sublabel": "Tiek gatavota tava plūsma!", @@ -512,8 +542,9 @@ "relative_time.seconds": "{number}s", "relative_time.today": "šodien", "reply_indicator.cancel": "Atcelt", + "reply_indicator.poll": "Aptauja", "report.block": "Bloķēt", - "report.block_explanation": "Tu neredzēsi viņu ziņas. Viņi nevarēs redzēt tavas ziņas vai sekot tev. Viņi varēs saprast, ka ir bloķēti.", + "report.block_explanation": "Tu neredzēsi viņu ierakstus. Viņi nevarēs redzēt Tavus ierakstus vai sekot tev. Viņi varēs saprast, ka ir bloķēti.", "report.categories.legal": "Tiesisks", "report.categories.other": "Citi", "report.categories.spam": "Spams", @@ -527,7 +558,7 @@ "report.forward": "Pārsūtīt {target}", "report.forward_hint": "Konts ir no cita servera. Vai nosūtīt anonimizētu sūdzības kopiju arī tam?", "report.mute": "Apklusināt", - "report.mute_explanation": "Tu neredzēsi viņu ziņas. Viņi joprojām var tev sekot un redzēt tavas ziņas un nezinās, ka viņi ir apklusināti.", + "report.mute_explanation": "Tu neredzēsi viņu ierakstus. Viņi joprojām var Tev sekot un redzēt Tavus ierakstus un nezinās, ka viņi ir apklusināti.", "report.next": "Tālāk", "report.placeholder": "Papildu komentāri", "report.reasons.dislike": "Man tas nepatīk", @@ -543,15 +574,15 @@ "report.rules.subtitle": "Atlasi visus atbilstošos", "report.rules.title": "Kuri noteikumi tiek pārkāpti?", "report.statuses.subtitle": "Atlasi visus atbilstošos", - "report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?", + "report.statuses.title": "Vai ir kādi ieraksti, kas apstiprina šo ziņojumu?", "report.submit": "Iesniegt", "report.target": "Ziņošana par: {target}", - "report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:", + "report.thanks.take_action": "Šeit ir iespējas, lai pārvaldītu Mastodon redzamo saturu:", "report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:", "report.thanks.title": "Vai nevēlies to redzēt?", "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekot @{name}", - "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.", + "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu tā ierakstus savā mājas plūsmā, pārtrauc sekot tam!", "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", "report_notification.categories.legal": "Tiesisks", "report_notification.categories.other": "Cita", @@ -564,19 +595,20 @@ "search.quick_action.go_to_account": "Doties uz profilu {x}", "search.quick_action.go_to_hashtag": "Doties uz tēmturi {x}", "search.quick_action.open_url": "Atvērt URL Mastodonā", - "search.quick_action.status_search": "Ziņas atbilst {x}", - "search.search_or_paste": "Meklē vai iekopē URL", + "search.quick_action.status_search": "Ieraksti, kas atbilst {x}", + "search.search_or_paste": "Meklēt vai ielīmēt URL", "search_popout.full_text_search_disabled_message": "Nav pieejams {domain}.", + "search_popout.full_text_search_logged_out_message": "Pieejams tikai pēc pieteikšanās.", "search_popout.language_code": "ISO valodas kods", "search_popout.options": "Meklēšanas iespējas", "search_popout.quick_actions": "Ātrās darbības", "search_popout.recent": "Nesen meklētais", - "search_popout.specific_date": "konkrēts datums", + "search_popout.specific_date": "noteikts datums", "search_popout.user": "lietotājs", "search_results.accounts": "Profili", "search_results.all": "Visi", "search_results.hashtags": "Tēmturi", - "search_results.nothing_found": "Nevarēja atrast neko šiem meklēšanas vienumiem", + "search_results.nothing_found": "Nevarēja atrast neko, kas atbilstu šim meklēšanas vaicājumam", "search_results.see_all": "Skatīt visus", "search_results.statuses": "Ieraksti", "search_results.title": "Meklēt {q}", @@ -587,9 +619,9 @@ "server_banner.learn_more": "Uzzināt vairāk", "server_banner.server_stats": "Servera statistika:", "sign_in_banner.create_account": "Izveidot kontu", - "sign_in_banner.sign_in": "Pierakstīties", + "sign_in_banner.sign_in": "Pieteikties", "sign_in_banner.sso_redirect": "Piesakies vai Reģistrējies", - "sign_in_banner.text": "Pieraksties, lai sekotu profiliem vai atsaucēm, pievienotu izlasei, kopīgotu ziņas un atbildētu uz tām. Vari arī mijiedarboties no sava konta citā serverī.", + "sign_in_banner.text": "Jāpiesakās, lai sekotu profiliem vai tēmturiem, pievienotu izlasei, kopīgotu ierakstus un atbildētu uz tiem. Vari arī mijiedarboties ar savu kontu citā serverī.", "status.admin_account": "Atvērt @{name} moderēšanas saskarni", "status.admin_domain": "Atvērt {domain} moderēšanas saskarni", "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē", @@ -602,16 +634,16 @@ "status.detailed_status": "Detalizēts sarunas skats", "status.direct": "Pieminēt @{name} privāti", "status.direct_indicator": "Pieminēts privāti", - "status.edit": "Rediģēt", - "status.edited": "Rediģēts {date}", - "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", + "status.edit": "Labot", + "status.edited": "Labots {date}", + "status.edited_x_times": "Labots {count, plural, one {{count} reizi} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienīts", "status.filter": "Filtrē šo ziņu", "status.filtered": "Filtrēts", "status.hide": "Slēpt ierakstu", "status.history.created": "{name} izveidoja {date}", - "status.history.edited": "{name} rediģēja {date}", + "status.history.edited": "{name} laboja {date}", "status.load_more": "Ielādēt vairāk", "status.media.open": "Noklikšķini, lai atvērtu", "status.media.show": "Noklikšķini, lai parādītu", @@ -648,7 +680,7 @@ "status.uncached_media_warning": "Priekšskatījums nav pieejams", "status.unmute_conversation": "Noņemt sarunas apklusinājumu", "status.unpin": "Noņemt profila piespraudumu", - "subscribed_languages.lead": "Pēc izmaiņu veikšanas tavā mājas un sarakstu laika līnijā tiks rādītas tikai ziņas atlasītajās valodās. Neatlasi nevienu, lai saņemtu ziņas visās valodās.", + "subscribed_languages.lead": "Pēc izmaiņu veikšanas Tavā mājas un sarakstu laika līnijā tiks rādīti tikai tie ieraksti atlasītajās valodās. Neatlasīt nevienu, lai saņemtu ierakstus visās valodās.", "subscribed_languages.save": "Saglabāt izmaiņas", "subscribed_languages.target": "Mainīt abonētās valodas priekš {target}", "tabs_bar.home": "Sākums", @@ -662,8 +694,8 @@ "timeline_hint.resources.followers": "Sekotāji", "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecāki ieraksti", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}", - "trends.trending_now": "Aktuālās tendences", + "trends.counter_by_accounts": "{count, plural, zero {{counter} cilvēku} one {{counter} cilvēks} other {{counter} cilvēki}} {days, plural, one {{day} dienā} other {{days} dienās}}", + "trends.trending_now": "Pašlaik populāri", "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}Mjd", "units.short.million": "{count}M", @@ -674,7 +706,7 @@ "upload_error.poll": "Datņu augšupielādes aptaujās nav atļautas.", "upload_form.audio_description": "Pievieno aprakstu cilvēkiem ar dzirdes zudumu", "upload_form.description": "Pievieno aprakstu vājredzīgajiem", - "upload_form.edit": "Rediģēt", + "upload_form.edit": "Labot", "upload_form.thumbnail": "Nomainīt sīktēlu", "upload_form.video_description": "Pievieno aprakstu cilvēkiem ar dzirdes vai redzes traucējumiem", "upload_modal.analyzing_picture": "Analizē attēlu…", @@ -683,7 +715,7 @@ "upload_modal.choose_image": "Izvēlēties attēlu", "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", "upload_modal.detect_text": "Noteikt tekstu no attēla", - "upload_modal.edit_media": "Rediģēt multividi", + "upload_modal.edit_media": "Labot informācijas nesēju", "upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", "upload_modal.preparing_ocr": "Sagatavo OCR…", "upload_modal.preview_label": "Priekšskatīt ({ratio})", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index f2367f6463f74d..a8d42e5ff60db1 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -530,7 +530,7 @@ "poll_button.remove_poll": "Peiling verwijderen", "privacy.change": "Zichtbaarheid van bericht aanpassen", "privacy.direct.long": "Alleen voor mensen die specifiek in het bericht worden vermeld", - "privacy.direct.short": "Specifieke mensen", + "privacy.direct.short": "Privébericht", "privacy.private.long": "Alleen jouw volgers", "privacy.private.short": "Volgers", "privacy.public.long": "Iedereen op Mastodon en daarbuiten", @@ -666,7 +666,7 @@ "status.mention": "@{name} vermelden", "status.more": "Meer", "status.mute": "@{name} negeren", - "status.mute_conversation": "Negeer gesprek", + "status.mute_conversation": "Gesprek negeren", "status.open": "Volledig bericht tonen", "status.pin": "Aan profielpagina vastmaken", "status.pinned": "Vastgemaakt bericht", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 27ca6117225387..a172fc69f4c4e6 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -277,6 +277,7 @@ "follow_request.authorize": "Autoriser", "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.", + "follow_suggestions.view_all": "Vis alle", "followed_tags": "Fulgte emneknagger", "footer.about": "Om", "footer.directory": "Profilkatalog", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 5fcca414cff3f7..fde170db60d230 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -375,7 +375,7 @@ "lightbox.previous": "Назад", "limited_account_hint.action": "Все равно показать профиль", "limited_account_hint.title": "Этот профиль был скрыт модераторами {domain}.", - "link_preview.author": "По алфавиту", + "link_preview.author": "Автор: {name}", "lists.account.add": "Добавить в список", "lists.account.remove": "Убрать из списка", "lists.delete": "Удалить список", diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json index 0967ef424bce67..59de0397777655 100644 --- a/app/javascript/mastodon/locales/ry.json +++ b/app/javascript/mastodon/locales/ry.json @@ -1 +1,19 @@ -{} +{ + "about.blocks": "Модеровані серверы", + "about.contact": "Контакт:", + "about.disclaimer": "Mastodon є задарьнов проґрамов из удпертым кодом тай торговов значков Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Причины не ясні", + "about.domain_blocks.silenced.title": "Обмежено", + "about.domain_blocks.suspended.explanation": "Ниякі податкы из сього сервера не будут уброблені, усокочені ци поміняні, што чинит невозможнов хоть-яку інтеракцію ци зязок из хосновачами из сього сервера.", + "about.domain_blocks.suspended.title": "Заблоковано", + "about.rules": "Правила сервера", + "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_short": "Заблоковати", + "account.blocked": "Заблоковано", + "account.browse_more_on_origin_server": "Позирайте бульше на ориґіналнум профілю" +} diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 37c0dd1383fd06..7eee0c29c2a061 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -1,741 +1,750 @@ { "about.blocks": "Moderované servery", "about.contact": "Kontakt:", - "about.disclaimer": "Mastodon je bezplatný softvér s otvoreným zdrojovým kódom a ochranná známka spoločnosti Mastodon gGmbH.", - "about.domain_blocks.no_reason_available": "Dôvod nie je k dispozícii", - "about.domain_blocks.preamble": "Mastodon vo všeobecnosti umožňuje prezerať obsah a komunikovať s používateľmi z akéhokoľvek iného servera vo fediverse. Toto sú výnimky, ktoré boli urobené na tomto konkrétnom serveri.", - "about.domain_blocks.silenced.explanation": "Vo všeobecnosti neuvidíte profily a obsah z tohto servera, pokiaľ si ho nevyhľadáte alebo sa neprihlásite k jeho sledovaniu.", - "about.domain_blocks.silenced.title": "Obmedzená", + "about.disclaimer": "Mastodon je bezplatný open-source softvér s otvoreným zdrojovým kódom a ochranná známka spoločnosti Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Dôvod nebol uvedený", + "about.domain_blocks.preamble": "Mastodon vo všeobecnosti umožňuje prezerať obsah a komunikovať s používateľmi z akéhokoľvek iného servera vo fediverze. Tu sú uvedené výnimky, ktoré boli urobené na tomto konkrétnom serveri.", + "about.domain_blocks.silenced.explanation": "Vo všeobecnosti neuvidíte profily a obsah z tohto servera, pokiaľ si ich nevyhľadáte alebo sa neprihlásite k ich sledovaniu.", + "about.domain_blocks.silenced.title": "Obmedzený", "about.domain_blocks.suspended.explanation": "Žiadne údaje z tohto servera nebudú spracovávané, ukladané ani vymieňané, čo znemožní akúkoľvek interakciu alebo komunikáciu s používateľmi z tohto servera.", - "about.domain_blocks.suspended.title": "Vylúčená", + "about.domain_blocks.suspended.title": "Vylúčený", "about.not_available": "Tieto informácie neboli sprístupnené na tomto serveri.", - "about.powered_by": "Decentralizované sociálne médiá poháňané technológiou {mastodon}", + "about.powered_by": "Decentralizovaná sociálna sieť na základe technológie {mastodon}", "about.rules": "Pravidlá servera", "account.account_note_header": "Poznámka", - "account.add_or_remove_from_list": "Pridaj alebo odober zo zoznamov", + "account.add_or_remove_from_list": "Pridať alebo odobrať zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", - "account.block": "Blokuj @{name}", - "account.block_domain": "Skry všetko z {domain}", - "account.block_short": "Blokuj", - "account.blocked": "Blokovaný/á", - "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", - "account.cancel_follow_request": "Zruš žiadosť o sledovanie", - "account.copy": "Skopíruj odkaz na profil", - "account.direct": "Spomeň @{name} súkromne", - "account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky", - "account.domain_blocked": "Doména skrytá", - "account.edit_profile": "Uprav profil", - "account.enable_notifications": "Oznamuj mi, keď má @{name} príspevky", - "account.endorse": "Zobrazuj na profile", + "account.block": "Blokovať @{name}", + "account.block_domain": "Blokovať doménu {domain}", + "account.block_short": "Blokovať", + "account.blocked": "Účet blokovaný", + "account.browse_more_on_origin_server": "Zobraziť viac na pôvodnom profile", + "account.cancel_follow_request": "Zrušiť žiadosť o sledovanie", + "account.copy": "Skopírovať odkaz na profil", + "account.direct": "Súkromne označiť @{name}", + "account.disable_notifications": "Zrušiť upozornenia na príspevky od @{name}", + "account.domain_blocked": "Doména blokovaná", + "account.edit_profile": "Upraviť profil", + "account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}", + "account.endorse": "Zobraziť na vlastnom profile", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", - "account.featured_tags.title": "Odporúčané hashtagy používateľa {name}", - "account.follow": "Sleduj", - "account.follow_back": "Nasleduj späť", + "account.featured_tags.title": "Odporúčané hashtagy účtu {name}", + "account.follow": "Sledovať", + "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", - "account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.", - "account.followers_counter": "{count, plural, one {{counter} Sledujúci} other {{counter} Sledujúci}}", - "account.following": "Sledujem", - "account.following_counter": "{count, plural, one {{counter} Sledovaných} other {{counter} Sledujúcich}}", - "account.follows.empty": "Tento používateľ ešte nikoho nesleduje.", - "account.go_to_profile": "Prejdi na profil", - "account.hide_reblogs": "Skry zdieľania od @{name}", - "account.in_memoriam": "In Memoriam.", - "account.joined_short": "Pridal/a sa", + "account.followers.empty": "Tento účet ešte nikto nesleduje.", + "account.followers_counter": "{count, plural, one {{counter} sledujúci účet} few {{counter} sledujúce účty} many {{counter} sledujúcich účtov} other {{counter} sledujúcich účtov}}", + "account.following": "Sledovaný účet", + "account.following_counter": "{count, plural, one {{counter} sledovaný účet} few {{counter} sledované účty} many {{counter} sledovaných účtov} other {{counter} sledovaných účtov}}", + "account.follows.empty": "Tento účet ešte nikoho nesleduje.", + "account.go_to_profile": "Prejsť na profil", + "account.hide_reblogs": "Skryť zdieľania od @{name}", + "account.in_memoriam": "In memoriam.", + "account.joined_short": "Dátum registrácie", "account.languages": "Zmeniť odoberané jazyky", "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 sa sám rozhoduje, kto ho môže sledovať.", "account.media": "Médiá", - "account.mention": "Spomeň @{name}", - "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", - "account.mute": "Stíš @{name}", - "account.mute_notifications_short": "Stíš oznámenia", - "account.mute_short": "Stíš", - "account.muted": "Stíšený", + "account.mention": "Označiť @{name}", + "account.moved_to": "{name} uvádza, že má nový účet:", + "account.mute": "Stíšiť @{name}", + "account.mute_notifications_short": "Stíšiť upozornenia", + "account.mute_short": "Stíšiť", + "account.muted": "Účet stíšený", "account.mutual": "Spoločné", "account.no_bio": "Nie je uvedený žiadny popis.", - "account.open_original_page": "Otvor pôvodnú stránku", + "account.open_original_page": "Otvoriť pôvodnú stránku", "account.posts": "Príspevky", "account.posts_with_replies": "Príspevky a odpovede", - "account.report": "Nahlás @{name}", - "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", - "account.requested_follow": "{name} ti poslal žiadosť na sledovanie", - "account.share": "Zdieľaj @{name} profil", - "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", - "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", - "account.unblock": "Odblokuj @{name}", - "account.unblock_domain": "Prestaň skrývať {domain}", - "account.unblock_short": "Odblokuj", - "account.unendorse": "Nezobrazuj na profile", - "account.unfollow": "Prestaň nasledovať", - "account.unmute": "Prestaň ignorovať @{name}", - "account.unmute_notifications_short": "Zruš nevšímanie si obznámení", - "account.unmute_short": "Zruš nevšímanie", - "account_note.placeholder": "Klikni pre vloženie poznámky", + "account.report": "Nahlásiť @{name}", + "account.requested": "Čaká na schválenie. Žiadosť zrušíte kliknutím sem", + "account.requested_follow": "{name} vás chce sledovať", + "account.share": "Zdieľaj profil @{name}", + "account.show_reblogs": "Zobrazovať zdieľania od @{name}", + "account.statuses_counter": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", + "account.unblock": "Odblokovať @{name}", + "account.unblock_domain": "Odblokovať doménu {domain}", + "account.unblock_short": "Odblokovať", + "account.unendorse": "Nezobrazovať na vlastnom profile", + "account.unfollow": "Zrušiť sledovanie", + "account.unmute": "Vypnúť stíšenie @{name}", + "account.unmute_notifications_short": "Vypnúť stíšenie upozornení", + "account.unmute_short": "Zrušiť stíšenie", + "account_note.placeholder": "Kliknutím pridať poznámku", "admin.dashboard.daily_retention": "Miera udržania používateľov podľa dňa po registrácii", "admin.dashboard.monthly_retention": "Miera udržania používateľov podľa mesiaca po registrácii", "admin.dashboard.retention.average": "Priemer", - "admin.dashboard.retention.cohort": "Mesiac zaregistrovania sa", - "admin.dashboard.retention.cohort_size": "Noví užívatelia", + "admin.dashboard.retention.cohort": "Dátum registrácie", + "admin.dashboard.retention.cohort_size": "Nové účty", "admin.impact_report.instance_accounts": "Profily účtov, ktoré by boli odstránené", "admin.impact_report.instance_followers": "Sledovatelia, o ktorých by naši používatelia prišli", "admin.impact_report.instance_follows": "Sledovatelia, o ktorých by ich používatelia prišli", "admin.impact_report.title": "Zhrnutie dopadu", - "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", - "alert.rate_limited.title": "Tempo obmedzené", + "alert.rate_limited.message": "Prosím, skúste to znova o {retry_time, time, medium}.", + "alert.rate_limited.title": "Priveľa žiadostí", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", - "audio.hide": "Skry zvuk", - "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", + "audio.hide": "Skryť zvuk", + "boost_modal.combo": "Nabudúce môžete preskočiť stlačením {combo}", "bundle_column_error.copy_stacktrace": "Kopírovať chybovú hlášku", "bundle_column_error.error.body": "Požadovanú stránku nebolo možné vykresliť. Môže to byť spôsobené chybou v našom kóde alebo problémom s kompatibilitou prehliadača.", "bundle_column_error.error.title": "Ale nie!", - "bundle_column_error.network.body": "Pri pokuse o načítanie tejto stránky sa vyskytla chyba. Môže to byť spôsobené dočasným problémom s Vaším internetovým pripojením alebo týmto serverom.", + "bundle_column_error.network.body": "Pri pokuse o načítanie tejto stránky sa vyskytla chyba. Môže to byť spôsobené dočasným problémom s vaším internetovým pripojením alebo týmto serverom.", "bundle_column_error.network.title": "Chyba siete", - "bundle_column_error.retry": "Skús to znova", - "bundle_column_error.return": "Prejdi späť na domovskú stránku", - "bundle_column_error.routing.body": "Žiadaná stránka nebola nájdená. Ste si istý, že zadaná adresa URL je správna?", + "bundle_column_error.retry": "Skúste to znova", + "bundle_column_error.return": "Prejdite späť na domovskú stránku", + "bundle_column_error.routing.body": "Žiadaná stránka nebola nájdená. Ste si istí, že zadaná adresa URL je správna?", "bundle_column_error.routing.title": "404", - "bundle_modal_error.close": "Zatvor", - "bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.", + "bundle_modal_error.close": "Zatvoriť", + "bundle_modal_error.message": "Pri načítavaní tohto komponentu nastala chyba.", "bundle_modal_error.retry": "Skúsiť znova", "closed_registrations.other_server_instructions": "Keďže Mastodon je decentralizovaný, môžete si vytvoriť účet na inom serveri a stále komunikovať s týmto serverom.", - "closed_registrations_modal.description": "Vytvorenie účtu na {domain} nie je v súčasnosti možné, ale majte prosím na pamäti, že nepotrebujete účet práve na {domain}, aby bolo možné používať Mastodon.", - "closed_registrations_modal.find_another_server": "Nájdi iný server", + "closed_registrations_modal.description": "Vytvorenie účtu na {domain} nie je v súčasnosti možné, ale myslite na to, že na používanie Mastodonu nepotrebujete účet práve na {domain}.", + "closed_registrations_modal.find_another_server": "Nájsť iný server", "closed_registrations_modal.preamble": "Mastodon je decentralizovaný, takže bez ohľadu na to, kde si vytvoríte účet, budete môcť sledovať a komunikovať s kýmkoľvek na tomto serveri. Môžete ho dokonca hostiť sami!", - "closed_registrations_modal.title": "Registrácia na Mastodon", + "closed_registrations_modal.title": "Registrácia na Mastodone", "column.about": "O tomto serveri", - "column.blocks": "Blokovaní užívatelia", + "column.blocks": "Blokované účty", "column.bookmarks": "Záložky", "column.community": "Miestna časová os", - "column.direct": "Súkromné spomenutia", - "column.directory": "Prehľadávaj profily", - "column.domain_blocks": "Skryté domény", + "column.direct": "Súkromné označenia", + "column.directory": "Prehľadávať profily", + "column.domain_blocks": "Blokované domény", "column.favourites": "Obľúbené", "column.firehose": "Živé kanály", "column.follow_requests": "Žiadosti o sledovanie", "column.home": "Domov", "column.lists": "Zoznamy", - "column.mutes": "Nevšímaní užívatelia", - "column.notifications": "Oznámenia", + "column.mutes": "Stíšené účty", + "column.notifications": "Upozornenia", "column.pins": "Pripnuté príspevky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", "column_header.hide_settings": "Skryť nastavenia", - "column_header.moveLeft_settings": "Presuň stĺpec doľava", - "column_header.moveRight_settings": "Presuň stĺpec doprava", - "column_header.pin": "Pripni", - "column_header.show_settings": "Ukáž nastavenia", - "column_header.unpin": "Odopni", + "column_header.moveLeft_settings": "Presunúť stĺpec doľava", + "column_header.moveRight_settings": "Presunúť stĺpec doprava", + "column_header.pin": "Pripnúť", + "column_header.show_settings": "Zobraziť nastavenia", + "column_header.unpin": "Odopnúť", "column_subheading.settings": "Nastavenia", - "community.column_settings.local_only": "Iba miestna", + "community.column_settings.local_only": "Iba miestne", "community.column_settings.media_only": "Iba médiá", - "community.column_settings.remote_only": "Iba odľahlé", - "compose.language.change": "Zmeň jazyk", - "compose.language.search": "Hľadaj medzi jazykmi...", + "community.column_settings.remote_only": "Iba vzdialené", + "compose.language.change": "Zmeniť jazyk", + "compose.language.search": "Vyhľadávať jazyky…", "compose.published.body": "Príspevok zverejnený.", - "compose.published.open": "Otvor", + "compose.published.open": "Otvoriť", "compose.saved.body": "Príspevok uložený.", - "compose_form.direct_message_warning_learn_more": "Zisti viac", - "compose_form.encryption_warning": "Príspevky na Mastodon nie sú end-to-end šifrované. Nezdieľajte cez Mastodon žiadne citlivé informácie.", - "compose_form.hashtag_warning": "Tento príspevok nebude zobrazený pod žiadným haštagom, lebo nieje verejne listovaný. Iba verejné príspevky môžu byť nájdené podľa haštagu.", - "compose_form.lock_disclaimer": "Tvoj účet nie je {locked}. Ktokoľvek ťa môže nasledovať a vidieť tvoje príspevky pre sledujúcich.", + "compose_form.direct_message_warning_learn_more": "Viac informácií", + "compose_form.encryption_warning": "Príspevky na Mastodone nie sú šifrované end-to-end. Nezdieľajte cez Mastodon žiadne citlivé informácie.", + "compose_form.hashtag_warning": "Tento príspevok nebude zobrazený pod žiadným hashtagom, lebo nie je verejný. Iba verejné príspevky môžu byť nájdené podľa hashtagu.", + "compose_form.lock_disclaimer": "Váš účet nie je {locked}. Ktokoľvek vás môže sledovať a vidieť vaše príspevky pre sledujúcich.", "compose_form.lock_disclaimer.lock": "zamknutý", - "compose_form.placeholder": "Čo máš na mysli?", + "compose_form.placeholder": "Na čo práve myslíte?", "compose_form.poll.duration": "Trvanie ankety", "compose_form.poll.multiple": "Viacero možností", - "compose_form.poll.option_placeholder": "Voľba {number}", - "compose_form.poll.single": "Vyber jednu", - "compose_form.poll.switch_to_multiple": "Zmeň anketu pre povolenie viacerých možností", - "compose_form.poll.switch_to_single": "Zmeň anketu na takú s jedinou voľbou", + "compose_form.poll.option_placeholder": "Možnosť {number}", + "compose_form.poll.single": "Jediný výber", + "compose_form.poll.switch_to_multiple": "Zmeniť anketu a povoliť viaceré možnosti", + "compose_form.poll.switch_to_single": "Zmeniť anketu na jediný povolený výber", "compose_form.poll.type": "Typ", - "compose_form.publish": "Prispej", - "compose_form.publish_form": "Zverejniť", - "compose_form.reply": "Odpovedz", - "compose_form.save_changes": "Aktualizácia", - "compose_form.spoiler.marked": "Text je ukrytý za varovaním", - "compose_form.spoiler.unmarked": "Text nieje ukrytý", + "compose_form.publish": "Uverejniť", + "compose_form.publish_form": "Nový príspevok", + "compose_form.reply": "Odpovedať", + "compose_form.save_changes": "Aktualizovať", + "compose_form.spoiler.marked": "Odstrániť varovanie o obsahu", + "compose_form.spoiler.unmarked": "Pridať varovanie o obsahu", "compose_form.spoiler_placeholder": "Varovanie o obsahu (voliteľné)", "confirmation_modal.cancel": "Zruš", - "confirmations.block.block_and_report": "Zablokuj a nahlás", - "confirmations.block.confirm": "Blokuj", - "confirmations.block.message": "Si si istý/á, že chceš blokovať {name}?", - "confirmations.cancel_follow_request.confirm": "Odvolanie žiadosti", - "confirmations.cancel_follow_request.message": "Naozaj chcete stiahnuť svoju žiadosť o sledovanie {name}?", - "confirmations.delete.confirm": "Vymaž", - "confirmations.delete.message": "Si si istý/á, že chceš vymazať túto správu?", - "confirmations.delete_list.confirm": "Vymaž", - "confirmations.delete_list.message": "Si si istý/á, že chceš natrvalo vymazať tento zoznam?", - "confirmations.discard_edit_media.confirm": "Zahoď", + "confirmations.block.block_and_report": "Zablokovať a nahlásiť", + "confirmations.block.confirm": "Zablokovať", + "confirmations.block.message": "Určite chcete zablokovať {name}?", + "confirmations.cancel_follow_request.confirm": "Stiahnuť žiadosť", + "confirmations.cancel_follow_request.message": "Určite chcete stiahnuť svoju žiadosť o sledovanie {name}?", + "confirmations.delete.confirm": "Vymazať", + "confirmations.delete.message": "Určite chcete tento príspevok vymazať?", + "confirmations.delete_list.confirm": "Vymazať", + "confirmations.delete_list.message": "Určite chcete tento zoznam trvalo vymazať?", + "confirmations.discard_edit_media.confirm": "Zahodiť", "confirmations.discard_edit_media.message": "Máte neuložené zmeny v popise alebo náhľade média, zahodiť ich aj tak?", - "confirmations.domain_block.confirm": "Skry celú doménu", - "confirmations.domain_block.message": "Si si naozaj istý/á, že chceš blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.", - "confirmations.edit.confirm": "Uprav", - "confirmations.edit.message": "Úpravou teraz prepíšeš správu, ktorú práve zostavuješ. Si si istý/á, že chceš pokračovať?", - "confirmations.logout.confirm": "Odhlás sa", - "confirmations.logout.message": "Si si istý/á, že sa chceš odhlásiť?", - "confirmations.mute.confirm": "Nevšímaj si", - "confirmations.mute.explanation": "Toto nastavenie skryje ich príspevky, alebo príspevky od iných v ktorých sú spomenutí, ale umožní im vidieť tvoje príspevky, aj ťa nasledovať.", - "confirmations.mute.message": "Naozaj si chceš nevšímať {name}?", - "confirmations.redraft.confirm": "Vyčisti a prepíš", - "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", - "confirmations.reply.confirm": "Odpovedz", + "confirmations.domain_block.confirm": "Blokovať celú doménu", + "confirmations.domain_block.message": "Určite chcete blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych účtov, čo aj odporúčame. Obsah z tejto domény neuvidíte v žiadnej verejnej časovej osi ani v upozorneniach. Vaši sledujúci pochádzajúci z tejto domény budú odstránení.", + "confirmations.edit.confirm": "Upraviť", + "confirmations.edit.message": "Úpravou prepíšete príspevok, ktorý máte rozpísaný. Určite chcete pokračovať?", + "confirmations.logout.confirm": "Odhlásiť sa", + "confirmations.logout.message": "Určite sa chcete odhlásiť?", + "confirmations.mute.confirm": "Stíšiť", + "confirmations.mute.explanation": "Toto nastavenie skryje príspevky od daného účtu alebo príspevky od iných, v ktorých je tento účet spomenutý. Účet bude stále vidieť vaše príspevky a môcť vás sledovať.", + "confirmations.mute.message": "Určite chcete stíšiť {name}?", + "confirmations.redraft.confirm": "Vymazať a prepísať", + "confirmations.redraft.message": "Určite chcete tento príspevok vymazať a prepísať? Prídete o jeho zdieľania a ohviezdičkovania a odpovede na pôvodný príspevok budú odlúčené.", + "confirmations.reply.confirm": "Odpovedať", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", - "confirmations.unfollow.confirm": "Prestaň sledovať", - "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", - "conversation.delete": "Vymaž konverzáciu", - "conversation.mark_as_read": "Označ za prečítané", - "conversation.open": "Ukáž konverzáciu", + "confirmations.unfollow.confirm": "Prestať sledovať", + "confirmations.unfollow.message": "Určite chcete prestať sledovať {name}?", + "conversation.delete": "Vymazať konverzáciu", + "conversation.mark_as_read": "Označiť ako prečítanú", + "conversation.open": "Zobraziť konverzáciu", "conversation.with": "S {names}", - "copy_icon_button.copied": "Skopírovaný do schránky", + "copy_icon_button.copied": "Skopírované do schránky", "copypaste.copied": "Skopírované", - "copypaste.copy_to_clipboard": "Skopíruj do schránky", - "directory.federated": "Zo známého fedivesmíru", + "copypaste.copy_to_clipboard": "Skopírovať do schránky", + "directory.federated": "Zo známého fediverza", "directory.local": "Iba z {domain}", "directory.new_arrivals": "Nové príchody", - "directory.recently_active": "Nedávno aktívne", + "directory.recently_active": "Nedávna aktivita", "disabled_account_banner.account_settings": "Nastavenia účtu", - "disabled_account_banner.text": "Vaše konto {disabledAccount} je momentálne vypnuté.", - "dismissable_banner.community_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorých účty sú hostované na {domain}.", + "disabled_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný.", + "dismissable_banner.community_timeline": "Toto sú najnovšie verejné príspevky od účtov hostených na {domain}.", "dismissable_banner.dismiss": "Zrušiť", - "dismissable_banner.explore_links": "Tieto správy sú dnes najviac zdieľané naprieč sociálnou sieťou. Novšie správy, zdieľané viacerými rôznymi ľudmi sú zoradené vyššie.", - "dismissable_banner.explore_statuses": "Toto sú príspevky naprieč celej sociálnej sieti, ktoré dnes naberajú na ťahu. Novšie príspevky s viacerými vyzdvihnutiami sú radené vyššie.", - "dismissable_banner.explore_tags": "Tieto haštagy práve teraz získavajú popularitu, medzi ľuďmi na tomto a ďalších serveroch decentralizovanej siete.", - "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorí sledujú {domain}, cez celú sociálnu sieť.", - "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", - "embed.preview": "Tu je ako to bude vyzerať:", + "dismissable_banner.explore_links": "Toto sú správy zo sociálnej siete, ktoré sú dnes populárne. Novšie správy s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.", + "dismissable_banner.explore_statuses": "Toto sú príspevky z celej sociálnej siete, ktoré sú dnes populárne. Novšie príspevky s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.", + "dismissable_banner.explore_tags": "Toto sú hashtagy zo sociálnej siete, ktoré sú dnes populárne. Novšie hashtagy používané viacerými ľuďmi sú radené vyššie.", + "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od účtov na sociálnej sieti, ktoré sú sledované účtami z {domain}.", + "embed.instructions": "Tento príspevok môžete pridať na svoju webovú stránku použitím tohto kódu.", + "embed.preview": "Takto bude vyzerať:", "emoji_button.activity": "Aktivita", - "emoji_button.clear": "Vyčisti", + "emoji_button.clear": "Vyčistiť", "emoji_button.custom": "Vlastné", "emoji_button.flags": "Vlajky", "emoji_button.food": "Jedlá a nápoje", - "emoji_button.label": "Vlož emotikony", - "emoji_button.nature": "Prírodné", - "emoji_button.not_found": "Nie emotikony!! (╯°□°)╯︵ ┻━┻", + "emoji_button.label": "Vložiť emotikony", + "emoji_button.nature": "Príroda", + "emoji_button.not_found": "Žiadne emotikony", "emoji_button.objects": "Predmety", "emoji_button.people": "Ľudia", "emoji_button.recent": "Často používané", - "emoji_button.search": "Hľadaj...", + "emoji_button.search": "Hľadať…", "emoji_button.search_results": "Výsledky hľadania", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", - "empty_column.account_hides_collections": "Tento užívateľ si zvolil nesprístupniť túto informáciu", + "empty_column.account_hides_collections": "Tento účet sa rozhodol túto informáciu nesprístupniť", "empty_column.account_suspended": "Účet bol pozastavený", - "empty_column.account_timeline": "Nie sú tu žiadne príspevky!", + "empty_column.account_timeline": "Nie sú tu žiadne príspevky.", "empty_column.account_unavailable": "Profil nedostupný", - "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", - "empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.", - "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!", - "empty_column.direct": "Ešte nemáš žiadne priame zmienky. Keď nejakú pošleš alebo dostaneš, ukáže sa tu.", - "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", - "empty_column.explore_statuses": "Momentálne nie je nič trendové. Pozrite sa neskôr!", - "empty_column.favourited_statuses": "Zatiaľ nemáš žiadne obľúbené príspevky. Akonáhle označíš nejaký ako obľúbený, zobrazí sa tu.", - "empty_column.favourites": "Nikto si zatiaľ tento príspevok neobľúbil. Akonáhle tak niekto urobí, zobrazí sa tu.", - "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.", - "empty_column.followed_tags": "Ešte nenasleduješ žiadne haštagy. Keď tak urobíš, zobrazia sa tu.", + "empty_column.blocks": "Nemáte blokované žiadne účty.", + "empty_column.bookmarked_statuses": "Ešte nemáte záložku v žiadnom príspevku. Keď si ju do nejakého príspevkuk pridáte, zobrazí sa tu.", + "empty_column.community": "Miesta časová os je prázdna. Napíšte niečo, aby to tu ožilo!", + "empty_column.direct": "Ešte nemáte žiadne súkromné označenia. Keď nejaké pošlete alebo dostanete, zobrazí sa tu.", + "empty_column.domain_blocks": "Žiadne domény ešte nie sú blokované.", + "empty_column.explore_statuses": "Momentálne nie je nič populárne. Skontrolujte to zas neskôr.", + "empty_column.favourited_statuses": "Zatiaľ nemáte žiadne ohviezdičkované príspevky. Akonáhle nejaký ohviezdičkujete, zobrazí sa tu.", + "empty_column.favourites": "Zatiaľ tento príspevok nikto neohviezdičkoval. Akonáhle sa tak stane, zobrazí sa tu.", + "empty_column.follow_requests": "Zatiaľ nemáte žiadne žiadosti o sledovanie. Keď nejakú dostanete, zobrazí sa tu.", + "empty_column.followed_tags": "Zatiaľ nesledujete žiadne hashtagy. Keď tak urobíte, zobrazia sa tu.", "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.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.", - "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.", - "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo", - "error.unexpected_crash.explanation": "Kvôli chybe v našom kóde, alebo problému s kompatibilitou prehliadača, túto stránku nebolo možné zobraziť správne.", - "error.unexpected_crash.explanation_addons": "Túto stránku sa nepodarilo zobraziť správne. Táto chyba je pravdepodobne spôsobená rozšírením v prehliadači, alebo nástrojmi automatického prekladu.", - "error.unexpected_crash.next_steps": "Skús obnoviť stránku. Ak to nepomôže, pravdepodobne budeš stále môcť používať Mastodon cez iný prehliadač, alebo natívnu aplikáciu.", - "error.unexpected_crash.next_steps_addons": "Skús ich vypnúť, a obnoviť túto stránku. Ak to nepomôže, pravdepodobne budeš stále môcť Mastodon používať cez iný prehliadač, alebo natívnu aplikáciu.", - "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", - "errors.unexpected_crash.report_issue": "Nahlás problém", + "empty_column.home": "Vaša domáca časová os je zatiaľ prázdna. Začnite sledovať ostatných a naplňte si ju.", + "empty_column.list": "Tento zoznam je zatiaľ prázdny. Keď ale členovia tohoto zoznamu uverejnia nové príspevky, objavia sa tu.", + "empty_column.lists": "Zatiaľ nemáte žiadne zoznamy. Keď nejaký vytvoríte, zobrazí sa tu.", + "empty_column.mutes": "Zatiaľ ste si nikoho nestíšili.", + "empty_column.notifications": "Zatiaľ nemáte žiadne upozornenia. Začnú vám pribúdať, keď s vami začnú interagovať ostatní.", + "empty_column.public": "Zatiaľ tu nič nie je. Napíšte niečo verejné alebo začnite sledovať účty z iných serverov, aby tu niečo pribudlo.", + "error.unexpected_crash.explanation": "Pre chybu v našom kóde alebo problém s kompatibilitou prehliadača nebolo túto stránku možné zobraziť správne.", + "error.unexpected_crash.explanation_addons": "Túto stránku sa nepodarilo zobraziť správne. Táto chyba je pravdepodobne spôsobená rozšírením v prehliadači alebo nástrojmi automatického prekladu.", + "error.unexpected_crash.next_steps": "Skúste stránku obnoviť. Ak to nepomôže, pravdepodobne budete stále môcť používať Mastodon cez iný prehliadač alebo natívnu aplikáciu.", + "error.unexpected_crash.next_steps_addons": "Skúste ich vypnúť a stránku obnoviť. Ak to nepomôže, pravdepodobne budete stále môcť Mastodon používať cez iný prehliadač alebo natívnu aplikáciu.", + "errors.unexpected_crash.copy_stacktrace": "Kopírovať stacktrace do schránky", + "errors.unexpected_crash.report_issue": "Nahlásiť problém", "explore.search_results": "Výsledky hľadania", "explore.suggested_follows": "Ľudia", - "explore.title": "Objavuj", - "explore.trending_links": "Novinky", + "explore.title": "Objavovať", + "explore.trending_links": "Správy", "explore.trending_statuses": "Príspevky", - "explore.trending_tags": "Haštagy", + "explore.trending_tags": "Hashtagy", "filter_modal.added.context_mismatch_explanation": "Táto kategória filtrov sa nevzťahuje na kontext, v ktorom ste získali prístup k tomuto príspevku. Ak chcete, aby sa príspevok filtroval aj v tomto kontexte, budete musieť filter upraviť.", "filter_modal.added.context_mismatch_title": "Nesúlad kontextu!", "filter_modal.added.expired_explanation": "Platnosť tejto kategórie filtra vypršala, aby sa použila, je potrebné zmeniť dátum vypršania platnosti.", "filter_modal.added.expired_title": "Vypršala platnosť filtra!", "filter_modal.added.review_and_configure": "Ak chcete skontrolovať a ďalej konfigurovať túto kategóriu filtrov, prejdite na odkaz {settings_link}.", - "filter_modal.added.review_and_configure_title": "Nastavenie triedenia", - "filter_modal.added.settings_link": "stránka s nastaveniami", + "filter_modal.added.review_and_configure_title": "Nastavenia filtrov", + "filter_modal.added.settings_link": "stránka nastavení", "filter_modal.added.short_explanation": "Tento príspevok bol pridaný do nasledujúcej kategórie filtrov: {title}.", - "filter_modal.added.title": "Triedenie pridané!", + "filter_modal.added.title": "Filter bol pridaný.", "filter_modal.select_filter.context_mismatch": "sa na tento kontext nevzťahuje", - "filter_modal.select_filter.expired": "vypršalo", + "filter_modal.select_filter.expired": "vypršal", "filter_modal.select_filter.prompt_new": "Nová kategória: {name}", - "filter_modal.select_filter.search": "Vyhľadávať alebo vytvoriť", + "filter_modal.select_filter.search": "Vyhľadať alebo vytvoriť", "filter_modal.select_filter.subtitle": "Použite existujúcu kategóriu alebo vytvorte novú", "filter_modal.select_filter.title": "Filtrovanie tohto príspevku", "filter_modal.title.status": "Filtrovanie príspevku", - "firehose.all": "Všetky", + "firehose.all": "Všetko", "firehose.local": "Tento server", - "firehose.remote": "Iné servery", - "follow_request.authorize": "Povoľ prístup", - "follow_request.reject": "Odmietni", - "follow_requests.unlocked_explanation": "Síce Váš učet nie je uzamknutý, ale {domain} tím si myslel že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.", - "follow_suggestions.curated_suggestion": "Staff pick", - "follow_suggestions.dismiss": "Znovu nezobrazuj", - "follow_suggestions.personalized_suggestion": "Prispôsobené odporúčania", - "follow_suggestions.popular_suggestion": "Populárne návrhy", - "follow_suggestions.view_all": "Zobraz všetky", - "follow_suggestions.who_to_follow": "Koho nasledovať", - "followed_tags": "Nasledované haštagy", - "footer.about": "O", + "firehose.remote": "Ostatné servery", + "follow_request.authorize": "Povoliť", + "follow_request.reject": "Zamietnuť", + "follow_requests.unlocked_explanation": "Aj keď váš účet nie je uzamknutý, tím domény {domain} si myslel, že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.", + "follow_suggestions.curated_suggestion": "Výber redakcie", + "follow_suggestions.dismiss": "Znova nezobrazovať", + "follow_suggestions.hints.featured": "Tento profil bol ručne zvolený tímom domény {domain}.", + "follow_suggestions.hints.friends_of_friends": "Tento profil je obľúbený medzi účtami, ktoré sledujete.", + "follow_suggestions.hints.most_followed": "Tento profil patrí na doméne {domain} medzi najsledovanejšie.", + "follow_suggestions.hints.most_interactions": "Tento profil má v poslednej dobe na doméne {domain} veľa interakcií.", + "follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilom, ktoré ste nedávno začali sledovať.", + "follow_suggestions.personalized_suggestion": "Prispôsobený návrh", + "follow_suggestions.popular_suggestion": "Obľúbený návrh", + "follow_suggestions.view_all": "Zobraziť všetky", + "follow_suggestions.who_to_follow": "Koho sledovať", + "followed_tags": "Sledované hashtagy", + "footer.about": "Viac informácií", "footer.directory": "Adresár profilov", "footer.get_app": "Stiahnuť aplikáciu", - "footer.invite": "Pozvi ľudí", + "footer.invite": "Pozvať ľudí", "footer.keyboard_shortcuts": "Klávesové skratky", - "footer.privacy_policy": "Zásady súkromia", + "footer.privacy_policy": "Pravidlá ochrany súkromia", "footer.source_code": "Zobraziť zdrojový kód", "footer.status": "Stav", "generic.saved": "Uložené", - "getting_started.heading": "Začni tu", + "getting_started.heading": "Začíname", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "alebo {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", "hashtag.column_settings.select.no_options_message": "Žiadne návrhy neboli nájdené", - "hashtag.column_settings.select.placeholder": "Zadaj haštagy…", + "hashtag.column_settings.select.placeholder": "Zadajte hashtagy…", "hashtag.column_settings.tag_mode.all": "Všetky tieto", - "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", + "hashtag.column_settings.tag_mode.any": "Ľubovoľné z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", - "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník} other {{counter} účastníci}}", + "hashtag.column_settings.tag_toggle": "Vložte dodatočné hashtagy pre tento stĺpec", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} prispievateľ} few {{counter} prispievatelia} many {{counter} prispievateľov} other {{counter} prispievateľov}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes", - "hashtag.follow": "Sleduj haštag", - "hashtag.unfollow": "Nesleduj haštag", - "hashtags.and_other": "…a {count, plural, one {} few {# ďalšie} many {# ďalších}other {# ďalších}}", + "hashtag.follow": "Sledovať hashtag", + "hashtag.unfollow": "Prestať sledovať hashtag", + "hashtags.and_other": "…a {count, plural, other {# ďalších}}", "home.column_settings.basic": "Základné", - "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", - "home.column_settings.show_replies": "Ukáž odpovede", - "home.hide_announcements": "Skry oznámenia", - "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", - "home.pending_critical_update.link": "Pozri aktualizácie", - "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia!", - "home.show_announcements": "Ukáž oznámenia", - "interaction_modal.description.favourite": "S účtom na Mastodone si môžeš tento príspevok obľúbiť, aby si dal/a autorovi vedieť, že ho oceňuješ, a uložiť si ho na neskôr.", - "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.", - "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.", - "interaction_modal.description.reply": "Ak máte účet na Mastodone, môžete reagovať na tento príspevok.", + "home.column_settings.show_reblogs": "Zobraziť zdieľania", + "home.column_settings.show_replies": "Zobraziť odpovede", + "home.hide_announcements": "Skryť oznámenia", + "home.pending_critical_update.body": "Prosíme, aktualizujte si svoj Mastodon server, hneď ako to bude možné.", + "home.pending_critical_update.link": "Zobraziť aktualizácie", + "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia.", + "home.show_announcements": "Zobraziť oznámenia", + "interaction_modal.description.favourite": "S účtom na Mastodone môžete tento príspevok ohviezdičkovať, tak dať autorovi vedieť, že sa vám páči, a uložiť si ho na neskôr.", + "interaction_modal.description.follow": "S účtom na Mastodone môžete {name} sledovať a vidieť ich príspevky vo svojom domovskom kanáli.", + "interaction_modal.description.reblog": "S účtom na Mastodone môžete tento príspevok zdeľať so svojimi sledovateľmi.", + "interaction_modal.description.reply": "S účtom na Mastodone môžete na tento príspevok odpovedať.", "interaction_modal.login.action": "Prejsť domov", - "interaction_modal.login.prompt": "Doména tvojho domovského servera, napr. mastodon.social", - "interaction_modal.no_account_yet": "Niesi na Mastodone?", + "interaction_modal.login.prompt": "Doména vášho domovského servera, napr. mastodon.social", + "interaction_modal.no_account_yet": "Nie ste na Mastodone?", "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", - "interaction_modal.sign_in": "Nie si prihláseý/á na tomto serveri. Kde je tvoj účet hostovaný?", - "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno! (napr. @Mastodon@mastodon.social)", - "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok", - "interaction_modal.title.follow": "Nasleduj {name}", - "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok", - "interaction_modal.title.reply": "Odpovedz na {name}ov/in príspevok", - "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}}", - "keyboard_shortcuts.back": "dostať sa naspäť", - "keyboard_shortcuts.blocked": "otvor zoznam blokovaných užívateľov", - "keyboard_shortcuts.boost": "Vyzdvihni príspevok", - "keyboard_shortcuts.column": "zameraj sa na príspevok v jednom zo stĺpcov", - "keyboard_shortcuts.compose": "zameraj sa na písaciu plochu", + "interaction_modal.sign_in": "Na tomto serveri nie ste prihlásený. Kde je váš účet hostený?", + "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno (napr. @Mastodon@mastodon.social).", + "interaction_modal.title.favourite": "Ohviezdičkovať príspevok od {name}", + "interaction_modal.title.follow": "Sledovať {name}", + "interaction_modal.title.reblog": "Zdieľať príspevok od {name}", + "interaction_modal.title.reply": "Odpovedať na príspevok od {name}", + "intervals.full.days": "{number, plural, one {# deň} few {# dni} many {# dní} other {# dní}}", + "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodín} other {# hodín}}", + "intervals.full.minutes": "{number, plural, one {# minúta} few {# minúty} many {# minút} other {# minút}}", + "keyboard_shortcuts.back": "Ísť späť", + "keyboard_shortcuts.blocked": "Otvoriť zoznam blokovaných užívateľov", + "keyboard_shortcuts.boost": "Zdieľať príspevok", + "keyboard_shortcuts.column": "Prejsť na stĺpec", + "keyboard_shortcuts.compose": "Prejsť na textové pole", "keyboard_shortcuts.description": "Popis", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "posunúť sa dole v zozname", - "keyboard_shortcuts.enter": "Otvor príspevok", - "keyboard_shortcuts.favourite": "Obľúb si príspevok", - "keyboard_shortcuts.favourites": "Otvor zoznam obľúbených", - "keyboard_shortcuts.federated": "otvor federovanú časovú os", + "keyboard_shortcuts.direct": "Otvoriť stĺpec súkromných označení", + "keyboard_shortcuts.down": "Posunúť sa dole v zozname", + "keyboard_shortcuts.enter": "Otvoriť príspevok", + "keyboard_shortcuts.favourite": "Ohviezdičkovať príspevok", + "keyboard_shortcuts.favourites": "Otvoriť zoznam ohviezdičkovaných", + "keyboard_shortcuts.federated": "Otvoriť federovanú časovú os", "keyboard_shortcuts.heading": "Klávesové skratky", - "keyboard_shortcuts.home": "otvor domácu časovú os", - "keyboard_shortcuts.hotkey": "Klávesa", - "keyboard_shortcuts.legend": "zobraz túto legendu", - "keyboard_shortcuts.local": "otvor miestnu časovú os", - "keyboard_shortcuts.mention": "spomeň autora", - "keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov", - "keyboard_shortcuts.my_profile": "otvor svoj profil", - "keyboard_shortcuts.notifications": "Otvor panel oznámení", - "keyboard_shortcuts.open_media": "Otvorenie médií", - "keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov", - "keyboard_shortcuts.profile": "otvor autorov profil", - "keyboard_shortcuts.reply": "odpovedať", - "keyboard_shortcuts.requests": "otvor zoznam žiadostí o sledovanie", - "keyboard_shortcuts.search": "zameraj sa na vyhľadávanie", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "otvor panel ''začíname''", - "keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW", - "keyboard_shortcuts.toggle_sensitivity": "Ukáž/skry médiá", - "keyboard_shortcuts.toot": "začni úplne nový príspevok", - "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", - "keyboard_shortcuts.up": "posuň sa vyššie v zozname", - "lightbox.close": "Zatvor", + "keyboard_shortcuts.home": "Otvoriť domácu časovú os", + "keyboard_shortcuts.hotkey": "Kláves", + "keyboard_shortcuts.legend": "Zobraziť túto legendu", + "keyboard_shortcuts.local": "Otvoriť miestnu časovú os", + "keyboard_shortcuts.mention": "Označiť autora", + "keyboard_shortcuts.muted": "Otvoriť zoznam stíšených užívateľov", + "keyboard_shortcuts.my_profile": "Otvoriť svoj profil", + "keyboard_shortcuts.notifications": "Otvoriť panel upozornení", + "keyboard_shortcuts.open_media": "Otvoriť médiá", + "keyboard_shortcuts.pinned": "Otvoriť zoznam pripnutých príspevkov", + "keyboard_shortcuts.profile": "Otvoriť autorov profil", + "keyboard_shortcuts.reply": "Odpovedať na príspevok", + "keyboard_shortcuts.requests": "Otvoriť zoznam žiadostí o sledovanie", + "keyboard_shortcuts.search": "Prejsť na vyhľadávacie pole", + "keyboard_shortcuts.spoilers": "Zobraziť/skryť pole varovania o obsahu", + "keyboard_shortcuts.start": "Otvoriť panel „Začíname“", + "keyboard_shortcuts.toggle_hidden": "Zobraziť/skryť text za varovaním o obsahu", + "keyboard_shortcuts.toggle_sensitivity": "Zobraziť/skryť médiá", + "keyboard_shortcuts.toot": "Vytvoriť nový príspevok", + "keyboard_shortcuts.unfocus": "Odísť z textového poľa", + "keyboard_shortcuts.up": "Posunúť sa vyššie v zozname", + "lightbox.close": "Zatvoriť", "lightbox.compress": "Zmenšiť náhľad obrázku", "lightbox.expand": "Rozšíriť náhľad obrázku", - "lightbox.next": "Ďalšie", - "lightbox.previous": "Predchádzajúci", - "limited_account_hint.action": "Ukáž profil aj tak", - "limited_account_hint.title": "Tento profil bol skrytý moderátormi stránky {domain}.", - "link_preview.author": "Podľa {name}", - "lists.account.add": "Pridaj do zoznamu", - "lists.account.remove": "Odober zo zoznamu", - "lists.delete": "Vymaž list", - "lists.edit": "Uprav zoznam", - "lists.edit.submit": "Zmeň názov", + "lightbox.next": "Ďalej", + "lightbox.previous": "Späť", + "limited_account_hint.action": "Aj tak zobraziť profil", + "limited_account_hint.title": "Tento profil bol skrytý správcami servera {domain}.", + "link_preview.author": "Autor: {name}", + "lists.account.add": "Pridať do zoznamu", + "lists.account.remove": "Odstrániť zo zoznamu", + "lists.delete": "Vymazať zoznam", + "lists.edit": "Upraviť zoznam", + "lists.edit.submit": "Zmeniť názov", "lists.exclusive": "Skryť tieto príspevky z domovskej stránky", - "lists.new.create": "Pridaj zoznam", + "lists.new.create": "Pridať zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", - "lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ", - "lists.replies_policy.list": "Členovia na zozname", - "lists.replies_policy.none": "Nikto", - "lists.replies_policy.title": "Ukáž odpovede na:", - "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", - "lists.subheading": "Tvoje zoznamy", - "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}", - "loading_indicator.label": "Načítam…", - "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", - "moved_to_account_banner.text": "Vaše konto {disabledAccount} je momentálne zablokované, pretože ste sa presunuli na {movedToAccount}.", + "lists.replies_policy.followed": "Akémukoľvek sledovanému účtu", + "lists.replies_policy.list": "Členom zoznamu", + "lists.replies_policy.none": "Nikomu", + "lists.replies_policy.title": "Zobraziť odpovede:", + "lists.search": "Vyhľadávať medzi účtami, ktoré sledujete", + "lists.subheading": "Vaše zoznamy", + "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}", + "loading_indicator.label": "Načítavanie…", + "media_gallery.toggle_visible": "{number, plural, one {Skryť obrázok} other {Skryť obrázky}}", + "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný, pretože ste sa presunuli na {movedToAccount}.", "mute_modal.duration": "Trvanie", - "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", + "mute_modal.hide_notifications": "Skryť upozornenia od tohto účtu?", "mute_modal.indefinite": "Bez obmedzenia", "navigation_bar.about": "O tomto serveri", - "navigation_bar.advanced_interface": "Otvor v pokročilom webovom rozhraní", - "navigation_bar.blocks": "Blokovaní užívatelia", + "navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní", + "navigation_bar.blocks": "Blokované účty", "navigation_bar.bookmarks": "Záložky", "navigation_bar.community_timeline": "Miestna časová os", - "navigation_bar.compose": "Napíš nový príspevok", - "navigation_bar.direct": "Súkromné spomenutia", - "navigation_bar.discover": "Objavuj", - "navigation_bar.domain_blocks": "Skryté domény", - "navigation_bar.explore": "Objavuj", - "navigation_bar.favourites": "Obľúbené", + "navigation_bar.compose": "Vytvoriť nový príspevok", + "navigation_bar.direct": "Súkromné označenia", + "navigation_bar.discover": "Objavovanie", + "navigation_bar.domain_blocks": "Blokované domény", + "navigation_bar.explore": "Objavovať", + "navigation_bar.favourites": "Ohviezdičkované", "navigation_bar.filters": "Filtrované slová", "navigation_bar.follow_requests": "Žiadosti o sledovanie", - "navigation_bar.followed_tags": "Nasledované haštagy", - "navigation_bar.follows_and_followers": "Sledovania a následovatelia", + "navigation_bar.followed_tags": "Sledované hashtagy", + "navigation_bar.follows_and_followers": "Sledovania a sledovatelia", "navigation_bar.lists": "Zoznamy", - "navigation_bar.logout": "Odhlás sa", - "navigation_bar.mutes": "Stíšení užívatelia", - "navigation_bar.opened_in_classic_interface": "Príspevky, účty a iné špeciálne stránky, sú z východiska otvárané v klasickom webovom rozhraní.", + "navigation_bar.logout": "Odhlásiť sa", + "navigation_bar.mutes": "Stíšené účty", + "navigation_bar.opened_in_classic_interface": "Príspevky, účty a iné špeciálne stránky sú predvolene otvárané v klasickom webovom rozhraní.", "navigation_bar.personal": "Osobné", "navigation_bar.pins": "Pripnuté príspevky", "navigation_bar.preferences": "Nastavenia", "navigation_bar.public_timeline": "Federovaná časová os", - "navigation_bar.search": "Hľadaj", - "navigation_bar.security": "Zabezbečenie", - "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, musíte sa prihlásiť.", - "notification.admin.report": "{name} nahlásil/a {target}", - "notification.admin.sign_up": "{name} sa zaregistroval/a", - "notification.favourite": "{name} si obľúbil/a tvoj príspevok", - "notification.follow": "{name} ťa začal/a nasledovať", - "notification.follow_request": "{name} ťa žiada nasledovať", - "notification.mention": "{name} ťa spomenul/a", - "notification.own_poll": "Tvoja anketa sa skončila", - "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", - "notification.reblog": "{name} zdieľal/a tvoj príspevok", - "notification.status": "{name} práve uverejnil/a", - "notification.update": "{name} upravil/a príspevok", - "notifications.clear": "Vyčisti oznámenia", - "notifications.clear_confirmation": "Naozaj chceš nenávratne odstrániť všetky tvoje oznámenia?", + "navigation_bar.search": "Hľadať", + "navigation_bar.security": "Zabezpečenie", + "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, prihláste sa.", + "notification.admin.report": "Účet {name} nahlásil {target}", + "notification.admin.sign_up": "Nová registráciu účtu {name}", + "notification.favourite": "{name} hviezdičkuje váš príspevok", + "notification.follow": "{name} vás sleduje", + "notification.follow_request": "{name} vás žiada sledovať", + "notification.mention": "{name} vás spomína", + "notification.own_poll": "Vaša anketa sa skončila", + "notification.poll": "Anketa, v ktorej ste hlasovali, sa skončila", + "notification.reblog": "{name} zdieľa váš príspevok", + "notification.status": "{name} uverejňuje niečo nové", + "notification.update": "{name} upravuje príspevok", + "notifications.clear": "Vyčistiť upozornenia", + "notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?", "notifications.column_settings.admin.report": "Nové hlásenia:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", - "notifications.column_settings.alert": "Oznámenia na ploche", - "notifications.column_settings.favourite": "Obľúbené:", - "notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie", - "notifications.column_settings.filter_bar.category": "Rýchle triedenie", - "notifications.column_settings.filter_bar.show_bar": "Ukáž filtrovací panel", - "notifications.column_settings.follow": "Noví sledujúci:", - "notifications.column_settings.follow_request": "Nové žiadosti o následovanie:", - "notifications.column_settings.mention": "Zmienenia:", - "notifications.column_settings.poll": "Výsledky ankiet:", - "notifications.column_settings.push": "Push notifikácie", - "notifications.column_settings.reblog": "Vyzdvihnutia:", - "notifications.column_settings.show": "Ukáž v stĺpci", - "notifications.column_settings.sound": "Prehraj zvuk", + "notifications.column_settings.alert": "Upozornenia na ploche", + "notifications.column_settings.favourite": "Ohviezdičkované:", + "notifications.column_settings.filter_bar.advanced": "Zobraziť všetky kategórie", + "notifications.column_settings.filter_bar.category": "Rýchly filter", + "notifications.column_settings.filter_bar.show_bar": "Zobraziť filter", + "notifications.column_settings.follow": "Nové sledovania od:", + "notifications.column_settings.follow_request": "Nové žiadosti o sledovanie od:", + "notifications.column_settings.mention": "Označenia:", + "notifications.column_settings.poll": "Výsledky ankety:", + "notifications.column_settings.push": "Upozornenia push", + "notifications.column_settings.reblog": "Zdieľania:", + "notifications.column_settings.show": "Zobraziť v stĺpci", + "notifications.column_settings.sound": "Prehrať zvuk", "notifications.column_settings.status": "Nové príspevky:", - "notifications.column_settings.unread_notifications.category": "Neprečítané oznámenia", - "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oznámenia", + "notifications.column_settings.unread_notifications.category": "Neprečítané upozornenia", + "notifications.column_settings.unread_notifications.highlight": "Zvýrazniť neprečítané upozornenia", "notifications.column_settings.update": "Úpravy:", "notifications.filter.all": "Všetky", - "notifications.filter.boosts": "Vyzdvihnutia", - "notifications.filter.favourites": "Obľúbené", + "notifications.filter.boosts": "Zdieľania", + "notifications.filter.favourites": "Ohviezdičkovania", "notifications.filter.follows": "Sledovania", - "notifications.filter.mentions": "Iba spomenutia", + "notifications.filter.mentions": "Označenia", "notifications.filter.polls": "Výsledky ankiet", - "notifications.filter.statuses": "Aktualizácie od ľudí, ktorých nasleduješ", - "notifications.grant_permission": "Udeľ povolenie.", - "notifications.group": "{count} Oznámení", - "notifications.mark_as_read": "Označ každé oznámenie za prečítané", - "notifications.permission_denied": "Oznámenia na ploche sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", - "notifications.permission_denied_alert": "Oznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", - "notifications.permission_required": "Oznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", - "notifications_permission_banner.enable": "Povoliť oznámenia na ploche", + "notifications.filter.statuses": "Novinky od ľudí, ktorých sledujete", + "notifications.grant_permission": "Udeliť povolenie.", + "notifications.group": "{count} upozornení", + "notifications.mark_as_read": "Označiť všetky upozornenia ako prečítané", + "notifications.permission_denied": "Upozornenia na ploche sú nedostupné pre už skôr zamietnutú požiadavku prehliadača", + "notifications.permission_denied_alert": "Upozornenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", + "notifications.permission_required": "Upozornenia na ploche sú nedostupné, pretože neboli udelené potrebné povolenia.", + "notifications_permission_banner.enable": "Povoliť upozornenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", - "notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec", - "onboarding.action.back": "Vziať ma späť", - "onboarding.actions.back": "Vziať ma späť", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.compose.template": "Nazdar #Mastodon!", + "notifications_permission_banner.title": "Nenechajte si nič ujsť", + "onboarding.action.back": "Ísť späť", + "onboarding.actions.back": "Ísť späť", + "onboarding.actions.go_to_explore": "Prejsť na populárne", + "onboarding.actions.go_to_home": "Prejsť na domovský kanál", + "onboarding.compose.template": "Ahoj, #Mastodon!", "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.profile.discoverable": "Urob môj profil objaviteľný", - "onboarding.profile.display_name": "Zobrazované meno", - "onboarding.profile.display_name_hint": "Tvoje plné meno, alebo tvoje zábavné meno…", - "onboarding.profile.lead": "Toto môžeš vždy dokončiť neskôr v nastaveniach, kde je dostupných ešte viac volieb na prispôsobenie.", - "onboarding.profile.note": "O tebe", - "onboarding.profile.note_hint": "Môžeš @spomenúť iných ľudí, alebo #haštagy…", - "onboarding.profile.save_and_continue": "Ulož a pokračuj", + "onboarding.follows.lead": "Váš domovský kanál je váš hlavný spôsob objavovania Mastodonu. Čím viac ľudí sledujete, tým bude aktívnejší a zaujímavejší. Tu je pár tipov na začiatok:", + "onboarding.follows.title": "Prispôsobte si svoj domovský kanál", + "onboarding.profile.discoverable": "Nastavte svoj profil ako objaviteľný", + "onboarding.profile.discoverable_hint": "Keď si na Mastodone zapnete objaviteľnosť, vaše príspevky sa môžu zobrazovať vo výsledkoch vyhľadávania a v populárnych. Váš profil môže byť navyše navrhovaný ľuďom, s ktorými máte podobné záujmy.", + "onboarding.profile.display_name": "Používateľské meno", + "onboarding.profile.display_name_hint": "Vaše celé meno alebo pokojne aj vtipná prezývka…", + "onboarding.profile.lead": "Vždy si to môžete doplniť neskôr v nastaveniach, kde nájdete aj ďalšie možnosti prispôsobenia.", + "onboarding.profile.note": "Niečo o vás", + "onboarding.profile.note_hint": "Môžete @označiť iných ľudí alebo #hashtagy…", + "onboarding.profile.save_and_continue": "Uložiť a pokračovať", "onboarding.profile.title": "Nastavenie profilu", - "onboarding.profile.upload_avatar": "Nahraj profilový obrázok", - "onboarding.profile.upload_header": "Nahraj profilové záhlavie", - "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", - "onboarding.share.message": "Na Mastodone som {username}. Príď ma nasledovať na {url}", + "onboarding.profile.upload_avatar": "Nahrať profilový obrázok", + "onboarding.profile.upload_header": "Nahrať obrázok záhlavia profilu", + "onboarding.share.lead": "Dajte ostatným vedieť, ako vás môžu na Mastodone nájsť.", + "onboarding.share.message": "Na #Mastodon⁠e som {username}. Príď ma sledovať na {url}!", "onboarding.share.next_steps": "Ďalšie možné kroky:", - "onboarding.share.title": "Zdieľaj svoj profil", - "onboarding.start.lead": "Teraz si súčasťou Mastodonu, unikátnej, decentralizovanej sociálnej platformy, kde ty, nie algoritmus, spravuješ svoj vlastný zážitok. Poďme ťa naštartovať na tomto novom sociálnom pomedzí:", - "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.share.title": "Zdieľajte svoj profil", + "onboarding.start.lead": "Teraz ste súčasťou Mastodonu, jedinečnej decentralizovanej sociálnej platformy, kde o všetkom rozhodujete vy, nie algoritmus. Poďme sa pozrieť, ako môžete začať:", + "onboarding.start.skip": "Nepotrebujete pomoc so začiatkom?", "onboarding.start.title": "Zvládli ste to!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Vytvor svoj prvý príspevok", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.steps.follow_people.body": "Mastodon je vybudovaný okolo sledovania zaujímavých ľudí.", + "onboarding.steps.follow_people.title": "Prispôsobte si svoj domovský kanál", + "onboarding.steps.publish_status.body": "Predstavte sa svetu textom, fotkami, videami či anketami {emoji}", + "onboarding.steps.publish_status.title": "Vytvorte svoj prvý príspevok", + "onboarding.steps.setup_profile.body": "Plnší profil vám pomôže mať viac interakcií.", + "onboarding.steps.setup_profile.title": "Upravte si profil", + "onboarding.steps.share_profile.body": "Dajte svojej partii vedieť, ako vás môžu na Mastodone nájsť.", + "onboarding.steps.share_profile.title": "Zdieľajte svoj profil na Mastodone", "onboarding.tips.2fa": "Vedeli ste? Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!", "onboarding.tips.accounts_from_other_servers": "Vedeli ste? Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!", - "onboarding.tips.migration": "Vedeli ste? Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostovať svoj vlastný server!", - "onboarding.tips.verification": "Vedeli ste? Svoj účet môžete overiť umiestnením odkazu na svoj profil Mastodon na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!", + "onboarding.tips.migration": "Vedeli ste? Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostiť svoj vlastný server!", + "onboarding.tips.verification": "Vedeli ste? Svoj účet môžete overiť umiestnením odkazu na svoj profil na Mastodone na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!", "password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla", "password_confirmation.mismatching": "Zadané heslá sa nezhodujú", "picture_in_picture.restore": "Vrátiť späť", "poll.closed": "Uzatvorená", "poll.refresh": "Obnoviť", - "poll.reveal": "Pozri výsledky", - "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}", - "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}", - "poll.vote": "Hlasuj", - "poll.voted": "Hlasoval/a si za túto voľbu", - "poll.votes": "{votes, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasy}}", - "poll_button.add_poll": "Pridaj anketu", - "poll_button.remove_poll": "Odstráň anketu", - "privacy.change": "Uprav súkromie príspevku", + "poll.reveal": "Zobraziť výsledky", + "poll.total_people": "{count, plural, one {# človek} few {# ľudia} many {# ľudí} other {# ľudí}}", + "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasov} other {# hlasov}}", + "poll.vote": "Hlasovať", + "poll.voted": "Hlasovali ste za túto voľbu", + "poll.votes": "{votes, plural, one {# hlas} few {# hlasy} many {# hlasov} other {# hlasov}}", + "poll_button.add_poll": "Pridať anketu", + "poll_button.remove_poll": "Odstrániť anketu", + "privacy.change": "Zmeniť nastavenia súkromia príspevku", "privacy.direct.long": "Všetci spomenutí v príspevku", "privacy.direct.short": "Konkrétni ľudia", - "privacy.private.long": "Iba tvoji nasledovatelia", + "privacy.private.long": "Iba vaši sledovatelia", "privacy.private.short": "Sledovatelia", - "privacy.public.long": "Ktokoľvek na, aj mimo Mastodonu", + "privacy.public.long": "Ktokoľvek na Mastodone aj mimo neho", "privacy.public.short": "Verejné", - "privacy.unlisted.short": "Verejný v tichosti", + "privacy.unlisted.additional": "Presne ako verejné, s tým rozdielom, že sa príspevok nezobrazí v živých kanáloch, hashtagoch, objavovaní či vo vyhľadávaní na Mastodone, aj keď máte pre účet objaviteľnosť zapnutú.", + "privacy.unlisted.long": "Menej algoritmických výmyslov", + "privacy.unlisted.short": "Tiché verejné", "privacy_policy.last_updated": "Posledná úprava {date}", - "privacy_policy.title": "Zásady súkromia", + "privacy_policy.title": "Pravidlá ochrany súkromia", "recommended": "Odporúčané", "refresh": "Obnoviť", - "regeneration_indicator.label": "Načítava sa…", - "regeneration_indicator.sublabel": "Tvoja domovská nástenka sa pripravuje!", - "relative_time.days": "{number}dní", - "relative_time.full.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}", - "relative_time.full.hours": "Pred {number, plural, one {# hodinou} few {# hodinami} many {# hodinami} other {# hodinami}}", - "relative_time.full.just_now": "práve teraz", - "relative_time.full.minutes": "Pred {number, plural, one {# minútou} few {# minútami} many {# minútami} other {# minútami}}", - "relative_time.full.seconds": "Pred {number, plural, one {# sekundou} few {# sekundami} many {# sekundami} other {# sekundami}}", - "relative_time.hours": "{number}hod", - "relative_time.just_now": "teraz", - "relative_time.minutes": "{number}min", - "relative_time.seconds": "{number}sek", - "relative_time.today": "dnes", + "regeneration_indicator.label": "Načítavanie…", + "regeneration_indicator.sublabel": "Váš domovský kanál sa pripravuje.", + "relative_time.days": "{number} dní", + "relative_time.full.days": "Pred {number, plural, one {# dňom} other {# dňami}}", + "relative_time.full.hours": "Pred {number, plural, one {# hodinou} other {# hodinami}}", + "relative_time.full.just_now": "Práve teraz", + "relative_time.full.minutes": "Pred {number, plural, one {# minútou} other {# minútami}}", + "relative_time.full.seconds": "Pred {number, plural, one {# sekundou} other {# sekundami}}", + "relative_time.hours": "{number} hod", + "relative_time.just_now": "Teraz", + "relative_time.minutes": "{number} min", + "relative_time.seconds": "{number} sek", + "relative_time.today": "Dnes", + "reply_indicator.attachments": "{count, plural, one {# príloha} few {# prílohy} other {# príloh}}", "reply_indicator.cancel": "Zrušiť", "reply_indicator.poll": "Anketa", - "report.block": "Blokuj", + "report.block": "Blokovať", "report.block_explanation": "Ich príspevky neuvidíte. Nebudú môcť vidieť vaše príspevky ani vás sledovať. Budú môcť zistiť, že sú zablokovaní.", - "report.categories.legal": "Právne ujednania", + "report.categories.legal": "Právne", "report.categories.other": "Ostatné", "report.categories.spam": "Spam", "report.categories.violation": "Obsah porušuje jedno alebo viacero pravidiel servera", - "report.category.subtitle": "Vyberte si najlepšiu voľbu", - "report.category.title": "Povedzte nám, čo sa deje s týmto {type}", - "report.category.title_account": "profilom", - "report.category.title_status": "príspevkom", + "report.category.subtitle": "Vyberte najlepšiu voľbu", + "report.category.title": "Povedzte nám, čo je zlé na tomto {type}", + "report.category.title_account": "profile", + "report.category.title_status": "príspevku", "report.close": "Hotovo", "report.comment.title": "Je ešte niečo, čo by sme podľa vás mali vedieť?", - "report.forward": "Posuň ku {target}", - "report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu hlásenia aj tam?", - "report.mute": "Nevšímaj si", - "report.mute_explanation": "Ich príspevky neuvidíte. Stále vás môžu sledovať a vidieť vaše príspevky a nebudú vedieť, že sú stlmené.", + "report.forward": "Preposlať na {target}", + "report.forward_hint": "Tento účet je z iného serveru. Chcete poslať anonymnú kópiu hlásenia aj tam?", + "report.mute": "Stíšiť", + "report.mute_explanation": "Ich príspevky neuvidíte. Stále vás môžu sledovať a vidieť vaše príspevky a nebudú vedieť, že ste ich stíšili.", "report.next": "Ďalej", "report.placeholder": "Ďalšie komentáre", "report.reasons.dislike": "Nepáči sa mi", - "report.reasons.dislike_description": "Nieje to niečo, čo chceš vidieť", - "report.reasons.legal": "Je to nelegálne", + "report.reasons.dislike_description": "Nie je to niečo, čo chcete vidieť", + "report.reasons.legal": "Je nelegálny", "report.reasons.legal_description": "Domnievate sa, že porušuje zákony vašej krajiny alebo krajiny servera", - "report.reasons.other": "Je to niečo iné", + "report.reasons.other": "Ide o niečo iné", "report.reasons.other_description": "Tento problém nepatrí do iných kategórií", "report.reasons.spam": "Je to spam", "report.reasons.spam_description": "Škodlivé odkazy, falošné zapojenie alebo opakované odpovede", "report.reasons.violation": "Porušuje pravidlá servera", "report.reasons.violation_description": "Ste si vedomí, že porušuje špecifické pravidlá", - "report.rules.subtitle": "Vyberte všetky, ktoré sa vzťahujú", - "report.rules.title": "Ktoré pravidlá sa porušujú?", - "report.statuses.subtitle": "Vyberte všetky, ktoré sa vzťahujú", + "report.rules.subtitle": "Vyberte všetky príslušné možnosti", + "report.rules.title": "Ktoré pravidlá sú porušované?", + "report.statuses.subtitle": "Vyberte všetky príslušné možnosti", "report.statuses.title": "Sú k dispozícii príspevky podporujúce toto hlásenie?", - "report.submit": "Odošli", - "report.target": "Nahlás {target}", - "report.thanks.take_action": "Tu sú tvoje možnosti kontrolovať, čo vidíš na Mastodone:", - "report.thanks.take_action_actionable": "Kým to vyhodnotíme, môžeš podniknúť kroky voči @{name}:", - "report.thanks.title": "Nechceš to vidieť?", - "report.thanks.title_actionable": "Vďaka za nahlásenie, pozrieme sa na to.", - "report.unfollow": "Nesleduj @{name}", - "report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, zrušte jeho sledovanie.", - "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", - "report_notification.categories.legal": "Právne ujednania", + "report.submit": "Odoslať", + "report.target": "Nahlásiť {target}", + "report.thanks.take_action": "Tu sú vaše možnosti kontrolovať to, čo vidíte na Mastodone:", + "report.thanks.take_action_actionable": "Kým to vyhodnotíme, môžete podniknúť kroky voči @{name}:", + "report.thanks.title": "Nechcete to vidieť?", + "report.thanks.title_actionable": "Ďakujeme za nahlásenie, pozrieme sa na to.", + "report.unfollow": "Prestať sledovať @{name}", + "report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, prestaňte ho sledovať.", + "report_notification.attached_statuses": "{count, plural, one {{count} príspevok} few {{count} príspevky} other {{count} príspevkov}} ako príloha", + "report_notification.categories.legal": "Právne", "report_notification.categories.other": "Ostatné", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Porušenie pravidla", - "report_notification.open": "Otvor hlásenie", + "report_notification.open": "Otvoriť hlásenie", "search.no_recent_searches": "Žiadne nedávne vyhľadávania", - "search.placeholder": "Hľadaj", + "search.placeholder": "Hľadať", "search.quick_action.account_search": "Profily zodpovedajúce {x}", - "search.quick_action.go_to_account": "Prejdi na profil {x}", - "search.quick_action.go_to_hashtag": "Choď na haštag {x}", - "search.quick_action.open_url": "Otvor URL v rámci Mastodonu", + "search.quick_action.go_to_account": "Prejsť na profil {x}", + "search.quick_action.go_to_hashtag": "Prejsť na hashtag {x}", + "search.quick_action.open_url": "Otvoriť URL v rámci Mastodonu", "search.quick_action.status_search": "Príspevky zodpovedajúce {x}", - "search.search_or_paste": "Hľadaj, alebo vlož URL adresu", + "search.search_or_paste": "Hľadať alebo vložiť adresu URL", "search_popout.full_text_search_disabled_message": "Nie je k dispozícii v doméne {domain}.", - "search_popout.full_text_search_logged_out_message": "Dostupné iba keď si prihlásený/á.", - "search_popout.language_code": "ISO kód jazyka", + "search_popout.full_text_search_logged_out_message": "Dostupné iba po prihlásení.", + "search_popout.language_code": "Kód jazyka ISO", "search_popout.options": "Možnosti vyhľadávania", "search_popout.quick_actions": "Rýchle akcie", "search_popout.recent": "Nedávne vyhľadávania", - "search_popout.specific_date": "presný dátum", - "search_popout.user": "užívateľ", + "search_popout.specific_date": "Presný dátum", + "search_popout.user": "Účet", "search_results.accounts": "Profily", "search_results.all": "Všetky", - "search_results.hashtags": "Haštagy", - "search_results.nothing_found": "Pre tieto výrazy nemožno nič nájsť", - "search_results.see_all": "Ukáž všetky", + "search_results.hashtags": "Hashtagy", + "search_results.nothing_found": "Pre tieto výrazy nebolo možné nič nájsť", + "search_results.see_all": "Zobraziť všetky", "search_results.statuses": "Príspevky", - "search_results.title": "Hľadaj {q}", - "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (Aktívni používatelia za mesiac)", - "server_banner.active_users": "aktívni užívatelia", - "server_banner.administered_by": "Správcom je:", + "search_results.title": "Hľadať {q}", + "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (aktívni používatelia za mesiac)", + "server_banner.active_users": "Aktívne účty", + "server_banner.administered_by": "Správa servera:", "server_banner.introduction": "{domain} je súčasťou decentralizovanej sociálnej siete využívajúcej technológiu {mastodon}.", - "server_banner.learn_more": "Zisti viac", - "server_banner.server_stats": "Serverové štatistiky:", - "sign_in_banner.create_account": "Vytvor účet", - "sign_in_banner.sign_in": "Prihlás sa", - "sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj", - "sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo haštagy, obľúbené veci, zdieľať ich a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.", - "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", - "status.admin_domain": "Otvor rozhranie na moderovanie domény {domain}", - "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", - "status.block": "Blokuj @{name}", - "status.bookmark": "Záložka", - "status.cancel_reblog_private": "Nezdieľaj", - "status.cannot_reblog": "Tento príspevok nemôže byť zdieľaný", - "status.copy": "Skopíruj odkaz na príspevok", - "status.delete": "Zmazať", + "server_banner.learn_more": "Viac informácií", + "server_banner.server_stats": "Štatistiky servera:", + "sign_in_banner.create_account": "Vytvoriť účet", + "sign_in_banner.sign_in": "Prihlásiť sa", + "sign_in_banner.sso_redirect": "Prihlásenie alebo registrácia", + "sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo hashtagy, hviezdičkovať, zdieľať a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.", + "status.admin_account": "Moderovať @{name}", + "status.admin_domain": "Moderovať {domain}", + "status.admin_status": "Moderovať príspevok", + "status.block": "Blokovať @{name}", + "status.bookmark": "Pridať záložku", + "status.cancel_reblog_private": "Zrušiť zdieľanie", + "status.cannot_reblog": "Tento príspevok nie je možné zdieľať", + "status.copy": "Kopírovať odkaz na príspevok", + "status.delete": "Vymazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", - "status.direct": "Spomeň @{name} v súkromí", - "status.direct_indicator": "Súkromné spomenutie", - "status.edit": "Uprav", + "status.direct": "Súkromne označiť @{name}", + "status.direct_indicator": "Súkromné označenie", + "status.edit": "Upraviť", "status.edited": "Upravené {date}", - "status.edited_x_times": "Upravený {count, plural, one {{count} krát} other {{count} krát}}", + "status.edited_x_times": "Upravený {count, plural, other {{count}×}}", "status.embed": "Vložiť", - "status.favourite": "Páči sa mi", + "status.favourite": "Ohviezdičkované", "status.filter": "Filtrovanie tohto príspevku", "status.filtered": "Filtrované", - "status.hide": "Skry príspevok", - "status.history.created": "{name} vytvoril/a {date}", - "status.history.edited": "{name} upravil/a {date}", - "status.load_more": "Ukáž viac", - "status.media.open": "Klikni pre otvorenie", - "status.media.show": "Kliknutím zobrazíš", + "status.hide": "Skryť príspevok", + "status.history.created": "Vytvorené účtom {name} {date}", + "status.history.edited": "Upravené účtom {name} {date}", + "status.load_more": "Načitať viac", + "status.media.open": "Otvoriť kliknutím", + "status.media.show": "Zobraziť kliknutím", "status.media_hidden": "Skryté médiá", - "status.mention": "Spomeň @{name}", + "status.mention": "Označiť @{name}", "status.more": "Viac", - "status.mute": "Nevšímaj si @{name}", - "status.mute_conversation": "Nevšímaj si konverzáciu", - "status.open": "Otvor tento príspevok", - "status.pin": "Pripni na profil", + "status.mute": "Stíšiť @{name}", + "status.mute_conversation": "Stíšiť konverzáciu", + "status.open": "Rozbaliť príspevok", + "status.pin": "Pripnúť na profil", "status.pinned": "Pripnutý príspevok", "status.read_more": "Čítaj ďalej", - "status.reblog": "Vyzdvihni", - "status.reblog_private": "Vyzdvihni k pôvodnému publiku", - "status.reblogged_by": "{name} vyzdvihli", - "status.reblogs.empty": "Nikto ešte nevyzdvihol tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.", - "status.redraft": "Vymaž a prepíš", - "status.remove_bookmark": "Odstráň záložku", + "status.reblog": "Zdieľať", + "status.reblog_private": "Zdieľať pôvodnému publiku", + "status.reblogged_by": "{name} zdieľa", + "status.reblogs.empty": "Nikto ešte tento príspevok nezdieľal. Keď tak niekto urobí, zobrazí sa to tu.", + "status.redraft": "Vymazať a prepísať", + "status.remove_bookmark": "Odstrániť záložku", "status.replied_to": "Odpoveď na {name}", "status.reply": "Odpovedať", - "status.replyAll": "Odpovedz na diskusiu", - "status.report": "Nahlás @{name}", - "status.sensitive_warning": "Chúlostivý obsah", - "status.share": "Zdieľaj", - "status.show_filter_reason": "Ukáž aj tak", - "status.show_less": "Zobraz menej", - "status.show_less_all": "Všetkým ukáž menej", - "status.show_more": "Ukáž viac", - "status.show_more_all": "Všetkým ukáž viac", - "status.show_original": "Ukáž pôvodný", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.replyAll": "Odpovedať vo vlákne", + "status.report": "Nahlásiť @{name}", + "status.sensitive_warning": "Citlivý obsah", + "status.share": "Zdieľať", + "status.show_filter_reason": "Aj tak zobraziť", + "status.show_less": "Zobraziť menej", + "status.show_less_all": "Všetkým zobraziť menej", + "status.show_more": "Zobraziť viac", + "status.show_more_all": "Všetkým zobraziť viac", + "status.show_original": "Zobraziť originál", + "status.title.with_attachments": "Účet {user} nahral {attachmentCount, plural, one {prílohu} few {{attachmentCount} prílohy} many {{attachmentCount} príloh} other {{attachmentCount} príloh}}", "status.translate": "Preložiť", "status.translated_from_with": "Preložené z {lang} pomocou {provider}", "status.uncached_media_warning": "Náhľad nie je k dispozícii", - "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", - "status.unpin": "Odopni z profilu", + "status.unmute_conversation": "Zrušiť stíšenie konverzácie", + "status.unpin": "Odopnúť z profilu", "subscribed_languages.lead": "Po zmene sa na vašej domovskej stránke a časovej osi zoznamu zobrazia iba príspevky vo vybraných jazykoch. Ak chcete dostávať príspevky vo všetkých jazykoch, vyberte možnosť žiadne.", - "subscribed_languages.save": "Ulož zmeny", + "subscribed_languages.save": "Uložiť zmeny", "subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}", "tabs_bar.home": "Domov", - "tabs_bar.notifications": "Oznámenia", - "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", - "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", - "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", + "tabs_bar.notifications": "Upozornenia", + "time_remaining.days": "Ostáva{number, plural, one { # deň} few {jú # dni} many { # dní} other { # dní}}", + "time_remaining.hours": "Ostáva{number, plural, one { # hodina} few {jú # hodiny} many { # hodín} other { # hodín}}", + "time_remaining.minutes": "Ostáva{number, plural, one { # minúta} few {jú # minúty} many { # minút} other { # minút}}", "time_remaining.moments": "Ostáva už iba chviľka", - "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}", - "timeline_hint.remote_resource_not_displayed": "{resource} z iných serverov sa nezobrazí.", + "time_remaining.seconds": "Ostáva{number, plural, one { # sekunda} few {jú # sekundy} many { # sekúnd} other { # sekúnd}}", + "timeline_hint.remote_resource_not_displayed": "{resource} z iných serverov sa nezobrazia.", "timeline_hint.resources.followers": "Sledujúci", - "timeline_hint.resources.follows": "Nasleduje", + "timeline_hint.resources.follows": "Sledovaní", "timeline_hint.resources.statuses": "Staršie príspevky", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} osoba} few {{counter} ľudia} many {{counter} ľudí} other {{counter} ľudí}} za posledn{days, plural, one {ý deň} few {é {days} dni} many {ých {days} dní} other {ých {days} dní}}", "trends.trending_now": "Teraz populárne", - "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", - "units.short.billion": "{count}mld.", - "units.short.million": "{count}mil.", - "units.short.thousand": "{count}tis.", - "upload_area.title": "Pretiahni a pusť pre nahratie", - "upload_button.label": "Pridaj obrázky, video, alebo zvukový súbor", + "ui.beforeunload": "Po opustení Mastodonu prídete o to, čo máte rozpísané.", + "units.short.billion": "{count} mld.", + "units.short.million": "{count} mil.", + "units.short.thousand": "{count} tis.", + "upload_area.title": "Nahráte potiahnutím a pustením", + "upload_button.label": "Pridať obrázky, video alebo zvukový súbor", "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.", - "upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.", - "upload_form.audio_description": "Popíš, pre ľudí so stratou sluchu", - "upload_form.description": "Opis pre slabo vidiacich", - "upload_form.edit": "Uprav", + "upload_error.poll": "Nahrávanie súborov nie je pri anketách možné.", + "upload_form.audio_description": "Popis pre sluchovo postihnutých ľudí", + "upload_form.description": "Popis pre zrakovo postihnutých ľudí", + "upload_form.edit": "Upraviť", "upload_form.thumbnail": "Zmeniť miniatúru", - "upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením", - "upload_modal.analyzing_picture": "Analyzujem obrázok…", - "upload_modal.apply": "Použi", - "upload_modal.applying": "Nastavovanie…", - "upload_modal.choose_image": "Vyber obrázok", - "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", - "upload_modal.detect_text": "Rozpoznaj text z obrázka", - "upload_modal.edit_media": "Uprav médiá", - "upload_modal.hint": "Klikni, alebo potiahni okruh ukážky pre zvolenie z ktorého východzieho bodu bude vždy v dohľadne na všetkých náhľadoch.", - "upload_modal.preparing_ocr": "Pripravujem OCR…", + "upload_form.video_description": "Popís pre ľudí so zrakovým alebo sluchovým postihnutím", + "upload_modal.analyzing_picture": "Prebieha analýza obrázka…", + "upload_modal.apply": "Použiť", + "upload_modal.applying": "Ukladanie…", + "upload_modal.choose_image": "Vybrať obrázok", + "upload_modal.description_placeholder": "Kde bolo, tam bolo, bol raz jeden Mastodon", + "upload_modal.detect_text": "Rozpoznať text z obrázka", + "upload_modal.edit_media": "Upraviť médiá", + "upload_modal.hint": "Kliknite alebo potiahnite kruh na ukážke, a tak vyberte bod, ktorý bude viditeľný na všetkých náhľadoch.", + "upload_modal.preparing_ocr": "Pripravujem rozpoznávanie…", "upload_modal.preview_label": "Náhľad ({ratio})", - "upload_progress.label": "Nahráva sa...", + "upload_progress.label": "Nahráva sa…", "upload_progress.processing": "Spracovávanie…", "username.taken": "Používateľské meno je obsadené. Skúste iné", - "video.close": "Zavri video", - "video.download": "Stiahni súbor", - "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", - "video.expand": "Zväčši video", - "video.fullscreen": "Zobraz na celú obrazovku", - "video.hide": "Skry video", - "video.mute": "Stlm zvuk", - "video.pause": "Pauza", - "video.play": "Prehraj", - "video.unmute": "Zapni zvuk" + "video.close": "Zatvoriť video", + "video.download": "Stiahnuť súbor", + "video.exit_fullscreen": "Ukončiť režim celej obrazovky", + "video.expand": "Zväčšiť video", + "video.fullscreen": "Zobraziť na celú obrazovku", + "video.hide": "Skryť video", + "video.mute": "Stlmiť zvuk", + "video.pause": "Pozastaviť", + "video.play": "Prehrať", + "video.unmute": "Zapnúť zvuk" } diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index e6be3f37957e65..35bfc79f2ee1cc 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -277,7 +277,13 @@ "follow_request.authorize": "Odobri", "follow_request.reject": "Odbij", "follow_requests.unlocked_explanation": "Iako vaš nalog nije zaključan, osoblje {domain} smatra da biste možda želeli da ručno pregledate zahteve za praćenje sa ovih naloga.", + "follow_suggestions.curated_suggestion": "Izbor osoblja", "follow_suggestions.dismiss": "Ne prikazuj ponovo", + "follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.", + "follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.", + "follow_suggestions.hints.most_interactions": "Ovaj profil je nedavno dobio veliku pažnju na {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.", "follow_suggestions.personalized_suggestion": "Personalizovani predlog", "follow_suggestions.popular_suggestion": "Popularni predlog", "follow_suggestions.view_all": "Prikaži sve", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 3143b5215eeefa..dc20585c9279fe 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -277,6 +277,7 @@ "follow_request.authorize": "Одобри", "follow_request.reject": "Одбиј", "follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} сматра да бисте можда желели да ручно прегледате захтеве за праћење са ових налога.", + "follow_suggestions.curated_suggestion": "Избор особља", "follow_suggestions.dismiss": "Не приказуј поново", "follow_suggestions.hints.featured": "Овај профил је ручно изабрао тим {domain}.", "follow_suggestions.hints.friends_of_friends": "Овај профил је популаран међу људима које пратите.", @@ -507,7 +508,7 @@ "onboarding.steps.publish_status.body": "Поздравите свет текстом, сликама, видео снимцима или анкетама {emoji}", "onboarding.steps.publish_status.title": "Напишите своју прву објаву", "onboarding.steps.setup_profile.body": "Појачајте своје интеракције тако што ћете имати свеобухватан профил.", - "onboarding.steps.setup_profile.title": "Персонализујтее свој профил", + "onboarding.steps.setup_profile.title": "Персонализујте свој профил", "onboarding.steps.share_profile.body": "Нека ваши пријатељи знају како да вас пронађу на Mastodon-у!", "onboarding.steps.share_profile.title": "Поделите свој Mastodon профил", "onboarding.tips.2fa": "Да ли сте знали? Можете да заштитите свој налог подешавањем двоструке потврде идентитета у подешавањима налога. Ради са било којом TOTP апликацијом по вашем избору, није потребан број телефона!", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 4d2cc3d1dc6c72..64c3f98db7f62f 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -119,6 +119,7 @@ "compose_form.save_changes": "o sin e ni", "compose_form.spoiler.marked": "o weka e toki pi ijo ike ken", "confirmation_modal.cancel": "o pini", + "confirmations.block.block_and_report": "o weka e jan o toki e jan tawa lawa", "confirmations.block.confirm": "o weka", "confirmations.block.message": "sina o wile ala wile weka e jan {name}?", "confirmations.cancel_follow_request.confirm": "o weka e wile sina", @@ -132,20 +133,24 @@ "confirmations.domain_block.confirm": "o weka.", "confirmations.domain_block.message": "sina wile ala a wile a len e ma {domain} ꞏ ken suli la len jan taso li pona ꞏ len pi ma ni la sina ken ala lukin e ijo pi ma ni lon lipu toki ale anu lukin toki ꞏ len ni la jan kute sina pi ma ni li weka", "confirmations.edit.confirm": "o ante", + "confirmations.edit.message": "sina ante e toki sina la toki pali sina li weka. sina wile ala wile e ni?", "confirmations.logout.confirm": "o weka", "confirmations.logout.message": "sina wile ala wile weka", "confirmations.mute.confirm": "o len", + "confirmations.mute.explanation": "ni la sina lukin ala e toki ona e toki kepeken nimi ona. taso la ona li ken lukin e toki sina li ken kute e ona.", "confirmations.mute.message": "sina awen ala awen wile kute ala e {name}?", "confirmations.redraft.confirm": "o weka o pali sin e toki", "confirmations.redraft.message": "pali sin e toki ni la sina wile ala wile weka e ona? sina ni la suli pi toki ni en wawa pi toki ni li weka. kin la toki lon toki ni li jo e mama ala.", "confirmations.reply.confirm": "toki lon toki ni", - "confirmations.reply.message": "toki tawa ona li weka e toki pali sina ꞏ sina wile ala wile ni", + "confirmations.reply.message": "sina toki lon toki ni la toki pali sina li weka. sina wile ala wile e ni?", "confirmations.unfollow.confirm": "o pini kute", "confirmations.unfollow.message": "sina o wile ala wile pini kute e jan {name}?", "conversation.delete": "o weka e toki ni", "conversation.mark_as_read": "ni o sin ala", "conversation.open": "o lukin e toki", "conversation.with": "lon {names}", + "copy_icon_button.copied": "toki li awen lon ilo sina", + "copypaste.copy_to_clipboard": "o awen lon ilo sina", "directory.local": "tan {domain} taso", "directory.new_arrivals": "jan pi kama sin", "directory.recently_active": "jan lon tenpo poka", @@ -154,6 +159,9 @@ "dismissable_banner.community_timeline": "ni li toki pi tenpo poka tawa ale tan jan lon ma lawa pi nimi {domain}.", "dismissable_banner.dismiss": "o weka", "dismissable_banner.explore_links": "ni li toki pi ijo sin ꞏ jan mute li pana e ni lon tenpo suno ni ꞏ sin la jan mute li pana la ni li kama suli", + "dismissable_banner.explore_statuses": "suni ni la jan mute li lukin e toki ni. jan mute li wawa e toki li suli e toki la toki ni li lon sewi. toki li sin la toki ni li lon sewi.", + "dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.", + "dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.", "embed.preview": "ni li jo e sitelen ni:", "emoji_button.activity": "musi", "emoji_button.flags": "len ma", @@ -171,15 +179,25 @@ "empty_column.account_timeline": "toki ala li lon!", "empty_column.account_unavailable": "ken ala lukin e lipu jan", "empty_column.blocks": "jan ala li weka tawa sina.", + "empty_column.direct": "jan ala li toki len e sina. jan li toki len e sina la sina ken lukin e ni lon ni.", + "empty_column.domain_blocks": "ma ala li weka tawa sina.", + "empty_column.favourited_statuses": "sina suli ala e toki. sina suli e toki la sina ken lukin e toki ni lon ni.", + "empty_column.favourites": "jan ala li suli e toki ni. jan li suli e toki ni la sina ken lukin e ona lon ni.", + "empty_column.follow_requests": "jan ala li toki pi wile kute tawa sina. jan li toki pi wile kute tawa sina la sina ken lukin e toki ni lon ni.", "empty_column.followed_tags": "sina alasa ala e toki ꞏ sina alasa e toki la toki li lon ni", "empty_column.hashtag": "ala li lon toki ni", + "empty_column.home": "ala a li lon lipu open sina! sina wile lon e ijo lon ni la o kute e jan pi toki suli.", + "empty_column.list": "ala li lon kulupu lipu ni. jan pi kulupu lipu ni li toki sin la toki ni li lon ni.", + "empty_column.lists": "sina jo ala e kulupu lipu. sina pali sin e kulupu lipu la ona li lon ni.", "empty_column.mutes": "jan ala li len tawa sina.", + "error.unexpected_crash.explanation": "ilo li ken ala pana e lipu ni. ni li ken tan pakala mi tan pakala pi ilo sina.", "errors.unexpected_crash.report_issue": "o toki e pakala tawa lawa", "explore.search_results": "ijo pi alasa ni", "explore.suggested_follows": "jan", "explore.title": "o alasa", "explore.trending_links": "sin", "explore.trending_statuses": "toki", + "filter_modal.added.settings_link": "lipu lawa", "filter_modal.select_filter.expired": "tenpo pini", "filter_modal.select_filter.search": "o alasa anu pali", "firehose.all": "ale", @@ -187,6 +205,10 @@ "firehose.remote": "kulupu ante", "follow_request.authorize": "o ken", "follow_request.reject": "o ala", + "follow_suggestions.hints.friends_of_friends": "jan kute sina li lukin mute e toki pi jan ni.", + "follow_suggestions.hints.most_followed": "jan mute lon ma {domain} li kute e jan ni.", + "follow_suggestions.hints.most_interactions": "tenpo poka la jan mute pi ma {domain} li lukin mute e toki pi jan ni.", + "follow_suggestions.hints.similar_to_recently_followed": "sina kute e jan lon tenpo poka la jan ni li sama ona.", "follow_suggestions.view_all": "o lukin e ale", "follow_suggestions.who_to_follow": "sina o kute e ni", "footer.about": "sona", @@ -203,11 +225,14 @@ "hashtag.column_settings.tag_mode.any": "wan ni", "hashtag.column_settings.tag_mode.none": "ala ni", "home.pending_critical_update.link": "o lukin e ijo ilo sin", + "interaction_modal.login.action": "o lon tomo", "interaction_modal.on_another_server": "lon ma ante", "interaction_modal.on_this_server": "lon ma ni", "interaction_modal.title.favourite": "o suli e toki {name}", "interaction_modal.title.follow": "o kute e {name}", "interaction_modal.title.reblog": "o wawa e toki {name}", + "interaction_modal.title.reply": "o toki lon toki pi jan {name}", + "intervals.full.days": "{number, plural, other {suni #}}", "keyboard_shortcuts.blocked": "o lukin e lipu sina pi jan weka", "keyboard_shortcuts.boost": "o pana sin e toki", "keyboard_shortcuts.down": "o tawa anpa lon lipu", @@ -253,25 +278,42 @@ "navigation_bar.pins": "toki sewi", "navigation_bar.preferences": "wile sina", "navigation_bar.search": "o alasa", + "notification.admin.report": "jan {name} li toki e jan {target} tawa lawa", "notification.admin.sign_up": "{name} li kama", "notification.favourite": "{name} li suli e toki sina", "notification.follow": " {name} li kute e sina", "notification.follow_request": "{name} li wile kute e sina", "notification.mention": "jan {name} li toki e sina", + "notification.poll": "sina pana lon pana la pana ni li pini", "notification.reblog": "{name} li wawa e toki sina", "notification.status": "{name} li toki", "notification.update": "{name} li ante e toki", "notifications.column_settings.follow": "jan kute sin", + "notifications.column_settings.poll": "pana lon pana ni:", + "notifications.column_settings.reblog": "wawa:", + "notifications.column_settings.update": "ante toki:", "notifications.filter.all": "ale", + "notifications.filter.polls": "pana lon pana ni", "onboarding.compose.template": "toki a, #Mastodon o!", + "onboarding.profile.display_name": "nimi tawa jan ante", + "onboarding.share.lead": "o toki lon nasin Masoton pi alasa sina tawa jan", + "onboarding.share.message": "ilo #Mastodon la mi jan {username} a! o kute e mi lon ni: {url}", "onboarding.start.title": "sina o kama pona a!", + "onboarding.tips.migration": "sina sona ala sona e ni? tenpo kama la sina pilin ike tawa ma {domain} la, sina ken tawa ma ante lon ilo Masoton. jan li kute e sina la jan ni li awen kute e sina. kin la sina ken lawa e ma pi sina taso a!", "poll.total_people": "{count, plural, other {jan #}}", + "poll.total_votes": "{count, plural, other {pana #}}", + "poll.vote": "o pana", + "poll.voted": "sina pana e ni", + "poll.votes": "{votes, plural, other {pana #}}", + "privacy.direct.long": "jan ale lon toki", "privacy.public.short": "tawa ale", "relative_time.full.just_now": "tenpo ni", "relative_time.just_now": "tenpo ni", "relative_time.today": "tenpo suno ni", "report.block": "o weka e jan", "report.block_explanation": "sina kama lukin ala e toki ona. ona li kama ala ken lukin e toki sina li kama ala ken kute e sina. ona li ken sona e kama ni.", + "report.categories.other": "ante", + "report.categories.spam": "ike tan toki mute", "report.category.title": "ike seme li lon {type} ni", "report.category.title_account": "lipu", "report.category.title_status": "toki", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 4962aedad5be92..f52f28381082aa 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -6,7 +6,7 @@ "about.domain_blocks.preamble": "Mastodon 基本上允許您瀏覽聯邦宇宙中任何伺服器的內容並與使用者互動。以下是在本伺服器上設定的例外。", "about.domain_blocks.silenced.explanation": "一般來說您不會看到來自這個伺服器的個人檔案和內容,除非您明確搜尋或主動跟隨對方。", "about.domain_blocks.silenced.title": "已受限", - "about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法與此伺服器上的使用者互動或交流。", + "about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法和此伺服器上的使用者互動與交流。", "about.domain_blocks.suspended.title": "已停權", "about.not_available": "無法於本伺服器上使用此資訊。", "about.powered_by": "由 {mastodon} 提供的去中心化社群媒體", @@ -212,7 +212,7 @@ "emoji_button.custom": "自訂", "emoji_button.flags": "旗幟", "emoji_button.food": "食物 & 飲料", - "emoji_button.label": "插入表情符號", + "emoji_button.label": "插入 emoji 表情符號", "emoji_button.nature": "自然", "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", @@ -227,7 +227,7 @@ "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人檔案", "empty_column.blocks": "您還沒有封鎖任何使用者。", - "empty_column.bookmarked_statuses": "您還沒有建立任何書籤。當您建立書籤時,它將於此顯示。", + "empty_column.bookmarked_statuses": "您還沒有新增任何書籤。當您新增書籤時,它將於此顯示。", "empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", "empty_column.domain_blocks": "尚未封鎖任何網域。", @@ -239,7 +239,7 @@ "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!跟隨更多人來將它填滿吧!", "empty_column.list": "這份列表下什麼也沒有。當此列表的成員嘟出新的嘟文時,它們將顯示於此。", - "empty_column.lists": "您還沒有建立任何列表。當您建立列表時,它將於此顯示。", + "empty_column.lists": "您還沒有新增任何列表。當您新增列表時,它將於此顯示。", "empty_column.mutes": "您尚未靜音任何使用者。", "empty_column.notifications": "您還沒有收到任何通知,當您與別人開始互動時,它將於此顯示。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或者跟隨其他伺服器的使用者後,就會有嘟文出現了", @@ -322,10 +322,10 @@ "home.pending_critical_update.link": "檢視更新內容", "home.pending_critical_update.title": "有可取得的重要安全性更新!", "home.show_announcements": "顯示公告", - "interaction_modal.description.favourite": "在 Mastodon 上有個帳號的話,您可以將此嘟文加入最愛以讓作者知道您欣賞它且將它儲存下來。", - "interaction_modal.description.follow": "在 Mastodon 上有個帳號的話,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。", - "interaction_modal.description.reblog": "在 Mastodon 上有個帳號的話,您可以轉嘟此嘟文以分享給您的跟隨者們。", - "interaction_modal.description.reply": "在 Mastodon 上有個帳號的話,您可以回覆此嘟文。", + "interaction_modal.description.favourite": "若於 Mastodon 上有個帳號,您可以將此嘟文加入最愛使作者知道您欣賞它且將它儲存下來。", + "interaction_modal.description.follow": "若於 Mastodon 上有個帳號,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。", + "interaction_modal.description.reblog": "若於 Mastodon 上有個帳號,您可以轉嘟此嘟文以分享給您的跟隨者們。", + "interaction_modal.description.reply": "若於 Mastodon 上有個帳號,您可以回覆此嘟文。", "interaction_modal.login.action": "返回首頁", "interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social", "interaction_modal.no_account_yet": "還沒有 Mastodon 帳號嗎?", @@ -347,7 +347,7 @@ "keyboard_shortcuts.compose": "將游標移至文字撰寫區塊", "keyboard_shortcuts.description": "說明", "keyboard_shortcuts.direct": "開啟私訊對話欄", - "keyboard_shortcuts.down": "往下移動", + "keyboard_shortcuts.down": "向下移動", "keyboard_shortcuts.enter": "檢視嘟文", "keyboard_shortcuts.favourite": "加到最愛", "keyboard_shortcuts.favourites": "開啟最愛列表", @@ -373,7 +373,7 @@ "keyboard_shortcuts.toggle_sensitivity": "顯示或隱藏媒體", "keyboard_shortcuts.toot": "發個新嘟文", "keyboard_shortcuts.unfocus": "跳離文字撰寫區塊或搜尋框", - "keyboard_shortcuts.up": "往上移動", + "keyboard_shortcuts.up": "向上移動", "lightbox.close": "關閉", "lightbox.compress": "折疊圖片檢視框", "lightbox.expand": "展開圖片檢視框", @@ -483,7 +483,7 @@ "onboarding.actions.go_to_home": "前往您的首頁時間軸", "onboarding.compose.template": "哈囉 #Mastodon!", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", - "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", + "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "客製化您的首頁時間軸", "onboarding.profile.discoverable": "使我的個人檔案可以被找到", "onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會出現於搜尋結果與趨勢中。您的個人檔案可能會被推薦給與您志趣相投的人。", @@ -505,7 +505,7 @@ "onboarding.start.title": "噹噹!完成啦!", "onboarding.steps.follow_people.body": "Mastodon 的趣味就是跟隨些有趣的人們!", "onboarding.steps.follow_people.title": "客製化您的首頁時間軸", - "onboarding.steps.publish_status.body": "向新世界打聲招呼吧。", + "onboarding.steps.publish_status.body": "透過文字、照片、影片或投票 {emoji} 向新世界打聲招呼吧。", "onboarding.steps.publish_status.title": "撰寫您第一則嘟文", "onboarding.steps.setup_profile.body": "若您完整填寫個人檔案,其他人比較願意與您互動。", "onboarding.steps.setup_profile.title": "客製化您的個人檔案", @@ -526,7 +526,7 @@ "poll.vote": "投票", "poll.voted": "您已對此問題投票", "poll.votes": "{votes, plural, one {# 張票} other {# 張票}}", - "poll_button.add_poll": "建立投票", + "poll_button.add_poll": "新增投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整嘟文隱私狀態", "privacy.direct.long": "此嘟文提及之所有人", @@ -716,7 +716,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "拖放來上傳", - "upload_button.label": "上傳圖片、影片、或者音樂檔案", + "upload_button.label": "上傳圖片、影片、或者音訊檔案", "upload_error.limit": "已達到檔案上傳限制。", "upload_error.poll": "不允許於投票時上傳檔案。", "upload_form.audio_description": "為聽障人士增加文字說明", diff --git a/config/locales/activerecord.kab.yml b/config/locales/activerecord.kab.yml index 909ff68c24e206..b3ca90069b50ed 100644 --- a/config/locales/activerecord.kab.yml +++ b/config/locales/activerecord.kab.yml @@ -19,7 +19,7 @@ kab: account: attributes: username: - invalid: isekkilen, uṭṭunen d yijerriden n wadda kan + invalid: ilaq ad ilin isekkilen, uṭṭunen d yijerriden n wadda kan reserved: yettwaṭṭef status: attributes: diff --git a/config/locales/activerecord.sk.yml b/config/locales/activerecord.sk.yml index d13c416e516a63..809d00647146db 100644 --- a/config/locales/activerecord.sk.yml +++ b/config/locales/activerecord.sk.yml @@ -7,11 +7,11 @@ sk: options: Voľby user: agreement: Dohoda o poskytovaní služieb - email: Emailová adresa + email: E-mailová adresa locale: Jazyk password: Heslo user/account: - username: Meno používateľa + username: Používateľské meno user/invite_request: text: Dôvod errors: @@ -41,9 +41,9 @@ sk: attributes: email: blocked: používa nepovoleného poskytovateľa e-mailu - unreachable: zdá sa, že neexistuje + unreachable: vyzerá, že neexistuje role_id: - elevated: nemôže byť vyššia ako vaša súčasná rola + elevated: nemôže byť viac ako vaša súčasná rola user_role: attributes: permissions_as_keys: @@ -51,9 +51,9 @@ sk: elevated: nemôže obsahovať povolenia, ktoré vaša aktuálna rola nemá own_role: nie je možné zmeniť s vašou aktuálnou rolou position: - elevated: nemôže byť vyššia ako vaša súčasná rola + elevated: nemôže byť viac ako vaša súčasná rola own_role: nie je možné zmeniť s vašou aktuálnou rolou webhook: attributes: events: - invalid_permissions: nemožno zahrnúť udalosti, ku ktorým nemáte práva + invalid_permissions: nemôže zahrnúť udalosti, ku ktorým nemáte práva diff --git a/config/locales/af.yml b/config/locales/af.yml index 62c52fa493b943..adc9d5dbd5d0f9 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -173,5 +173,3 @@ af: warning: title: silence: Rekening beperk - welcome: - edit_profile_action: Stel profiel op diff --git a/config/locales/an.yml b/config/locales/an.yml index 7ad1986b24a1da..27abf2203a8c91 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1596,8 +1596,6 @@ an: silence: Cuenta limitada suspend: Cuenta suspendida welcome: - edit_profile_action: Configurar lo perfil - edit_profile_step: Puetz personalizar lo tuyo perfil puyando una foto de perfil, cambiando lo tuyo nombre d'usuario y muito mas. Puetz optar per revisar a los nuevos seguidores antes que puedan seguir-te. explanation: Aquí i hai qualques consellos pa empecipiar subject: Bienveniu a Mastodon title: Te damos la bienvenida a bordo, %{name}! diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 8e9338d80ad64a..2e227f53a7a35f 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1965,8 +1965,6 @@ ar: silence: الحساب محدود suspend: الحساب مُعلَّق welcome: - edit_profile_action: تهيئة الملف التعريفي - edit_profile_step: يمكنك تخصيص ملفك الشخصي عن طريق رفع صورة ملفك الشخصي, تغيير اسم العرض الخاص بك والمزيد. يمكنك اختيار مراجعة المتابعين الجدد قبل السماح لهم بمتابعتك. explanation: ها هي بعض النصائح قبل بداية الاستخدام subject: أهلًا بك على ماستدون title: أهلاً بك، %{name}! diff --git a/config/locales/ast.yml b/config/locales/ast.yml index ee9105b05ff258..9b9d5510c08062 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -899,8 +899,6 @@ ast: none: Alvertencia suspend: Cuenta suspendida welcome: - edit_profile_action: Configurar el perfil - edit_profile_step: Pues personalizar el perfil pente la xuba d'una semeya, el cambéu del nome visible ya muncho más. Tamién, si lo prefieres, pues revisar los perfiles nuevos enantes de que puedan siguite. explanation: Equí tienes dalgunos conseyos pa que comiences subject: Afáyate en Mastodon title: "¡Afáyate, %{name}!" diff --git a/config/locales/be.yml b/config/locales/be.yml index bd75870a18c439..d0cc96d6d89206 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1906,9 +1906,42 @@ be: silence: Уліковы запіс абмежаваны suspend: Уліковы запіс выключаны welcome: - edit_profile_action: Наладзіць профіль - edit_profile_step: Вы можаце наладзіць свой профіль, запампаваўшы выяву профілю, змяніўшы адлюстраванае імя і іншае. Вы можаце праглядаць новых падпісчыкаў, перш чым ім будзе дазволена падпісацца на вас. + apps_android_action: Спампаваць з Google Play + apps_ios_action: Спампваваць з App Store + apps_step: Спампуйце нашыя афіцыйныя праграмы. + apps_title: Кліенты Mastodon + checklist_subtitle: 'Давайце паспрабуем разабрацца ў гэтай новай сацыяльнай сетцы:' + checklist_title: З чаго пачаць + edit_profile_action: Персаналізаваць + edit_profile_step: Узмацніце ўзаемадзеянне, запоўніўшы поўны профіль. + edit_profile_title: Наладзьце свой профіль explanation: Вось некаторыя парады каб пачаць + feature_action: Даведацца больш + feature_audience: Mastodon дае ўнікальную магчымасць кіраваць сваёй аўдыторыяй без пасрэднікаў. Маючы сервер Mastodon, разгорнуты на ўласнай інфраструктуры, яго карыстальнікі могуць узаемадзейнічаць з любым іншым серверам Mastodon, не аддаючы кантроль у чужыя рукі. + feature_audience_title: Фармуйце сваю аўдыторыю з упэўненасцю + feature_control: Толькі вы дакладна ведаеце, што хочаце бачыць на сваім серверы. Ніякіх алгарытмаў або рэкламы, якія марнуюць ваш час. Сачыце за любым серверам Mastodon з аднаго ўліковага запісу і атрымлівайце паведамленні ў храналагічным парадку, каб ваш куток Інтэрнэту быў крыху падобны на вас. + feature_control_title: Кіруйце сваёй стужкай + feature_creativity: Mastodon падтрымлівае публікацыі з аўдыя, відэа і малюнкамі, апісаннем даступнасці, апытаннямі, папярэджаннямі аб змесце, аніміраванымі аватарамі, карыстальніцкімі эмодзі, мініяцюрамі, элементамі кіравання абрэзкай мініяцюр і іншым. Незалежна ад таго, дзеліцеся вы сваім мастацтвам, музыкай або падкастам, Mastodon тут для вас. + feature_creativity_title: Неабмежаваны творчы патэнцыял + feature_moderation: Mastodon вяртае прыняцце рашэнняў у вашыя рукі. У адрозненне ад сацыяльных сетак, якія належаць карпарацыям, якія спускаюць свае правілы зверху, кожны сервер Mastodon усталёўвае свае правілы і нормы, якія выконваюцца на мясцовым узроўні, што робіць іх найболей гнуткімі ў задавальненні запатрабаванняў розных груп людзей. Далучайцеся да сервера з правіламі, з якімі вы згодны, ці стварыце свой уласны. + feature_moderation_title: Мадэрацыя, якой яна павінна быць + follow_action: Падпісацца + follow_step: Падпіска на цікавых людзей - гэта галоўнае ў Mastodon. + follow_title: Наладзьце сваю хатнюю стужку + follows_subtitle: Падпішыцеся на папулярных карыстальнікаў + follows_title: На каго падпісацца + follows_view_more: Прагледзець больш людзей, на якіх варта падпісацца + hashtags_recent_count: "%{people} людзей за апошнія %{days} дні" + hashtags_subtitle: Даведайцеся што было папулярна ў апошнія 2 дні + hashtags_title: Папулярныя хэштэгі + hashtags_view_more: Прагледзець іншыя папулярныя хэштэгі + post_action: Стварыць + post_step: Скажыце ўсім прывітанне з дапамогай тэксту, фатаграфій, відэа і апытанняў. + post_title: Стварыце свой першы допіс + share_action: Абагуліць + share_step: Няхай вашыя сябры ведаюць, як знайсці вас у Mastodon. + share_title: Абагульце ваш профіль у Mastodon + sign_in_action: Увайсці subject: Вітаем у Mastodon title: Рады вітаць вас, %{name}! users: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 3d1b6d291fd11e..8689b0359ec47c 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -767,6 +767,7 @@ bg: disabled: До никого users: До влезнали локални потребители registrations: + moderation_recommandation: Уверете се, че имате адекватен и реактивен модераторски екип преди да отворите регистриранията за всеки! preamble: Управлява кой може да създава акаунт на сървъра ви. title: Регистрации registrations_mode: @@ -774,6 +775,7 @@ bg: approved: Изисква се одобрение за регистриране none: Никой не може да се регистрира open: Всеки може да се регистрира + warning_hint: Препоръчваме употребата на „Изисква се одобрение за регистриране“, освен ако сте уверени, че екипът ви за модериране може да се справи със спама и зловредните регистрирания своевременно. security: authorized_fetch: Изисква се удостоверяване от федеративни сървъри authorized_fetch_hint: Изискването удостоверяване от феративните сървъри позволява по-строго прилагане на блокирания както на ниво потребител, така и на ниво сървър. Това обаче снижава производителността, намалява обхвата на вашите отговори и може да възникнат проблеми със съвместимостта с някои федеративни услуги. Освен това, то не пречи на посветени участници да извличат вашите обществени публикации и акаунти. @@ -966,6 +968,9 @@ bg: title: Уебкуки webhook: Уебкука admin_mailer: + auto_close_registrations: + body: Поради липса на скорошна дейност по модериране, регистрациите на %{instance} бяха самодейно превключени в режим, изискващ ръчна проверка, за да се предотврати употребата на %{instance} като платформа за потенциални зложелатели. Може да превключите обратно в режим „отворено регистриране“ по всяко време. + subject: Регистриранията за %{instance} са самодейно превключени към изискване на одобрение new_appeal: actions: delete_statuses: за изтриване на публикациите им @@ -1009,7 +1014,7 @@ bg: remove: Разкачвне на псевдонима appearance: advanced_web_interface: Разширен уеб интерфейс - advanced_web_interface_hint: 'Ако желаете да се възползвате от цялата ширина на своя екран, разширеният уеб интерфейс ще ви позволи да настроите няколко различни колони, за да виждате едновременно различна информация: Начало, известия, федерирана хронология, множество списъци и хаштагове.' + advanced_web_interface_hint: 'Ако искате да употребявате цялата ширина на екрана си, разширеният уеб интерфейс ви позволява да настроите най-различни колони, за да виждате едновременно множество сведения, колкото искате: Начало, известия, федеративен инфоканал, произволен брой списъци и хаштагове.' animations_and_accessibility: Анимация и достъпност confirmation_dialogs: Диалогов прозорец за потвърждение discovery: Откриване @@ -1837,9 +1842,42 @@ bg: silence: Акаунтът има ограничение suspend: Акаунтът е спрян welcome: - edit_profile_action: Настройване на профила - edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват. + apps_android_action: Вземане от Google Play + apps_ios_action: Изтегляне в App Store + apps_step: Изтегляне на служебните ни приложения. + apps_title: Приложения на Mastodon + checklist_subtitle: 'Нека започнем приключение в тази нова социална граница:' + checklist_title: Добре дошли при контролния списък + edit_profile_action: Персонализиране + edit_profile_step: Подсилете взаимодействията си, изграждайки цялостен профил. + edit_profile_title: Пригодете профила си explanation: Ето няколко стъпки за начало + feature_action: Научете повече + feature_audience: Mastodon ви осигурява с неповторимата възможност на управление на публиката ви без посредници. Mastodon се разгръща на ваша собствена инфраструктура, позволяваща ви да следвате и да бъдете последвани от всеки друг сървър на Mastodon в мрежата и не е под ничий контрол освен ваш. + feature_audience_title: Изградете публиката си с увереност + feature_control: Вие знаете най-добре какво искате да виждате на началния си инфоканал. Няма алгоритми или реклами, за да ви губят времето. Последвате всекиго през всеки сървър на Mastodon от един акаунт и получавате публикациите им в хронологичен ред, а и правете свое кътче в интернет малко по-подобно на вас. + feature_control_title: Поддържайте управлението на часовата си ос + feature_creativity: Mastodon поддържа публикации със звук, картина и видео, описания на достъпността, анкети, предупреждения за съдържание, анимирани аватари, потребителски емоджита, контрол на изрязване на миниобрази и още, за да ви помогнат да се изразите в мрежата. Независимо дали публикувате свое изкуство, музика или свой подкаст, то Mastodon е там за вас. + feature_creativity_title: Несравнимо творчество + feature_moderation: Mastodon връща вземането на решения в ръцете ви. Всеки сървър сътворява свои правила и регулации, прилагащи се локално, а не отгоре надолу като корпоративна социална медия, което го прави най-гъвкав в отговор на нуждите на различни групи хора. Присъединете се към сървър, с който сте съгласни, или пък си хоствайте свой. + feature_moderation_title: Модерирайте начина, по който трябва да е + follow_action: Последване + follow_step: Последването на интересни хора е основната цел на Mastodon. + follow_title: Персонализиране на началния ви инфоканал + follows_subtitle: Следвайте добре известни акаунти + follows_title: Кого да се последва + follows_view_more: Преглед на още хора за последване + hashtags_recent_count: "%{people} души за последните %{days} дни" + hashtags_subtitle: Проучете какво изгрява от последните 2 дни + hashtags_title: Изгряващи хаштагове + hashtags_view_more: Преглед на още изгряващи хаштагове + post_action: Съставяне + post_step: Поздравете света с текст, снимки, видео или анкети. + post_title: Направете първата си публикация + share_action: Споделяне + share_step: Позволете на приятелите си да знаят как да ви намират в Mastodon. + share_title: Споделете профила си в Mastodon + sign_in_action: Вход subject: Добре дошли в Mastodon title: Добре дошли на борда, %{name}! users: diff --git a/config/locales/br.yml b/config/locales/br.yml index 01c6db4ef56ddc..fa6d266f627890 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -560,7 +560,16 @@ br: title: none: Diwall welcome: - edit_profile_action: Kefluniañ ar profil + apps_android_action: Tapit anezhañ war Google Play + apps_ios_action: Pellgargañ war an App Store + apps_step: Pellgargit hon arloadoù ofisiel. + apps_title: Arloadoù Mastodon + edit_profile_action: Personelaat + edit_profile_title: Personelaat ho profil + feature_action: Gouzout hiroc'h + follow_action: Heuliañ + share_action: Rannañ + sign_in_action: Kevreañ subject: Donemat e Mastodon title: Degemer mat e bourzh, %{name}! users: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index d4213a258ed1b9..15a06559be9c14 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1842,9 +1842,42 @@ ca: silence: Compte limitat suspend: Compte suspès welcome: - edit_profile_action: Configura el perfil - edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir. + apps_android_action: Obteniu-lo a Google Play + apps_ios_action: Descarregueu-la de la botiga d'aplicacions + apps_step: Descarregueu-vos les aplicacions oficials. + apps_title: Aplicacions de Mastodon + checklist_subtitle: 'Inicieu-vos en aquesta nova frontera social:' + checklist_title: Control inicial + edit_profile_action: Personalitzeu + edit_profile_step: Augmenteu les vostres interaccions amb un perfil complet. + edit_profile_title: Personalitzeu el perfil explanation: Aquests són alguns consells per a començar + feature_action: Per a saber-ne més + feature_audience: Mastodon us proporciona una possibilitat única de gestionar la vostra audiència sense intermediaris. Instal·lat a la vostra pròpia infraestructura us permet seguir i ser seguit només per altres servidors Mastodon i ningú més que vosaltres el controla. + feature_audience_title: Construïu la vostra audiència en confiança + feature_control: Sabeu perfectament què voleu veure a la línia temporal. Sense algorismes ni anuncis que us facin malbaratar el temps. Seguiu qualsevol persona de qualsevol servidor Mastodon des d'un sol compte en ordre cronològic i feu-vos a mida un racó d'internet. + feature_control_title: Tingueu el control de la vostra línia temporal + feature_creativity: Mastodon us permet de publicar àudio, vídeo i imatges, descripcions d'accessibilitat, enquestes, avisos de contingut, avatars animats, emojis personalitzats, retallar miniatures i més, a fi d'ajudar-vos a expressar-vos en línia. Tant si publiqueu el vostre art, música o un podcast, Mastodon us ajudarà. + feature_creativity_title: Creativitat incomparable + feature_moderation: Mastodon posa les decisions a les vostres mans. Cada servidor crea les seves pròpies regles, que només s'apliquen als usuaris locals, a diferència de les xarxes socials corporatives, permetent una flexibilitat que s'adapta a tota mena de grups. Uniu-vos a un servidor si esteu d'acord amb les seves regles, o creeu-ne un. + feature_moderation_title: Moderant com ha de ser + follow_action: Seguiu + follow_step: Mastodon va de seguir gent interessant. + follow_title: Personalitzeu la pantalla d'inici + follows_subtitle: Seguiu comptes populars + follows_title: A qui seguir + follows_view_more: Més persones a qui seguir + hashtags_recent_count: "%{people} persones en els últims %{days} dies" + hashtags_subtitle: Exploreu què és tendència des de fa 2 dies + hashtags_title: Etiquetes en tendència + hashtags_view_more: Més etiquetes en tendència + post_action: Redacteu + post_step: Saludeu el món amb text, fotos, vídeos o enquestes. + post_title: Feu la primera publicació + share_action: Compartiu + share_step: Permeteu als vostres amics de saber com trobar-vos a Mastodon. + share_title: Compartiu el perfil + sign_in_action: Inicieu sessió subject: Et donem la benvinguda a Mastodon title: Benvingut a bord, %{name}! users: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 7f1c28defc147f..f4733c27e5fbb0 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -1032,7 +1032,6 @@ ckb: silence: هەژماری سنووردار suspend: هەژمار ڕاگیرا welcome: - edit_profile_action: پرۆفایلی جێگیرکردن explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت subject: بەخێربیت بۆ ماستۆدۆن title: بەخێربێیت، بەکارهێنەر %{name}! diff --git a/config/locales/co.yml b/config/locales/co.yml index ecf860645548cc..8668cc69539283 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -1047,7 +1047,6 @@ co: silence: Contu limitatu suspend: Contu suspesu welcome: - edit_profile_action: Cunfigurazione di u prufile explanation: Eccu alcune idee per principià subject: Benvenutu·a nant’à Mastodon title: Benvenutu·a, %{name}! diff --git a/config/locales/cs.yml b/config/locales/cs.yml index fd24ac05c64d48..2ecc3606662f68 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1906,8 +1906,6 @@ cs: silence: Účet omezen suspend: Účet pozastaven welcome: - edit_profile_action: Nastavit profil - edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat. explanation: Zde je pár tipů do začátku subject: Vítejte na Mastodonu title: Vítejte na palubě, %{name}! diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 241d599464aee0..17c4280508ea69 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1970,9 +1970,42 @@ cy: silence: Cyfrif cyfyngedig suspend: Cyfrif wedi'i atal welcome: - edit_profile_action: Sefydlu proffil - edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn. + apps_android_action: Ar gael ar Google Play + apps_ios_action: Ei lwytho i lawr o'r App Store + apps_step: Llwythwch i awr ein apiau swyddogol. + apps_title: Apiau Mastodon + checklist_subtitle: 'Gadewch i ni eich rhoi ar ben ffordd ar y datblygiad cymdeithasol newydd hon:' + checklist_title: Rhestr Wirio Croeso + edit_profile_action: Personoli + edit_profile_step: Rhowch hwb i'ch rhyngweithiadau trwy gael proffil cynhwysfawr. + edit_profile_title: Personoli'ch proffil explanation: Dyma ambell nodyn i'ch helpu i ddechrau + feature_action: Dysgu mwy + feature_audience: Mae Mastodon yn rhoi posibilrwydd unigryw i chi reoli'ch cynulleidfa'n ddirwystr. Mae'r Mastodon sy'n cael ei ddefnyddio ar eich seilwaith eich hun yn caniatáu ichi ddilyn a chael eich dilyn o unrhyw weinydd Mastodon arall ar-lein ac nid yw o dan reolaeth neb ond eich un chi. + feature_audience_title: Adeiladu eich cynulleidfa gyda hyder + feature_control: Chi sy'n gwybod orau beth rydych chi am ei weld ar eich llif cartref. Dim algorithmau na hysbysebion i wastraffu'ch amser. Dilynwch unrhyw un ar draws unrhyw weinydd Mastodon o gyfrif sengl a derbyn eu postiadau mewn trefn gronolegol, a gwnewch eich cornel chi o'r rhyngrwyd ychydig yn debycach i chi. + feature_control_title: Cadwch reolaeth ar eich llinell amser eich hun + feature_creativity: Mae Mastodon yn cefnogi postiadau sain, fideo a llun, disgrifiadau hygyrchedd, arolygon barn, rhybuddion cynnwys, afatarau animeiddiedig, emojis wedi'u teilwra, rheolaeth lluniau bach a mwy, i'ch helpu chi i fynegi'ch hun ar-lein. P'un a ydych chi'n cyhoeddi'ch celf, eich cerddoriaeth, neu'ch podlediad, mae Mastodon yno i chi. + feature_creativity_title: Creadigrwydd heb ei ail + feature_moderation: Mae Mastodon yn gosod penderfyniadau'n ôl yn eich dwylo chi. Mae pob gweinydd yn creu eu rheolau a'u rheoliadau eu hunain, sy'n cael eu gorfodi'n lleol ac nid o'r top i lawr fel cyfryngau cymdeithasol corfforaethol, gan ei wneud yn fwyaf hyblyg wrth ymateb i anghenion gwahanol grwpiau o bobl. Ymunwch â gweinydd gyda'r rheolau rydych chi'n cytuno â nhw, neu gwesteiwch eich un chi. + feature_moderation_title: Cymedroli'r ffordd y dylai fod + follow_action: Dilyn + follow_step: Dilyn pobl ddiddorol yw hanfod Mastodon. + follow_title: Personoli eich llif cartref + follows_subtitle: Dilynwch gyfrifon adnabyddus + follows_title: Pwy i ddilyn + follows_view_more: Gweld mwy o bobl i ddilyn + hashtags_recent_count: "%{people} person yn y %{days} diwrnod diwethaf" + hashtags_subtitle: Gweld beth sy'n tueddu dros y 2 ddiwrnod diwethaf + hashtags_title: Hashnodau tuedd + hashtags_view_more: Gweld mwy o hashnodau tuedd + post_action: Creu + post_step: Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn. + post_title: Creu'ch postiad cyntaf + share_action: Rhannu + share_step: Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon! + share_title: Rhannwch eich proffil Mastodon + sign_in_action: Mewngofnodi subject: Croeso i Mastodon title: Croeso, %{name}! users: diff --git a/config/locales/da.yml b/config/locales/da.yml index 6bc0d967973218..527f2240c7c1ba 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1842,9 +1842,42 @@ da: silence: Konto begrænset suspend: Konto suspenderet welcome: - edit_profile_action: Opsæt profil - edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses. + apps_android_action: Hent den fra Google Play + apps_ios_action: Download i App Store + apps_step: Download vores officielle apps. + apps_title: Mastodon apps + checklist_subtitle: 'Kom i gang på denne nye sociale frontløber:' + checklist_title: Velkomsttjekliste + edit_profile_action: Personliggør + edit_profile_step: Andre er mere tilbøjelige til at interagere med brugere med udfyldte profiler. + edit_profile_title: Personliggør din profil explanation: Her er nogle råd for at få dig i gang + feature_action: Læs mere + feature_audience: Mastodon giver brugeren en unik mulighed for at styre sit publikum uden mellemled. Mastodon udrullet på egen infrastruktur giver mulighed for at følge og blive fulgt fra enhver anden Mastodon-server online, kontrolleret/styret alene af brugen selv. + feature_audience_title: Opbyg et publikum i tillid + feature_control: Man ved selv bedst, hvad man ønsker at se på sit hjemmefeed. Ingen algoritmer eller annoncer til at spilde tiden. Følg alle på tværs af enhver Mastodon-server fra en enkelt konto og modtag deres indlæg i kronologisk rækkefølge, og gør dette hjørne af internet lidt mere personligt. + feature_control_title: Hold styr på egen tidslinje + feature_creativity: Mastodon understøtter indlæg med lyd, video og billede, tilgængelighedsbeskrivelser, meningsmålinger, indhold advarsler, animerede avatarer, tilpassede emojis, miniaturebeskæringskontrol og mere, for at gøre det lettere at udtrykke sig online. Uanset om man udgiver sin kunst, musik eller podcast, så står Mastodon til rådighed. + feature_creativity_title: Uovertruffen kreativitet + feature_moderation: Mastodon lægger beslutningstagning tilbage i brugerens hænder. Hver server opretter deres egne regler og reguleringer, som håndhæves lokalt og ikke ovenfra som virksomhedernes sociale medier, hvilket gør det til den mest fleksible mht. at reagere på behovene hos forskellige persongrupper. Deltag på en server med de regler, man er enige med, eller driv en egen server. + feature_moderation_title: Moderering af måden, tingene bør være på + follow_action: Følg + follow_step: At følge interessante personer, det er, hvad Mastodon handler om. + follow_title: Personliggør hjemmefeedet + follows_subtitle: Følg velkendte konti + follows_title: Hvem, som skal følges + follows_view_more: Vis nogle personer at følge + hashtags_recent_count: "%{people} personer de seneste %{days} dage" + hashtags_subtitle: Udforsk de seneste 2 dages tendenser + hashtags_title: Populære hashtags + hashtags_view_more: Se flere populære hashtags + post_action: Skriv + post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger. + post_title: Opret det første indlæg + share_action: Del + share_step: Lad vennerne vide, hvor man kan findes på Mastodon. + share_title: Del Mastodon-profilen + sign_in_action: Log ind subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/de.yml b/config/locales/de.yml index 06361223731738..262c0166c92086 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -425,7 +425,7 @@ de: view: Domain-Sperre ansehen email_domain_blocks: add_new: Neue hinzufügen - allow_registrations_with_approval: Registrierungen mit Genehmigung erlauben + allow_registrations_with_approval: Registrierungen mit Genehmigung zulassen attempts_over_week: one: "%{count} Registrierungsversuch in der vergangenen Woche" other: "%{count} Registrierungsversuche in der vergangenen Woche" @@ -1842,9 +1842,42 @@ de: silence: Konto stummgeschaltet suspend: Konto gesperrt welcome: - edit_profile_action: Profil einrichten - edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen. + apps_android_action: Aus dem Google Play Store herunterladen + apps_ios_action: Im App Store herunterladen + apps_step: Lade unsere offiziellen Apps herunter. + apps_title: Mastodon-Apps + checklist_subtitle: 'Fangen wir an, diese neue soziale Dimension zu erkunden:' + checklist_title: Willkommensleitfaden + edit_profile_action: Personalisieren + edit_profile_step: Mit einem vollständigen Profil interagieren andere eher mit dir. + edit_profile_title: Personalisiere dein Profil explanation: Hier sind ein paar Tipps, um loszulegen + feature_action: Mehr erfahren + feature_audience: Mastodon bietet dir eine einzigartige Möglichkeit, deine Reichweite ohne Mittelsperson zu verwalten. Auf deiner eigenen Infrastruktur bereitgestellt, ermöglicht Mastodon es dir, jedem anderen Mastodon-Server zu folgen und von jedem anderen Server aus gefolgt zu werden. Ebenso steht Mastodon unter deiner Kontrolle. + feature_audience_title: Baue deine Reichweite mit Vertrauen auf + feature_control: Du weißt am besten, was du auf deiner Startseite sehen möchtest. Keine Algorithmen oder Werbung, die deine Zeit verschwenden. Folge Nutzer*innen von jedem Mastodon-Server von einem einzelnen Konto aus und empfange deren Beiträge in chronologischer Reihenfolge. Mache Mastodon zu deinem ganz persönlichen Fleckchen im Internet. + feature_control_title: Behalte die Kontrolle über deine eigene Timeline + feature_creativity: Mastodon unterstützt Audio-, Video- und Bildbeiträge, Beschreibungen, Umfragen, Inhaltswarnungen, animierte Avatare, benutzerdefinierte Emojis, das Zuschneiden von Vorschaubildern und vieles mehr, um dir zu helfen, dich online zu entfalten. Egal, ob du deine Kunst, deine Musik oder deinen Podcast veröffentlichst – Mastodon ist für dich da. + feature_creativity_title: Einzigartige Kreativität + feature_moderation: Mastodon legt die Entscheidungskraft zurück in deine Hände. Jeder Server erstellt eigene Regeln und Vorschriften, die nur lokal, pro einzelnem Server durchgesetzt werden – und nicht von oben herab, wie es bei den kommerziellen sozialen Medien der Fall ist. Dadurch ist Mastodon viel anpassungsfähiger für verschiedene Gruppen von Menschen. Registriere dich bei einem Server, dessen Regeln du magst, oder hoste deinen eigenen Server. + feature_moderation_title: Moderation so, wie sie sein sollte + follow_action: Folgen + follow_step: Interessanten Profilen zu folgen ist das, was Mastodon ausmacht. + follow_title: Personalisiere deine Startseite + follows_subtitle: Folge bekannten Profilen + follows_title: Empfohlene Profile + follows_view_more: Weitere Profile zum Folgen entdecken + hashtags_recent_count: "%{people} Personen in den letzten %{days} Tagen" + hashtags_subtitle: Entdecke, was in den letzten 2 Tagen angesagt war + hashtags_title: Angesagte Hashtags + hashtags_view_more: Weitere angesagte Hashtags entdecken + post_action: Verfassen + post_step: Begrüße die Welt mit Text, Fotos, Videos oder Umfragen. + post_title: Erstelle deinen ersten Beitrag + share_action: Teilen + share_step: Lass deine Freund*innen wissen, wie sie dich auf Mastodon finden können. + share_title: Teile dein Mastodon-Profil + sign_in_action: Anmelden subject: Willkommen bei Mastodon! title: Willkommen an Bord, %{name}! users: diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml index 3e749f9a0b8098..76fbf619cc5e74 100644 --- a/config/locales/devise.et.yml +++ b/config/locales/devise.et.yml @@ -12,6 +12,7 @@ et: last_attempt: Sul on veel üks katse, enne kui konto lukustatakse. locked: Konto on lukustatud. not_found_in_database: Valed %{authentication_keys} või salasõna. + omniauth_user_creation_failure: Sellele identiteedile konto loomine nurjus. pending: Sinu konto on siiani läbivaatamisel. timeout: Sinu sessioon on aegunud. Jätkamiseks palun sisene uuesti. unauthenticated: Pead sisenema või looma konto enne kui jätkad. diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 003d48417b6869..8963bf5a45b021 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -58,7 +58,7 @@ fi: subtitle: Kaksivaiheinen todennus on otettu käyttöön tilillesi. title: Kaksivaiheinen todennus käytössä two_factor_recovery_codes_changed: - explanation: Uudet palautuskoodit on nyt luotu, ja vanhat mitätöity. + explanation: Uudet palautuskoodit on nyt luotu ja vanhat mitätöity. subject: 'Mastodon: Kaksivaihetodennuksen palautuskoodit luotiin uudelleen' subtitle: Aiemmat palautuskoodit on mitätöity, ja korvaavat uudet koodit on luotu. title: 2-vaiheisen todennuksen palautuskoodit vaihdettiin diff --git a/config/locales/devise.fr-CA.yml b/config/locales/devise.fr-CA.yml index 7f13f67828b8f4..69ee177e3345fb 100644 --- a/config/locales/devise.fr-CA.yml +++ b/config/locales/devise.fr-CA.yml @@ -12,6 +12,7 @@ fr-CA: last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. not_found_in_database: "%{authentication_keys} ou mot de passe invalide." + omniauth_user_creation_failure: Erreur lors de la création d'un compte pour cette identité. pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 8a5b8384e0f249..631a2eee6f2e65 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -12,6 +12,7 @@ fr: last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. not_found_in_database: "%{authentication_keys} ou mot de passe invalide." + omniauth_user_creation_failure: Erreur lors de la création d'un compte pour cette identité. pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. diff --git a/config/locales/devise.gd.yml b/config/locales/devise.gd.yml index 1bf489cfbb308b..ca9dcc49694348 100644 --- a/config/locales/devise.gd.yml +++ b/config/locales/devise.gd.yml @@ -12,6 +12,7 @@ gd: last_attempt: Tha aon oidhirp eile agad mus dèid an cunntas agad a ghlasadh. locked: Tha an cunntas agad glaiste. not_found_in_database: "%{authentication_keys} no facal-faire mì-dhligheach." + omniauth_user_creation_failure: Thachair mearachd le cruthachadh cunntais dhan dearbh-aithne seo. pending: Tha an cunntas agad fo lèirmheas fhathast. timeout: Dh’fhalbh an ùine air an t-seisean agad. Clàraich a-steach a-rithist airson leantainn air adhart. unauthenticated: Feumaidh tu clàradh a-steach no clàradh leinn mus lean thu air adhart. @@ -47,14 +48,19 @@ gd: subject: 'Mastodon: Stiùireadh air ath-shuidheachadh an fhacail-fhaire' title: Ath-shuidheachadh an fhacail-fhaire two_factor_disabled: + explanation: "’S urrainn dhut clàradh a-steach le seòladh puist-d is facal-faire a-mhàin a-nis." subject: 'Mastodon: Tha an dearbhadh dà-cheumnach à comas' + subtitle: Chaidh an dearbhadh dà-cheumnach a chur à comas dhan chunntas agad. title: Dearbhadh dà-cheumnach à comas two_factor_enabled: + explanation: Bidh feum air tòcan a ghineas an aplacaid TOTP a chaidh a phaidhreachadh airson clàradh a-steach. subject: 'Mastodon: Tha an dearbhadh dà-cheumnach an comas' + subtitle: Chaidh an dearbhadh dà-cheumnach a chur an comas dhan chunntas agad. title: Dearbhadh dà-cheumnach an comas two_factor_recovery_codes_changed: explanation: Tha na còdan aisig a bh’ agad cheana mì-dhligheach a-nis agus chaidh feadhainn ùra a ghintinn. subject: 'Mastodon: Chaidh còdan aisig dà-cheumnach ath-ghintinn' + subtitle: Tha na còdan aisig a bh’ agad cheana mì-dhligheach a-nis agus chaidh feadhainn ùra a ghintinn. title: Dh’atharraich còdan aisig an dearbhaidh dà-cheumnaich unlock_instructions: subject: 'Mastodon: Stiùireadh neo-ghlasaidh' @@ -68,9 +74,13 @@ gd: subject: 'Mastodon: Chaidh iuchair tèarainteachd a sguabadh às' title: Chaidh tè dhe na h-iuchraichean tèarainteachd agad a sguabadh às webauthn_disabled: + explanation: Chaidh an dearbhadh le iuchraichean tèarainteachd a chur à comas dhan chunntas agad. + extra: "’S urrainn dhut clàradh a-steach leis an tòcan a ghineas an aplacaid TOTP paidhrichte a-mhàin a-nis." subject: 'Mastodon: Tha dearbhadh le iuchraichean tèarainteachd à comas' title: Chaidh na h-iuchraichean tèarainteachd a chur à comas webauthn_enabled: + explanation: Chaidh an dearbhadh le iuchair tèarainteachd a chur an comas dhan chunntas agad. + extra: "’S urrainn dhut an iuchair tèarainteachd agad a chleachdadh airson clàradh a-steach a-nis." subject: 'Mastodon: Tha dearbhadh le iuchair tèarainteachd an comas' title: Chaidh na h-iuchraichean tèarainteachd a chur an comas omniauth_callbacks: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index ed4b4fb8c6e5c7..6746e813d84573 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -12,6 +12,7 @@ lv: last_attempt: Tev ir vēl viens mēģinājums, pirms tavs konts tiks bloķēts. locked: Tavs konts ir bloķēts. not_found_in_database: Nederīga %{authentication_keys} vai parole. + omniauth_user_creation_failure: Kļūda šīs identitātes konta izveidošanā. pending: Tavs konts joprojām tiek pārskatīts. timeout: Tava sesija ir beigusies. Lūdzu, pieraksties vēlreiz, lai turpinātu. unauthenticated: Lai turpinātu, tev ir jāpierakstās vai jāreģistrējas. @@ -37,7 +38,7 @@ lv: title: Parole nomainīta reconfirmation_instructions: explanation: Apstiprini jauno adresi, lai mainītu savu e-pastu. - extra: Ja šīs izmaiņas neesi veicis tu, lūdzu, ignorē šo e-pasta ziņojumu. Mastodon konta e-pasta adrese nemainīsies, kamēr nebūsi piekļuvis iepriekš norādītajai saitei. + extra: Ja šīs izmaiņas neveici Tu, lūgums neņemt vērā šo e-pasta ziņojumu. Mastodon konta e-pasta adrese netiks mainīta, līdz Tu izmantosi augstāk esošo saiti. subject: 'Mastodon: Apstiprini e-pastu %{instance}' title: Apstiprini e-pasta adresi reset_password_instructions: @@ -47,14 +48,19 @@ lv: subject: 'Mastodon: Norādījumi paroles atiestatīšanai' title: Paroles atiestatīšana two_factor_disabled: + explanation: Pieteikšanās tagad ir iespējama izmantojot tikai e-pasta adresi un paroli. subject: 'Mastodon: Divfaktoru autentifikācija atspējota' + subtitle: Tavam kontam tika atspējota divpakāpju autentifikācija. title: 2FA atspējota two_factor_enabled: + explanation: Būs nepieciešams TOTP lietotnes izveidots kods, lai pieteiktos. subject: 'Mastodon: Divfaktoru autentifikācija iespējota' + subtitle: Tavam kontam tika iespējota divpakāpju autentifikācija. title: 2FA iespējota two_factor_recovery_codes_changed: explanation: Iepriekšējie atkopšanas kodi ir atzīti par nederīgiem un ģenerēti jauni. subject: 'Mastodon: Divfaktoru atkopšanas kodi pārģenerēti' + subtitle: Iepriekšējie atkopšanas kodi tika padarīti par nederīgiem, un tika izveidoti jauni. title: 2FA atkopšanas kodi mainīti unlock_instructions: subject: 'Mastodon: Norādījumi atbloķēšanai' @@ -68,9 +74,13 @@ lv: subject: 'Mastodon: Drošības atslēga izdzēsta' title: Viena no tavām drošības atslēgām tika izdzēsta webauthn_disabled: + explanation: Tavam kontam tika atspējota autentifikācija ar drošības atslēgām. + extra: Pieteikšanās tagad ir iespējama izmantojot tikai TOTP lietotnes izveidotu kodu. subject: 'Mastodon: Autentifikācija ar drošības atslēgām ir atspējota' title: Drošības atslēgas atspējotas webauthn_enabled: + explanation: Tavam kontam tika iespējota drošības atslēgas autentifikācija. + extra: Drošības atslēgu tagad var izmantot, lai pieteiktos. subject: 'Mastodon: Drošības atslēgas autentifikācija iespējota' title: Drošības atslēgas iespējotas omniauth_callbacks: diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index 961778eaa50caf..2cd433c6e044c7 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -12,6 +12,7 @@ last_attempt: Du har ett forsøk igjen før kontoen din låses. locked: Kontoen din er låst. not_found_in_database: Ugyldig %{authentication_keys} eller passord. + omniauth_user_creation_failure: Feil ved opprettelse av konto for denne identiteten. pending: Kontoen din er fortsatt under gjennomgang. timeout: Økten din har utløpt. Logg inn igjen for å fortsette. unauthenticated: Du må logge inn eller registrere deg før du kan fortsette. diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index bc01b73ccfca26..b36416b31798ef 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -2,63 +2,66 @@ sk: devise: confirmations: - confirmed: Tvoja emailová adresa bola úspešne overená. - send_instructions: O niekoľko minút obdržíš email s pokynmi ako potvrdiť svoj účet. Prosím, skontroluj si aj zložku spam, ak sa k tebe toto potvrdenie nedostalo. - send_paranoid_instructions: Ak sa tvoja emailová adresa nachádza v našej databázi, o niekoľko minút obdržíš email s pokynmi ako potvrdiť svoj účet. Prosím, skontroluj aj zložku spam, ak sa k tebe toto potvrdenie nedostalo. + confirmed: Vaša e-mailová adresa bola úspešne potvrdená. + send_instructions: O niekoľko minút obdržíte e-mail s pokynmi na potvrdenie svojho účtu. Prosíme, skontrolujte si aj zložku spam, ak ste tento e-mail nedostali. + send_paranoid_instructions: Ak sa vaša e-mailová adresa nachádza v našej databáze, o niekoľko minút obdržíte e-mail s pokynmi na potvrdenie svojho účtu. Prosíme, skontrolujte aj zložku spam, ste tento e-mail nedostali. failure: - already_authenticated: Už si prihlásený/á. - inactive: Tvoj účet ešte nebol potvrdený. - invalid: Nesprávny %{authentication_keys}, alebo heslo. - last_attempt: Máš posledný pokus pred zamknutím tvojho účtu. - locked: Tvoj účet je zamknutý. - not_found_in_database: Nesprávny %{authentication_keys}, alebo heslo. + already_authenticated: Už ste sa prihlásili. + inactive: Váš účet ešte nie je aktivovaný. + invalid: Nesprávny %{authentication_keys} alebo heslo. + last_attempt: Máte posledný pokus, potom bude váš účet uzamknutý. + locked: Váš účet bol uzamknutý. + not_found_in_database: Nesprávny %{authentication_keys} alebo heslo. omniauth_user_creation_failure: Chyba pri vytváraní účtu pre túto identitu. - pending: Tvoj účet je stále prehodnocovaný. - timeout: Tvoja aktívna sezóna vypršala. Pre pokračovanie sa prosím prihlás znovu. - unauthenticated: K pokračovaniu sa musíš zaregistrovať alebo prihlásiť. - unconfirmed: Pred pokračovaním musíš potvrdiť svoj email. + pending: Váš účet stále kontrolujeme. + timeout: Vaše aktívne prihlásenie vypršalo. Pre pokračovanie sa, prosím, prihláste znovu. + unauthenticated: Pred pokračovaním sa musíte prihlásiť alebo zaregistrovať. + unconfirmed: Pred pokračovaním musíte potvrdiť svoj e-mail. mailer: confirmation_instructions: - action: Potvrď emailovú adresu - action_with_app: Potvrď a vráť sa na %{app} - explanation: S touto emailovou adresou si si vytvoril/a účet na %{host}. Si iba jeden klik od jeho aktivácie. Pokiaľ si to ale nebol/a ty, prosím ignoruj tento email. + action: Overiť e-mailovú adresu + action_with_app: Potvrdiť a vrátiť sa do %{app} + explanation: S touto e-mailovou adresou ste si vytvorili účet na %{host}. Od aktivácie vás delí jediné kliknutie. Ak ste to neboli vy, tento e-mail ignorujte. explanation_when_pending: S touto e-mailovou adresou ste požiadali o pozvánku na %{host}. Po potvrdení vašej e-mailovej adresy vašu žiadosť skontrolujeme. Môžete sa prihlásiť, aby ste zmenili svoje údaje alebo vymazali svoje konto, ale kým nebude vaše konto schválené, nebudete mať prístup k väčšine funkcií. Ak bude vaša žiadosť zamietnutá, vaše údaje budú odstránené, takže sa od vás nebudú vyžadovať žiadne ďalšie kroky. Ak ste to neboli vy, tento e-mail ignorujte. - extra_html: Prosím, pozri sa aj na pravidlá tohto servera, a naše užívaťeľské podiemky. + extra_html: Prosím, pozrite sa aj na pravidlá tohto servera a naše pravidlá používania. subject: 'Mastodon: Potvrdzovacie pokyny pre %{instance}' - title: Potvrď emailovú adresu + title: Overte svoj e-mail email_changed: - explanation: 'Emailová adresa tvojho účtu bude zmenená na:' - extra: Ak si nezmenil/a svoj email, je pravdepodobné, že niekto iný získal prístup k tvojmu účtu. Naliehavo preto prosím zmeň svoje heslo, alebo kontaktuj administrátora tohto serveru, pokiaľ si vymknutý/á zo svojho účtu. - subject: 'Mastodon: Emailová adresa bola zmenená' - title: Nová emailová adresa + explanation: 'E-mailová adresa vášho účtu bude zmenená na:' + extra: Ak ste svoj e-mail nezmenili vy, je pravdepodobné, že niekto iný získal prístup k vášmu účtu. Čo najskôr zmeňte svoje heslo alebo, pokiaľ sa neviete prihlásiť, kontaktujte administrátora serveru. + subject: 'Mastodon: E-mailová adresa bola zmenená' + title: Nová e-mailová adresa password_change: - explanation: Heslo k tvojmu účtu bolo zmenené. - extra: Ak si heslo nezmenil/a, je pravdepodobné, že niekto iný získal prístup k tvojmu účtu. Naliehavo preto prosím zmeň svoje heslo, alebo kontaktuj administrátora tohto serveru, pokiaľ si vymknutý/á zo svojho účtu. + explanation: Heslo k vášmu účtu bolo zmenené. + extra: Ak ste si heslo nezmenili vy, je pravdepodobné, že niekto iný získal prístup k vášmu účtu. Čo najskôr zmeňte svoje heslo alebo, pokiaľ sa neviete prihlásiť, kontaktujte administrátora serveru. subject: 'Mastodon: Heslo bolo zmenené' title: Heslo bolo zmenené reconfirmation_instructions: - explanation: Potvrď novú emailovú adresu na ktorú chceš zmeniť svoj email. - extra: Pokiaľ si túto akciu nevyžiadal/a, prosím ignoruj tento email. Emailová adresa pre tvoj Mastodon účet totiž nebude zmenená pokiaľ nepostúpiš na adresu uvedenú vyššie. - subject: 'Mastodon: Potvrď email pre %{instance}' - title: Over emailovú adresu + explanation: E-mail zmeníte potvrdením novej e-mailovej adresy. + extra: Pokiaľ ste túto akciu nevyžiadali vy, ignorujte tento email. E-mailová adresa pre váš účet na Mastodone totiž nebude zmenená, pokiaľ neprejdete na odkaz uvedený vyššie. + subject: 'Mastodon: Overte e-mail pre %{instance}' + title: Overte e-mailovú adresu reset_password_instructions: - action: Zmeň svoje heslo - explanation: Vyžiadal/a si si nové heslo pre svoj účet. - extra: Ak si túto akciu nevyžiadal/a, prosím ignoruj tento email. Tvoje heslo nebude zmenené pokiaľ nepostúpiš na adresu uvedenú vyššie a vytvoríš si nové. + action: Zmeniť heslo + explanation: Vyžiadali ste si pre svoj účet nové heslo. + extra: Ak ste túto akciu nevyžiadali vy, ignorujte tento email. Vaše heslo nebude zmenené, pokiaľ neprejdete na odkaz uvedený vyššie a nevytvoríte si nové heslo. subject: 'Mastodon: Pokyny pre obnovu hesla' - title: Nastav nové heslo + title: Obnova hesla two_factor_disabled: - explanation: Prihlásenie je teraz možné iba pomocou emailu a hesla. + explanation: Prihlásenie je teraz možné iba pomocou e-mailu a hesla. subject: 'Mastodon: Dvojfázové overovanie vypnuté' - subtitle: Dvoj-faktorové overenie bolo pre tvoj účet vypnuté. - title: Dvoj-faktorové overovanie vypnuté + subtitle: Dvojfázové overenie bolo pre váš účet vypnuté. + title: Dvojfaktorové overovanie vypnuté two_factor_enabled: + explanation: Na prihlásenie budete potrebovať kód vygenerovaný spárovanou aplikáciou pre overovanie. subject: 'Mastodon: Dvojfázové overovanie zapnuté' - title: Dvoj-faktorové overovanie zapnuté + subtitle: Dvojfázové overenie bolo pre váš účet zapnuté. + title: Dvojfaktorové overovanie zapnuté two_factor_recovery_codes_changed: - explanation: Predošlé obnovovacie kódy boli urobené neplatnými a boli vygenerované nové. - subject: 'Mastodon: dvojfázové zálohové kódy boli znovu vygenerované' - title: Obnovovacie kódy pre dvoj-faktorové overovanie zmenené + explanation: Predošlé obnovovacie kódy boli zneplatnené a boli vygenerované nové. + subject: 'Mastodon: Dvojfázové obnovovacie kódy boli znovu vygenerované' + subtitle: Predošlé obnovovacie kódy boli zneplatnené a boli vygenerované nové. + title: Obnovovacie kódy pre dvojfaktorové overovanie zmenené unlock_instructions: subject: 'Mastodon: Pokyny na odomknutie účtu' webauthn_credential: @@ -71,46 +74,50 @@ sk: subject: 'Mastodon: Bezpečnostný kľúč odstránený' title: Jeden z vašich bezpečnostných kľúčov bol odstránený webauthn_disabled: - subject: 'Mastodon: Overovanie s vypnutými bezpečnostnými kľúčmi' + explanation: Overenie bezpečnostnými kľúčmi bolo pre váš účet vypnuté. + extra: Odteraz sa môžete prihlásiť iba pomocou kódu vygenerovaného spárovanou aplikáciou pre overovanie. + subject: 'Mastodon: Overovanie s bezpečnostnými kľúčmi vypnuté' title: Bezpečnostné kľúče sú vypnuté webauthn_enabled: - subject: 'Mastodon: Povolené overovanie bezpečnostného kľúča' + explanation: Overenie bezpečnostnými kľúčmi bolo pre váš účet zapnuté. + extra: Odteraz môžete na prihlásenie použiť svoj bezpečnostný kľúč. + subject: 'Mastodon: Povolené overovanie bezpečnostným kľúčom' title: Povolené bezpečnostné kľúče omniauth_callbacks: - failure: Nebolo možné ťa overiť z %{kind}, lebo "%{reason}". + failure: 'Nebolo možné vás overiť z %{kind}, uvedený dôvod: „%{reason}“.' success: Úspešné overenie z účtu %{kind}. passwords: - no_token: Túto stránku nemôžeš navštíviť, ak neprichádzaš z emailu s pokynmi na obnovu hesla. Pokiaľ prichádzaš z tohto emailu, prosím uisti sa že si použil/a celú URL adresu z emailu. - send_instructions: Ak sa tvoja emailová adresa nachádza v databázi, tak o niekoľko minút obdržíš email s pokynmi ako nastaviť nové heslo. Ak máš pocit, že si email neobdržal/a, prosím skontroluj aj svoju spam zložku. - send_paranoid_instructions: Ak sa tvoja emailová adresa nachádza v databázi, za chvíľu obdržíš odkaz pre obnovu hesla na svoj email. Skontroluj ale prosím aj svoj spam, ak tento email nevidíš. - updated: Tvoje heslo bolo úspešne zmenené. Teraz si prihlásený/á. - updated_not_active: Tvoje heslo bolo úspešne zmenené. + no_token: Túto stránku nemôžete navštíviť, ak vás sem nepresmeroval e-mail s pokynmi na obnovu hesla. Pokiaľ prichádzate z tohto e-mailu, uistite sa, že ste použili celú adresu URL z e-mailu. + send_instructions: Ak sa vaša emailová adresa nachádza v databáze, o niekoľko minút dostanete e-mail s pokynmi na nastavenie nového hesla. Ak ste ho nedostali, skontrolujte aj priečinok pre spam. + send_paranoid_instructions: Ak sa vaša emailová adresa nachádza v databáze, o niekoľko minút dostanete e-mail s pokynmi na nastavenie nového hesla. Ak ste ho nedostali, skontrolujte aj priečinok pre spam. + updated: Vaše heslo bolo úspešne zmenené. Teraz ste sa prihlásili. + updated_not_active: Vaše heslo bolo úspešne zmenené. registrations: - destroyed: Dovidenia! Tvoj účet bol úspešne zrušený. Dúfame ale, že ťa tu opäť niekedy uvidíme. - signed_up: Vitaj! Tvoja registrácia bola úspešná. - signed_up_but_inactive: Registrácia bola úspešná. Avšak, účet ešte nebol aktivovaný, takže ťa nemožno prihlásiť. - signed_up_but_locked: Registroval/a si sa úspešné. Avšak, tvoj účet je zamknutý, takže ťa nemožno prihlásiť. - signed_up_but_pending: Na tvoj email bola odoslaná správa s odkazom na potvrdenie. Po tom, čo naňho klikneš, bude tvoje uchádzanie posúdené. Budeš informovaný, ak sa tvoja požiadavka schváli. - signed_up_but_unconfirmed: Správa s odkazom na potvrdenie registrácie bola odoslaná na tvoj email. Pre aktváciu účtu, následuj prosím daný odkaz. Takisto ale skontroluj aj svoju spam zložku, pokiaľ sa ti zdá, že si tento email nedostal/a. - update_needs_confirmation: Účet bol úspešne pozmenený, ale ešte potrebujeme overiť tvoju novú emailovú adresu. Pre overenie prosím klikni na link v správe ktorú si dostal/a na email. Takisto ale skontroluj aj svoju spam zložku, ak sa ti zdá, že si tento email nedostal/a. - updated: Tvoj účet bol úspešne aktualizovaný. + destroyed: Dovidenia! Váš účet bol úspešne zrušený. Dúfame ale, že vás tu opäť niekedy uvidíme. + signed_up: Vitajte! Vaša registrácia bola úspešná. + signed_up_but_inactive: Registrácia bola úspešná. Avšak váš účet ešte nebol aktivovaný, takže sa nemôžete prihlásiť. + signed_up_but_locked: Registrácia bola úspešná. Avšak váš účet je zamknutý, takže sa nemôžete prihlásiť. + signed_up_but_pending: Na váš e-mail bola odoslaná správa s odkazom na overenie. Po kliknutí na odkaz vašu prihlášku skontrolujeme. O jej schválení vás budeme informovať. + signed_up_but_unconfirmed: Na váš e-mail bola odoslaná správa s odkazom na overenie. Svoj účet aktivujte kliknutím na odkaz. Ak ste e-mail nedostali, skontrolujte svoj priečinok pre spam. + update_needs_confirmation: Váš účet bol úspešne zmenený, ale ešte potrebujeme overiť vašu novú e-mailovú adresu. Overíte ju kliknutím na potvrdzovací odkaz zaslaný na váš e-mail. Ak ste e-mail nedostali, skontrolujte svoj priečinok pre spam. + updated: Váš účet bol úspešne aktualizovaný. sessions: - already_signed_out: Už si sa úspešne odhlásil/a. - signed_in: Prihlásil/a si sa úspešne. - signed_out: Odhlásil/a si sa úspešne. + already_signed_out: Úspešne ste sa odhlásili. + signed_in: Úspešne ste sa prihlásili. + signed_out: Úspešne ste sa odhlásili. unlocks: - send_instructions: O niekoľko minút obdržíš email s pokynmi, ako nastaviť nové heslo. Prosím, skontroluj ale aj svoju spam zložku, pokiaľ sa ti zdá, že si tento email nedostal/a. - send_paranoid_instructions: Ak tvoj účet existuje, o niekoľko minút obdržíš email s pokynmi ako si ho odomknúť. Prosím, skontroluj ale aj svoju spam zložku, pokiaľ sa ti zdá, že si tento email nedostal/a. - unlocked: Tvoj účet bol úspešne odomknutý. Pre pokračovanie sa prosím prihlás. + send_instructions: O niekoľko minút obdržíte e-mail s pokynmi na odomknutie svojho účtu. Prosíme, skontrolujte si aj zložku spam, ak ste tento e-mail nedostali. + send_paranoid_instructions: Ak váš účet existuje, o niekoľko minút obdržíte e-mail s pokynmi na jeho odomknutie. Prosíme, skontrolujte si aj zložku spam, ak ste tento e-mail nedostali. + unlocked: Váš účet bol úspešne odomknutý. Ak chcete pokračovať, prihláste sa. errors: messages: - already_confirmed: bol už potvrdený, skús sa prihlásiť - confirmation_period_expired: musí byť potvrdený do %{period}, prosím požiadaj o nový - expired: vypŕšal, prosím, vyžiadaj si nový + already_confirmed: bol už potvrdený, skúste sa prihlásiť + confirmation_period_expired: musí byť potvrdený do %{period}, požiadajte o nový + expired: vypršal, vyžiadajte si nový not_found: nenájdený not_locked: nebol zamknutý not_saved: - few: "%{count} chýb zabránilo uloženiu tohto %{resource}:" - many: "%{count} chýb zabránilo uloženiu tohto %{resource}:" - one: '1 chyba zabránila uloženiu tohto %{resource}:' - other: "%{count} chyby zabránili uloženiu tohto %{resource}:" + few: "%{count} chyby zabránili uloženiu tohto parametra %{resource}:" + many: "%{count} chýb zabránilo uloženiu tohto parametra %{resource}:" + one: '1 chyba zabránila uloženiu parametra %{resource}:' + other: "%{count} chýb zabránilo uloženiu tohto parametra %{resource}:" diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml index 9300493fa0e3a7..27d424f6189463 100644 --- a/config/locales/devise.sv.yml +++ b/config/locales/devise.sv.yml @@ -12,6 +12,7 @@ sv: last_attempt: Du har ytterligare ett försök innan ditt konto är låst. locked: Ditt konto är låst. not_found_in_database: Ogiltigt %{authentication_keys} eller lösenord. + omniauth_user_creation_failure: Fel vid skapande av ett konto för denna identitet. pending: Ditt konto granskas fortfarande. timeout: Din session har avslutats. Vänligen logga in igen för att fortsätta. unauthenticated: Du måste logga in eller registrera dig innan du fortsätter. @@ -74,6 +75,7 @@ sv: title: En av dina säkerhetsnycklar har raderats webauthn_disabled: explanation: Autentisering med säkerhetsnycklar har inaktiverats för ditt konto. + extra: Inloggning är nu möjligt med endast den token som genereras av den parade TOTP-appen. subject: 'Mastodon: Autentisering med säkerhetsnycklar är inaktiverat' title: Säkerhetsnycklar inaktiverade webauthn_enabled: diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 0356c22ecbec51..5aa5daef3f6d16 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -22,12 +22,12 @@ lv: authorize: Autorizēt cancel: Atcelt destroy: Iznīcināt - edit: Rediģēt + edit: Labot submit: Apstiprināt confirmations: destroy: Vai esi pārliecināts? edit: - title: Rediģēt pieteikumu + title: Labot lietotni form: error: Hmm! Pārbaudi, vai tavā veidlapā nav kļūdu help: @@ -72,7 +72,7 @@ lv: revoke: Vai esi pārliecināts? index: authorized_at: Autorizētas %{date} - description_html: Šīs ir lietojumprogrammas, kas var piekļūt tavam kontam, izmantojot API. Ja ir lietojumprogrammas, kuras šeit neatpazīsti, vai lietojumprogramma nedarbojas pareizi, vari atsaukt tām piekļuvi. + description_html: Šīs ir lietotnes, kas var piekļūt Tavam kontam ar API. Ja šeit ir lietotnes, kuras neatpazīsti, vai lietotne darbojas ne tā, kā paredzēts, vari atsaukt tās piekļuvi. last_used_at: Pēdējo reizi lietotas %{date} never_used: Nekad nav lietotas scopes: Atļaujas diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml index 91c9430b3029c5..face9db96668f5 100644 --- a/config/locales/doorkeeper.sk.yml +++ b/config/locales/doorkeeper.sk.yml @@ -5,7 +5,7 @@ sk: doorkeeper/application: name: Názov aplikácie redirect_uri: Presmerovacia URI - scopes: Pôsobnosť + scopes: Povolenia website: Webstránka aplikácie errors: models: @@ -19,85 +19,85 @@ sk: doorkeeper: applications: buttons: - authorize: Autorizuj - cancel: Zruš + authorize: Povoliť + cancel: Zrušiť destroy: Zničiť - edit: Uprav - submit: Pošli + edit: Upraviť + submit: Odoslať confirmations: - destroy: Si si istý/á? + destroy: Naozaj chcete pokračovať? edit: - title: Uprav aplikáciu + title: Upraviť aplikáciu form: - error: No teda! Skontroluj formulár pre prípadné chyby + error: Ups! Skontrolujte formulár pre prípadné chyby help: - native_redirect_uri: Použi %{native_redirect_uri} pre lokálne testy - redirect_uri: Použi jeden riadok pre každú URI - scopes: Oprávnenia oddeľuj medzerami. Nechaj prázdne pre štandardné oprávnenia. + native_redirect_uri: Použite %{native_redirect_uri} pre lokálne testy + redirect_uri: Použite jeden riadok pre každú URI + scopes: Povolenia oddeľujte medzerami. Nechajte prázdne pre štandardné povolenia. index: application: Aplikácia callback_url: Návratová URL - delete: Vymaž + delete: Vymazať empty: Nemáte žiadne aplikácie. name: Názov new: Nová aplikácia - scopes: Oprávnenia - show: Ukáž - title: Tvoje aplikácie + scopes: Povolenia + show: Zobraziť + title: Vaše aplikácie new: title: Nová aplikácia show: - actions: Úkony + actions: Akcie application_id: Kľúč klienta - callback_urls: Návratové URL adresy - scopes: Oprávnenia + callback_urls: Návratové adresy URL + scopes: Povolenia secret: Tajné slovo klienta title: 'Aplikácia: %{name}' authorizations: buttons: - authorize: Over - deny: Zamietni + authorize: Povoliť + deny: Zakázať error: title: Nastala chyba new: - prompt_html: "%{client_name} žiada o povolenie na prístup k vášmu účtu. Ide o aplikáciu tretej strany. Ak jej nedôverujete, nemali by ste ju autorizovať." + prompt_html: "%{client_name} žiada o povolenie na prístup k vášmu účtu. Ide o aplikáciu tretej strany. Ak jej nedôverujete, nemali by ste ju povoliť." review_permissions: Preskúmať povolenia - title: Je potrebná autorizácia + title: Je potrebné schválenie show: - title: Skopíruj tento autorizačný kód a vlož ho do aplikácie. + title: Skopírujte tento overovací kód a vložte ho do aplikácie. authorized_applications: buttons: revoke: Zrušiť oprávnenie confirmations: - revoke: Si si istý? + revoke: Naozaj chcete pokračovať? index: - authorized_at: Autorizované dňa %{date} + authorized_at: Povolené dňa %{date} description_html: Ide o aplikácie, ktoré môžu pristupovať k vášmu účtu pomocou rozhrania API. Ak sa tu nachádzajú aplikácie, ktoré nepoznáte, alebo ak sa niektorá aplikácia správa nesprávne, môžete jej zrušiť prístup. last_used_at: Posledne použitý dňa %{date} never_used: Nikdy nepoužité - scopes: Oprávnenia - superapp: Interný - title: Tvoje povolené aplikácie + scopes: Povolenia + superapp: Interné + title: Vaše povolené aplikácie errors: messages: - access_denied: Prístup zamietnutý. - credential_flow_not_configured: Resource Owner Password Credentials zlyhal lebo Doorkeeper.configure.resource_owner_from_credentials nebol nakonfigurovaný. - invalid_client: Overenie klienta zlyhalo. Neznámy klient, chýbajú údaje o klientovi alebo nepodporovaná metóda overovania. - invalid_grant: Dané oprávnenie je neplatné, vypršané, zrušené, nesúhlasí s presmerovacou URI použitou v autorizačnej požiadavke, alebo bolo vydané pre iný klient. + access_denied: Vlastník zdroja alebo autorizačný server žiadosť zamietol. + credential_flow_not_configured: Protokol poverení vlastníka prostriedkov narazil na chybu z dôvodu nesprávnej konfigurácie Doorkeeper.configure.resource_owner_from_credentials. + invalid_client: Overenie klienta zlyhalo z dôvodu neznámeho klienta, nebolo zahrnuté overenie klienta alebo nie je podporovaná metóda overovania. + invalid_grant: Dané povolenie je neplatné, vypršalo, bolo zrušené, nesúhlasí s presmerovacou URI použitou v autorizačnej požiadavke alebo bolo vydané pre iného klienta. invalid_redirect_uri: Presmerovacia URI je neplatná. invalid_request: missing_param: 'Chýba požadovaný parameter: %{value}.' - request_not_authorized: Žiadosť je potrebné autorizovať. Chýba požadovaný parameter pre autorizáciu žiadosti alebo je neplatný. + request_not_authorized: Žiadosť je potrebné schváliť. Chýba požadovaný parameter pre schválenie žiadosti alebo je neplatný. unknown: V požiadavke chýba požadovaný parameter, obsahuje nepodporovanú hodnotu parametra alebo je inak chybne vytvorená. invalid_resource_owner: Uvedené prihlasovacie údaje sú neplatné alebo nenájdené invalid_scope: Požadovaný rozsah je neplatný, neznámy alebo poškodený. invalid_token: expired: Prístupový token expiroval - revoked: Prístupový token bol odňatý + revoked: Prístupový token bol odvolaný unknown: Prístupový token je neplatný - resource_owner_authenticator_not_configured: Resource Owner zlyhal pretože Doorkeeper.configure.resource_owner_authenticator nebol nakonfigurovaný. - server_error: Nastala neočakávaná chyba na autorizačnom serveri ktorá zabránila vykonať požiadavku. - temporarily_unavailable: Autorizačný server ťa teraz nemôže obslúžiť, pretože prebieha údržba alebo je dočasne preťažený. + resource_owner_authenticator_not_configured: Vyhľadávanie vlastníkov zdrojov zlyhalo, pretože Doorkeeper.configure.resource_owner_authenticator nie je nakonfigurovaný. + server_error: Nastala neočakávaná chyba na autorizačnom serveri, ktorá zabránila vykonať požiadavku. + temporarily_unavailable: Autorizačný server požiadavku teraz nemôže spracovať, pretože prebieha údržba alebo je dočasne preťažený. unauthorized_client: Klient nie je autorizovaný vykonať danú požiadavku týmto spôsobom. unsupported_grant_type: Tento typ oprávnenia nie je podporovaný autorizačným serverom. unsupported_response_type: Overovací server nepodporuje tento druh odpovede. @@ -122,22 +122,22 @@ sk: admin/accounts: Správa účtov admin/all: Všetky administratívne funkcie admin/reports: Správa reportov - all: Plný prístup k tvojmu Mastodon účtu + all: Plný prístup k vášmu Mastodon účtu blocks: Blokovania bookmarks: Záložky conversations: Konverzácie - crypto: Šifrovanie End-to-end - favourites: Obľúbené + crypto: Šifrovanie end-to-end + favourites: Ohviezdičkované filters: Filtre - follow: Sledovanie, stlmenie a blokovanie + follow: Sledovania, stíšenia a blokovania follows: Sledovania lists: Zoznamy media: Mediálne prílohy - mutes: Nevšímané - notifications: Oznámenia - push: Push notifikácie - reports: Reporty - search: Hľadať + mutes: Stíšenia + notifications: Upozornenia + push: Upozornenia push + reports: Hlásenia + search: Vyhľadávanie statuses: Príspevky layouts: admin: @@ -145,51 +145,51 @@ sk: applications: Aplikácie oauth2_provider: Poskytovateľ OAuth2 application: - title: Požadovaná OAuth autorizácia + title: Požadovaná autorizácia OAuth scopes: - admin:read: prezeraj všetky dáta na serveri - admin:read:accounts: prezeraj chúlostivé informácie na všetkých účtoch + admin:read: čítať všetky dáta na serveri + admin:read:accounts: čítať citlivé informácie všetkých účtov admin:read:canonical_email_blocks: čítať citlivé informácie všetkých kanonických e-mailových blokov admin:read:domain_allows: čítať citlivé informácie zo všetkých povolených domén admin:read:domain_blocks: čítať citlivé informácie zo všetkých blokov domén - admin:read:email_domain_blocks: čítať citlivé informácie zo všetkých blokov emailových domén + admin:read:email_domain_blocks: čítať citlivé informácie zo všetkých blokov e-mailových domén admin:read:ip_blocks: čítať citlivé informácie zo všetkých blokov IP - admin:read:reports: čítaj chulostivé informácie o všetkých hláseniach a nahlásených účtoch - admin:write: uprav všetky dáta na serveri - admin:write:accounts: urob moderovacie úkony na účtoch - admin:write:canonical_email_blocks: vykonať akcie moderácie na kanonických emailových blokoch - admin:write:domain_allows: vykonať akcie moderácie na povolených doménach - admin:write:domain_blocks: vykonať akcie moderácie na doménových blokoch - admin:write:email_domain_blocks: vykonať akcie moderácie na blokoch emailových domén - admin:write:ip_blocks: vykonať akcie moderácie na blokoch IP - admin:write:reports: urob moderovacie úkony voči hláseniam - crypto: používať end-to-end šifrovanie - follow: uprav vzťahy svojho účtu - push: dostávaj oboznámenia ohľadom tvojho účtu na obrazovku - read: prezri si všetky dáta ohľadom svojho účetu - read:accounts: prezri si informácie o účte - read:blocks: prezri svoje bloky - read:bookmarks: pozri svoje záložky - read:favourites: zobraziť vaše obľúbené - read:filters: prezri svoje filtrovanie - read:follows: prezri si svoje sledovania - read:lists: prezri si svoje zoznamy - read:mutes: prezri svoje utíšenia - read:notifications: zhliadni svoje oboznámenia - read:reports: prezri svoje reporty - read:search: vyhľadvávaj v rámci seba - read:statuses: zhliadni všetky príspevky - write: upraviť všetky dáta tvojho účtu - write:accounts: uprav svoj profil - write:blocks: blokuj účty a domény - write:bookmarks: pridaj si príspevky k záložkám - write:conversations: stíš a vymaž konverzácie - write:favourites: obľúbené príspevky - write:filters: vytvor roztriedenie - write:follows: následuj ľudí - write:lists: vytvor listy - write:media: nahraj mediálne súbory - write:mutes: stíš diskusie, aj zapojených užívateľov - write:notifications: vyčisti oboznámenia - write:reports: nahlás iných užívateľov - write:statuses: publikuj príspevky + admin:read:reports: čítať citlivé informácie o všetkých hláseniach a nahlásených účtoch + admin:write: upravovať všetky dáta na serveri + admin:write:accounts: vykonávať moderovacie úkony na účtoch + admin:write:canonical_email_blocks: vykonávať moderovacie akcie na kanonických e-mailových blokoch + admin:write:domain_allows: vykonávať moderovacie akcie na povolených doménach + admin:write:domain_blocks: vykonávať moderovacie akcie na doménových blokoch + admin:write:email_domain_blocks: vykonávať moderovacie akcie na blokoch e-mailových domén + admin:write:ip_blocks: vykonávať moderovacie akcie na blokoch IP + admin:write:reports: vykonávať moderovacie akcie voči hláseniam + crypto: používať šifrovanie end-to-end + follow: upravovať vzťahy medzi účtami + push: dostávať vaše upozornenia push + read: čítať všetky údaje vášho účtu + read:accounts: čítať informácie o účtoch + read:blocks: čítať blokovania + read:bookmarks: čítať vaše záložky + read:favourites: čítať vaše ohviezdičkované + read:filters: čítať vaše filtre + read:follows: čítať vaše sledovania + read:lists: čítať vaše zoznamy + read:mutes: čítať vaše stíšenia + read:notifications: čítať vaše upozornenia + read:reports: čítať vaše hlásenia + read:search: vyhľadávať vo vašom mene + read:statuses: čítať všetky príspevky + write: upravovať všetky údaje vášho účtu + write:accounts: upravovať váš profil + write:blocks: blokovať účty a domény + write:bookmarks: pridávať príspevky k záložkám + write:conversations: stíšiť a mazať konverzácie + write:favourites: hviezdičkovať príspevky + write:filters: vytvárať filtre + write:follows: sledovať účty + write:lists: vytvárať zoznamy + write:media: nahrávať mediálne súbory + write:mutes: stíšiť účty a konverzácie + write:notifications: vyčistiť vaše upozornenia + write:reports: nahlasovať ostatných + write:statuses: zverejňovať príspevky diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 2dde5f63227619..47a15e1b8a7bad 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -15,7 +15,7 @@ tr: fragment_present: parça içeremez. invalid_uri: geçerli bir URL olmalıdır. relative_uri: mutlaka bir URL olmalıdır. - secured_uri: HTTPS/SSL URI olması gerekir. + secured_uri: bir HTTPS/SSL URI olması gerekir. doorkeeper: applications: buttons: @@ -161,7 +161,7 @@ tr: admin:write:domain_allows: alan adı izinleri için denetleme eylemleri gerçekleştirin admin:write:domain_blocks: alan adı engellemeleri için denetleme eylemleri gerçekleştirin admin:write:email_domain_blocks: e-posta alan adı engellemeleri için denetleme eylemleri gerçekleştirin - admin:write:ip_blocks: IP blokları üzerinde moderasyon eylemleri gerçekleştir + admin:write:ip_blocks: ıp blokları üzerinde moderasyon eylemleri gerçekleştir admin:write:reports: raporlarda denetleme eylemleri gerçekleştirin crypto: uçtan uca şifreleme kullan follow: hesap ilişkilerini değiştirin diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index 8ceaf36f3c6019..65926dfeef364a 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -104,7 +104,7 @@ zh-TW: flash: applications: create: - notice: 已建立應用程式。 + notice: 已新增應用程式。 destroy: notice: 已刪除應用程式。 update: @@ -185,9 +185,9 @@ zh-TW: write:bookmarks: 書籤狀態 write:conversations: 靜音及刪除對話 write:favourites: 加到最愛 - write:filters: 建立過濾條件 + write:filters: 新增過濾條件 write:follows: 跟隨其他人 - write:lists: 建立列表 + write:lists: 新增列表 write:media: 上傳媒體檔案 write:mutes: 靜音使用者及對話 write:notifications: 清除您的通知 diff --git a/config/locales/el.yml b/config/locales/el.yml index 12d70df976ee50..1b7dcddc6fc39c 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1703,8 +1703,6 @@ el: silence: Περιορισμένος λογαριασμός suspend: Λογαριασμός σε αναστολή welcome: - edit_profile_action: Στήσιμο προφίλ - edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν. explanation: Μερικές συμβουλές για να ξεκινήσεις subject: Καλώς ήρθες στο Mastodon title: Καλώς όρισες, %{name}! diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index ac7e5082760e9f..292365ed560c10 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1837,8 +1837,6 @@ en-GB: silence: Account limited suspend: Account suspended welcome: - edit_profile_action: Setup profile - edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you. explanation: Here are some tips to get you started subject: Welcome to Mastodon title: Welcome aboard, %{name}! diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 4e518cd194eeb7..9d27dace972cf7 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1759,8 +1759,6 @@ eo: silence: Konto limigita suspend: Konto suspendita welcome: - edit_profile_action: Agordi profilon - edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli. explanation: Jen kelkaj konsiloj por helpi vin komenci subject: Bonvenon en Mastodon title: Bonvenon, %{name}! diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 06bacc79d1682a..398345d8c8239a 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1726,10 +1726,10 @@ es-AR: keep_pinned_hint: No elimina ninguno de tus mensajes fijados keep_polls: Conservar encuestas keep_polls_hint: No elimina ninguna de tus encuestas - keep_self_bookmark: Conservar mensajes que marcaste como favoritos - keep_self_bookmark_hint: No elimina tus propios mensajes si los marcaste como favoritos - keep_self_fav: Conservar mensajes marcados como favoritos - keep_self_fav_hint: No elimina tus propios mensajes si los marcaste como favoritos + keep_self_bookmark: Conservar mensajes que enviaste a Marcadores + keep_self_bookmark_hint: No elimina tus propios mensajes si los enviaste a Marcadores + keep_self_fav: Conservar mensajes que enviaste a Favoritos + keep_self_fav_hint: No elimina tus propios mensajes si los enviaste a Favoritos min_age: '1209600': 2 semanas '15778476': 6 meses @@ -1842,9 +1842,42 @@ es-AR: silence: Cuenta limitada suspend: Cuenta suspendida welcome: - edit_profile_action: Configurar perfil - edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte. + apps_android_action: Conseguila en Google Play + apps_ios_action: Descargala desde la App Store + apps_step: Descargá nuestras aplicaciones oficiales. + apps_title: Aplicaciones de Mastodon + checklist_subtitle: 'Vamos a iniciarte en esta nueva experiencia social:' + checklist_title: Repaso de bienvenida + edit_profile_action: Personalizar + edit_profile_step: Completá tu perfil para aumentar las posibilidades de interacción. + edit_profile_title: Personalizá tu perfil explanation: Aquí hay algunos consejos para empezar + feature_action: Aprendé más + feature_audience: Mastodon te ofrece la posibilidad única de gestionar tu audiencia sin intermediarios. Mastodon desplegado en tu propia infraestructura te permite seguir a otras cuentas, y que te sigan desde cualquier otro servidor en línea de Mastodon y no estar bajo el control de nadie más, excepto el tuyo. + feature_audience_title: Construí tu audiencia en confianza + feature_control: Vos sabés bien que querés tener en tu línea temporal principal. Nada de algoritmos o publicidades que desperdicien tu tiempo. Seguí cualquier cuenta de cualquier servidor de Mastodon desde la tuya propia y recibí sus mensajes en orden cronológico, haciendo tu espacio de Internet un lugar más personalizado. + feature_control_title: Tené el control de tu propia línea temporal + feature_creativity: Mastodon soporta mensajes con audio, videos e imágenes, descripciones de accesibilidad, encuestas, advertencias de contenido, avatares animados, emojis personalizables, control de recorte de miniaturas, y más; todo para ayudarte a expresarte en línea. Ya sea que estés publicando tu arte, tu música o tu podcast, Mastodon está ahí para vos. + feature_creativity_title: Creatividad sin paralelos + feature_moderation: Mastodon vuelve a poner el poder de decisión en tus manos. Cada servidor crea sus propias reglas y regulaciones, las cuales se aplican localmente y no de arriba hacia abajo como las redes sociales corporativas, volviendo a Mastodon la red social más flexible en respuesta a las necesidades de diferentes grupos de personas. Unite a un servidor con cuyas reglas estés de acuerdo, o montá tu propio servidor. + feature_moderation_title: Moderando como debería ser + follow_action: Seguir + follow_step: Seguir cuentas interesantes es de lo que se trata Mastodon. + follow_title: Personalizá tu línea de tiempo principal + follows_subtitle: Seguí cuentas populares + follows_title: A quién seguir + follows_view_more: Encontrá más cuentas para seguir + hashtags_recent_count: "%{people} cuentas en los últimos %{days} días" + hashtags_subtitle: Explora las tendencias de los últimos 2 días + hashtags_title: Etiquetas en tendencia + hashtags_view_more: Ver más etiquetas en tendencias + post_action: Redactar + post_step: Decile "Hola" al mundo con textos, fotos, videos o encuestas. + post_title: Escribí tu primer mensaje + share_action: Compartir + share_step: Hacé que tus amistades sepan cómo encontrarte en Mastodon. + share_title: Compartí tu perfil de Mastodon + sign_in_action: Iniciá sesión subject: Bienvenido a Mastodon title: "¡Bienvenido a bordo, %{name}!" users: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 4d2e8ff2573e00..0948e8d434142c 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -767,7 +767,7 @@ es-MX: disabled: A nadie users: Para los usuarios locales que han iniciado sesión registrations: - moderation_recommandation: Por favor, ¡asegúrate de tener un equipo de moderación adecuado y reactivo antes de abrir los registros a todo el mundo! + moderation_recommandation: "¡Por favor, asegúrate de contar con un equipo de moderación adecuado y activo antes de abrir el registro al público!" preamble: Controla quién puede crear una cuenta en tu servidor. title: Registros registrations_mode: @@ -775,7 +775,7 @@ es-MX: approved: Se requiere aprobación para registrarse none: Nadie puede registrarse open: Cualquiera puede registrarse - warning_hint: Recomendamos el uso de “Se requiere aprobación para registrarse” a menos que estés seguro de que tu equipo de moderación puede manejar el spam y los registros maliciosos en un tiempo razonable. + warning_hint: Recomendamos el uso de la "Aprobación requerida para el registro", a menos de que confíes en que tu equipo de moderación puede manejar el spam y los registros maliciosos en un tiempo razonable. security: authorized_fetch: Requerir autenticación de servidores federados authorized_fetch_hint: Requerir autenticación de servidores federados permite un cumplimiento más estricto tanto de los bloqueos a nivel de usuario como a nivel de servidor. Sin embargo, esto se produce a costa de una penalización en el rendimiento, reduce el alcance de tus respuestas y puede introducir problemas de compatibilidad con algunos servicios federados. Además, esto no impedirá que actores dedicados obtengan tus cuentas y publicaciones públicas. @@ -969,7 +969,7 @@ es-MX: webhook: Webhook admin_mailer: auto_close_registrations: - body: Debido a la falta de moderadores activos, los registros en %{instance} han sido cambiados automáticamente para requerir revisión manual, para evitar que %{instance} se utilice potencialmente como plataforma por malos actores. Puedes volver a cambiarlo para abrir los registros en cualquier momento. + body: Debido al faltante de actividad reciente de moderación, los registros en %{instance} han cambiado automáticamente para requerir la revisión manial, para evitar que %{instance} se utilice como una plataforma para potenciales malos actores. Puedes revertir este cambio en los registros en cualquier momento. subject: Se ha cambiado automáticamente el registro de %{instance} para requerir aprobación new_appeal: actions: @@ -1842,9 +1842,42 @@ es-MX: silence: Cuenta limitada suspend: Cuenta suspendida welcome: - edit_profile_action: Configurar el perfil - edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. + apps_android_action: Consíguela en Google Play + apps_ios_action: Descargar en el App Store + apps_step: Descarga nuestras aplicaciones oficiales. + apps_title: Aplicaciones de Mastodon + checklist_subtitle: 'Comencemos en esta nueva frontera social:' + checklist_title: Lista de bienvenida + edit_profile_action: Personalizar + edit_profile_step: Aumenta tus interacciones con un perfil completo. + edit_profile_title: Personaliza tu perfil explanation: Aquí hay algunos consejos para empezar + feature_action: Leer más + feature_audience: Mastodon te proporciona una posibilidad única de gestionar tu audiencia sin intermediarios. El despliegue de Mastodon en tu propia infraestructura te permite seguir y ser seguido desde cualquier servidor de Mastodon que se encuentre en línea y no está bajo el control de nadie más que tú. + feature_audience_title: Construye tu audiencia con confianza + feature_control: Tú sabes lo que quieres ver en tu página principal. Nada de algoritmos y publicidad para desperdiciar tu tiempo. Sigue a quien quieras a través de cualquier servidor de Mastodon y recibe sus publicaciones en orden cronológico. Haz tu rincón de internet un poco más como tú. + feature_control_title: Mantente en control de tu línea de tiempo + feature_creativity: Mastodon soporta mensajes de audio, vídeo e imágenes, descripciones de accesibilidad, encuestas, advertencias de contenido, avatares animados, emojis personalizados, recortes de miniatura, y más, para ayudarte a expresarte en línea. Ya sea publicando tu arte, tu música o tu podcast, Mastodon está ahí para ti. + feature_creativity_title: Creatividad inigualable + feature_moderation: Mastodon vuelve a poner la toma de decisiones en tus manos. Cada servidor crea sus propias reglas y reglamentos, que se aplican localmente y no globalmente como en redes sociales corporativas, lo que resulta en la mayor flexibilidad para responder a las necesidades de diferentes grupos de personas. Únete a un servidor con las reglas con las que esté sde acuerdo, o aloja el tuyo propio. + feature_moderation_title: La moderación como debería ser + follow_action: Seguir + follow_step: Seguir a personas interesantes es de lo que trata Mastodon. + follow_title: Personaliza tu línea de inicio + follows_subtitle: Seguir cuentas conocidas + follows_title: A quién seguir + follows_view_more: Ver más personas para seguir + hashtags_recent_count: "%{people} personas en los últimos %{days} días" + hashtags_subtitle: Explora las tendencias de los últimos 2 días + hashtags_title: Etiquetas en tendencia + hashtags_view_more: Ver más etiquetas en tendencia + post_action: Redactar + post_step: Di hola al mundo con texto, fotos, vídeos o encuestas. + post_title: Escribe tu primera publicación + share_action: Compartir + share_step: Dile a tus amigos cómo encontrarte en Mastodon. + share_title: Comparte tu perfil de Mastodon + sign_in_action: Regístrate subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/es.yml b/config/locales/es.yml index 5204b116e349aa..946ba1cbebeb6f 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1705,9 +1705,9 @@ es: direct: Directa private: Sólo mostrar a seguidores private_long: Solo mostrar a tus seguidores - public: Público + public: Pública public_long: Todos pueden ver - unlisted: Público, pero no mostrar en la historia federada + unlisted: Pública, pero no mostrar en la historia federada unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas statuses_cleanup: enabled: Borrar automáticamente publicaciones antiguas @@ -1842,9 +1842,42 @@ es: silence: Cuenta limitada suspend: Cuenta suspendida welcome: - edit_profile_action: Configurar el perfil - edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. + apps_android_action: Consíguela en Google Play + apps_ios_action: Descargar en la App Store + apps_step: Descarga nuestras aplicaciones oficiales. + apps_title: Aplicaciones para Mastodon + checklist_subtitle: 'Vamos a empezar en esta nueva frontera social:' + checklist_title: Lista de bienvenida + edit_profile_action: Personalizar + edit_profile_step: Aumenta tus interacciones completando tu perfil. + edit_profile_title: Personaliza tu perfil explanation: Aquí hay algunos consejos para empezar + feature_action: Saber más + feature_audience: Mastodon te ofrece una posibilidad única de gestionar tu audiencia sin intermediarios. Mastodon desplegado en tu propia infraestructura te permite seguir y ser seguido desde cualquier otro servidor Mastodon en línea y no está bajo el control de ningún tercero. + feature_audience_title: Construye tu audiencia con confianza + feature_control: Tú sabes lo que quieres ver en tu página principal. Nada de algoritmos y publicidad para desperdiciar tu tiempo. Sigue a quien quieras a través de cualquier servidor de Mastodon y recibe sus publicaciones en orden cronológico. Haz tu rincón de internet un poco más como tú. + feature_control_title: Mantente en control de tu línea de tiempo + feature_creativity: Mastodon soporta mensajes de audio, vídeo e imágenes, descripciones de accesibilidad, encuestas, advertencias de contenido, avatares animados, emojis personalizados, recortes de miniatura, y más, para ayudarte a expresarte en línea. Ya sea publicando tu arte, tu música o tu podcast, Mastodon está ahí para ti. + feature_creativity_title: Creatividad inigualable + feature_moderation: Mastodon vuelve a poner la toma de decisiones en tus manos. Cada servidor crea sus propias reglas y reglamentos, que se aplican localmente y no globalmente como en redes sociales corporativas, lo que resulta en la mayor flexibilidad para responder a las necesidades de diferentes grupos de personas. Únete a un servidor con las reglas con las que esté sde acuerdo, o aloja el tuyo propio. + feature_moderation_title: La moderación como debería ser + follow_action: Seguir + follow_step: Seguir a personas interesantes es de lo que trata Mastodon. + follow_title: Personaliza tu línea de inicio + follows_subtitle: Seguir cuentas conocidas + follows_title: A quién seguir + follows_view_more: Ver más personas para seguir + hashtags_recent_count: "%{people} personas en los últimos %{days} días" + hashtags_subtitle: Explora las tendencias de los últimos 2 días + hashtags_title: Etiquetas en tendencia + hashtags_view_more: Ver más etiquetas en tendencia + post_action: Redactar + post_step: Di hola al mundo con texto, fotos, vídeos o encuestas. + post_title: Escribe tu primera publicación + share_action: Compartir + share_step: Dile a tus amigos cómo encontrarte en Mastodon. + share_title: Comparte tu perfil de Mastodon + sign_in_action: Regístrate subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/et.yml b/config/locales/et.yml index 6bdb54a50eed51..cd944d9c199f26 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -767,6 +767,7 @@ et: disabled: Mitte kellelegi users: Sisseloginud kohalikele kasutajatele registrations: + moderation_recommandation: Enne registreeringute avamist kõigile veendu, et oleks olemas adekvaatne ja reageerimisvalmis modereerijaskond! preamble: Kes saab serveril konto luua. title: Registreerimised registrations_mode: @@ -774,6 +775,7 @@ et: approved: Kinnitus vajalik konto loomisel none: Keegi ei saa kontoid luua open: Kõik võivad kontoid luua + warning_hint: Soovitame liitumisel kasutada heakskiitmise nõuet, kui just pole kindel, et modereerijaskond suudab õigeaegselt käsitleda rämpsu ja pahatahtlikke liitumisi. security: authorized_fetch: Nõua föderatiivse serveripoolset autoriseerimist authorized_fetch_hint: Föderatiivsete serverite poolse autoriseerimise nõudmine võimaldab nii kasutaja- kui ka serveritasandi blokeeringute rangemat jõustamist. See toob aga kaasa jõudluse vähenemise, vähendab vastuste ulatust ja võib tekitada ühilduvusprobleeme mõne ühendatud teenusega. Lisaks ei takista see teatud kasutajatel sinu avalike postituste ja kontode kättesaamist. @@ -966,6 +968,9 @@ et: title: Veebikonksud webhook: Veebikonks admin_mailer: + auto_close_registrations: + body: Hiljutise vähese modereerimistegevuse tõttu on %{instance} liitumised automaatselt muudetud heakskiitu nõudvaks, et %{instance} ei muutuks võimalike pahategijate tegevusplatvormiks. Registreerumine on võimalik tagasi avatuks muuta igal ajal. + subject: Serveri %{instance} registreeringud on automaatselt muudetud heakskiitu nõudvaks new_appeal: actions: delete_statuses: kustutada postitused @@ -1839,12 +1844,42 @@ et: silence: Konto limiteeritud suspend: Konto kustutatud welcome: - edit_profile_action: Seadista oma profiil - edit_profile_step: |- - Esmalt seadista oma profiil. Saad lisada profiilipildi, muuta ekraaninime, lisada lühikirjelduse ja teha paljut muud. Vaata üle oma konto seaded. Saad ise otsustada, kui nähtav on konto teiste jaoks, mis keeltes postitusi oma ajavoos näha soovid ning kui privaatne peaks konto olema. - - Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q + apps_android_action: Google Play poest + apps_ios_action: Allalaadimine App Store'ist + apps_step: Meie ametlikud rakendused. + apps_title: Mastodoni rakendused + checklist_subtitle: 'Kuidas sel uudsel sotsiaalmeediarindel pihta hakata:' + checklist_title: Millest alustada + edit_profile_action: Isikupärasta + edit_profile_step: Anna oma tegevustele hoogu, luues põhjalik kasutajaprofiil. + edit_profile_title: Isikupärasta oma profiili explanation: Siin on mõned nõuanded, mis aitavad alustada + feature_action: Vaata lisa + feature_audience: Mastodon pakub unikaalset võimalust oma jälgijaskonda hallata ilma vahendajateta. Mastodoni käitamine enda serveris võimaldab jälgida kasutajaid ja olla jälgitav ükskõik millisest Mastodoni serverist võrgus ja see pole kellegi teise poolt kontrollitav. + feature_audience_title: Kogu enesekindlalt jälgijaid + feature_control: Tead ise kõige paremini, mida soovid oma koduvoos näha. Ei aega raiskavaid algoritme ega reklaame. Jälgi ühe kasutajakonto kaudu keda iganes mistahes Mastodoni serveris ja näe postitusi ajalises järjestuses, muutes oma nurgakese Internetist rohkem endale meelepärasemaks. + feature_control_title: Säilita oma ajajoone üle kontroll + feature_creativity: Mastodon toetab audiot, video- ja pildipostitusi, liigipääsetavuse kirjeldusi, küsitlusi, sisuhoiatusi, animeeritud avatare, kohandatud emotikone, pisipiltide lõikeeelistusi ja enamatki, et end võrgus väljendada. Kas avaldad kunsti, muusikat või taskuhäälingusaadet, Mastodon on mõeldud Sinu jaoks. + feature_creativity_title: Võrreldamatu loovus + feature_moderation: Mastodon annab otsustusõiguse tagasi Sinu kätte. Igal serveril on oma reeglid ja regulatsioonid, mida hallatakse kohapeal, mitte nagu ülalt-alla korporatiivses sotsiaalmeedias, võimaldades enim paindlikku vastavust erinevate vajadustega gruppide ja inimeste eelistustele. Liitu sobivate reeglitega serveriga, või käivita oma server. + feature_moderation_title: Modereerimine, nagu see olema peab + follow_action: Jälgi + follow_step: Huvipakkuvate inimeste jälgimine ongi Mastodoni olemuseks. + follow_title: Isikupärasta oma koduvoogu + follows_subtitle: Jälgi teada-tuntud kasutajaid + follows_title: Keda jälgida + follows_view_more: Vaata lähemalt, keda jälgida + hashtags_recent_count: "%{people} inimest viimase %{days} päeva jooksul" + hashtags_subtitle: Avasta, mis viimase 2 päeva jooksul on toimunud + hashtags_title: Populaarsed märksõnad + hashtags_view_more: Vaata teisi trendikaid märksõnu + post_action: Postita + post_step: Tervita maailma teksti, fotode, videote või küsitlustega. + post_title: Tee oma esimene postitus + share_action: Jaga + share_step: Anna sõpradele teada, kuidas Sind Mastodonis leida. + share_title: Jaga oma Mastodoni profiili + sign_in_action: Sisene subject: Tere tulemast Mastodoni title: Tere tulemast, %{name}! users: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index f49456afb2d04c..bd46e4aa884ca9 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1843,9 +1843,42 @@ eu: silence: Kontu murriztua suspend: Kontu kanporatua welcome: - edit_profile_action: Ezarri profila - edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu. + apps_android_action: Eskuratu Google Play-en + apps_ios_action: Deskargatu App Store-n + apps_step: Deskargatu gure aplikazio ofizialak. + apps_title: Mastodon-en aplikazioak + checklist_subtitle: 'Murgil zaitez sare sozialen aro berri honetan:' + checklist_title: Ongietorrien kontrol-zerrenda + edit_profile_action: Pertsonalizatu + edit_profile_step: Handiagotu elkarreragina profil ulerkor bat sortuz. + edit_profile_title: Pertsonalizatu profila explanation: Hona hasteko aholku batzuk + feature_action: Informazio gehiago + feature_audience: Mastodon-ek hartzaileak kudeatzeko aukera paregabea eskaintzen dizu tartean inor egon gabe. Mastodon zeure azpiegituran inplementatua izanik, lineako beste edozein Mastodon zerbitzarko edonor jarrai dezakezu, baita edonork zeu jarraitu ere. Soilik zeure kontrolpean. + feature_audience_title: Bildu hartzaileak uste osoarekin + feature_control: Aski ondo dakizu zer ikusi nahi duzun hasierako jarioan. Denbora galarazten duten algoritmorik edo iragarkirik gabe. Jarraitu beste Mastodon zerbitzarietako edozein kontu bakarretik eta jaso bere argitalpenak ordena kronologikoan. Zure interneteko txokoa zu bezala izan dadila. + feature_control_title: Egon zure denbora-lerroaren kontrolpean + feature_creativity: Mastodon-ek audioa, bideoa edo irudia duen argitalpenak, erabilerraztasun-azalpenak, inkestak, edukiaren abisuak, abatar animatuak, emoji pertsonalizatuak, miniaturen mozketaren kontrola eta funtzio gehiago onartzen ditu, linean aditzera eman zaitezen laguntzeko. Artea, musika edo podcastak partekatzen badituzu, Mastodon hortxe duzu. + feature_creativity_title: Sormen paregabea + feature_moderation: Mastodon-ek erabakiak hartzeko ahalmena dakar bueltan. Zerbitzari bakoitzak bere arau eta murrizketa propioak sortzen ditu, lokalki indarrean jartzen dira eta ez orokorki korporazioen sare-sozialen gisa. Era honetara, jende talde ezberdinen mesedeak asetzeko malguago bilakatzen da. Batu bertako arauekin ados zauden zerbitzari batera edo ostatatu zeurea. + feature_moderation_title: Moderazioa behar lukeen bezalaxe + follow_action: Jarraitu + follow_step: Jende interesgarria jarraitzean datza Mastodon. + follow_title: Pertsonalizatu hasierako jarioa + follows_subtitle: Jarraitu kontu ospetsuak + follows_title: Nor jarraitu + follows_view_more: Ikusi jarrai dezakezun jende gehiago + hashtags_recent_count: "%{people} pertsona azken %{days} egunetan" + hashtags_subtitle: Arakatu azken 2 egunetan pil-pilean dagoena + hashtags_title: Pil-pilean dauden traolak + hashtags_view_more: Ikusi pil-pilean dauden traol gehiago + post_action: Idatzi + post_step: Agurtu munduari testu, argazki, bideo zein inkesta batekin. + post_title: Idatzi zeure lehen argitalpena + share_action: Partekatu + share_step: Esaiezu lagunei nola aurki zaitzaketen Mastodon-en. + share_title: Partekatu Mastodon profila + sign_in_action: Hasi saioa subject: Ongi etorri Mastodon-era title: Ongi etorri, %{name}! users: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 7fab495af81f65..5d62f9143e120f 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1575,8 +1575,6 @@ fa: silence: حساب محدود شده است suspend: حساب معلق شده است welcome: - edit_profile_action: تنظیم نمایه - edit_profile_step: می‌توانید نمایه‌تان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از این‌‌ها سفارشی کنید. می‌توانید تعیین کنید که پی‌گیران جدید را پیش‌از این که بتوانند دنبالتان کنند بازبینی کنید. explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 4cd255c2f4d5a3..bc73e3ee0e81d8 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -772,10 +772,10 @@ fi: title: Rekisteröityminen registrations_mode: modes: - approved: Rekisteröinti vaatii hyväksynnän + approved: Rekisteröityminen vaatii hyväksynnän none: Kukaan ei voi rekisteröityä open: Kaikki voivat rekisteröityä - warning_hint: Suosittelemme käyttämään asetusta “Rekisteröinti vaatii hyväksynnän” ellet ole varma siitä, että moderaattorit ovat valmiina käsittelemään roskapostia ja haittarekisteröitymisiä oikea-aikaisesti. + warning_hint: Suosittelemme käyttämään asetusta ”Rekisteröityminen vaatii hyväksynnän”, ellet ole varma siitä, että moderaattorit ovat valmiina käsittelemään roskapostia ja haittarekisteröitymisiä oikea-aikaisesti. security: authorized_fetch: Vaadi todennus liittoutuvilta palvelimilta authorized_fetch_hint: Todennuksen vaatiminen liittoutuvilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin liittoutuvien palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. @@ -969,8 +969,8 @@ fi: webhook: Webhook admin_mailer: auto_close_registrations: - body: Viimeaikaisen moderaattoritoiminnan puutteen vuoksi %{instance} rekisteröinnit on vaihdettu automaattisesti manuaaliseen tarkasteluun, jotta %{instance} ei käytetä mahdollisien huonojen toimijoiden alustana. Voit vaihtaa sen takaisin avaamalla rekisteröinnit milloin tahansa. - subject: Rekisteröinnit %{instance} on automaattisesti vaihdettu vaatimaan hyväksyntää + body: Viimeaikaisen moderaattoritoiminnan puutteen vuoksi palvelimen %{instance} rekisteröitymiset on vaihdettu automaattisesti manuaaliseen tarkasteluun, jotta palvelinta %{instance} ei käytetä mahdollisten huonojen toimijoiden alustana. Voit vaihtaa takaisin avoimiin rekisteröitymisiin milloin tahansa. + subject: Rekisteröitymiset palvelimelle %{instance} on automaattisesti vaihdettu vaatimaan hyväksyntää new_appeal: actions: delete_statuses: poistaa hänen julkaisunsa @@ -1842,9 +1842,39 @@ fi: silence: Tiliä rajoitettu suspend: Tili jäädytetty welcome: - edit_profile_action: Määritä profiili - edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. + apps_android_action: Hanki Google Playstä + apps_ios_action: Lataa App Storesta + apps_step: Lataa viralliset sovelluksemme. + apps_title: Mastodon-sovellukset + edit_profile_action: Mukauta + edit_profile_title: Mukauta profiiliasi explanation: Näillä vinkeillä pääset alkuun + feature_action: Lue lisää + feature_audience: Mastodon tarjoaa sinulle ainutlaatuisen mahdollisuuden hallita yleisöäsi ilman välikäsiä. Omassa infrastruktuurissasi käytössä oleva Mastodon antaa sinulle mahdollisuuden seurata ja tulla seuratuksi miltä tahansa muulta verkon Mastodon-palvelimelta, ja se on vain sinun hallinnassasi. + feature_audience_title: Rakenna yleisöäsi luottavaisin mielin + feature_control: Tiedät itse parhaiten, mitä haluat nähdä kotisyötteessäsi. Ei algoritmeja eikä mainoksia tuhlaamassa aikaasi. Seuraa yhdellä tilillä ketä tahansa, miltä tahansa Mastodon-palvelimelta, vastaanota heidän julkaisunsa aikajärjestyksessä ja tee omasta internetin nurkastasi hieman enemmän omanlaisesi. + feature_control_title: Pidä aikajanasi hallussasi + feature_creativity: Mastodon tukee ääni-, video- ja kuvajulkaisuja, saavutettavuuskuvauksia, äänestyksiä, sisältövaroituksia, animoituja avattaria, mukautettuja emojeita, pikkukuvien rajauksen hallintaa ja paljon muuta, mikä auttaa ilmaisemaan itseäsi verkossa. Julkaisetpa sitten taidetta, musiikkia tai podcastia, Mastodon on sinua varten. + feature_creativity_title: Luovuutta vertaansa vailla + feature_moderation: Mastodon palauttaa päätöksenteon käsiisi. Jokainen palvelin luo omat sääntönsä ja määräyksensä, joita valvotaan paikallisesti eikä ylhäältä alas kuten kaupallisessa sosiaalisessa mediassa, mikä tekee siitä joustavimman vastaamaan eri ihmisryhmien tarpeisiin. Liity palvelimelle, jonka säännöt sopivat sinulle, tai ylläpidä omaa palvelinta. + feature_moderation_title: Moderointi niin kuin kuuluukin + follow_action: Seuraa + follow_step: Mastodonissa on kyse kiinnostavien ihmisten seuraamisesta. + follow_title: Mukauta kotisyötettäsi + follows_subtitle: Seuraa tunnettuja tilejä + follows_title: Ehdotuksia seurattavaksi + follows_view_more: Näytä lisää seurattavia henkilöitä + hashtags_recent_count: "%{people} henkilöä viimeisenä %{days} päivänä" + hashtags_subtitle: Tutki, mikä on ollut suosittua viimeisenä 2 päivänä + hashtags_title: Suositut aihetunnisteet + hashtags_view_more: Näytä lisää suosittuja aihetunnisteita + post_action: Kirjoita + post_step: Tervehdi maailmaa sanoin, kuvin, videoin ja äänestyksin. + post_title: Tee ensimmäinen julkaisusi + share_action: Jaa + share_step: Kerro ystävillesi, kuinka sinut voi löytää Mastodonista. + share_title: Jaa Mastodon-profiilisi + sign_in_action: Kirjaudu sisään subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index c7dca591f680bf..64c26a62f20b1e 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1842,9 +1842,42 @@ fo: silence: Kontoin er avmarkað suspend: Konta ógildað welcome: - edit_profile_action: Set upp vanga - edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær. + apps_android_action: Fá hana á Google Play + apps_ios_action: Tak niður á App Store + apps_step: Tak okkara almennu appir niður. + apps_title: Mastodon appir + checklist_subtitle: 'Kom í gongd á hesum nýggja miðli:' + checklist_title: Vælkomukekklisti + edit_profile_action: Ger persónligt + edit_profile_step: Stimbra títt samvirkni við einum fullfíggjaðum vanga. + edit_profile_title: Ger vangan hjá tær persónligan explanation: Her eru nøkur ráð so tú kann koma gott ígongd + feature_action: Lær meira + feature_audience: Mastodon gevur við ein einastandandi høvi at stýra tínar áskoðarar uttan millumfólk. Mastodon á tínum egnu ambætarum gevur tær høvi at fylgja og at blíva fylgd ella fylgdur frá einum og hvørjum Mastodon ambætara á netinum og er bert undir tínum ræði. + feature_audience_title: Uppbygg tína áskoðarafjøld í treysti + feature_control: Tú veitst best, hvat tú vilt síggja á tíni heimarás. Ongar algoritmur ella lýsingar at oyðsla tíðina hjá tær við. Fylg hvønn tú vilt á øllum Mastodon ambætarum umvegis eina kontu og móttak teirra postar í tíðarrað, og ger tín part av internetinum eitt sindur meira sum teg. + feature_control_title: Varðveit ræði á tíni egnu tíðarrás + feature_creativity: Mastodon hevur postar við ljóði, video og myndum, atkomulýsingar, spurnarkanningar, innihaldsávarðingar, livandi avatarar, sergjørd kenslutekn, klipping av smámyndum og annað, sum hjálpir tær at bera teg fram á netinum. Sama um tú útgevur list, tónleik ella poddvarp, Mastodon er har fyri teg. + feature_creativity_title: Makaleys skapan + feature_moderation: Mastodon leggur avgerðirnar aftur í tínar hendur. Hvør ambætari hevur sínar egnu reglur og fyriskipanir, sum vera útinnaðar lokalt og ikki frá í erva og niðureftir sum sosialir miðlar hjá stórfyritøkum. Hetta ger tað til tað smidliga at svara tørvinum hjá ymsum bólkum av fólki. Luttak á einum ambætara við reglum, sum tú er samd ella samdur við, ella hýs tín egna ambætara. + feature_moderation_title: Umsjón, sum hon eigur at vera + follow_action: Fylg + follow_step: At fylgja áhugaverdum fólki er tað, sum Mastodon snýr seg um. + follow_title: Ger tína heimarás persónliga + follows_subtitle: Fylg vælkendar kontur + follows_title: Hvørji tú átti at fylgt + follows_view_more: Sí fleiri fólk at fylgja + hashtags_recent_count: "%{people} fólk seinastu %{days} dagarnar" + hashtags_subtitle: Kanna rákið seinastu 2 dagarnar + hashtags_title: Vælumtókt frámerki + hashtags_view_more: Sí fleiri vælumtókt frámerki + post_action: Skriva + post_step: Sig hey við verðina við teksti, myndum, video ella spurnarkanningum. + post_title: Stovna tín fyrsta post + share_action: Deil + share_step: Lat vinir tínar vita, hvussu tey finna teg á Mastodon. + share_title: Deil tín Mastodon vanga + sign_in_action: Rita inn subject: Vælkomin til Mastodon title: Vælkomin umborð, %{name}! users: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 381a8f582a7ddb..860c591a0a9857 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -425,7 +425,7 @@ fr-CA: view: Afficher les blocages de domaines email_domain_blocks: add_new: Ajouter - allow_registrations_with_approval: Autoriser les inscriptions avec approbation + allow_registrations_with_approval: Permettre les inscriptions avec l'approuvement attempts_over_week: one: "%{count} tentative au cours de la dernière semaine" other: "%{count} tentatives au cours de la dernière semaine" @@ -767,6 +767,7 @@ fr-CA: disabled: À personne users: Aux utilisateur·rice·s connecté·e·s localement registrations: + moderation_recommandation: Veuillez vous assurer d'avoir une équipe de modération adéquate et réactive avant d'ouvrir les inscriptions à tout le monde! preamble: Affecte qui peut créer un compte sur votre serveur. title: Inscriptions registrations_mode: @@ -774,6 +775,7 @@ fr-CA: approved: Approbation requise pour s’inscrire none: Personne ne peut s’inscrire open: N’importe qui peut s’inscrire + warning_hint: Nous vous recommandons d’utiliser « Approbation requise pour s’inscrire » à moins que vous n’ayez confiance dans la capacité de votre équipe de modération à gérer les messages indésirables et les inscriptions malveillantes suffisamment rapidement. security: authorized_fetch: Exiger une authentification de la part des serveurs fédérés authorized_fetch_hint: Exiger l’authentification des serveurs fédérés permet une application plus stricte des blocages définis par les utilisateurs et le serveur. Cependant, cela entraîne une baisse des performances, réduit la portée de vos réponses et peut poser des problèmes de compatibilité avec certains services fédérés. En outre, cela n’empêchera pas les acteurs déterminés d’aller chercher vos messages et comptes publics. @@ -966,6 +968,9 @@ fr-CA: title: Points d’ancrage web webhook: Point d’ancrage web admin_mailer: + auto_close_registrations: + body: En raison du manque d'activité récente des modérateurs, les inscriptions à %{instance} ont été automatiquement changées pour nécessiter une revue manuelle afin d'éviter que votre instance %{instance} ne soit utilisée comme plate-forme pour des acteurs potentiellement malveillants. Vous pouvez ré-ouvrir les inscriptions à tout moment. + subject: Les inscriptions à %{instance} ont été automatiquement changées pour requérir une approbation new_appeal: actions: delete_statuses: effacer les messages @@ -1837,9 +1842,42 @@ fr-CA: silence: Compte limité suspend: Compte suspendu welcome: - edit_profile_action: Configuration du profil - edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. + apps_android_action: Disponible sur Google Play + apps_ios_action: Télécharger sur l'App Store + apps_step: Téléchargez nos applications officielles. + apps_title: Applications Mastodon + checklist_subtitle: 'Commencez votre aventure sur le web social:' + checklist_title: Premières étapes + edit_profile_action: Personnaliser + edit_profile_step: Améliorez vos interactions avec un profil plus complet. + edit_profile_title: Personnaliser votre profil explanation: Voici quelques conseils pour vous aider à démarrer + feature_action: En savoir plus + feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. + feature_audience_title: Construisez votre audience en toute confiance + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control_title: Gardez le contrôle de votre fil + feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. + feature_creativity_title: Créativité inégalée + feature_moderation: Mastodon vous redonne le contrôle. Chaque serveur établit ses propres règles, appliquées localement et non pas de manière verticale comme sur les médias sociaux commerciaux, donnant davantage de souplesse pour répondre aux besoins de différentes communautés. Rejoignez un serveur avec des règles qui vous conviennent, ou bien hébergez le vôtre. + feature_moderation_title: La modération comme elle doit être + follow_action: Suivre + follow_step: Suivre des personnes intéressantes est l'essence de Mastodon. + follow_title: Personnaliser votre fil principal + follows_subtitle: Suivez des comptes populaires + follows_title: Qui suivre + follows_view_more: Voir plus de personnes à suivre + hashtags_recent_count: "%{people} personnes dans les %{days} derniers jours" + hashtags_subtitle: Explorez les tendances depuis les 2 derniers jours + hashtags_title: Hashtags populaires + hashtags_view_more: Voir plus de hashtags populaires + post_action: Rédiger + post_step: Dites bonjour au monde avec du texte, des photos, des vidéos ou des sondages. + post_title: Rédiger votre premier message + share_action: Partager + share_step: Faites savoir à vos ami·e·s comment vous trouver sur Mastodon. + share_title: Partager votre profil Mastodon + sign_in_action: Se connecter subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 0d706accf12388..46b22cf8b368aa 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -767,6 +767,7 @@ fr: disabled: À personne users: Aux utilisateur·rice·s connecté·e·s localement registrations: + moderation_recommandation: Veuillez vous assurer d'avoir une équipe de modération adéquate et réactive avant d'ouvrir les inscriptions à tout le monde! preamble: Affecte qui peut créer un compte sur votre serveur. title: Inscriptions registrations_mode: @@ -774,6 +775,7 @@ fr: approved: Approbation requise pour s’inscrire none: Personne ne peut s’inscrire open: N’importe qui peut s’inscrire + warning_hint: Nous vous recommandons d’utiliser « Approbation requise pour s’inscrire » à moins que vous n’ayez confiance dans la capacité de votre équipe de modération à gérer les messages indésirables et les inscriptions malveillantes suffisamment rapidement. security: authorized_fetch: Exiger une authentification de la part des serveurs fédérés authorized_fetch_hint: Exiger l’authentification des serveurs fédérés permet une application plus stricte des blocages définis par les utilisateurs et le serveur. Cependant, cela entraîne une baisse des performances, réduit la portée de vos réponses et peut poser des problèmes de compatibilité avec certains services fédérés. En outre, cela n’empêchera pas les acteurs déterminés d’aller chercher vos messages et comptes publics. @@ -966,6 +968,9 @@ fr: title: Points d’ancrage web webhook: Point d’ancrage web admin_mailer: + auto_close_registrations: + body: En raison du manque d'activité récente des modérateurs, les inscriptions à %{instance} ont été automatiquement changées pour nécessiter une revue manuelle afin d'éviter que votre instance %{instance} ne soit utilisée comme plate-forme pour des acteurs potentiellement malveillants. Vous pouvez ré-ouvrir les inscriptions à tout moment. + subject: Les inscriptions à %{instance} ont été automatiquement changées pour requérir une approbation new_appeal: actions: delete_statuses: effacer les messages @@ -1837,9 +1842,42 @@ fr: silence: Compte limité suspend: Compte suspendu welcome: - edit_profile_action: Configuration du profil - edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. + apps_android_action: Disponible sur Google Play + apps_ios_action: Télécharger sur l'App Store + apps_step: Téléchargez nos applications officielles. + apps_title: Applications Mastodon + checklist_subtitle: 'Commencez votre aventure sur le web social:' + checklist_title: Premières étapes + edit_profile_action: Personnaliser + edit_profile_step: Améliorez vos interactions avec un profil plus complet. + edit_profile_title: Personnaliser votre profil explanation: Voici quelques conseils pour vous aider à démarrer + feature_action: En savoir plus + feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. + feature_audience_title: Construisez votre audience en toute confiance + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control_title: Gardez le contrôle de votre fil + feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. + feature_creativity_title: Créativité inégalée + feature_moderation: Mastodon vous redonne le contrôle. Chaque serveur établit ses propres règles, appliquées localement et non pas de manière verticale comme sur les médias sociaux commerciaux, donnant davantage de souplesse pour répondre aux besoins de différentes communautés. Rejoignez un serveur avec des règles qui vous conviennent, ou bien hébergez le vôtre. + feature_moderation_title: La modération comme elle doit être + follow_action: Suivre + follow_step: Suivre des personnes intéressantes est l'essence de Mastodon. + follow_title: Personnaliser votre fil principal + follows_subtitle: Suivez des comptes populaires + follows_title: Qui suivre + follows_view_more: Voir plus de personnes à suivre + hashtags_recent_count: "%{people} personnes dans les %{days} derniers jours" + hashtags_subtitle: Explorez les tendances depuis les 2 derniers jours + hashtags_title: Hashtags populaires + hashtags_view_more: Voir plus de hashtags populaires + post_action: Rédiger + post_step: Dites bonjour au monde avec du texte, des photos, des vidéos ou des sondages. + post_title: Rédiger votre premier message + share_action: Partager + share_step: Faites savoir à vos ami·e·s comment vous trouver sur Mastodon. + share_title: Partager votre profil Mastodon + sign_in_action: Se connecter subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 2fb9f3e4d2956b..ad2c37e23f17c4 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1837,9 +1837,28 @@ fy: silence: Account beheind suspend: Account beskoattele welcome: - edit_profile_action: Profyl ynstelle - edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle. + apps_android_action: Fia Google Play downloade + apps_ios_action: Fia de App Store downloade + apps_step: Us offisjele apps downloade + apps_title: Mastodon-apps + edit_profile_action: Personalisearje + edit_profile_title: Jo profyl personalisearje explanation: Hjir binne inkelde tips om jo op wei te helpen + feature_action: Mear ynfo + follow_action: Folgje + follows_title: Wa te folgjen + follows_view_more: Mear minsken om te folgjen besjen + hashtags_recent_count: "%{people} minsken yn de ôfrûne %{days} dagen" + hashtags_subtitle: Wat der yn de ôfrûne 2 dagen bard is ferkenne + hashtags_title: Populêre hashtags + hashtags_view_more: Mear populêre hashtags besjen + post_action: Opstelle + post_step: Sis hallo tsjin de wrâld mei tekst, foto’s, fideo’s of peilingen. + post_title: Jo earste berjocht meitsje + share_action: Diele + share_step: Lit jo freonen witte hoe’t jo te finen binne op Mastodon. + share_title: Jo Mastodon-profyl diele + sign_in_action: Oanmelde subject: Wolkom op Mastodon title: Wolkom oan board %{name}! users: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index ede38df0d9e442..16f046baab8fff 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -505,14 +505,14 @@ gd: by_domain: Àrainn confirm_purge: A bheil thu cinnteach gu bheil thu airson an dàta on àrainn seo a sguabadh às gu buan? content_policies: - comment: Nòta taobh a-staigh + comment: Nòta description_html: "’S urrainn dhut poileasaidhean susbainte a mhìneachadh a thèid a chur an sàs air a h-uile cunntas on àrainn seo ’s a fo-àrainnean-se." limited_federation_mode_description_html: "’S urrainn dhut taghadh an ceadaich thu co-nasgadh leis an àrainn seo gus nach ceadaich." policies: - reject_media: Diùlt meadhanan - reject_reports: Diùlt gearanan - silence: Cuingich - suspend: Cuir à rèim + reject_media: A’ diùltadh meadhanan + reject_reports: A’ diùltadh gearanan + silence: Cuingichte + suspend: À rèim policy: Poileasaidh reason: Adhbhar poblach title: Poileasaidhean susbainte @@ -636,6 +636,7 @@ gd: created_at: Chaidh an gearan a dhèanamh delete_and_resolve: Sguab às na postaichean forwarded: Chaidh a shìneadh air adhart + forwarded_replies_explanation: Tha an gearan seo o chleachdaiche cèin agus mu shusbaint chèin. Chaidh a shìneadh air adhart thugad on as e freagairt do neach-cleachdaidh agad-sa a tha san t-susbaint a tha na cois. forwarded_to: Chaidh a shìneadh air adhart gu %{domain} mark_as_resolved: Cuir comharra gun deach fhuasgladh mark_as_sensitive: Cuir comharra gu bheil e frionasach @@ -782,10 +783,10 @@ gd: title: Thoir air falbh ro-aonta nan cleachdaichean air inneacsadh le einnseanan-luirg mar a’ bhun-roghainn discovery: follow_recommendations: Molaidhean leantainn - preamble: Tha tighinn an uachdar susbainte inntinniche fìor-chudromach airson toiseach-tòiseachaidh an luchd-cleachdaidh ùr nach eil eòlach air duine sam bith air Mastodon, ma dh’fhaoidte. Stiùirich mar a dh’obraicheas gleusan an rannsachaidh air an fhrithealaiche agad. + preamble: Tha tighinn an uachdar susbainte inntinniche fìor-chudromach airson toiseach-tòiseachaidh an luchd-cleachdaidh ùr nach eil eòlach air duine sam bith air Mastodon, ma dh’fhaoidte. Stiùirich mar a dh’obraicheas gleusan an rùrachaidh air an fhrithealaiche agad. profile_directory: Eòlaire nam pròifil public_timelines: Loidhnichean-ama poblach - publish_discovered_servers: Foillsich na frithealaichean a chaidh a lorg + publish_discovered_servers: Foillsich na frithealaichean a chaidh a rùrachadh publish_statistics: Foillsich an stadastaireachd title: Rùrachadh trends: Treandaichean @@ -794,6 +795,7 @@ gd: disabled: Na seall idir users: Dhan luchd-chleachdaidh a clàraich a-steach gu h-ionadail registrations: + moderation_recommandation: Dèan cinnteach gu bheil sgioba maoir deiseil is deònach agad mus fhosgail thu an clàradh dhan a h-uile duine! preamble: Stiùirich cò dh’fhaodas cunntas a chruthachadh air an fhrithealaiche agad. title: Clàraidhean registrations_mode: @@ -801,6 +803,7 @@ gd: approved: Tha aontachadh riatanach airson clàradh none: Chan fhaod neach sam bith clàradh open: "’S urrainn do neach sam bith clàradh" + warning_hint: Mholamaid gun chleachd thu “Tha aontachadh riatanach airson clàradh” mur eil earbsa agad gur urrainn dhan sgioba agad spama agus clàraidhean droch-rùnach a làimhseachadh gu sgiobalta. security: authorized_fetch: Iarr dearbhadh o fhrithealaichean co-naisgte authorized_fetch_hint: Ma dh’iarras tu dearbhadh o fhrithealaichean cho-naisgte, gheibh thu an comas gus bacaidhean èigneachadh nas teinne an dà chuid air ìre an luchd-cleachdaidh ’s an fhrithealaiche. Gidheadh, ceannaichidh tu an comas seo le dèanadas nas miosa is ruigsinn nas lugha nam freagairtean agad agus dh’fhaoidte gun èirich duilgheadasan co-chòrdalachd le cuid a sheirbheisean cho-naisgte. A bharrachd air sin, cha bhac seo an fheadhainn dian o fhaighinn nam postaichean is cunntasan poblach agad. @@ -1001,6 +1004,9 @@ gd: title: Webhooks webhook: Webhook admin_mailer: + auto_close_registrations: + body: Ri linn dìth gnìomhachd nam maor o chionn goirid, dh’atharraich Mastodon modh nan clàraidhean aig %{instance} ach am feum cunntasan ùra aontachadh a làimh leis an amas gun dèid %{instance} a dhìon o chleachdadh air dòighean droch-rùnach. ’S urrainn dhut na clàraidhean fhosgladh a-rithist uair sam bith. + subject: Feumaidh clàradh le %{instance} aontachadh a-nis new_appeal: actions: delete_statuses: sguabadh às nam postaichean aca @@ -1076,6 +1082,14 @@ gd: hint_html: Dìreach aon rud eile! Feumaidh sinn dearbhadh gu bheil thu daonna (ach am fàg sinn an spama aig an doras!). Fuasgail an CAPTCHA gu h-ìosal is briog air “Lean air adhart”. title: Deuchainn tèarainteachd confirmations: + awaiting_review: Chaidh am post-d agad a dhearbhadh! Nì an sgioba aig %{domain} lèirmheas air a’ chlàradh agad a-nis. Gheibh thu post-d nuair a bhios iad air aontachadh ris a’ chunntas agad! + awaiting_review_title: Tha an cunntas agad ’ga sgrùdadh + clicking_this_link: briogadh air a’ cheangal seo + login_link: clàradh a-steach + proceed_to_login_html: "’S urrainn dhut %{login_link} a-nis." + redirect_to_app_html: Bu chòir dhuinn d’ ath-stiùireadh gu aplacaid %{app_name}. Mur an do dh’obraich sin, feuch %{clicking_this_link} no till dhan aplacaid a làimh. + registration_complete: Tha an clàradh agad air %{domain} deiseil a-nis! + welcome_title: Fàilte ort, %{name}! wrong_email_hint: Mur eil an seòladh puist-d seo mar bu chòir, ’s urrainn dhut atharrachadh ann an roghainnean a’ chunntais. delete_account: Sguab às an cunntas delete_account_html: Nam bu mhiann leat an cunntas agad a sguabadh às, nì thu an-seo e. Thèid dearbhadh iarraidh ort. @@ -1409,6 +1423,7 @@ gd: '86400': Latha expires_in_prompt: Chan ann idir generate: Gin ceangal cuiridh + invalid: Chan eil an cuireadh dligheach invited_by: 'Fhuair thu cuireadh o:' max_uses: few: "%{count} cleachdaichean" @@ -1577,7 +1592,7 @@ gd: privacy: Prìobhaideachd privacy_hint_html: Stiùirich na tha thu airson foillseachadh do chàch. Gheibh daoine lorg air pròifilean inntinneach is deagh aplacaidean a’ brabhsadh cò tha daoine eile a’ leantainn ’s a’ faicinn nan aplacaidean a chleachdas iad airson postadh ach dh’fhaoidte gum b’ fheàrr leat seo a chumail falaichte. reach: Ruigse - reach_hint_html: Stiùirich am bu mhiann leat gun lorg ’s gun lean daoine ùra thu gus nach bu mhiann. A bheil thu airson ’s gun nochd na postaichean agad air duilleag an rùrachaidh? No gum faic càch thu am measg nam molaidhean leantainn aca? An gabh thu ri luchd-leantainn ùr sam bith gu fèin-obrachail no an cùm thu fhèin smachd air gach neach fa leth? + reach_hint_html: Stiùirich am bu mhiann leat gun rùraich ’s gun lean daoine ùra thu gus nach bu mhiann. A bheil thu airson ’s gun nochd na postaichean agad air duilleag an rùrachaidh? No gum faic càch thu am measg nam molaidhean leantainn aca? An gabh thu ri luchd-leantainn ùr sam bith gu fèin-obrachail no an cùm thu fhèin smachd air gach neach fa leth? search: Lorg search_hint_html: Stiùirich an dòigh air an dèid do lorg. Am bu mhiann leat gun lorg daoine thu leis na phostaich thu gu poblach? Am bu mhiann leat gun lorg daoine taobh a-muigh Mastodon a’ phròifil agad nuair a bhios iad a lorg an lìn? Thoir an aire nach urrainn dhuinn gealladh le cinnt gun dèid am fiosrachadh poblach agad a dhùnadh a-mach gu tur às gach einnsean-luirg poblach. title: Prìobhaideachd ’s ruigse @@ -1587,6 +1602,9 @@ gd: errors: limit_reached: Ràinig thu crìoch nam freagairtean eadar-dhealaichte unrecognized_emoji: "– chan aithne dhuinn an Emoji seo" + redirects: + prompt: Ma tha earbsa agad sa cheangal seo, briog airson leantainn air adhart. + title: Tha thu a’ fàgail %{instance}. relationships: activity: Gnìomhachd a’ chunntais confirm_follow_selected_followers: A bheil thu cinnteach gu bheil thu airson an luchd-leantainn a thagh thu a leantainn? @@ -1649,6 +1667,7 @@ gd: unknown_browser: Brabhsair nach aithne dhuinn weibo: Weibo current_session: An seisean làithreach + date: Ceann-là description: "%{browser} air %{platform}" explanation: Seo na bhrabhsairean-lìn a tha clàraichte a-staigh sa chunntas Mastodon agad aig an àm seo. ip: IP @@ -1827,16 +1846,27 @@ gd: webauthn: Iuchraichean tèarainteachd user_mailer: appeal_approved: - explanation: Chaidh aontachadh ris an ath-thagradh agad air an rabhadh o %{strike_date} a chuir thu a-null %{appeal_date}. Tha deagh chliù air a’ chunntas agad a-rithist. + action: Roghainnean a’ chunntais + explanation: Chaidh aontachadh ris an ath-thagradh agad air an rabhadh o %{strike_date} a chuir thu a-null %{appeal_date}. Tha an cunntas agad ann an deagh-chor a-rithist. subject: Chaidh aontachadh ris an ath-thagradh agad o %{date} + subtitle: Tha an cunntas agad ann an deagh-chor a-rithist. title: Chaidh aontachadh ri ath-thagradh appeal_rejected: explanation: Chaidh an t-ath-thagradh agad air an rabhadh o %{strike_date} a chuir thu a-null %{appeal_date} a dhiùltadh. subject: Chaidh an t-ath-thagradh agad o %{date} a dhiùltadh + subtitle: Chaidh an t-ath-thagradh agad a dhiùltadh. title: Chaidh ath-thagradh a dhiùltadh backup_ready: + explanation: Dh’iarr thu lethbhreac-glèidhidh slàn dhen chunntas Mastodon agad. + extra: Tha e deis ri luchdadh a-nuas a-nis! subject: Tha an tasg-lann agad deis ri luchdadh a-nuas title: Tasg-lann dhut + failed_2fa: + details: 'Seo mion-fhiosrachadh mun oidhirp air clàradh a-steach:' + explanation: Dh’fheuch cuideigin ri clàradh a-steach dhan chunntas agad ach thug iad seachad dàrna ceum mì-dhligheach dhan dearbhadh. + further_actions_html: Mur e thu fhèin a bh’ ann, mholamaid gun %{action} sa bhad on a chaidh briseadh a-steach dha ma dh’fhaoidte. + subject: Dh’fhàillig dàrna ceum an dearbhaidh + title: Dh’fhàillig dàrna ceum an dearbhaidh suspicious_sign_in: change_password: atharraich thu am facal-faire agad details: 'Seo mion-fhiosrachadh mun chlàradh a-steach:' @@ -1876,9 +1906,42 @@ gd: silence: Cunntas cuingichte suspend: Cunntas à rèim welcome: - edit_profile_action: Suidhich a’ phròifil agad - edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu." + apps_android_action: Faigh aplacaid air Google Play + apps_ios_action: Luchdaich a-nuas aplacaid on App Store + apps_step: Luchdaich a-nuas na h-aplacaidean oifigeil againn. + apps_title: Aplacaidean Mastodon + checklist_subtitle: 'Seo toiseach-tòiseachaidh dhut air an t-saoghal shòisealta ùr:' + checklist_title: Liosta-chromagan fàilteachaidh + edit_profile_action: Cuir dreach pearsanta air + edit_profile_step: Brosnaich an conaltradh a gheibh thu le pròifil shlàn. + edit_profile_title: Cuir dreach pearsanta air a’ phròifil agad explanation: Seo gliocas no dhà gus tòiseachadh + feature_action: Barrachd fiosrachaidh + feature_audience: Bheir Mastodon comas sònraichte dhut gun stiùirich thu d’ èisteachd gun eadar-mheadhanaich. Ma ruitheas tu Mastodon air a’ bhun-structar agad fhèin, ’s urrainn dhut frithealaiche Mastodon sam bith a leantainn air loidhne ’s an caochladh agus cha bhi smachd aig duine sam bith air ach agad fhèin. + feature_audience_title: Stèidhich d’ èisteachd le misneachd + feature_control: Chan eil duine sam bith nas eòlaiche air na bu mhiann leat fhaicinn air do dhachaigh na thu fhèin. Cha chaith algairim no sanasachd d’ ùine. Lean duine sam bith air frithealaiche Mastodon sam bith on aon chunntas agus faigh na postaichean aca ann an òrdugh na h-ama agus cuir dreach nas pearsanta air an oisean agad-sa dhen eadar-lìon. + feature_control_title: Cùm smachd air an loidhne-ama agad + feature_creativity: Cuiridh Mastodon taic ri postaichean le faidhlichean fuaime, videothan is dealbhan, tuairisgeulan so-ruigsinneachd, cunntasan-bheachd, rabhaidhean susbainte, avataran beòthaichte, emojis gnàthaichte, smachd air bearradh nan dealbhagan is mòran a bharrachd ach an cuir thu do bheachdan an cèill air loidhne. Ge b’ e a bheil thu a’ foillseachadh an obair-ealain, an ceòl no am pod-chraoladh agad, tha Mastodon ri làimh dhut. + feature_creativity_title: Cho cruthachail ’s a ghabhas + feature_moderation: Cuiridh Mastodon na co-dhùnaidhean ’nad làmhan fhèin. Cruthaichidh gach frithealaiche na riaghailtean aige fhèin a thèid a chur an gnìomh gu h-ionadail seach on àirde mar a thachras air meadhanan sòisealta corporra agus mar sin dheth, ’s urrainnear freagairt gu sùbailte do dh’fheumalachdan choimhearsnachdan eadar-dhealaichte. Faigh ballrachd air frithealaiche far a bheil thu ag aontachadh ris na riaghailtean ann no òstaich fear agad fhèin. + feature_moderation_title: Maorsainneachd mar gu chòir + follow_action: Lean + follow_step: Tha leantainn dhaoine inntinneach air cridhe Mhastodon. + follow_title: Cuir dreach pearsanta air do dhachaigh + follows_subtitle: Lean cunntasan cliùiteach + follows_title: Cò a leanas tu + follows_view_more: Seall barrachd dhaoine ri leantainn + hashtags_recent_count: 'Daoine sna %{days} là(ithean) seo chaidh: %{people}' + hashtags_subtitle: Rùraich na tha a’ treandadh san 2 latha seo chaidh + hashtags_title: Tagaichean hais a’ treandadh + hashtags_view_more: Seall barrachd thagaichean hais a’ treandadh + post_action: Sgrìobh + post_step: Cuir an aithne air an t-saoghal le teacsa, dealbhan, videothan no cunntasan-bheachd. + post_title: Cruthaich a’ chiad phost agad + share_action: Co-roinn + share_step: Leig fios dha do charaidean mar a gheibh iad grèim ort air Mastodon. + share_title: Co-roinn a’ phròifil Mastodon agad + sign_in_action: Clàraich a-steach subject: Fàilte gu Mastodon title: Fàilte air bòrd, %{name}! users: @@ -1886,6 +1949,7 @@ gd: go_to_sso_account_settings: Tadhail air roghainnean cunntas solaraiche na dearbh-aithne agad invalid_otp_token: Còd dà-cheumnach mì-dhligheach otp_lost_help_html: Ma chaill thu an t-inntrigeadh dhan dà chuid diubh, ’s urrainn dhut fios a chur gu %{email} + rate_limited: Cus oidhirpean dearbhaidh, feuch ris a-rithist an ceann greis. seamless_external_login: Rinn thu clàradh a-steach le seirbheis on taobh a-muigh, mar sin chan eil roghainnean an fhacail-fhaire ’s a’ phuist-d ri làimh dhut. signed_in_as: 'Chlàraich thu a-steach mar:' verification: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index c3d0f1d99ae5fa..a6543005b2bf57 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1842,9 +1842,42 @@ gl: silence: Conta limitada suspend: Conta suspendida welcome: - edit_profile_action: Configurar perfil - edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan. + apps_android_action: Descarga desde Google Play + apps_ios_action: Descarga desde App Store + apps_step: Descarga as apps oficiais. + apps_title: Apps de Mastodon + checklist_subtitle: 'Ímoste guiar no comezo nesta nova experiencia social:' + checklist_title: Lista de comprobación + edit_profile_action: Personalizar + edit_profile_step: Aumenta as túas interaccións grazas a un perfil descriptivo. + edit_profile_title: Personaliza o teu perfil explanation: Aquí tes algunhas endereitas para ir aprendendo + feature_action: Saber máis + feature_audience: Mastodon dache a oportunidade de xestionar sen intermediarios as túas relacións. Incluso se usas o teu propio servidor Mastodon poderás seguir e ser seguida desde calquera outro servidor Mastodon conectado á rede e estará baixo o teu control exclusivo. + feature_audience_title: Crea a túa audiencia con tranquilidade + feature_control: Sabes mellor ca ninguén o que queres ver na cronoloxía. Non hai algoritmos nin publicidade facéndoche perder o tempo. Segue cunha soa conta a outras persoas en servidores Mastodon diferentes ao teu, recibirás as publicacións en orde cronolóxica, e farás deste curruchiño de internet un lugar para ti. + feature_control_title: Tes o control da túa cronoloxía + feature_creativity: Mastodon ten soporte para audio, vídeo e imaxes nas publicacións, descricións para mellorar a accesibilidade, enquisas, avisos sobre o contido, avatares animados, emojis personalizados, control sobre o recorte de miniaturas, e moito máis, para axudarche a expresarte en internet. Tanto se publicas o teu arte, música ou podcast, Mastodon está aquí para ti. + feature_creativity_title: Creatividade incomparable + feature_moderation: Mastodon pon nas túas mans a toma de decisións. Cada servidor crea as súas propia regras e normas, que son de cumprimento nel e non impostas como nos medios sociais corporativos, facéndoo máis flexible e respondendo ás necesidades dos diferentes grupos de persoas. Únete a un servidor con normas que compartes, ou instala o teu propio servidor. + feature_moderation_title: A moderación tal como debe ser + follow_action: Seguir + follow_step: Mastodon consiste en seguir a persoas interesantes. + follow_title: Personaliza a túa cronoloxía + follows_subtitle: Sigue estas contas populares + follows_title: A quen seguir + follows_view_more: Ver máis persoas para seguir + hashtags_recent_count: "%{people} persoas nos últimos %{days} días" + hashtags_subtitle: Descubre os temas en voga nos últimos 2 días + hashtags_title: Cancelos en voga + hashtags_view_more: Ver máis cancelos en voga + post_action: Escribir + post_step: Saúda a todo o mundo con texto, fotos, vídeos ou enquisas. + post_title: Escribe a túa primeira publicación + share_action: Compartir + share_step: Dille ás amizades como poden atoparte en Mastodon. + share_title: Comparte o teu perfil en Mastodon + sign_in_action: Acceder subject: Benvida a Mastodon title: Benvida, %{name}! users: diff --git a/config/locales/he.yml b/config/locales/he.yml index 766a6537731129..59f562c2c94715 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1906,9 +1906,42 @@ he: silence: חשבון מוגבל suspend: חשבון מושעה welcome: - edit_profile_action: הגדרת פרופיל - edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך. + apps_android_action: זמין ב־Google Play + apps_ios_action: זמין ב־App Store + apps_step: התקינו את היישומונים הרשמיים. + apps_title: יישומונים של מסטודון + checklist_subtitle: 'נעזור לך לצאת למסע אל האופק החברתי החדש:' + checklist_title: רשימת פריטים לקבלת הפנים + edit_profile_action: התאמה אישית + edit_profile_step: כדאי להשלים את הפרופיל כדי לעודד אחרים ליצירת קשר. + edit_profile_title: התאמה אישית של הפרופיל explanation: הנה כמה טיפים לעזור לך להתחיל + feature_action: מידע נוסף + feature_audience: מסטודון מספקת לך אפשרות ייחודית של ניהול הקהל ללא מתווכים. מסטודון מותקן על שרת משלך יאפשר לך לעקוב ולהעקב מכל שרת מסטודון ברשת בשליטתך הבלעדית. + feature_audience_title: בנו את הקהל שלכםן בבטחה + feature_control: אתםן יודעיםות בדיוק מה תרצו לראות בפיד הבית. אין פה פרסומות ואלגוריתמים שיבזבזו את זמנכם. עקבו אחרי כל משתמשי מסטודון משלל שרתים מתוך חשבון אחד וקבלו את ההודעות שלהםן לפי סדר הפרסום, וכך תצרו לכם את פינת האינטרנט המתאימה לכן אישית. + feature_control_title: השארו בשליטה על ציר הזמן שלכם + feature_creativity: מסטודון תומך בהודעות עם שמע, חוזי ותמונות, עם תאורים למוגבלי ראייה, משאלים, אזהרות תוכן, אווטרים מונפשים, אמוג'י מותאמים אישית, שליטה בחיתוך תמונות מוקטנות ועוד, כדי שתוכלו לבטא את עצמכןם ברשת. בין אם תפרסמו אמנות, מוזיקה או פודקסטים אישיים, מסטודון פה בשבילכם. + feature_creativity_title: יצירתיות ללא פשרות + feature_moderation: מסטודון מחזיר לידיכן את ההחלטות. כל שרת יוצר לעצמו את חוקיו, שנאכפים מקומית ולא "מלמעלה" כמו באתרים מסחריים, מה שהופך אותו לגמיש ביותר בשירות הרצונות והצרכים של קבוצות שונות. הצטרפו לשרת שאתםן מסכימותים עם חוקיו, או הקימו משלכןם. + feature_moderation_title: ניהול דיונים כמו שצריך + follow_action: לעקוב + follow_step: עקיבה אחרי אנשים מעניינים זו מטרתו של מסטודון. + follow_title: התאימו אישית את ציר זמן הבית שלכםן + follows_subtitle: לעקיבה אחרי חלשבונות ידועים + follows_title: אחרי מי לעקוב + follows_view_more: ראו עוד א.נשים לעקוב אחריהן.ם + hashtags_recent_count: "%{people} אנשים ב־%{days} ימים" + hashtags_subtitle: לחקור מהם הנושאים החמים ביומיים האחרונים + hashtags_title: תגיות חמות + hashtags_view_more: צפיה בעוד תגיות שכרגע חוזרות הרבה + post_action: חיבור הודעה + post_step: ברכו לשלום את העולם עם מלל, תמונות, חוזי או משאלים. + post_title: כתבו את הפוסט הראשון שלכםן + share_action: שיתוף + share_step: ספרו לחברים איך למצוא אתכם במסטודון. + share_title: שיתוף פרופיל מסטודון + sign_in_action: התחברות subject: ברוכים הבאים למסטודון title: ברוך/ה הבא/ה, %{name} ! users: diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 4f6cdf480fcc98..c5020f6f9f665b 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -251,7 +251,6 @@ hr: silence: Račun je ograničen suspend: Račun je suspendiran welcome: - edit_profile_action: Postavi profil subject: Dobro došli na Mastodon users: invalid_otp_token: Nevažeći dvo-faktorski kôd diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 00566514c91156..76fef4633aada4 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1842,9 +1842,42 @@ hu: silence: Lekorlátozott fiók suspend: Felfüggesztett fiók welcome: - edit_profile_action: Készítsd el profilod - edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek. + apps_android_action: Beszerzés a Google Play-en + apps_ios_action: Letöltés az App Store-ból + apps_step: Hivatalos alkalmazásaink letöltése. + apps_title: Mastodon alkalmazások + checklist_subtitle: 'Indulás a közösségi érintkezés új élvonalába:' + checklist_title: Üdvözlő ellenőrzőlista + edit_profile_action: Személyre szabás + edit_profile_step: Növeld az interakciószámot egy átfogó profillal. + edit_profile_title: Profil testreszabása explanation: Néhány tipp a kezdeti lépésekhez + feature_action: További információk + feature_audience: A Mastodon egyedülálló lehetőséget biztosít arra, hogy közvetítők nélkül kezeld a közönségedet. A saját infrastruktúrádra telepített Mastodon lehetővé teszi, hogy kövess másokat, és ők is tudjanak követni bármely más online Mastodon-kiszolgálóról, és ez ne legyen saját magadon kívül senki más irányítása alatt. + feature_audience_title: Építsd magabiztosan a közönségedet + feature_control: Te tudod legjobban, hogy mit szeretnél látni a kezdőlapodon. Nincsenek algoritmusok vagy reklámok, melyek pazarolnák az idődet. Kövess bárkit, bármelyik Mastodon-kiszolgálón, egyetlen fiókkal, és fogadd a bejegyzéseiket időrendi sorrendben, így a saját ízlésednek tetszővé teheted az internet egy kis szegletét. + feature_control_title: Vedd kézbe az idővonalad feletti irányítást + feature_creativity: A Mastodon támogatja a hangot, a videót és a képeket tartalmazó bejegyzéseket, az akadálymentesítési leírásokat, a szavazásokat, a tartalmi figyelmeztetéseket, az animált profilképeket, az egyéni emodzsikat, a bélyegképek körbevágását és még több mindent, hogy segítsen az online önkifejezésben. Tegyél közzé műalkotásokat, zenét vagy podcastet, a Mastodonra számíthatsz. + feature_creativity_title: Páratlan kreativitás + feature_moderation: A Mastodon visszaadja a döntést a te kezedbe. Minden kiszolgáló saját szabályokkal rendelkezik, melyeket helyben tartatnak be, és nem központilag, mint a céges közösségi médiánál, így a lehető legrugalmasabban lehet válaszolni emberek különböző csoportjainak igényeire. Csatlakozz egy kiszolgálóhoz, melynek egyetértesz a szabályaival, vagy készíts egy sajátot. + feature_moderation_title: Moderálás, ahogy annak lennie kell + follow_action: Követés + follow_step: A Mastodon az érdekes emberek követéséről szól. + follow_title: Saját hírfolyam testreszabása + follows_subtitle: Jól ismert fiókok követése + follows_title: Kit érdemes követni + follows_view_more: További követendő személyek megtekintése + hashtags_recent_count: "%{people} személy az elmúlt %{days} napban" + hashtags_subtitle: Fedezd fel, mi felkapott az elmúlt 2 napban + hashtags_title: Felkapott hashtagek + hashtags_view_more: További felkapott hashtagek megtekintése + post_action: Bejegyzés írása + post_step: Köszöntsd a világot szöveggel, fotókkal, videókkal vagy szavazásokkal. + post_title: Az első bejegyzés létrehozása + share_action: Megosztás + share_step: Tudasd az ismerőseiddel, hogyan találhatnak meg a Mastodonon. + share_title: Oszd meg a Mastodon profilodat + sign_in_action: Bejelentkezés subject: Üdvözöl a Mastodon title: Üdv a fedélzeten, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index d870f5073c38d7..4125c1110e1af3 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -873,7 +873,6 @@ hy: silence: Հաշիւը սահմանափակուած է suspend: Հաշիւը արգելափակուած է welcome: - edit_profile_action: Կարգաւորել հաշիւը subject: Բարի գալուստ Մաստոդոն title: Բարի գալուստ նաւամատոյց, %{name} users: diff --git a/config/locales/id.yml b/config/locales/id.yml index a32ee8407a1ae1..1655b744ff5715 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1556,8 +1556,6 @@ id: silence: Akun dibatasi suspend: Akun ditangguhkan welcome: - edit_profile_action: Siapkan profil - edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda. explanation: Beberapa tips sebelum Anda memulai subject: Selamat datang di Mastodon title: Selamat datang, %{name}! diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 55aba94d180901..222b82ba8080ce 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1842,9 +1842,42 @@ ie: silence: Conto limitat suspend: Conto suspendet welcome: - edit_profile_action: Configuration de profil - edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te. + apps_android_action: Obtener it sur Google Play + apps_ios_action: Descargar sur li App Store + apps_step: Descargar nor aplis oficial. + apps_title: Aplis de Mastodon + checklist_subtitle: 'Lass nos auxiliar te comensar sur ti-ci frontiera social:' + checklist_title: Lista de benevenit + edit_profile_action: Personalisar + edit_profile_step: Agranda tui interactiones per un profil detalliat. + edit_profile_title: Personalisar tui profil explanation: Vi quelc suggestiones por que tu mey comensar + feature_action: Aprender plu + feature_audience: Mastodon te da un possibilitá unic de administrar tui audientie sin intervenitores. Mastodon, desplegat che tui propri servitor, permisse que tu sequeye e esseye sequet de quelcunc altri Mastodon-servitores in li internet, e ne es controlat de quicunc quam tu. + feature_audience_title: Agrandar tui audientie in confidentie + feature_control: Tu save max bon ti quel tu vole vider sur tui initial témpor-linea. Null algoritmes o reclames por prodigar tui témpor. Seque quicunc che quelcunc Mastodon-servitor de un singul conto e recive lor postas in órdine cronologic, e fa que tui parte del internet esseye un poc plu quam tu. + feature_control_title: Resta in control de tui propri témpor-linea + feature_creativity: Mastodon permisse postas con audio, video e images, descriptiones de accessibilitá, avises de contenete, animat profil-images, personalisat emojis, control del acurtation de images de previse, a plu, por auxiliar te expresser te. Si tu publica tui art, tui musica, o tui podcast, Mastodon va apoyar te. + feature_creativity_title: Ínparalelat creativitá + feature_moderation: Mastodon retromette li potentie de far decisiones in tui manus. Chascun servitor crea su propri regules, queles es infortiat localmen e ne universalmen quam che social medies corporat, dunc it es li max flexibil pri responder al besones de diferent gruppes de gente. Adhere a un servitor con regules con queles tu concorda, o mantene tui propri. + feature_moderation_title: Moderandi moderation + follow_action: Sequer + follow_step: Sequer interessant gente es to quo importa in Mastodon. + follow_title: Personalisar tui hemal témpor-linea + follows_subtitle: Sequer famosi contos + follows_title: Persones a sequer + follows_view_more: Vider plu persones a sequer + hashtags_recent_count: "%{people} persones in li passat %{days} dies" + hashtags_subtitle: Explorar li postas de tendentie durant li passat 2 dies + hashtags_title: Populari hashtags + hashtags_view_more: Vider plu hashtags in tendentie + post_action: Composir + post_step: Saluta li munde con textu, images, videos o balotationes. + post_title: Crear tui unesim posta + share_action: Compartir + share_step: Informar tui amics qualmen trovar te che Mastodon. + share_title: Partir tui profil Mastodon + sign_in_action: Intrar subject: Benevenit a Mastodon title: Benevenit, %{name}! users: diff --git a/config/locales/io.yml b/config/locales/io.yml index e85641b9237112..32769effa4dbf5 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1795,8 +1795,6 @@ io: silence: Konto limitizesis suspend: Konto restriktigesis welcome: - edit_profile_action: Facez profilo - edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu. explanation: Subo esas guidilo por helpar vu komencar subject: Bonveno a Mastodon title: Bonveno, %{name}! diff --git a/config/locales/is.yml b/config/locales/is.yml index 771ed2fbf1fc7b..df0391bfa3ea7b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1846,9 +1846,42 @@ is: silence: Notandaaðgangur takmarkaður suspend: Notandaaðgangur í frysti welcome: - edit_profile_action: Setja upp notandasnið - edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér. + apps_android_action: Fáðu það á Google Play + apps_ios_action: Sækja í App Store + apps_step: Sæktu opinberu forritin okkar. + apps_title: Mastodon-forrit + checklist_subtitle: 'Komum þér í gang á þessum nýja samfélagsmiðli:' + checklist_title: Til minnis í upphafi + edit_profile_action: Sérsníða + edit_profile_step: Annað fólk er líklegra til að eiga samskipti við þig ef þý setur einhverjar áhugaverðar upplýsingar í notandasniðið þitt. + edit_profile_title: Sérsníddu notandasniðið þitt explanation: Hér eru nokkrar ábendingar til að koma þér í gang + feature_action: Kanna nánar + feature_audience: Mastodon gefur þér einstakt tækifæri til að eiga í samskiptum við áhorfendur þína milliliðalaust. Mastodon-netþjónn sem settur er upp á þínu eigin kerfi er ekki undir neins stjórn nema þinnar og gerir þér kleift að fylgjast með og eiga fylgjendur á hverjum þeim Mastodon-netþjóni sem er tengdur við internetið. + feature_audience_title: Byggðu upp orðspor þitt og áheyrendafjölda + feature_control: Þú veist best hvað þú vilt sjá í heimastreyminu þínu. Engin reiknirit eða auglýsingar að þvælast fyrir. Fylgstu af einum aðgangi með hverjum sem er á milli Mastodon-netþjóna og fáðu færslurnar þeirra í tímaröð, þannig geturðu útbúið þitt eigið lítið horn á internetinu þar sem hlutirnir eru að þínu skapi. + feature_control_title: Hafðu stjórn á þinni eigin tímalínu + feature_creativity: Mastodon styður færslur með hljóði, myndum og myndskeiðum, lýsingum fyrir aukið aðgengi, kannanir, aðvörunum vegna efnis, hreyanlegum auðkennismyndum, sérsniðnum tjáningartáknum, utanskurði smámynda ásamt fleiru; til að hjálpa þér við að tjá þig á netinu. Hvort sem þú sért að gefa út listina þína, tónlist eða hlaðvarp, þá er Mastodon til staðar fyrir þig. + feature_creativity_title: Óviðjafnanleg sköpunargleði + feature_moderation: Mastodon setur ákvarðanatökur aftur í þínar hendur. Hver netþjónn býr til sínar eigin reglur og venjur, sem gilda fyrir þann netþjón en eru ekki boðaðar með valdi að ofan og niður líkt og á samfélagsnetum stórfyrirtækja. Á þennan hátt svarar samfélagsmiðillinn þörfum mismunandi hópa. Taktu þátt á netþjóni með reglum sem þú samþykkir, eða hýstu þinn eigin. + feature_moderation_title: Umsjón með efni eins og slík á að vera + follow_action: Fylgjast með + follow_step: Að fylgjast með áhugaverðu fólki er það sem Mastodon snýst um. + follow_title: Aðlagaðu heimastreymið þitt eftir þínu höfði + follows_subtitle: Fylgstu með vel þekktum notendum + follows_title: Hverjum ætti að fylgjast með + follows_view_more: Skoða fleira fólk til að fylgjast með + hashtags_recent_count: "%{people} manns á síðustu %{days} dögum" + hashtags_subtitle: Skoðaðu hvað sé búið að vera í umræðunni síðustu 2 dagana + hashtags_title: Vinsæl myllumerki + hashtags_view_more: Sjá fleiri vinsæl myllumerki + post_action: Skrifa + post_step: Heilsaðu heiminum með texta, ljósmyndum, myndskeiðum eða könnunum. + post_title: Gerðu fyrstu færsluna þína + share_action: Deila + share_step: Láttu vini þína vita hvernig þeir geta fundið þig á Mastodon. + share_title: Deildu notandasniðinu þínu + sign_in_action: Skrá inn subject: Velkomin í Mastodon title: Velkomin/n um borð, %{name}! users: diff --git a/config/locales/it.yml b/config/locales/it.yml index d85f0359d190f4..64015bd98d54dc 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1844,9 +1844,42 @@ it: silence: Account limitato suspend: Account sospeso welcome: - edit_profile_action: Configura profilo - edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti. + apps_android_action: Scaricalo da Google Play + apps_ios_action: Scarica dall'App Store + apps_step: Scarica le nostre app ufficiali. + apps_title: App di Mastodon + checklist_subtitle: 'Iniziamo su questa nuova frontiera sociale:' + checklist_title: Lista di controllo di Benvenuto + edit_profile_action: Personalizza + edit_profile_step: Gli altri hanno maggiori probabilità di interagire con te se completi il tuo profilo. + edit_profile_title: Personalizza il tuo profilo explanation: Ecco alcuni suggerimenti per iniziare + feature_action: Scopri di più + feature_audience: Mastodon ti offre una possibilità unica di gestire il tuo pubblico senza intermediari. Mastodon, distribuito sulla tua stessa infrastruttura, ti permette di seguire e di essere seguito da qualsiasi altro server Mastodon online, e non è controllato da nessun altro, eccetto te. + feature_audience_title: Costruisci il tuo pubblico in sicurezza + feature_control: Tu sai cosa sia meglio vedere sul tuo home feed. Nessun algoritmo o annunci che sprechino il tuo tempo. Segui chiunque attraverso qualsiasi server Mastodon da un singolo account e ricevi i loro messaggi in ordine cronologico, e rendi il tuo angolo di internet un po' più come te. + feature_control_title: Rimani in controllo della tua timeline + feature_creativity: Mastodon supporta audio, filmati e post, descrizioni di accessibilità, sondaggi, avvisi di contenuto, avatar animati, emoji personalizzate, controllo del ritaglio delle miniature e altro ancora, per aiutarti a esprimerti online. Che tu stia pubblicando la tua arte, la tua musica o il tuo podcast, Mastodon è lì per te. + feature_creativity_title: Creatività senza precedenti + feature_moderation: Mastodon rimette il processo decisionale nelle tue mani. Ogni server crea le proprie regole che vengono applicate localmente e non dall'alto verso il basso come i social media aziendali, rendendo più flessibile il rispondere alle esigenze di diversi gruppi di persone. Unisciti a un server con regole con cui sei d'accordo o ospita il tuo. + feature_moderation_title: Moderazione come dovrebbe essere + follow_action: Segui + follow_step: Seguire persone interessanti è ciò che fa Mastodon. + follow_title: Personalizza il tuo home feed + follows_subtitle: Segui account ben noti + follows_title: Chi seguire + follows_view_more: Visualizza più persone da seguire + hashtags_recent_count: "%{people} persone negli ultimi %{days} giorni" + hashtags_subtitle: Esplora le tendenze degli ultimi 2 giorni + hashtags_title: Hashtag di tendenza + hashtags_view_more: Visualizza altri hashtag di tendenza + post_action: Scrivi + post_step: Salutate il mondo con testo, foto, video o sondaggi. + post_title: Scrivi il tuo primo post + share_action: Condividi + share_step: Fai sapere ai tuoi amici come trovarti su Mastodon. + share_title: Condividi il tuo profilo Mastodon + sign_in_action: Accedi subject: Benvenuto/a su Mastodon title: Benvenuto a bordo, %{name}! users: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 15e66631f55061..ae5203baee9778 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1810,11 +1810,42 @@ ja: silence: アカウントがサイレンスにされました suspend: アカウントが停止されました welcome: - edit_profile_action: プロフィールを設定 - edit_profile_step: |- - プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。 - 新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。 + apps_android_action: Google Play で手に入れよう + apps_ios_action: App Store からダウンロード + apps_step: 公式アプリのダウンロード + apps_title: Mastodon アプリ + checklist_subtitle: 新世代のSNSが始まります + checklist_title: 最初のステップはここから + edit_profile_action: プロフィール設定 + edit_profile_step: ほかのユーザーが親しみやすいように、プロフィールを整えましょう。 + edit_profile_title: プロフィールを設定しましょう explanation: 始めるにあたってのアドバイスです + feature_action: もっと詳しく + feature_audience: Mastodonでは、誰の仲介もなく、あなた自身でオーディエンスの管理を行うことができます。あなたのインフラストラクチャー上にデプロイされたMastodon上でも、ほかのどんなMastodonサーバーのアカウントをフォローすることも、フォローされることもでき、それらはもちろんあなた自身で制御できます。 + feature_audience_title: 自信を持ってオーディエンスを構築 + feature_control: ホームフィードで見たいものは、あなたが一番よく知っています。時間を無駄にするアルゴリズムや広告はありません。ひとつのアカウントからすべてのMastodonサーバーの投稿を時系列で受け取り、インターネットの隅っこをもう少しあなたらしくしましょう。 + feature_control_title: 自分のタイムラインを管理 + feature_creativity: Mastodonでは、自己表現を多様にするため、音声・動画・画像の投稿や、アクセシビリティ用説明、投票・コンテンツ警告・動くアバター・カスタム絵文字・サムネイル切り抜き設定などをサポートしています。アートや音楽、ポッドキャストを投稿したいあなたにもMastodonはピッタリです。 + feature_creativity_title: 比類なきクリエイティビティ + feature_moderation: Mastodonでは意思決定はあなたの手にあります。それぞれのサーバーで適用されるルールや規則を策定できます。これらは、企業運営のソーシャルメディアとは違いサーバー単位でローカルに適用されるため、さまざまなグループのニーズに最も柔軟に対応することができるのです。 + feature_moderation_title: サーバー運営をあるべき姿で + follow_action: フォロー + follow_step: ユーザーをフォローしてみましょう。これがMastodonを楽しむ基本です。 + follow_title: 自分のホームタイムラインを作る + follows_subtitle: 人気アカウントをフォロー + follows_title: フォローを増やしてみませんか? + follows_view_more: フォローするユーザーを探す + hashtags_recent_count: "%{days} 日間で %{people} 人が共有" + hashtags_subtitle: 過去2日間のトレンドを見る + hashtags_title: トレンドのハッシュタグ + hashtags_view_more: トレンドのハッシュタグをもっと見る + post_action: 作成 + post_step: 試しになにか書いてみましょう。写真、ビデオ、アンケートなど、なんでも大丈夫です. + post_title: はじめての投稿 + share_action: 共有 + share_step: Mastodon アカウントをほかの人に紹介しましょう。 + share_title: プロフィールをシェアする + sign_in_action: ログイン subject: Mastodonへようこそ title: ようこそ、%{name}さん! users: diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 1b3d48810ee488..74b86346002279 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -470,7 +470,6 @@ ka: subject: თქვენი არქივი გადმოსაწერად მზადაა title: არქივის მიღება welcome: - edit_profile_action: პროფილის მოწყობა explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში title: კეთილი იყოს თქვენი მობრძანება, %{name}! diff --git a/config/locales/kab.yml b/config/locales/kab.yml index d278c15c93f467..b25a4e3a1d0fa4 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -61,7 +61,7 @@ kab: invite_request_text: Timental n tmerna invited_by: Inced-it-id ip: Tansa IP - joined: Ikcemed deg + joined: Izeddi da seg ass n location: all: Akk local: Adigan @@ -95,6 +95,7 @@ kab: remove_header: Kkes tacacit resend_confirmation: already_confirmed: Amseqdac-agi yettwasentem yakan + send: Ɛawed-iyi-d aseɣwen n usentem reset: Wennez reset_password: Beddel awal uffir resubscribe: Ales ajerred @@ -229,6 +230,7 @@ kab: enable: Rmed enabled: Yermed enabled_msg: Imuji yermed mebla ugur + image_hint: PNG neɣ GIF arma d %{size} list: Tabdart new: title: Timerna n imuji udmawan amaynut @@ -279,6 +281,8 @@ kab: create: Rnu taɣult title: Timerna n taɣult tamaynut n imayl ɣer tebdart taberkant title: Tabdart taberkant n imayl + export_domain_blocks: + no_file: Ulac afaylu yettwafernen follow_recommendations: language: I tutlayt status: Addad @@ -290,6 +294,8 @@ kab: by_domain: Taɣult content_policies: policy: Tasertit + dashboard: + instance_languages_dimension: Tutlayin ifazen delivery: all: Akk clear: Sfeḍ tuccḍiwin n usiweḍ @@ -409,6 +415,7 @@ kab: modes: none: Yiwen·t ur yzmir ad izeddi open: Zemren akk ad jerden + title: Iɣewwaṛen n uqeddac site_uploads: delete: Kkes afaylu yulin software_updates: @@ -421,15 +428,22 @@ kab: language: Tutlayt media: title: Amidya + open: Ldi tasuffeɣt title: Tisuffaɣ n umiḍan trending: Ayen mucaɛen visibility: Abani with_media: S umidya + system_checks: + rules_check: + action: Sefrek ilugan n uqeddac title: Tadbelt trends: allow: Sireg statuses: title: Tisuffaɣ mucaɛen + tags: + dashboard: + tag_languages_dimension: Tutlayin ifazen trending: Ayen mucaɛen warning_presets: add_new: Rnu amaynut @@ -468,29 +482,50 @@ kab: description: prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!" prefix_sign_up: Zeddi di Maṣṭudun assa! + suffix: S umiḍan, tzemreḍ ad tḍefreḍ imdanen, ad d-tessufɣeḍ tisuffaɣ d wembadal n yiznan akked yiseqdacen n yal aqeddac Mastodon d wayen-nniḍen! + didnt_get_confirmation: Ur d-teṭṭifeḍ ara aseɣwen n usentem ? + dont_have_your_security_key: Ulac ɣur-k·m tasarut-ik·im n tɣellist? forgot_password: Tettud awal-ik uffir? log_in_with: Qqen s login: Qqen logout: Ffeɣ migrate_account: Gujj ɣer umiḍan nniḍen or_log_in_with: Neɣ eqqen s + privacy_policy_agreement_html: Ɣriɣ yerna qebleɣ tasertit n tbaḍnit progress: confirm: Sentem imayl + details: Isalli-inek + review: Tamuɣli-nneɣ + rules: Qbel ilugan providers: cas: CAS saml: SAML register: Jerred registration_closed: "%{instance} ur yeqbil ara imttekkiyen imaynuten" + resend_confirmation: Ɛawed-iyi-d aseɣwen n usentem reset_password: Wennez awal uffir rules: + accept: Qbel back: Tuɣalin + preamble_invited: Uqbel ad tkemmleḍ, ttxil-k·m ẓer ilugan i d-sbedden yimkariyen n %{domain}. + title: Kra n yilugan igejdanen. + title_invited: Tettwaɛerḍeḍ. security: Taɣellist set_new_password: Egr-d awal uffir amaynut + setup: + email_below_hint_html: Ssefqed akaram-inek·inem n uspam neɣ ssuter wayeḍ. Tzemreḍ ad tesseɣtiḍ tansa-inek·inem imayl ma yella ur tṣeḥḥa ara. + email_settings_hint_html: Sit ɣef useɣwen i ak-d-nceyyeε akken ad tesfeqdeḍ %{email}. Ad nerǧu da kan. + link_not_received: Ur k-id-iṣaḥ ara wassaɣ ? + new_confirmation_instructions_sent: Ad d-teṭṭfeḍ imayl amaynut s useɣwen n usentem ssya ɣef kra n ddqayeq! sign_in: preamble_html: Kcem ar %{domain} s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya. title: Akeččum ɣer %{domain} + sign_up: + preamble: S umiḍan deg uqeddac-a n Mastodon, ad tizmireḍ ad tḍefreḍ win i ak-yehwan deg uẓeṭṭa, anida yebɣu yili umiḍan-nsen. + title: Iyya ad d-nessewjed tiɣawsiwin i %{domain}. status: account_status: Addad n umiḍan + functional: Amiḍan-inek·inem yetteddu s lekmal-is. use_security_key: Seqdec tasarut n teɣlist challenge: confirm: Kemmel @@ -515,6 +550,7 @@ kab: x_months: "%{count}agu" x_seconds: "%{count}tas" deletes: + confirm_password: Sekcem awal-ik·im uffir n tura akken ad tesfeqdeḍ tamagit-ik·im proceed: Kkes amiḍan warning: username_available: Isem-ik·im n useqdac ad yuɣal yella i tikkelt-nniḍen @@ -524,6 +560,9 @@ kab: status: 'Tasuffeɣt #%{id}' title_actions: none: Ɣur-wat + edit_profile: + basic_information: Talɣut tamatut + hint_html: "Mudd udem i wayen ttwalin medden deg umaɣnu-inek azayez ɣer yidis n yiznan-ik. Imdanen niḍen zemren ad k-ḍefren yernu ad gen assaɣ yid-k mi ara tesɛuḍ amaɣnu yeccuṛen ed tugna n umaɣnu." errors: '500': title: Asebter-ayi d arameɣtu @@ -550,6 +589,9 @@ kab: index: delete: Kkes empty: Ur tesɛid ara imzizdigen. + statuses: + one: "%{count} n tsuffeɣt" + other: "%{count} n tsuffaɣ" title: Imzizdigen new: save: Sekles amsizdeg amaynut @@ -590,6 +632,7 @@ kab: '86400': 1 wass expires_in_prompt: Werǧin generate: Slaled aseɣwen n uɛraḍ + invalid: Aneɛruḍ-a ur iṣeḥḥa ara invited_by: 'Tettwaɛraḍeḍ s ɣur:' max_uses: one: 1 uuseqdec @@ -649,6 +692,9 @@ kab: search: Anadi privacy_policy: title: Tasertit tabaḍnit + redirects: + prompt: Ma tumneḍ aseɣwen-a, sit fell-as akken ad tkemmleḍ. + title: Aql-ik·em ad teffɣeḍ seg %{instance}. relationships: activity: Armud n umiḍan followers: Imeḍfaṛen @@ -742,6 +788,7 @@ kab: vote: Dɣeṛ show_more: Ssken-d ugar show_newer: Ssken-d timaynutin + show_older: Ssken-d tiqburin show_thread: Ssken-d lxiḍ title: '%{name} : "%{quote}"' visibilities: @@ -771,6 +818,8 @@ kab: formats: default: "%d %b %Y, %H:%M" month: "%b %Y" + time: "%H:%M" + with_time_zone: "%d %b %Y, %H:%M %Z" two_factor_authentication: add: Rnu disable: Gdel @@ -792,6 +841,15 @@ kab: silence: Amiḍan yesɛa talast suspend: Amiḍan yettwaḥbas welcome: + apps_step: Zdem-d isnasen-nneɣ unṣiben. + apps_title: Isnasen n Mastodon + feature_action: Issin ugar + follow_action: Ḍfeṛ + follows_title: Anwa ara ḍefṛeḍ + follows_view_more: Ssken-d ugar n medden ay tzemred ad tḍefred + post_step: Ini-as azul i umaḍal s uḍris, s tiwlafin, s tividyutin neɣ s tefranin. + share_action: Bḍu + share_step: Init-asen i yimeddukal-nwen amek ara ken-id-afen deg Mastodon. subject: Ansuf ɣer Maṣṭudun title: Ansuf yessek·em, %{name}! users: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 9528c0950f73e5..1dcbce97eb4b7c 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -718,7 +718,6 @@ kk: silence: Аккаунт шектеулі suspend: Аккаунт тоқтатылды welcome: - edit_profile_action: Профиль өңдеу explanation: Мына кеңестерді шолып өтіңіз subject: Mastodon Желісіне қош келдіңіз title: Ортаға қош келдің, %{name}! diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 1e53006cbbb7df..40af97c6287a96 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1,7 +1,7 @@ --- ko: about: - about_mastodon_html: '미래의 소셜 네트워크: 광고 없음, 기업 감시 없음, 윤리적 설계, 탈중앙화! 여러분만의 데이터를 Mastodon으로 소유하세요!' + about_mastodon_html: '미래의 소셜 네트워크: 광고 없음, 기업 감시 없음, 윤리적 설계, 탈중앙화! 여러분만의 데이터를 Mastodon으로 보호하고 누리세요!' contact_missing: 미설정 contact_unavailable: 없음 hosted_on: "%{domain}에서 호스팅 되는 마스토돈" @@ -14,7 +14,7 @@ ko: instance_actor_flash: 이 계정은 서버 자신을 나타내기 위한 가상의 계정이며 개인 사용자가 아닙니다. 이 계정은 연합을 위해 사용되며 정지되지 않아야 합니다. last_active: 최근 활동 link_verified_on: "%{date}에 이 링크의 소유가 확인되었습니다" - nothing_here: 아무 것도 없습니다! + nothing_here: 텅 비어있네요! pin_errors: following: 추천하려는 사람을 팔로우 하고 있어야 합니다 posts: @@ -67,7 +67,7 @@ ko: enable: 동결 해제 enable_sign_in_token_auth: 이메일 토큰 인증 활성화 enabled: 활성 - enabled_msg: "%{username}의 계정을 성공적으로 얼리기 해제하였습니다" + enabled_msg: "%{username}의 동결을 성공적으로 해제 했습니다." followers: 팔로워 follows: 팔로우 header: 헤더 @@ -75,7 +75,7 @@ ko: invite_request_text: 가입하려는 이유 invited_by: 초대자 ip: IP - joined: 가입 + joined: 가입 날짜 location: all: 전체 local: 로컬 @@ -93,7 +93,7 @@ ko: pending: 대기 중 silenced: 제한됨 suspended: 정지 - title: 중재 + title: 관리 moderation_notes: 중재 참고사항 most_recent_activity: 최근 활동 most_recent_ip: 최근 IP @@ -103,7 +103,7 @@ ko: not_subscribed: 구독하지 않음 pending: 심사 대기 perform_full_suspension: 정지 - previous_strikes: 이전의 처벌들 + previous_strikes: 과거 처벌 previous_strikes_description_html: other: 이 계정에는 %{count}번의 처벌이 있었습니다. promote: 승급 @@ -116,7 +116,7 @@ ko: rejected_msg: 성공적으로 %{username}의 가입 신청서를 반려하였습니다 remote_suspension_irreversible: 이 계정의 데이터는 되돌릴 수 없도록 삭제되었습니다. remote_suspension_reversible_hint_html: 이 계정은 계정이 속한 서버에서 정지되었습니다, 그리고 %{date}에 데이터가 완전히 삭제될 것입니다. 그 때까지는 해당 서버에서 계정을 그대로 복구할 수 있습니다. 만약 지금 당장 이 계정의 모든 데이터를 삭제하고 싶다면, 아래에서 실행할 수 있습니다. - remove_avatar: 아바타 지우기 + remove_avatar: 아바타 삭제 remove_header: 헤더 삭제 removed_avatar_msg: 성공적으로 %{username}의 아바타 이미지를 삭제하였습니다 removed_header_msg: 성공적으로 %{username}의 헤더 이미지를 삭제하였습니다 @@ -1812,9 +1812,39 @@ ko: silence: 계정 제한 됨 suspend: 계정 정지 됨 welcome: - edit_profile_action: 프로필 설정 - edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다. + apps_android_action: Google Play에서 다운로드 + apps_ios_action: App Store에서 다운로드 + apps_step: 공식 앱을 다운로드해보세요. + apps_title: Mastodon 앱 + checklist_subtitle: '이 새로운 소셜미디어를 시작해봅시다:' + checklist_title: 환영 체크리스트 + edit_profile_action: 개인 맞춤 + edit_profile_step: 의미있는 프로필을 작성해 상호작용을 늘려보세요. + edit_profile_title: 프로필 꾸미기 explanation: 시작하기 전에 몇가지 팁들을 준비했습니다 + feature_action: 더 알아보기 + feature_audience: 마스토돈은 중개자 없이 청중을 관리할 수 있는 특별한 가능성을 제공합니다. 자체 인프라에 배포된 마스토돈을 사용하면 온라인에 있는 다른 마스토돈 서버에도 팔로우하거나 팔로우할 수 있으며, 본인 외에는 누구의 통제도 받지 않습니다. + feature_control_title: 내 타임라인에 대해 통제권을 유지하세요 + feature_creativity: 마스토돈은 오디오, 비디오, 사진, 접근성 설명(alt), 투표, 콘텐츠 주의 (블라인드), 움직이는 아바타, 커스텀 이모티콘, 썸네일 자르기, 그리고 더 많은 것들을 당신이 온라인에서 당신을 더 잘 드러낼 수 있도록 돕기위해 지원합니다. 당신이 그림이나 음악을 올리던, 팟캐스트 같은것을 진행하던 마스토돈이 함께합니다. + feature_moderation: 마스토돈은 의사 결정권을 사용자에게 돌려줍니다. 각 서버는 기업 소셜 미디어처럼 하향식이 아닌 로컬에서 시행되는 자체 규칙과 규정을 만들 수 있어 다양한 그룹의 요구에 가장 유연하게 대응할 수 있습니다. 동의하는 규칙이 있는 서버에 가입하거나 직접 서버를 호스팅하세요. + feature_moderation_title: 올바른 중재 + follow_action: 팔로우 + follow_step: 흥미로운 사람들을 팔로우하는 것이 마스토돈의 전부입니다. + follow_title: 내게 맞는 홈 피드 꾸미기 + follows_subtitle: 잘 알려진 계정들을 팔로우 + follows_title: 누구를 팔로우 할 지 + follows_view_more: 팔로우 할 사람들 더 보기 + hashtags_recent_count: 최근 %{days}일동안 %{people} 명 + hashtags_subtitle: 최근 2일간 무엇이 유행했는지 둘러보기 + hashtags_title: 유행하는 해시태그 + hashtags_view_more: 유행하는 해시태그 더 보기 + post_action: 작성 + post_step: 글, 사진, 영상, 또는 투표로 세상에 인사해보세요. + post_title: 첫번째 게시물 쓰기 + share_action: 공유 + share_step: 친구에게 마스토돈에서 나를 찾을 수 있는 방법을 알려주세요. + share_title: 마스토돈 프로필을 공유하세요 + sign_in_action: 로그인 subject: 마스토돈에 오신 것을 환영합니다 title: 환영합니다 %{name} 님! users: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 91ab75ceb085a2..0c44b7555bb21c 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1590,8 +1590,6 @@ ku: silence: Ajimêr sînor kiriye suspend: Ajimêr hatiye rawestandin welcome: - edit_profile_action: Profîlê saz bike - edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî. explanation: Li vir çend serişte hene ku tu dest pê bike subject: Tu bi xêr hatî Mastodon title: Bi xêr hatî, %{name}! diff --git a/config/locales/lad.yml b/config/locales/lad.yml index bed6b44d39890f..22930453754cd8 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1842,9 +1842,26 @@ lad: silence: Kuento limitado suspend: Kuento suspendido welcome: - edit_profile_action: Konfigurasyon de profil - edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte. + apps_android_action: Abasha en Google Play + apps_ios_action: Abasha en App Store + apps_step: Abasha muestras aplikasyones ofisyalas. + apps_title: Aplikasyones de Mastodon + edit_profile_action: Personaliza + edit_profile_step: Kompleta tu profil para aumentar tus enteraksyones. + edit_profile_title: Personaliza tu profil explanation: Aki ay algunos konsejos para ampesar + feature_action: Ambezate mas + follow_action: Sige + follow_title: Personaliza tu linya prinsipala + follows_title: A ken segir + hashtags_title: Etiketas en trend + post_action: Eskrive + post_step: Puedes introdusirte al mundo kon teksto, fotos, videos o anketas. + post_title: Eskrive tu primera publikasyon + share_action: Partaja + share_step: Informa a tus amigos komo toparte en Mastodon. + share_title: Partaja tu profil de Mastodon + sign_in_action: Konektate subject: Bienvenido a Mastodon title: Bienvenido, %{name}! users: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 7ffce1a5166950..62336d89d41c6a 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1,7 +1,7 @@ --- lt: about: - about_mastodon_html: 'Ateities socialinis tinklas: jokių reklamų, jokių įmonių sekimo, etiškas dizainas ir decentralizacija. Turėk savo duomenis su Mastodon!' + about_mastodon_html: 'Ateities socialinis tinklas: jokių reklamų, jokių įmonių sekimo, etiškas dizainas ir decentralizacija! Turėk savo duomenis su Mastodon.' contact_missing: Nenustatyta contact_unavailable: Nėra hosted_on: Mastodon talpinamas %{domain} @@ -15,11 +15,11 @@ lt: other: Sekėjų following: Seka instance_actor_flash: Ši paskyra yra virtualus veikėjas (-a), naudojamas atstovauti pačiam serveriui, o ne atskiram naudotojui. Tai naudojama federacijos tikslais ir neturėtų būti pristabdyta. - last_active: paskutinis aktyumas + last_active: paskutinį kartą aktyvus link_verified_on: Šios nuorodos nuosavybė buvo patikrinta %{date} - nothing_here: Nieko čia nėra! + nothing_here: Nieko čia nėra. pin_errors: - following: Privalai sekti asmenį, kurį nori patvirtinti. + following: Privalai sekti žmogų, kurį nori patvirtinti. posts: few: Įrašai many: Įrašo @@ -37,39 +37,43 @@ lt: accounts: add_email_domain_block: Blokuoti el. pašto domeną approve: Patvirtinti - approved_msg: Sėkmingai patvirtinta %{username} registracijos paraiška + approved_msg: Sėkmingai patvirtinta %{username} registracijos paraiška. are_you_sure: Ar esi įsitikinęs (-usi)? avatar: Avataras by_domain: Domenas change_email: - changed_msg: El. paštas sėkmingai pakeistas! - current_email: Dabartinis el paštas - label: Pakeisti el pašto adresą - new_email: Naujas el pašto adresas - submit: Pakeisti el pašto adresą - title: Pakeisti el pašto adresą vartotojui %{username} + changed_msg: El. paštas sėkmingai pakeistas. + current_email: Dabartinis el. paštas + label: Keisti el. paštą + new_email: Naujas el. paštas + submit: Keisti el. paštą + title: Keisti el. paštą %{username} change_role: + changed_msg: Vaidmuo sėkmingai pakeistas. label: Keisti vaidmenį no_role: Jokios vaidmenį title: Keisti vaidmenį %{username} confirm: Patvirtinti confirmed: Patvirtinta - confirming: Tvirtinama + confirming: Patvirtinama custom: Pasirinktinis delete: Ištrinti duomenis - deleted: Ištrinti + deleted: Ištrinta demote: Pažeminti - disable: Išjungti + destroyed_msg: "%{username} duomenys dabar laukia eilėje, kad būtų netrukus ištrinti." + disable: Sustabdyti disable_sign_in_token_auth: Išjungti el. pašto prieigos rakto tapatybės nustatymą disable_two_factor_authentication: Išjungti 2FA - disabled: Išjungta + disabled: Pristabdyta display_name: Rodomas vardas domain: Domenas - edit: Keisti - email: El paštas - email_status: El pašto statusas - enable: Įjungti + edit: Redaguoti + email: El. paštas + email_status: El. pašto būsena + enable: Panaikinti sustabdymą + enable_sign_in_token_auth: Įjungti el. pašto prieigos rakto tapatybės nustatymą enabled: Įjungta + enabled_msg: Sėkmingai panaikintas %{username} paskyros sustabdymas. followers: Sekėjai follows: Seka header: Antraštė @@ -80,94 +84,264 @@ lt: joined: Prisijungė location: all: Visi - local: Lokali + local: Vietinis remote: Nuotolinis - title: Lokacija - login_status: Prisijungimo statusas - media_attachments: Prisegti medijos failai - memorialize: Paversti į memorija + title: Vieta + login_status: Prisijungimo būsena + media_attachments: Medijos priedai + memorialize: Paversti į memorialinį + memorialized: Memorializuota + memorialized_msg: Sėkmingai paversta %{username} į memorialinę paskyrą. moderation: active: Aktyvus all: Visi + disabled: Išjungta + pending: Laukiama + silenced: Ribotas suspended: Užrakintas - title: Moderacija - moderation_notes: Medaracijos žinutės - most_recent_activity: Paskutinioji veikla - most_recent_ip: Paskutinis IP - no_limits_imposed: Be limitu - not_subscribed: Ne prenumeruota - perform_full_suspension: Užrakinti + title: Prižiūrėjimas + moderation_notes: Prižiūrėjimo pastabos + most_recent_activity: Naujausia veikla + most_recent_ip: Naujausias IP + no_account_selected: Nebuvo pakeistos jokios paskyros, nes nebuvo pasirinkta nė viena. + no_limits_imposed: Nėra nustatytų ribojimų. + no_role_assigned: Nėra priskirto vaidmens. + not_subscribed: Neužprenumeruota + pending: Laukiama peržiūros + perform_full_suspension: Pristabdyti + previous_strikes: Ankstesni pažeidimai + previous_strikes_description_html: + few: Šioje paskyroje yra %{count} pažeidimai. + many: Šioje paskyroje yra %{count} pažeidimas. + one: Šioje paskyroje yra vienas pažeidimas. + other: Šioje paskyroje yra %{count} pažeidimų. promote: Paaukštinti protocol: Protokolas public: Viešas - push_subscription_expires: PuSH prenumeramivas pasibaigė - redownload: Perkrauti profilį - rejected_msg: Sėkmingai patvirtinta %{username} registracijos paraiška + push_subscription_expires: PuSH prenumerata baigiasi + redownload: Atnaujinti profilį + redownloaded_msg: Sėkmingai atnaujintas %{username} profilis iš kilmės šaltinio. + reject: Atmesti + rejected_msg: Sėkmingai atmesta %{username} registracijos paraiška. remote_suspension_irreversible: Šios paskyros duomenys negrįžtamai ištrinti. - remote_suspension_reversible_hint_html: Paskyra jų serveryje buvo sustabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko nuotolinis serveris gali atkurti šią paskyrą be jokių neigiamų pasekmių. Jei norite iš karto pašalinti visus paskyros duomenis, galite tai padaryti toliau. - remove_avatar: Panaikinti profilio nuotrauką - remove_header: Panaikinti antraštę - removed_header_msg: Sėkmingai pašalintas %{username} antraštės paveikslėlis + remote_suspension_reversible_hint_html: Paskyra jų serveryje buvo pristabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko nuotolinis serveris gali atkurti šią paskyrą be jokių neigiamų pasekmių. Jei nori iš karto pašalinti visus paskyros duomenis, gali tai padaryti toliau. + remove_avatar: Pašalinti avatarą + remove_header: Pašalinti antraštę + removed_avatar_msg: Sėkmingai pašalintas %{username} avataro vaizdas. + removed_header_msg: Sėkmingai pašalintas %{username} antraštės vaizdas. resend_confirmation: - already_confirmed: Šis vartotojas jau patvirtintas - send: Dar kartą išsiųsti patvirtinimo nuorodą - success: Patvirtinimo laiškas sėkmingai išsiųstas! - reset: Iš naujo - reset_password: Atkurti slaptažodį - resubscribe: Per prenumeruoti + already_confirmed: Šis naudotojas jau patvirtintas. + send: Iš naujo siųsti patvirtinimo nuorodą + success: Patvirtinimo nuoroda sėkmingai išsiųsta. + reset: Nustatyti iš naujo + reset_password: Nustatyti iš naujo slaptažodį + resubscribe: Prenumeruoti iš naujo role: Vaidmuo search: Ieškoti - search_same_email_domain: Kiti tą patį el. pašto domeną turintys naudotojai - search_same_ip: Kiti tą patį IP turintys naudotojai - security: Apsauga + search_same_email_domain: Kiti naudotojai su tuo pačiu el. pašto domenu + search_same_ip: Kiti naudotojai su tuo pačiu IP + security: Saugumas security_measures: only_password: Tik slaptažodis password_and_2fa: Slaptažodis ir 2FA - sensitized: Pažymėti kaip jautrią informaciją - shared_inbox_url: Bendroji gautųjų URL + sensitive: Priversti žymėti kaip jautrią + sensitized: Pažymėta kaip jautri + shared_inbox_url: Bendras gautiejų URL show: - created_reports: Parašyti raportai - targeted_reports: Reportuotas kitų - silence: Tyla - silenced: Užtildytas - statuses: Statusai + created_reports: Sukurtos ataskaitos + targeted_reports: Pranešė kiti + silence: Riboti + silenced: Ribotas + statuses: Įrašai + strikes: Ankstesni pažeidimai subscribe: Prenumeruoti - suspended: Užrakintas - suspension_irreversible: Šios paskyros duomenys negrįžtamai ištrinti. Galite atšaukti paskyros sustabdymą, kad ja būtų galima naudotis, tačiau nebus atkurti jokie anksčiau turėti duomenys. - suspension_reversible_hint_html: Paskyra sustabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko paskyrą galima atkurti be jokių neigiamų pasekmių. Jei norite iš karto pašalinti visus paskyros duomenis, galite tai padaryti toliau. - title: Vartotojai - unblock_email: El. pašto adreso atblokavimas - unblocked_email_msg: Sėkmingai atblokuotas %{username} el. pašto adresas - unconfirmed_email: Nepatvirtintas el pašto adresas - undo_silenced: Atšaukti užtildymą - undo_suspension: Atšaukti užrakinimą - unsilenced_msg: Sėkmingai panaikintas %{username} paskyros apribojimas - unsubscribe: Nebeprenumeruoti - unsuspended_msg: Sėkmingai panaikintas %{username} paskyros apribojimas - username: Slapyvardis + suspend: Pristabdyti + suspended: Pristabdyta + suspension_irreversible: Šios paskyros duomenys negrįžtamai ištrinti. Gali atšaukti paskyros pristabdymą, kad ja būtų galima naudotis, bet nebus atkurti jokie anksčiau turėti duomenys. + suspension_reversible_hint_html: Paskyra pristabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko paskyrą galima atkurti be jokių neigiamų pasekmių. Jei nori iš karto pašalinti visus paskyros duomenis, gali tai padaryti toliau. + title: Naudotojai + unblock_email: Atblokuoti el. pašto adresą + unblocked_email_msg: Sėkmingai atblokuotas %{username} el. pašto adresas. + unconfirmed_email: Nepatvirtintas el. pašto adresas. + undo_sensitized: Atšaukti privertimą žymėti kaip jautrią + undo_silenced: Atšaukti ribojimą + undo_suspension: Atšaukti pristabdymą + unsilenced_msg: Sėkmingai atšauktas %{username} paskyros ribojimas. + unsubscribe: Atšaukti prenumeratą + unsuspended_msg: Sėkmingai panaikintas %{username} paskyros pristabdymas. + username: Naudotojo vardas view_domain: Peržiūrėti domeno santrauką warn: Įspėti + web: Žiniatinklis whitelisted: Leidžiama federacijai action_logs: + action_types: + approve_appeal: Patvirtinti apeliaciją + approve_user: Patvirtinti naudotoją + assigned_to_self_report: Priskirti ataskaitą + change_email_user: Keisti el. paštą naudotojui + change_role_user: Keisti naudotojo vaidmenį + confirm_user: Patvirtinti naudotoją + create_account_warning: Kurti įspėjimą + create_announcement: Kurti skelbimą + create_canonical_email_block: Kurti el. pašto bloką + create_custom_emoji: Kurti pasirinktinį jaustuką + create_domain_allow: Kurti domeno leidimą + create_domain_block: Kurti domeno bloką + create_email_domain_block: Kurti el. pašto domeno bloką + create_ip_block: Kurti IP taisyklę + create_unavailable_domain: Kurti nepasiekiamą domeną + create_user_role: Kurti vaidmenį + demote_user: Pažeminti naudotoją + destroy_announcement: Ištrinti skelbimą + destroy_canonical_email_block: Ištrinti el. pašto bloką + destroy_custom_emoji: Ištrinti pasirinktinį jaustuką + destroy_domain_allow: Ištrinti domeno leidimą + destroy_domain_block: Ištrinti domeno bloką + destroy_email_domain_block: Ištrinti el. pašto domeno bloką + destroy_instance: Išvalyti domeną + destroy_ip_block: Ištrinti IP taisyklę + destroy_status: Ištrinti įrašą + destroy_unavailable_domain: Ištrinti nepasiekiamą domeną + destroy_user_role: Sunaikinti vaidmenį + disable_2fa_user: Išjungti 2FA + disable_custom_emoji: Išjungti pasirinktinį jaustuką + disable_sign_in_token_auth_user: Išjungti el. pašto prieigos rakto tapatybės nustatymą naudotojui + disable_user: Išjungti naudotoją + enable_custom_emoji: Įjungti pasirinktinį jaustuką + enable_sign_in_token_auth_user: Įjungti el. pašto prieigos rakto tapatybės nustatymą naudotojui + enable_user: Įjungti naudotoją + memorialize_account: Memorializuoti paskyrą + promote_user: Paaukštinti naudotoją + reject_appeal: Atmesti apeliaciją + reject_user: Atmesti naudotoją + remove_avatar_user: Pašalinti avatarą + reopen_report: Iš naujo atidaryti ataskaitą + resend_user: Iš naujo siųsti patvirtinimo laišką + reset_password_user: Nustatyti iš naujo slaptažodį + resolve_report: Išspręsti ataskaitą + sensitive_account: Priversti žymėti kaip jautrią paskyrai + silence_account: Riboti paskyrą + suspend_account: Pristabdyti paskyrą + unassigned_report: Panaikinti priskyrimą ataskaitą + unblock_email_account: Atblokuoti el. pašto adresą + unsensitive_account: Atšaukti privertimą žymėti kaip jautrią paskyrai + unsilence_account: Atšaukti riboti paskyrą + unsuspend_account: Atšaukti paskyros pristabdymą + update_announcement: Atnaujinti skelbimą + update_custom_emoji: Atnaujinti pasirinktinį jaustuką + update_domain_block: Atnaujinti domeno bloką + update_ip_block: Atnaujinti IP taisyklę + update_status: Atnaujinti įrašą + update_user_role: Atnaujinti vaidmenį + actions: + approve_appeal_html: "%{name} patvirtino prižiūjimo veiksmo apeliaciją iš %{target}" + approve_user_html: "%{name} patvirtino registraciją iš %{target}" + assigned_to_self_report_html: "%{name} paskyrė ataskaitą %{target} saviems" + change_email_user_html: "%{name} pakeitė el. paštą naudotojui %{target}" + change_role_user_html: "%{name} pakeitė vaidmenį %{target}" + confirm_user_html: "%{name} patvirtino el. paštą naudotojui %{target}" + create_account_warning_html: "%{name} išsiuntė įspėjimą %{target}" + create_announcement_html: "%{name} sukūrė naują skelbimą %{target}" + create_canonical_email_block_html: "%{name} užblokavo el. paštą su maišu %{target}" + create_custom_emoji_html: "%{name} įkėlė naują jaustuką %{target}" + create_domain_allow_html: "%{name} leido federaciją su domenu %{target}" + create_domain_block_html: "%{name} užblokavo domeną %{target}" + create_email_domain_block_html: "%{name} užblokavo el. pašto domeną %{target}" + create_ip_block_html: "%{name} sukūrė taisyklę IP %{target}" + create_unavailable_domain_html: "%{name} sustabdė tiekimą į domeną %{target}" + create_user_role_html: "%{name} sukūrė %{target} vaidmenį" + demote_user_html: "%{name} pažemino naudotoją %{target}" + destroy_announcement_html: "%{name} ištrynė skelbimą %{target}" + destroy_canonical_email_block_html: "%{name} atblokavo el. paštą su maišu %{target}" + destroy_custom_emoji_html: "%{name} ištrynė jaustuką %{target}" + destroy_domain_allow_html: "%{name} neleido federacijos su domenu %{target}" + destroy_domain_block_html: "%{name} atblokavo domeną %{target}" + destroy_email_domain_block_html: "%{name} atblokavo el. pašto domeną %{target}" + destroy_instance_html: "%{name} išvalė domeną %{target}" + destroy_ip_block_html: "%{name} ištrynė taisyklę IP %{target}" + destroy_status_html: "%{name} pašalino įrašą %{target}" + destroy_unavailable_domain_html: "%{name} pratęsė tiekimą į domeną %{target}" + destroy_user_role_html: "%{name} ištrynė %{target} vaidmenį" + disable_2fa_user_html: "%{name} išjungė dviejų veiksnių reikalavimą naudotojui %{target}" + disable_custom_emoji_html: "%{name} išjungė jaustuką %{target}" + disable_sign_in_token_auth_user_html: "%{name} išjungė el. pašto prieigos tapatybės nustatymą %{target}" + disable_user_html: "%{name} išjungė prisijungimą naudotojui %{target}" + enable_custom_emoji_html: "%{name} įjungė jaustuką %{target}" + enable_sign_in_token_auth_user_html: "%{name} įjungė el. pašto prieigos tapatybės nustatymą %{target}" + enable_user_html: "%{name} įjungė prisijungimą naudotojui %{target}" + memorialize_account_html: "%{name} pavertė %{target} paskyrą į atminimo puslapį" + promote_user_html: "%{name} paaukštino naudotoją %{target}" + reject_appeal_html: "%{name} atmetė prižiūjimo veiksmo apeliaciją iš %{target}" + reject_user_html: "%{name} atmetė registraciją iš %{target}" + remove_avatar_user_html: "%{name} pašalino %{target} avatarą" + reopen_report_html: "%{name} atidarė ataskaitą %{target}" + resend_user_html: "%{name} iš naujo išsiuntė patvirtinimo el. laišką %{target}" + reset_password_user_html: "%{name} iš naujo nustatė naudotojo slaptažodį %{target}" + resolve_report_html: "%{name} išsprendė ataskaitą %{target}" + sensitive_account_html: "%{name} pažymėjo %{target} mediją kaip jautrią" + silence_account_html: "%{name} apribojo %{target} paskyrą" + suspend_account_html: "%{name} pristabdė %{target} paskyrą" + unassigned_report_html: "%{name} panaikino priskyrimą ataskaitui %{target}" + unblock_email_account_html: "%{name} atblokavo %{target} el. pašto adresą" + unsensitive_account_html: "%{name} panaikino %{target} medijos žymėjimą kaip jautrią" + unsilence_account_html: "%{name} panaikino %{target} paskyros ribojimą" + unsuspend_account_html: "%{name} atšaukė %{target} paskyros pristabdymą" + update_announcement_html: "%{name} atnaujino skelbimą %{target}" + update_custom_emoji_html: "%{name} atnaujino jaustuką %{target}" + update_domain_block_html: "%{name} atnaujino domeno bloką %{target}" + update_ip_block_html: "%{name} pakeitė taisyklę IP %{target}" + update_status_html: "%{name} atnaujino įrašą %{target}" + update_user_role_html: "%{name} pakeitė %{target} vaidmenį" + deleted_account: ištrinta paskyra + empty: Žurnalų nerasta. + filter_by_action: Filtruoti pagal veiksmą + filter_by_user: Filtruoti pagal naudotoją title: Audito žurnalas + announcements: + destroyed_msg: Skelbimas sėkmingai ištrintas. + edit: + title: Redaguoti skelbimą + empty: Skelbimų nerasta. + live: Tiesiogiai + new: + create: Sukurti skelbimą + title: Naujas skelbimas + publish: Skelbti + published_msg: Skelbimas sėkmingai paskelbtas. + scheduled_for: Suplanuota %{time} + scheduled_msg: Skelbimas suplanuotas paskelbti. + title: Skelbimai + unpublish: Panaikinti skelbimą + unpublished_msg: Skelbimas sėkmingai panaikintas. + updated_msg: Skelbimas sėkmingai atnaujintas. + critical_update_pending: Laukiama kritinio naujinimo custom_emojis: + assign_category: Priskirti kategoriją by_domain: Domenas - copied_msg: Sėkmingai sukurta lokali jaustuko kopija + copied_msg: Sėkmingai sukurta vietinė jaustuko kopija. copy: Kopijuoti - copy_failed_msg: Lokali jaustuko kopija negalėjo būti sukurta - created_msg: Jaustukas sukurtas sėkmingai! + copy_failed_msg: Nepavyko sukurti vietinės šios jaustuko kopijos. + create_new_category: Sukurti naują kategoriją + created_msg: Jaustukas sėkmingai sukurtas. delete: Ištrinti destroyed_msg: Jaustukas sėkmingai sunaikintas! disable: Išjungti - disabled_msg: Šis jaustukas sėkmingai išjungtas + disabled: Išjungta + disabled_msg: Sėkmingai išjungtas tas jaustukas. emoji: Jaustukas enable: Įjungti - enabled_msg: Šis jaustukas sėkmingai įjungtas + enabled: Įjungta + enabled_msg: Sėkmingai įjungtas tas jaustukas. + image_hint: PNG arba GIF iki %{size} + list: Sąrašas listed: Įtrauktas į sąrašą new: - title: Pridėti naują jaustuką + title: Pridėti naują pasirinktinį jaustuką + no_emoji_selected: Jaustukos nebuvo pakeistos, nes nebuvo pasirinktos. + not_permitted: Tau neleidžiama atlikti šio veiksmo. overwrite: Perrašyti - shortcode: Trumpas-kodas + shortcode: Trumpas kodas shortcode_hint: Bent du ženklai, tik raidiniai skaitmeniniai ženklai bei akcentai(_) title: Asmeniniai jaustukai unlisted: Neįtrauktas į sąrašą @@ -175,14 +349,58 @@ lt: updated_msg: Jaustukas sėkmingai pakeistas! upload: Įkelti dashboard: + active_users: aktyvūs naudotojai + interactions: sąveikos + media_storage: Medijos saugykla + new_users: nauji naudotojai + opened_reports: atidaryti ataskaitos + pending_appeals_html: + few: "%{count} laukiantys apeliacijos" + many: "%{count} laukiama apeliacija" + one: "%{count} laukiama apeliacija" + other: "%{count} laukiančių apeliacijų" + pending_reports_html: + few: "%{count} laukiami ataskaitos" + many: "%{count} laukiama ataskaita" + one: "%{count} laukiama ataskaita" + other: "%{count} laukiančių ataskaitų" + pending_tags_html: + few: "%{count} laukiantys saitažodžiai" + many: "%{count} laukiama saitažodis" + one: "%{count} laukiama saitažodis" + other: "%{count} laukiančių saitažodžių" + pending_users_html: + few: "%{count} laukiami naudotojai" + many: "%{count} laukiama naudotojas" + one: "%{count} laukiama naudotojas" + other: "%{count} laukiančių naudotojų" + resolved_reports: išspręstos ataskaitos software: Programinė įranga - space: Naudojama atmintis - title: Pagrindinis puslapis + sources: Registracijos šaltiniai + space: Vietos naudojimas + title: Sąvadas + top_languages: Populiariausios aktyvios kalbos + top_servers: Populiariausi aktyvūs serveriai + website: Svetainė + disputes: + appeals: + empty: Apeliacijų nerasta. + title: Apeliacijos + domain_allows: + add_new: Leisti federaciją su domenu + created_msg: Domenas buvo sėkmingai leistas federacijai. + destroyed_msg: Domenas buvo neleistas federacijai. + export: Eksportuoti domain_blocks: add_new: Pridėti naują domeno bloką created_msg: Domeno užblokavimas nagrinėjamas destroyed_msg: Domeno blokas pašalintas domain: Domenas + edit: Redaguoti domeno bloką + existing_domain_block: Tu jau nustatei griežtesnius apribojimus %{name}. + existing_domain_block_html: Tu jau nustatei griežtesnius apribojimus %{name}, pirmiausia turi atblokuoti jį. + export: Eksportuoti + import: Importuoti new: create: Sukurti bloką hint: Domeno blokavimas nesustabdys vartotojų paskyrų sukūrimo duomenų sistemoje, tačiau automatiškai pritaikys atitinkamus moderavimo metodus šioms paskyroms. @@ -606,8 +824,42 @@ lt: silence: Paskyra limituota suspend: Paskyra užrakinta welcome: - edit_profile_action: Nustatyti profilį + apps_android_action: Gauti per Google Play + apps_ios_action: Atsisiųsti per App Store + apps_step: Atsisiųsk oficialias programėles. + apps_title: Mastodon programėlės + checklist_subtitle: 'Pradėkime pažintį su šia nauja socialine sritimi:' + checklist_title: Pasveikinimo sąrašas + edit_profile_action: Suasmeninti + edit_profile_step: Padidink savo sąveiką turint išsamų profilį. + edit_profile_title: Suasmenink savo profilį explanation: Štai keletas patarimų, kaip pradėti + feature_action: Sužinoti daugiau + feature_audience: Mastodon suteikia unikalią galimybę valdyti savo auditoriją be tarpininkų. Tavo infrastruktūroje įdiegtas Mastodon leidžia sekti ir būti sekamam iš bet kurio kito Mastodon serverio internete ir yra kontroliuojamas tik tavęs. + feature_audience_title: Užtikrintai kurk savo auditoriją + feature_control: Tu geriausiai žinai, ką nori matyti savo pagrindiniame sraute. Jokių algoritmų ar reklamų, kurios gaištų tavo laiką. Iš vienos paskyros sek bet kurį asmenį bet kuriame Mastodon serveryje, gauk jo įrašus chronologine tvarka ir padaryk savo interneto kampelį šiek tiek panašesnį į save. + feature_control_title: Kontroliuok savo laiko skalę + feature_creativity: Mastodon palaiko garso, vaizdo įrašus ir paveikslėlių įrašus, prieinamumus aprašymus, apklausas, turinio įspėjimus, animuotus avatarus, pasirinktinius jaustukus, miniatiūrų apkarpymo valdymą ir dar daugiau, kad galėtum išreikšti save internete. Nesvarbu, ar publikuoji savo kūrybą, muziką, ar tinklalaidę, Mastodon tau padės. + feature_creativity_title: Neprilygstamas kūrybiškumas + feature_moderation: Mastodon grąžina sprendimų priėmimą į tavo rankas. Kiekvienas serveris kuria savo taisykles ir nuostatus, kurie yra įgyvendinami vietoje, o ne iš viršaus į apačią, kaip įmonių socialinėje medijoje, todėl ši sistema lanksčiausiai reaguoja į skirtingų žmonių grupių poreikius. Prisijunk prie serverio su taisyklėmis, su kuriomis sutinki, arba talpink savo serverį. + feature_moderation_title: Prižiūrėjimas taip, kaip turėtų būti + follow_action: Sekti + follow_step: Sekti įdomius žmones – tai, kas yra Mastodon. + follow_title: Suasmenink savo pagrindinį srautą + follows_subtitle: Sek gerai žinomas paskyras. + follows_title: Ką sekti + follows_view_more: Peržiūrėti daugiau sekamų žmonių + hashtags_recent_count: "%{people} žmonių per pastarąsias %{days} dienas" + hashtags_subtitle: Naršyk, kas tendencinga per pastarąsias 2 dienas. + hashtags_title: Tendencijos saitažodžiai + hashtags_view_more: Peržiūrėti daugiau tendencingų saitažodžių + post_action: Sukurti + post_step: Sakyk labas pasauliui tekstu, nuotraukomis, vaizdo įrašais arba apklausomis. + post_title: Sukūrk savo pirmąjį įrašą + share_action: Bendrinti + share_step: Leisk draugams sužinoti, kaip tave rasti Mastodon. + share_title: Bendrink savo Mastodon profilį + sign_in_action: Prisijungti subject: Sveiki atvykę į Mastodon title: Sveiki atvykę, %{name}! users: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index dc4c39083cd86d..d6d0f05c50a104 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -37,7 +37,7 @@ lv: approve: Apstiprināt approved_msg: Veiksmīgi apstiprināts %{username} reģistrēšanās pieteikums are_you_sure: Vai esi pārliecināts? - avatar: Avatars + avatar: Profila attēls by_domain: Domēns change_email: changed_msg: E-pasts veiksmīgi nomainīts! @@ -65,7 +65,7 @@ lv: disabled: Iesaldēts display_name: Parādāmais vārds domain: Domēns - edit: Rediģēt + edit: Labot email: E-pasts email_status: E-pasta statuss enable: Atsaldēt @@ -122,9 +122,9 @@ lv: rejected_msg: Veiksmīgi noraidīts %{username} reģistrēšanās pieteikums remote_suspension_irreversible: Šī konta dati ir neatgriezeniski dzēsti. remote_suspension_reversible_hint_html: Konts ir apturēts viņu serverī, un dati tiks pilnībā noņemti %{date}. Līdz tam attālais serveris var atjaunot šo kontu bez jebkādām negatīvām sekām. Ja vēlaties nekavējoties noņemt visus konta datus, varat to izdarīt tālāk. - remove_avatar: Noņemt avatāru + remove_avatar: Noņemt profila attēlu remove_header: Noņemt galveni - removed_avatar_msg: Veiksmīgi noņemts %{username} avatāra attēls + removed_avatar_msg: Veiksmīgi noņemts %{username} profila attēls removed_header_msg: Veiksmīgi noņemts %{username} galvenes attēls resend_confirmation: already_confirmed: Šis lietotājs jau ir apstiprināts @@ -212,7 +212,7 @@ lv: promote_user: Izceltt Lietotāju reject_appeal: Noraidīt Apelāciju reject_user: Noraidīt lietotāju - remove_avatar_user: Noņemt Avatāru + remove_avatar_user: Noņemt profila attēlu reopen_report: Atkārtoti Atvērt Ziņojumu resend_user: Atkārtoti nosūtīt Apstiprinājuma Pastu reset_password_user: Atiestatīt Paroli @@ -260,7 +260,7 @@ lv: destroy_status_html: "%{name} noņēma ziņu %{target}" destroy_unavailable_domain_html: "%{name} atjaunoja piegādi uz domēnu %{target}" destroy_user_role_html: "%{name} izdzēsa %{target} lomu" - disable_2fa_user_html: "%{name} atspējoja divfaktoru prasības lietotājam %{target}" + disable_2fa_user_html: "%{name} atspējoja divpakāpju prasības lietotājam %{target}" disable_custom_emoji_html: "%{name} atspējoja emocijzīmi %{target}" disable_sign_in_token_auth_user_html: "%{name} atspējoja e-pasta marķiera autentifikāciju %{target}" disable_user_html: "%{name} atspējoja pieteikšanos lietotājam %{target}" @@ -271,7 +271,7 @@ lv: promote_user_html: "%{name} paaugstināja lietotāju %{target}" reject_appeal_html: "%{name} noraidīja moderācijas lēmuma apelāciju no %{target}" reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}" - remove_avatar_user_html: "%{name} noņēma %{target} avatāru" + remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu" reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" resend_user_html: "%{name} atkārtoti nosūtīja apstiprinājuma e-pastu %{target}" reset_password_user_html: "%{name} atiestatīja paroli lietotājam %{target}" @@ -298,7 +298,7 @@ lv: announcements: destroyed_msg: Paziņojums ir veiksmīgi izdzēsts! edit: - title: Rediģēt paziņojumu + title: Labot paziņojumu empty: Neviens paziņojums netika atrasts. live: Dzīvajā new: @@ -402,7 +402,7 @@ lv: created_msg: Domēna bloķēšana tagad tiek apstrādāta destroyed_msg: Domēna bloķēšana ir atsaukta domain: Domēns - edit: Rediģēt domēna bloķēšanu + edit: Labot domēna aizturēšanu existing_domain_block: Tu jau esi noteicis stingrākus ierobežojumus %{name}. existing_domain_block_html: Tu jau esi noteicis stingrākus ierobežojumus %{name}, vispirms tev jāatbloķē. export: Eksportēt @@ -432,6 +432,7 @@ lv: view: Skatīt domēna bloķēšanu email_domain_blocks: add_new: Pievienot jaunu + allow_registrations_with_approval: Atļaut reģistrāciju ar apstiprināšanu attempts_over_week: one: "%{count} mēģinājums pagājušajā nedēļā" other: "%{count} reģistrēšanās mēģinājumi pagājušajā nedēļā" @@ -467,7 +468,7 @@ lv: title: Importēt bloķētos domēnus no_file: Nav atlasīts neviens fails follow_recommendations: - description_html: "Sekošana rekomendācijām palīdz jaunajiem lietotājiem ātri atrast interesantu saturu. Ja lietotājs nav pietiekami mijiedarbojies ar citiem, lai izveidotu personalizētus ieteikumus, ieteicams izmantot šos kontus. Tie tiek pārrēķināti katru dienu, izmantojot vairākus kontus ar visaugstākajām pēdējā laika saistībām un vislielāko vietējo sekotāju skaitu noteiktā valodā." + description_html: "Sekošanas ieteikumi palīdz jauniem lietotājiem ātri arast saistošu saturu. Kad lietotājs nav pietiekami mijiedarbojies ar citiem, lai veidotos pielāgoti sekošanas iteikumi, tiek ieteikti šie konti. Tie tiek pārskaitļoti ik dienas, izmantojot kontu, kuriem ir augstākās nesenās iesaistīšanās un lielākais vietējo sekotāju skaits norādītajā valodā." language: Valodai status: Statuss suppress: Apspiest sekošanas rekomendāciju @@ -688,7 +689,7 @@ lv: special: Īpašās delete: Dzēst description_html: Izmantojot lietotāju lomas, vari pielāgot, kurām Mastodon funkcijām un apgabaliem var piekļūt tavi lietotāji. - edit: Rediģēt lomu '%{name}' + edit: Labot lomu '%{name}' everyone: Noklusētās atļaujas everyone_full_description_html: Šī ir pamata loma, kas ietekmē visus lietotājus, pat tos, kuriem nav piešķirta loma. Visas pārējās lomas manto atļaujas no šīs. permissions_count: @@ -741,7 +742,7 @@ lv: add_new: Pievienot noteikumu delete: Dzēst description_html: Lai gan lielākā daļa apgalvo, ka ir izlasījuši pakalpojumu sniegšanas noteikumus un piekrīt tiem, parasti cilvēki to izlasa tikai pēc problēmas rašanās. Padariet vienkāršāku sava servera noteikumu uztveršanu, veidojot tos vienkāršā sarakstā pa punktiem. Centieties, lai atsevišķi noteikumi būtu īsi un vienkārši, taču arī nesadaliet tos daudzos atsevišķos vienumos. - edit: Rediģēt noteikumu + edit: Labot nosacījumu empty: Servera noteikumi vēl nav definēti. title: Servera noteikumi settings: @@ -829,7 +830,7 @@ lv: reblogs: Reblogi status_changed: Ziņa mainīta title: Konta ziņas - trending: Populārākie + trending: Aktuāli visibility: Redzamība with_media: Ar multividi strikes: @@ -884,7 +885,7 @@ lv: action: Pārbaudi šeit, lai iegūtu plašāku informāciju message_html: "Tava objektu krātuve ir nepareizi konfigurēta. Tavu lietotāju privātums ir apdraudēts." tags: - review: Pārskatīt statusu + review: Pārskatīt stāvokli updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti title: Administrēšana trends: @@ -894,7 +895,7 @@ lv: links: allow: Atļaut saiti allow_provider: Atļaut publicētāju - description_html: Šīs ir saites, kuras pašlaik bieži koplieto konti, no kuriem tavs serveris redz ziņas. Tas var palīdzēt taviem lietotājiem uzzināt, kas notiek pasaulē. Kamēr tu neapstiprini izdevēju, neviena saite netiek rādīta publiski. Vari arī atļaut vai noraidīt atsevišķas saites. + description_html: Šīs ir saites, kuras pašlaik bieži koplieto konti, no kuriem Tavs serveris redz ziņas. Tas var palīdzēt Taviem lietotājiem uzzināt, kas notiek pasaulē. Neviena saite netiek publiski rādīta, līdz tu apstiprini izdevēju. Tu vari arī atļaut vai noraidīt atsevišķas saites. disallow: Neatļaut saiti disallow_provider: Neatļaut publicētāju no_link_selected: Neviena saite netika mainīta, jo neviena netika atlasīta @@ -902,7 +903,7 @@ lv: no_publisher_selected: Neviens publicētājs netika mainīts, jo neviens netika atlasīts shared_by_over_week: one: Pēdējās nedēļas laikā kopīgoja viena persona - other: Pēdējās nedēļas laikā kopīgoja %{count} personas + other: Pēdējās nedēļas laikā kopīgoja %{count} cilvēki zero: Pēdējās nedēļas laikā kopīgoja %{count} personas title: Populārākās saites usage_comparison: Šodien kopīgots %{today} reizes, salīdzinot ar %{yesterday} vakar @@ -916,10 +917,10 @@ lv: title: Publicētāji rejected: Noraidīts statuses: - allow: Atļaut publicēt + allow: Ļaut veikt ierakstus allow_account: Atļaut autoru - description_html: Šīs ir ziņas, par kurām tavs serveris zina un kuras pašlaik tiek koplietotas un pašlaik ir daudz izlasē. Tas var palīdzēt taviem jaunajiem un atkārtotiem lietotājiem atrast vairāk cilvēku, kam sekot. Neviena ziņa netiek publiski rādīta, kamēr neesi apstiprinājis autoru un autors atļauj savu kontu ieteikt citiem. Vari arī atļaut vai noraidīt atsevišķas ziņas. - disallow: Neatļaut publicēt + description_html: Šie ir ieraksti, par kuriem zina Tavs serveris un kuri pašlaik tiek daudz kopīgoti un pievienoti izlasēm. Tas var palīdzēt jaunajiem lietotājiem un tiem, kuri atgriežas, atrast vairāk cilvēku, kam sekot. Neviens ieraksts netiek publiski rādīts, līdz apstiprināsi autoru un ja autors ļauj savu kontu ieteikt citiem. Tu vari arī atļaut vai noraidīt atsevišķus ierakstus. + disallow: Neļaut veikt ierakstus disallow_account: Neatļaut autoru no_status_selected: Neviena populāra ziņa netika mainīta, jo neviena netika atlasīta not_discoverable: Autors nav izvēlējies būt atklājams @@ -936,7 +937,7 @@ lv: tag_servers_dimension: Populārākie serveri tag_servers_measure: dažādi serveri tag_uses_measure: lietojumi pavisam - description_html: Šīs ir atsauces, kas pašlaik tiek rādītas daudzās ziņās, kuras redz tavs serveris. Tas var palīdzēt taviem lietotājiem uzzināt, par ko cilvēki šobrīd runā visvairāk. Neviena atsauce netiek rādīta publiski, kamēr tu neesi tās apstiprinājis. + description_html: Šie ir tēmturi, kas pašlaik parādās daudzos ierakstos, kurus redz Tavs serveris. Tas var palīdzēt Taviem lietotājiem uzzināt, par ko cilvēki šobrīd runā visvairāk. Neviens tēmturis netiek publiski parādīts, līdz apstiprināsi tos. listable: Var tikt ieteikts no_tag_selected: Neviena atzīme netika mainīta, jo neviena netika atlasīta not_listable: Nevar tikt ieteikts @@ -947,10 +948,10 @@ lv: trendable: Var parādīsies pie tendencēm trending_rank: 'Populārākie #%{rank}' usable: Var tikt lietots - usage_comparison: Šodien lietots %{today} reizes, salīdzinot ar %{yesterday} vakar + usage_comparison: Šodien izmantots %{today} reizes, salīdzinot ar %{yesterday} vakar used_by_over_week: one: Pēdējās nedēļas laikā izmantoja viens cilvēks - other: Pēdējās nedēļas laikā izmantoja %{count} personas + other: Pēdējās nedēļas laikā izmantoja %{count} cilvēki zero: Pēdējās nedēļas laikā izmantoja %{count} personas title: Tendences trending: Populārākie @@ -966,7 +967,7 @@ lv: description_html: Izmantojot tīmekļa aizķeri, Mastodon var nosūtīt jūsu lietojumprogrammai reāllaika paziņojumus par izvēlētajiem notikumiem, lai tava lietojumprogramma varētu automātiski izraisīt reakcijas. disable: Atspējot disabled: Atspējots - edit: Rediģēt galapunktu + edit: Labot galapunktu empty: Tev vēl nav konfigurēts neviens tīmekļa aizķeres galapunkts. enable: Iespējot enabled: Aktīvie @@ -1053,7 +1054,7 @@ lv: auth: apply_for_account: Pieprasīt kontu captcha_confirmation: - help_html: Ja tev ir problēmas ar CAPTCHA risināšanu, vari sazināties ar mums, izmantojot %{email}, un mēs varam tev palīdzēt. + help_html: Ja Tev ir sarežģījumi ar CAPTCHA risināšanu, Tu vari sazināties ar mums e-pasta adresē %{email}, un mēs varēsim Tev palīdzēt. hint_html: Vēl tikai viena lieta! Mums ir jāapstiprina, ka tu esi cilvēks (tas ir tāpēc, lai mēs varētu nepieļaut surogātpasta izsūtīšanu!). Atrisini tālāk norādīto CAPTCHA un noklikšķini uz "Turpināt". title: Drošības pārbaude confirmations: @@ -1065,7 +1066,7 @@ lv: redirect_to_app_html: Tev vajadzētu būt novirzītam uz lietotni %{app_name}. Ja tas nenotika, mēģini %{clicking_this_link} vai manuāli atgriezieties lietotnē. registration_complete: Tava reģistrācija domēnā %{domain} tagad ir pabeigta! welcome_title: Laipni lūdzam, %{name}! - wrong_email_hint: Ja šī e-pasta adrese nav pareiza, varat to mainīt konta iestatījumos. + wrong_email_hint: Ja šī e-pasta adrese nav pareiza, to var mainīt konta iestatījumos. delete_account: Dzēst kontu delete_account_html: Ja vēlies dzēst savu kontu, tu vari turpināt šeit. Tev tiks lūgts apstiprinājums. description: @@ -1076,7 +1077,7 @@ lv: dont_have_your_security_key: Vai tev nav drošības atslēgas? forgot_password: Aizmirsi paroli? invalid_reset_password_token: Paroles atiestatīšanas pilnvara nav derīga, vai tai ir beidzies derīgums. Lūdzu, pieprasi jaunu. - link_to_otp: Ievadi divfaktoru kodu no tālruņa vai atkopšanas kodu + link_to_otp: Jāievada divpakāpju kods no tālruņa vai atkopšanas kods link_to_webauth: Lieto savu drošības atslēgas iekārtu log_in_with: Pieslēgties ar login: Pieteikties @@ -1108,13 +1109,13 @@ lv: security: Drošība set_new_password: Iestatīt jaunu paroli setup: - email_below_hint_html: Pārbaudi savu surogātpasta mapi vai pieprasiet citu. Tu vari labot savu e-pasta adresi, ja tā ir nepareiza. + email_below_hint_html: Pārbaudi savu surogātpasta mapi vai pieprasi vēl vienu! Tu vari labot savu e-pasta adresi, ja tā ir nepareiza. email_settings_hint_html: Noklikšķini uz saites, kuru mēs tev nosūtījām, lai apstiprinātu %{email}. Mēs tepat pagaidīsim. link_not_received: Vai nesaņēmi sati? new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pastu ar apstiprinājuma saiti! title: Pārbaudi savu iesūtni sign_in: - preamble_html: Piesakies ar saviem %{domain} akreditācijas datiem. Ja tavs konts ir mitināts citā serverī, tu nevarēsi pieteikties šeit. + preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja Tavs konts tiek mitināts citā serverī, Tu nevarēsi šeit pieteikties. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. @@ -1123,7 +1124,7 @@ lv: status: account_status: Konta statuss confirming: Gaida e-pasta apstiprinājuma pabeigšanu. - functional: Tavs konts ir pilnībā darboties spējīgs. + functional: Tavs konts ir pilnā darba kārtībā. pending: Tavu pieteikumu gaida mūsu darbinieku izskatīšana. Tas var aizņemt kādu laiku. Ja tavs pieteikums tiks apstiprināts, tu saņemsi e-pastu. redirecting_to: Tavs konts ir neaktīvs, jo pašlaik tas tiek novirzīts uz %{acct}. self_destruct: Tā kā %{domain} tiek slēgts, tu iegūsi tikai ierobežotu piekļuvi savam kontam. @@ -1164,7 +1165,7 @@ lv: proceed: Dzēst kontu success_msg: Tavs konts tika veiksmīgi dzēsts warning: - before: 'Pirms turpināt, lūdzu, uzmanīgi izlasi šīs piezīmes:' + before: 'Pirms turpināšanas lūgums uzmanīgi izlasīt šīs piezīmes:' caches: Citu serveru kešatmiņā saglabātais saturs var saglabāties data_removal: Tavas ziņas un citi dati tiks neatgriezeniski noņemti email_change_html: Tu vari mainīt savu e-pasta adresi, neizdzēšot savu kontu @@ -1187,7 +1188,7 @@ lv: approve_appeal: Apstiprināt apelāciju associated_report: Saistītais ziņojums created_at: Datēts - description_html: Šīs ir darbības, kas veiktas pret tavu kontu, un brīdinājumi, ko tev ir nosūtījuši %{instance} darbinieki. + description_html: Šīs ir darbības, kas veiktas pret Tavu kontu, un brīdinājumi, kurus Tev ir nosūtījuši %{instance} darbinieki. recipient: Adresēts reject_appeal: Noraidīt apelāciju status: 'Publikācija #%{id}' @@ -1208,7 +1209,7 @@ lv: invalid_domain: nav derīgs domēna nosaukums edit_profile: basic_information: Pamata informācija - hint_html: "Pielāgo to, ko cilvēki redz tavā publiskajā profilā un blakus tavām ziņām. Citas personas, visticamāk, sekos tev un sazināsies ar tevi, ja tev būs aizpildīts profils un profila attēls." + hint_html: "Pielāgo, ko cilvēki redz Tavā publiskajā profilā un blakus Taviem ierakstiem. Ir lielāka iespējamība, ka citi clivēki sekos Tev un mijiedarbosies ar Tevi, ja Tev ir aizpildīts profils un profila attēls." other: Cits errors: '400': Tevis iesniegtais pieprasījums bija nederīgs vai nepareizi izveidots. @@ -1221,7 +1222,7 @@ lv: title: Drošības pārbaude neizdevās '429': Pārāk daudz pieprasījumu '500': - content: Atvaino, bet kaut kas mūsu pusē nogāja greizi. + content: Atvainojamies, bet mūsu pusē kaut kas nogāja greizi. title: Šī lapa nav pareiza '503': Lapu nevarēja apkalpot īslaicīgas servera kļūmes dēļ. noscript_html: Lai izmantotu Mastodon web lietojumu, lūdzu, iespējo JavaScript. Vai arī izmēģini kādu no vietējām lietotnēm Mastodon savai platformai. @@ -1247,7 +1248,7 @@ lv: add_new: Pievienot jaunu errors: limit: Tu jau esi piedāvājis maksimālo tēmturu skaitu - hint_html: "Kas ir piedāvātie tēmturi? Tie ir redzami tavā publiskajā profilā un ļauj cilvēkiem pārlūkot tavas publiskās ziņas tieši zem šiem tēmturiem. Tie ir lielisks līdzeklis radošu darbu vai ilgtermiņa projektu izsekošanai." + hint_html: "Izcel savus vissvarīgākos tēmturus savā profilā! Lielisks rīks, lai izsekotu saviem radošajiem darbiem un ilgtermiņa projektiem, izceltie tēmturi tiek attēloti pamanāmi attēloti Tavā profilā un ļauj ātru piekļuvi saviem ierakstiem." filters: contexts: account: Profili @@ -1260,7 +1261,7 @@ lv: keywords: Atslēgvārdi statuses: Individuālās ziņas statuses_hint_html: Šis filtrs attiecas uz atsevišķām ziņām neatkarīgi no tā, vai tās atbilst tālāk norādītajiem atslēgvārdiem. Pārskatīt vai noņemt ziņas no filtra. - title: Rediģēt filtru + title: Labot atlasi errors: deprecated_api_multiple_keywords: Šos parametrus šajā lietojumprogrammā nevar mainīt, jo tie attiecas uz vairāk nekā vienu filtra atslēgvārdu. Izmanto jaunāku lietojumprogrammu vai tīmekļa saskarni. invalid_context: Nav, vai piegādāts nederīgs konteksts @@ -1330,7 +1331,7 @@ lv: too_large: Fails ir pārāk liels failures: Kļūmes imported: Importēti - mismatched_types_warning: Šķiet, ka šim importam esi izvēlējies nepareizu veidu. Lūdzu, pārbaudi vēlreiz. + mismatched_types_warning: Izskatās, ka varētu būt atlasīts nepareizs veids šai ievietošanai. Lūgums pārbaudīt vēlreiz. modes: merge: Apvienot merge_long: Saglabāt esošos ierakstus un pievienot jaunus @@ -1407,11 +1408,11 @@ lv: limit: Jūs esat sasniedzis maksimālo sarakstu skaitu login_activities: authentication_methods: - otp: divfaktoru autentifikācijas lietotne + otp: divpakāpju autentifikācijas lietotne password: parole sign_in_token: e-pasta drošības kods webauthn: drošības atslēgas - description_html: Ja pamani darbības, kuras tu neatpazīsti, apsver iespēju nomainīt savu paroli un iespējot divfaktoru autentifikāciju. + description_html: Ja pamani darbības, kuras neatpazīsti, jāapsver iespēja nomainīt savu paroli un iespējot divpakāpju autentifikāciju. empty: Nav pieejama autentifikācijas vēsture failed_sign_in_html: Neizdevies pierakstīšanās mēģinājums ar %{method} no %{ip} (%{browser}) successful_sign_in_html: Veiksmīga pierakstīšanās ar %{method} no %{ip} (%{browser}) @@ -1460,7 +1461,7 @@ lv: set_redirect: Iestatīt novirzīšanu warning: backreference_required: Jaunais konts vispirms ir jākonfigurē, lai tas atsauktos uz šo kontu - before: 'Pirms turpināt, lūdzu, uzmanīgi izlasi šīs piezīmes:' + before: 'Pirms turpināšanas lūgums uzmanīgi izlasīt šīs piezīmes:' cooldown: Pēc pārcelšanās ir gaidīšanas periods, kura laikā tu vairs nevarēsi pārvietoties disabled_account: Tavs pašreizējais konts pēc tam nebūs pilnībā lietojams. Tomēr tev būs piekļuve datu eksportēšanai, kā arī atkārtotai aktivizēšanai. followers: Veicot šo darbību, visi sekotāji tiks pārvietoti no pašreizējā konta uz jauno kontu @@ -1508,7 +1509,7 @@ lv: status: subject: "%{name} tikko publicēja" update: - subject: "%{name} rediģējis rakstu" + subject: "%{name} laboja ierakstu" notifications: administration_emails: Administrators e-pasta paziņojumi email_events: E-pasta paziņojumu notikumi @@ -1525,12 +1526,12 @@ lv: trillion: T otp_authentication: code_hint: Lai apstiprinātu, ievadi autentifikācijas lietotnes ģenerēto kodu - description_html: Ja iespējosi divfaktoru autentifikāciju, izmantojot autentifikatora lietotni, lai pieteiktos, tev būs nepieciešams tālrunis, kas ģenerēs ievadāmos marķierus. + description_html: Jā iespējo divpakāpju autentifikāciju ar autentificēšanas lietotni, pieteikšanās laikā būs nepieciešams tālrunis, kurā tiks izveidoti ievadāmie kodi. enable: Iespējot instructions_html: "Skenē šo QR kodu Google Authenticator vai līdzīgā TOTP lietotnē savā tālrunī. No šī brīža šī lietotne ģenerēs marķierus, kas tev būs jāievada, piesakoties." manual_instructions: 'Ja nevari noskenēt QR kodu un tas ir jāievada manuāli, šeit ir noslēpums vienkāršā tekstā:' setup: Iestatīt - wrong_code: Ievadītais kods nebija derīgs! Vai servera laiks un ierīces laiks ir pareizs? + wrong_code: Ievadītais kods bija nederīgs. Vai servera un ierīces laiks ir pareizs? pagination: newer: Jaunāks next: Nākamais @@ -1631,7 +1632,7 @@ lv: weibo: Weibo current_session: Pašreizējā sesija description: "%{browser} uz %{platform}" - explanation: Šīs ir tīmekļa pārlūkprogrammas, kurās pašlaik esi pieteicies savā Mastodon kontā. + explanation: Šie ir tīmekļa pārlūki, kuros šobrīd esi pieteicies savā Mastodon kontā. ip: IP platforms: adobe_air: Adobe Air @@ -1660,7 +1661,7 @@ lv: back: Atgriezties Mastodon delete: Konta dzēšana development: Izstrāde - edit_profile: Rediģēt profilu + edit_profile: Labot profilu export: Datu eksports featured_tags: Piedāvātie tēmturi import: Imports @@ -1672,7 +1673,7 @@ lv: relationships: Sekojamie un sekotāji statuses_cleanup: Automātiska ziņu dzēšana strikes: Moderācijas aizrādījumi - two_factor_authentication: Divfaktoru Aut + two_factor_authentication: Divpakāpju autentifikācija webauthn_authentication: Drošības atslēgas statuses: attached: @@ -1696,7 +1697,7 @@ lv: one: 'saturēja neatļautu tēmturi: %{tags}' other: 'saturēja neatļautus tēmturus: %{tags}' zero: 'neatļauti tēmturi: %{tags}' - edited_at_html: Rediģēts %{date} + edited_at_html: Labots %{date} errors: in_reply_not_found: Šķiet, ka ziņa, uz kuru tu mēģini atbildēt, nepastāv. open_in_web: Atvērt webā @@ -1704,12 +1705,12 @@ lv: pin_errors: direct: Ziņojumus, kas ir redzami tikai minētajiem lietotājiem, nevar piespraust limit: Tu jau esi piespraudis maksimālo ziņu skaitu - ownership: Citas personas ziņu nevar piespraust + ownership: Kāda cita ierakstu nevar piespraust reblog: Izceltu ierakstu nevar piespraust poll: total_people: one: "%{count} persona" - other: "%{count} personas" + other: "%{count} cilvēki" zero: "%{count} personu" total_votes: one: "%{count} balss" @@ -1788,13 +1789,13 @@ lv: two_factor_authentication: add: Pievienot disable: Atspējot 2FA - disabled_success: Divfaktoru autentifikācija veiksmīgi atspējota - edit: Rediģēt - enabled: Divfaktoru autentifikācija ir iespējota - enabled_success: Divfaktoru autentifikācija veiksmīgi iespējota + disabled_success: Divpakāpju autentifikācija veiksmīgi atspējota + edit: Labot + enabled: Divpakāpju autentifikācija ir iespējota + enabled_success: Divpakāpju autentifikācija veiksmīgi iespējota generate_recovery_codes: Ģenerēt atkopšanas kodus lost_recovery_codes: Atkopšanas kodi ļauj atgūt piekļuvi tavam kontam, ja pazaudē tālruni. Ja esi pazaudējis atkopšanas kodus, tu vari tos ģenerēt šeit. Tavi vecie atkopšanas kodi tiks anulēti. - methods: Divfaktoru metodes + methods: Divpakāpju veidi otp: Autentifikātora lietotne recovery_codes: Veidot atkopšanas kodu rezerves kopijas recovery_codes_regenerated: Atkopšanas kodi veiksmīgi atjaunoti @@ -1851,9 +1852,8 @@ lv: silence: Konts ierobežots suspend: Konts apturēts welcome: - edit_profile_action: Iestatīt profilu - edit_profile_step: Tu vari pielāgot savu profilu, augšupielādējot profila attēlu, mainot parādāmo vārdu un citas lietas. Vari izvēlēties pārskatīt jaunus sekotājus, pirms atļauj viņiem tev sekot. explanation: Šeit ir daži padomi, kā sākt darbu + feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi. subject: Laipni lūgts Mastodon title: Laipni lūgts uz borta, %{name}! users: @@ -1867,7 +1867,7 @@ lv: extra_instructions_html: Padoms. saite tavā vietnē var būt neredzama. Svarīga daļa ir rel="me", kas novērš uzdošanos vietnēs ar lietotāju ģenerētu saturu. Tu vari pat lapas galvenē izmantot tagu link, nevis a, taču HTML ir jābūt pieejamam, neizpildot JavaScript. here_is_how: Lūk, kā hint_html: "Ikviens var apliecināt savu identitāti Mastodon. Pamatojoties uz atvērtiem tīmekļa standartiem, tagad un uz visiem laikiem bez maksas. Viss, kas tev nepieciešams, ir personīga vietne, pēc kuras cilvēki tevi atpazīst. Kad no sava profila izveidosi saiti uz šo vietni, mēs pārbaudīsim, vai vietne novirza atpakaļ uz tavu profilu, un tajā tiks parādīts vizuāls indikators." - instructions_html: Nokopē un ielīmē tālāk norādīto kodu savas vietnes HTML. Pēc tam pievieno savas vietnes adresi vienā no papildu laukiem savā profilā no cilnes "Rediģēt profilu" un saglabā izmaiņas. + instructions_html: Ievieto starpliktuvē un ielīmē tālāk norādīto kodu savas tīmekļvietnes HTML! Tad pievieno savas tīmekļvietnes adresi vienā no papildu laukiem savā profila cilnē "Labot profilu" un saglabā izmaiņas! verification: Pārbaude verified_links: Tavas verifikācijas saites webauthn_credentials: @@ -1885,5 +1885,5 @@ lv: nickname_hint: Ievadi savas jaunās drošības atslēgas segvārdu not_enabled: Tu vel neesi iespējojis WebAuthn not_supported: Šī pārlūkprogramma neatbalsta drošības atslēgas - otp_required: Lai izmantotu drošības atslēgas, lūdzu, vispirms iespējo divfaktoru autentifikāciju. + otp_required: Lai izmantotu drošības atslēgas, lūgums vispirms iespējot divpakāpju autentifikāciju. registered_on: Reģistrēts %{date} diff --git a/config/locales/ms.yml b/config/locales/ms.yml index e20dfd09e0840d..1704aed3e07f88 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1768,8 +1768,6 @@ ms: silence: Akaun terhad suspend: Akaun digantung welcome: - edit_profile_action: Sediakan profil - edit_profile_step: Anda boleh menyesuaikan profil anda dengan memuat naik gambar profil, menukar nama paparan anda dan banyak lagi. Anda boleh ikut serta untuk menyemak pengikut baharu sebelum mereka dibenarkan mengikuti anda. explanation: Berikut ialah beberapa petua untuk anda bermula subject: Selamat datang kepada Mastodon title: Selamat datang, %{name}! diff --git a/config/locales/my.yml b/config/locales/my.yml index f2c115c17c1134..a01755b6c48a43 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1767,8 +1767,6 @@ my: silence: အကောင့်ကန့်သတ်ထားသည် suspend: အကောင့်ရပ်ဆိုင်းထားသည် welcome: - edit_profile_action: ပရိုဖိုင်ထည့်သွင်းရန် - edit_profile_step: ပရိုဖိုင်ဓာတ်ပုံတစ်ပုံ တင်ခြင်း၊ ဖော်ပြမည့်အမည် ပြောင်းလဲခြင်းနှင့် အခြားအရာများပြုလုပ်ခြင်းတို့ဖြင့် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ စောင့်ကြည့်သူအသစ်များ သင့်ကိုစောင့်ကြည့်ခွင့်မပြုမီ ပြန်လည်သုံးသပ်ရန်အတွက် ဆုံးဖြတ်နိုင်ပါသည်။ explanation: ဤသည်မှာ သင် စတင်အသုံးပြုနိုင်ရန်အတွက် အကြံပြုချက်အချို့ဖြစ်ပါသည် subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။ title: "%{name} က ကြိုဆိုပါတယ်။" diff --git a/config/locales/nl.yml b/config/locales/nl.yml index ac49efddf1f323..8f7cb06b66a440 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1842,9 +1842,42 @@ nl: silence: Account beperkt suspend: Account opgeschort welcome: - edit_profile_action: Profiel instellen - edit_profile_step: Je kunt jouw profiel aanpassen door een profielfoto te uploaden, jouw weergavenaam aan te passen en meer. Je kunt het handmatig goedkeuren van volgers instellen. + apps_android_action: Via Google Play downloaden + apps_ios_action: Via de App Store downloaden + apps_step: Onze officiële apps downloaden. + apps_title: Mastodon-apps + checklist_subtitle: 'Laten we aan dit nieuwe sociale avontuur beginnen:' + checklist_title: Welkomstchecklist + edit_profile_action: Personaliseren + edit_profile_step: Anderen zullen eerder met je in contact treden als je wat over jezelf vertelt. + edit_profile_title: Je profiel aanpassen explanation: Hier zijn enkele tips om je op weg te helpen + feature_action: Meer informatie + feature_audience: Mastodon biedt je een unieke mogelijkheid om je publiek te beheren zonder tussenpersonen. Mastodon, geïmplementeerd in jouw eigen infrastructuur, stelt je in staat om elke andere Mastodon-server online te volgen en door hen gevolgd te worden, en staat onder controle van niemand, behalve die van jou. + feature_audience_title: Bouw jouw publiek in vertrouwen op + feature_control: Je weet zelf het beste wat je op jouw tijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf. + feature_control_title: Houd controle over je eigen tijdlijn + feature_creativity: Mastodon ondersteunt audio-, video- en fotoberichten, toegankelijkheidsbeschrijvingen, peilingen, inhoudswaarschuwingen, geanimeerde profielfoto's, aangepaste lokale emoji's, controle over het bijwerken van thumbnails en meer, om je te helpen jezelf online uit te drukken. Of je nu jouw kunst, jouw muziek of jouw podcast publiceert, Mastodon staat voor je klaar. + feature_creativity_title: Ongeëvenaarde creativiteit + feature_moderation: Mastodon legt de besluitvorming weer in jouw handen. Elke server creëert diens eigen regels en voorschriften, die lokaal worden gehandhaafd en niet van bovenaf zoals sociale media van bedrijven, waardoor het het meest flexibel is in het reageren op de behoeften van verschillende groepen mensen. Word lid van een server met de regels waarmee je akkoord gaat, of host jouw eigen. + feature_moderation_title: Moderatie zoals het hoort + follow_action: Volgen + follow_step: Op Mastodon draait het helemaal om het volgen van interessante mensen. + follow_title: Personaliseer je starttijdlijn + follows_subtitle: Volg bekende accounts + follows_title: Wie te volgen + follows_view_more: Meer mensen om te volgen bekijken + hashtags_recent_count: "%{people} mensen in de afgelopen %{days} dagen" + hashtags_subtitle: Wat er in de afgelopen 2 dagen is gebeurd verkennen + hashtags_title: Populaire hashtags + hashtags_view_more: Meer populaire hashtags bekijken + post_action: Opstellen + post_step: Zeg hallo tegen de wereld met tekst, foto's, video's of peilingen. + post_title: Je eerste bericht schrijven + share_action: Delen + share_step: Laat je vrienden weten waar je op Mastodon bent te vinden. + share_title: Je Mastodonprofiel delen + sign_in_action: Inloggen subject: Welkom op Mastodon title: Welkom aan boord %{name}! users: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 52ed45a675b956..73821e5e28b04f 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1842,9 +1842,42 @@ nn: silence: Konto avgrensa suspend: Konto utvist welcome: - edit_profile_action: Lag til profil - edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. + apps_android_action: Få det på Google Play + apps_ios_action: Last ned på App Store + apps_step: Last ned dei offisielle appane våre. + apps_title: Mastodon-appar + checklist_subtitle: 'La oss hjelpa deg i gang på denne nye sosiale reisa:' + checklist_title: Kom i gang + edit_profile_action: Tilpass til deg + edit_profile_step: Få fleire samhandlingar ved å fylla ut profilen din. + edit_profile_title: Tilpass profilen din explanation: Her er nokre tips for å koma i gang + feature_action: Lær meir + feature_audience: Mastodon gjev deg eit unikt høve til å styra kven som ser innhaldet ditt, utan mellommenn. Viss du installerer Mastodon på din eigen tenar, kan du fylgja og bli fylgt frå alle andre Mastodon-tenarar på nett, og det er ingen andre enn du som har kontrollen. + feature_audience_title: Få tilhengjarar på ein trygg måte + feature_control: Du veit best kva du vil ha på tidslina di. Her er ingen algoritmar eller reklame som kastar bort tida. Du kan fylgja folk på ein kvar Mastodon-tenar frå brukarkontoen din, få innlegga deira i kronologisk rekkjefylgje, og gjera ditt eige hjørne av internett litt meir ditt. + feature_control_title: Hald kontroll over tidslina di + feature_creativity: På Mastodon kan du laga innlegg med lyd, film og bilete, du kan skildra media for betre tilgjenge, du kan laga avrøystingar, innhaldsåtvaringar og eigne smilefjes, du kan klyppa til småbilete og endå meir for å uttrykkja deg på nettet. Mastodon passar for deg, anten du vil skriva eller leggja ut kunst, musikk eller podkastar. + feature_creativity_title: Ustoppeleg kreativt + feature_moderation: Med Mastodon bestemmer du sjølv. Kvar tenar har sine eigne reglar og retningsliner som blir laga lokalt og ikkje sentralt i eit stort firma, slik det er med andre sosiale nettverk. Det gjer at alle slags grupper kan få ein Mastodon-tenar som passar til dei. Du kan bli med på ein tenar som har reglar du er samd med, eller du kan laga din eigen tenar. + feature_moderation_title: Moderering slik det bør vera + follow_action: Fylg + follow_step: Å fylgja interessante folk er det det handlar om på Mastodon. + follow_title: Tilpass tidslina di + follows_subtitle: Fylg kjende folk + follows_title: Kven du kan fylgja + follows_view_more: Sjå fleire du kan fylgja + hashtags_recent_count: "%{people} folk dei siste %{days} dagane" + hashtags_subtitle: Sjå kva som har vore populært dei siste to dagane + hashtags_title: Populære emneknaggar + hashtags_view_more: Sjå fleire populære emneknaggar + post_action: Skriv + post_step: Sei hei til verda med tekst, bilete, filmar eller meiningsmålingar. + post_title: Skriv ditt fyrste innlegg + share_action: Del + share_step: Fortel venene dine korleis dei finn deg på Mastodon. + share_title: Del Mastodon-profilen din + sign_in_action: Logg inn subject: Velkomen til Mastodon title: Velkomen om bord, %{name}! users: diff --git a/config/locales/no.yml b/config/locales/no.yml index db56a065faa5f1..ba3d40a522efb2 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -966,6 +966,8 @@ title: Webhooks webhook: Webhook admin_mailer: + auto_close_registrations: + subject: Registreringer for %{instance} har blitt automatisk byttet til å kreve godkjenning new_appeal: actions: delete_statuses: å slette sine innlegg @@ -1837,9 +1839,30 @@ silence: Kontoen er begrenset suspend: Kontoen er suspendert welcome: - edit_profile_action: Sett opp profil - edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. + apps_android_action: Få den på Google Play + apps_ios_action: Last ned på App Store + apps_step: Last ned våre offisielle apper. + apps_title: Mastodon-apper + checklist_title: Velkomst-sjekkliste + edit_profile_action: Tilpass + edit_profile_title: Tilpass profilen din explanation: Her er noen tips for å komme i gang + feature_action: Lær mer + feature_moderation_title: Moderering slik det burde være + follow_action: Følg + follow_title: Tilpass tidslinjen din + follows_subtitle: Følg godt kjente kontoer + follows_title: Hvem å følge + follows_view_more: Vis flere personer å følge + hashtags_recent_count: "%{people} personer i de siste %{days} dagene" + hashtags_title: Populære emneknagger + hashtags_view_more: Vis flere populære emneknagger + post_step: Si hallo til verdenen med tekst, bilder, videoer, eller meningsmålinger. + post_title: Lag ditt første innlegg + share_action: Del + share_step: La vennene dine vite hvordan finne deg på Mastodon. + share_title: Del Mastadon-profilen din + sign_in_action: Logg inn subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 32b7da6272a33d..9f9f04ba9be0ac 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -965,7 +965,6 @@ oc: silence: Compte limitat suspend: Compte suspendut welcome: - edit_profile_action: Configuracion del perfil explanation: Vaquí qualques astúcias per vos preparar subject: Benvengut a Mastodon title: Vos desirem la benvenguda a bòrd %{name} ! diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 9253f2d020c78a..70e772c4c71569 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1906,9 +1906,42 @@ pl: silence: Konto ograniczone suspend: Konto zawieszone welcome: - edit_profile_action: Skonfiguruj profil - edit_profile_step: Możesz dostosować profil wysyłając awatar, zmieniając wyświetlaną nazwę i o wiele więcej. Jeżeli chcesz, możesz również włączyć przeglądanie i ręczne akceptowanie nowych próśb o możliwość obserwacji Twojego profilu. + apps_android_action: Pobierz z Google Play + apps_ios_action: Pobierz z App Store + apps_step: Pobierz oficjalne aplikacje. + apps_title: Aplikacje Mastodon + checklist_subtitle: 'Aby porządnie rozpocząć użytkowanie Mastodona:' + checklist_title: Powitalna lista kontrolna + edit_profile_action: Personalizuj + edit_profile_step: Inni użytkownicy są bardziej skłonni do interakcji z Tobą jeśli posiadasz wypełniony profil. + edit_profile_title: Spersonalizuj swój profil explanation: Kilka wskazówek, które pomogą Ci rozpocząć + feature_action: Dowiedz się więcej + feature_audience: Mastodon zapewnia ci unikalne możliwości docierania do twojego grona odbiorców bez żadnych pośredników. Postawiony na własnej infrastrukturze, Mastodon pozwala ci obserwować i być obserwowanym z dowolnego innego serwera Mastodona. Nikt, poza tobą samym(-ą), nie ma nad tym kontroli. + feature_audience_title: Buduj swoją publiczność z pewnością + feature_control: Sam(a) wiesz najlepiej, co chcesz widzieć na swojej osi czasu. Brak algorytmów i reklam, które marnują twój cenny czas. Obserwuj dowolne osoby z dowolnego serwera Mastodona przy pomocy jednego konta i otrzymuj ich wpisy w kolejności chronologicznej. Każdy zasługuje na własny kąt w internecie. + feature_control_title: Miej kontrolę nad swoją osią czasu + feature_creativity: Mastodon obsługuje wpisy audio, wideo oraz zdjęcia, jak również opisy zdjęć na potrzeby dostępności, ankiety, ostrzeżenia dotyczące treści, animowane awatary, niestandardowe emoji, kontrolę miniatur zdjęć i więcej, aby pomóc Ci wyrażać siebie. Bez względu na to, czy dzielisz się swoją sztuką, muzyką czy podcastem, Mastodon jest dla ciebie. + feature_creativity_title: Niezrównana kreatywność + feature_moderation: Mastodon oddaje w twoje ręce prawo podejmowania decyzji. Każdy serwer tworzy własne zasady i regulacje, które są egzekwowane lokalnie a nie odgórnie jak w przypadku korporacyjnych mediów społecznościowych. Czyni to Mastodona najbardziej elastyczną platformą dla różnych grup ludzi z różnymi potrzebami. Dołącz do serwera, z którego zasadami zgadzasz się najbardziej, lub stwórz swój własny. + feature_moderation_title: Moderacja we właściwy sposób + follow_action: Obserwuj + follow_step: Zarządzasz swoim własnym kanałem. Wypełnij go interesującymi ludźmi. + follow_title: Spersonalizuj swoją stronę główną + follows_subtitle: Obserwuj dobrze znane konta + follows_title: Kogo obserwować + follows_view_more: Zobacz więcej osób do obserwowania + hashtags_recent_count: "%{people} osób w ostatnie %{days} dni" + hashtags_subtitle: Zobacz, co było popularne przez ostatnie 2 dni + hashtags_title: Popularne hashtagi + hashtags_view_more: Zobacz więcej popularnych hashtagów + post_action: Utwórz wpis + post_step: Przywitaj się ze światem. + post_title: Utwórz swój pierwszy post + share_action: Udostępnij + share_step: Poinformuj swoich przyjaciół jak znaleźć cię na Mastodonie. + share_title: Udostępnij swój profil + sign_in_action: Zaloguj się subject: Witaj w Mastodonie title: Witaj na pokładzie, %{name}! users: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 58e734d9eb0c77..a521af185ed312 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1837,8 +1837,6 @@ pt-BR: silence: Conta silenciada suspend: Conta banida welcome: - edit_profile_action: Configurar perfil - edit_profile_step: Você pode personalizar seu perfil enviando uma foto de perfil, mudando seu nome de exibição e mais. Você pode optar por revisar novos seguidores antes que eles possam te seguir. explanation: Aqui estão algumas dicas para você começar subject: Boas-vindas ao Mastodon title: Boas vindas, %{name}! diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index ebc7f84f4f0edb..bd635d12b670c9 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1842,9 +1842,42 @@ pt-PT: silence: Conta limitada suspend: Conta suspensa welcome: - edit_profile_action: Configurar o perfil - edit_profile_step: Pode personalizar o seu perfil carregando uma imagem de perfil, alterando o nome a exibir, entre outras opções. Pode optar por rever os novos seguidores antes de estes o poderem seguir. + apps_android_action: Baixe no Google Play + apps_ios_action: Baixar na App Store + apps_step: Baixe nossos aplicativos oficiais. + apps_title: Apps Mastodon + checklist_subtitle: 'Vamos começar nesta nova fronteira social:' + checklist_title: Checklist de Boas-vindas + edit_profile_action: Personalizar + edit_profile_step: Aumente suas interações tendo um perfil completo. + edit_profile_title: Personalize seu perfil explanation: Aqui estão algumas dicas para começar + feature_action: Mais informações + feature_audience: Mastodon oferece uma possibilidade única de gerenciar seu público sem intermediários. O Mastodon implantado em sua própria infraestrutura permite que você siga e seja seguido de qualquer outro servidor Mastodon online e não esteja sob o controle de ninguém além do seu. + feature_audience_title: Construa seu público em confiança + feature_control: Você sabe melhor o que deseja ver no feed da sua casa. Sem algoritmos ou anúncios para desperdiçar seu tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba suas postagens em ordem cronológica, deixando seu canto da internet um pouco mais parecido com você. + feature_control_title: Fique no controle da sua própria linha do tempo + feature_creativity: Mastodon suporta postagens de áudio, vídeo e imagens, descrições de acessibilidade, enquetes, avisos de conteúdo, avatares animados, emojis personalizados, controle de corte de miniaturas e muito mais, para ajudá-lo a se expressar online. Esteja você publicando sua arte, sua música ou seu podcast, o Mastodon está lá para você. + feature_creativity_title: Criatividade inigualável + feature_moderation: Mastodon coloca a tomada de decisões de volta em suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível na resposta às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais você concorda ou hospede as suas próprias. + feature_moderation_title: Moderando como deve ser + follow_action: Seguir + follow_step: Seguir pessoas interessantes é do que trata Mastodon. + follow_title: Personalize seu feed residencial + follows_subtitle: Siga contas bem conhecidas + follows_title: Quem seguir + follows_view_more: Veja mais pessoas para seguir + hashtags_recent_count: "%{people} pessoas nos últimos %{days} dias" + hashtags_subtitle: Explore o que está em tendência desde os últimos 2 dias + hashtags_title: Trending hashtags + hashtags_view_more: Ver mais hashtags em alta + post_action: Compor + post_step: Diga olá para o mundo com texto, fotos, vídeos ou enquetes. + post_title: Faça a sua primeira publicação + share_action: Compartilhar + share_step: Diga aos seus amigos como te encontrar no Mastodon. + share_title: Compartilhe seu perfil de Mastodon + sign_in_action: Iniciar sessão subject: Bem-vindo ao Mastodon title: Bem-vindo a bordo, %{name}! users: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 8e4f9e79130f38..747402bb1e6299 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -707,7 +707,6 @@ ro: silence: Cont limitat suspend: Cont suspendat welcome: - edit_profile_action: Configurare profil explanation: Iată câteva sfaturi pentru a începe subject: Bine ai venit title: Bine ai venit la bord, %{name}! diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 1c718c95b2e2ab..83fbe373a01dc1 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1901,8 +1901,6 @@ ru: silence: На учётную запись наложены ограничения suspend: Учётная запись заблокирована welcome: - edit_profile_action: Настроить профиль - edit_profile_step: Вы можете настроить свой профиль добавляя аватарку, изменяя отображаемое имя и так далее. Вы можете вручную подтверждать подписчиков, перед тем как им будет разрешено подписаться на вас. explanation: Вот несколько советов для новичков subject: Добро пожаловать в Mastodon title: Добро пожаловать на борт, %{name}! diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 33ca7ab1d2f78b..ec16c6027d82fb 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1091,7 +1091,6 @@ sc: silence: Contu limitadu suspend: Contu suspèndidu welcome: - edit_profile_action: Cunfigura su profilu explanation: Inoghe ddoe at una paja de impòsitos pro cumintzare subject: Ti donamus su benebènnidu a Mastodon title: Ti donamus su benebènnidu, %{name}! diff --git a/config/locales/sco.yml b/config/locales/sco.yml index d5628c01bc8e9f..5b452fc6bb7d38 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1580,8 +1580,6 @@ sco: silence: Accoont limitit suspend: Accoont suspendit welcome: - edit_profile_action: Setup profile - edit_profile_step: Ye kin customize yer profile bi uploadin a profile picture, chyngin yer display nemm an mair. Ye kin opt-in fir tae luik ower new follaers afore they’re allooed tae follae ye. explanation: Here some tips fir tae get ye stertit subject: Welcome tae Mastodon, 'mon in title: Welcome aboord, %{name}! diff --git a/config/locales/si.yml b/config/locales/si.yml index 28488197c57c30..6afa8f8ef3b839 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1433,7 +1433,6 @@ si: silence: ගිණුම සීමා කර ඇත suspend: ගිණුම අත්හිටුවා ඇත welcome: - edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 12a6ac1fe88153..7d0f799d0cee4a 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -39,14 +39,14 @@ ca: text: Només pots emetre una apel·lació per cada acció defaults: autofollow: Qui es registri a través de la invitació et seguirà automàticament - avatar: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. De com a màxim %{size}. S'escalarà a %{dimensions} px bot: Notifica que aquest compte realitza principalment accions automatitzades i que pot estar no monitorat context: Un o diversos contextos en què s'ha d'aplicar el filtre current_password: Per motius de seguretat, introduïu la contrasenya del compte actual current_username: Per a confirmar, entreu el nom d'usuari del compte actual digest: Només s'envia després d'un llarg període d'inactivitat i només si has rebut algun missatge personal durant la teva absència email: Se t'enviarà un correu electrònic de confirmació - header: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px + header: WEBP, PNG, GIF o JPG. De com a màxim %{size}. S'escalarà a %{dimensions} px inbox_url: Copia l'enllaç de la pàgina principal del relay que vols usar irreversible: Els tuts filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard locale: L'idioma de la interfície d’usuari, els correus i les notificacions push diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 15cf403cf2e831..c2df26c1240080 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -39,12 +39,14 @@ et: text: Otsust on võimalik vaidlustada vaid 1 kord defaults: autofollow: Inimesed, kes loovad konto selle kutse läbi, automaatselt jälgivad sind + avatar: WEBP, PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini bot: Teavita teisi, et see konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma current_password: Sisesta turvalisuse huvides oma siinse konto salasõna current_username: Kinnitamiseks palun sisesta oma konto kasutajanimi digest: Saadetakse ainult pärast pikka tegevusetuse perioodi ja ainult siis, kui on saadetud otsesõnumeid email: Sulle saadetakse e-posti teel kinnituskiri + header: WEBP, PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini inbox_url: Kopeeri soovitud vahendaja avalehe URL irreversible: Filtreeritud postitused kaovad taastamatult, isegi kui filter on hiljem eemaldatud locale: Kasutajaliidese, e-kirjade ja tõuketeadete keel diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 96bf11ef2de00f..3d79f76e8a66e9 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -192,7 +192,7 @@ fi: honeypot: "%{label} (älä täytä)" inbox_url: Välittäjän postilaatikon URL-osoite irreversible: Pudota piilottamisen sijaan - locale: Kieli + locale: Käyttöliittymän kieli max_uses: Käyttökertoja enintään new_password: Uusi salasana note: Elämäkerta diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index 8cedc3b1d5aedf..5dc5ab2c90ee7e 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -39,12 +39,14 @@ fy: text: Jo kinne mar ien kear beswier yntsjinje tsjin in fêststelde oertrêding defaults: autofollow: Minsken dy’t harren fia de útnûging registrearre hawwe, folgje jo automatysk + avatar: WEBP, PNG, GIF of JPG. Maksimaal %{size}. Wurdt ferlytse nei %{dimensions}px bot: Sinjaal nei oare brûkers ta dat dizze account yn haadsaak automatisearre berjochten stjoert en mooglik net kontrolearre wurdt context: Ien of meardere lokaasjes wêr’t it filter aktyf wêze moat current_password: Fier foar feilichheidsredenen it wachtwurd fan jo aktuele account yn current_username: Fier ta befêstiging de brûkersnamme fan jo aktuele account yn digest: Wurdt allinnich nei in lange perioade fan ynaktiviteit ferstjoerd en allinnich wannear’t jo wylst jo ôfwêzigens persoanlike berjochten ûntfongen hawwe email: Jo krije in befêstigings-e-mailberjocht + header: WEBP, PNG, GIF of JPG. Maksimaal %{size}. Wurdt ferlytse nei %{dimensions}px inbox_url: Kopiearje de URL fan de foarside fan de relayserver dy’t jo brûke wolle irreversible: Filtere berjochten ferdwine definityf, sels as it filter letter fuortsmiten wurdt locale: De taal fan de brûkersomjouwing, e-mailberjochten en pushmeldingen diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 7941ac334da736..bd7e44455aca15 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -39,12 +39,14 @@ gd: text: Chan urrainn dhut ath-thagradh a dhèanamh air rabhadh ach aon turas defaults: autofollow: Leanaidh na daoine a chlàraicheas leis a cuireadh thu gu fèin-obrachail + avatar: WEBP, PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px bot: Comharraich do chàch gu bheil an cunntas seo ri gnìomhan fèin-obrachail gu h-àraidh is dh’fhaoidte nach doir duine sam bith sùil air idir context: Na co-theacsaichean air am bi a’ chriathrag an sàs current_password: A chùm tèarainteachd, cuir a-steach facal-faire a’ chunntais làithrich current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh email: Thèid post-d dearbhaidh a chur thugad + header: WEBP, PNG, GIF no JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px inbox_url: Dèan lethbhreac dhen URL o phrìomh-dhuilleag an ath-sheachadain a bu mhiann leat cleachdadh irreversible: Thèid postaichean criathraichte à sealladh gu buan fiù ’s ma bheir thu a’ chriathrag air falbh às dèidh làimhe locale: Cànan eadar-aghaidh a’ chleachdaiche, nam post-d ’s nam brathan putaidh @@ -138,7 +140,7 @@ gd: url: Far an dèid na tachartasan a chur labels: account: - discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean luirg + discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh fields: name: Leubail value: Susbaint diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index eae1ea21793e0e..e7b8e156167b20 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -39,12 +39,14 @@ ja: text: 一度だけ異議を申し立てることができます defaults: autofollow: 招待から登録した人が自動的にあなたをフォローするようになります + avatar: "%{size}までのWEBP、PNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます" bot: このアカウントは主に自動で動作し、人が見ていない可能性があります context: フィルターを適用する対象 (複数選択可) current_password: 現在のアカウントのパスワードを入力してください current_username: 確認のため、現在のアカウントのユーザー名を入力してください digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます email: 確認のメールが送信されます + header: "%{size}までのWEBP、PNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます" inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします irreversible: フィルターが後で削除されても、除外された投稿は元に戻せなくなります locale: ユーザーインターフェース、メールやプッシュ通知の言語 diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index c7370aedf61702..a9b040b0585140 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -2,6 +2,9 @@ kab: simple_form: hints: + account: + display_name: Isem-ik·im ummid neɣ isem-ik·im n uqeṣṣer. + fields: Asebter-ik·im agejdan, imqimen, leεmer, ayen tebɣiḍ. account_alias: acct: Sekcem isem n umseqdac@domain n umiḍan s wansa itebγiḍ ad gujjeḍ account_migration: @@ -11,6 +14,7 @@ kab: type_html: Fren d acu ara txedmeḍ s %{acct} defaults: autofollow: Imdanen ara ijerrden s usnebgi-inek, ad k-ḍefṛen s wudem awurman + bot: Smekti-d wiyaḍ dakken amiḍan-a ixeddem s wudem amezwer tigawin tiwurmanin yernu ur yezmir ara ad yettwaɛass email: Ad n-teṭṭfeḍ imayl i usentem irreversible: Tisuffaɣ i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat locale: Tutlayt n ugrudem, imaylen d tilγa @@ -18,6 +22,7 @@ kab: setting_display_media_default: Ffer teywalt yettwacreḍ d tanafrit setting_display_media_hide_all: Ffer yal tikkelt akk taywalt setting_display_media_show_all: Ffer yal tikkelt teywalt yettwacreḍ d tanafrit + username: Tzemreḍ ad tesqedceḍ isekkilen, uṭṭunen akked yijerriden n wadda imports: data: Afaylu CSV id yusan seg uqeddac-nniḍen n Maṣṭudun ip_block: @@ -82,6 +87,10 @@ kab: form_admin_settings: site_terms: Tasertit tabaḍnit site_title: Isem n uqeddac + interactions: + must_be_follower: Ssewḥel ilɣa seg wid akked tid ur yellin ara d imeḍfaren-ik·im + must_be_following: Ssewḥel ilɣa seg wid akked tid ur tettḍafareḍ ara + must_be_following_dm: Sewḥel iznan usriden sɣur wid akked tid ur tettḍafareḍ ara invite: comment: Awennit invite_request: diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 5d23a7010069f3..133a225405a230 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -8,7 +8,7 @@ lv: fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. indexable: Tavas publiskās ziņas var tikt parādītas Mastodon meklēšanas rezultātos. Personas, kuras ir mijiedarbojušās ar tavām ziņām, var tās meklēt neatkarīgi no tā. note: 'Tu vari @minēt citus cilvēkus vai #mirkļbirkas.' - show_collections: Cilvēki varēs pārlūkot tavus sekotājus un kam tu seko. Cilvēki, kuriem seko, redzēs, ka tu seko viņiem neatkarīgi no tā. + show_collections: Cilvēki varēs pārlūkot Tavus sekotājus un sekojamos. Cilvēki, kuriem Tu seko, redzēs, ka Tu seko viņiem neatkarīgi no tā. unlocked: Cilvēki varēs tev sekot, neprasot apstiprinājumu. Noņem atzīmi, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, pieņemt vai noraidīt jaunus sekotājus. account_alias: acct: Norādi konta lietotājvārdu@domēnu, no kura vēlies pārvākties @@ -39,12 +39,14 @@ lv: text: Brīdinājumu var pārsūdzēt tikai vienu reizi defaults: autofollow: Cilvēki, kuri reģistrējas, izmantojot uzaicinājumu, automātiski sekos tev + avatar: WEBP, PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px bot: Paziņo citiem, ka kontā galvenokārt tiek veiktas automatizētas darbības un tas var netikt uzraudzīts context: Viens vai vairāki konteksti, kur jāpiemēro filtrs current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas email: Tev tiks nosūtīts apstiprinājuma e-pasts + header: WEBP, PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda @@ -57,7 +59,7 @@ lv: setting_display_media_default: Paslēpt multividi, kas atzīmēta kā sensitīva setting_display_media_hide_all: Vienmēr slēpt multividi setting_display_media_show_all: Vienmēr rādīt multividi - setting_use_blurhash: Gradientu pamatā ir paslēpto vizuālo attēlu krāsas, bet neskaidras visas detaļas + setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu username: Tu vari lietot burtus, ciparus un zemsvītras whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam @@ -94,7 +96,7 @@ lv: status_page_url: Tās lapas URL, kurā lietotāji var redzēt šī servera statusu pārtraukuma laikā theme: Tēma, kuru redz apmeklētāji, kuri ir atteikušies, un jaunie lietotāji. thumbnail: Aptuveni 2:1 attēls, kas tiek parādīts kopā ar tava servera informāciju. - timeline_preview: Atteikušies apmeklētāji varēs pārlūkot jaunākās serverī pieejamās publiskās ziņas. + timeline_preview: Atteikušies apmeklētāji varēs pārlūkot jaunākos serverī pieejamos publiskos ierakstus. trendable_by_default: Izlaist aktuālā satura manuālu pārskatīšanu. Atsevišķas preces joprojām var noņemt no tendencēm pēc fakta. trends: Tendences parāda, kuras ziņas, atsauces un ziņu stāsti gūst panākumus tavā serverī. trends_as_landing_page: Šī servera apraksta vietā rādīt aktuālo saturu lietotājiem un apmeklētājiem, kuri ir atteikušies. Nepieciešams iespējot tendences. @@ -174,8 +176,8 @@ lv: text: Paskaidrojiet, kāpēc šis lēmums ir jāatceļ defaults: autofollow: Uzaicini sekot tavam kontam - avatar: Avatars - bot: Šis ir bot konts + avatar: Profila attēls + bot: Šis ir automatizēts konts chosen_languages: Filtrēt valodas confirm_new_password: Apstiprināt jauno paroli confirm_password: Apstiprināt paroli @@ -218,7 +220,7 @@ lv: setting_theme: Vietnes motīvs setting_trends: Parādīt šodienas tendences setting_unfollow_modal: Parādīt apstiprinājuma dialogu pirms pārtraukt kādam sekot - setting_use_blurhash: Rādīt krāsainus gradientus slēptajiem multivides materiāliem + setting_use_blurhash: Rādīt krāsainas pārejas paslēptajiem informācijas nesējiem setting_use_pending_items: Lēnais režīms severity: Smagums sign_in_token_attempt: Drošības kods diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 6c47a9deee2978..a1050c9f91ed82 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -39,12 +39,14 @@ text: Du kan kun anke en advarsel en gang defaults: autofollow: Folk som lager en konto gjennom invitasjonen, vil automatisk følge deg + avatar: WEBP, PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med context: En eller flere sammenhenger der filteret skal gjelde current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: For å bekrefte, vennligst skriv inn brukernavnet til den nåværende kontoen digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte email: Du vil bli tilsendt en bekreftelses-E-post + header: WEBP, PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte innlegg vil ugjenkallelig forsvinne, selv om filteret senere blir fjernet locale: Språket til brukergrensesnittet, e-mailer og push-varsler diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index 62e12201aea668..3214a722dfc1ad 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -39,12 +39,14 @@ sr-Latn: text: Možete podneti samo jednu žalbu na upisan prestup defaults: autofollow: Osobe koje se prijave kroz pozivnice će vas automatski zapratiti + avatar: WEBP, PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px bot: Daje drugima do znanja da ovaj nalog uglavnom vrši automatizovane radnje i možda se ne nadgleda context: Jedan ili više konteksta u kojima treba da se primeni filter current_password: Iz bezbednosnih razloga molimo Vas unesite lozinku trenutnog naloga current_username: Da biste potvrdili, Molimo Vas unesite korisničko ime trenutno aktivnog naloga digest: Šalje se samo posle dužeg perioda neaktivnosti i samo u slučaju da ste primili jednu ili više ličnih poruka tokom Vašeg odsustva email: Biće Vam poslat mejl sa potvrdom + header: WEBP, PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px inbox_url: Kopirajte URL sa naslovne strane releja koji želite koristiti irreversible: Filtrirane obajve će nestati nepovratno, čak i ako je filter kasnije uklonjen locale: Jezik korisničkog okruženja, e-pošte i mobilnih obaveštenja diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index 10434be1e40732..9631efc0531e1b 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -39,12 +39,14 @@ sr: text: Можете поднети само једну жалбу на уписан преступ defaults: autofollow: Особе које се пријаве кроз позивнице ће вас аутоматски запратити + avatar: WEBP, PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px bot: Даје другима до знања да овај налог углавном врши аутоматизоване радње и можда се не надгледа context: Један или више контекста у којима треба да се примени филтер current_password: Из безбедносних разлога молимо Вас унесите лозинку тренутног налога current_username: Да бисте потврдили, Молимо Вас унесите корисничко име тренутно активног налога digest: Шаље се само после дужег периода неактивности и само у случају да сте примили једну или више личних порука током Вашег одсуства email: Биће Вам послат мејл са потврдом + header: WEBP, PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px inbox_url: Копирајте URL са насловне стране релеја који желите користити irreversible: Филтриранe обајве ће нестати неповратно, чак и ако је филтер касније уклоњен locale: Језик корисничког окружења, е-поште и мобилних обавештења diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index fcf3788027cb22..02806e711fc7d3 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -39,12 +39,14 @@ sv: text: Du kan endast överklaga en varning en gång defaults: autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig + avatar: WEBP, PNG, GIF eller JPG. Högst %{size}. Kommer nedskalas till %{dimensions} pixlar bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas context: Ett eller fler sammanhang där filtret ska tillämpas current_password: Av säkerhetsskäl krävs lösenordet till det nuvarande kontot current_username: Ange det nuvarande kontots användarnamn för att bekräfta digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro email: Du kommer att få ett bekräftelsemeddelande via e-post + header: WEBP, PNG, GIF eller JPG. Högst %{size}. Kommer nedskalas till %{dimensions} pixlar inbox_url: Kopiera webbadressen från hemsidan av det ombud du vill använda irreversible: Filtrerade inlägg kommer att försvinna oåterkalleligt, även om filter tas bort senare locale: Språket för användargränssnittet, e-postmeddelanden och push-aviseringar diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 817883941c5a82..ae0a5ea560cb5f 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -39,12 +39,14 @@ vi: text: Bạn chỉ có thể khiếu nại mỗi lần một cảnh cáo defaults: autofollow: Những người đăng ký sẽ tự động theo dõi bạn + avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) email: Bạn sẽ được gửi một email xác minh + header: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index c83a7be75ac123..fe938712e3e9b0 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -11,9 +11,9 @@ zh-TW: show_collections: 人們將能瀏覽您跟隨中及跟隨者帳號。您所跟隨之人能得知您正在跟隨其帳號。 unlocked: 人們將無需額外請求您的同意便能跟隨您的帳號。取消勾選以審查跟隨請求並選擇是否同意或拒絕新跟隨者。 account_alias: - acct: 指定要移動的帳號的「使用者名稱@網域名稱」 + acct: 指定要移動的帳號之「使用者名稱@網域名稱」 account_migration: - acct: 指定要移動至的帳號的「使用者名稱@網域名稱」 + acct: 指定欲移動至帳號之「使用者名稱@網域名稱」 account_warning_preset: text: 您可使用嘟文語法,例如網址、「#」標籤與提及功能 title: 可選。不會向收件者顯示 @@ -33,7 +33,7 @@ zh-TW: all_day: 當選取時,僅顯示出時間範圍中的日期部分 ends_at: 可選的。公告會於該時間點自動取消發布 scheduled_at: 空白則立即發布公告 - starts_at: 可選的。讓公告於特定時間範圍內顯示 + starts_at: 可選的。使公告於特定時間範圍內顯示 text: 您可以使用嘟文語法,但請小心別讓公告太鴨霸而佔據使用者的整個版面。 appeal: text: 您只能對警示提出一次申訴 @@ -52,7 +52,7 @@ zh-TW: locale: 使用者介面、電子郵件與推播通知的語言 password: 使用至少 8 個字元 phrase: 無論是嘟文的本文或是內容警告都會被過濾 - scopes: 允許讓應用程式存取的 API。 若您選擇最高階範圍,則無須選擇個別項目。 + scopes: 允許使應用程式存取的 API。 若您選擇最高階範圍,則無須選擇個別項目。 setting_aggregate_reblogs: 請勿顯示最近已被轉嘟之嘟文的最新轉嘟(只影響最新收到的嘟文) setting_always_send_emails: 一般情況下若您活躍使用 Mastodon ,我們不會寄送電子郵件通知 setting_default_sensitive: 敏感內容媒體預設隱藏,且按一下即可重新顯示 @@ -119,7 +119,7 @@ zh-TW: text: 說明使用者於此伺服器上需遵守的規則或條款。試著維持各項條款簡短而明瞭。 sessions: otp: 請輸入產生自您手機 App 的兩階段驗證碼,或輸入其中一個備用驗證碼: - webauthn: 如果它是 USB 安全金鑰的話,請確認已正確插入,如有需要請觸擊。 + webauthn: 若它是 USB 安全金鑰,請確認已正確插入,如有需要請觸擊。 settings: indexable: 個人檔案可能出現於 Google、Bing、或其他搜尋引擎。 show_application: 將總是顯示您發嘟文之應用程式 @@ -130,7 +130,7 @@ zh-TW: role: 角色控制使用者有哪些權限 user_role: color: 於整個使用者介面中用於角色的顏色,十六進位格式的 RGB - highlighted: 這會讓角色公開可見 + highlighted: 這會使角色公開可見 name: 角色的公開名稱,如果角色設定為顯示為徽章 permissions_as_keys: 有此角色的使用者將有權存取... position: 某些情況下,衝突的解決方式由更高階的角色決定。某些動作只能由優先程度較低的角色執行 @@ -164,7 +164,7 @@ zh-TW: none: 什麼也不做 sensitive: 敏感内容 silence: 安靜 - suspend: 停權並不可逆的刪除帳號資料 + suspend: 停權並不可逆地刪除帳號資料 warning_preset_id: 使用警告預設 announcement: all_day: 全天活動 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index e93cec19f6a20e..1d8866645c2bd8 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -733,7 +733,7 @@ sk: edit_preset: Uprav varovnú predlohu title: Spravuj varovné predlohy webhooks: - delete: Zmazať + delete: Vymaž disable: Vypni disabled: Vypnuté enable: Povoľ @@ -744,6 +744,7 @@ sk: subject: Registrácie na %{instance} boli automaticky prepnuté na vyžadujúce schválenie new_appeal: actions: + delete_statuses: vymazať ich príspevky none: varovanie silence: obmedziť ich účet new_pending_account: @@ -804,6 +805,7 @@ sk: prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!" prefix_sign_up: Zaregistruj sa na Mastodone už dnes! suffix: S pomocou účtu budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi na hocijakom Mastodon serveri, ale aj na iných serveroch! + dont_have_your_security_key: Nemáš svoj bezpečnostný kľúč? forgot_password: Zabudnuté heslo? invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový. log_in_with: Prihlás sa s @@ -814,6 +816,7 @@ sk: or_log_in_with: Alebo prihlás s progress: confirm: Potvrď email + rules: Súhlas s pravidlami register: Zaregistruj sa registration_closed: "%{instance} neprijíma nových členov" resend_confirmation: Odošli potvrdzovací odkaz znovu @@ -1287,8 +1290,14 @@ sk: silence: Účet bol obmedzený suspend: Tvoj účet bol vylúčený welcome: - edit_profile_action: Nastav profil + apps_title: Mastodon aplikácie + edit_profile_action: Prispôsob explanation: Tu nájdeš nejaké tipy do začiatku + feature_action: Zisti viac + follow_action: Nasleduj + post_title: Vytvor svoj prvý príspevok + share_action: Zdieľaj + sign_in_action: Prihlás sa subject: Vitaj na Mastodone title: Vitaj na palube, %{name}! users: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 863b3d72496401..103e16a1f5fb73 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1906,9 +1906,42 @@ sl: silence: Račun je omejen suspend: Račun je suspendiran welcome: - edit_profile_action: Nastavitve profila - edit_profile_step: Profil lahko prilagodite tako, da naložite sliko profila, spremenite pojavno ime in drugo. Lahko izberete, da želite pregledati nove sledilce, preden jim dovolite sledenje. + apps_android_action: Na voljo v Google Play + apps_ios_action: Prenesi iz trgovine App Store + apps_step: Prenesite naše uradne aplikacije. + apps_title: Programi za Mastodon + checklist_subtitle: 'Naj vas pripravimo na doživetja na tej novi družabni meji:' + checklist_title: Seznam dobrodošlice + edit_profile_action: Poosebite + edit_profile_step: Okrepite svoje interakcije z razumljivim profilom. + edit_profile_title: Prilagodite svoj profil explanation: Tu je nekaj nasvetov za začetek + feature_action: Več o tem + feature_audience: Mastodon zagotavlja enkratno možnost upravljanja s svojim občinstvom brez posrednika. Mastodon na lastni infrastrukturi omogoča sledenje drugih in drugim na in s poljubljnega povezanega strežnika Masodon in je zgolj pod vašim nadzorom. + feature_audience_title: Zaupno razvijajte svoje občinstvo + feature_control: Sami najbolje veste, kaj želite videti v svojem viru. Brez algoritmov ali oglasov, ki bi predstavljali izgubo vašega časa. Sledite komur koli prek poljubnega strežnika Mastodon na enem samem računu in prejmite njihove objave v kronološkem zaporedju ter ustvarite svoj kotiček interneta malce bolj po svoji meri in okusu. + feature_control_title: Ohranite nadzor nad svojo časovnico + feature_creativity: Mastodon podpira zvokovne, video in slikovne objave, opise za dostopnost, ankete, opozorila za vsebino, animirane avatarje, čustvenčke po meri, nadzor na obrezavo oglednih sličic in še veliko drugega. Tako se lahko povsem izrazite na spletu. Najsi želite objaviti svoja likovna dela, glasbo ali podkast, Mastodon vam stoji ob strani. + feature_creativity_title: Edinstvena ustvarjalnost + feature_moderation: Mastodon vrača odločanje v vaše roke. Vsak strežnik ustvari lastna pravila in predpise, ki se uveljavljajo krajevno in ne od zgoraj navzdol, kot to velja za korporacijske družabne medije. Zato je kar se da prilagodljiv pri odzivanju na potrebe različnih skupin ljudi. Pridružite se strežniku s pravili, s katerimi se strinjate, ali gostite lastnega. + feature_moderation_title: Moderiranje, kot bi moralo biti + follow_action: Sledite + follow_step: Sledenje zanimivim osebam je bistvo Mastodona. + follow_title: Poosebite svoj domači vir + follows_subtitle: Sledite dobro znanim računom + follows_title: Komu slediti + follows_view_more: Pokaži več oseb za sledenje + hashtags_recent_count: "%{people} oseb v zadnjih %{days} dneh" + hashtags_subtitle: Raziščite, kaj je v trendu zadnja dva dni + hashtags_title: Ključniki v trendu + hashtags_view_more: Pokaži več ključnikov v trendu + post_action: Sestavi + post_step: Pozdravite cel svet z besedilom, fotografijami, videoposnetki ali anketami. + post_title: Ustvarite svojo prvo objavo + share_action: Delite + share_step: Naj prijatelji izvejo, kako vas najdejo na Mastodonu. + share_title: Delite svoj profil Mastodon z drugimi + sign_in_action: Prijava subject: Dobrodošli na Mastodon title: Dobrodošli, %{name}! users: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index d3d5a262fd178f..ecf79da51a4a37 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1838,9 +1838,41 @@ sq: silence: Llogari e kufizuar suspend: Llogari e pezulluar welcome: - edit_profile_action: Ujdisje profili - edit_profile_step: Profilin tuaj mund ta përshtatni duke ngarkuar një figurë, duke ndryshuar emrin tuaj në ekran, etj. Mund të zgjidhni të shqyrtoni ndjekës të rinj, para se të jenë lejuar t’ju ndjekin. + apps_android_action: Merreni në Google Play + apps_ios_action: Shkarkojeni nga App Store + apps_step: Shkarkoni aplikacionet tona zyrtare. + apps_title: Aplikacione Mastodon + checklist_subtitle: 'Le t’ju vëmë në udhë drejt këtij horizonti të ri rrjetesh shoqërorë:' + edit_profile_action: Personalizojeni + edit_profile_step: Përforconi ndërveprimet tuaja, duke pasur një profil shterues. + edit_profile_title: Personalizoni profilin tuaj explanation: Ja disa ndihmëza, sa për t’ia filluar + feature_action: Mësoni më tepër + feature_audience: Mastodon-i ju sjell një mundësi unike për administrimin e publikut tuaj pa të tjerë në mes. Mastodon-i i sendërtuar në infrastrukturë tuajën ju lejon të ndiqni dhe të ndiqeni nga cilido shërbyes tjetër Mastodon në internet dhe është nën kontroll vetëm nga ju dhe askush tjetër. + feature_audience_title: Krijoni me vetëbesim publikun tuaj + feature_control: E dini më mirë se kushdo se ç’doni të shihni në prurjen tuaj të kreut. Pa algoritme apo reklama që ju hanë kot kohën. Ndiqni këdo, në çfarëdo shërbyesi Mastodon, që nga një llogari e vetme dhe merrni postimet e tyre në rend kohor dhe bëjeni këndin tuaj të internetit pak më tepër si ju. + feature_control_title: Mbani kontrollin e rrjedhës tuaj kohore + feature_creativity: Mastodon-i mbulon postime audio, video dhe foto, përshkrime për persona me aftësi të kufizuara, pyetësorë, sinjalizime rreth lënde, avatarë të animuar, emoxhi vetjake, kontroll qethjeje miniaturash, etj, për t’ju ndihmuar të shpreheni në internet. Qoftë kur po botoni art tuajin, muzikë tuajën apo podkastin tuaj, Mastodon-i është gati. + feature_creativity_title: Frymë krijuese e pashoqe + feature_moderation: Mastodon-i e rikthen marrjen e vendimeve në duart tuaja. Çdo shërbyes krijon rregullat dhe rregulloren e vet, të cilat vihen në zbatim lokalisht dhe jo nga sipër, si me mediat shoqërore të korporatave, duke e bërë më të zhdërvjellëtin për t’iu përgjigjur nevojave të grupeve të ndryshme të personave. Bëhuni pjesë e një shërbyesi me rregullat e të cilit pajtoheni, ose strehojeni ju vetë një të tillë. + feature_moderation_title: Moderim ashtu si duhet bërë + follow_action: Ndiqeni + follow_step: Ndjekje personash interesantë është ajo çka përbën thelbin e Mastodon-it. + follow_title: Personalizoni prurjen tuaj të kreut + follows_subtitle: Ndiqni llogari të mirënjohura + follows_title: Cilët të ndiqen + follows_view_more: Shihni më tepër vetë për ndjekje + hashtags_recent_count: "%{people} vetë në %{days} ditët e shkuara" + hashtags_subtitle: Eksploroni ç’është në modëë që prej 2 ditëve të fundit + hashtags_title: Hashtag-ë në modë + hashtags_view_more: Shihni më tepër hashtagë në modë + post_action: Hartoni + post_step: Përshëndetni botën me tekst, foto, video, ose pyetësorë. + post_title: Shkruani postimin tuaj të parë + share_action: Ndajeni me të tjerë + share_step: Bëjuni të ditur shokëve si t’ju gjejnë në Mastodon. + share_title: Ndani me të tjerët profilin tuaj Mastodon + sign_in_action: Hyni subject: Mirë se vini te Mastodon-i title: Mirë se vini, %{name}! users: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 7c7fb390fe397b..c2f9295f1cf867 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -781,13 +781,15 @@ sr-Latn: disabled: Nikome users: Prijavljenim lokalnim korisnicima registrations: + moderation_recommandation: Uverite se da imate adekvatan i reaktivan moderatorski tim pre nego što otvorite registraciju za sve! preamble: Kontrolišite ko sme da napravi nalog na Vašem serveru. title: Registracije registrations_mode: modes: - approved: Odobrenje neophodno za registraciju + approved: Neophodno je odobrenje za registraciju none: Niko ne može da se registruje open: Bilo ko može da se registruje + warning_hint: Preporučujemo da koristite „Neophodno je odobrenje za registraciju” osim ako niste sigurni da vaš moderatorski tim može blagovremeno da obradi neželjenu poštu i zlonamerne registracije. security: authorized_fetch: Zahtevaj autentifikaciju sa združenih servera authorized_fetch_hint: Zahtevanje autentifikacije sa združenih servera omogućuje strožiju primenu blokova i na nivou korisnika i na nivou servera. Međutim, ovo dolazi po cenu smanjenja performansi, smanjuje domet vaših odgovora i može dovesti do problema kompatibilnosti sa nekim združenim uslugama. Pored toga, ovo neće sprečiti posvećene aktere da preuzimaju vaše javne objave i naloge. @@ -984,6 +986,9 @@ sr-Latn: title: Veb-presretač webhook: Veb-presretač admin_mailer: + auto_close_registrations: + body: Zbog nedostatka nedavnih aktivnosti moderatora, registracije na %{instance} su automatski prebačene na zahtevanje ručnog pregleda, kako bi se sprečilo da se %{instance} koristi kao platforma za potencijalne loše aktere. Možete ih vratiti na otvorene registracije u bilo kom trenutku. + subject: Registracije za %{instance} su automatski prebačene na zahtevanje odobrenja new_appeal: actions: delete_statuses: obrisati objave korisnika @@ -1059,7 +1064,7 @@ sr-Latn: hint_html: Samo još jedna stvar! Moramo da potvrdimo da ste ljudsko biće (ovo je da bismo sprečili neželjenu poštu!). Rešite CAPTCHA ispod i kliknite na „Nastavi”. title: Bezbedonosna provera confirmations: - awaiting_review: Vaša adresa e-pošte je potvrđena! Osoblje %{domain} sada pregleda vašu registraciju. Dobićete e-poštu ako odobre vaš nalog! + awaiting_review: Vaša adresa e-pošte je potvrđena! Osoblje %{domain} sada pregleda vašu registraciju. Dobićete e-poštu ako odobre vaš nalog! awaiting_review_title: Vaša registracija se pregleda clicking_this_link: klikom na ovu vezu login_link: prijavi se @@ -1128,7 +1133,7 @@ sr-Latn: functional: Vaš nalog je potpuno operativan. pending: Vaš zahtev je na čekanju za pregled od strane našeg osoblja. Ovo može potrajati neko vreme. Primićete imejl poruku ukoliko Vam zahtev bude odobren. redirecting_to: Vaš nalog je neaktivan jer preusmerava na %{acct}. - self_destruct: Pošto se %{domain} zatvara, dobićete samo ograničen pristup svom nalogu. + self_destruct: Pošto se %{domain} zatvara, dobićete samo ograničen pristup svom nalogu. view_strikes: Pogledajte prethodne prestupe upisane na Vaše ime too_fast: Formular je podnet prebrzo, pokušajte ponovo. use_security_key: Koristite sigurnosni ključ @@ -1393,7 +1398,7 @@ sr-Latn: '86400': 1 dan expires_in_prompt: Nikad generate: Generiši - invalid: Ova pozivnica nije važeća + invalid: Ova pozivnica nije važeća invited_by: 'Pozvao Vas je:' max_uses: few: "%{count} korišćenja" @@ -1610,7 +1615,7 @@ sr-Latn: over_total_limit: Prekoračili ste granicu od %{limit} planiranih objava too_soon: Planirani datum mora biti u budućnosti self_destruct: - lead_html: Nažalost, %{domain} se trajno zatvara. Ako ste tamo imali nalog, nećete moći da nastavite da ga koristite, ali i dalje možete da zatražite rezervnu kopiju svojih podataka. + lead_html: Nažalost, %{domain} se trajno zatvara. Ako ste tamo imali nalog, nećete moći da nastavite da ga koristite, ali i dalje možete da zatražite rezervnu kopiju svojih podataka. title: Ovaj server se zatvara sessions: activity: Poslednja aktivnost @@ -1780,8 +1785,8 @@ sr-Latn: does_not_match_previous_name: ne poklapa se sa prethodnim imenom themes: contrast: Veliki kontrast - default: Mastodon (tamno) - mastodon-light: Mastodon (svetlo) + default: Mastodon (tamna) + mastodon-light: Mastodon (svetla) time: formats: default: "%d %b %Y, %H:%M" @@ -1826,7 +1831,7 @@ sr-Latn: title: Izvoz arhive failed_2fa: details: 'Evo detalja o pokušaju prijavljivanja:' - explanation: Neko je pokušao da se prijavi na vaš nalog ali je dao nevažeći drugi faktor autentifikacije. + explanation: Neko je pokušao da se prijavi na vaš nalog ali je dao nevažeći drugi faktor autentifikacije. further_actions_html: Ako to niste bili vi, preporučujemo vam da odmah %{action} jer može biti ugrožena. subject: Neuspeh drugog faktora autentifikacije title: Nije uspeo drugi faktor autentifikacije @@ -1869,9 +1874,42 @@ sr-Latn: silence: Nalog ograničen suspend: Nalog suspendovan welcome: - edit_profile_action: Podesi nalog - edit_profile_step: Možete prilagoditi svoj profil tako što ćete postaviti profilnu sliku, promeniti ime za prikaz i tako dalje. Možete dati saglasnost da pregledate nove pratioce pre nego što im dozvolite da Vas zaprate. + apps_android_action: Nabavite na Google Play + apps_ios_action: Preuzmite sa App Store + apps_step: Preuzmite naše zvanične aplikacije. + apps_title: Mastodon aplikacije + checklist_subtitle: 'Započnimo na ovoj novoj društvenoj granici:' + checklist_title: Koraci dobrodošlice + edit_profile_action: Personalizujte + edit_profile_step: Povećajte svoje interakcije tako što ćete imati sveobuhvatan profil. + edit_profile_title: Personalizujte svoj profil explanation: Evo nekoliko saveta za početak + feature_action: Saznajte više + feature_audience: Mastodon vam pruža jedinstvenu mogućnost upravljanja svojom publikom bez posrednika. Mastodon raspoređen na vašoj sopstvenoj infrastrukturi vam omogućuje da pratite i budete praćeni sa bilo kog drugog Mastodon servera na mreži i nije ni pod čijom kontrolom osim vaše. + feature_audience_title: Izgradite svoju publiku u poverenju + feature_control: Vi najbolje znate šta želite da vidite na svojoj poetnoj stranici. Nema algoritama ili reklama da troše vaše vreme. Pratite bilo koga na bilo kom Mastodon serveru sa jednog naloga i primajte njihove objave hronološkim redosledom i učinite svoj kutak interneta malo sličnijim vama. + feature_control_title: Držite kontrolu nad sopstvenom vremenskom linijom + feature_creativity: Mastodon podržava audio, video i slikovne objave, opise pristupačnosti, ankete, upozorenja o sadržaju, animirane avatare, prilagođene emodžije, kontrolu isecanja sličica i još mnogo toga, kako bi vam pomogao da se izrazite na mreži. Bilo da objavljujete svoju umetnost, muziku ili podkast, Mastodon je tu za vas. + feature_creativity_title: Kreativnost bez premca + feature_moderation: Mastodon vraća donošenje odluka u vaše ruke. Svaki server kreira sopstvena pravila i propise, koji se primenjuju lokalno, a ne odozgo prema dole kao korporativni društveni mediji, što ga čini najfleksibilnijim u odgovaranju na potrebe različitih grupa ljudi. Pridružite se serveru sa pravilima sa kojima se slažete ili hostujte svoja. + feature_moderation_title: Moderacija onakva kakva bi trebalo da bude + follow_action: Pratite + follow_step: Praćenje zanimljivih ljudi je ono o čemu se radi u Mastodon-u. + follow_title: Personalizujte svoju početnu stranicu + follows_subtitle: Pratite dobro poznate naloge + follows_title: Koga pratiti + follows_view_more: Pogledajte još ljudi za praćenje + hashtags_recent_count: "%{people} ljudi u prošlih %{days} dana" + hashtags_subtitle: Istražite šta je u trendu u poslednja 2 dana + hashtags_title: Heš oznake u trendu + hashtags_view_more: Pogledajte još heš oznaka u trendu + post_action: Napišite + post_step: Pozdravite svet tekstom, fotografijama, video zapisima ili anketama. + post_title: Napišite svoju prvu objavu + share_action: Podelite + share_step: Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u. + share_title: Podelite svoj Mastodon profil + sign_in_action: Prijavite se subject: Dobro došli na Mastodon title: Dobro došli, %{name}! users: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index c5b42e6b9eaed6..19b6b66dd8800d 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -781,13 +781,15 @@ sr: disabled: Никоме users: Пријављеним локалним корисницима registrations: + moderation_recommandation: Уверите се да имате адекватан и реактиван модераторски тим пре него што отворите регистрацију за све! preamble: Контролишите ко сме да направи налог на Вашем серверу. title: Регистрације registrations_mode: modes: - approved: Одобрење неопходно за регистрацију + approved: Неопходно је одобрење за регистрацију none: Нико не може да се региструје open: Било ко може да се региструје + warning_hint: Препоручујемо да користите „Неопходно је одобрење за регистрацију” осим ако нисте сигурни да ваш модераторски тим може благовремено да обради нежељену пошту и злонамерне регистрације. security: authorized_fetch: Захтевај аутентификацију са здружених сервера authorized_fetch_hint: Захтевање аутентификације са здружених сервера омогућује строжију примену блокова и на нивоу корисника и на нивоу сервера. Међутим, ово долази по цену смањења перформанси, смањује домет ваших одговора и може довести до проблема компатибилности са неким здруженим услугама. Поред тога, ово неће спречити посвећене актере да преузимају ваше јавне објаве и налоге. @@ -984,6 +986,9 @@ sr: title: Веб-пресретач webhook: Веб-пресретач admin_mailer: + auto_close_registrations: + body: Због недостатка недавних активности модератора, регистрације на %{instance} су аутоматски пребачене на захтевање ручног прегледа, како би се спречило да се %{instance} користи као платформа за потенцијалне лоше актере. Можете их вратити на отворене регистрације у било ком тренутку. + subject: Регистрације за %{instance} су аутоматски пребачене на захтевање одобрења new_appeal: actions: delete_statuses: обрисати објаве корисника @@ -1869,9 +1874,42 @@ sr: silence: Налог ограничен suspend: Налог суспендован welcome: - edit_profile_action: Подеси налог - edit_profile_step: Можете прилагодити свој профил тако што ћете поставити профилну слику, променити име за приказ и тако даље. Можете дати сагласност да прегледате нове пратиоце пре него што им дозволите да Вас запрате. + apps_android_action: Набавите на Google Play + apps_ios_action: Преузмите са App Store + apps_step: Преузмите наше званичне апликације. + apps_title: Mastodon апликације + checklist_subtitle: 'Започнимо на овој новој друштвеној граници:' + checklist_title: Кораци добродошлице + edit_profile_action: Персонализујте + edit_profile_step: Повећајте своје интеракције тако што ћете имати свеобухватан профил. + edit_profile_title: Персонализујте свој профил explanation: Ево неколико савета за почетак + feature_action: Сазнајте више + feature_audience: Mastodon вам пружа јединствену могућност управљања својом публиком без посредника. Mastodon распоређен на вашој сопственој инфраструктури вам омогућује да пратите и будете праћени са било ког другог Mastodon сервера на мрежи и није ни под чијом контролом осим ваше. + feature_audience_title: Изградите своју публику у поверењу + feature_control: Ви најбоље знате шта желите да видите на својој поетној страници. Нема алгоритама или реклама да троше ваше време. Пратите било кога на било ком Mastodon серверу са једног налога и примајте њихове објаве хронолошким редоследом и учините свој кутак интернета мало сличнијим вама. + feature_control_title: Држите контролу над сопственом временском линијом + feature_creativity: Mastodon подржава аудио, видео и сликовне објаве, описе приступачности, анкете, упозорења о садржају, анимиране аватаре, прилагођене емоџије, контролу исецања сличица и још много тога, како би вам помогао да се изразите на мрежи. Било да објављујете своју уметност, музику или подкаст, Mastodon је ту за вас. + feature_creativity_title: Креативност без премца + feature_moderation: Mastodon враћа доношење одлука у ваше руке. Сваки сервер креира сопствена правила и прописе, који се примењују локално, а не одозго према доле као корпоративни друштвени медији, што га чини најфлексибилнијим у одговарању на потребе различитих група људи. Придружите се серверу са правилима са којима се слажете или хостујте своја. + feature_moderation_title: Модерација онаква каква би требало да буде + follow_action: Пратите + follow_step: Праћење занимљивих људи је оно о чему се ради у Mastodon-у. + follow_title: Персонализујте своју почетну страницу + follows_subtitle: Пратите добро познате налоге + follows_title: Кога пратити + follows_view_more: Погледајте још људи за праћење + hashtags_recent_count: "%{people} људи у прошлих %{days} дана" + hashtags_subtitle: Истражите шта је у тренду у последња 2 дана + hashtags_title: Хеш ознаке у тренду + hashtags_view_more: Погледајте још хеш ознака у тренду + post_action: Напишите + post_step: Поздравите свет текстом, фотографијама, видео записима или анкетама. + post_title: Напишите своју прву објаву + share_action: Поделите + share_step: Нека ваши пријатељи знају како да вас пронађу на Mastodon-у. + share_title: Поделите свој Mastodon профил + sign_in_action: Пријавите се subject: Добро дошли на Mastodon title: Добро дошли, %{name}! users: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 108c17fc9f39c1..a40808eed60f89 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -612,6 +612,7 @@ sv: created_at: Anmäld delete_and_resolve: Ta bort inlägg forwarded: Vidarebefordrad + forwarded_replies_explanation: Den här rapporten är från en annans instans användare och handlar om annans instans inlägg. Det har vidarebefordrats till dig eftersom det rapporterade innehållet är som svar till en av dina användare. forwarded_to: Vidarebefordrad till %{domain} mark_as_resolved: Markera som löst mark_as_sensitive: Markera som känslig @@ -766,6 +767,7 @@ sv: disabled: För ingen users: För inloggade lokala användare registrations: + moderation_recommandation: Se till att du har ett tillräckligt och reaktivt modereringsteam innan du öppnar registreringar till alla! preamble: Kontrollera vem som kan skapa ett konto på din server. title: Registreringar registrations_mode: @@ -773,6 +775,7 @@ sv: approved: Godkännande krävs för registrering none: Ingen kan registrera open: Alla kan registrera + warning_hint: Vi rekommenderar att du använder “Godkännande krävs för registrering” om du inte är säker på att ditt moderatorsteam kan hantera skräppost och skadliga registreringar i tid. security: authorized_fetch: Kräv autentisering från federerade servrar authorized_fetch_hint: Att kräva autentisering från federerade servrar möjliggör striktare tillämpning av både blockering på användarnivå och servernivå. Detta sker dock på bekostnad av prestanda, minskar räckvidden på dina svar, och kan införa kompatibilitet problem med vissa federerade tjänster. Dessutom kommer detta inte att hindra dedikerade aktörer från att hämta dina offentliga inlägg och konton. @@ -965,6 +968,9 @@ sv: title: Webhooks webhook: Webhook admin_mailer: + auto_close_registrations: + body: På grund av brist på moderatoraktivitet har registreringar på %{instance} automatiskt bytts till att kräva manuell granskning, för att förhindra att %{instance} används som plattform för potentiella dåliga aktörer. Du kan när som helst byta tillbaka den till öppna registreringar. + subject: Registreringar för %{instance} har automatiskt bytts till att kräva godkännande new_appeal: actions: delete_statuses: att radera deras inlägg @@ -1792,7 +1798,10 @@ sv: subject: Ditt arkiv är klart för nedladdning title: Arkivuttagning failed_2fa: + details: 'Här är detaljerna för inloggningsförsöket:' + explanation: Någon har försökt att logga in på ditt konto men tillhandahållit en ogiltig andra autentiseringsfaktor. further_actions_html: Om detta inte var du, rekommenderar vi att du %{action} omedelbart eftersom ditt konto kan ha äventyrats. + subject: Andra faktorns autentiseringsfel title: Misslyckad tvåfaktorsautentisering suspicious_sign_in: change_password: Ändra ditt lösenord @@ -1833,9 +1842,42 @@ sv: silence: Kontot begränsat suspend: Konto avstängt welcome: - edit_profile_action: Profilinställning - edit_profile_step: Du kan anpassa din profil genom att ladda upp en profilbild, ändra ditt visningsnamn med mera. Du kan välja att granska nya följare innan de får följa dig. + apps_android_action: Ladda ned på Google Play + apps_ios_action: Ladda ner på App Store + apps_step: Ladda ner våra officiella appar. + apps_title: Mastodon-appar + checklist_subtitle: 'Låt oss komma igång med denna nya sociala upplevelse:' + checklist_title: Välkomstchecklista + edit_profile_action: Gör mer personlig + edit_profile_step: Öka din interaktion genom att ha en omfattande profil. + edit_profile_title: Anpassa din profil explanation: Här är några tips för att komma igång + feature_action: Lär dig mer + feature_audience: Mastodon ger dig en unik möjlighet att hantera din publik utan mellanhänder. Mastodon distribueras på din egen infrastruktur gör att du kan följa och följas från någon annan Mastodon-server online och är under ingen kontroll men din. + feature_audience_title: Skapa förtroende hos din publik + feature_control: Du vet bäst vad du vill se i ditt hemflöde. Inga algoritmer eller annonser som slösar din tid. Följ vem som helst på vilken Mastodon-server som helst från ett enda konto, få deras inlägg i kronologisk ordning och gör ditt hörn av internet lite mer du. + feature_control_title: Håll kontroll över din egen tidslinje + feature_creativity: Mastodon stöder ljud-, video- och bildinlägg, tillgänglighetsbeskrivningar, omröstningar, innehållsvarningar, animerade avatarer, anpassade emojis, miniatyrbildskontroll och mer, för att hjälpa dig att uttrycka dig själv online. Oavsett om du publicerar din konst, din musik eller din podcast finns Mastodon där för dig. + feature_creativity_title: Oöverträffad kreativitet + feature_moderation: Mastodon lägger tillbaka beslutsfattandet i dina händer. Varje server skapar sina egna regler och förordningar som tillämpas lokalt istället för toppstyrt som i företagens sociala medier vilket gör det maximalt flexibelt i att tillgodose behoven hos olika grupper av människor. Gå med i en server med de regler du samtycker till eller var värd för din egen. + feature_moderation_title: Moderering som det borde vara + follow_action: Följ + follow_step: Att följa intressanta människor är vad Mastodon handlar om. + follow_title: Anpassa ditt hemflöde + follows_subtitle: Följ välkända konton + follows_title: Rekommenderade profiler + follows_view_more: Visa fler personer att följa + hashtags_recent_count: "%{people} personer under de senaste %{days} dagarna" + hashtags_subtitle: Utforska vad som har trendat de senaste 2 dagarna + hashtags_title: Trendande hashtaggar + hashtags_view_more: Visa fler trendande hashtaggar + post_action: Skriv + post_step: Säg hej till världen med text, foton, videor eller omröstningar. + post_title: Skapa ditt första inlägg + share_action: Dela + share_step: Låt dina vänner veta hur de hittar dig på Mastodon. + share_title: Dela din Mastodon-profil + sign_in_action: Logga in subject: Välkommen till Mastodon title: Välkommen ombord, %{name}! users: diff --git a/config/locales/th.yml b/config/locales/th.yml index b212300220e0c9..1b4ce0d6abef74 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1810,9 +1810,34 @@ th: silence: จำกัดบัญชีอยู่ suspend: ระงับบัญชีอยู่ welcome: - edit_profile_action: ตั้งค่าโปรไฟล์ - edit_profile_step: คุณสามารถปรับแต่งโปรไฟล์ของคุณได้โดยอัปโหลดรูปภาพโปรไฟล์ เปลี่ยนชื่อที่แสดงของคุณ และอื่น ๆ คุณสามารถเลือกรับการตรวจทานผู้ติดตามใหม่ก่อนที่จะอนุญาตให้เขาติดตามคุณ + apps_android_action: รับแอปใน Google Play + apps_ios_action: ดาวน์โหลดใน App Store + apps_step: ดาวน์โหลดแอปอย่างเป็นทางการของเรา + apps_title: แอป Mastodon + checklist_subtitle: 'มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:' + checklist_title: รายการตรวจสอบยินดีต้อนรับ + edit_profile_action: ปรับแต่ง + edit_profile_step: เพิ่มการโต้ตอบของคุณโดยการมีโปรไฟล์ที่ครอบคลุม + edit_profile_title: ปรับแต่งโปรไฟล์ของคุณ explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน + feature_action: เรียนรู้เพิ่มเติม + follow_action: ติดตาม + follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ + follow_title: ปรับแต่งฟีดหน้าแรกของคุณ + follows_subtitle: ติดตามบัญชีที่มีชื่อเสียง + follows_title: ติดตามใครดี + follows_view_more: ดูผู้คนที่จะติดตามเพิ่มเติม + hashtags_recent_count: "%{people} คนใน %{days} วันที่ผ่านมา" + hashtags_subtitle: สำรวจสิ่งที่กำลังนิยมตั้งแต่ 2 วันที่ผ่านมา + hashtags_title: แฮชแท็กที่กำลังนิยม + hashtags_view_more: ดูแฮชแท็กที่กำลังนิยมเพิ่มเติม + post_action: เขียน + post_step: กล่าวสวัสดีชาวโลกด้วยข้อความ, รูปภาพ, วิดีโอ หรือการสำรวจความคิดเห็น + post_title: สร้างโพสต์แรกของคุณ + share_action: แชร์ + share_step: แจ้งให้เพื่อน ๆ ของคุณทราบวิธีค้นหาคุณใน Mastodon + share_title: แชร์โปรไฟล์ Mastodon ของคุณ + sign_in_action: ลงชื่อเข้า subject: ยินดีต้อนรับสู่ Mastodon title: ยินดีต้อนรับ %{name}! users: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 3732e53ab96d05..58436690ca362a 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1842,9 +1842,42 @@ tr: silence: Hesap sınırlandırıldı suspend: Hesap askıya alındı welcome: - edit_profile_action: Profil kurulumu - edit_profile_step: Bir profil resmi yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Sizi takip etmelerine izin verilmeden önce yeni takipçileri incelemeyi tercih edebilirsiniz. + apps_android_action: Google Play'den edinin + apps_ios_action: App Store'dan İndirin + apps_step: Resmi uygulamalarımızı indirin. + apps_title: Mastodon uygulamaları + checklist_subtitle: 'Bu yeni sosyal sınırda başlamanızı sağlar:' + checklist_title: Hoşgeldiniz Yapılacaklar Listesi + edit_profile_action: Kişiselleştir + edit_profile_step: Kapsamlı bir profille etkileşimlerinizi arttırın. + edit_profile_title: Profilinizi kişiselleştirin explanation: İşte sana başlangıç için birkaç ipucu + feature_action: Daha fazlası + feature_audience: Mastodon, hedef kitlenizi aracılar olmadan yönetmeniz için size eşsiz bir olanak sağlar. Kendi altyapınızda barındırdığınız Mastodon sunucusu, çevrimiçi olarak başka bir Mastodon sunucusundan takip etmenizi ve takip edilmenizi sağlar ve sizden başka kimsenin kontrolü altında değildir. + feature_audience_title: Kitlenizi güvenle oluşturun + feature_control: Ana akışınızda ne görmek istediğinizi en iyi siz biliyorsunuz. Algoritma veya zamanınızı harcayan reklamlar yok. Tek bir hesapla herhangi bir Mastodon sunucusunda olan bir kimseyi takip edin ve gönderilere zamana göre sıralanmış şekilde erişin. Kendi internet köşenizi biraz daha kendinize benzetin. + feature_control_title: Zaman akışınızın denetimi sizde kalsın + feature_creativity: Mastodon kendinizi çevrimiçi ifade edebilmenize yardımcı olmak için ses, video ve görsel, erişilebilirlik açıklamaları, anketler, içerik uyarıları, hareketli avatarlar, özel emojiler, önizleme resmini kesme denetimi ve daha fazlasını destekliyor. Kendi sanatınızı, müziğinizi veya podcastinizi yayınlıyorsanız Mastodon kullanımınıza açık. + feature_creativity_title: Benzersiz yaratıcılık + feature_moderation: Mastodon karar vermeyi yeniden size bırakıyor. Her sunucu kendi kurallarını ve düzenlemelerini oluşturur. Bu kurallar da kurumsal sosyal medyalar gibi tepeden değil, yerel olarak uygulanıyor; bu da Mastodon'u farklı insan gruplarının ihtiyaçlarına yanıt vermede esnek kılıyor. Kurallarına katıldığınız bir sunucuya katılın veya kendi sunucunuzu barındırın. + feature_moderation_title: Olması gerektiği gibi moderasyon + follow_action: Takip et + follow_step: Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç kullanıcılarla dolduralım. + follow_title: Anasayfa akışınızı kişiselleştirin + follows_subtitle: Tanınmış hesapları takip edin + follows_title: Takip edebileceklerin + follows_view_more: Takip edecek daha fazla kişi görüntüleyin + hashtags_recent_count: "%{days} günde %{people} kişi" + hashtags_subtitle: Son 2 günde öne çıkanları keşfedin + hashtags_title: Öne çıkan etiketler + hashtags_view_more: Daha fazla öne çıkan etiket görüntüleyin + post_action: Oluştur + post_step: Dünyaya metin, fotoğraf, video ve anketlerle merhaba deyin. + post_title: İlk gönderinizi oluşturun + share_action: Paylaş + share_step: Arkadaşlarınıza Mastodon'da size nasıl ulaşabileceklerini söyleyin. + share_title: Mastodon profilinizi paylaşın + sign_in_action: Oturum aç subject: Mastodon'a hoş geldiniz title: Gemiye hoşgeldin, %{name}! users: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 231f0028fd411d..eb3ca2a4ae153b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1906,9 +1906,13 @@ uk: silence: Ообліковий запис обмежено suspend: Обліковий запис призупинено welcome: - edit_profile_action: Налаштувати профіль - edit_profile_step: Ви можете налаштувати свій профіль, завантаживши зображення профілю, змінивши відображуване ім'я та інше. Ви можете включити для перегляду нових підписників до того, як вони матимуть змогу підписатися на вас. + apps_android_action: Завантажити з Google Play + apps_ios_action: Завантажити з App Store + apps_step: Завантажити наші офіційні застосунки. + apps_title: Застосунки Mastodon explanation: Ось кілька порад для початку + feature_action: Докладніше + sign_in_action: Увійти subject: Ласкаво просимо до Mastodon title: Ласкаво просимо, %{name}! users: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 2afb6aa4c15820..3ceaad92efa939 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -753,6 +753,7 @@ vi: disabled: Không ai users: Để đăng nhập người cục bộ registrations: + moderation_recommandation: Vui lòng đảm bảo rằng bạn có một đội ngũ kiểm duyệt và phản ứng nhanh trước khi mở đăng ký cho mọi người! preamble: Kiểm soát những ai có thể tạo tài khoản trên máy chủ của bạn. title: Đăng ký registrations_mode: @@ -760,6 +761,7 @@ vi: approved: Yêu cầu phê duyệt để đăng ký none: Không ai có thể đăng ký open: Bất cứ ai cũng có thể đăng ký + warning_hint: Chúng tôi khuyên bạn nên sử dụng "Duyệt đăng ký thủ công" trừ khi bạn tin tưởng đội ngũ kiểm duyệt của mình có thể xử lý kịp thời các đăng ký spam và độc hại. security: authorized_fetch: Yêu cầu xác thực từ các máy chủ liên hợp authorized_fetch_hint: Yêu cầu xác thực từ các máy chủ liên hợp cho phép thực thi chặt chẽ hơn việc chặn cấp độ người dùng và cấp độ máy chủ. Tuy nhiên, điều này phải trả giá bằng một hình phạt về hiệu suất, làm giảm phạm vi tiếp cận của các lượt trả lời của bạn và có thể gây ra các vấn đề về khả năng tương thích với một số dịch vụ được liên hợp. Ngoài ra, điều này sẽ không ngăn cản các tác nhân chuyên dụng tìm nạp các tút và tài khoản công khai của bạn. @@ -1808,9 +1810,42 @@ vi: silence: Tài khoản bị hạn chế suspend: Tài khoản bị vô hiệu hóa welcome: - edit_profile_action: Cài đặt trang hồ sơ - edit_profile_step: Bạn có thể chỉnh sửa trang hồ sơ của mình bằng cách tải lên ảnh đại diện, ảnh bìa, đổi biệt danh và hơn thế nữa. Bạn cũng có thể tự phê duyệt những người theo dõi mới. + apps_android_action: Tải trên Google Play + apps_ios_action: Tải trên App Store + apps_step: Tải ứng dụng chính thức. + apps_title: Ứng dụng Mastodon + checklist_subtitle: 'Hãy bắt đầu trên mạng xã hội mới này:' + checklist_title: Danh sách việc cần làm + edit_profile_action: Cá nhân hoá + edit_profile_step: Tạo sự tương tác bằng một hồ sơ hoàn chỉnh. + edit_profile_title: Tùy biến hồ sơ explanation: Dưới đây là một số mẹo để giúp bạn bắt đầu + feature_action: Tìm hiểu + feature_audience: Mastodon cung cấp cho bạn khả năng độc đáo để quản lý người theo dõi của bạn mà không cần bên trung gian. Mastodon có thể triển khai trên cơ sở hạ tầng của riêng bạn, cho phép bạn theo dõi và được theo dõi từ bất kỳ máy chủ Mastodon nào khác và không nằm dưới sự kiểm soát của ai ngoài bạn. + feature_audience_title: Tạo cộng đồng của riêng bạn + feature_control: Bạn biết rõ nhất những gì bạn muốn xem trên bảng tin. Không có thuật toán hoặc quảng cáo để lãng phí thời gian của bạn. Theo dõi bất kỳ ai trên bất kỳ máy chủ Mastodon nào từ một tài khoản và nhận các tút của họ theo thứ tự thời gian — làm cho góc internet của bạn là của bạn. + feature_control_title: Kiểm soát bảng tin của bạn + feature_creativity: Mastodon hỗ trợ đăng âm thanh, video, hình ảnh, mô tả trợ năng, thăm dò ý kiến, cảnh báo nội dung, hình đại diện Gif, emoji tùy chỉnh, kiểm soát cắt hình thu nhỏ... để giúp bạn thể hiện cá tính. Cho dù bạn đang xuất bản tác phẩm nghệ thuật, âm nhạc hay podcast của mình, Mastodon luôn hợp cho bạn. + feature_creativity_title: Sáng tạo không giới hạn + feature_moderation: Mastodon giành quyền tự quyết về tay bạn. Mỗi máy chủ tạo ra các nội quy của riêng họ, được thực thi nội bộ chứ không phải từ trên xuống như dịch vụ mạng xã hội của Big Tech, giúp linh hoạt trong việc đáp ứng nhu cầu của các nhóm người dùng khác nhau. Tham gia một máy chủ với các quy tắc bạn đồng ý hoặc tự chạy máy chủ của riêng bạn. + feature_moderation_title: Kiểm duyệt đúng nghĩa + follow_action: Theo dõi + follow_step: Theo dõi những người thú vị trên Mastodon. + follow_title: Cá nhân hóa bảng tin của bạn + follows_subtitle: Theo dõi những người thú vị + follows_title: Gợi ý theo dõi + follows_view_more: Xem thêm những người khác + hashtags_recent_count: "%{people} người dùng trong %{days} ngày qua" + hashtags_subtitle: Khám phá xu hướng 2 ngày qua + hashtags_title: Hashtag xu hướng + hashtags_view_more: Xem thêm hashtag xu hướng + post_action: Soạn tút + post_step: Chào cộng đồng bằng lời nói, ảnh hoặc video. + post_title: Đăng tút đầu tiên + share_action: Chia sẻ + share_step: Hãy để bạn bè của bạn biết cách tìm thấy bạn trên Mastodon. + share_title: Chia sẻ hồ sơ Mastodon của bạn + sign_in_action: Đăng nhập subject: Chào mừng đến với Mastodon title: Xin chào %{name}! users: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 93c741915d279d..6296a4bb7cbc1b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1810,9 +1810,42 @@ zh-CN: silence: 账户被隐藏 suspend: 账号被封禁 welcome: - edit_profile_action: 设置个人资料 - edit_profile_step: 您可以通过上传个人资料图片、更改您的昵称等来自定义您的个人资料。 您可以选择在新关注者关注您之前对其进行审核。 + apps_android_action: 从 Google Play 下载 + apps_ios_action: 从 App Store 下载 + apps_step: 下载我们的官方应用。 + apps_title: Mastodon应用 + checklist_subtitle: 让我们带您开启这片社交新天地: + checklist_title: 欢迎清单 + edit_profile_action: 个性化 + edit_profile_step: 完善个人资料,提升您的互动体验。 + edit_profile_title: 个性化您的个人资料 explanation: 下面是几个小贴士,希望它们能帮到你 + feature_action: 了解更多 + feature_audience: Mastodon为您提供了无需中间商即可管理受众的独特可能。Mastodon可被部署在您自己的基础设施上,允许您关注其它任何Mastodon在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受您之外的任何人控制。 + feature_audience_title: 放手去建立起您的受众 + feature_control: 您最清楚您想在你自己的主页中看到什么动态。没有算法或广告浪费您的时间。您可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让您的互联网的角落更合自己的心意。 + feature_control_title: 掌控自己的时间线 + feature_creativity: Mastodon支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助您在网上尽情表达自己。无论您是要发布您的艺术作品、音乐还是播客,Mastodon 都能为您服务。 + feature_creativity_title: 无与伦比的创造力 + feature_moderation: Mastodon将决策权交还给您。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个您认同其规则的服务器,或托管您自己的服务器。 + feature_moderation_title: 管理,本应如此 + follow_action: 关注 + follow_step: 关注有趣的人,这就是Mastodon的意义所在。 + follow_title: 个性化您的首页动态 + follows_subtitle: 关注知名账户 + follows_title: 推荐关注 + follows_view_more: 查看更多可关注的人 + hashtags_recent_count: 在过去的 %{days} 天中有 %{people} 人 + hashtags_subtitle: 探索过去2天以来的热门内容 + hashtags_title: 热门话题标签 + hashtags_view_more: 查看更多热门话题标签 + post_action: 撰写 + post_step: 向世界打个招呼吧。 + post_title: 发布您的第一条嘟文 + share_action: 分享 + share_step: 让您的朋友知道如何在Mastodon找到你。 + share_title: 分享您的Mastodon个人资料 + sign_in_action: 登录 subject: 欢迎来到 Mastodon title: "%{name},欢迎你的加入!" users: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 62649864c735e0..0d3e109b19733e 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1805,8 +1805,6 @@ zh-HK: silence: 賬戶已被限制 suspend: 帳號已停用 welcome: - edit_profile_action: 設定個人資料 - edit_profile_step: 你可以透過上傳頭像、更改顯示名稱等來自訂個人檔案。你可以選擇讓新使用者追蹤你之前先審查他們。 explanation: 下面是幾個小貼士,希望它們能幫到你 subject: 歡迎來到 Mastodon (萬象) title: 歡迎 %{name} 加入! diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index f50f685bb4c2e1..d8952edec91f66 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -148,8 +148,8 @@ zh-TW: subscribe: 訂閱 suspend: 停權 suspended: 已停權 - suspension_irreversible: 已永久刪除此帳號的資料。您可以取消這個帳號的停權狀態,但無法還原已刪除的資料。 - suspension_reversible_hint_html: 這個帳號已被暫停,所有數據將於 %{date} 被刪除。於此之前,您可以完全回復您的帳號。如果您想即時刪除這個帳號的數據,您能於下面進行操作。 + suspension_irreversible: 已永久刪除此帳號的資料。您可以取消這個帳號之停權狀態,但無法還原已刪除的資料。 + suspension_reversible_hint_html: 這個帳號已被停權,所有資料將於 %{date} 被刪除。於此之前,您可以完全回復您的帳號。如果您想即時刪除這個帳號的資料,您能於下面進行操作。 title: 帳號 unblock_email: 解除封鎖電子郵件地址 unblocked_email_msg: 成功解除封鎖 %{username} 的電子郵件地址 @@ -176,7 +176,7 @@ zh-TW: create_account_warning: 新增警告 create_announcement: 新增公告 create_canonical_email_block: 新增 E-mail 封鎖 - create_custom_emoji: 新增自訂顏文字 + create_custom_emoji: 新增自訂 emoji 表情符號 create_domain_allow: 新增允許網域 create_domain_block: 新增網域封鎖 create_email_domain_block: 新增電子郵件網域封鎖 @@ -186,7 +186,7 @@ zh-TW: demote_user: 將用戶降級 destroy_announcement: 刪除公告 destroy_canonical_email_block: 刪除 E-mail 封鎖 - destroy_custom_emoji: 刪除自訂顏文字 + destroy_custom_emoji: 刪除自訂 emoji 表情符號 destroy_domain_allow: 刪除允許網域 destroy_domain_block: 刪除網域封鎖 destroy_email_domain_block: 刪除電子郵件網域封鎖 @@ -196,10 +196,10 @@ zh-TW: destroy_unavailable_domain: 刪除無法存取的網域 destroy_user_role: 移除角色 disable_2fa_user: 停用兩階段驗證 - disable_custom_emoji: 停用自訂顏文字 + disable_custom_emoji: 停用自訂 emoji 表情符號 disable_sign_in_token_auth_user: 停用使用者電子郵件 token 驗證 disable_user: 停用帳號 - enable_custom_emoji: 啓用自訂顏文字 + enable_custom_emoji: 啟用自訂 emoji 表情符號 enable_sign_in_token_auth_user: 啟用使用者電子郵件 token 驗證 enable_user: 啓用帳號 memorialize_account: 設定成追悼帳號 @@ -218,9 +218,9 @@ zh-TW: unblock_email_account: 解除封鎖電子郵件地址 unsensitive_account: 取消將媒體強制標記為敏感內容 unsilence_account: 取消帳號的靜音狀態 - unsuspend_account: 取消帳號的暫停狀態 + unsuspend_account: 取消帳號之停權狀態 update_announcement: 更新公告 - update_custom_emoji: 更新自訂顏文字 + update_custom_emoji: 更新自訂 emoji 表情符號 update_domain_block: 更新網域封鎖 update_ip_block: 更新 IP 規則 update_status: 更新狀態 @@ -235,7 +235,7 @@ zh-TW: create_account_warning_html: "%{name} 已對 %{target} 送出警告" create_announcement_html: "%{name} 已新增公告 %{target}" create_canonical_email_block_html: "%{name} 已封鎖 hash 為 %{target} 的 e-mail" - create_custom_emoji_html: "%{name} 已上傳新自訂表情符號 %{target}" + create_custom_emoji_html: "%{name} 已上傳新自訂 emoji 表情符號 %{target}" create_domain_allow_html: "%{name} 允許 %{target} 網域加入聯邦宇宙" create_domain_block_html: "%{name} 已封鎖網域 %{target}" create_email_domain_block_html: "%{name} 已封鎖電子郵件網域 %{target}" @@ -245,7 +245,7 @@ zh-TW: demote_user_html: "%{name} 將使用者 %{target} 降級" destroy_announcement_html: "%{name} 已刪除公告 %{target}" destroy_canonical_email_block_html: "%{name} 已解除封鎖 hash 為 %{target} 的電子郵件" - destroy_custom_emoji_html: "%{name} 已刪除表情符號 %{target}" + destroy_custom_emoji_html: "%{name} 已刪除 emoji 表情符號 %{target}" destroy_domain_allow_html: "%{name} 不允許與網域 %{target} 加入聯邦宇宙" destroy_domain_block_html: "%{name} 已解除封鎖網域 %{target}" destroy_email_domain_block_html: "%{name} 已解除封鎖電子郵件網域 %{target}" @@ -255,10 +255,10 @@ zh-TW: destroy_unavailable_domain_html: "%{name} 已恢復對網域 %{target} 的發送" destroy_user_role_html: "%{name} 已刪除 %{target} 角色" disable_2fa_user_html: "%{name} 已停用使用者 %{target} 的兩階段驗證 (2FA) " - disable_custom_emoji_html: "%{name} 已停用自訂表情符號 %{target}" + disable_custom_emoji_html: "%{name} 已停用自訂 emoji 表情符號 %{target}" disable_sign_in_token_auth_user_html: "%{name} 已停用 %{target} 之使用者電子郵件 token 驗證" disable_user_html: "%{name} 將使用者 %{target} 設定為禁止登入" - enable_custom_emoji_html: "%{name} 已啟用自訂表情符號 %{target}" + enable_custom_emoji_html: "%{name} 已啟用自訂 emoji 表情符號 %{target}" enable_sign_in_token_auth_user_html: "%{name} 已啟用 %{target} 之使用者電子郵件 token 驗證" enable_user_html: "%{name} 將使用者 %{target} 設定為允許登入" memorialize_account_html: "%{name} 將 %{target} 設定為追悼帳號" @@ -279,7 +279,7 @@ zh-TW: unsilence_account_html: "%{name} 已取消使用者 %{target} 的靜音狀態" unsuspend_account_html: "%{name} 已取消停權 %{target} 的帳號" update_announcement_html: "%{name} 已更新公告 %{target}" - update_custom_emoji_html: "%{name} 已更新自訂表情符號 %{target}" + update_custom_emoji_html: "%{name} 已更新自訂 emoji 表情符號 %{target}" update_domain_block_html: "%{name} 已更新 %{target} 之網域封鎖" update_ip_block_html: "%{name} 已變更 IP %{target} 之規則" update_status_html: "%{name} 已更新 %{target} 的嘟文" @@ -309,37 +309,37 @@ zh-TW: critical_update_pending: 重要更新待升級 custom_emojis: assign_category: 指定分類 - by_domain: 站點 + by_domain: 伺服器 copied_msg: 成功建立 emoji 表情符號之本地備份 copy: 複製 - copy_failed_msg: 無法將表情複製到本地 + copy_failed_msg: 無法將該 emoji 表情符號複製至本地 create_new_category: 建立新分類 - created_msg: 已新增表情符號! + created_msg: 已新增 emoji 表情符號! delete: 刪除 - destroyed_msg: 已刪除表情符號! + destroyed_msg: 已刪除 emoji 表情符號! disable: 停用 disabled: 已停用 - disabled_msg: 已停用該表情符號 - emoji: 表情符號 + disabled_msg: 已停用該 emoji 表情符號 + emoji: emoji 表情符號 enable: 啟用 enabled: 已啟用 - enabled_msg: 已啟用該表情符號 + enabled_msg: 已啟用該 emoji 表情符號 image_hint: 檔案大小最大至 %{size} 之 PNG 或 GIF list: 列表 listed: 已顯示 new: - title: 加入新的自訂表情符號 - no_emoji_selected: 未選取任何 emoji,所以什麼事都沒發生 + title: 新增自訂 emoji 表情符號 + no_emoji_selected: 未選取任何 emoji 表情符號,所以什麼事都沒發生 not_permitted: 您無權執行此操作 overwrite: 覆蓋 - shortcode: 短代碼 - shortcode_hint: 至少 2 個字元,只能使用字母、數字與下劃線 - title: 自訂表情符號 + shortcode: 短碼 + shortcode_hint: 至少 2 個字元,只能使用字母、數字與底線 + title: 自訂 emoji 表情符號 uncategorized: 未分類 unlist: 不公開 unlisted: 已隱藏 - update_failed_msg: 無法更新表情符號 - updated_msg: 已更新表情符號! + update_failed_msg: 無法更新該 emoji 表情符號 + updated_msg: 已更新 emoji 表情符號! upload: 上傳新的表情符號 dashboard: active_users: 活躍使用者 @@ -640,7 +640,7 @@ zh-TW: suspend_html: 停權 @%{acct},將他們的個人檔案與內容標記為無法存取及無法與之互動 close_report: '將檢舉報告 #%{id} 標記為已處理' close_reports_html: 將 所有 對於 @%{acct} 之檢舉報告標記為已處理 - delete_data_html: 於即日起 30 天後刪除 @%{acct}之個人檔案與內容,除非他們於期限前被解除暫停 + delete_data_html: 於即日起 30 天後刪除 @%{acct}之個人檔案與內容,除非他們於期限前被解除停權 preview_preamble_html: "@%{acct} 將收到關於以下內容之警告:" record_strike_html: 紀錄關於 @%{acct}之警示有助於您升級對此帳號未來違規處理 send_email_html: 寄一封警告 e-mail 給 @%{acct} @@ -682,8 +682,8 @@ zh-TW: manage_appeals_description: 允許使用者審閱針對站務動作之申訴 manage_blocks: 管理封鎖 manage_blocks_description: 允許使用者封鎖電子郵件提供者與 IP 位置 - manage_custom_emojis: 管理自訂表情符號 - manage_custom_emojis_description: 允許使用者管理伺服器上的自訂表情符號 + manage_custom_emojis: 管理自訂 emoji 表情符號 + manage_custom_emojis_description: 允許使用者管理伺服器上之自訂 emoji 表情符號 manage_federation: 管理聯邦宇宙 manage_federation_description: 允許使用者封鎖或允許與其他網域的聯邦宇宙,並控制傳遞能力 manage_invites: 管理邀請 @@ -714,7 +714,7 @@ zh-TW: rules: add_new: 新增規則 delete: 刪除 - description_html: 雖然大多數人皆宣稱已閱讀並同意服務條款,通常直到某些問題發生時人們從未讀過。以透過提供條列式規則的方式讓您的伺服器規則可以一目了然。試著維持各項條款簡短而明瞭,但也試著不要將條款切割為許多分開的項目。 + description_html: 雖然大多數人皆宣稱已閱讀並同意服務條款,通常直到某些問題發生時人們從未讀過。以透過提供條列式規則的方式使您的伺服器規則可以一目了然。試著維持各項條款簡短而明瞭,但也試著不要將條款切割為許多分開的項目。 edit: 編輯規則 empty: 未曾定義任何伺服器規則 title: 伺服器規則 @@ -935,7 +935,7 @@ zh-TW: webhooks: add_new: 新增端點 delete: 刪除 - description_html: "Webhook 讓 Mastodon 可以將關於選定的事件的即時通知推送到您自己的應用程式,如此您的應用程式就可以自動觸發反應。" + description_html: "Webhook 使 Mastodon 可以將關於選定的事件的即時通知推送到您自己的應用程式,如此您的應用程式就可以自動觸發反應。" disable: 停用 disabled: 已停用 edit: 編輯端點 @@ -990,15 +990,15 @@ zh-TW: title: 熱門主題標籤 subject: "%{instance} 有待審核之新熱門" aliases: - add_new: 建立別名 - created_msg: 成功建立別名。您可以自舊帳號開始轉移。 + add_new: 新增別名 + created_msg: 成功新增別名。您可以自舊帳號開始轉移。 deleted_msg: 成功移除別名。您將無法再由舊帳號轉移至目前的帳號。 empty: 您目前沒有任何別名。 hint_html: 如果想由其他帳號轉移至此帳號,您能於此處新增別名,稍後系統將容許您將跟隨者由舊帳號轉移至此。此項作業是無害且可復原的帳號的遷移程序需要於舊帳號啟動。 remove: 取消連結別名 appearance: advanced_web_interface: 進階網頁介面 - advanced_web_interface_hint: 進階網頁介面可讓您設定許多不同的欄位來善用螢幕空間,依需要同時查看許多不同的資訊如:首頁、通知、聯邦宇宙時間軸、任意數量的列表與主題標籤。 + advanced_web_interface_hint: 進階網頁介面能使您設定許多不同的欄位來善用螢幕空間,依需要同時查看許多不同的資訊如:首頁、通知、聯邦宇宙時間軸、任意數量的列表與主題標籤。 animations_and_accessibility: 動畫與無障礙設定 confirmation_dialogs: 確認對話框 discovery: 探索 @@ -1016,7 +1016,7 @@ zh-TW: view_profile: 檢視個人檔案 view_status: 檢視嘟文 applications: - created: 已建立應用程式 + created: 已新增應用程式 destroyed: 已刪除應用程式 logout: 登出 regenerate_token: 重新產生存取 token @@ -1091,7 +1091,7 @@ zh-TW: title: 登入 %{domain} sign_up: manual_review: "%{domain} 上的註冊由我們的管理員進行人工審核。為協助我們處理您的註冊,請寫一些關於您自己的資訊以及您欲於 %{domain} 上註冊帳號之原因。" - preamble: 於此 Mastodon 伺服器擁有帳號的話,您將能跟隨聯邦宇宙網路中任何一份子,無論他們的帳號託管於何處。 + preamble: 若於此 Mastodon 伺服器擁有帳號,您將能跟隨聯邦宇宙網路中任何一份子,無論他們的帳號託管於何處。 title: 讓我們一起設定 %{domain} 吧! status: account_status: 帳號狀態 @@ -1349,20 +1349,20 @@ zh-TW: '604800': 1 週後 '86400': 1 天後 expires_in_prompt: 永不過期 - generate: 建立邀請連結 + generate: 產生邀請連結 invalid: 此邀請是無效的 invited_by: 您的邀請人是: max_uses: other: "%{count} 則" max_uses_prompt: 無限制 - prompt: 建立分享連結,邀請他人於本伺服器註冊 + prompt: 產生分享連結,邀請他人於本伺服器註冊 table: expires_at: 失效時間 uses: 已使用次數 title: 邀請使用者 lists: errors: - limit: 您所建立的列表數量已達上限 + limit: 您所建立之列表數量已達上限 login_activities: authentication_methods: otp: 兩階段驗證應用程式 @@ -1407,7 +1407,7 @@ zh-TW: on_cooldown: 您正在處於冷卻(CD)狀態 followers_count: 轉移時的跟隨者 incoming_migrations: 自另一個帳號轉移 - incoming_migrations_html: 要從其他帳號移動到此帳號的話,首先您必須建立帳號別名。 + incoming_migrations_html: 若欲自其他帳號移動至此帳號,首先您必須新增帳號別名。 moved_msg: 您的帳號正被重新導向到 %{acct},您的跟隨者也會同步轉移至該帳號。 not_redirecting: 您的帳號目前尚未重新導向到任何其他帳號。 on_cooldown: 您最近已轉移過您的帳號。此功能將於 %{count} 天後可再度使用。 @@ -1512,11 +1512,11 @@ zh-TW: posting_defaults: 嘟文預設值 public_timelines: 公開時間軸 privacy: - hint_html: "自訂您希望如何讓您的個人檔案及嘟文被發現。藉由啟用一系列 Mastodon 功能以幫助您觸及更廣的受眾。煩請花些時間確認您是否欲啟用這些設定。" + hint_html: "自訂您希望如何使您的個人檔案及嘟文被發現。藉由啟用一系列 Mastodon 功能以幫助您觸及更廣的受眾。煩請花些時間確認您是否欲啟用這些設定。" privacy: 隱私權 privacy_hint_html: 控制您希望向其他人揭露之內容。人們透過瀏覽其他人的跟隨者與其發嘟之應用程式發現有趣的個人檔案與酷炫的 Mastodon 應用程式,但您能選擇將其隱藏。 reach: 觸及 - reach_hint_html: 控制您希望被新使用者探索或跟隨之方式。想讓您的嘟文出現於探索頁面嗎?想讓其他人透過他們的跟隨建議找到您嗎?想自動接受所有新跟隨者嗎?或是想逐一控制跟隨請求嗎? + reach_hint_html: 控制您希望被新使用者探索或跟隨之方式。想使您的嘟文出現於探索頁面嗎?想使其他人透過他們的跟隨建議找到您嗎?想自動接受所有新跟隨者嗎?或是想逐一控制跟隨請求嗎? search: 搜尋 search_hint_html: 控制您希望如何被發現。您想透過您的公開嘟文被人們發現嗎?您想透過網頁搜尋被 Mastodon 以外的人找到您的個人檔案嗎?請注意,公開資訊可能無法全面地被所有搜尋引擎所排除。 title: 隱私權及觸及 @@ -1525,7 +1525,7 @@ zh-TW: reactions: errors: limit_reached: 達到可回應之上限 - unrecognized_emoji: 並非一個可識別的 emoji + unrecognized_emoji: 並非可識別之 emoji 表情符號 redirects: prompt: 若您信任此連結,請點擊以繼續。 title: 您將要離開 %{instance} 。 @@ -1743,7 +1743,7 @@ zh-TW: enabled: 兩階段驗證已啟用 enabled_success: 兩階段驗證已成功啟用 generate_recovery_codes: 產生備用驗證碼 - lost_recovery_codes: 讓您能於遺失手機時,使用備用驗證碼登入。若您已遺失備用驗證碼,可於此產生一批新的,舊有的備用驗證碼將會失效。 + lost_recovery_codes: 使您能於遺失手機時,透過備用驗證碼登入。若您已遺失備用驗證碼,可於此產生一批新的,舊有的備用驗證碼將會失效。 methods: 兩階段驗證 otp: 驗證應用程式 recovery_codes: 備份備用驗證碼 @@ -1812,9 +1812,42 @@ zh-TW: silence: 帳號已被限制 suspend: 帳號己被停權 welcome: - edit_profile_action: 設定個人檔案 - edit_profile_step: 您可以設定您的個人檔案,包括上傳大頭貼、變更顯示名稱等等。您也可以選擇於新的跟隨者跟隨前,先對他們進行審核。 + apps_android_action: 於 Google Play 下載 + apps_ios_action: 於 App Store 下載 + apps_step: 下載官方應用程式。 + apps_title: Mastodon APP + checklist_subtitle: 讓我們協助您於這個嶄新的社交平台上啟程: + checklist_title: 新手任務清單 + edit_profile_action: 個人化設定 + edit_profile_step: 若您完整填寫個人檔案,其他人比較願意與您互動。 + edit_profile_title: 客製化您的個人檔案 explanation: 以下是幾個小技巧,希望它們能幫到您 + feature_action: 了解更多 + feature_audience: Mastodon 為您打開了一扇獨特的門,使您不受平台干擾,自由地管理您的受眾。只需將 Mastodon 部署於您自己的基礎設施上,您便能與線上任何 Mastodon 伺服器互動,而且控制權只在您手中。 + feature_audience_title: 自信地建立您的受眾 + feature_control: 您最清楚自己想於首頁動態看到什麼內容,別讓演算法與廣告浪費您寶貴的時間。自同一帳號跟隨任何 Mastodon 伺服器上的任何一個人,依時間順序接收他們的嘟文,建立屬於自己的網路小角落。 + feature_control_title: 掌控自己的時間軸 + feature_creativity: Mastodon 支援音訊、影片及圖片嘟文、無障礙說明文字、投票、內容警告、動畫大頭貼、自訂 emoji 表情符號、縮圖裁剪控制等等,協助您表達自我。無論是發佈藝術作品、音樂,或是 podcast,Mastodon 將隨時陪伴著您。 + feature_creativity_title: 無與倫比的創意 + feature_moderation: Mastodon 將決策權交還於您。每台伺服器皆能制定自己的規則與管理規範,並於該伺服器上實施。這與社交媒體公司由上而下的規範大不相同,因此能更有彈性地滿足不同群體的需求。您可以加入認同其規則之伺服器,或者自行架設伺服器。 + feature_moderation_title: 管理方式,如您所願 + follow_action: 跟隨 + follow_step: Mastodon 的趣味就是跟隨那些有趣的人們! + follow_title: 客製化您的首頁時間軸 + follows_subtitle: 跟隨家喻戶曉的熱門帳號 + follows_title: 推薦跟隨帳號 + follows_view_more: 檢視更多人以跟隨 + hashtags_recent_count: 於過去 %{days} 天 %{people} 人 + hashtags_subtitle: 探索過去兩天內的熱門主題標籤 + hashtags_title: 熱門主題標籤 + hashtags_view_more: 檢視更多熱門主題標籤 + post_action: 撰寫 + post_step: 透過文字、照片、影片或投票向新世界打聲招呼吧。 + post_title: 撰寫您第一則嘟文 + share_action: 分享 + share_step: 讓您的朋友們知道如何於 Mastodon 找到您。 + share_title: 分享您 Mastodon 個人檔案 + sign_in_action: 登入 subject: 歡迎來到 Mastodon title: "%{name} 誠摯歡迎您的加入!" users: @@ -1839,7 +1872,7 @@ zh-TW: success: 您已成功加入安全金鑰。 delete: 刪除 delete_confirmation: 您確定要移除這把安全金鑰嗎? - description_html: 如果您啟用安全金鑰驗證的話,您將於登入時需要使用其中一把安全金鑰。 + description_html: 若您啟用安全金鑰驗證,您將於登入時需要使用其中一把安全金鑰。 destroy: error: 移除安全金鑰時出現了問題。請再試一次。 success: 您已成功將安全金鑰移除。 From df3798a6fa65208e6d323c6856041b87e4feae19 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:49:04 +0100 Subject: [PATCH 10/26] Update dependency eslint-plugin-jsdoc to v48.2.1 (#29544) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 75a725c4ee564b..75e6d472e480c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7374,8 +7374,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^48.0.0": - version: 48.2.0 - resolution: "eslint-plugin-jsdoc@npm:48.2.0" + version: 48.2.1 + resolution: "eslint-plugin-jsdoc@npm:48.2.1" dependencies: "@es-joy/jsdoccomment": "npm:~0.42.0" are-docs-informative: "npm:^0.0.2" @@ -7388,7 +7388,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/778f979ca40594269d531767ab29fb2a6c448425f8f732708ac5d3b9c61bbeb8504f1490a1057c7740f3e8f8a75d57ff50c766bc40fb1474f195e6f1aed30814 + checksum: 10c0/92237f08b7dadb21f9eda50eda00bf69ac5e0bfcb9d179bf118e096178d7dc4a62b34fd01b3b7b0ba1142ff6e13814cfe2cf9a60c6cfcc879559b6b509d0d4e1 languageName: node linkType: hard From 7b89d6842e49ad9dd2b9018dc41b01db3fef14cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:49:07 +0100 Subject: [PATCH 11/26] Update DefinitelyTyped types (non-major) (#29543) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 75e6d472e480c7..5112721f08b4b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3326,11 +3326,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.4": - version: 18.2.19 - resolution: "@types/react-dom@npm:18.2.19" + version: 18.2.21 + resolution: "@types/react-dom@npm:18.2.21" dependencies: "@types/react": "npm:*" - checksum: 10c0/88d7c6daa4659f661d0c97985d9fca492f24b421a34bb614dcd94c343aed7bea121463149e97fb01ecaa693be17b7d1542cf71ddb1705f3889a81eb2639a88aa + checksum: 10c0/a887b4b647071df48173f054854713b68fdacfceeba7fa14f64ba26688d7d43574d7dc88a2a346e28f2e667eeab1b9bdbcad8a54353869835e52638607f61ff5 languageName: node linkType: hard @@ -3456,13 +3456,13 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.2.63 - resolution: "@types/react@npm:18.2.63" + version: 18.2.64 + resolution: "@types/react@npm:18.2.64" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/53d86727b966a3ba097553b5ef75a1f2bea78bd8c54ebcf6d00bd338000112b208ab30536c8c0a9f5fc61055cc3fbabbc7a23910c55092341602845de4c13714 + checksum: 10c0/ab3ba9597990d08ffd419a5ad28fd22393c7a9a241ae455fb1d5d193d209471aa1909fa7ad016fd8d161eab6d0babba77b013b56a5170bedf78833085b9ee424 languageName: node linkType: hard From 6f8ec6d7f85ed4250d171a7e9df1b3f6134f73d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:50:54 +0100 Subject: [PATCH 12/26] Update dependency test-prof to v1.3.2 (#29528) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 73ddfb4cff5eeb..cb76abafccecb9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -744,7 +744,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terrapin (1.0.1) climate_control - test-prof (1.3.1) + test-prof (1.3.2) thor (1.3.1) tilt (2.3.0) timeout (0.4.1) From 98ef38e34ebc7f296a818e8cb454219f997529c2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 04:53:24 -0400 Subject: [PATCH 13/26] Ensure unique values in fabricators (#29515) --- spec/fabrication/fabricators_spec.rb | 6 +++--- spec/fabricators/identity_fabricator.rb | 2 +- spec/fabricators/relay_fabricator.rb | 2 +- spec/fabricators/site_upload_fabricator.rb | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/fabrication/fabricators_spec.rb b/spec/fabrication/fabricators_spec.rb index 53193378c84f0b..2cf45041a4a80d 100644 --- a/spec/fabrication/fabricators_spec.rb +++ b/spec/fabrication/fabricators_spec.rb @@ -6,9 +6,9 @@ Fabrication.manager.schematics.map(&:first).each do |factory_name| describe "The #{factory_name} factory" do - it 'is valid' do - factory = Fabricate(factory_name) - expect(factory).to be_valid + it 'is able to create valid records' do + records = Fabricate.times(2, factory_name) # Create multiple of each to uncover uniqueness issues + expect(records).to all(be_valid) end end end diff --git a/spec/fabricators/identity_fabricator.rb b/spec/fabricators/identity_fabricator.rb index 83655ee8396762..6e125a4e7213f9 100644 --- a/spec/fabricators/identity_fabricator.rb +++ b/spec/fabricators/identity_fabricator.rb @@ -3,5 +3,5 @@ Fabricator(:identity) do user { Fabricate.build(:user) } provider 'MyString' - uid 'MyString' + uid { sequence(:uid) { |i| "uid_string_#{i}" } } end diff --git a/spec/fabricators/relay_fabricator.rb b/spec/fabricators/relay_fabricator.rb index ad8ba86fcfe8e3..07fc6f88c55bbf 100644 --- a/spec/fabricators/relay_fabricator.rb +++ b/spec/fabricators/relay_fabricator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true Fabricator(:relay) do - inbox_url 'https://example.com/inbox' + inbox_url { sequence(:inbox_url) { |i| "https://example.com/inboxes/#{i}" } } state :idle end diff --git a/spec/fabricators/site_upload_fabricator.rb b/spec/fabricators/site_upload_fabricator.rb index 87553ccb8a0b8f..cbe42d3b4cf9d3 100644 --- a/spec/fabricators/site_upload_fabricator.rb +++ b/spec/fabricators/site_upload_fabricator.rb @@ -2,5 +2,5 @@ Fabricator(:site_upload) do file { Rails.root.join('spec', 'fabricators', 'assets', 'utah_teapot.png').open } - var 'thumbnail' + var { sequence(:var) { |i| "thumbnail_#{i}" } } end From 5b3a8737d6fa84c91e5158c34170f488df9ad313 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 09:57:07 +0100 Subject: [PATCH 14/26] Add hints for rules (#29539) --- app/controllers/admin/rules_controller.rb | 2 +- app/javascript/mastodon/features/about/index.jsx | 3 ++- app/javascript/styles/mastodon/about.scss | 6 ++++++ app/models/rule.rb | 1 + app/serializers/rest/rule_serializer.rb | 2 +- app/views/admin/rules/edit.html.haml | 3 +++ app/views/admin/rules/index.html.haml | 3 +++ app/views/auth/registrations/rules.html.haml | 1 + config/locales/simple_form.en.yml | 2 ++ db/migrate/20240310123453_add_hint_to_rules.rb | 7 +++++++ db/schema.rb | 3 ++- 11 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20240310123453_add_hint_to_rules.rb diff --git a/app/controllers/admin/rules_controller.rb b/app/controllers/admin/rules_controller.rb index d31aec6ea88b54..b8def22ba371f9 100644 --- a/app/controllers/admin/rules_controller.rb +++ b/app/controllers/admin/rules_controller.rb @@ -53,7 +53,7 @@ def set_rule end def resource_params - params.require(:rule).permit(:text, :priority) + params.require(:rule).permit(:text, :hint, :priority) end end end diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 3287631ed1ba88..5197d338cd6fc9 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -170,7 +170,8 @@ class About extends PureComponent {
    {server.get('rules').map(rule => (
  1. - {rule.get('text')} +
    {rule.get('text')}
    + {rule.get('hint').length > 0 && (
    {rule.get('hint')}
    )}
  2. ))}
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 0f02563b48d31e..9d23ef41abdb47 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -53,4 +53,10 @@ $fluid-breakpoint: $maximum-width + 20px; border-bottom: 0; } } + + &__hint { + font-size: 14px; + font-weight: 400; + color: $darker-text-color; + } } diff --git a/app/models/rule.rb b/app/models/rule.rb index 602e5d5874ee0e..f28dc2ffeb4995 100644 --- a/app/models/rule.rb +++ b/app/models/rule.rb @@ -10,6 +10,7 @@ # text :text default(""), not null # created_at :datetime not null # updated_at :datetime not null +# hint :text default(""), not null # class Rule < ApplicationRecord include Discard::Model diff --git a/app/serializers/rest/rule_serializer.rb b/app/serializers/rest/rule_serializer.rb index fc925925a98d95..9e2bcda15e32ea 100644 --- a/app/serializers/rest/rule_serializer.rb +++ b/app/serializers/rest/rule_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::RuleSerializer < ActiveModel::Serializer - attributes :id, :text + attributes :id, :text, :hint def id object.id.to_s diff --git a/app/views/admin/rules/edit.html.haml b/app/views/admin/rules/edit.html.haml index ba7e6451a149b3..77815588d220b9 100644 --- a/app/views/admin/rules/edit.html.haml +++ b/app/views/admin/rules/edit.html.haml @@ -7,5 +7,8 @@ .fields-group = f.input :text, wrapper: :with_block_label + .fields-group + = f.input :hint, wrapper: :with_block_label + .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/rules/index.html.haml b/app/views/admin/rules/index.html.haml index aa6a4c1b6a68a8..dd15ce03c0298a 100644 --- a/app/views/admin/rules/index.html.haml +++ b/app/views/admin/rules/index.html.haml @@ -12,6 +12,9 @@ .fields-group = f.input :text, wrapper: :with_block_label + .fields-group + = f.input :hint, wrapper: :with_block_label + .actions = f.button :button, t('admin.rules.add_new'), type: :submit diff --git a/app/views/auth/registrations/rules.html.haml b/app/views/auth/registrations/rules.html.haml index 234f4a601da6d2..3a05ed54f06c35 100644 --- a/app/views/auth/registrations/rules.html.haml +++ b/app/views/auth/registrations/rules.html.haml @@ -20,6 +20,7 @@ - @rules.each do |rule| %li .rules-list__text= rule.text + .rules-list__hint= rule.hint .stacked-actions - accept_path = @invite_code.present? ? public_invite_url(invite_code: @invite_code, accept: @accept_token) : new_user_registration_path(accept: @accept_token) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 7ece81290f4a28..4ba6e88f418183 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -116,6 +116,7 @@ en: sign_up_requires_approval: New sign-ups will require your approval severity: Choose what will happen with requests from this IP rule: + hint: Optional. Provide more details about the rule text: Describe a rule or requirement for users on this server. Try to keep it short and simple sessions: otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' @@ -299,6 +300,7 @@ en: patch: Notify on bugfix updates trending_tag: New trend requires review rule: + hint: Additional information text: Rule settings: indexable: Include profile page in search engines diff --git a/db/migrate/20240310123453_add_hint_to_rules.rb b/db/migrate/20240310123453_add_hint_to_rules.rb new file mode 100644 index 00000000000000..06822ad96a4254 --- /dev/null +++ b/db/migrate/20240310123453_add_hint_to_rules.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddHintToRules < ActiveRecord::Migration[7.1] + def change + add_column :rules, :hint, :text, null: false, default: '' + end +end diff --git a/db/schema.rb b/db/schema.rb index 97917d0456c474..b98253a6c15f15 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_03_04_090449) do +ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -915,6 +915,7 @@ t.text "text", default: "", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false + t.text "hint", default: "", null: false end create_table "scheduled_statuses", force: :cascade do |t| From 2347ea813e5be2ecf762c8a275373a3e2bea56e8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 09:57:23 +0100 Subject: [PATCH 15/26] Change dropdown menu icon to not be replaced by close icon when open in web UI (#29532) --- app/javascript/mastodon/components/dropdown_menu.jsx | 3 +-- app/javascript/mastodon/features/ui/index.jsx | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/components/dropdown_menu.jsx b/app/javascript/mastodon/components/dropdown_menu.jsx index f6c08dd43b3c06..524dbb927b426a 100644 --- a/app/javascript/mastodon/components/dropdown_menu.jsx +++ b/app/javascript/mastodon/components/dropdown_menu.jsx @@ -9,7 +9,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { CircularProgress } from 'mastodon/components/circular_progress'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; @@ -298,7 +297,7 @@ class Dropdown extends PureComponent { }) : ( ({ hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, 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.dropdownMenu.openId !== null, firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION, username: state.getIn(['accounts', me, 'username']), }); @@ -262,7 +261,6 @@ class UI extends PureComponent { hasMediaAttachments: PropTypes.bool, canUploadMore: PropTypes.bool, intl: PropTypes.object.isRequired, - dropdownMenuIsOpen: PropTypes.bool, layout: PropTypes.string.isRequired, firstLaunch: PropTypes.bool, username: PropTypes.string, @@ -555,7 +553,7 @@ class UI extends PureComponent { render () { const { draggingOver } = this.state; - const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props; + const { children, isComposing, location, layout } = this.props; const handlers = { help: this.handleHotkeyToggleHelp, @@ -581,7 +579,7 @@ class UI extends PureComponent { return ( -
+
From 6984f94044a313f675891f3b1338afd0e7fe3032 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 10:05:07 +0100 Subject: [PATCH 16/26] Update dependency autoprefixer to v10.4.18 (#29475) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5112721f08b4b5..1412e6d606d9be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4653,11 +4653,11 @@ __metadata: linkType: hard "autoprefixer@npm:^10.4.14": - version: 10.4.17 - resolution: "autoprefixer@npm:10.4.17" + version: 10.4.18 + resolution: "autoprefixer@npm:10.4.18" dependencies: - browserslist: "npm:^4.22.2" - caniuse-lite: "npm:^1.0.30001578" + browserslist: "npm:^4.23.0" + caniuse-lite: "npm:^1.0.30001591" fraction.js: "npm:^4.3.7" normalize-range: "npm:^0.1.2" picocolors: "npm:^1.0.0" @@ -4666,7 +4666,7 @@ __metadata: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 10c0/1d21cc8edb7bf993682094ceed03a32c18f5293f071182a64c2c6defb44bbe91d576ad775d2347469a81997b80cea0bbc4ad3eeb5b12710f9feacf2e6c04bb51 + checksum: 10c0/b6e1c1ba2fc6c09360cdcd75b00ce809c5dbe1ad4c30f0186764609a982aa5563d45965cb9e6a9d195c639a9fb1dcac2594484fc41624050195f626e9add666e languageName: node linkType: hard @@ -5409,10 +5409,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001578, caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001589 - resolution: "caniuse-lite@npm:1.0.30001589" - checksum: 10c0/20debfb949413f603011bc7dacaf050010778bc4f8632c86fafd1bd0c43180c95ae7c31f6c82348f6309e5e221934e327c3607a216e3f09640284acf78cd6d4d +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001587, caniuse-lite@npm:^1.0.30001591": + version: 1.0.30001591 + resolution: "caniuse-lite@npm:1.0.30001591" + checksum: 10c0/21937d341c3d75994504db21340f65573a1e847a8ab33ee4964ed493994d6552864c494ba144485459abd9c711c75c0708bc9fa19f2bff525bff75ffb0a42c3b languageName: node linkType: hard From b9722dfe2bdb024e5e98b96d2fc5712d6cb5f747 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 11 Mar 2024 10:13:35 +0100 Subject: [PATCH 17/26] Use the server setting to get the max number of poll options in UI (#29490) --- app/javascript/mastodon/actions/compose.js | 3 ++- .../mastodon/features/compose/components/poll_form.jsx | 5 +++-- app/javascript/mastodon/reducers/compose.js | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 6abfd6157e0a2b..12bd43f807553f 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -786,11 +786,12 @@ export function addPollOption(title) { }; } -export function changePollOption(index, title) { +export function changePollOption(index, title, maxOptions) { return { type: COMPOSE_POLL_OPTION_CHANGE, index, title, + maxOptions, }; } diff --git a/app/javascript/mastodon/features/compose/components/poll_form.jsx b/app/javascript/mastodon/features/compose/components/poll_form.jsx index b3566fd6f5ad7f..d2adc58cc08ad9 100644 --- a/app/javascript/mastodon/features/compose/components/poll_form.jsx +++ b/app/javascript/mastodon/features/compose/components/poll_form.jsx @@ -58,10 +58,11 @@ const Option = ({ multipleChoice, index, title, autoFocus }) => { const dispatch = useDispatch(); const suggestions = useSelector(state => state.getIn(['compose', 'suggestions'])); const lang = useSelector(state => state.getIn(['compose', 'language'])); + const maxOptions = useSelector(state => state.getIn(['server', 'server', 'configuration', 'polls', 'max_options'])); const handleChange = useCallback(({ target: { value } }) => { - dispatch(changePollOption(index, value)); - }, [dispatch, index]); + dispatch(changePollOption(index, value, maxOptions)); + }, [dispatch, index, maxOptions]); const handleSuggestionsFetchRequested = useCallback(token => { dispatch(fetchComposeSuggestions(token)); diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index f1bc0cbaef4616..8dc28018571224 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -280,12 +280,12 @@ const updateSuggestionTags = (state, token) => { }); }; -const updatePoll = (state, index, value) => state.updateIn(['poll', 'options'], options => { +const updatePoll = (state, index, value, maxOptions) => state.updateIn(['poll', 'options'], options => { const tmp = options.set(index, value).filterNot(x => x.trim().length === 0); if (tmp.size === 0) { return tmp.push('').push(''); - } else if (tmp.size < 4) { + } else if (tmp.size < maxOptions) { return tmp.push(''); } @@ -529,7 +529,7 @@ export default function compose(state = initialState, action) { case COMPOSE_POLL_REMOVE: return state.set('poll', null); case COMPOSE_POLL_OPTION_CHANGE: - return updatePoll(state, action.index, action.title); + return updatePoll(state, action.index, action.title, action.maxOptions); case COMPOSE_POLL_SETTINGS_CHANGE: return state.update('poll', poll => poll.set('expires_in', action.expiresIn).set('multiple', action.isMultiple)); case COMPOSE_LANGUAGE_CHANGE: From a7284690fc595fa7d71528f8cdd67ddf2540a62a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 05:16:19 -0400 Subject: [PATCH 18/26] Add coverage for admin/metrics base classes, simplify subclass generation (#29527) --- app/lib/admin/metrics/dimension.rb | 18 +++++++-------- app/lib/admin/metrics/measure.rb | 28 ++++++++++++------------ spec/lib/admin/metrics/dimension_spec.rb | 22 +++++++++++++++++++ spec/lib/admin/metrics/measure_spec.rb | 22 +++++++++++++++++++ 4 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 spec/lib/admin/metrics/dimension_spec.rb create mode 100644 spec/lib/admin/metrics/measure_spec.rb diff --git a/app/lib/admin/metrics/dimension.rb b/app/lib/admin/metrics/dimension.rb index e0122a65b5eee7..824cb6d7c1c6e4 100644 --- a/app/lib/admin/metrics/dimension.rb +++ b/app/lib/admin/metrics/dimension.rb @@ -2,15 +2,15 @@ class Admin::Metrics::Dimension DIMENSIONS = { - languages: Admin::Metrics::Dimension::LanguagesDimension, - sources: Admin::Metrics::Dimension::SourcesDimension, - servers: Admin::Metrics::Dimension::ServersDimension, - space_usage: Admin::Metrics::Dimension::SpaceUsageDimension, - software_versions: Admin::Metrics::Dimension::SoftwareVersionsDimension, - tag_servers: Admin::Metrics::Dimension::TagServersDimension, - tag_languages: Admin::Metrics::Dimension::TagLanguagesDimension, - instance_accounts: Admin::Metrics::Dimension::InstanceAccountsDimension, - instance_languages: Admin::Metrics::Dimension::InstanceLanguagesDimension, + languages: LanguagesDimension, + sources: SourcesDimension, + servers: ServersDimension, + space_usage: SpaceUsageDimension, + software_versions: SoftwareVersionsDimension, + tag_servers: TagServersDimension, + tag_languages: TagLanguagesDimension, + instance_accounts: InstanceAccountsDimension, + instance_languages: InstanceLanguagesDimension, }.freeze def self.retrieve(dimension_keys, start_at, end_at, limit, params) diff --git a/app/lib/admin/metrics/measure.rb b/app/lib/admin/metrics/measure.rb index fe7e04929041c8..d23162dfabfdbd 100644 --- a/app/lib/admin/metrics/measure.rb +++ b/app/lib/admin/metrics/measure.rb @@ -2,20 +2,20 @@ class Admin::Metrics::Measure MEASURES = { - active_users: Admin::Metrics::Measure::ActiveUsersMeasure, - new_users: Admin::Metrics::Measure::NewUsersMeasure, - interactions: Admin::Metrics::Measure::InteractionsMeasure, - opened_reports: Admin::Metrics::Measure::OpenedReportsMeasure, - resolved_reports: Admin::Metrics::Measure::ResolvedReportsMeasure, - tag_accounts: Admin::Metrics::Measure::TagAccountsMeasure, - tag_uses: Admin::Metrics::Measure::TagUsesMeasure, - tag_servers: Admin::Metrics::Measure::TagServersMeasure, - instance_accounts: Admin::Metrics::Measure::InstanceAccountsMeasure, - instance_media_attachments: Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure, - instance_reports: Admin::Metrics::Measure::InstanceReportsMeasure, - instance_statuses: Admin::Metrics::Measure::InstanceStatusesMeasure, - instance_follows: Admin::Metrics::Measure::InstanceFollowsMeasure, - instance_followers: Admin::Metrics::Measure::InstanceFollowersMeasure, + active_users: ActiveUsersMeasure, + new_users: NewUsersMeasure, + interactions: InteractionsMeasure, + opened_reports: OpenedReportsMeasure, + resolved_reports: ResolvedReportsMeasure, + tag_accounts: TagAccountsMeasure, + tag_uses: TagUsesMeasure, + tag_servers: TagServersMeasure, + instance_accounts: InstanceAccountsMeasure, + instance_media_attachments: InstanceMediaAttachmentsMeasure, + instance_reports: InstanceReportsMeasure, + instance_statuses: InstanceStatusesMeasure, + instance_follows: InstanceFollowsMeasure, + instance_followers: InstanceFollowersMeasure, }.freeze def self.retrieve(measure_keys, start_at, end_at, params) diff --git a/spec/lib/admin/metrics/dimension_spec.rb b/spec/lib/admin/metrics/dimension_spec.rb new file mode 100644 index 00000000000000..109250b72b73ff --- /dev/null +++ b/spec/lib/admin/metrics/dimension_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Admin::Metrics::Dimension do + describe '.retrieve' do + subject { described_class.retrieve(reports, start_at, end_at, 5, params) } + + let(:start_at) { 2.days.ago } + let(:end_at) { Time.now.utc } + let(:params) { ActionController::Parameters.new({ instance_accounts: [123], instance_languages: ['en'] }) } + let(:reports) { [:instance_accounts, :instance_languages] } + + it 'returns instances of provided classes' do + expect(subject) + .to contain_exactly( + be_a(Admin::Metrics::Dimension::InstanceAccountsDimension), + be_a(Admin::Metrics::Dimension::InstanceLanguagesDimension) + ) + end + end +end diff --git a/spec/lib/admin/metrics/measure_spec.rb b/spec/lib/admin/metrics/measure_spec.rb new file mode 100644 index 00000000000000..c9809b0f792d30 --- /dev/null +++ b/spec/lib/admin/metrics/measure_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Admin::Metrics::Measure do + describe '.retrieve' do + subject { described_class.retrieve(reports, start_at, end_at, params) } + + let(:start_at) { 2.days.ago } + let(:end_at) { Time.now.utc } + let(:params) { ActionController::Parameters.new({ instance_accounts: [123], instance_followers: [123] }) } + let(:reports) { [:instance_accounts, :instance_followers] } + + it 'returns instances of provided classes' do + expect(subject) + .to contain_exactly( + be_a(Admin::Metrics::Measure::InstanceAccountsMeasure), + be_a(Admin::Metrics::Measure::InstanceFollowersMeasure) + ) + end + end +end From 4a6ddbc9c0f01f7160153e33a1a91eb1f2b86028 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Mon, 11 Mar 2024 18:28:08 +0900 Subject: [PATCH 19/26] Normalize idna domain before account unblock domain (#29530) --- app/models/concerns/account/interactions.rb | 6 ++- .../concerns/account/interactions_spec.rb | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb index 5b05c31e03f3c5..0ed0dc060b3b68 100644 --- a/app/models/concerns/account/interactions.rb +++ b/app/models/concerns/account/interactions.rb @@ -178,7 +178,7 @@ def unmute_conversation!(conversation) end def unblock_domain!(other_domain) - block = domain_blocks.find_by(domain: other_domain) + block = domain_blocks.find_by(domain: normalized_domain(other_domain)) block&.destroy end @@ -300,4 +300,8 @@ def relations_map(account_ids, domains = nil, **options) domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id), }) end + + def normalized_domain(domain) + TagManager.instance.normalize_domain(domain) + end end diff --git a/spec/models/concerns/account/interactions_spec.rb b/spec/models/concerns/account/interactions_spec.rb index 6fac41e07115eb..3f2c601f387694 100644 --- a/spec/models/concerns/account/interactions_spec.rb +++ b/spec/models/concerns/account/interactions_spec.rb @@ -250,6 +250,24 @@ end end + describe '#block_idna_domain!' do + subject do + [ + account.block_domain!(idna_domain), + account.block_domain!(punycode_domain), + ] + end + + let(:idna_domain) { '대한민국.한국' } + let(:punycode_domain) { 'xn--3e0bs9hfvinn1a.xn--3e0b707e' } + + it 'creates single AccountDomainBlock' do + expect do + expect(subject).to all(be_a AccountDomainBlock) + end.to change { account.domain_blocks.count }.by 1 + end + end + describe '#unfollow!' do subject { account.unfollow!(target_account) } @@ -345,6 +363,28 @@ end end + describe '#unblock_idna_domain!' do + subject { account.unblock_domain!(punycode_domain) } + + let(:idna_domain) { '대한민국.한국' } + let(:punycode_domain) { 'xn--3e0bs9hfvinn1a.xn--3e0b707e' } + + context 'when blocking the domain' do + it 'returns destroyed AccountDomainBlock' do + account_domain_block = Fabricate(:account_domain_block, domain: idna_domain) + account.domain_blocks << account_domain_block + expect(subject).to be_a AccountDomainBlock + expect(subject).to be_destroyed + end + end + + context 'when unblocking idna domain' do + it 'returns nil' do + expect(subject).to be_nil + end + end + end + describe '#following?' do subject { account.following?(target_account) } From 16c856729bfa400422825b06c843efe7b85c72f8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 14:35:23 +0100 Subject: [PATCH 20/26] Change icons in navigation panel to be filled when active in web UI (#29537) --- .../features/ui/components/column_link.jsx | 15 ++-- .../follow_requests_column_link.jsx | 55 ------------- .../features/ui/components/list_panel.jsx | 54 +++++-------- .../ui/components/navigation_panel.jsx | 81 +++++++++++++++---- .../components/notifications_counter_icon.js | 13 --- 5 files changed, 95 insertions(+), 123 deletions(-) delete mode 100644 app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx delete mode 100644 app/javascript/mastodon/features/ui/components/notifications_counter_icon.js diff --git a/app/javascript/mastodon/features/ui/components/column_link.jsx b/app/javascript/mastodon/features/ui/components/column_link.jsx index e58fde48b52a65..6ef122c07be844 100644 --- a/app/javascript/mastodon/features/ui/components/column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/column_link.jsx @@ -1,27 +1,30 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; -import { NavLink } from 'react-router-dom'; +import { useRouteMatch, NavLink } from 'react-router-dom'; import { Icon } from 'mastodon/components/icon'; -const ColumnLink = ({ icon, iconComponent, text, to, href, method, badge, transparent, ...other }) => { +const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, ...other }) => { + const match = useRouteMatch(to); const className = classNames('column-link', { 'column-link--transparent': transparent }); const badgeElement = typeof badge !== 'undefined' ? {badge} : null; const iconElement = (typeof icon === 'string' || iconComponent) ? : icon; + const activeIconElement = activeIcon ?? (activeIconComponent ? : iconElement); + const active = match?.isExact; if (href) { return ( - {iconElement} + {active ? activeIconElement : iconElement} {text} {badgeElement} ); } else { return ( - - {iconElement} + + {active ? activeIconElement : iconElement} {text} {badgeElement} @@ -32,6 +35,8 @@ const ColumnLink = ({ icon, iconComponent, text, to, href, method, badge, transp ColumnLink.propTypes = { icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired, iconComponent: PropTypes.func, + activeIcon: PropTypes.node, + activeIconComponent: PropTypes.func, text: PropTypes.string.isRequired, to: PropTypes.string, href: PropTypes.string, diff --git a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx b/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx deleted file mode 100644 index 4aa009263150cd..00000000000000 --- a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import PropTypes from 'prop-types'; -import { Component } from 'react'; - -import { injectIntl, defineMessages } from 'react-intl'; - -import { List as ImmutableList } from 'immutable'; -import { connect } from 'react-redux'; - -import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; -import { fetchFollowRequests } from 'mastodon/actions/accounts'; -import { IconWithBadge } from 'mastodon/components/icon_with_badge'; -import ColumnLink from 'mastodon/features/ui/components/column_link'; - -const messages = defineMessages({ - text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, -}); - -const mapStateToProps = state => ({ - count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size, -}); - -class FollowRequestsColumnLink extends Component { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - count: PropTypes.number.isRequired, - intl: PropTypes.object.isRequired, - }; - - componentDidMount () { - const { dispatch } = this.props; - - dispatch(fetchFollowRequests()); - } - - render () { - const { count, intl } = this.props; - - if (count === 0) { - return null; - } - - return ( - } - text={intl.formatMessage(messages.text)} - /> - ); - } - -} - -export default injectIntl(connect(mapStateToProps)(FollowRequestsColumnLink)); diff --git a/app/javascript/mastodon/features/ui/components/list_panel.jsx b/app/javascript/mastodon/features/ui/components/list_panel.jsx index fec21f14ca15c8..03c8fce9e878b3 100644 --- a/app/javascript/mastodon/features/ui/components/list_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/list_panel.jsx @@ -1,10 +1,9 @@ -import PropTypes from 'prop-types'; +import { useEffect } from 'react'; import { createSelector } from '@reduxjs/toolkit'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; +import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchLists } from 'mastodon/actions/lists'; @@ -18,40 +17,25 @@ const getOrderedLists = createSelector([state => state.get('lists')], lists => { return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4); }); -const mapStateToProps = state => ({ - lists: getOrderedLists(state), -}); - -class ListPanel extends ImmutablePureComponent { +export const ListPanel = () => { + const dispatch = useDispatch(); + const lists = useSelector(state => getOrderedLists(state)); - static propTypes = { - dispatch: PropTypes.func.isRequired, - lists: ImmutablePropTypes.list, - }; - - componentDidMount () { - const { dispatch } = this.props; + useEffect(() => { dispatch(fetchLists()); - } - - render () { - const { lists } = this.props; - - if (!lists || lists.isEmpty()) { - return null; - } - - return ( -
-
+ }, [dispatch]); - {lists.map(list => ( - - ))} -
- ); + if (!lists || lists.isEmpty()) { + return null; } -} + return ( +
+
-export default connect(mapStateToProps)(ListPanel); + {lists.map(list => ( + + ))} +
+ ); +}; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 4a569881911576..deda3258b92b7e 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -1,20 +1,33 @@ import PropTypes from 'prop-types'; -import { Component } from 'react'; +import { Component, useEffect } from 'react'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; +import { useSelector, useDispatch } from 'react-redux'; + + import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; -import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; -import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home.svg?react'; +import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; +import PersonAddActiveIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; -import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; -import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; +import StarActiveIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import { fetchFollowRequests } from 'mastodon/actions/accounts'; +import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import { WordmarkLogo } from 'mastodon/components/logo'; import { NavigationPortal } from 'mastodon/components/navigation_portal'; import { timelinePreview, trendsEnabled } from 'mastodon/initial_state'; @@ -22,9 +35,7 @@ import { transientSingleColumn } from 'mastodon/is_mobile'; import ColumnLink from './column_link'; import DisabledAccountBanner from './disabled_account_banner'; -import FollowRequestsColumnLink from './follow_requests_column_link'; -import ListPanel from './list_panel'; -import NotificationsCounterIcon from './notifications_counter_icon'; +import { ListPanel } from './list_panel'; import SignInBanner from './sign_in_banner'; const messages = defineMessages({ @@ -42,8 +53,48 @@ const messages = defineMessages({ search: { id: 'navigation_bar.search', defaultMessage: 'Search' }, advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' }, openedInClassicInterface: { id: 'navigation_bar.opened_in_classic_interface', defaultMessage: 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' }, + followRequests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, }); +const NotificationsLink = () => { + const count = useSelector(state => state.getIn(['notifications', 'unread'])); + const intl = useIntl(); + + return ( + } + activeIcon={} + text={intl.formatMessage(messages.notifications)} + /> + ); +}; + +const FollowRequestsLink = () => { + const count = useSelector(state => state.getIn(['user_lists', 'follow_requests', 'items'])?.size ?? 0); + const intl = useIntl(); + const dispatch = useDispatch(); + + useEffect(() => { + dispatch(fetchFollowRequests()); + }, [dispatch]); + + if (count === 0) { + return null; + } + + return ( + } + activeIcon={} + text={intl.formatMessage(messages.followRequests)} + /> + ); +}; + class NavigationPanel extends Component { static contextTypes = { @@ -87,9 +138,9 @@ class NavigationPanel extends Component { {signedIn && ( <> - - } text={intl.formatMessage(messages.notifications)} /> - + + + )} @@ -113,9 +164,9 @@ class NavigationPanel extends Component { {signedIn && ( <> - - - + + + diff --git a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js deleted file mode 100644 index 7d59d616d83003..00000000000000 --- a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js +++ /dev/null @@ -1,13 +0,0 @@ -import { connect } from 'react-redux'; - -import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; -import { IconWithBadge } from 'mastodon/components/icon_with_badge'; - - -const mapStateToProps = state => ({ - count: state.getIn(['notifications', 'unread']), - id: 'bell', - icon: NotificationsIcon, -}); - -export default connect(mapStateToProps)(IconWithBadge); From 19efa1b9f1486ffe95c14582017d9e9ede48d597 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 15:33:48 +0100 Subject: [PATCH 21/26] Change action button to be last on profiles in web UI (#29533) --- .../features/account/components/header.jsx | 14 +++++--------- app/javascript/styles/mastodon/components.scss | 5 +---- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index 07ea227c487fb1..c6295d7c4a7105 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -22,6 +22,7 @@ import { CopyIconButton } from 'mastodon/components/copy_icon_button'; import { FollowersCounter, FollowingCounter, StatusesCounter } from 'mastodon/components/counters'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import { ShortNumber } from 'mastodon/components/short_number'; import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import { autoPlayGif, me, domain } from 'mastodon/initial_state'; @@ -289,7 +290,7 @@ class Header extends ImmutablePureComponent { if (me !== account.get('id')) { if (signedIn && !account.get('relationship')) { // Wait until the relationship is loaded - actionBtn = ''; + actionBtn = ; } else if (account.getIn(['relationship', 'requested'])) { actionBtn =
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 5bd11c3500497a..6d79a843d8f4a3 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7455,10 +7455,7 @@ noscript { .button { flex-shrink: 1; white-space: nowrap; - - @media screen and (max-width: $no-gap-breakpoint) { - min-width: 0; - } + min-width: 80px; } .icon-button { From c10bbf5fe3800f933c33fa19cf23b5ec4fb778ea Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 16:02:21 +0100 Subject: [PATCH 22/26] Add notification policies and notification requests in web UI (#29433) --- .../v1/notifications/requests_controller.rb | 6 +- .../mastodon/actions/notifications.js | 293 ++++++++++++++++++ .../mastodon/components/column_header.jsx | 53 ++-- .../components/column_settings.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 20 +- .../components/column_settings.jsx | 40 +-- .../components/column_settings.tsx | 67 ++-- .../mastodon/features/list_timeline/index.jsx | 59 ++-- .../components/checkbox_with_label.jsx | 31 ++ .../components/column_settings.jsx | 142 +++++---- .../filtered_notifications_banner.jsx | 49 +++ .../components/notification_request.jsx | 65 ++++ .../containers/column_settings_container.js | 9 +- .../containers/filter_bar_container.js | 2 +- .../mastodon/features/notifications/index.jsx | 10 +- .../features/notifications/request.jsx | 144 +++++++++ .../features/notifications/requests.jsx | 85 +++++ .../components/column_settings.jsx | 12 +- app/javascript/mastodon/features/ui/index.jsx | 6 +- .../features/ui/util/async-components.js | 8 + app/javascript/mastodon/locales/en.json | 20 +- app/javascript/mastodon/reducers/index.ts | 4 + .../mastodon/reducers/notification_policy.js | 12 + .../reducers/notification_requests.js | 96 ++++++ .../mastodon/reducers/notifications.js | 2 +- app/javascript/mastodon/utils/numbers.ts | 8 + .../material-icons/400-24px/archive-fill.svg | 1 + .../material-icons/400-24px/archive.svg | 1 + .../styles/mastodon/components.scss | 271 ++++++++++++---- app/javascript/styles/mastodon/forms.scss | 6 + app/models/notification_request.rb | 2 +- config/routes.rb | 2 +- config/routes/api.rb | 2 +- spec/models/notification_policy_spec.rb | 2 +- spec/models/notification_request_spec.rb | 2 +- 35 files changed, 1280 insertions(+), 254 deletions(-) create mode 100644 app/javascript/mastodon/features/notifications/components/checkbox_with_label.jsx create mode 100644 app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx create mode 100644 app/javascript/mastodon/features/notifications/components/notification_request.jsx create mode 100644 app/javascript/mastodon/features/notifications/request.jsx create mode 100644 app/javascript/mastodon/features/notifications/requests.jsx create mode 100644 app/javascript/mastodon/reducers/notification_policy.js create mode 100644 app/javascript/mastodon/reducers/notification_requests.js create mode 100644 app/javascript/material-icons/400-24px/archive-fill.svg create mode 100644 app/javascript/material-icons/400-24px/archive.svg diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb index dbb987153084b9..35f5d58a814752 100644 --- a/app/controllers/api/v1/notifications/requests_controller.rb +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -18,6 +18,10 @@ def index render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships end + def show + render json: @request, serializer: REST::NotificationRequestSerializer + end + def accept AcceptNotificationRequestService.new.call(@request) render_empty @@ -31,7 +35,7 @@ def dismiss private def load_requests - requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed)).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed) || false).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), params_slice(:max_id, :since_id, :min_id) ) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index eafbf42d1b1f7a..30b7601d5df06c 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -44,6 +44,38 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; +export const NOTIFICATION_POLICY_FETCH_REQUEST = 'NOTIFICATION_POLICY_FETCH_REQUEST'; +export const NOTIFICATION_POLICY_FETCH_SUCCESS = 'NOTIFICATION_POLICY_FETCH_SUCCESS'; +export const NOTIFICATION_POLICY_FETCH_FAIL = 'NOTIFICATION_POLICY_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST'; +export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS'; +export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_EXPAND_REQUEST = 'NOTIFICATION_REQUESTS_EXPAND_REQUEST'; +export const NOTIFICATION_REQUESTS_EXPAND_SUCCESS = 'NOTIFICATION_REQUESTS_EXPAND_SUCCESS'; +export const NOTIFICATION_REQUESTS_EXPAND_FAIL = 'NOTIFICATION_REQUESTS_EXPAND_FAIL'; + +export const NOTIFICATION_REQUEST_FETCH_REQUEST = 'NOTIFICATION_REQUEST_FETCH_REQUEST'; +export const NOTIFICATION_REQUEST_FETCH_SUCCESS = 'NOTIFICATION_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATION_REQUEST_FETCH_FAIL = 'NOTIFICATION_REQUEST_FETCH_FAIL'; + +export const NOTIFICATION_REQUEST_ACCEPT_REQUEST = 'NOTIFICATION_REQUEST_ACCEPT_REQUEST'; +export const NOTIFICATION_REQUEST_ACCEPT_SUCCESS = 'NOTIFICATION_REQUEST_ACCEPT_SUCCESS'; +export const NOTIFICATION_REQUEST_ACCEPT_FAIL = 'NOTIFICATION_REQUEST_ACCEPT_FAIL'; + +export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMISS_REQUEST'; +export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS'; +export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -313,3 +345,264 @@ export function setBrowserPermission (value) { value, }; } + +export const fetchNotificationPolicy = () => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).get('/api/v1/notifications/policy').then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationPolicyRequest = () => ({ + type: NOTIFICATION_POLICY_FETCH_REQUEST, +}); + +export const fetchNotificationPolicySuccess = policy => ({ + type: NOTIFICATION_POLICY_FETCH_SUCCESS, + policy, +}); + +export const fetchNotificationPolicyFail = error => ({ + type: NOTIFICATION_POLICY_FETCH_FAIL, + error, +}); + +export const updateNotificationsPolicy = params => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).put('/api/v1/notifications/policy', params).then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationRequests = () => (dispatch, getState) => { + const params = {}; + + if (getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + if (getState().getIn(['notificationRequests', 'items'])?.size > 0) { + params.since_id = getState().getIn(['notificationRequests', 'items', 0, 'id']); + } + + dispatch(fetchNotificationRequestsRequest()); + + api(getState).get('/api/v1/notifications/requests', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(fetchNotificationRequestsSuccess(response.data, next ? next.uri : null)); + }).catch(err => { + dispatch(fetchNotificationRequestsFail(err)); + }); +}; + +export const fetchNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_FETCH_REQUEST, +}); + +export const fetchNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_FETCH_SUCCESS, + requests, + next, +}); + +export const fetchNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_FETCH_FAIL, + error, +}); + +export const expandNotificationRequests = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + dispatch(expandNotificationRequestsRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(expandNotificationRequestsSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationRequestsFail(err)); + }); +}; + +export const expandNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_EXPAND_REQUEST, +}); + +export const expandNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + requests, + next, +}); + +export const expandNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_EXPAND_FAIL, + error, +}); + +export const fetchNotificationRequest = id => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + + if (current.getIn(['item', 'id']) === id || current.get('isLoading')) { + return; + } + + dispatch(fetchNotificationRequestRequest(id)); + + api(getState).get(`/api/v1/notifications/requests/${id}`).then(({ data }) => { + dispatch(fetchNotificationRequestSuccess(data)); + }).catch(err => { + dispatch(fetchNotificationRequestFail(id, err)); + }); +}; + +export const fetchNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_FETCH_REQUEST, + id, +}); + +export const fetchNotificationRequestSuccess = request => ({ + type: NOTIFICATION_REQUEST_FETCH_SUCCESS, + request, +}); + +export const fetchNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_FETCH_FAIL, + id, + error, +}); + +export const acceptNotificationRequest = id => (dispatch, getState) => { + dispatch(acceptNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/accept`).then(() => { + dispatch(acceptNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(acceptNotificationRequestFail(id, err)); + }); +}; + +export const acceptNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_REQUEST, + id, +}); + +export const acceptNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_SUCCESS, + id, +}); + +export const acceptNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_ACCEPT_FAIL, + id, + error, +}); + +export const dismissNotificationRequest = id => (dispatch, getState) => { + dispatch(dismissNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{ + dispatch(dismissNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(dismissNotificationRequestFail(id, err)); + }); +}; + +export const dismissNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_REQUEST, + id, +}); + +export const dismissNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_SUCCESS, + id, +}); + +export const dismissNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_DISMISS_FAIL, + id, + error, +}); + +export const fetchNotificationsForRequest = accountId => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + const params = { account_id: accountId }; + + if (current.getIn(['item', 'account']) === accountId) { + if (current.getIn(['notifications', 'isLoading'])) { + return; + } + + if (current.getIn(['notifications', 'items'])?.size > 0) { + params.since_id = current.getIn(['notifications', 'items', 0, 'id']); + } + } + + dispatch(fetchNotificationsForRequestRequest()); + + api(getState).get('/api/v1/notifications', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(fetchNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(fetchNotificationsForRequestFail(err)); + }); +}; + +export const fetchNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, +}); + +export const fetchNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + notifications, + next, +}); + +export const fetchNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + error, +}); + +export const expandNotificationsForRequest = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'current', 'notifications', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])) { + return; + } + + dispatch(expandNotificationsForRequestRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(expandNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationsForRequestFail(err)); + }); +}; + +export const expandNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, +}); + +export const expandNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + notifications, + next, +}); + +export const expandNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, + error, +}); diff --git a/app/javascript/mastodon/components/column_header.jsx b/app/javascript/mastodon/components/column_header.jsx index 901888e7504c3d..8b7dcebc6713c9 100644 --- a/app/javascript/mastodon/components/column_header.jsx +++ b/app/javascript/mastodon/components/column_header.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent, useCallback } from 'react'; -import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { FormattedMessage, injectIntl, defineMessages, useIntl } from 'react-intl'; import classNames from 'classnames'; import { withRouter } from 'react-router-dom'; @@ -11,7 +11,7 @@ import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; @@ -23,10 +23,12 @@ const messages = defineMessages({ hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' }, moveLeft: { id: 'column_header.moveLeft_settings', defaultMessage: 'Move column to the left' }, moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' }, + back: { id: 'column_back_button.label', defaultMessage: 'Back' }, }); -const BackButton = ({ pinned, show }) => { +const BackButton = ({ pinned, show, onlyIcon }) => { const history = useAppHistory(); + const intl = useIntl(); const { multiColumn } = useColumnsContext(); const handleBackClick = useCallback(() => { @@ -39,18 +41,20 @@ const BackButton = ({ pinned, show }) => { const showButton = history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || show); - if(!showButton) return null; - - return (); + if (!showButton) return null; + return ( + + ); }; BackButton.propTypes = { pinned: PropTypes.bool, show: PropTypes.bool, + onlyIcon: PropTypes.bool, }; class ColumnHeader extends PureComponent { @@ -145,27 +149,31 @@ class ColumnHeader extends PureComponent { } if (multiColumn && pinned) { - pinButton = ; + pinButton = ; moveButtons = ( -
+
); } else if (multiColumn && this.props.onPin) { - pinButton = ; + pinButton = ; } - backButton = ; + backButton = ; const collapsedContent = [ extraContent, ]; if (multiColumn) { - collapsedContent.push(pinButton); - collapsedContent.push(moveButtons); + collapsedContent.push( +
+ {pinButton} + {moveButtons} +
+ ); } if (this.context.identity.signedIn && (children || (multiColumn && this.props.onPin))) { @@ -177,7 +185,7 @@ class ColumnHeader extends PureComponent { onClick={this.handleToggleClick} > - + {collapseIssues && } @@ -190,16 +198,19 @@ class ColumnHeader extends PureComponent {

{hasTitle && ( - + <> + {backButton} + + + )} {!hasTitle && backButton}
- {hasTitle && backButton} {extraButton} {collapseButton}
diff --git a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx index 69959c176058fd..15381b589df2a0 100644 --- a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx @@ -20,7 +20,7 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
+
} />
diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index 6355efbfe00865..c65fe48eace9f9 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -42,15 +42,17 @@ const ColumnSettings = () => { ); return ( -
-
- } - /> -
+
+
+
+ } + /> +
+
); }; diff --git a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx index c60de4c5189469..3412e5d1bde626 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx @@ -107,28 +107,28 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
-
-
- - - - - +
+
+
+ } /> + +
+ + + + + +
-
- {this.state.open && ( -
- {this.modeSelect('any')} - {this.modeSelect('all')} - {this.modeSelect('none')} -
- )} - -
- } /> -
+ {this.state.open && ( +
+ {this.modeSelect('any')} + {this.modeSelect('all')} + {this.modeSelect('none')} +
+ )} +
); } diff --git a/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx b/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx index ca09d46c7e6254..3f0525fe5758f9 100644 --- a/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx +++ b/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx @@ -24,43 +24,36 @@ export const ColumnSettings: React.FC = () => { ); return ( -
- - - - -
- - } - /> -
- -
- - } - /> -
+
+
+
+ + } + /> + + + } + /> +
+
); }; diff --git a/app/javascript/mastodon/features/list_timeline/index.jsx b/app/javascript/mastodon/features/list_timeline/index.jsx index 24bf122facb347..f640e503c270e4 100644 --- a/app/javascript/mastodon/features/list_timeline/index.jsx +++ b/app/javascript/mastodon/features/list_timeline/index.jsx @@ -193,35 +193,38 @@ class ListTimeline extends PureComponent { pinned={pinned} multiColumn={multiColumn} > -
- - - -
- -
- - -
- - { replies_policy !== undefined && ( -
- - - -
- { ['none', 'list', 'followed'].map(policy => ( - - ))} +
+
+ + + +
+ +
+
+ +
-
- )} + + + {replies_policy !== undefined && ( +
+

+ +
+ { ['none', 'list', 'followed'].map(policy => ( + + ))} +
+
+ )} +
{ + const handleChange = useCallback(({ target }) => { + onChange(target.checked); + }, [onChange]); + + return ( + + ); +}; + +CheckboxWithLabel.propTypes = { + checked: PropTypes.bool, + disabled: PropTypes.bool, + children: PropTypes.children, + onChange: PropTypes.func, +}; diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.jsx b/app/javascript/mastodon/features/notifications/components/column_settings.jsx index 09154f257ada5b..2a9425b82b3398 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.jsx +++ b/app/javascript/mastodon/features/notifications/components/column_settings.jsx @@ -7,6 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions'; +import { CheckboxWithLabel } from './checkbox_with_label'; import ClearColumnButton from './clear_column_button'; import GrantPermissionButton from './grant_permission_button'; import SettingToggle from './setting_toggle'; @@ -26,18 +27,34 @@ export default class ColumnSettings extends PureComponent { alertsEnabled: PropTypes.bool, browserSupport: PropTypes.bool, browserPermission: PropTypes.string, + notificationPolicy: ImmutablePropTypes.map, + onChangePolicy: PropTypes.func.isRequired, }; onPushChange = (path, checked) => { this.props.onChange(['push', ...path], checked); }; + handleFilterNotFollowing = checked => { + this.props.onChangePolicy('filter_not_following', checked); + }; + + handleFilterNotFollowers = checked => { + this.props.onChangePolicy('filter_not_followers', checked); + }; + + handleFilterNewAccounts = checked => { + this.props.onChangePolicy('filter_new_accounts', checked); + }; + + handleFilterPrivateMentions = checked => { + this.props.onChangePolicy('filter_private_mentions', checked); + }; + render () { - const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props; + const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission, notificationPolicy } = this.props; const unreadMarkersShowStr = ; - const filterBarShowStr = ; - const filterAdvancedStr = ; const alertStr = ; const showStr = ; const soundStr = ; @@ -46,48 +63,59 @@ export default class ColumnSettings extends PureComponent { const pushStr = showPushSettings && ; return ( -
+
{alertsEnabled && browserSupport && browserPermission === 'denied' && ( -
- -
+ )} {alertsEnabled && browserSupport && browserPermission === 'default' && ( -
- - - -
+ + + )} -
+
-
+ -
- - - +
+

- + + + + + + + + + + + + + + + + + + +
-
+ -
- - - +
+

+ +

- - +
-
+ -
- +
+

@@ -95,10 +123,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -106,10 +134,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -117,10 +145,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -128,10 +156,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -139,10 +167,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -150,10 +178,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -161,10 +189,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -172,11 +200,11 @@ export default class ColumnSettings extends PureComponent {
-
+ {((this.context.identity.permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) && ( -
- +
+

@@ -184,12 +212,12 @@ export default class ColumnSettings extends PureComponent {
-
+ )} {((this.context.identity.permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS) && ( -
- +
+

@@ -197,7 +225,7 @@ export default class ColumnSettings extends PureComponent {
-
+ )}
); diff --git a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx new file mode 100644 index 00000000000000..dddb9d64120851 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx @@ -0,0 +1,49 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useDispatch, useSelector } from 'react-redux'; + + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationPolicy } from 'mastodon/actions/notifications'; +import { Icon } from 'mastodon/components/icon'; +import { toCappedNumber } from 'mastodon/utils/numbers'; + +export const FilteredNotificationsBanner = () => { + const dispatch = useDispatch(); + const policy = useSelector(state => state.get('notificationPolicy')); + + useEffect(() => { + dispatch(fetchNotificationPolicy()); + + const interval = setInterval(() => { + dispatch(fetchNotificationPolicy()); + }, 120000); + + return () => { + clearInterval(interval); + }; + }, [dispatch]); + + if (policy === null || policy.getIn(['summary', 'pending_notifications_count']) * 1 === 0) { + return null; + } + + return ( + + + +
+ + +
+ +
+ {toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))} +
+ + ); +}; diff --git a/app/javascript/mastodon/features/notifications/components/notification_request.jsx b/app/javascript/mastodon/features/notifications/components/notification_request.jsx new file mode 100644 index 00000000000000..e24124ca6a2f6f --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notification_request.jsx @@ -0,0 +1,65 @@ +import PropTypes from 'prop-types'; +import { useCallback } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useSelector, useDispatch } from 'react-redux'; + +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import { Avatar } from 'mastodon/components/avatar'; +import { IconButton } from 'mastodon/components/icon_button'; +import { makeGetAccount } from 'mastodon/selectors'; +import { toCappedNumber } from 'mastodon/utils/numbers'; + +const getAccount = makeGetAccount(); + +const messages = defineMessages({ + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +export const NotificationRequest = ({ id, accountId, notificationsCount }) => { + const dispatch = useDispatch(); + const account = useSelector(state => getAccount(state, accountId)); + const intl = useIntl(); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + return ( +
+ + + +
+
+ + {toCappedNumber(notificationsCount)} +
+ + @{account?.get('acct')} +
+ + +
+ + +
+
+ ); +}; + +NotificationRequest.propTypes = { + id: PropTypes.string.isRequired, + accountId: PropTypes.string.isRequired, + notificationsCount: PropTypes.string.isRequired, +}; diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index 1e62ed9a5a45b6..de266160f8511c 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { showAlert } from '../../../actions/alerts'; import { openModal } from '../../../actions/modal'; -import { setFilter, clearNotifications, requestBrowserPermission } from '../../../actions/notifications'; +import { setFilter, clearNotifications, requestBrowserPermission, updateNotificationsPolicy } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { changeSetting } from '../../../actions/settings'; import ColumnSettings from '../components/column_settings'; @@ -21,6 +21,7 @@ const mapStateToProps = state => ({ alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true), browserSupport: state.getIn(['notifications', 'browserSupport']), browserPermission: state.getIn(['notifications', 'browserPermission']), + notificationPolicy: state.get('notificationPolicy'), }); const mapDispatchToProps = (dispatch, { intl }) => ({ @@ -73,6 +74,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(requestBrowserPermission()); }, + onChangePolicy (param, checked) { + dispatch(updateNotificationsPolicy({ + [param]: checked, + })); + }, + }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings)); diff --git a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js index 4e0184cef30534..e448cd26ad9ea5 100644 --- a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js +++ b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js @@ -5,7 +5,7 @@ import FilterBar from '../components/filter_bar'; const makeMapStateToProps = state => ({ selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']), - advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']), + advancedMode: false, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/app/javascript/mastodon/features/notifications/index.jsx b/app/javascript/mastodon/features/notifications/index.jsx index 30c63ed32ac0d3..e062957ff89a19 100644 --- a/app/javascript/mastodon/features/notifications/index.jsx +++ b/app/javascript/mastodon/features/notifications/index.jsx @@ -33,6 +33,7 @@ import ColumnHeader from '../../components/column_header'; import { LoadGap } from '../../components/load_gap'; import ScrollableList from '../../components/scrollable_list'; +import { FilteredNotificationsBanner } from './components/filtered_notifications_banner'; import NotificationsPermissionBanner from './components/notifications_permission_banner'; import ColumnSettingsContainer from './containers/column_settings_container'; import FilterBarContainer from './containers/filter_bar_container'; @@ -65,7 +66,6 @@ const getNotifications = createSelector([ }); const mapStateToProps = state => ({ - showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']), notifications: getNotifications(state), isLoading: state.getIn(['notifications', 'isLoading'], 0) > 0, isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, @@ -85,7 +85,6 @@ class Notifications extends PureComponent { static propTypes = { columnId: PropTypes.string, notifications: ImmutablePropTypes.list.isRequired, - showFilterBar: PropTypes.bool.isRequired, dispatch: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, isLoading: PropTypes.bool, @@ -188,14 +187,14 @@ class Notifications extends PureComponent { }; render () { - const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; + const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; const emptyMessage = ; const { signedIn } = this.context.identity; let scrollableContent = null; - const filterBarContainer = (signedIn && showFilterBar) + const filterBarContainer = signedIn ? () : null; @@ -285,6 +284,9 @@ class Notifications extends PureComponent { {filterBarContainer} + + + {scrollContainer} diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx new file mode 100644 index 00000000000000..5977a6ce96ab56 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -0,0 +1,144 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; +import { IconButton } from 'mastodon/components/icon_button'; +import ScrollableList from 'mastodon/components/scrollable_list'; + +import NotificationContainer from './containers/notification_container'; + +const messages = defineMessages({ + title: { id: 'notification_requests.notifications_from', defaultMessage: 'Notifications from {name}' }, + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +const selectChild = (ref, index, alignTop) => { + const container = ref.current.node; + const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`); + + if (element) { + if (alignTop && container.scrollTop > element.offsetTop) { + element.scrollIntoView(true); + } else if (!alignTop && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) { + element.scrollIntoView(false); + } + + element.focus(); + } +}; + +export const NotificationRequest = ({ multiColumn, params: { id } }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const notificationRequest = useSelector(state => state.getIn(['notificationRequests', 'current', 'item', 'id']) === id ? state.getIn(['notificationRequests', 'current', 'item']) : null); + const accountId = notificationRequest?.get('account'); + const account = useSelector(state => state.getIn(['accounts', accountId])); + const notifications = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'items'])); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'current', 'notifications', 'next'])); + const removed = useSelector(state => state.getIn(['notificationRequests', 'current', 'removed'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationsForRequest()); + }, [dispatch]); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + const handleMoveUp = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) - 1; + selectChild(columnRef, elementIndex, true); + }, [columnRef, notifications]); + + const handleMoveDown = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) + 1; + selectChild(columnRef, elementIndex, false); + }, [columnRef, notifications]); + + useEffect(() => { + dispatch(fetchNotificationRequest(id)); + }, [dispatch, id]); + + useEffect(() => { + if (accountId) { + dispatch(fetchNotificationsForRequest(accountId)); + } + }, [dispatch, accountId]); + + const columnTitle = intl.formatMessage(messages.title, { name: account?.get('display_name') }); + + return ( + + + + + + )} + /> + + + {notifications.map(item => ( + item && + ))} + + + + {columnTitle} + + + + ); +}; + +NotificationRequest.propTypes = { + multiColumn: PropTypes.bool, + params: PropTypes.shape({ + id: PropTypes.string.isRequired, + }), +}; + +export default NotificationRequest; diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx new file mode 100644 index 00000000000000..46e3c428a6ea83 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -0,0 +1,85 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationRequests, expandNotificationRequests } from 'mastodon/actions/notifications'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; +import ScrollableList from 'mastodon/components/scrollable_list'; + +import { NotificationRequest } from './components/notification_request'; + +const messages = defineMessages({ + title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' }, +}); + +export const NotificationRequests = ({ multiColumn }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'isLoading'])); + const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationRequests()); + }, [dispatch]); + + useEffect(() => { + dispatch(fetchNotificationRequests()); + }, [dispatch]); + + return ( + + + + } + > + {notificationRequests.map(request => ( + + ))} + + + + {intl.formatMessage(messages.title)} + + + + ); +}; + +NotificationRequests.propTypes = { + multiColumn: PropTypes.bool, +}; + +export default NotificationRequests; diff --git a/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx index 1ceec1ba66ad3b..c865f1bb025866 100644 --- a/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx @@ -20,11 +20,13 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
-
- } /> - } /> -
+
+
+
+ } /> + } /> +
+
); } diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index da554f684fad73..34c5dd30253637 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -48,6 +48,8 @@ import { DirectTimeline, HashtagTimeline, Notifications, + NotificationRequests, + NotificationRequest, FollowRequests, FavouritedStatuses, BookmarkedStatuses, @@ -203,7 +205,9 @@ class SwitchingColumnsArea extends PureComponent { - + + + diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 7b968204be3797..de9b6b40104308 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -189,3 +189,11 @@ export function About () { export function PrivacyPolicy () { return import(/*webpackChunkName: "features/privacy_policy" */'../../privacy_policy'); } + +export function NotificationRequests () { + return import(/*webpackChunkName: "features/notifications/requests" */'../../notifications/requests'); +} + +export function NotificationRequest () { + return import(/*webpackChunkName: "features/notifications/request" */'../../notifications/request'); +} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 342b4c6e2599b2..aed3a3a6006979 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -241,6 +241,7 @@ "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.notification_requests": "All clear! There is nothing here. When you receive new notifications, they will appear here according to your settings.", "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.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", + "filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no} one {one person} other {# people}} you may know", + "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", "firehose.local": "This server", "firehose.remote": "Other servers", @@ -314,7 +317,6 @@ "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", "hashtags.and_other": "…and {count, plural, other {# more}}", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", @@ -440,15 +442,16 @@ "notification.reblog": "{name} boosted your post", "notification.status": "{name} just posted", "notification.update": "{name} edited a post", + "notification_requests.accept": "Accept", + "notification_requests.dismiss": "Dismiss", + "notification_requests.notifications_from": "Notifications from {name}", + "notification_requests.title": "Filtered notifications", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favorites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show_bar": "Show filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", @@ -474,6 +477,15 @@ "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.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}", + "notifications.policy.filter_new_accounts_title": "New accounts", + "notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}", + "notifications.policy.filter_not_followers_title": "People not following you", + "notifications.policy.filter_not_following_hint": "Until you manually approve them", + "notifications.policy.filter_not_following_title": "People you don't follow", + "notifications.policy.filter_private_mentions_hint": "Filtered unless it's in reply to your own mention or if you follow the sender", + "notifications.policy.filter_private_mentions_title": "Unsolicited private mentions", + "notifications.policy.title": "Filter out notifications from…", "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", diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts index ecef63387377b5..51a76d191e57d3 100644 --- a/app/javascript/mastodon/reducers/index.ts +++ b/app/javascript/mastodon/reducers/index.ts @@ -27,6 +27,8 @@ import media_attachments from './media_attachments'; import meta from './meta'; import { modalReducer } from './modal'; import mutes from './mutes'; +import { notificationPolicyReducer } from './notification_policy'; +import { notificationRequestsReducer } from './notification_requests'; import notifications from './notifications'; import picture_in_picture from './picture_in_picture'; import polls from './polls'; @@ -84,6 +86,8 @@ const reducers = { history, tags, followed_tags, + notificationPolicy: notificationPolicyReducer, + notificationRequests: notificationRequestsReducer, }; // We want the root state to be an ImmutableRecord, which is an object with a defined list of keys, diff --git a/app/javascript/mastodon/reducers/notification_policy.js b/app/javascript/mastodon/reducers/notification_policy.js new file mode 100644 index 00000000000000..8edb4d12a151ef --- /dev/null +++ b/app/javascript/mastodon/reducers/notification_policy.js @@ -0,0 +1,12 @@ +import { fromJS } from 'immutable'; + +import { NOTIFICATION_POLICY_FETCH_SUCCESS } from 'mastodon/actions/notifications'; + +export const notificationPolicyReducer = (state = null, action) => { + switch(action.type) { + case NOTIFICATION_POLICY_FETCH_SUCCESS: + return fromJS(action.policy); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/notification_requests.js b/app/javascript/mastodon/reducers/notification_requests.js new file mode 100644 index 00000000000000..4247062a582704 --- /dev/null +++ b/app/javascript/mastodon/reducers/notification_requests.js @@ -0,0 +1,96 @@ +import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; + +import { + NOTIFICATION_REQUESTS_EXPAND_REQUEST, + NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + NOTIFICATION_REQUESTS_EXPAND_FAIL, + NOTIFICATION_REQUESTS_FETCH_REQUEST, + NOTIFICATION_REQUESTS_FETCH_SUCCESS, + NOTIFICATION_REQUESTS_FETCH_FAIL, + NOTIFICATION_REQUEST_FETCH_REQUEST, + NOTIFICATION_REQUEST_FETCH_SUCCESS, + NOTIFICATION_REQUEST_FETCH_FAIL, + NOTIFICATION_REQUEST_ACCEPT_REQUEST, + NOTIFICATION_REQUEST_DISMISS_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, + NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, +} from 'mastodon/actions/notifications'; + +import { notificationToMap } from './notifications'; + +const initialState = ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + current: ImmutableMap({ + isLoading: false, + item: null, + removed: false, + notifications: ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + }), + }), +}); + +const normalizeRequest = request => fromJS({ + ...request, + account: request.account.id, +}); + +const removeRequest = (state, id) => { + if (state.getIn(['current', 'item', 'id']) === id) { + state = state.setIn(['current', 'removed'], true); + } + + return state.update('items', list => list.filterNot(item => item.get('id') === id)); +}; + +export const notificationRequestsReducer = (state = initialState, action) => { + switch(action.type) { + case NOTIFICATION_REQUESTS_FETCH_SUCCESS: + return state.withMutations(map => { + map.update('items', list => ImmutableList(action.requests.map(normalizeRequest)).concat(list)); + map.set('isLoading', false); + map.update('next', next => next ?? action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_SUCCESS: + return state.withMutations(map => { + map.update('items', list => list.concat(ImmutableList(action.requests.map(normalizeRequest)))); + map.set('isLoading', false); + map.set('next', action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_REQUEST: + case NOTIFICATION_REQUESTS_FETCH_REQUEST: + return state.set('isLoading', true); + case NOTIFICATION_REQUESTS_EXPAND_FAIL: + case NOTIFICATION_REQUESTS_FETCH_FAIL: + return state.set('isLoading', false); + case NOTIFICATION_REQUEST_ACCEPT_REQUEST: + case NOTIFICATION_REQUEST_DISMISS_REQUEST: + return removeRequest(state, action.id); + case NOTIFICATION_REQUEST_FETCH_REQUEST: + return state.set('current', initialState.get('current').set('isLoading', true)); + case NOTIFICATION_REQUEST_FETCH_SUCCESS: + return state.update('current', map => map.set('isLoading', false).set('item', normalizeRequest(action.request))); + case NOTIFICATION_REQUEST_FETCH_FAIL: + return state.update('current', map => map.set('isLoading', false)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST: + return state.setIn(['current', 'notifications', 'isLoading'], true); + case NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => ImmutableList(action.notifications.map(notificationToMap)).concat(list)).update('next', next => next ?? action.next)); + case NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => list.concat(ImmutableList(action.notifications.map(notificationToMap)))).set('next', action.next)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL: + return state.setIn(['current', 'notifications', 'isLoading'], false); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 2ca301b19a6718..b1c80b3d4fdd47 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -48,7 +48,7 @@ const initialState = ImmutableMap({ browserPermission: 'default', }); -const notificationToMap = notification => ImmutableMap({ +export const notificationToMap = notification => ImmutableMap({ id: notification.id, type: notification.type, account: notification.account.id, diff --git a/app/javascript/mastodon/utils/numbers.ts b/app/javascript/mastodon/utils/numbers.ts index 0a73061f69b616..ee2dabf56684b4 100644 --- a/app/javascript/mastodon/utils/numbers.ts +++ b/app/javascript/mastodon/utils/numbers.ts @@ -69,3 +69,11 @@ export function pluralReady( export function roundTo10(num: number): number { return Math.round(num * 0.1) / 0.1; } + +export function toCappedNumber(num: string): string { + if (parseInt(num) > 99) { + return '99+'; + } else { + return num; + } +} diff --git a/app/javascript/material-icons/400-24px/archive-fill.svg b/app/javascript/material-icons/400-24px/archive-fill.svg new file mode 100644 index 00000000000000..bb604288f5bd9b --- /dev/null +++ b/app/javascript/material-icons/400-24px/archive-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/archive.svg b/app/javascript/material-icons/400-24px/archive.svg new file mode 100644 index 00000000000000..6b72fca4ee700d --- /dev/null +++ b/app/javascript/material-icons/400-24px/archive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 6d79a843d8f4a3..faa775ec4b583f 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3289,12 +3289,13 @@ $ui-header-height: 55px; border: 0; border-bottom: 1px solid lighten($ui-base-color, 8%); text-align: unset; - padding: 15px; + padding: 13px; margin: 0; z-index: 3; outline: 0; display: flex; align-items: center; + gap: 5px; &:hover { text-decoration: underline; @@ -3304,6 +3305,7 @@ $ui-header-height: 55px; .column-header__back-button { display: flex; align-items: center; + gap: 5px; background: $ui-base-color; border: 0; font-family: inherit; @@ -3311,23 +3313,19 @@ $ui-header-height: 55px; cursor: pointer; white-space: nowrap; font-size: 16px; - padding: 0 5px 0 0; + padding: 13px; z-index: 3; &:hover { text-decoration: underline; } - &:last-child { - padding: 0 15px 0 0; + &.compact { + padding-inline-end: 5px; + flex: 0 0 auto; } } -.column-back-button__icon { - display: inline-block; - margin-inline-end: 5px; -} - .react-toggle { display: inline-block; position: relative; @@ -4013,7 +4011,7 @@ a.status-card { z-index: 2; outline: 0; - & > button { + &__title { display: flex; align-items: center; gap: 5px; @@ -4035,8 +4033,18 @@ a.status-card { } } - & > .column-header__back-button { + .column-header__back-button + &__title { + padding-inline-start: 0; + } + + .column-header__back-button { + flex: 1; color: $highlight-text-color; + + &.compact { + flex: 0 0 auto; + color: $primary-text-color; + } } &.active { @@ -4050,6 +4058,18 @@ a.status-card { &:active { outline: 0; } + + &__advanced-buttons { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px; + padding-top: 0; + + &:first-child { + padding-top: 16px; + } + } } .column-header__buttons { @@ -4136,7 +4156,6 @@ a.status-card { .column-header__collapsible-inner { background: $ui-base-color; - padding: 15px; } .column-header__setting-btn { @@ -4158,20 +4177,8 @@ a.status-card { } .column-header__setting-arrows { - float: right; - - .column-header__setting-btn { - padding: 5px; - - &:first-child { - padding-inline-end: 7px; - } - - &:last-child { - padding-inline-start: 7px; - margin-inline-start: 5px; - } - } + display: flex; + align-items: center; } .text-btn { @@ -4408,24 +4415,56 @@ a.status-card { text-align: center; } -.column-settings__outer { - background: lighten($ui-base-color, 8%); - padding: 15px; -} +.column-settings { + display: flex; + flex-direction: column; -.column-settings__section { - color: $darker-text-color; - cursor: default; - display: block; - font-weight: 500; - margin-bottom: 10px; -} + &__section { + // FIXME: Legacy + color: $darker-text-color; + cursor: default; + display: block; + font-weight: 500; + } -.column-settings__row--with-margin { - margin-bottom: 15px; + .column-header__links { + margin: 0; + } + + section { + padding: 16px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &:last-child { + border-bottom: 0; + } + } + + h3 { + font-size: 16px; + line-height: 24px; + letter-spacing: 0.5px; + font-weight: 500; + color: $primary-text-color; + margin-bottom: 16px; + } + + &__row { + display: flex; + flex-direction: column; + gap: 12px; + } + + .app-form__toggle { + &__toggle > div { + border: 0; + } + } } .column-settings__hashtags { + margin-top: 15px; + .column-settings__row { margin-bottom: 15px; } @@ -4549,16 +4588,13 @@ a.status-card { } .setting-toggle { - display: block; - line-height: 24px; + display: flex; + align-items: center; + gap: 8px; } .setting-toggle__label { color: $darker-text-color; - display: inline-block; - margin-bottom: 14px; - margin-inline-start: 8px; - vertical-align: middle; } .limited-account-hint { @@ -6949,29 +6985,33 @@ a.status-card { background: $ui-base-color; &__column { - padding: 10px 15px; - padding-bottom: 0; + display: flex; + flex-direction: column; + gap: 15px; + padding: 15px; } .radio-button { - display: block; + display: flex; } } .column-settings__row .radio-button { - display: block; + display: flex; } .radio-button { font-size: 14px; position: relative; - display: inline-block; - padding: 6px 0; + display: inline-flex; + align-items: center; line-height: 18px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; + gap: 10px; + color: $secondary-text-color; input[type='radio'], input[type='checkbox'] { @@ -6979,21 +7019,29 @@ a.status-card { } &__input { - display: inline-block; + display: block; position: relative; - border: 1px solid $ui-primary-color; + border: 2px solid $secondary-text-color; box-sizing: border-box; width: 18px; height: 18px; flex: 0 0 auto; - margin-inline-end: 10px; - top: -1px; border-radius: 50%; - vertical-align: middle; &.checked { - border-color: lighten($ui-highlight-color, 4%); - background: lighten($ui-highlight-color, 4%); + border-color: $secondary-text-color; + + &::before { + position: absolute; + left: 2px; + top: 2px; + content: ''; + display: block; + border-radius: 50%; + width: 10px; + height: 10px; + background: $secondary-text-color; + } } } } @@ -9588,3 +9636,110 @@ noscript { } } } + +.filtered-notifications-banner { + display: flex; + align-items: center; + background: $ui-base-color; + border-bottom: 1px solid lighten($ui-base-color, 8%); + padding: 15px; + gap: 15px; + color: $darker-text-color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + color: $secondary-text-color; + + .filtered-notifications-banner__badge { + background: $secondary-text-color; + } + } + + .icon { + width: 24px; + height: 24px; + } + + &__text { + flex: 1 1 auto; + font-style: 14px; + line-height: 20px; + + strong { + font-size: 16px; + line-height: 24px; + display: block; + } + } + + &__badge { + background: $darker-text-color; + color: $ui-base-color; + border-radius: 100px; + padding: 2px 8px; + font-weight: 500; + font-size: 11px; + line-height: 16px; + } +} + +.notification-request { + display: flex; + align-items: center; + gap: 16px; + padding: 15px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &__link { + display: flex; + align-items: center; + gap: 12px; + flex: 1 1 auto; + text-decoration: none; + color: inherit; + overflow: hidden; + + .account__avatar { + flex-shrink: 0; + } + } + + &__name { + flex: 1 1 auto; + color: $darker-text-color; + font-style: 14px; + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + + &__display-name { + display: flex; + align-items: center; + gap: 6px; + font-size: 16px; + letter-spacing: 0.5px; + line-height: 24px; + color: $secondary-text-color; + } + + .filtered-notifications-banner__badge { + background-color: $highlight-text-color; + border-radius: 4px; + padding: 1px 6px; + } + } + + &__actions { + display: flex; + align-items: center; + gap: 8px; + + .icon-button { + border-radius: 4px; + border: 1px solid lighten($ui-base-color, 8%); + padding: 5px; + } + } +} diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 3ac5c3df959298..f6ec44fb5380fa 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -1313,6 +1313,12 @@ code { font-weight: 600; } + .hint { + display: block; + font-size: 14px; + color: $darker-text-color; + } + .recommended { position: absolute; margin: 0 4px; diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index 7ae7e46d1b8339..6901b3985b9118 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -48,6 +48,6 @@ def reconsider_existence! private def prepare_notifications_count - self.notifications_count = Notification.where(account: account, from_account: from_account).limit(MAX_MEANINGFUL_COUNT).count + self.notifications_count = Notification.where(account: account, from_account: from_account, filtered: true).limit(MAX_MEANINGFUL_COUNT).count end end diff --git a/config/routes.rb b/config/routes.rb index 51c10a14f6e6a6..2ec7494969fa89 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,7 +27,7 @@ def redirect_with_vary(path) /public/remote /conversations /lists/(*any) - /notifications + /notifications/(*any) /favourites /bookmarks /pinned diff --git a/config/routes/api.rb b/config/routes/api.rb index 18a247e9fde678..07340a634063c6 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -151,7 +151,7 @@ end namespace :notifications do - resources :requests, only: :index do + resources :requests, only: [:index, :show] do member do post :accept post :dismiss diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb index bbfa548cf4b5c4..cfd8e85edad4df 100644 --- a/spec/models/notification_policy_spec.rb +++ b/spec/models/notification_policy_spec.rb @@ -9,7 +9,7 @@ let(:sender) { Fabricate(:account) } before do - Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender)) + Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender), filtered: true) Fabricate(:notification_request, account: subject.account, from_account: sender) subject.summarize! end diff --git a/spec/models/notification_request_spec.rb b/spec/models/notification_request_spec.rb index f4613aaedeb3b7..07bbc3e0a8e7e9 100644 --- a/spec/models/notification_request_spec.rb +++ b/spec/models/notification_request_spec.rb @@ -10,7 +10,7 @@ context 'when there are remaining notifications' do before do - Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account)) + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account), filtered: true) subject.reconsider_existence! end From a38e4241851b71a979200e0090b014d13aae2908 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 11:14:55 -0400 Subject: [PATCH 23/26] Use unchanging github links in docs/comments (#29545) --- .eslintrc.js | 4 ++-- Dockerfile | 2 +- config/initializers/open_redirects.rb | 11 ++++------- lib/mastodon/migration_helpers.rb | 3 ++- spec/config/initializers/rack/attack_spec.rb | 2 +- spec/controllers/.rubocop.yml | 4 ++-- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index bd818c3ce4b171..502b9cefed87c6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -123,7 +123,7 @@ module.exports = defineConfig({ 'react/react-in-jsx-scope': 'off', // not needed with new JSX transform 'react/self-closing-comp': 'error', - // recommended values found in https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/index.js + // recommended values found in https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/v6.8.0/src/index.js#L46 'jsx-a11y/accessible-emoji': 'warn', 'jsx-a11y/click-events-have-key-events': 'off', 'jsx-a11y/label-has-associated-control': 'off', @@ -176,7 +176,7 @@ module.exports = defineConfig({ }, ], - // See https://github.com/import-js/eslint-plugin-import/blob/main/config/recommended.js + // See https://github.com/import-js/eslint-plugin-import/blob/v2.29.1/config/recommended.js 'import/extensions': [ 'error', 'always', diff --git a/Dockerfile b/Dockerfile index 119c266b890da9..facd9b8aa0c77d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ ARG MASTODON_VERSION_METADATA="" # See: https://docs.joinmastodon.org/admin/config/#rails_serve_static_files ARG RAILS_SERVE_STATIC_FILES="true" # Allow to use YJIT compiler -# See: https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md +# See: https://github.com/ruby/ruby/blob/v3_2_3/doc/yjit/yjit.md ARG RUBY_YJIT_ENABLE="1" # Timezone used by the Docker container and runtime, change with [--build-arg TZ=Europe/Berlin] ARG TZ="Etc/UTC" diff --git a/config/initializers/open_redirects.rb b/config/initializers/open_redirects.rb index c953a990c6646b..1c5a66e07dc4b7 100644 --- a/config/initializers/open_redirects.rb +++ b/config/initializers/open_redirects.rb @@ -1,10 +1,7 @@ # frozen_string_literal: true -# TODO -# Starting with Rails 7.0, the framework default here is to set this true. -# However, we have a location in devise that redirects where we don't have an -# easy ability to override the method or set a config option, and where the -# redirect does not supply this option itself. -# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28 -# Once a solution is found, this line can be removed. +# TODO: Starting with Rails 7.0, the framework default is true for this setting. +# This location in devise redirects and we can't hook in or override: +# https://github.com/heartcombo/devise/blob/v4.9.3/app/controllers/devise/confirmations_controller.rb#L28 +# When solution is found, this setting can go back to default. Rails.application.config.action_controller.raise_on_open_redirects = false diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb index a713f42d419e50..9997e4252318e2 100644 --- a/lib/mastodon/migration_helpers.rb +++ b/lib/mastodon/migration_helpers.rb @@ -743,7 +743,8 @@ def check_trigger_permissions!(table) private - # https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L678-L684 + # Private method copied from: + # https://github.com/rails/rails/blob/v7.1.3.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L974-L980 def extract_foreign_key_action(specifier) case specifier when 'c'; :cascade diff --git a/spec/config/initializers/rack/attack_spec.rb b/spec/config/initializers/rack/attack_spec.rb index c9ce9e27d023a9..e25b7dfde9422e 100644 --- a/spec/config/initializers/rack/attack_spec.rb +++ b/spec/config/initializers/rack/attack_spec.rb @@ -13,7 +13,7 @@ def app # to avoid crossing period boundaries. # The code Rack::Attack uses to set periods is the following: - # https://github.com/rack/rack-attack/blob/v6.6.1/lib/rack/attack/cache.rb#L64-L66 + # https://github.com/rack/rack-attack/blob/v6.7.0/lib/rack/attack/cache.rb#L70-L72 # So we want to minimize `Time.now.to_i % period` travel_to Time.zone.at(counter_prefix * period.seconds) diff --git a/spec/controllers/.rubocop.yml b/spec/controllers/.rubocop.yml index 525479be81c5f3..51d7c23de1b40e 100644 --- a/spec/controllers/.rubocop.yml +++ b/spec/controllers/.rubocop.yml @@ -1,6 +1,6 @@ inherit_from: ../../.rubocop.yml -# Anonymous controllers in specs cannot access described_class -# https://github.com/rubocop/rubocop-rspec/blob/master/lib/rubocop/cop/rspec/described_class.rb#L36-L39 +# Anonymous controllers in specs cannot access `described_class`, explanation: +# https://github.com/rubocop/rubocop-rspec/blob/v2.26.1/lib/rubocop/cop/rspec/described_class.rb#L36-L56 RSpec/DescribedClass: SkipBlocks: true From 24319836de6046fb2985ec1a24c30ad7d47584d7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 11:46:25 -0400 Subject: [PATCH 24/26] Convert request-based setup into factory setup in push/subscriptions request spec (#29489) --- .../api/v1/push/subscriptions_spec.rb | 94 ++++++++++++------- 1 file changed, 58 insertions(+), 36 deletions(-) diff --git a/spec/requests/api/v1/push/subscriptions_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb index d699fd1e08503a..700250ee2ac0b9 100644 --- a/spec/requests/api/v1/push/subscriptions_spec.rb +++ b/spec/requests/api/v1/push/subscriptions_spec.rb @@ -37,66 +37,88 @@ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } describe 'POST /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - end - - it 'saves push subscriptions' do - push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) - - expect(push_subscription.endpoint).to eq(create_payload[:subscription][:endpoint]) - expect(push_subscription.key_p256dh).to eq(create_payload[:subscription][:keys][:p256dh]) - expect(push_subscription.key_auth).to eq(create_payload[:subscription][:keys][:auth]) - expect(push_subscription.user_id).to eq user.id - expect(push_subscription.access_token_id).to eq token.id - end - - it 'replaces old subscription on repeat calls' do - post '/api/v1/push/subscription', params: create_payload, headers: headers - - expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 - end + subject { post '/api/v1/push/subscription', params: create_payload, headers: headers } + + it 'saves push subscriptions and returns expected JSON' do + subject + + expect(endpoint_push_subscription) + .to have_attributes( + endpoint: eq(create_payload[:subscription][:endpoint]), + key_p256dh: eq(create_payload[:subscription][:keys][:p256dh]), + key_auth: eq(create_payload[:subscription][:keys][:auth]), + user_id: eq(user.id), + access_token_id: eq(token.id) + ) - it 'returns the expected JSON' do expect(body_as_json.with_indifferent_access) .to include( { endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' } ) end + + it 'replaces old subscription on repeat calls' do + 2.times { subject } + + expect(endpoint_push_subscriptions.count) + .to eq(1) + end end describe 'PUT /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - put '/api/v1/push/subscription', params: alerts_payload, headers: headers - end + subject { put '/api/v1/push/subscription', params: alerts_payload, headers: headers } - it 'changes alert settings' do - push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) + before { create_subscription_with_token } - expect(push_subscription.data['policy']).to eq(alerts_payload[:data][:policy]) + it 'changes data policy and alert settings and returns expected JSON' do + expect { subject } + .to change { endpoint_push_subscription.reload.data } + .from(nil) + .to(include('policy' => alerts_payload[:data][:policy])) %w(follow follow_request favourite reblog mention poll status).each do |type| - expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s) + expect(endpoint_push_subscription.data['alerts']).to include( + type.to_s => eq(alerts_payload[:data][:alerts][type.to_sym].to_s) + ) end - end - it 'returns the expected JSON' do expect(body_as_json.with_indifferent_access) .to include( - { endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] } + endpoint: create_payload[:subscription][:endpoint], + alerts: alerts_payload[:data][:alerts], + policy: alerts_payload[:data][:policy] ) end end describe 'DELETE /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - delete '/api/v1/push/subscription', headers: headers - end + subject { delete '/api/v1/push/subscription', headers: headers } + + before { create_subscription_with_token } it 'removes the subscription' do - expect(Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])).to be_nil + expect { subject } + .to change { endpoint_push_subscription }.to(nil) end end + + private + + def endpoint_push_subscriptions + Web::PushSubscription.where( + endpoint: create_payload[:subscription][:endpoint] + ) + end + + def endpoint_push_subscription + endpoint_push_subscriptions.first + end + + def create_subscription_with_token + Fabricate( + :web_push_subscription, + endpoint: create_payload[:subscription][:endpoint], + access_token_id: token.id + ) + end end From 7e3af192221e94044e09e0d5d6cce3aca8a3c805 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 12 Mar 2024 10:21:18 +0900 Subject: [PATCH 25/26] Fix test --- spec/fabricators/friend_domain_fabricator.rb | 4 ++-- spec/fabricators/instance_info_fabricator.rb | 2 +- spec/fabricators/pending_follow_request_fabricator.rb | 2 +- spec/fabricators/pending_status_fabricator.rb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/fabricators/friend_domain_fabricator.rb b/spec/fabricators/friend_domain_fabricator.rb index 840f79ea3e4bd1..139cc9ab94d146 100644 --- a/spec/fabricators/friend_domain_fabricator.rb +++ b/spec/fabricators/friend_domain_fabricator.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true Fabricator(:friend_domain) do - domain 'example.com' - inbox_url 'https://example.com/inbox' + domain { sequence(:domain) { |i| "info-#{i}.example.com" } } + inbox_url { sequence(:inbox_url) { |i| "https://info-#{i}.example.com/inbox" } } active_state :idle passive_state :idle available true diff --git a/spec/fabricators/instance_info_fabricator.rb b/spec/fabricators/instance_info_fabricator.rb index a0bdb2b71334b0..ff53833a280b74 100644 --- a/spec/fabricators/instance_info_fabricator.rb +++ b/spec/fabricators/instance_info_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator(:instance_info) do - domain 'info.example.com' + domain { sequence(:domain) { |i| "info-#{i}.example.com" } } software 'mastodon' version '4.1.0' end diff --git a/spec/fabricators/pending_follow_request_fabricator.rb b/spec/fabricators/pending_follow_request_fabricator.rb index 5ec74d725faf9d..b1ef929e3b0a34 100644 --- a/spec/fabricators/pending_follow_request_fabricator.rb +++ b/spec/fabricators/pending_follow_request_fabricator.rb @@ -3,5 +3,5 @@ Fabricator(:pending_follow_request) do account { Fabricate.build(:account) } target_account { Fabricate.build(:account, locked: true) } - uri 'https://example.com/follow' + uri { sequence(:uri) { |i| "https://info-#{i}.example.com/follow" } } end diff --git a/spec/fabricators/pending_status_fabricator.rb b/spec/fabricators/pending_status_fabricator.rb index 796b10588e12ea..01849875331b97 100644 --- a/spec/fabricators/pending_status_fabricator.rb +++ b/spec/fabricators/pending_status_fabricator.rb @@ -3,5 +3,5 @@ Fabricator(:pending_status) do account { Fabricate.build(:account) } fetch_account { Fabricate.build(:account) } - uri { "https://example.com/#{Time.now.utc.nsec}" } + uri { sequence(:uri) { |i| "https://example.com/note-#{i}" } } end From 08758a78e371181ebbebfceadafd9d2dd7f3a168 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 12 Mar 2024 10:51:49 +0900 Subject: [PATCH 26/26] Fix test --- spec/lib/activitypub/activity/follow_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index c04945b76590a4..ef8ff2432158ab 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -381,7 +381,7 @@ subject { described_class.new(json, sender) } let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } - let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', passive_state: :idle) } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', inbox_url: 'https://example.com/inbox', passive_state: :idle) } let!(:owner_user) { Fabricate(:user, role: UserRole.find_by(name: 'Owner')) } let!(:patch_user) { Fabricate(:user, role: Fabricate(:user_role, name: 'OhagiOps', permissions: UserRole::FLAGS[:manage_federation])) } let(:inbox_url) { nil } @@ -405,7 +405,7 @@ context 'when no record' do before do - friend.update(domain: 'def.com') + friend.destroy! end it 'marks the friend as pending' do @@ -423,7 +423,7 @@ let(:inbox_url) { 'https://ohagi.com/inbox' } before do - friend.update(domain: 'def.com') + friend.destroy! end it 'marks the friend as pending' do @@ -539,7 +539,7 @@ context 'when domain blocked' do before do - friend.update(domain: 'def.com') + friend.destroy! end it 'marks the friend rejected' do