Merge branch 'main' into feature/require-mfa-by-admin

This commit is contained in:
FredysFonseca 2025-08-11 19:17:13 -04:00 committed by GitHub
commit cf1db1a025
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
67 changed files with 2147 additions and 892 deletions

View File

@ -223,7 +223,7 @@ gem 'connection_pool', require: false
gem 'xorcist', '~> 1.1'
gem 'net-http', '~> 0.6.0'
gem 'rubyzip', '~> 2.3'
gem 'rubyzip', '~> 3.0'
gem 'hcaptcha', '~> 7.1'

View File

@ -300,8 +300,8 @@ GEM
highline (3.1.2)
reline
hiredis (0.6.3)
hiredis-client (0.25.1)
redis-client (= 0.25.1)
hiredis-client (0.25.2)
redis-client (= 0.25.2)
hkdf (0.3.0)
htmlentities (4.3.4)
http (5.3.1)
@ -315,7 +315,7 @@ GEM
http_accept_language (2.1.1)
httpclient (2.9.0)
mutex_m
httplog (1.7.2)
httplog (1.7.3)
rack (>= 2.0)
rainbow (>= 2.0.0)
i18n (1.14.7)
@ -717,7 +717,7 @@ GEM
reline
redcarpet (3.6.1)
redis (4.8.1)
redis-client (0.25.1)
redis-client (0.25.2)
connection_pool
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
@ -811,7 +811,7 @@ GEM
ruby-vips (2.2.4)
ffi (~> 1.12)
logger
rubyzip (2.4.1)
rubyzip (3.0.1)
rufus-scheduler (3.9.2)
fugit (~> 1.1, >= 1.11.1)
safety_net_attestation (0.4.0)
@ -1075,7 +1075,7 @@ DEPENDENCIES
ruby-prof
ruby-progressbar (~> 1.13)
ruby-vips (~> 2.2)
rubyzip (~> 2.3)
rubyzip (~> 3.0)
sanitize (~> 7.0)
scenic (~> 1.7)
shoulda-matchers

View File

@ -13,6 +13,8 @@ class Auth::SessionsController < Devise::SessionsController
skip_before_action :update_user_sign_in
skip_before_action :check_mfa_requirement, only: [:destroy]
around_action :preserve_stored_location, only: :destroy, if: :continue_after?
prepend_before_action :check_suspicious!, only: [:create]
include Auth::TwoFactorAuthenticationConcern
@ -32,11 +34,9 @@ class Auth::SessionsController < Devise::SessionsController
end
def destroy
tmp_stored_location = stored_location_for(:user)
super
session.delete(:challenge_passed_at)
flash.delete(:notice)
store_location_for(:user, tmp_stored_location) if continue_after?
end
def webauthn_options
@ -97,6 +97,12 @@ class Auth::SessionsController < Devise::SessionsController
private
def preserve_stored_location
original_stored_location = stored_location_for(:user)
yield
store_location_for(:user, original_stored_location)
end
def check_suspicious!
user = find_user
@login_is_suspicious = suspicious_sign_in?(user) unless user.nil?

View File

@ -228,6 +228,8 @@ export function submitCompose() {
visibility: getState().getIn(['compose', 'privacy']),
poll: getState().getIn(['compose', 'poll'], null),
language: getState().getIn(['compose', 'language']),
quoted_status_id: getState().getIn(['compose', 'quoted_status_id']),
quote_approval_policy: getState().getIn(['compose', 'quote_policy']),
},
headers: {
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),

View File

@ -1,9 +1,18 @@
import { createAction } from '@reduxjs/toolkit';
import type { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import { apiUpdateMedia } from 'mastodon/api/compose';
import type { ApiMediaAttachmentJSON } from 'mastodon/api_types/media_attachments';
import type { MediaAttachment } from 'mastodon/models/media_attachment';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
import {
createDataLoadingThunk,
createAppThunk,
} from 'mastodon/store/typed_functions';
import type { ApiQuotePolicy } from '../api_types/quotes';
import type { Status } from '../models/status';
import { ensureComposeIsVisible } from './compose';
type SimulatedMediaAttachmentJSON = ApiMediaAttachmentJSON & {
unattached?: boolean;
@ -68,3 +77,26 @@ export const changeUploadCompose = createDataLoadingThunk(
useLoadingBar: false,
},
);
export const quoteComposeByStatus = createAppThunk(
'compose/quoteComposeStatus',
(status: Status, { getState }) => {
ensureComposeIsVisible(getState);
return status;
},
);
export const quoteComposeById = createAppThunk(
(statusId: string, { dispatch, getState }) => {
const status = getState().statuses.get(statusId);
if (status) {
dispatch(quoteComposeByStatus(status));
}
},
);
export const quoteComposeCancel = createAction('compose/quoteComposeCancel');
export const setQuotePolicy = createAction<ApiQuotePolicy>(
'compose/setQuotePolicy',
);

View File

@ -0,0 +1,23 @@
import type { ApiStatusJSON } from './statuses';
export type ApiQuoteState = 'accepted' | 'pending' | 'revoked' | 'unauthorized';
export type ApiQuotePolicy = 'public' | 'followers' | 'nobody';
interface ApiQuoteEmptyJSON {
state: Exclude<ApiQuoteState, 'accepted'>;
quoted_status: null;
}
interface ApiNestedQuoteJSON {
state: 'accepted';
quoted_status_id: string;
}
interface ApiQuoteAcceptedJSON {
state: 'accepted';
quoted_status: Omit<ApiStatusJSON, 'quote'> & {
quote: ApiNestedQuoteJSON | ApiQuoteEmptyJSON;
};
}
export type ApiQuoteJSON = ApiQuoteAcceptedJSON | ApiQuoteEmptyJSON;

View File

@ -4,6 +4,7 @@ import type { ApiAccountJSON } from './accounts';
import type { ApiCustomEmojiJSON } from './custom_emoji';
import type { ApiMediaAttachmentJSON } from './media_attachments';
import type { ApiPollJSON } from './polls';
import type { ApiQuoteJSON } from './quotes';
// See app/modals/status.rb
export type StatusVisibility =
@ -118,6 +119,7 @@ export interface ApiStatusJSON {
card?: ApiPreviewCardJSON;
poll?: ApiPollJSON;
quote?: ApiQuoteJSON;
}
export interface ApiContextJSON {

View File

@ -38,11 +38,7 @@ export const EmojiHTML = <Element extends ElementType>(
if (isModernEmojiEnabled()) {
return <ModernEmojiHTML {...props} />;
}
const Wrapper = props.as ?? 'div';
return (
<Wrapper
{...props}
dangerouslySetInnerHTML={{ __html: props.htmlString }}
/>
);
const { as: asElement, htmlString, extraEmojis, ...rest } = props;
const Wrapper = asElement ?? 'div';
return <Wrapper {...rest} dangerouslySetInnerHTML={{ __html: htmlString }} />;
};

View File

@ -49,12 +49,12 @@
"account.follows.empty": "Bu istifadəçi hələ ki, heç kimi izləmir.",
"account.follows_you": "Sizi izləyir",
"account.go_to_profile": "Profilə get",
"account.hide_reblogs": "@{name} istifadəçisindən olan gücləndirmələri gizlət",
"account.hide_reblogs": "@{name} - təkrar paylaşımlarını gizlət",
"account.in_memoriam": "Xatirə.",
"account.joined_short": "Qoşulub",
"account.languages": "Abunə olunmuş dilləri dəyiş",
"account.link_verified_on": "Bu linkin dəqiqliyi {date} tarixində yoxlanılıb",
"account.locked_info": "Bu hesabın məxfilik statusu kilidlənib. Hesabın sahibi onu kimin izləyə biləcəyini manual olaraq təyin edir.",
"account.locked_info": "Bu hesabın məxfilik statusu kilidlənib. Sahibi, onu kimin izləyə biləcəyini manual olaraq incələyir.",
"account.media": "Media",
"account.mention": "@{name} istifadəçisini teq et",
"account.moved_to": "{name} onun yeni hesabının artıq bu olduğunu bildirdi:",
@ -74,7 +74,7 @@
"account.requested_follow": "{name} sizi izləmək sorğusu göndərib",
"account.requests_to_follow_you": "Sizi izləmək istəyir",
"account.share": "@{name} profilini paylaş",
"account.show_reblogs": "@{name} istifadəçisindən olan gücləndirmələri göstər",
"account.show_reblogs": "@{name} - təkrar paylaşımlarını göstər",
"account.statuses_counter": "{count, plural, one {{counter} paylaşım} other {{counter} paylaşım}}",
"account.unblock": "@{name} blokunu aç",
"account.unblock_domain": "{domain} domeninin blokunu aç",
@ -117,7 +117,7 @@
"annual_report.summary.followers.total": "Cəmi {count}",
"annual_report.summary.here_it_is": "{year} icmalınız:",
"annual_report.summary.highlighted_post.by_favourites": "ən çox sevilən postu",
"annual_report.summary.highlighted_post.by_reblogs": "ən çox gücləndirilən paylaşımı",
"annual_report.summary.highlighted_post.by_reblogs": "ən çox təkrar paylaşılan göndəriş",
"annual_report.summary.highlighted_post.by_replies": "ən çox cavabı olan paylaşımı",
"annual_report.summary.highlighted_post.possessive": "{name} istifadəçisinin",
"annual_report.summary.most_used_app.most_used_app": "ən çox istifadə etdiyi tətbiq",
@ -129,7 +129,7 @@
"annual_report.summary.thanks": "Mastodonun bir parçası olduğunuz üçün təşəkkür edirik!",
"attachments_list.unprocessed": "(emal edilməyib)",
"audio.hide": "Audionu gizlət",
"block_modal.remote_users_caveat": "Biz {domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Bununla belə, bəzi serverlər blokları fərqli şəkildə idarə edə bildiyi üçün uyğunluğa zəmanət verilmir. İctimai paylaşımlar hələ də daxil olmayan istifadəçilərə görünə bilər.",
"block_modal.remote_users_caveat": "{domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Ancaq, bəzi serverlər əngəlləmələri fərqli şəkildə idarə edə bilər deyə, qərarınıza uymağına zəmanət verilmir. Hər kəsə açıq göndərişlər, hələ də sistemə giriş etməmiş istifadəçilərə görünə bilər.",
"block_modal.show_less": "Daha az göstər",
"block_modal.show_more": "Daha çox göstər",
"block_modal.they_cant_mention": "O səni teq edə bilməz və ya izləyə bilməz.",
@ -138,8 +138,8 @@
"block_modal.title": "İstifadəçi bloklansın?",
"block_modal.you_wont_see_mentions": "Onu teq edən postları görməyəcəksən.",
"boost_modal.combo": "Növbəti dəfə bunu atlamaq üçün {combo} klikləyə bilərsən",
"boost_modal.reblog": "Paylaşım gücləndirilsin?",
"boost_modal.undo_reblog": "Paylaşımın gücləndirilməsi ləğv edilsin?",
"boost_modal.reblog": "Paylaşım təkrar paylaşılsın?",
"boost_modal.undo_reblog": "Təkrar paylaşım ləğv edilsin?",
"bundle_column_error.copy_stacktrace": "Xəta hesabatını kopyala",
"bundle_column_error.error.body": "Tələb olunan səhifəni göstərmək mümkün olmadı. Bu, kodumuzdakı səhv və ya brauzer uyğunluğu problemi ilə bağlı ola bilər.",
"bundle_column_error.error.title": "Ah, yox!",
@ -240,7 +240,7 @@
"confirmations.missing_alt_text.title": "Alternativ mətn əlavə edilsin?",
"confirmations.mute.confirm": "Səssizləşdir",
"confirmations.redraft.confirm": "Sil və qaralamaya köçür",
"confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.",
"confirmations.redraft.message": "Bu göndərişi silib yenidən qaralama kimi saxlamaq istədiyinizə əminsiniz? Sevimlilər və təkrar paylaşımlar silinəcək, orijinal göndərişə verilən cavablar isə əlaqəsiz qalacaq.",
"confirmations.redraft.title": "Paylaşım silinsin & qaralamaya köçürülsün?",
"confirmations.remove_from_followers.confirm": "İzləyicini çıxart",
"confirmations.remove_from_followers.message": "{name} sizi izləməyəcək. Davam etmək istədiyinizə əminsiniz?",
@ -325,6 +325,12 @@
"empty_column.followed_tags": "Heç bir heşteq izləmirsiniz. İzlədikdə burada görünəcək.",
"empty_column.hashtag": "Bu heşteqdə hələ ki, heç nə yoxdur.",
"empty_column.notification_requests": "Hamısı hazırdır! Burada heç nə yoxdur. Yeni bildiriş aldığınız zaman, ayarlarınıza görə burada görünəcək.",
"empty_column.notifications": "Hələ heç bir bildirişiniz yoxdur. Başqaları sizinlə qarşılıqlı əlaqə qurduğu zaman, onu burada görəcəksiniz.",
"empty_column.public": "Burada hələ heç nə yoxdur! Buranı doldurmaq üçün hər kəsə açıq bir şey yazın və ya digər serverlərdəki istifadəçiləri izləyin.",
"error.unexpected_crash.explanation": "Kodumuzdakı bir xətaya, ya da brauzer uyumluluq probleminə görə, bu səhifə düzgün nümayiş etdirilə bilmədi.",
"error.unexpected_crash.explanation_addons": "Bu səhifə düzgün nümayiş etdirilə bilmədi. Bu xəta, yəqin ki, brauzer əlavəsi və ya avtomatik tərcümə alətlərindən qaynaqlanır.",
"error.unexpected_crash.next_steps": "Səhifəni təzələməyi sınayın. Bu kömək etməzsə, Mastodon-u başqa bir brauzer və ya yerli tətbiq vasitəsilə istifadə edə bilərsiniz.",
"error.unexpected_crash.next_steps_addons": "Onları sıradan çıxartmağı və səhifəni təzələməyi sınayın. Bu kömək etməzsə, Mastodon-u başqa bir brauzer və ya yerli tətbiq vasitəsilə istifadə edə bilərsiniz.",
"errors.unexpected_crash.report_issue": "Problemi bildir",
"explore.suggested_follows": "İnsanlar",
"explore.title": "Trendlər",
@ -345,9 +351,43 @@
"filter_modal.added.settings_link": "ayarlar səhifəsi",
"filter_modal.added.short_explanation": "Bu göndəriş, aşağıdakı filtr kateqoriyasına əlavə edilib: {title}.",
"filter_modal.added.title": "Filtr əlavə edilib!",
"filter_modal.select_filter.expired": "müddəti bitib",
"filter_modal.select_filter.prompt_new": "Yeni kateqoriya: {name}",
"filter_modal.select_filter.search": "Axtar və ya yarat",
"filter_modal.select_filter.subtitle": "Mövcud bir kateqoriyanı istifadə et, ya da yenisini yarat",
"filter_modal.select_filter.title": "Bu göndərişi filtrlə",
"filter_modal.title.status": "Bir göndərişi filtrlə",
"filter_warning.matches_filter": "“<span>{title}</span>” filtri ilə uyuşur",
"filtered_notifications_banner.title": "Filtrlənmiş bildirişlər",
"firehose.all": "Hamısı",
"firehose.local": "Bu server",
"firehose.remote": "Digər serverlər",
"follow_request.authorize": "Səlahiyyət ver",
"follow_request.reject": "Rədd et",
"follow_requests.unlocked_explanation": "Hesabınız kilidli olmasa da, {domain} heyəti bu hesabların izləmə tələblərini manual olaraq incələmək istəyə biləcəyinizi düşündü.",
"follow_suggestions.curated_suggestion": "Heyətin seçimi",
"follow_suggestions.dismiss": "Təkrar göstərmə",
"follow_suggestions.featured_longer": "{domain} komandası tərəfindən əllə seçildi",
"follow_suggestions.friends_of_friends_longer": "İzlədiyiniz insanlar arasında məşhur",
"follow_suggestions.hints.featured": "Bu profil {domain} komandası tərəfindən əllə seçilib.",
"follow_suggestions.hints.friends_of_friends": "Bu profil izlədiyiniz insanlar arasında populyardır.",
"follow_suggestions.hints.most_followed": "Bu profil {domain} serverində ən çox izlənilənlərdən biridir.",
"follow_suggestions.hints.most_interactions": "Bu profil son zamanlar {domain} üzərində çox diqqət çəkir.",
"follow_suggestions.hints.similar_to_recently_followed": "Bu profil, son vaxtlar izlədiyiniz profillərə bənzəyir.",
"follow_suggestions.personalized_suggestion": "Fərdiləşdirilmiş təklif",
"follow_suggestions.popular_suggestion": "Məşhur təklif",
"follow_suggestions.popular_suggestion_longer": "{domain} üzərində məşhur",
"follow_suggestions.similar_to_recently_followed_longer": "Son zaman izlədiyiniz profillərə oxşar",
"follow_suggestions.view_all": "Hamısına bax",
"followed_tags": "İzlənilən mövzu etiketləri",
"footer.about": "Haqqında",
"footer.directory": "Profil kataloqu",
"footer.get_app": "Tətbiqi əldə et",
"footer.keyboard_shortcuts": "Klaviatura qısayolları",
"footer.privacy_policy": "Gizlilik siyasəti",
"footer.source_code": "Mənbə koduna bax",
"footer.status": "Status",
"footer.terms_of_service": "Xidmət şərtləri",
"generic.saved": "Saxlanıldı",
"getting_started.heading": "Başlayaq",
"hashtag.admin_moderation": "#{name} üçün moderasiya interfeysini aç",
@ -365,19 +405,31 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} iştirakçı} other {{counter} iştirakçı}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
"hashtag.counter_by_uses_today": "Bu gün {count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
"hashtag.feature": "Profildə önə çıxart",
"hashtag.follow": "Mövzu etiketini izlə",
"hashtag.mute": "#{hashtag} - səssizə al",
"hashtag.unfeature": "Profildə önə çıxarılmasın",
"hashtag.unfollow": "Mövzu etiketini izləmə",
"hashtags.and_other": "…və daha {count, plural, one {}other {# ədəd}}",
"hints.profiles.followers_may_be_missing": "Bu profilin izləyiciləri əskik ola bilər.",
"hints.profiles.follows_may_be_missing": "Bu profilin izləyənləri əskik ola bilər.",
"hints.profiles.posts_may_be_missing": "Bu profilin bəzi göndərişləri əskik ola bilər.",
"hints.profiles.see_more_followers": "{domain} üzərində daha çox izləyici gör",
"hints.profiles.see_more_follows": "{domain} üzərində izlənilən gör",
"hints.profiles.see_more_posts": "{domain} üzərində daha çox göndəriş gör",
"home.column_settings.show_quotes": "Sitatları göstər",
"home.column_settings.show_reblogs": "Təkrar paylaşmaları göstər",
"home.column_settings.show_replies": "Cavabları göstər",
"home.hide_announcements": "Elanları gizlət",
"home.pending_critical_update.body": "Lütfən Mastodon serverinizi mümkün olan ən qısa müddətdə güncəlləyin!",
"home.pending_critical_update.link": "Güncəlləmələrə bax",
"home.pending_critical_update.title": "Kritik güvənlik güncəlləməsi mövcuddur!",
"home.show_announcements": "Elanları göstər",
"ignore_notifications_modal.disclaimer": "Mastodon, bildirişlərini yox saydığınız istifadəçiləri məlumatlandırmır. Bildirişləri yox saymaq, mesajların göndərilməsini dayandırmayacaq.",
"ignore_notifications_modal.filter_instead": "Əvəzinə filtrlə",
"ignore_notifications_modal.filter_to_act_users": "Hələ də istifadəçiləri qəbul edə, rədd edə və ya bildirə bilərsiniz",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrləmə, mümkün çaşqınlığın qarşısını almağa kömək edir.",
"ignore_notifications_modal.filter_to_review_separately": "Filtrlənmiş bildirişləri ayrı-ayrı incələyə bilərsiniz",
"ignore_notifications_modal.ignore": "Bildirişləri yox say",
"ignore_notifications_modal.limited_accounts_title": "Moderasiya edilmiş hesabların bildirişləri yox sayılsın?",
"ignore_notifications_modal.new_accounts_title": "Yeni hesabların bildirişləri yox sayılsın?",
@ -390,17 +442,71 @@
"interaction_modal.action.reblog": "Davam etmək üçün hesabınızdan təkrar göndərməlisiniz.",
"interaction_modal.action.reply": "Davam etmək üçün hesabınızdan cavab verməlisiniz.",
"interaction_modal.action.vote": "Davam etmək üçün hesabınızdan səs verməlisiniz.",
"interaction_modal.title.reblog": "{name} - göndərişini təkrar paylaş",
"keyboard_shortcuts.boost": "Göndərişi təkrar paylaş",
"keyboard_shortcuts.profile": "Müəllifin profilini aç",
"keyboard_shortcuts.reply": "Göndərişə cavab ver",
"keyboard_shortcuts.toot": "Yeni bir göndəriş başlat",
"keyboard_shortcuts.translate": "bir göndərişi tərcümə etmək üçün",
"keyboard_shortcuts.unfocus": "Fokusu göndəriş yazma xanasından/axtarışdan götür",
"keyboard_shortcuts.up": "Siyahıda yuxarı daşı",
"learn_more_link.got_it": "Anladım",
"learn_more_link.learn_more": "Daha ətraflı",
"lightbox.close": "Bağla",
"lightbox.next": "Növbəti",
"lightbox.previous": "Əvvəlki",
"lightbox.zoom_in": "Həqiqi ölçüyə qayıt",
"lightbox.zoom_out": "Sığacaq şəkildə yaxınlaşdır",
"limited_account_hint.action": "Yenə də profili göstər",
"limited_account_hint.title": "Bu profil, {domain} moderatorları tərəfindən gizlədildi.",
"link_preview.author": "Müəllif: {name}",
"link_preview.more_from_author": "{name} - daha çox",
"link_preview.shares": "{count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
"lists.add_member": "Əlavə et",
"lists.add_to_list": "Siyahıya əlavə et",
"lists.add_to_lists": "{name} - siyahılara əlavə et",
"lists.create": "Yarat",
"lists.create_a_list_to_organize": "Əsas ekran lentinizi təşkil etmək üçün yeni bir siyahı yaradın",
"lists.create_list": "Siyahı yarat",
"lists.delete": "Siyahını sil",
"lists.done": "Hazırdır",
"lists.edit": "Siyahıya düzəliş et",
"lists.exclusive": "Əsas ekranda üzvləri gizlət",
"lists.exclusive_hint": "Kimsə bu siyahıdadırsa, onun göndərişləri bir dəfədən çox görünməməsi üçün Əsas ekran lentində gizlədilir.",
"lists.find_users_to_add": "Əlavə ediləcək istifadəçiləri tap",
"lists.list_members_count": "{count, plural, one {# üzv} other {# üzv}}",
"lists.list_name": "Siyahı adı",
"lists.new_list_name": "Yeni siyahı adı",
"lists.no_lists_yet": "Hələ siyahı yoxdur.",
"lists.no_members_yet": "Hələ üzv yoxdur.",
"lists.no_results_found": "Heç bir nəticə tapılmadı.",
"lists.remove_member": ıxart",
"lists.replies_policy.followed": "İstənilən izlənilən istifadəçi",
"lists.replies_policy.list": "Siyahıdakı üzvlər",
"lists.replies_policy.none": "Heç kim",
"lists.save": "Saxla",
"lists.search": "Axtar",
"lists.show_replies_to": "Siyahı üzvlərinin cavablarını daxil et",
"load_pending": "{count, plural, one {# yeni element} other {# yeni element}}",
"loading_indicator.label": "Yüklənir…",
"media_gallery.hide": "Gizlət",
"moved_to_account_banner.text": "{disabledAccount} hesabınız, {movedToAccount} hesabına keçdiyiniz üçün hazırda sıradan çıxarılıb.",
"mute_modal.hide_from_notifications": "Bildirişlərdə gizlət",
"mute_modal.hide_options": "Seçimləri gizlət",
"mute_modal.indefinite": "Mən səsini açana qədər",
"mute_modal.show_options": "Seçimləri göstər",
"mute_modal.they_can_mention_and_follow": "Sizin adınızı çəkə və sizi izləyə bilər, ancaq siz onları görə bilməzsiniz.",
"mute_modal.they_wont_know": "Onlar, səssizə alındıqlarını bilməyəcəklər.",
"mute_modal.title": "İstifadəçi səssizə alınsın?",
"mute_modal.you_wont_see_mentions": "Onların adı çəkilən göndərişləri görməyəcəksiniz.",
"mute_modal.you_wont_see_posts": "Onlar hələ də göndərişlərinizi görə biləcək, ancaq onların göndərişlərini görməyəcəksiniz.",
"navigation_bar.about": "Haqqında",
"navigation_bar.account_settings": "Parol və təhlükəsizlik",
"navigation_bar.advanced_interface": "Qabaqcıl veb interfeysində aç",
"navigation_bar.automated_deletion": "Göndərişin avtomatik silinməsi",
"navigation_bar.blocks": "Əngəllənmiş istifadəçilər",
"navigation_bar.follows_and_followers": "İzlənilənlər və izləyicilər",
"navigation_bar.import_export": "Daxilə və xaricə köçürmə",
"navigation_bar.moderation": "Moderasiya",
"not_signed_in_indicator.not_signed_in": "Bu resursa erişmək üçün giriş etməlisiniz.",
"notification.moderation-warning.learn_more": "Daha ətraflı",
@ -412,14 +518,36 @@
"notification.moderation_warning.action_sensitive": "Göndərişləriniz artıq həssas olaraq işarələnəcək.",
"notification.moderation_warning.action_silence": "Hesabınız məhdudlaşdırılıb.",
"notification.moderation_warning.action_suspend": "Hesabınızın fəaliyyəti dayandırılıb.",
"notification.reblog": "{name} göndərişinizi təkrar paylaşdı",
"notification.reblog.name_and_others_with_link": "{name} və <a>{count, plural, one {digər # nəfər} other {digər # nəfər}}</a> göndərişinizi təkrar paylaşdı",
"notification.relationships_severance_event.account_suspension": "{from} admini {target} fəaliyyətini dayandırıb, bu da o deməkdir ki, artıq onlardan güncəlləmələr ala və ya onlarla qarşılıqlı əlaqə qura bilməyəcəyiniz.",
"notification.relationships_severance_event.domain_block": "{target}, {from} admini tərəfindən əngəllənib, buna {followersCount} izləyiciniz və izlədiyiniz {followingCount, plural, one {# hesab} other {# hesab}} daxildir.",
"notification.relationships_severance_event.learn_more": "Daha ətraflı",
"notification.relationships_severance_event.user_domain_block": "{target} əngəlləmisiniz, bununla {followersCount} izləyiciniz və izlədiyiniz {followingCount, plural, one {# hesab} other {# hesab}} silinib.",
"notification.status": "{name} indicə paylaşdı",
"notification.update": "{name} bir göndərişə düzəliş etdi",
"notification_requests.accept": "Qəbul et",
"notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {bir bildiriş sorğusunu} other {# bildiriş sorğusunu}} bağlamaq üzrəsiniz. {count, plural, one {Ona} other {Onlara}} yenidən asanlıqla erişə bilməyəcəksiniz. Davam etmək istədiyinizə əminsiniz?",
"notification_requests.edit_selection": "Düzəliş et",
"notification_requests.exit_selection": "Hazırdır",
"notification_requests.explainer_for_limited_account": "Hesab, bir moderator tərəfindən məhdudlaşdırıldığı üçün bu hesabın bildirişləri filtrləndi.",
"notification_requests.explainer_for_limited_remote_account": "Hesab və ya onun serveri, bir moderator tərəfindən məhdudlaşdırıldığı üçün bu hesabın bildirişləri filtrləndi.",
"notifications.column_settings.follow": "Yeni izləyicilər:",
"notifications.column_settings.reblog": "Təkrar paylaşmalar:",
"notifications.filter.boosts": "Təkrar paylaşmalar",
"notifications.filter.follows": "İzlənilənlər",
"notifications.filter.statuses": "İzlədiyiniz şəxslərdən güncəlləmələr",
"notifications.policy.filter_limited_accounts_hint": "Server moderatorları tərəfindən məhdudlaşdırılıb",
"notifications.policy.filter_limited_accounts_title": "Moderasiya edilmiş hesablar",
"onboarding.profile.discoverable": "Profilimi kəşf edilə bilən et",
"onboarding.profile.discoverable_hint": "Mastodon-da kəşf edilə bilməni aktivləşdirsəniz, göndərişləriniz axtarış nəticələrində və trendlərdə görünə bilər və profiliniz sizinlə oxşar maraqlara sahib şəxslərə təklif edilə bilər.",
"onboarding.profile.display_name": "Ekran adı",
"onboarding.profile.note_hint": "Digər insanların @adını_çəkə və ya #mövzu_etiketləri istifadə edə bilərsiniz…",
"onboarding.profile.title": "Profili ayarla",
"password_confirmation.exceeds_maxlength": "Parol təsdiqi, maksimum parol uzunluğunu aşır",
"password_confirmation.mismatching": "Parol təsdiqi uyuşmur",
"privacy.private.long": "Yalnız izləyiciləriniz",
"privacy.private.short": "İzləyicilər",
"privacy_policy.last_updated": "Son güncəlləmə {date}",
"report.category.subtitle": "Ən çox uyuşanı seçin",
"report_notification.categories.spam_sentence": "spam",
@ -465,6 +593,8 @@
"status.admin_status": "Moderasiya interfeysində bu göndərişi aç",
"status.block": "Əngəllə: @{name}",
"status.bookmark": "Əlfəcin",
"status.cancel_reblog_private": "Təkrar paylaşımı geri al",
"status.cannot_reblog": "Bu göndəriş təkrar paylaşıla bilməz",
"status.context.load_new_replies": "Yeni cavablar mövcuddur",
"status.context.loading": "Daha çox cavab yoxlanılır",
"status.delete": "Sil",
@ -491,6 +621,11 @@
"status.quote_error.not_available": "Göndəriş əlçatmazdır",
"status.quote_error.pending_approval": "Göndəriş gözləmədədir",
"status.read_more": "Daha çoxunu oxu",
"status.reblog": "Təkrar paylaş",
"status.reblog_private": "Orijinal görünmə ilə təkrar paylaş",
"status.reblogged_by": "{name} təkrar paylaşdı",
"status.reblogs": "{count, plural, one {təkrar paylaşma} other {təkrar paylaşma}}",
"status.reblogs.empty": "Hələ heç kim bu göndərişi təkrar paylaşmayıb. Kimsə paylaşdığı zaman, burada görünəcək.",
"status.remove_bookmark": "Əlfəcini sil",
"status.remove_favourite": "Sevimlilərdən sil",
"status.replied_to": "Cavab verildi: {name}",

View File

@ -43,7 +43,7 @@
"account.followers": "Падпісчыкі",
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
"account.followers_you_know_counter": "{count, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
"account.followers_you_know_counter": "{count, plural, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
"account.following": "Падпіскі",
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
@ -62,6 +62,7 @@
"account.mute_notifications_short": "Не апавяшчаць",
"account.mute_short": "Ігнараваць",
"account.muted": "Ігнаруецца",
"account.muting": "Ігнараванне",
"account.mutual": "Вы падпісаны адно на аднаго",
"account.no_bio": "Апісанне адсутнічае.",
"account.open_original_page": "Адкрыць арыгінальную старонку",
@ -103,6 +104,8 @@
"alt_text_modal.add_text_from_image": "Дадаць тэкст з відарыса",
"alt_text_modal.cancel": "Скасаваць",
"alt_text_modal.change_thumbnail": "Змяніць мініяцюру",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Апішыце гэта людзям з праблемамі са слыхам…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Апішыце гэта людзям з праблемамі са зрокам…",
"alt_text_modal.done": "Гатова",
"announcement.announcement": "Аб'ява",
"annual_report.summary.archetype.booster": "Паляўнічы на трэнды",
@ -112,25 +115,25 @@
"annual_report.summary.archetype.replier": "Душа кампаніі",
"annual_report.summary.followers.followers": "падпісчыкі",
"annual_report.summary.followers.total": "Агулам {count}",
"annual_report.summary.here_it_is": "Вось вашы вынікі {year} за год:",
"annual_report.summary.here_it_is": "Вось Вашы вынікі {year} за год:",
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
"annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся часцей",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся часцей",
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся найчасцей",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся найчасцей",
"annual_report.summary.most_used_hashtag.none": "Няма",
"annual_report.summary.new_posts.new_posts": "новыя допісы",
"annual_report.summary.percentile.text": "<topLabel>З-за гэтага, вы знаходзіцеся ў топе</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
"annual_report.summary.percentile.text": "<topLabel>Гэта падымае Вас у топ</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "КДБ пра гэта не даведаецца.",
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
"attachments_list.unprocessed": "(неапрацаваны)",
"audio.hide": "Схаваць аўдыя",
"block_modal.remote_users_caveat": "Мы папросім сервер {domain} паважаць ваш выбар. Аднак гэта не гарантуецца, паколькі некаторыя серверы могуць апрацоўваць блакіроўкі іншым чынам. Публічныя паведамленні могуць заставацца бачнымі для ананімных карыстальнікаў.",
"block_modal.remote_users_caveat": "Мы папросім сервер {domain} паважаць Ваш выбар. Аднак гэта не гарантуецца, паколькі некаторыя серверы могуць апрацоўваць блакіроўкі іншым чынам. Публічныя паведамленні могуць заставацца бачнымі для ананімных карыстальнікаў.",
"block_modal.show_less": "Паказаць меньш",
"block_modal.show_more": "Паказаць больш",
"block_modal.they_cant_mention": "Карыстальнік не зможа згадваць або сачыць за вамі.",
"block_modal.they_cant_see_posts": "Карыстальнік не будзе бачыць вашых допісаў, а вы — карыстальніка.",
"block_modal.they_cant_see_posts": "Карыстальнік не будзе бачыць Вашых допісаў, а Вы — ягоных.",
"block_modal.they_will_know": "Карыстальнік убачыць, што адбылася блакіроўка.",
"block_modal.title": "Заблакіраваць карыстальніка?",
"block_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
@ -159,7 +162,7 @@
"column.bookmarks": "Закладкі",
"column.community": "Лакальная стужка",
"column.create_list": "Стварыць спіс",
"column.direct": "Асабістыя згадванні",
"column.direct": "Прыватныя згадванні",
"column.directory": "Праглядзець профілі",
"column.domain_blocks": "Заблакіраваныя дамены",
"column.edit_list": "Рэдагаваць спіс",
@ -214,9 +217,15 @@
"confirmations.delete.message": "Вы ўпэўненыя, што хочаце выдаліць гэты допіс?",
"confirmations.delete.title": "Выдаліць допіс?",
"confirmations.delete_list.confirm": "Выдаліць",
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты спіс?",
"confirmations.delete_list.title": "Выдаліць спіс?",
"confirmations.discard_draft.confirm": "Адмовіцца і працягнуць",
"confirmations.discard_draft.edit.cancel": "Працягнуць рэдагаванне",
"confirmations.discard_draft.edit.message": "Калі працягнуць, то ўсе змены, што Вы зрабілі ў гэтым допісе, будуць адмененыя.",
"confirmations.discard_draft.edit.title": "Адмовіцца ад змен у Вашым допісе?",
"confirmations.discard_draft.post.cancel": "Працягнуць чарнавік",
"confirmations.discard_draft.post.message": "Калі працягнуць, то допіс, які Вы зараз пішаце, не будзе апублікаваны.",
"confirmations.discard_draft.post.title": "Скасаваць чарнавік?",
"confirmations.discard_edit_media.confirm": "Адмяніць",
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
"confirmations.follow_to_list.confirm": "Падпісацца і дадаць у спіс",
@ -226,6 +235,7 @@
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
"confirmations.logout.title": "Выйсці?",
"confirmations.missing_alt_text.confirm": "Дадаць альтэрнатыўны тэкст",
"confirmations.missing_alt_text.message": "У Вашым допісе ёсць медыя без альтэрнатыўнага тэксту. Дадаванне апісання дапамагае зрабіць Ваш допіс даступным для большай колькасці людзей.",
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
"confirmations.mute.confirm": "Ігнараваць",
@ -233,7 +243,11 @@
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
"confirmations.remove_from_followers.message": "Карыстальнік {name} больш не будзе падпісаны на Вас. Упэўненыя, што хочаце працягнуць?",
"confirmations.remove_from_followers.title": "Выдаліць падпісчыка?",
"confirmations.revoke_quote.confirm": "Выдаліць допіс",
"confirmations.revoke_quote.message": "Гэтае дзеянне немагчыма адмяніць.",
"confirmations.revoke_quote.title": "Выдаліць допіс?",
"confirmations.unfollow.confirm": "Адпісацца",
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
@ -247,7 +261,7 @@
"copy_icon_button.copied": "Скапіявана ў буфер абмену",
"copypaste.copied": "Скапіравана",
"copypaste.copy_to_clipboard": "Скапіяваць у буфер абмену",
"directory.federated": "З вядомага федэсвету",
"directory.federated": "З вядомага федэральнага сусвету",
"directory.local": "Толькі з {domain}",
"directory.new_arrivals": "Новыя карыстальнікі",
"directory.recently_active": "Нядаўна актыўныя",
@ -255,7 +269,7 @@
"disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
"dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
"dismissable_banner.dismiss": "Адхіліць",
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў fediverse на якіх падпісаны карыстальнікі {domain}.",
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў федэральнага сусвету, на якіх падпісаныя карыстальнікі {domain}.",
"domain_block_modal.block": "Заблакіраваць сервер",
"domain_block_modal.block_account_instead": "Заблакіраваць @{name} замест гэтага",
"domain_block_modal.they_can_interact_with_old_posts": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
@ -273,12 +287,12 @@
"domain_pill.their_username": "Унікальны ідэнтыфікатар карыстальніка на серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.",
"domain_pill.username": "Імя карыстальніка",
"domain_pill.whats_in_a_handle": "Што такое ідэнтыфікатар карыстальніка?",
"domain_pill.who_they_are": "Паколькі ідэнтыфікатары кажуць аб тым, хто гэты чалавек і якім серверам ён карыстаецца, вы можаце ўзаемадзейнічаць з карыстальнікамі <button> платформ, якія падтрымліваюць ActivityPub</button>.",
"domain_pill.who_you_are": "Паколькі ваш ідэнтыфікатар кажа аб тым, хто вы і дзе знаходзіцеся, людзі могуць узаемадзейнічаць з вамі ў сацыяльнай сетцы <button> на платформах, якія падтрымліваюць ActivityPub</button>.",
"domain_pill.who_they_are": "Паколькі ідэнтыфікатары кажуць аб тым, хто гэты чалавек і якім серверам ён карыстаецца, Вы можаце ўзаемадзейнічаць з карыстальнікамі <button> платформ, якія падтрымліваюць ActivityPub</button>.",
"domain_pill.who_you_are": "Паколькі Ваш ідэнтыфікатар кажа аб тым, хто Вы і дзе знаходзіцеся, людзі могуць узаемадзейнічаць з вамі ў сацыяльнай сетцы <button> на платформах, якія падтрымліваюць ActivityPub</button>.",
"domain_pill.your_handle": "Ваш ідэнтыфікатар:",
"domain_pill.your_server": "Ваш лічбавы дом, дзе захоўваюцца ўсе вашыя допісы. Не падабаецца гэты сервер? Змяніце сервер у любы час з захаваннем сваіх падпісчыкаў.",
"domain_pill.your_username": "Ваш унікальны ідэнтыфікатар на гэтым серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.",
"embed.instructions": "Убудуйце гэты пост на свой сайт, скапіраваўшы прыведзены ніжэй код",
"embed.instructions": "Убудуйце гэты допіс на свой сайт, скапіраваўшы прыведзены ніжэй код.",
"embed.preview": "Вось як гэта будзе выглядаць:",
"emoji_button.activity": "Актыўнасць",
"emoji_button.clear": "Ачысціць",
@ -290,36 +304,39 @@
"emoji_button.not_found": "Адпаведныя эмодзі не знойдзены",
"emoji_button.objects": "Прадметы",
"emoji_button.people": "Людзі",
"emoji_button.recent": "Чата выкарыстаныя",
"emoji_button.recent": "Часта выкарыстоўваемыя",
"emoji_button.search": "Пошук...",
"emoji_button.search_results": "Вынікі пошуку",
"emoji_button.symbols": "Сімвалы",
"emoji_button.travel": "Падарожжы і месцы",
"empty_column.account_featured.me": "Вы яшчэ нічога не паказалі. Ці ведалі Вы, што ў сваім профілі Вы можаце паказаць свае хэштэгі, якімі найбольш карыстаецеся, і нават профілі сваіх сяброў?",
"empty_column.account_featured.other": "{acct} яшчэ нічога не паказаў. Ці ведалі Вы, што ў сваім профілі Вы можаце паказаць свае хэштэгі, якімі найбольш карыстаецеся, і нават профілі сваіх сяброў?",
"empty_column.account_featured_other.unknown": "Гэты ўліковы запіс яшчэ нічога не паказаў.",
"empty_column.account_hides_collections": "Гэты карыстальнік вырашыў схаваць гэтую інфармацыю",
"empty_column.account_suspended": "Уліковы запіс прыпынены",
"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.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіску. Калі вы атрымаеце запыт, ён з’явіцца тут.",
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, Вы ўбачыце яго тут.",
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, Вы ўбачыце гэтых людзей тут.",
"empty_column.follow_requests": "У Вас яшчэ няма запытаў на падпіску. Калі Вы атрымаеце запыт, ён з’явіцца тут.",
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з’явяцца тут.",
"empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",
"empty_column.home": "Галоўная стужка пустая! Падпішыцеся на іншых людзей, каб запоўніць яе. {suggestions}",
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.",
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены спіса апублікуюць новыя запісы, яны з'явяцца тут.",
"empty_column.mutes": "Вы яшчэ нікога не ігнаруеце.",
"empty_column.notification_requests": "Чысціня! Тут нічога няма. Калі вы будзеце атрымліваць новыя апавяшчэння, яны будуць з'яўляцца тут у адпаведнасці з вашымі наладамі.",
"empty_column.notifications": "У вас няма ніякіх апавяшчэнняў. Калі іншыя людзі ўзаемадзейнічаюць з вамі, вы ўбачыце гэта тут.",
"empty_column.notification_requests": "Чысціня! Тут нічога няма. Калі Вы будзеце атрымліваць новыя апавяшчэнні, яны будуць з'яўляцца тут у адпаведнасці з Вашымі наладамі.",
"empty_column.notifications": "У Вас няма ніякіх апавяшчэнняў. Калі іншыя людзі захочуць узаемадзейнічаць з Вамі, Вы ўбачыце гэта тут.",
"empty_column.public": "Тут нічога няма! Апублікуйце што-небудзь, або падпішыцеся на карыстальнікаў з другіх сервераў",
"error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.",
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выклікана дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу",
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці натыўную праграму.",
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выкліканая дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу.",
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, Вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, Вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці асобную праграму.",
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
"explore.suggested_follows": "Людзі",
@ -327,18 +344,19 @@
"explore.trending_links": "Навіны",
"explore.trending_statuses": "Допісы",
"explore.trending_tags": "Хэштэгі",
"featured_carousel.header": "{count, plural,one {Замацаваны допіс} other {Замацаваныя допісы}}",
"featured_carousel.next": "Далей",
"featured_carousel.post": "Допіс",
"featured_carousel.previous": "Назад",
"featured_carousel.slide": "{index} з {total}",
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім вы адкрылі гэты пост. Калі вы хочаце, каб паведамленне таксама было адфільтравана ў гэтым кантэксце, вам трэба будзе адрэдагаваць фільтр",
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім Вы адкрылі гэты допіс. Калі Вы хочаце, каб паведамленне таксама было адфільтраванае ў гэтым кантэксце, Вам трэба будзе адрэдагаваць фільтр.",
"filter_modal.added.context_mismatch_title": "Неадпаведны кантэкст!",
"filter_modal.added.expired_explanation": "Тэрмін дзеяння гэтай катэгорыі фільтраў скончыўся, вам трэба будзе змяніць дату заканчэння тэрміну дзеяння, каб яна прымянялася",
"filter_modal.added.expired_title": "Пратэрмінаваны фільтр!",
"filter_modal.added.review_and_configure": "Для прагляду і наступнай канфігурацыі фільтра катэгорый, перайдзіце на {settings_link}.",
"filter_modal.added.review_and_configure_title": "Налады фільтра",
"filter_modal.added.settings_link": "старонка наладаў",
"filter_modal.added.short_explanation": "Гэты пост быў дабаўлены ў катэгорыю з наступным фільтрам: {title}.",
"filter_modal.added.short_explanation": "Гэты допіс быў дададзены ў катэгорыю з наступным фільтрам: {title}.",
"filter_modal.added.title": "Фільтр дабаўлены!",
"filter_modal.select_filter.context_mismatch": "Не мае дачынення да кантэксту ",
"filter_modal.select_filter.expired": "пратэрмінавана",
@ -348,27 +366,27 @@
"filter_modal.select_filter.title": "Фільтраваць гэты допіс",
"filter_modal.title.status": "Фільтраваць допіс",
"filter_warning.matches_filter": "Адпавядае фільтру \"<span>{title}</span>\"",
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} Вы магчыма ведаеце",
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
"firehose.all": "Усе",
"firehose.local": "Гэты сервер",
"firehose.remote": "Іншыя серверы",
"follow_request.authorize": "Аўтарызацыя",
"follow_request.reject": "Адхіліць",
"follow_requests.unlocked_explanation": "Ваш акаўнт не схаваны, аднак прадстаўнікі {domain} палічылі, што вы можаце захацець праглядзець запыты на падпіску з гэтых профіляў уручную.",
"follow_requests.unlocked_explanation": "Ваш уліковы запіс не схаваны, аднак прадстаўнікі {domain} палічылі, што Вы можаце захацець праглядзець запыты на падпіску з гэтых уліковых запісаў уручную.",
"follow_suggestions.curated_suggestion": "Выбар адміністрацыі",
"follow_suggestions.dismiss": "Не паказваць зноў",
"follow_suggestions.featured_longer": "Адабраныя камандай {domain} уручную",
"follow_suggestions.friends_of_friends_longer": "Папулярнае сярод людзей, на якіх Вы падпісаны",
"follow_suggestions.friends_of_friends_longer": "Папулярнае сярод людзей, на якіх Вы падпісаныя",
"follow_suggestions.hints.featured": "Гэты профіль быў выбраны ўручную камандай {domain}.",
"follow_suggestions.hints.friends_of_friends": "Гэты профіль папулярны сярод людзей, на якіх вы падпісаліся.",
"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.hints.similar_to_recently_followed": "Гэты профіль падобны на профілі, на якія Вы нядаўна падпісаліся.",
"follow_suggestions.personalized_suggestion": "Персаналізаваная прапанова",
"follow_suggestions.popular_suggestion": "Папулярная прапанова",
"follow_suggestions.popular_suggestion_longer": "Папулярнае на {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Падобныя профілі, за якімі вы нядаўна сачылі",
"follow_suggestions.similar_to_recently_followed_longer": "Падобныя профілі, за якімі Вы нядаўна сачылі",
"follow_suggestions.view_all": "Праглядзець усё",
"follow_suggestions.who_to_follow": "На каго падпісацца",
"followed_tags": "Падпіскі",
@ -383,6 +401,8 @@
"generic.saved": "Захавана",
"getting_started.heading": "Пачатак працы",
"hashtag.admin_moderation": "Адкрыць інтэрфейс мадэратара для #{name}",
"hashtag.browse": "Праглядзець допісы ў #{hashtag}",
"hashtag.browse_from_account": "Праглядзець допісы ад @{name} у #{hashtag}",
"hashtag.column_header.tag_mode.all": "і {additional}",
"hashtag.column_header.tag_mode.any": "або {additional}",
"hashtag.column_header.tag_mode.none": "без {additional}",
@ -395,7 +415,10 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} удзельнік} few {{counter} удзельніка} many {{counter} удзельнікаў} other {{counter} удзельніка}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}} за сёння",
"hashtag.feature": "Паказваць у профілі",
"hashtag.follow": "Падпісацца на хэштэг",
"hashtag.mute": "Ігнараваць #{hashtag}",
"hashtag.unfeature": "Не паказваць у профілі",
"hashtag.unfollow": "Адпісацца ад хэштэга",
"hashtags.and_other": "…і яшчэ {count, plural, other {#}}",
"hints.profiles.followers_may_be_missing": "Падпісчыкі гэтага профілю могуць адсутнічаць.",
@ -412,7 +435,7 @@
"home.pending_critical_update.link": "Прагледзець абнаўленні",
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
"home.show_announcements": "Паказаць аб'явы",
"ignore_notifications_modal.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
"ignore_notifications_modal.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што Вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
"ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць",
"ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў",
"ignore_notifications_modal.filter_to_avoid_confusion": "Выкарыстанне фільтраў дапамагае пазбягаць патэнцыйнай блытаніны",
@ -421,11 +444,15 @@
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць апавяшчэнні ад уліковых запісаў пад мадэрацыяй?",
"ignore_notifications_modal.new_accounts_title": "Ігнараваць апавяшчэнні ад новых уліковых запісаў?",
"ignore_notifications_modal.not_followers_title": "Ігнараваць апавяшчэнні ад людзей, якія не падпісаныя на вас?",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя асабістыя згадванні?",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей, на якіх Вы не падпісаныя?",
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя прыватныя згадванні?",
"info_button.label": "Даведка",
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца на некага са свайго ўліковага запісу.",
"info_button.what_is_alt_text": "<h1>Што такое альтэрнатыўны тэкст?</h1> <p>Альтэрнатыўны тэкст апісвае відарыс людзям з парушэннем зроку, павольным злучэннем або тым, каму патрэбны дадатковы кантэкст.</p> <p>Вы можаце зрабіць відарыс больш дасяжным і зразумелым для ўсіх, напісаўшы зразумелы, сціслы і аб'ектыўны альтэрнатыўны тэкст.</p> <ul><li>Ахоплівайце важныя элементы</li> <li>Тлумачце тэкст на відарысе</li> <li>Карыстайцеся звычайнымі сказамі</li> <li>Пазбягайце залішняй інфармацыі</li> <li>Засяроджвайцеся на тэндэнцыях і ключавых высновах у цяжкіх для разумення візуальных матэрыялах (напрыклад, дыяграмах або картах)</li></ul>",
"interaction_modal.action.favourite": "Каб працягнуць, Вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
"interaction_modal.action.follow": "Каб працягнуць, Вы мусіце падпісацца на некага са свайго ўліковага запісу.",
"interaction_modal.action.reblog": "Каб працягнуць, Вам трэба пашырыць допіс са свайго ўліковага запісу.",
"interaction_modal.action.reply": "Каб працягнуць, Вам трэба адказаць са свайго ўліковага запісу.",
"interaction_modal.action.vote": "Каб працягнуць, Вам трэба прагаласаваць са свайго ўліковага запісу.",
"interaction_modal.go": "Перайсці",
"interaction_modal.no_account_yet": "Не маеце ўліковага запісу?",
"interaction_modal.on_another_server": "На іншым серверы",
@ -434,6 +461,7 @@
"interaction_modal.title.follow": "Падпісацца на {name}",
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
"interaction_modal.title.reply": "Адказаць на допіс {name}",
"interaction_modal.title.vote": "Прагаласуйце ў апытанні {name}",
"interaction_modal.username_prompt": "Напр., {example}",
"intervals.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
"intervals.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}}",
@ -471,15 +499,17 @@
"keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя",
"keyboard_shortcuts.toot": "Стварыць новы допіс",
"keyboard_shortcuts.translate": "каб перакласці допіс",
"keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок",
"keyboard_shortcuts.unfocus": "Расфакусіраваць тэкставую вобласць/пошукавы радок",
"keyboard_shortcuts.up": "Перамясціцца ўверх па спісе",
"learn_more_link.got_it": "Зразумеў(-ла)",
"learn_more_link.learn_more": "Падрабязней",
"lightbox.close": "Закрыць",
"lightbox.next": "Далей",
"lightbox.previous": "Назад",
"lightbox.zoom_in": "Маштабаваць да фактычнага памеру",
"lightbox.zoom_out": "Дапасаваць усё змесціва пад памеры экрана",
"limited_account_hint.action": "Усе роўна паказваць профіль",
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі {domain}.",
"link_preview.author": "Ад {name}",
"link_preview.more_from_author": "Больш ад {name}",
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
@ -487,34 +517,40 @@
"lists.add_to_list": "Дадаць у спіс",
"lists.add_to_lists": "Дадаць {name} у спісы",
"lists.create": "Стварыць",
"lists.create_a_list_to_organize": "Стварыце новы спіс, каб арганізаваць сваю Галоўную старонку",
"lists.create_list": "Стварыць спіс",
"lists.delete": "Выдаліць спіс",
"lists.done": "Гатова",
"lists.edit": "Рэдагаваць спіс",
"lists.exclusive": "Схаваць карыстальнікаў на Галоўнай старонцы",
"lists.exclusive_hint": "Калі ў гэтым спісе нехта ёсць, схавайце яго на сваёй Галоўнай старонцы, каб не бачыць яго допісы двойчы.",
"lists.find_users_to_add": "Знайсці карыстальнікаў, каб дадаць",
"lists.list_members_count": "{count, plural,one {# карыстальнік}other {# карыстальнікі}}",
"lists.list_name": "Назва спіса",
"lists.new_list_name": "Назва новага спіса",
"lists.no_lists_yet": "Пакуль няма спісаў.",
"lists.no_members_yet": "Пакуль няма ўдзельнікаў.",
"lists.no_results_found": "Нічога не знойдзена.",
"lists.remove_member": "Выдаліць",
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
"lists.replies_policy.followed": "Любы карыстальнік, на якога Вы падпісаліся",
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
"lists.replies_policy.none": "Нікога",
"lists.save": "Захаваць",
"lists.search": "Пошук",
"lists.show_replies_to": "Уключыць адказы ад карыстальнікаў са спіса",
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
"loading_indicator.label": "Ідзе загрузка…",
"media_gallery.hide": "Схаваць",
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны, таму што Вы перайшлі на {movedToAccount}.",
"mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў",
"mute_modal.hide_options": "Схаваць опцыі",
"mute_modal.indefinite": "Пакуль я не прыбяру ігнараванне",
"mute_modal.show_options": "Паказаць опцыі",
"mute_modal.they_can_mention_and_follow": "Карыстальнік зможа згадваць вас і падпісацца на вас, але вы гэтага не ўбачыце.",
"mute_modal.they_can_mention_and_follow": "Карыстальнік зможа згадваць Вас і падпісацца на Вас, але Вы гэтага не ўбачыце.",
"mute_modal.they_wont_know": "Карыстальнік не будзе ведаць пра ігнараванне.",
"mute_modal.title": "Ігнараваць карыстальніка?",
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць Вашыя допісы, але Вы не будзеце бачыць ягоныя.",
"navigation_bar.about": "Пра нас",
"navigation_bar.account_settings": "Пароль і бяспека",
"navigation_bar.administration": "Адміністрацыя",
@ -522,7 +558,7 @@
"navigation_bar.automated_deletion": "Аўтаматычнае выдаленне допісаў",
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
"navigation_bar.bookmarks": "Закладкі",
"navigation_bar.direct": "Асабістыя згадванні",
"navigation_bar.direct": "Прыватныя згадванні",
"navigation_bar.domain_blocks": "Заблакіраваныя дамены",
"navigation_bar.favourites": "Упадабанае",
"navigation_bar.filters": "Ігнараваныя словы",
@ -544,6 +580,8 @@
"navigation_bar.search_trends": "Пошук / Трэндавае",
"navigation_panel.collapse_followed_tags": "Згарнуць меню падпісак на хэштэгі",
"navigation_panel.collapse_lists": "Згарнуць меню спісаў",
"navigation_panel.expand_followed_tags": "Разгарнуць меню падпісак на хэштэгі",
"navigation_panel.expand_lists": "Разгарнуць меню спіса",
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
"notification.admin.report": "{name} паскардзіўся на {target}",
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
@ -551,45 +589,58 @@
"notification.admin.report_statuses": "{name} паскардзіўся на {target} з прычыны {category}",
"notification.admin.report_statuses_other": "{name} паскардзіўся на {target}",
"notification.admin.sign_up": "{name} зарэгістраваўся",
"notification.admin.sign_up.name_and_others": "{name} і {count, plural, one {# іншы} other {# іншых}} зарэгістраваліся",
"notification.annual_report.message": "Вас чакае Ваш #Wrapstodon нумар {year}! Падзяліцеся сваімі галоўнымі падзеямі і запамінальнымі момантамі ў Mastodon!",
"notification.annual_report.view": "Перайсці да #Wrapstodon",
"notification.favourite": "Ваш допіс упадабаны {name}",
"notification.favourite": "Карыстальнік {name} упадабаў Ваш допіс",
"notification.favourite.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} other {# іншыя}}</a> ўпадабалі Ваш допіс",
"notification.favourite_pm": "Ваша асабістае згадванне ўпадабана {name}",
"notification.favourite_pm.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} few {# іншыя} many {# іншых} other {# іншых}}</a> ўпадабалі ваша асабістае згадванне",
"notification.follow": "{name} падпісаўся на вас",
"notification.follow.name_and_others": "{name} і <a>{count, plural, one {# іншы} other {# іншыя}}</a> падпісаліся на Вас",
"notification.follow_request": "{name} адправіў запыт на падпіску",
"notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас",
"notification.label.mention": "Згадванне",
"notification.label.private_mention": "Асабістае згадванне",
"notification.label.private_reply": "Асабісты адказ",
"notification.label.quote": "Карыстальнік {name} цытаваў Ваш допіс",
"notification.label.reply": "Адказ",
"notification.mention": "Згадванне",
"notification.mentioned_you": "{name} згадаў вас",
"notification.moderation-warning.learn_more": "Даведацца больш",
"notification.moderation_warning": "Вы атрымалі папярэджанне ад мадэратараў",
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
"notification.moderation_warning.action_delete_statuses": "Некаторыя Вашыя допісы былі выдаленыя.",
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
"notification.moderation_warning.action_none": "Ваш уліковы запіс атрымаў папярэджанне ад мадэратараў.",
"notification.moderation_warning.action_sensitive": "З гэтага моманту вашыя допісы будуць пазначаныя як далікатныя.",
"notification.moderation_warning.action_silence": "Ваш уліковы запіс быў абмежаваны.",
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў заблакіраваны.",
"notification.own_poll": "Ваша апытанне скончылася",
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
"notification.poll": "Апытанне, дзе Вы прынялі ўдзел, скончылася",
"notification.reblog": "{name} пашырыў ваш допіс",
"notification.reblog.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a> абагулілі ваш допіс",
"notification.reblog.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a> пашырылі ваш допіс",
"notification.relationships_severance_event": "Страціў сувязь з {name}",
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу ўліковага запісу {target}, што азначае, што Вы больш не можаце атрымліваць ад іх абнаўленні ці ўзаемадзейнічаць з імі.",
"notification.relationships_severance_event.domain_block": "Адміністратар з {from} заблакіраваў {target}, у тым ліку {followersCount} вашых падпісчыка(-аў) і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}.",
"notification.relationships_severance_event.learn_more": "Даведацца больш",
"notification.relationships_severance_event.user_domain_block": "Вы заблакіравалі {target} выдаліўшы {followersCount} сваіх падпісчыкаў і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}, за якімі вы сочыце.",
"notification.relationships_severance_event.user_domain_block": "Вы заблакіравалі {target} выдаліўшы {followersCount} сваіх падпісчыкаў і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}, за якімі Вы сочыце.",
"notification.status": "Новы допіс ад {name}",
"notification.update": "Допіс {name} адрэдагаваны",
"notification_requests.accept": "Прыняць",
"notification_requests.accept_multiple": "{count, plural,one {Прыняць # запыт…} other {Прыняць # запытаў…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural,one {Прыняць запыт} other {Прыняць запыты}}",
"notification_requests.confirm_accept_multiple.message": "Вы збіраецеся прыняць {count, plural, one {адзін запыт на апавяшчэнне} other {# запытаў на апавяшчэнне}}. Упэўненыя, што хочаце працягнуць?",
"notification_requests.confirm_accept_multiple.title": "Прыняць запыты на апавяшчэнні?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural,one {Адмовіцца ад запыту} other {Адмовіцца ад запытаў}}",
"notification_requests.confirm_dismiss_multiple.message": "Вы збіраецеся адмовіцца ад {count, plural, one {аднаго запыту на апавяшчэнне} other {# запытаў на апавяшчэнне}}. Вы не зможаце зноў лёгка атрымаць доступ да {count, plural, one {яго} other {іх}}. Упэўненыя, што хочаце працягнуць?",
"notification_requests.confirm_dismiss_multiple.title": "Адхіліць запыты на апавяшчэнні?",
"notification_requests.dismiss": "Адхіліць",
"notification_requests.dismiss_multiple": "{count, plural,one {Адмовіцца ад запыту…} other {Адмовіцца ад запытаў…}}",
"notification_requests.edit_selection": "Рэдагаваць",
"notification_requests.exit_selection": "Гатова",
"notification_requests.explainer_for_limited_account": "Апавяшчэнне з гэтага ўліковага запісу было адфільтраванае, бо гэты ўліковы запіс абмежаваў мадэратар.",
"notification_requests.explainer_for_limited_remote_account": "Апавяшчэнні з гэтага ўліковага запісу былі адфільтраваныя, бо гэты ўліковы запіс абмежаваў мадэратар.",
"notification_requests.maximize": "Разгарнуць",
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
"notification_requests.notifications_from": "Апавяшчэнні ад {name}",
@ -610,6 +661,7 @@
"notifications.column_settings.mention": "Згадванні:",
"notifications.column_settings.poll": "Вынікі апытання:",
"notifications.column_settings.push": "Push-апавяшчэнні",
"notifications.column_settings.quote": "Цытаваныя допісы:",
"notifications.column_settings.reblog": "Пашырэнні:",
"notifications.column_settings.show": "Паказваць у слупку",
"notifications.column_settings.sound": "Прайграваць гук",
@ -623,7 +675,7 @@
"notifications.filter.follows": "Падпісаны на",
"notifications.filter.mentions": "Згадванні",
"notifications.filter.polls": "Вынікі апытання",
"notifications.filter.statuses": "Навіны ад людзей, на якіх вы падпісаны",
"notifications.filter.statuses": "Навіны ад людзей, на якіх Вы падпісаныя",
"notifications.grant_permission": "Дазволіць.",
"notifications.group": "{count} Апавяшчэнняў",
"notifications.mark_as_read": "Пазначыць усе апавяшчэнні як прачытаныя",
@ -633,27 +685,30 @@
"notifications.policy.accept": "Прыняць",
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
"notifications.policy.drop": "Iгнараваць",
"notifications.policy.drop_hint": "Адправіць у бездань, адкуль больш ніколі не ўбачыце",
"notifications.policy.filter": "Фільтраваць",
"notifications.policy.filter_hint": "Адправіць у скрыню адфільтраваных апавяшчэнняў",
"notifications.policy.filter_limited_accounts_hint": "Абмежавана мадэратарамі сервера",
"notifications.policy.filter_limited_accounts_title": "Уліковыя запісы пад мадэрацыяй",
"notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}",
"notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы",
"notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
"notifications.policy.filter_not_followers_title": "Людзі, якія не падпісаны на вас",
"notifications.policy.filter_not_following_hint": "Пакуль вы не пацвердзіце іх уручную",
"notifications.policy.filter_not_following_title": "Людзі, на якіх вы не падпісаны",
"notifications.policy.filter_private_mentions_hint": "Фільтруецца за выключэннем адказу на вашае згадванне ці калі вы падпісаны на адпраўніка",
"notifications.policy.filter_private_mentions_title": "Непажаданыя асаблівыя згадванні",
"notifications.policy.filter_not_following_title": "Людзі, на якіх Вы не падпісаныя",
"notifications.policy.filter_private_mentions_hint": "Фільтруецца, за выключэннем адказу на Вашае згадванне ці калі Вы падпісаныя на адпраўніка",
"notifications.policy.filter_private_mentions_title": "Непажаданыя прыватныя згадванні",
"notifications.policy.title": "Наладзіць апавяшчэнні ад…",
"notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале",
"notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.",
"notifications_permission_banner.title": "Не прапусціце нічога",
"onboarding.follows.back": "Назад",
"onboarding.follows.done": "Гатова",
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыць спробу пазней.",
"onboarding.follows.search": "Пошук",
"onboarding.follows.title": "Падпішыцеся на некага, каб пачаць",
"onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
"onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
"onboarding.profile.discoverable_hint": "Калі Вы звяртаецеся да адкрытасці на Mastodon, Вашы допісы могуць з'яўляцца ў выніках пошуку і трэндах, а Ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
"onboarding.profile.display_name": "Бачнае імя",
"onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
"onboarding.profile.note": "Біяграфія",
@ -662,7 +717,7 @@
"onboarding.profile.title": "Налады профілю",
"onboarding.profile.upload_avatar": "Загрузіць фота профілю",
"onboarding.profile.upload_header": "Загрузіць шапку профілю",
"password_confirmation.exceeds_maxlength": "Пароль пацьверджання перавышае максімальна дапушчальную даўжыню",
"password_confirmation.exceeds_maxlength": "Пароль пацвярджэння перавышае максімальна дапушчальную даўжыню",
"password_confirmation.mismatching": "Пароль пацьверджання не супадае",
"picture_in_picture.restore": "Вярніце назад",
"poll.closed": "Закрыта",
@ -682,7 +737,7 @@
"privacy.private.short": "Падпісчыкі",
"privacy.public.long": "Усе, хто ёсць і каго няма ў Mastodon",
"privacy.public.short": "Публічны",
"privacy.unlisted.additional": "Паводзіць сябе гэтак жа, як і публічны, за выключэннем таго, што пост не будзе адлюстроўвацца ў жывой стужцы, хэштэгах, аглядзе або ў пошуку Mastodon, нават калі вы ўключылі бачнасць у пошуку ў наладах.",
"privacy.unlisted.additional": "Паводзіць сябе гэтак жа, як і публічны, за выключэннем таго, што допіс не будзе адлюстроўвацца ў жывой стужцы, хэштэгах, аглядзе або ў пошуку Mastodon, нават калі Вы ўключылі бачнасць у пошуку ў наладах.",
"privacy.unlisted.long": "Менш фанфар ад алгарытмаў",
"privacy.unlisted.short": "Ціхі публічны",
"privacy_policy.last_updated": "Адноўлена {date}",
@ -706,7 +761,7 @@
"reply_indicator.cancel": "Скасаваць",
"reply_indicator.poll": "Апытанне",
"report.block": "Заблакіраваць",
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за Вамі і бачыць Вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
"report.categories.legal": "Звязанае з правам",
"report.categories.other": "Іншае",
"report.categories.spam": "Спам",
@ -720,9 +775,9 @@
"report.forward": "Пераслаць на {target}",
"report.forward_hint": "Гэты ўліковы запіс з іншага сервера. Даслаць ананімную копію скаргі і туды?",
"report.mute": "Ігнараваць",
"report.mute_explanation": "Вы не будзеце бачыць допісы гэтага карыстальніка. Ён усё яшчэ зможа сачыць за вамі і бачыць вашы допісы, не ведаючы, што яго ігнаруюць.",
"report.mute_explanation": "Вы не будзеце бачыць допісы гэтага карыстальніка. Ён усё яшчэ зможа сачыць за Вамі і бачыць Вашы допісы, не ведаючы, што яго ігнаруюць.",
"report.next": "Далей",
"report.placeholder": "Дадатковы каментар",
"report.placeholder": "Дадатковыя каментарыі",
"report.reasons.dislike": "Мне ён не падабаецца",
"report.reasons.dislike_description": "Гэта тое, што Вы не хочаце бачыць",
"report.reasons.legal": "Гэта незаконна",
@ -739,9 +794,9 @@
"report.statuses.title": "Ці ёсць допісы, каб падмацаваць гэтую скаргу?",
"report.submit": "Адправіць",
"report.target": "Скарга на {target}",
"report.thanks.take_action": "Вось вашыя варыянты кантролю над тым, што вы бачыце в Mastodon:",
"report.thanks.take_action_actionable": "Пакуль мы разглядаем яе, вы можаце распачаць дзеянні супраць @{name}:",
"report.thanks.title": "Ці хочаце вы бачыць гэта?",
"report.thanks.take_action": "Вось Вашыя варыянты кантролю над тым, што Вы бачыце в Mastodon:",
"report.thanks.take_action_actionable": "Пакуль мы разглядаем яе, Вы можаце распачаць дзеянні супраць @{name}:",
"report.thanks.title": "Ці хочаце Вы бачыць гэта?",
"report.thanks.title_actionable": "Дзякуем за зварот, мы разбяромся з гэтым.",
"report.unfollow": "Адпісацца ад @{name}",
"report.unfollow_explanation": "Вы падпісаныя на гэты ўліковы запіс. Каб не бачыць допісы з яго ў вашай стужцы, адпішыцеся.",
@ -755,6 +810,7 @@
"report_notification.categories.violation": "Парушэнне правілаў",
"report_notification.categories.violation_sentence": "парушэнне правілаў",
"report_notification.open": "Адкрыць скаргу",
"search.clear": "Ачысціць пошук",
"search.no_recent_searches": "Гісторыя пошуку пустая",
"search.placeholder": "Пошук",
"search.quick_action.account_search": "Супадзенне профіляў {x}",
@ -782,10 +838,10 @@
"server_banner.about_active_users": "Людзі, якія карыстаюцца гэтым сервера на працягу апошніх 30 дзён (Штомесячна Актыўныя Карыстальнікі)",
"server_banner.active_users": "актыўныя карыстальнікі",
"server_banner.administered_by": "Адміністратар:",
"server_banner.is_one_of_many": "{domain} - гэта адзін з многіх незалежных сервераў Mastodon, якія вы можаце выкарыстоўваць для ўдзелу ў fediverse.",
"server_banner.is_one_of_many": "{domain} - гэта адзін з многіх незалежных сервераў Mastodon, які Вы можаце выкарыстоўваць для ўдзелу ў федэральным сусвеце.",
"server_banner.server_stats": "Статыстыка сервера:",
"sign_in_banner.create_account": "Стварыць уліковы запіс",
"sign_in_banner.follow_anyone": "Сачыце за кім заўгодна ва ўсім fediverse і глядзіце ўсё ў храналагічным парадку. Ніякіх алгарытмаў, рэкламы або клікбэйту.",
"sign_in_banner.follow_anyone": "Падпісвайцеся на каго захочаце ва ўсім федэральным сусвеце і глядзіце ўсё ў храналагічным парадку. Ніякіх алгарытмаў, рэкламы або клікбэйту.",
"sign_in_banner.mastodon_is": "Mastodon - лепшы спосаб быць у курсе ўсяго, што адбываецца.",
"sign_in_banner.sign_in": "Увайсці",
"sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя",
@ -795,7 +851,9 @@
"status.block": "Заблакаваць @{name}",
"status.bookmark": "Дадаць закладку",
"status.cancel_reblog_private": "Прыбраць",
"status.cannot_reblog": "Гэты пост нельга пашырыць",
"status.cannot_reblog": "Гэты допіс нельга пашырыць",
"status.context.load_new_replies": "Даступныя новыя адказы",
"status.context.loading": "Правяраюцца новыя адказы",
"status.continued_thread": "Працяг ланцужка",
"status.copy": "Скапіраваць спасылку на допіс",
"status.delete": "Выдаліць",
@ -807,7 +865,7 @@
"status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}",
"status.embed": "Атрымаць убудаваны код",
"status.favourite": "Упадабанае",
"status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}",
"status.favourites": "{count, plural, one {упадабанне} few {упадабанні} other {упадабанняў}}",
"status.filter": "Фільтраваць гэты допіс",
"status.history.created": "Створана {name} {date}",
"status.history.edited": "Адрэдагавана {name} {date}",
@ -821,19 +879,27 @@
"status.mute_conversation": "Ігнараваць размову",
"status.open": "Разгарнуць гэты допіс",
"status.pin": "Замацаваць у профілі",
"status.quote_error.filtered": "Схавана адным з Вашых фільтраў",
"status.quote_error.not_available": "Допіс недаступны",
"status.quote_error.pending_approval": "Допіс чакае пацвярджэння",
"status.quote_error.pending_approval_popout.body": "Допісы, якія былі цытаваныя паміж серверамі Fediverse, могуць доўга загружацца, паколькі розныя серверы маюць розныя пратаколы.",
"status.quote_error.pending_approval_popout.title": "Цытаваны допіс чакае пацвярджэння? Захоўвайце спакой",
"status.quote_post_author": "Цытаваў допіс @{name}",
"status.read_more": "Чытаць болей",
"status.reblog": "Пашырыць",
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
"status.reblogged_by": "{name} пашырыў(-ла)",
"status.reblogs": "{count, plural, one {# пашырэнне} few {# пашырэнні} many {# пашырэнняў} other {# пашырэння}}",
"status.reblogged_by": "Карыстальнік {name} пашырыў",
"status.reblogs": "{count, plural, one {пашырэнне} few {пашырэнні} many {пашырэнняў} other {пашырэння}}",
"status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.",
"status.redraft": "Выдаліць і паправіць",
"status.redraft": "Выдаліць і перапісаць",
"status.remove_bookmark": "Выдаліць закладку",
"status.remove_favourite": "Выдаліць з упадабаных",
"status.replied_in_thread": "Адказаў у ланцужку",
"status.replied_to": "Адказаў {name}",
"status.reply": "Адказаць",
"status.replyAll": "Адказаць у ланцугу",
"status.report": "Паскардзіцца на @{name}",
"status.revoke_quote": "Выдаліць мой допіс з допісу @{name}",
"status.sensitive_warning": "Уражвальны змест",
"status.share": "Абагуліць",
"status.show_less_all": "Згарнуць усё",
@ -853,7 +919,9 @@
"tabs_bar.notifications": "Апавяшчэнні",
"tabs_bar.publish": "Новы допіс",
"tabs_bar.search": "Пошук",
"terms_of_service.effective_as_of": "Дзейнічае да {date}",
"terms_of_service.title": "Умовы выкарыстання",
"terms_of_service.upcoming_changes_on": "Змены, якія адбудуцца {date}",
"time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
"time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
@ -861,7 +929,7 @@
"time_remaining.seconds": "{number, plural, one {засталася # секунда} few {засталося # секунды} many {засталося # секунд} other {засталося # секунды}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}",
"trends.trending_now": "Актуальнае",
"ui.beforeunload": "Ваш чарнавік знішчыцца калі вы пакінеце Mastodon.",
"ui.beforeunload": "Ваш чарнавік будзе страчаны, калі Вы пакінеце Mastodon.",
"units.short.billion": "{count} млрд.",
"units.short.million": "{count} міл.",
"units.short.thousand": "{count} тыс.",
@ -869,6 +937,11 @@
"upload_button.label": "Дадаць выяву, відэа- ці аўдыяфайл",
"upload_error.limit": "Перавышана колькасць файлаў.",
"upload_error.poll": "Немагчыма прымацаваць файл да апытання.",
"upload_form.drag_and_drop.instructions": "Каб абраць медыя ўлажэнне, націсніце прабел ці Enter. Падчас перасоўвання выкарыстоўвайце кнопкі са стрэлкамі, каб пасунуць медыя далучэнне ў любым напрамку. Націсніце прабел ці Enter зноў, каб перасунуць медыя далучэнне ў новае месца, або Escape для адмены.",
"upload_form.drag_and_drop.on_drag_cancel": "Перасоўванне адмененае. Медыя ўлажэнне {item} на месцы.",
"upload_form.drag_and_drop.on_drag_end": "Медыя ўлажэнне {item} на месцы.",
"upload_form.drag_and_drop.on_drag_over": "Медыя ўлажэнне {item} перасунутае.",
"upload_form.drag_and_drop.on_drag_start": "Абранае медыя ўлажэнне {item}.",
"upload_form.edit": "Рэдагаваць",
"upload_progress.label": "Запампоўванне...",
"upload_progress.processing": "Апрацоўка…",

View File

@ -899,7 +899,7 @@
"status.reply": "Besvar",
"status.replyAll": "Svar alle",
"status.report": "Anmeld @{name}",
"status.revoke_quote": "Fjern mit indlæg fra @{name}'s indlæg",
"status.revoke_quote": "Fjern eget indlæg fra @{name}s indlæg",
"status.sensitive_warning": "Følsomt indhold",
"status.share": "Del",
"status.show_less_all": "Vis mindre for alle",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "Αφαίρεση ακολούθου",
"confirmations.remove_from_followers.message": "Ο χρήστης {name} θα σταματήσει να σε ακολουθεί. Σίγουρα θες να συνεχίσεις;",
"confirmations.remove_from_followers.title": "Αφαίρεση ακολούθου;",
"confirmations.revoke_quote.confirm": "Αφαίρεση ανάρτησης",
"confirmations.revoke_quote.message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
"confirmations.revoke_quote.title": "Αφαίρεση ανάρτησης;",
"confirmations.unfollow.confirm": "Άρση ακολούθησης",
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
"confirmations.unfollow.title": "Άρση ακολούθησης;",
@ -896,6 +899,7 @@
"status.reply": "Απάντησε",
"status.replyAll": "Απάντησε στο νήμα συζήτησης",
"status.report": "Αναφορά @{name}",
"status.revoke_quote": "Αφαίρεση της ανάρτησης μου από την ανάρτηση του/της @{name}",
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
"status.share": "Κοινοποίηση",
"status.show_less_all": "Δείξε λιγότερο για όλες",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "Poista seuraaja",
"confirmations.remove_from_followers.message": "{name} lakkaa seuraamasta sinua. Haluatko varmasti jatkaa?",
"confirmations.remove_from_followers.title": "Poistetaanko seuraaja?",
"confirmations.revoke_quote.confirm": "Poista julkaisu",
"confirmations.revoke_quote.message": "Tätä toimea ei voi peruuttaa.",
"confirmations.revoke_quote.title": "Poistetaanko julkaisu?",
"confirmations.unfollow.confirm": "Lopeta seuraaminen",
"confirmations.unfollow.message": "Haluatko varmasti lopettaa profiilin {name} seuraamisen?",
"confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?",
@ -896,6 +899,7 @@
"status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun",
"status.report": "Raportoi @{name}",
"status.revoke_quote": "Poista julkaisuni käyttäjän @{name} julkaisusta",
"status.sensitive_warning": "Arkaluonteista sisältöä",
"status.share": "Jaa",
"status.show_less_all": "Näytä kaikista vähemmän",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "Bain leantóir",
"confirmations.remove_from_followers.message": "Scoirfidh {name} de bheith ag leanúint leat. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?",
"confirmations.remove_from_followers.title": "Bain an leantóir?",
"confirmations.revoke_quote.confirm": "Bain postáil",
"confirmations.revoke_quote.message": "Ní féidir an gníomh seo a chealú.",
"confirmations.revoke_quote.title": "Bain postáil?",
"confirmations.unfollow.confirm": "Ná lean",
"confirmations.unfollow.message": "An bhfuil tú cinnte gur mhaith leat {name} a dhíleanúint?",
"confirmations.unfollow.title": "Dílean an t-úsáideoir?",
@ -896,6 +899,7 @@
"status.reply": "Freagair",
"status.replyAll": "Freagair le snáithe",
"status.report": "Tuairiscigh @{name}",
"status.revoke_quote": "Bain mo phost ó phost @{name}",
"status.sensitive_warning": "Ábhar íogair",
"status.share": "Comhroinn",
"status.show_less_all": "Taispeáin níos lú d'uile",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "Követő eltávolítása",
"confirmations.remove_from_followers.message": "{name} követ téged. Biztos, hogy folytatod?",
"confirmations.remove_from_followers.title": "Követő eltávolítása?",
"confirmations.revoke_quote.confirm": "Bejegyzés eltávolítása",
"confirmations.revoke_quote.message": "Ez a művelet nem vonható vissza.",
"confirmations.revoke_quote.title": "Bejegyzés eltávolítása?",
"confirmations.unfollow.confirm": "Követés visszavonása",
"confirmations.unfollow.message": "Biztos, hogy vissza szeretnéd vonni {name} követését?",
"confirmations.unfollow.title": "Megszünteted a felhasználó követését?",
@ -896,6 +899,7 @@
"status.reply": "Válasz",
"status.replyAll": "Válasz a beszélgetésre",
"status.report": "@{name} bejelentése",
"status.revoke_quote": "Saját bejegyzés eltávolítása @{name} bejegyzéséből",
"status.sensitive_warning": "Kényes tartalom",
"status.share": "Megosztás",
"status.show_less_all": "Kevesebbet mindenhol",

View File

@ -85,9 +85,11 @@
"alt_text_modal.cancel": "Semmet",
"alt_text_modal.done": "Immed",
"announcement.announcement": "Ulɣu",
"annual_report.summary.followers.followers": "imeḍfaṛen",
"annual_report.summary.most_used_app.most_used_app": "asnas yettwasqedcen s waṭas",
"annual_report.summary.most_used_hashtag.none": "Ula yiwen",
"annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin",
"annual_report.summary.percentile.we_wont_tell_bernie": "Ur as-neqqar i yiwen.",
"annual_report.summary.thanks": "Tanemmirt imi i tettekkiḍ deg Mastodon!",
"audio.hide": "Ffer amesli",
"block_modal.show_less": "Ssken-d drus",
@ -123,6 +125,7 @@
"column.firehose": "Isuddam usriden",
"column.follow_requests": "Isuturen n teḍfeṛt",
"column.home": "Agejdan",
"column.list_members": "Sefrek iεeggalen n tebdart",
"column.lists": "Tibdarin",
"column.mutes": "Imiḍanen yettwasgugmen",
"column.notifications": "Ilɣa",
@ -160,6 +163,7 @@
"compose_form.save_changes": "Leqqem",
"compose_form.spoiler.marked": "Kkes aḍris yettwaffren deffir n walɣu",
"compose_form.spoiler.unmarked": "Rnu aḍris yettwaffren deffir n walɣu",
"compose_form.spoiler_placeholder": "Alɣu n ugbur (afrayan)",
"confirmation_modal.cancel": "Sefsex",
"confirmations.block.confirm": "Sewḥel",
"confirmations.delete.confirm": "Kkes",
@ -168,8 +172,10 @@
"confirmations.delete_list.confirm": "Kkes",
"confirmations.delete_list.message": "Tebɣiḍ s tidet ad tekkseḍ umuɣ-agi i lebda?",
"confirmations.delete_list.title": "Tukksa n tebdart?",
"confirmations.discard_draft.confirm": "Ttu-t u kemmel",
"confirmations.discard_edit_media.confirm": "Sefsex",
"confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart",
"confirmations.follow_to_list.title": "Ḍfer aseqdac?",
"confirmations.logout.confirm": "Ffeɣ",
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
"confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?",
@ -178,6 +184,8 @@
"confirmations.missing_alt_text.title": "Rnu aḍris amlellay?",
"confirmations.mute.confirm": "Sgugem",
"confirmations.redraft.confirm": "Kkes sakin ɛiwed tira",
"confirmations.remove_from_followers.confirm": "Kkes aneḍfar",
"confirmations.revoke_quote.confirm": "Kkes tasuffeɣt",
"confirmations.unfollow.confirm": "Ur ḍḍafaṛ ara",
"confirmations.unfollow.message": "Tetḥeqqeḍ belli tebɣiḍ ur teṭafaṛeḍ ara {name}?",
"content_warning.hide": "Ffer tasuffeɣt",
@ -203,7 +211,12 @@
"domain_block_modal.you_wont_see_posts": "Ur tettuɣaleḍ ara ttwaliḍ tisuffaɣ neɣ ulɣuten n iseqdacen n uqeddac-a.",
"domain_pill.activitypub_like_language": "ActivityPub am tutlayt yettmeslay Mastodon d izeḍwan inmettiyen nniḍen.",
"domain_pill.server": "Aqeddac",
"domain_pill.their_handle": "Asulay-is:",
"domain_pill.username": "Isem n useqdac",
"domain_pill.whats_in_a_handle": "D acu i yellan deg usulay?",
"domain_pill.who_they_are": "Imi isulayen qqaren-d anwa i d yiwen d wanda yella, tzemreḍ ad temyigweḍ d yemdanen deg web anmetti yebnan s <button>tɣeṛɣaṛ yemmugen s ActivityPub</button>.",
"domain_pill.who_you_are": "Imi isulay-ik·im yeqqar-d anwa i d kečč·kemmi d wanda i telliḍ, zemren medden ad myigwen yid-k·m deg web anmetti yebnan s <button>tɣeṛɣaṛ yemmugen s ActivityPub</button>.",
"domain_pill.your_handle": "Asulay-ik·im:",
"domain_pill.your_server": "D axxam-inek·inem umḍin, anda i zedɣent akk tsuffaɣ-ik·im. Ur k·m-yeεǧib ara wa? Ssenfel-d iqeddacen melmi i ak·m-yehwa, awi-d daɣen ineḍfaren-ik·im yid-k·m.",
"embed.instructions": "Ẓẓu addad-agi deg usmel-inek·inem s wenɣal n tangalt yellan sdaw-agi.",
"embed.preview": "Akka ara d-iban:",
@ -264,6 +277,7 @@
"firehose.remote": "Iqeddacen nniḍen",
"follow_request.authorize": "Ssireg",
"follow_request.reject": "Agi",
"follow_suggestions.curated_suggestion": "Yettwafren sɣur tarbaɛt",
"follow_suggestions.dismiss": "Dayen ur t-id-skan ara",
"follow_suggestions.featured_longer": "Yettwafraned s ufus sɣur agraw n {domain}",
"follow_suggestions.friends_of_friends_longer": "D aɣeṛfan ar wid i teṭṭafareḍ",
@ -301,6 +315,7 @@
"hashtag.follow": "Ḍfeṛ ahacṭag",
"hashtag.mute": "Sgugem #{hashtag}",
"hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}",
"home.column_settings.show_quotes": "Sken-d tibdarin",
"home.column_settings.show_reblogs": "Ssken-d beṭṭu",
"home.column_settings.show_replies": "Ssken-d tiririyin",
"home.hide_announcements": "Ffer ulɣuyen",
@ -354,6 +369,7 @@
"keyboard_shortcuts.toggle_hidden": "i uskan/tuffra n uḍris deffir CW",
"keyboard_shortcuts.toggle_sensitivity": "i teskent/tuffra n yimidyaten",
"keyboard_shortcuts.toot": "i wakken attebdud tajewwaqt tamaynut",
"keyboard_shortcuts.translate": "i usuqel n tsuffeɣt",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart",
"learn_more_link.got_it": "Gziɣ-t",
@ -458,6 +474,7 @@
"notifications.column_settings.mention": "Abdar:",
"notifications.column_settings.poll": "Igemmaḍ n usenqed:",
"notifications.column_settings.push": "Ilɣa yettudemmren",
"notifications.column_settings.quote": "Yebder-d:",
"notifications.column_settings.reblog": "Seǧhed:",
"notifications.column_settings.show": "Ssken-d tilɣa deg ujgu",
"notifications.column_settings.sound": "Rmed imesli",
@ -631,6 +648,7 @@
"status.mute_conversation": "Sgugem adiwenni",
"status.open": "Semɣeṛ tasuffeɣt-ayi",
"status.pin": "Senteḍ-itt deg umaɣnu",
"status.quote_post_author": "Yebder-d tasuffeɣt sɣur @{name}",
"status.read_more": "Issin ugar",
"status.reblog": "Bḍu",
"status.reblogged_by": "Yebḍa-tt {name}",
@ -650,7 +668,7 @@
"status.show_original": "Sken aɣbalu",
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"status.translate": "Suqel",
"status.translated_from_with": "Yettwasuqel seg {lang} s {provider}",
"status.translated_from_with": "Tettwasuqel seg {lang} s {provider}",
"status.uncached_media_warning": "Ulac taskant",
"status.unmute_conversation": "Kkes asgugem n udiwenni",
"status.unpin": "Kkes asenteḍ seg umaɣnu",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "팔로워 제거",
"confirmations.remove_from_followers.message": "{name} 님이 나를 팔로우하지 않게 됩니다. 계속할까요?",
"confirmations.remove_from_followers.title": "팔로워를 제거할까요?",
"confirmations.revoke_quote.confirm": "게시물 삭제",
"confirmations.revoke_quote.message": "이 작업은 되돌릴 수 없습니다.",
"confirmations.revoke_quote.title": "게시물을 지울까요?",
"confirmations.unfollow.confirm": "팔로우 해제",
"confirmations.unfollow.message": "정말로 {name} 님을 팔로우 해제하시겠습니까?",
"confirmations.unfollow.title": "사용자를 언팔로우 할까요?",
@ -498,6 +501,8 @@
"keyboard_shortcuts.translate": "게시물 번역",
"keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
"keyboard_shortcuts.up": "리스트에서 위로 이동",
"learn_more_link.got_it": "확인",
"learn_more_link.learn_more": "더 알아보기",
"lightbox.close": "닫기",
"lightbox.next": "다음",
"lightbox.previous": "이전",
@ -598,6 +603,7 @@
"notification.label.mention": "멘션",
"notification.label.private_mention": "개인 멘션",
"notification.label.private_reply": "개인 답글",
"notification.label.quote": "{name} 님이 내 게시물을 인용했습니다",
"notification.label.reply": "답글",
"notification.mention": "멘션",
"notification.mentioned_you": "{name} 님의 멘션",
@ -845,6 +851,8 @@
"status.bookmark": "북마크",
"status.cancel_reblog_private": "부스트 취소",
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
"status.context.load_new_replies": "새 답글 보기",
"status.context.loading": "추가 답글 확인중",
"status.continued_thread": "이어지는 글타래",
"status.copy": "게시물 링크 복사",
"status.delete": "삭제",
@ -871,6 +879,9 @@
"status.open": "상세 정보 표시",
"status.pin": "고정",
"status.quote_error.filtered": "필터에 의해 가려짐",
"status.quote_error.not_available": "게시물 사용 불가",
"status.quote_error.pending_approval": "게시물 대기중",
"status.quote_post_author": "인용된 @{name} 님의 게시물",
"status.read_more": "더 보기",
"status.reblog": "부스트",
"status.reblog_private": "원래의 수신자들에게 부스트",
@ -885,6 +896,7 @@
"status.reply": "답장",
"status.replyAll": "글타래에 답장",
"status.report": "@{name} 신고하기",
"status.revoke_quote": "내 게시물을 @{name}의 게시물에서 삭제",
"status.sensitive_warning": "민감한 내용",
"status.share": "공유",
"status.show_less_all": "모두 접기",

View File

@ -245,6 +245,9 @@
"confirmations.remove_from_followers.confirm": "Suá掉跟tuè lí ê",
"confirmations.remove_from_followers.message": "{name} ē停止跟tuè lí。Lí kám確定beh繼續",
"confirmations.remove_from_followers.title": "Kám beh suá掉跟tuè lí ê?",
"confirmations.revoke_quote.confirm": "Thâi掉PO文",
"confirmations.revoke_quote.message": "Tsit ê動作bē當復原。",
"confirmations.revoke_quote.title": "Kám beh thâi掉PO文",
"confirmations.unfollow.confirm": "取消跟tuè",
"confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}",
"confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?",
@ -600,6 +603,7 @@
"notification.label.mention": "提起",
"notification.label.private_mention": "私人ê提起",
"notification.label.private_reply": "私人ê回應",
"notification.label.quote": "{name} 引用lí ê PO文",
"notification.label.reply": "回應",
"notification.mention": "提起",
"notification.mentioned_you": "{name}kā lí提起",
@ -657,6 +661,7 @@
"notifications.column_settings.mention": "提起:",
"notifications.column_settings.poll": "投票ê結果:",
"notifications.column_settings.push": "Sak通知",
"notifications.column_settings.quote": "引用:",
"notifications.column_settings.reblog": "轉送:",
"notifications.column_settings.show": "佇欄內底顯示",
"notifications.column_settings.sound": "播放聲音",
@ -893,6 +898,7 @@
"status.reply": "回應",
"status.replyAll": "應討論線",
"status.report": "檢舉 @{name}",
"status.revoke_quote": "Kā 我ê PO文tuì @{name} ê thâi掉",
"status.sensitive_warning": "敏感ê內容",
"status.share": "分享",
"status.show_less_all": "Lóng收起來",

View File

@ -1,6 +1,7 @@
{
"about.blocks": "මැදිහත්කරණ සේවාදායක",
"about.contact": "සබඳතාව:",
"about.default_locale": "Default",
"about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.",
"about.domain_blocks.no_reason_available": "හේතුව ලබා ගත නොහැක.",
"about.domain_blocks.preamble": "Mastodon සාමාන්‍යයෙන් ඔබට fediverse හි වෙනත් ඕනෑම සේවාදායකයකින් අන්තර්ගතයන් බැලීමට සහ පරිශීලකයින් සමඟ අන්තර් ක්‍රියා කිරීමට ඉඩ සලසයි. මෙම විශේෂිත සේවාදායකයේ සිදු කර ඇති ව්‍යතිරේක මේවාය.",

View File

@ -1,6 +1,11 @@
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
import { changeUploadCompose } from 'mastodon/actions/compose_typed';
import {
changeUploadCompose,
quoteComposeByStatus,
quoteComposeCancel,
setQuotePolicy,
} from 'mastodon/actions/compose_typed';
import { timelineDelete } from 'mastodon/actions/timelines_typed';
import {
@ -83,6 +88,11 @@ const initialState = ImmutableMap({
resetFileKey: Math.floor((Math.random() * 0x10000)),
idempotencyKey: null,
tagHistory: ImmutableList(),
// Quotes
quoted_status_id: null,
quote_policy: 'public',
default_quote_policy: 'public', // Set in hydration.
});
const initialPoll = ImmutableMap({
@ -117,6 +127,8 @@ function clearAll(state) {
map.set('progress', 0);
map.set('poll', null);
map.set('idempotencyKey', uuid());
map.set('quoted_status_id', null);
map.set('quote_policy', state.get('default_quote_policy'));
});
}
@ -317,6 +329,15 @@ export const composeReducer = (state = initialState, action) => {
return state.set('is_changing_upload', true);
} else if (changeUploadCompose.rejected.match(action)) {
return state.set('is_changing_upload', false);
} else if (quoteComposeByStatus.match(action)) {
const status = action.payload;
if (status.getIn(['quote_approval', 'current_user']) === 'automatic') {
return state.set('quoted_status_id', status.get('id'));
}
} else if (quoteComposeCancel.match(action)) {
return state.set('quoted_status_id', null);
} else if (setQuotePolicy.match(action)) {
return state.set('quote_policy', action.payload);
}
switch(action.type) {

View File

@ -1,5 +1,12 @@
import type { GetThunkAPI } from '@reduxjs/toolkit';
import { createAsyncThunk, createSelector } from '@reduxjs/toolkit';
import type {
ActionCreatorWithPreparedPayload,
GetThunkAPI,
} from '@reduxjs/toolkit';
import {
createAsyncThunk as rtkCreateAsyncThunk,
createSelector,
createAction,
} from '@reduxjs/toolkit';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { useDispatch, useSelector } from 'react-redux';
@ -18,7 +25,7 @@ interface AppMeta {
useLoadingBar?: boolean;
}
export const createAppAsyncThunk = createAsyncThunk.withTypes<{
export const createAppAsyncThunk = rtkCreateAsyncThunk.withTypes<{
state: RootState;
dispatch: AppDispatch;
rejectValue: AsyncThunkRejectValue;
@ -43,9 +50,88 @@ interface AppThunkOptions<Arg> {
) => boolean;
}
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
// Type definitions for the sync thunks.
type AppThunk<Arg = void, Returned = void> = (
arg: Arg,
) => (dispatch: AppDispatch, getState: () => RootState) => Returned;
export function createThunk<Arg = void, Returned = void>(
type AppThunkCreator<Arg = void, Returned = void, ExtraArg = unknown> = (
arg: Arg,
api: AppThunkApi,
extra?: ExtraArg,
) => Returned;
type AppThunkActionCreator<
Arg = void,
Returned = void,
> = ActionCreatorWithPreparedPayload<
[Returned, Arg],
Returned,
string,
never,
{ arg: Arg }
>;
// Version that does not dispatch it's own action.
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
creator: AppThunkCreator<Arg, Returned, ExtraArg>,
extra?: ExtraArg,
): AppThunk<Arg, Returned>;
// Version that dispatches an named action with the result of the creator callback.
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
name: string,
creator: AppThunkCreator<Arg, Returned, ExtraArg>,
extra?: ExtraArg,
): AppThunk<Arg, Returned> & AppThunkActionCreator<Arg, Returned>;
/** Creates a thunk that dispatches an action. */
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
nameOrCreator: string | AppThunkCreator<Arg, Returned, ExtraArg>,
maybeCreatorOrExtra?: AppThunkCreator<Arg, Returned, ExtraArg> | ExtraArg,
maybeExtra?: ExtraArg,
) {
const isDispatcher = typeof nameOrCreator === 'string';
const name = isDispatcher ? nameOrCreator : undefined;
const creator = isDispatcher
? (maybeCreatorOrExtra as AppThunkCreator<Arg, Returned, ExtraArg>)
: nameOrCreator;
const extra = isDispatcher ? maybeExtra : (maybeCreatorOrExtra as ExtraArg);
let action: null | AppThunkActionCreator<Arg, Returned> = null;
// Creates a thunk that dispatches the action with the result of the creator.
const actionCreator: AppThunk<Arg, Returned> = (arg) => {
return (dispatch, getState) => {
const result = creator(arg, { dispatch, getState }, extra);
if (action) {
// Dispatches the action with the result.
const actionObj = action(result, arg);
dispatch(actionObj);
}
return result;
};
};
// No action name provided, return the thunk directly.
if (!name) {
return actionCreator;
}
// Create the action and assign the action creator to it in order
// to have things like `toString` and `match` available.
action = createAction(name, (payload: Returned, arg: Arg) => ({
payload,
meta: {
arg,
},
}));
return Object.assign({}, action, actionCreator);
}
const createBaseAsyncThunk = rtkCreateAsyncThunk.withTypes<AppThunkConfig>();
export function createAsyncThunk<Arg = void, Returned = void>(
name: string,
creator: (arg: Arg, api: AppThunkApi) => Returned | Promise<Returned>,
options: AppThunkOptions<Arg> = {},
@ -104,7 +190,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
name: string,
loadData: (args: Args) => Promise<LoadDataResult>,
thunkOptions?: AppThunkOptions<Args>,
): ReturnType<typeof createThunk<Args, LoadDataResult>>;
): ReturnType<typeof createAsyncThunk<Args, LoadDataResult>>;
// Overload when the `onData` method returns discardLoadDataInPayload, then the payload is empty
export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
@ -114,7 +200,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
| AppThunkOptions<Args>
| OnData<Args, LoadDataResult, DiscardLoadData>,
thunkOptions?: AppThunkOptions<Args>,
): ReturnType<typeof createThunk<Args, void>>;
): ReturnType<typeof createAsyncThunk<Args, void>>;
// Overload when the `onData` method returns nothing, then the mayload is the `onData` result
export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
@ -124,7 +210,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
| AppThunkOptions<Args>
| OnData<Args, LoadDataResult, void>,
thunkOptions?: AppThunkOptions<Args>,
): ReturnType<typeof createThunk<Args, LoadDataResult>>;
): ReturnType<typeof createAsyncThunk<Args, LoadDataResult>>;
// Overload when there is an `onData` method returning something
export function createDataLoadingThunk<
@ -138,7 +224,7 @@ export function createDataLoadingThunk<
| AppThunkOptions<Args>
| OnData<Args, LoadDataResult, Returned>,
thunkOptions?: AppThunkOptions<Args>,
): ReturnType<typeof createThunk<Args, Returned>>;
): ReturnType<typeof createAsyncThunk<Args, Returned>>;
/**
* This function creates a Redux Thunk that handles loading data asynchronously (usually from the API), dispatching `pending`, `fullfilled` and `rejected` actions.
@ -189,7 +275,7 @@ export function createDataLoadingThunk<
thunkOptions = maybeThunkOptions;
}
return createThunk<Args, Returned>(
return createAsyncThunk<Args, Returned>(
name,
async (arg, { getState, dispatch }) => {
const data = await loadData(arg, {

View File

@ -107,6 +107,10 @@ module User::HasSettings
settings['default_privacy'] || (account.locked? ? 'private' : 'public')
end
def setting_default_quote_policy
settings['default_quote_policy'] || 'public'
end
def allows_report_emails?
settings['notification_emails.report']
end

View File

@ -42,7 +42,7 @@ class CustomEmoji < ApplicationRecord
has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp', file_geometry_parser: FastGeometryParser } }, validate_media_type: false, processors: [:lazy_thumbnail]
normalizes :domain, with: ->(domain) { domain.downcase }
normalizes :domain, with: ->(domain) { domain.downcase.strip }
validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT }
validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: MINIMUM_SHORTCODE_SIZE }

View File

@ -35,7 +35,7 @@ class CustomEmojiFilter
when 'remote'
CustomEmoji.remote
when 'by_domain'
CustomEmoji.where(domain: value.strip.downcase)
CustomEmoji.where(domain: value)
when 'shortcode'
CustomEmoji.search(value.strip)
else

View File

@ -9,6 +9,7 @@
# capabilities :jsonb not null
# confirmed :boolean default(FALSE), not null
# contact_email :string
# delivery_last_failed_at :datetime
# fediverse_account :string
# name :string not null
# privacy_policy :jsonb
@ -22,6 +23,8 @@
class Fasp::Provider < ApplicationRecord
include DebugConcern
RETRY_INTERVAL = 1.hour
has_many :fasp_backfill_requests, inverse_of: :fasp_provider, class_name: 'Fasp::BackfillRequest', dependent: :delete_all
has_many :fasp_debug_callbacks, inverse_of: :fasp_provider, class_name: 'Fasp::DebugCallback', dependent: :delete_all
has_many :fasp_subscriptions, inverse_of: :fasp_provider, class_name: 'Fasp::Subscription', dependent: :delete_all
@ -122,6 +125,16 @@ class Fasp::Provider < ApplicationRecord
@delivery_failure_tracker ||= DeliveryFailureTracker.new(base_url, resolution: :minutes)
end
def available?
delivery_failure_tracker.available? || retry_worthwile?
end
def update_availability!
self.delivery_last_failed_at = (Time.current unless delivery_failure_tracker.available?)
save!
end
private
def create_keypair
@ -148,4 +161,8 @@ class Fasp::Provider < ApplicationRecord
Fasp::Request.new(self).delete(path)
end
end
def retry_worthwile?
delivery_last_failed_at && delivery_last_failed_at < RETRY_INTERVAL.ago
end
end

View File

@ -3,15 +3,14 @@
class ActivityPub::DeleteQuoteAuthorizationSerializer < ActivityPub::Serializer
attributes :id, :type, :actor, :to
# TODO: change the `object` to a `QuoteAuthorization` object instead of just the URI?
attribute :virtual_object, key: :object
has_one :virtual_object, key: :object, serializer: ActivityPub::QuoteAuthorizationSerializer
def id
[ActivityPub::TagManager.instance.approval_uri_for(object, check_approval: false), '#delete'].join
end
def virtual_object
ActivityPub::TagManager.instance.approval_uri_for(object, check_approval: false)
object
end
def type

View File

@ -54,6 +54,7 @@ class InitialStateSerializer < ActiveModel::Serializer
store[:default_privacy] = object.visibility || object_account_user.setting_default_privacy
store[:default_sensitive] = object_account_user.setting_default_sensitive
store[:default_language] = object_account_user.preferred_posting_language
store[:default_quote_policy] = object_account_user.setting_default_quote_policy
end
store[:text] = object.text if object.text

View File

@ -1,9 +1,7 @@
# frozen_string_literal: true
class Fasp::AccountSearchWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 0
class Fasp::AccountSearchWorker < Fasp::BaseWorker
sidekiq_options retry: 0
def perform(query)
return unless Mastodon::Feature.fasp_enabled?
@ -17,11 +15,13 @@ class Fasp::AccountSearchWorker
fetch_service = ActivityPub::FetchRemoteActorService.new
account_search_providers.each do |provider|
Fasp::Request.new(provider).get("/account_search/v0/search?#{params}").each do |uri|
next if Account.where(uri:).any?
with_provider(provider) do
Fasp::Request.new(provider).get("/account_search/v0/search?#{params}").each do |uri|
next if Account.where(uri:).any?
account = fetch_service.call(uri)
async_refresh.increment_result_count(by: 1) if account.present?
account = fetch_service.call(uri)
async_refresh.increment_result_count(by: 1) if account.present?
end
end
end
ensure

View File

@ -1,13 +1,13 @@
# frozen_string_literal: true
class Fasp::AnnounceAccountLifecycleEventWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 5
class Fasp::AnnounceAccountLifecycleEventWorker < Fasp::BaseWorker
sidekiq_options retry: 5
def perform(uri, event_type)
Fasp::Subscription.includes(:fasp_provider).category_account.lifecycle.each do |subscription|
announce(subscription, uri, event_type)
with_provider(subscription.fasp_provider) do
announce(subscription, uri, event_type)
end
end
end

View File

@ -1,13 +1,13 @@
# frozen_string_literal: true
class Fasp::AnnounceContentLifecycleEventWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 5
class Fasp::AnnounceContentLifecycleEventWorker < Fasp::BaseWorker
sidekiq_options retry: 5
def perform(uri, event_type)
Fasp::Subscription.includes(:fasp_provider).category_content.lifecycle.each do |subscription|
announce(subscription, uri, event_type)
with_provider(subscription.fasp_provider) do
announce(subscription, uri, event_type)
end
end
end

View File

@ -1,16 +1,16 @@
# frozen_string_literal: true
class Fasp::AnnounceTrendWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 5
class Fasp::AnnounceTrendWorker < Fasp::BaseWorker
sidekiq_options retry: 5
def perform(status_id, trend_source)
status = ::Status.includes(:account).find(status_id)
return unless status.account.indexable?
Fasp::Subscription.includes(:fasp_provider).category_content.trends.each do |subscription|
announce(subscription, status.uri) if trending?(subscription, status, trend_source)
with_provider(subscription.fasp_provider) do
announce(subscription, status.uri) if trending?(subscription, status, trend_source)
end
end
rescue ActiveRecord::RecordNotFound
# status might not exist anymore, in which case there is nothing to do

View File

@ -1,16 +1,16 @@
# frozen_string_literal: true
class Fasp::BackfillWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 5
class Fasp::BackfillWorker < Fasp::BaseWorker
sidekiq_options retry: 5
def perform(backfill_request_id)
backfill_request = Fasp::BackfillRequest.find(backfill_request_id)
announce(backfill_request)
with_provider(backfill_request.fasp_provider) do
announce(backfill_request)
backfill_request.advance!
backfill_request.advance!
end
rescue ActiveRecord::RecordNotFound
# ignore missing backfill requests
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class Fasp::BaseWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp'
private
def with_provider(provider)
return unless provider.available?
yield
rescue *Mastodon::HTTP_CONNECTION_ERRORS
raise if provider.available?
ensure
provider.update_availability!
end
end

View File

@ -1,9 +1,7 @@
# frozen_string_literal: true
class Fasp::FollowRecommendationWorker
include Sidekiq::Worker
sidekiq_options queue: 'fasp', retry: 0
class Fasp::FollowRecommendationWorker < Fasp::BaseWorker
sidekiq_options retry: 0
def perform(account_id)
return unless Mastodon::Feature.fasp_enabled?
@ -20,14 +18,16 @@ class Fasp::FollowRecommendationWorker
fetch_service = ActivityPub::FetchRemoteActorService.new
follow_recommendation_providers.each do |provider|
Fasp::Request.new(provider).get("/follow_recommendation/v0/accounts?#{params}").each do |uri|
next if Account.where(uri:).any?
with_provider(provider) do
Fasp::Request.new(provider).get("/follow_recommendation/v0/accounts?#{params}").each do |uri|
next if Account.where(uri:).any?
new_account = fetch_service.call(uri)
new_account = fetch_service.call(uri)
if new_account.present?
Fasp::FollowRecommendation.find_or_create_by(requesting_account: account, recommended_account: new_account)
async_refresh.increment_result_count(by: 1)
if new_account.present?
Fasp::FollowRecommendation.find_or_create_by(requesting_account: account, recommended_account: new_account)
async_refresh.increment_result_count(by: 1)
end
end
end
end

View File

@ -3,7 +3,7 @@ be:
activerecord:
attributes:
poll:
expires_at: Дэдлайн
expires_at: Скончыцца
options: Выбар
user:
agreement: Пагадненне аб абслугоўванні
@ -18,9 +18,13 @@ be:
attributes:
domain:
invalid: не з’яўляецца сапраўдным даменным імем
messages:
invalid_domain_on_line: "%{value} не пасуе для карэктнай назвы дамена"
models:
account:
attributes:
fields:
fields_with_values_missing_labels: утрымлівае значэнні без апісанняў
username:
invalid: павінна змяшчаць толькі літары, лічбы і ніжнія падкрэсліванні
reserved: зарэзервавана
@ -40,18 +44,24 @@ be:
attributes:
account_id:
taken: ужо ў спісе
must_be_following: мусіць быць карыстальнікам у вашых падпісках
must_be_following: мусіць быць карыстальнікам у Вашых падпісках
status:
attributes:
reblog:
taken: гэтага допісу ўжо існуе
terms_of_service:
attributes:
effective_date:
too_soon: занадта рана, мусіць быць пасля %{date}
user:
attributes:
date_of_birth:
below_limit: ніжэй за дазволены ўзрост
email:
blocked: выкарыстоўвае забароненую крыніцу электроннай пошты
unreachable: не існуе
role_id:
elevated: не можа быць вышэй за вашу бягучую ролю
elevated: не можа быць вышэй за Вашу бягучую ролю
user_role:
attributes:
permissions_as_keys:
@ -59,7 +69,7 @@ be:
elevated: не можа ўключыць дазволы, якімі не валодае ваша бягучая роля
own_role: не можа быць зменены з вашай бягучай роляй
position:
elevated: не можа быць вышэй за вашу бягучую ролю
elevated: не можа быць вышэй за Вашу бягучую ролю
own_role: не можа быць зменены з вашай бягучай роляй
webhook:
attributes:

View File

@ -39,6 +39,8 @@ kab:
taken: n iddaden yellan yakan
user:
attributes:
date_of_birth:
below_limit: ddaw n talast n leɛmeṛ
email:
blocked: isseqdac asaǧǧaw n yimayl ur yettusirgen ara
unreachable: ur d-ttban ara d akken yella

View File

@ -11,26 +11,49 @@ az:
accounts:
delete: Veriləri sil
destroyed_msg: "%{username} - verilərinin tezliklə silinməsi növbədədir"
display_name: Ekran adı
followers: İzləyicilər
follows: İzlənilənlər
moderation:
title: Moderasiya
moderation_notes: Moderasiya notları
most_recent_activity: Ən son fəaliyyət
most_recent_ip: Ən son IP
remote_suspension_irreversible: Bu hesabın veriləri geri qaytarılmayacaq şəkildə silinib.
remote_suspension_reversible_hint_html: Hesabın fəaliyyəti öz serverində dayandırılıb və verilər %{date} tarixində tamamilə silinəcək. O vaxta qədər, uzaq server hər hansısa mənfi təsir olmadan bu hesabı bərpa edə bilər. Hesabın bütün verilərini dərhal silmək istəyirsinizsə, bunu aşağıdan edə bilərsiniz.
resend_confirmation:
send: Təsdiq keçidini təkrar göndər
reset_password: Parolu sıfırla
security: Təhlükəsizlik
security_measures:
only_password: Yalnız parol
password_and_2fa: Parol və 2FA
suspension_irreversible: Bu hesabın veriləri geri qaytarılmayacaq şəkildə silinib. Hesabı istifadəyə yararlı etmək üçün hesab fəaliyyətinin dayandırılma prosesini ləğv edə bilərsiniz, ancaq daha əvvəl sahib olduğunuz heç bir veri geri qaytarılmayacaq.
action_logs:
action_types:
resend_user: Təsdiq poçtunu təkrar göndər
reset_password_user: Parolu sıfırla
actions:
approve_appeal_html: "%{name}, moderasiya qərarına %{target} tərəfindən verilən etirazı təsdiqlədi"
reject_appeal_html: "%{name}, moderasiya qərarına %{target} tərəfindən verilən etirazı rədd etdi"
reset_password_user_html: "%{name}, %{target} istifadəçisinin parolunu sıfırladı"
deleted_account: silinmiş hesab
dashboard:
media_storage: Media anbarı
software: Yazılım
domain_allows:
export: Xaricə köçür
domain_blocks:
export: Xaricə köçür
export_domain_blocks:
import:
title: Əngəllənən domenləri daxilə köçür
new:
title: Əngəllənən domenləri daxilə köçür
instances:
dashboard:
instance_followers_measure: oradakı izləyicilərimiz
instance_follows_measure: buradakı izləyiciləri
moderation:
title: Moderasiya
moderation_notes:
@ -61,18 +84,29 @@ az:
view_dashboard_description: İstifadəçilərin idarəetmə lövhəsinə və müxtəlif metriklərə erişməsinə icazə verir
view_devops_description: İstifadəçilərin Sidekiq və pgHero idarəetmə lövhələrinə erişməsinə icazə verir
settings:
appearance:
title: Görünüş
discovery:
public_timelines: Ümumi zaman xətləri
title: Kəşf et
registrations:
moderation_recommandation: Hər kəs üçün qeydiyyatı açmazdan əvvəl lütfən əmin olun ki, adekvat və reaktiv moderasiya komandanız var!
registrations_mode:
warning_hint: Moderasiya komandanızın spam və zərərli qeydiyyatları vaxtında idarə edə biləcəyinə əmin deyilsinizsə, “Qeydiyyat üçün təsdiq tələb olunur”dan istifadə etməyi tövsiyə edirik.
title: Server ayarları
statuses:
application: Tətbiq
metadata: Meta veri
system_checks:
elasticsearch_version_check:
message_html: 'Uyumlu olmayan Elasticsearch versiyası: %{value}'
tags:
updated_msg: Mövzu etiketi ayarları uğurla güncəlləndi
trends:
tags:
used_by_over_week:
one: Keçən həftə bir nəfər istifadə etdi
other: Keçən həftə %{count} nəfər istifadə etdi
admin_mailer:
auto_close_registrations:
body: Son vaxtlarda moderator fəaliyyətinin olmamasına görə, %{instance} üzərindəki qeydiyyatlar avtomatik olaraq manual yoxlanış tələb edəcək şəkildə dəyişdirilib, beləliklə %{instance} potensial zərərli aktyorlar tərəfindən istifadə edilən platforma çevrilməyəcək. İstənilən vaxt açıq qeydiyyat rejiminə qaytara bilərsiniz.
@ -81,23 +115,52 @@ az:
next_steps: Moderasiya qərarını geri almaq üçün etirazı təsdiqləyə, ya da etirazı yox saya bilərsiniz.
subject: "%{username}, %{instance} üzərindəki bir moderasiya qərarına etiraz edir"
appearance:
advanced_web_interface: Qabaqcıl veb interfeys
advanced_web_interface_hint: 'Tam ekran enini istifadə etmək istəyirsinizsə, qabaqcıl veb interfeys, istədiyiniz qədər məlumatı eyni anda görə bilməyiniz üçün bir çox fərqli sütunu konfiqurasiya etməyinizə imkan verir: Əsas ekran, bildirişlər, birləşmiş zaman xətti, istənilən sayda siyahı və mövzu etiketləri.'
animations_and_accessibility: Animasiyalar və erişiləbilənlik
confirmation_dialogs: Təsdiq dialoq pəncərələri
discovery: Kəşf et
localization:
guide_link_text: Hər kəs töhfə verə bilər.
sensitive_content: Həssas məzmun
applications:
created: Tətbiq uğurla yaradıldı
destroyed: Tətbiq uğurla silindi
regenerate_token: Erişim tokenini təkrar yarat
token_regenerated: Erişim tokeni uğurla yaradıldı
your_token: Erişim tokeniniz
auth:
captcha_confirmation:
help_html: CAPTCHA-nı həll etməklə bağlı probleminiz varsa, %{email} üzərindən əlaqə saxlaya bilərsiniz, sizə kömək edə bilərik.
hint_html: Sadəcə bir şey qaldı! Sizin insan olduğunuzu təsdiqləməyimiz lazımdır (bunu spam-ları əngəlləmək üçün edirik). Aşağıdakı CAPTCHA-nı həll edib "Davam et"ə klikləyin.
title: Təhlükəsizlik yoxlanışı
confirmations:
wrong_email_hint: Əgər bu e-poçt ünvanı doğru deyilsə, hesab ayarlarında onu dəyişdirə bilərsiniz.
delete_account: Hesabı sil
delete_account_html: Hesabınızı silmək istəyirsinizsə, <a href="%{path}">buradan davam edə</a> bilərsiniz. Sizdən təsdiq etməyiniz soruşulacaq.
forgot_password: Parolunuzu unutmusunuz?
invalid_reset_password_token: Parol sıfırlama tokeni yararsızdır və ya vaxtı bitib. Lütfən yenisini tələb edin.
link_to_otp: Telefonunuzdan iki faktorlu kodu və ya bir geri qaytarma kodunu daxil edin
migrate_account: Fərqli bir hesaba daşı
migrate_account_html: Bu hesabı başqa bir hesaba yönləndirmək istəyirsinizsə, <a href="%{path}">burada konfiqurasiya edə</a> bilərsiniz.
resend_confirmation: Təsdiq keçidini təkrar göndər
reset_password: Parolu sıfırla
rules:
preamble: Bunlar, %{domain} moderatorları tərəfindən təyin edilib və tətbiq edilib.
preamble_invited: Davam etməzdən əvvəl, lütfən %{domain} moderatorları tərəfindən təyin edilmiş qaydaları nəzərdən keçirin.
title: Bəzi təməl qaydalar.
set_new_password: Yeni parol təyin et
setup:
email_below_hint_html: Spam qovluğunuzu yoxlayın, ya da başqasını tələb edin. Əgər yanlışdırsa, e-poçt ünvanınızı düzəldə bilərsiniz.
email_settings_hint_html: Mastodon istifadə etməyə başlamaq üçün %{email} ünvanına göndərdiyimiz keçidə klikləyin. Biz burada gözləyirik.
link_not_received: Keçidi almamısınız?
title: Gələn qutunuzu yoxlayın
sign_up:
preamble: Bu Mastodon serveri üzərindəki hesabla, hesabın yarada yerləşməsindən asılı olmayaraq fediverse-dəki istənilən şəxsi izləyə biləcəksiniz.
title: "%{domain} üzərində qeydiyyatınızı başladaq."
status:
account_status: Hesab statusu
functional: Hesabınız tamamilə işləkdir.
self_destruct: "%{domain} bağlandığı üçün, hesabınıza yalnız məhdud erişiminiz olacaq."
challenge:
hint_html: "<strong>İpucu:</strong> Sonrakı bir saat ərzində sizdən parolu soruşmayacağıq."
@ -105,45 +168,157 @@ az:
prompt: Davam etmək üçün parolu təsdiqlə
deletes:
confirm_password: Kimliyinizi doğrulamaq üçün hazırkı parolunuzu daxil edin
proceed: Hesabı sil
success_msg: Hesabınız uğurla silindi
edit_profile:
basic_information: Təməl məlumatlar
hint_html: "<strong>İnsanların hər kəsə açıq profilinizdə və göndərişlərinizin yanında nə göstərmək istədiyinizi özəlləşdirin.</strong> Doldurulmuş bir profilə və bir profil şəklinə sahib olduğunuz zaman digər şəxslərin sizi izləmə və sizinlə əlaqə qurma ehtimalı yüksəkdir."
exports:
archive_takeout:
hint_html: "<strong>Göndərişlərinizin və yüklədiyiniz medianın</strong> bir arxivini tələb edə bilərsiniz. Xaricə köçürülmüş verilər, istənilən uyumlu yazılım tərəfindən oxuna bilən ActivityPub formatında olacaq. Hər 7 gündə bir dəfə arxiv tələb edə bilərsiniz."
domain_blocks: Domen əngəlləmələri
storage: Media anbarı
filters:
contexts:
public: Ümumi zaman xətləri
edit:
statuses_hint_html: Bu filtr, aşağıdakı açar sözləri ilə uyuşmasından asılı olmayaraq fərdi göndərişləri seçmək üçün tətbiq olunur. <a href="%{path}">Göndərişləri incələyin və ya filtrdən silin</a>.
index:
contexts: "%{contexts} üzrə filtrlər"
empty: Filtriniz yoxdur.
title: Filtrlər
generic:
all_matching_items_selected_html:
one: Axtarışınızla uyuşan <strong>%{count}</strong> element seçilib.
other: Axtarışınızla uyuşan <strong>%{count}</strong> element seçilib.
order_by: Sırala
select_all_matching_items:
one: Axtarışınızla uyuşan <0>%{count}</0> elementi seçin.
other: Axtarışınızla uyuşan <0>%{count}</0> elementi seçin.
imports:
errors:
incompatible_type: Seçilmiş daxilə köçürmə növü ilə uyumlu deyil
preface: Başqa serverdən xaricə köçürdüyünüz veriləri (məsələn, izlədiyiniz və ya əngəllədiyiniz insanların siyahısını) daxilə köçürə bilərsiniz.
type_groups:
constructive: İzlənilənlər və Əlfəcinlər
invites:
max_uses_prompt: Limitsiz
prompt: Bu serverə erişim icazəsi vermək üçün keçid yaradın və başqaları ilə paylaşın
table:
uses: İstifadə
login_activities:
authentication_methods:
otp: iki faktorlu kimlik doğrulama tətbiqi
password: parol
description_html: Əgər tanımadığınız bir fəaliyyəti görsəniz, parolunuzu dəyişdirməyi və iki faktorlu kimlik doğrulamanı fəallaşdırmağı düşünə bilərsiniz
mail_subscriptions:
unsubscribe:
emails:
notification_emails:
reblog: təkrar paylaşma bildirişi e-poçtları
migrations:
incoming_migrations: Fərqli bir hesabdan daşı
incoming_migrations_html: Başqa bir hesabdan bu hesaba daşımaq üçün əvvəlcə <a href="%{path}">bir hesab alias-ı yaratmalısınız</a>.
proceed_with_move: İzləyiciləri daşı
warning:
disabled_account: Hazırkı hesabınız daha sonra istifadəyə yararsız olacaq. Ancaq, verilərin xaricə köçürülməsinə, həmçinin təkrar aktivləşdirmə prosesinə erişə biləcəksiniz.
moderation:
title: Moderasiya
notification_mailer:
reblog:
body: "%{name} göndərişinizi təkrar paylaşdı:"
subject: "%{name} göndərişinizi təkrar paylaşdı"
title: Yeni təkrar paylaşma
notifications:
administration_emails: Admin e-poçt bildirişləri
email_events: Fəaliyyətlər üçün e-poçt bildirişləri
email_events_hint: 'Bildiriş almaq istədiyiniz fəaliyyətləri seçin:'
otp_authentication:
description_html: Bir kimlik doğrulayıcı tətbiq istifadə edərək <strong>iki addımlı kimlik doğrulamanı</strong> fəallaşdırsanız, giriş etmək üçün telefonunuzun yanınızda olması tələb olunacaq, çünki daxil olmağınız üçün kodlar yaradılacaq.
preferences:
posting_defaults: Göndəriş ilkin ayarları
public_timelines: Ümumi zaman xətləri
relationships:
activity: Hesab fəaliyyəti
confirm_follow_selected_followers: Seçilmiş izləyicləri izləmək istədiyinizə əminsiniz?
confirm_remove_selected_followers: Seçilmiş izləyiciləri çıxartmaq istədiyinizə əminsiniz?
confirm_remove_selected_follows: Seçilmiş izləmələri çıxartmaq istədiyinizə əminsiniz?
dormant: Fəaliyyətsiz
follow_failure: Seçilmiş hesablardan bəziləri izlənilə bilmədi.
follow_selected_followers: Seçilmiş izləyiciləri izlə
followers: İzləyicilər
most_recent: Ən son
mutual: Ortaq
relationship: Münasibət
remove_selected_domains: Seçilmiş domenlərin bütün izləyicilərini çıxart
remove_selected_followers: Seçilmiş izləyiciləri çıxart
remove_selected_follows: Seçilmiş istifadəçiləri izləmədən çıxart
status: Hesab statusu
sessions:
browsers:
edge: Microsoft Edge
explanation: Bunlar, hazırda Mastodon hesabınıza giriş etmiş veb brauzerlərdir.
title: Seanslar
view_authentication_history: Hesabınızın kimlik doğrulama tarixçəsinə baxın
settings:
account_settings: Hesab ayarları
appearance: Görünüş
development: Gəlişdirmə
export: Xaricə köçür
import_and_export: Daxilə və xaricə köçürmə
notifications: E-poçt bildirişləri
relationships: İzlənilənlər və izləyicilər
severed_relationships: Kəsilmiş münasibətlər
statuses_cleanup: Göndərişin avtomatik silinməsi
strikes: Moderasiya pozuntuları
two_factor_authentication: İki faktorlu kimlik doğrulama
severed_relationships:
lost_followers: İtirilən izləyicilər
preamble: Bir domeni əngəllədiyiniz zaman və ya moderatorlarınız uzaq bir serverin fəaliyyətini dayandırmağa qərar verdiyi zaman izlədiklərinizi və izləyicilərinizi itirə bilərsiniz. Bu baş verdiyi zaman, kəsilmiş münasibətlərin bir siyahısını endirə, nəzərdən keçirə və bəlkə də başqa bir serverə köçürə biləcəksiniz.
statuses:
boosted_from_html: "%{acct_link} üzərindən təkrar paylaşdı"
default_language: İnterfeys dili ilə eyni
pin_errors:
reblog: Təkrar paylaşım, sancıla bilməz
quote_policies:
followers: Yalnız izləyiciləriniz
public: Hər kəs
visibilities:
private: Yalnız izləyicilər
private_long: Yalnız izləyicilər görə bilər
public_long: Hər kəs görə bilər
unlisted_long: Hər kəs görə bilər, ancaq hər kəsə açıq zaman xətlərində sadalanmır
statuses_cleanup:
enabled: Köhnə göndərişləri avtomatik sil
enabled_hint: Aşağıdakı istisnalardan heç birinə uyuşmadığı müddətcə, göndərişləriniz qeyd edilmiş yaş həddinə çatdıqda avtomatik silinir
exceptions: İstisnalar
explanation: Göndərişlərin silinməsi bahalı əməliyyat olduğu üçün, server çox məşğul olmadığı zaman bu proses yavaş-yavaş icra edilir. Bu səbəbdən, bəzi göndərişləriniz yaş həddinə çatdıqdan bir müddət sonra silinə bilər.
ignore_reblogs: Təkrar paylaşımları yox say
interaction_exceptions: Qarşılıqlı əlaqələrə əsaslanan istisnalar
interaction_exceptions_explanation: Nəzərə alın ki, bir göndəriş sevimlilərə əlavə edilmə və ya təkrar paylaşma həddini keçdikdən sonra həmin həddin altına düşsə belə, onun silinəcəyinə zəmanət verilmir.
keep_direct: Birbaşa mesajları saxla
keep_direct_hint: Birbaşa yazdığınız mesajların heç biri silinməyəcək
keep_media: Media qoşmaları olan göndərişləri saxla
keep_media_hint: Media qoşması olan göndərişlərinizdən heç biri silinməyəcək
keep_pinned: Sancaqlanmış göndərişləri saxla
keep_pinned_hint: Sancaqlanmış göndərişlərinizdən heç biri silinməyəcək
keep_polls: Anketləri saxla
keep_polls_hint: Anketlərinizdən heç biri silinməyəcək
keep_self_bookmark: Əlfəcinlərə əlavə etdiyiniz göndərişləri saxla
keep_self_bookmark_hint: Öz göndərişlərinizi əlfəcinlərə əlavə etmisinizsə silinməyəcək
keep_self_fav: Sevimlilərə əlavə etdiyiniz göndərişləri saxla
keep_self_fav_hint: Öz göndərişlərinizi sevimlilərə əlavə etmisinizsə silinməyəcək
min_age_label: Yaş həddi
min_reblogs: Bu həddən çox təkrar paylaşılan göndərişləri saxla
min_reblogs_hint: Bu sayda və ya daha çox təkrar paylaşma alan göndərişləriniz silinməyəcək. Təkrar paylaşılma sayından asılı olmayaraq göndərişlərin silinməsi üçün boş buraxın.
stream_entries:
sensitive_content: Həssas məzmun
tags:
does_not_match_previous_name: əvvəlki adla uyuşmur
two_factor_authentication:
disabled_success: İki faktorlu kimlik doğrulama uğurla sıradan çıxarıldı
enabled: İki faktorlu kimlik doğrulama fəallaşdırıldı
enabled_success: İki faktorlu kimlik doğrulama uğurla fəallaşdırıldı
generate_recovery_codes: Geri qaytarma kodlarını yarat
lost_recovery_codes: Geri qaytarma kodları, telefonunuzu itirdiyiniz halda hesabınıza yenidən erişməyinizə imkan verir. Geri qaytarma kodlarınızı itirsəniz, onları təkrar yarada bilərsiniz. Köhnə geri qaytarma kodlarınız yararsız sayılacaq.
recovery_codes: Geri qaytarma kodlarını nüsxələ
@ -152,14 +327,21 @@ az:
user_mailer:
appeal_approved:
action: Hesab ayarları
explanation: "%{strike_date} tarixində hesabınıza qarşı tətbiq edilən cəza ilə bağlı %{appeal_date} tarixində göndərdiyiniz etirazınız təsdiqlənib. Hesabınız yenidən normal vəziyyətdədir."
subject: "%{date} tarixli etirazınız təsdiqlənib"
subtitle: Hesabınız yenidən normal vəziyyətdədir.
title: Etiraz təsdiqlənib
suspicious_sign_in:
change_password: parolu dəyişdir
subject: Hesabınıza yeni bir IP ünvanından erişildi
terms_of_service_changed:
title: Vacib güncəlləmə
warning:
explanation:
disable: Artıq hesabınızı istifadə edə bilməzsiniz, ancaq profiliniz və digər veriləriniz olduğu kimi qalacaq. Verilərinizin bir nüsxəsini tələb edə, hesab ayarlarınızı dəyişdirə və ya hesabınızı silə bilərsiniz.
suspend: Hesabınızı artıq istifadə edə bilməzsiniz, profiliniz və digər veriləriniz artıq əlçatmazdır. Təxminən 30 gün ərzində verilər tamamilə silinənə qədər verilərinizin bir nüsxəsini tələb etmək üçün hələ də hesabınıza giriş edə bilərsiniz, ancaq hesab fəaliyyətinin dayandırılması prosesini ləğv etməyinizi önləmək üçün bəzi təməl veriləri saxlayacağıq.
welcome:
edit_profile_step: Profilinizi tam dolduraraq qarşılıqlı əlaqələrinizi artırın.
feature_creativity: Mastodon özünüzü onlayn mühitdə ifadə etməyinizə kömək edəcək səs, video və şəkil göndərişləri, erişiləbilənlik açıqlamaları, anketlər, məzmun xəbərdarlıqları, animasiyalı avatarlar, özəl emojilər, kiçik şəkli kəsmə nəzarəti və daha çoxunu dəstəkləyir. Öz sənətinizi, musiqinizi və ya podkastınızı dərc edirsinizsə, Mastodon sizin üçün buradadır.
feature_moderation_title: Olmalı olduğu şəkildə moderasiya
users:

View File

@ -12,7 +12,7 @@ be:
many: Падпісчыкаў
one: Падпісчык
other: Падпісчыкі
following: Падпісаны
following: Падпіскі
instance_actor_flash: Гэты ўліковы запіс - лічбавы аватар, неабходны для рэпрэзентацыі самога сервера, а не якой-небудзь асобы. Ён выкарыстоўваецца для федэралізацыі і не можа быць замарожаны.
last_active: апошняя актыўнасць
link_verified_on: Права ўласнасці на гэтую спасылку праверана %{date}
@ -25,11 +25,12 @@ be:
one: Допіс
other: Допісы
posts_tab_heading: Допісы
self_follow_error: Нельга падпісацца на свой уліковы запіс
admin:
account_actions:
action: Выканаць дзеянне
already_silenced: Гэты ўліковы запіс ужо абмежаваны.
already_suspended: Гэты ўліковы запіс ужо прыпынены.
already_suspended: Гэты ўліковы запіс ужо прыпыніў працу.
title: Мадэраваць %{acct}
account_moderation_notes:
create: Пакінуць нататку
@ -51,6 +52,7 @@ be:
title: Змяніць адрас эл. пошты для %{username}
change_role:
changed_msg: Роля паспяхова зменена!
edit_roles: Наладзіць ролі карыстальнікаў
label: Змяніць ролю
no_role: Няма ролі
title: Змяніць ролю для %{username}
@ -89,9 +91,9 @@ be:
remote: Адлеглы
title: Месцазнаходжанне
login_status: Стан уваходу
media_attachments: Медыя далучэнні
media_attachments: Медыя ўлажэнні
memorialize: Даданае да памяці
memorialized: Запомненае
memorialized: Увекавечаны
memorialized_msg: Уліковы запіс %{username} ператвораны ў мемарыяльны
moderation:
active: Актыўны
@ -194,6 +196,7 @@ be:
create_relay: Стварыць рэтранслятар
create_unavailable_domain: Стварыць недаступны Дамен
create_user_role: Стварыць ролю
create_username_block: Стварыць правіла імя карыстальніка
demote_user: Панізіць карыстальніка
destroy_announcement: Выдаліць аб'яву
destroy_canonical_email_block: Выдаліць блакіроўку электроннай пошты
@ -207,6 +210,7 @@ be:
destroy_status: Выдаліць допіс
destroy_unavailable_domain: Выдаліць недаступны дамен
destroy_user_role: Выдаліць ролю
destroy_username_block: Выдаліць правіла імя карыстальніка
disable_2fa_user: Адключыць двухэтапнае спраўджанне
disable_custom_emoji: Адключыць адвольныя эмодзі
disable_relay: Выключыць рэтранслятар
@ -241,6 +245,7 @@ be:
update_report: Абнавіць скаргу
update_status: Абнавіць допіс
update_user_role: Абнавіць ролю
update_username_block: Абнавіць правіла імя карыстальніка
actions:
approve_appeal_html: Карыстальнік %{name} ухваліў запыт на мадэрацыю %{target}
approve_user_html: "%{name} пацвердзіў рэгістрацыю ад %{target}"
@ -259,6 +264,7 @@ be:
create_relay_html: "%{name} стварыў(-ла) рэтранслятар %{target}"
create_unavailable_domain_html: "%{name} прыпыніў дастаўку да дамена %{target}"
create_user_role_html: "%{name} зрабіў ролю %{target}"
create_username_block_html: Адміністратар %{name} дадаў правіла для імён карыстальнікаў, у якіх %{target}
demote_user_html: "%{name} прыбраў карыстальніка %{target}"
destroy_announcement_html: "%{name} выдаліў аб'яву %{target}"
destroy_canonical_email_block_html: "%{name} разблакіраваў эл. пошту з хэшам %{target}"
@ -272,6 +278,7 @@ be:
destroy_status_html: "%{name} выдаліў допіс %{target}"
destroy_unavailable_domain_html: "%{name} дазволіў працягнуць адпраўку на дамен %{target}"
destroy_user_role_html: "%{name} выдаліў ролю %{target}"
destroy_username_block_html: Адміністратар %{name} прыбраў правіла для імён карыстальнікаў, у якіх %{target}
disable_2fa_user_html: "%{name} амяніў абавязковую двухфактарную верыфікацыю для карыстальніка %{target}"
disable_custom_emoji_html: "%{name} заблакіраваў эмодзі %{target}"
disable_relay_html: "%{name} выключыў(-ла) рэтранслятар %{target}"
@ -306,6 +313,7 @@ be:
update_report_html: "%{name} абнавіў скаргу %{target}"
update_status_html: "%{name} абнавіў допіс %{target}"
update_user_role_html: "%{name} змяніў ролю %{target}"
update_username_block_html: Адміністратар %{name} змяніў правіла для імён карыстальнікаў, у якіх %{target}
deleted_account: выдалены ўліковы запіс
empty: Логі не знойдзены.
filter_by_action: Фільтраваць па дзеянню
@ -313,6 +321,7 @@ be:
title: Аўдыт
unavailable_instance: "(імя дамена недаступнае)"
announcements:
back: Вярнуцца да аб'яў
destroyed_msg: Аб’ява выдалена!
edit:
title: Рэдагаваць абвестку
@ -321,6 +330,10 @@ be:
new:
create: Стварыць аб'яву
title: Новая аб'ява
preview:
disclaimer: Паколькі карыстальнікі не могуць адмовіцца ад іх, апавяшчэнні па электроннай пошце мусяць выкарыстоўвацца толькі для важных аб'яў, накшталт уцечкі асабістых дадзеных ці зачынення сервера.
explanation_html: 'Ліст будзе дасланы на электронную пошту <strong>%{display_count} карыстальнікам</strong>. У ім будзе наступнае:'
title: Перадпрагляд аб'явы апавяшчэння
publish: Апублікаваць
published_msg: Аб'ява паспяхова апублікавана!
scheduled_for: Запланавана на %{time}
@ -432,7 +445,7 @@ be:
create: Стварыць блакіроўку
hint: Блакіроўка дамена не будзе перашкаджаць стварэнню запісаў уліковых запісаў у базе даных, але будзе заднім лікам і аўтаматычна прымяняць да гэтых уліковых запісаў пэўныя метады мадэрацыі.
severity:
desc_html: "<strong>Абмежаванне</strong> зробіць допісы людзей з гэтага дамену нябачнымі для тых, хто на іх не падпісаны. <strong>Выключэнне</strong> выдаліць усё змесціва, медыя і даныя профіляў дамену з вашага серверу. <strong>«Нічога»</strong> проста адхіліць медыя файлы."
desc_html: "<strong>Абмежаванне</strong> зробіць допісы людзей з гэтага дамену нябачнымі для тых, хто на іх не падпісаны. <strong>Выключэнне</strong> выдаліць усё змесціва, медыя і даныя ўліковых запісаў дамену з вашага серверу. <strong>«Нічога»</strong> проста адхіліць медыя файлы."
noop: Пуста
silence: Абмежаваць
suspend: Прыпыніць
@ -492,22 +505,32 @@ be:
fasp:
debug:
callbacks:
created_at: Створана
delete: Выдаліць
ip: IP-адрас
request_body: Запытаць цела
title: Зрабіць дэбаг зваротных выклікаў
providers:
active: Актыўны
base_url: Базавы URL-адрас
callback: Зваротны выклік
delete: Выдаліць
edit: Рэдагаваць пастаўшчыка
finish_registration: Завяршыць рэгістрацыю
name: Назва
providers: Пастаўшчыкі
public_key_fingerprint: Лічбавы адбітак публічнага ключа
registration_requested: Патрабуюцца рэгістрацыя
registrations:
confirm: Пацвердзіць
description: Вы запыталі рэгістрацыю ад FASP. Адмоўцеся, калі Вы не рабілі гэтага. Калі ж Вы гэта зрабілі, то ўважліва параўнайце імя і ключ перад пацвярджэннем рэгістрацыі.
reject: Адхіліць
title: Пацвердзіць рэгістрацыю ў FASP
save: Захаваць
select_capabilities: Выбраць здольнасці
sign_in: Увайсці
status: Допіс
title: Дапаможныя серверы федэральнага сусвету
title: FASP
follow_recommendations:
description_html: "<strong>Рэкамендацыі падпісак, дапамогаюць новым карыстальнікам хутка знайсці цікавы кантэнт</strong>. Калі карыстальнік недастаткова ўзаемадзейнічаў з іншымі, каб сфарміраваць персанальныя рэкамендацыі прытрымлівацца, замест гэтага рэкамендуюцца гэтыя ўліковыя запісы. Яны штодзённа пераразлічваюцца з сумесі ўліковых запісаў з самымі апошнімі ўзаемадзеяннямі і найбольшай колькасцю мясцовых падпісчыкаў для дадзенай мовы."
@ -546,7 +569,7 @@ be:
description_html: Вы можаце вызначыць палітыку кантэнту, якая будзе прымяняцца да ўсіх уліковых запісаў гэтага дамена і любога з яго субдаменаў.
limited_federation_mode_description_html: Вы можаце выбраць ці дазволіць уваходзіць у федэрацыю з гэтым даменам.
policies:
reject_media: Адхіліць мультымедыя
reject_media: Адхіліць медыя
reject_reports: Адхіліць справаздачы
silence: Ліміт
suspend: Прыпыніць
@ -559,7 +582,7 @@ be:
instance_followers_measure: нашых падпісчыкаў там
instance_follows_measure: іх падпісчыкаў тут
instance_languages_dimension: Папулярныя мовы
instance_media_attachments_measure: захаваныя медыя-далучэнні
instance_media_attachments_measure: захаваныя медыя ўлажэнні
instance_reports_measure: справаздач пра іх
instance_statuses_measure: захаваных паведамленняў
delivery:
@ -586,7 +609,9 @@ be:
moderation_notes:
create: Дадаць нататку мадэратара
created_msg: Нататка мадэратара для экзэмпляра сервера створана!
description_html: Паглядзіце і пакіньце нататкі іншым мадэратарам або сабе ў будучыні
destroyed_msg: Нататка мадэратара экзэмпляра сервера выдалена!
placeholder: Інфармацыя пра гэты выпадак, прынятыя меры ці нешта яшчэ, што дапаможа Вам разабрацца з гэтым у будучыні.
title: Нататкі мадэратараў
private_comment: Прыватны каментарый
public_comment: Публічны каментарый
@ -597,7 +622,7 @@ be:
total_followed_by_them: Іхнія падпіскі
total_followed_by_us: Нашыя падпіскі
total_reported: Скаргі на іх
total_storage: Медыя далучэнні
total_storage: Медыя ўлажэнні
totals_time_period_hint_html: Паказаныя агульныя значэнні ніжэй уключаюць даныя за ўвесь час.
unknown_instance: На дадзены момант няма запісаў аб гэтым дамене на гэтым серверы.
invites:
@ -628,7 +653,7 @@ be:
relays:
add_new: Дадаць новы рэтранслятар
delete: Выдаліць
description_html: "<strong>Федэрацыйны рэтранслятар</strong> - гэта прамежкавы сервер, які абменьваецца вялікімі аб’ёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і робяць публікацыі на ім. <strong>Гэта можа дапамагчы малым і сярэднім серверам выяўляць змесціва з fediverse</strong>, бо ў іншым выпадку лакальным карыстальнікам трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах."
description_html: "<strong>Федэрацыйны рэтранслятар</strong> - гэта прамежкавы сервер, які абменьваецца вялікімі аб’ёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і робяць публікацыі на ім. <strong>Гэта можа дапамагчы малым і сярэднім серверам выяўляць змесціва з федэральнага сусвету</strong>, бо ў іншым выпадку лакальным карыстальнікам трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах."
disable: Адключыць
disabled: Адключана
enable: Уключыць
@ -807,15 +832,21 @@ be:
description_html: Большасць сцвярджаюць, што прачыталі ўмовы абслугоўвання і згаджаюцца з імі, але звычайна людзі не чытаюць іх да канца, пакуль не ўзнікне праблема. <strong>Таму зрабіце правілы вашага сервера простымі з першага погляду, прадставіўшы іх у выглядзе маркіраванага спісу.</strong> Старайцеся рабіць правілы кароткімі і простымі, але не разбіваць іх на шмат асобных пунктаў.
edit: Рэдагаваць правіла
empty: Правілы сервера яшчэ не вызначаны.
move_down: Перасунуць уніз
move_up: Перасунуць уверх
title: Правілы сервера
translation: Пераклад
translations: Пераклады
translations_explanation: Вы можаце па жаданні дадаваць пераклады Вашых правіл. Калі перакладу няма, то пакажацца арыгінальная версія. Калі ласка, заўсёды правярайце, каб пераклад быў такім жа актуальным, як і арыгінал.
settings:
about:
manage_rules: Кіраваць правіламі сервера
preamble: Дайце падрабязную інфармацыю аб тым, як сервер працуе, мадэруецца, фінансуецца.
rules_hint: Існуе спецыяльная вобласць для правілаў, якіх вашы карыстальнікі павінны прытрымлівацца.
title: Пра нас
allow_referrer_origin:
desc: Калі Вашыя карыстальнікі націскаюць спасылкі на знешнія сайты, іх браўзер можа дасылаць адрас Вашага сервера Mastodon як крыніцу спасылкі. Адключыце гэту функцыю, калі яна ўнікальна ідэнтыфікуе Вашых карыстальнікаў (напрыклад, калі гэта персанальны сервер Mastodon).
title: Дазволіць знешнім сайтам бачыць Ваш сервер Mastodon як крыніцу трафіка
appearance:
preamble: Наладзьце вэб-інтэрфейс Mastodon.
title: Выгляд
@ -922,6 +953,8 @@ be:
system_checks:
database_schema_check:
message_html: Ёсць незавершаныя міграцыі базы даных. Запусціце іх, каб пераканацца, што праграма паводзіць сябе належным чынам
elasticsearch_analysis_index_mismatch:
message_html: Налады аналізатара індэксаў Elasticsearch пратэрмінаваныя. Калі ласка, запусціце <code>tootctl search deploy --only-mapping --only=%{value}</code>
elasticsearch_health_red:
message_html: Кластар Elasticsearch нездаровы (чырвоны статус), функцыі пошуку недаступныя
elasticsearch_health_yellow:
@ -990,9 +1023,25 @@ be:
generate: Выкарыстаць шаблон
generates:
action: Згенерыраваць
chance_to_review_html: "<strong>Аўтаматычна згенераваныя ўмовы карыстання не будуць аўтаматычна апублікаваныя.</strong> У Вас будзе магчымасць паглядзець на вынікі. Калі ласка, дайце неабходныя дэталі, каб працягнуць."
explanation_html: Узор умоў карыстання прадстаўлены выключна з інфармацыйнай мэтай і не павінен успрымацца як юрыдычная кансультацыя ні ў якім пытанні. Калі ласка, правядзіце размову з Вашым уласным юрыдычным кансультантам па Вашай сітуацыі і Вашых канкрэтных юрыдычных пытаннях.
title: Стварэнне ўмоў карыстання
going_live_on_html: Уступяць у сілу %{date}
history: Гісторыя
live: Дзейнічае
no_history: Пакуль не заўважана ніякіх змен ва ўмовах пагаднення.
no_terms_of_service_html: У Вас пакуль няма ніякіх умоў карыстання. Умовы карыстання ствараюцца для яснасці і абароны ад патэнцыяльных абавязкаў у спрэчках з Вашымі карыстальнікамі.
notified_on_html: Карыстальнікам паведамяць %{date}
notify_users: Апавясціць карыстальнікаў
preview:
explanation_html: 'Электронны ліст будзе дасланы <strong>%{display_count} карыстальнікам</strong>, якія зарэгістраваліся да %{date}. У лісце будзе наступны тэкст:'
send_preview: Адправіць на %{email} для перадпрагляду
send_to_all:
few: Адправіць %{display_count} электронныя лісты
many: Адправіць %{display_count} электронных лістоў
one: Адправіць %{display_count} электронны ліст
other: Адправіць %{display_count} электронных лістоў
title: Перадпрагляд апавяшчэння пра ўмовы карыстання
publish: Апублікаваць
published_on_html: Апублікавана %{date}
save_draft: Захаваць чарнавік
@ -1002,10 +1051,15 @@ be:
allow: Дазволіць
approved: Пацверджаны
confirm_allow: Вы ўпэўнены, што хочаце дазволіць выбраныя тэгі?
confirm_disallow: Вы ўпэўненыя, што хочаце забараніць абраныя хэштэгі?
disallow: Забараніць
links:
allow: Дазволіць спасылка
allow_provider: Дазволіць выдаўца
confirm_allow: Вы ўпэўненыя, што хочаце дазволіць абраныя спасылкі?
confirm_allow_provider: Вы ўпэўненыя, што хочаце дазволіць абраныя спасылкі?
confirm_disallow: Вы ўпэўненыя, што хочаце забараніць абраныя спасылкі?
confirm_disallow_provider: Вы ўпэўненыя, што хочаце забараніць абраныя серверы?
description_html: Гэта спасылкі, якія зараз часта распаўсюджваюцца ўліковымі запісамі, з якіх ваш сервер бачыць паведамленні. Гэта можа дапамагчы вашым карыстальнікам даведацца, што адбываецца ў свеце. Ніякія спасылкі не будуць паказвацца публічна, пакуль вы не зацвердзіце аўтара. Вы таксама можаце дазволіць або адхіліць асобныя спасылкі.
disallow: Забараніць спасылку
disallow_provider: Дазволіць выдаўца
@ -1031,6 +1085,10 @@ be:
statuses:
allow: Дазволіць допіс
allow_account: Дазволіць аўтара
confirm_allow: Вы ўпэўненыя, што хочаце дазволіць абраныя допісы?
confirm_allow_account: Вы ўпэўненыя, што хочаце дазволіць абраныя ўліковыя запісы?
confirm_disallow: Вы ўпэўненыя, што хочаце забараніць абраныя допісы?
confirm_disallow_account: Вы ўпэўненыя, што хочаце забараніць абраныя ўліковыя запісы?
description_html: Гэта допісы, пра якія ведае ваш сервер, што на дадзены момант часта абагульваюцца і падабаюцца людзям. Гэта можа дапамагчы вашым новым і пастаянным карыстальнікам знайсці больш людзей, на якіх можна падпісацца. Ніякія допісы не будуць паказвацца публічна, пакуль вы не зацвердзіце аўтара, а аўтар не дазволіць прапанаваць свой уліковы запіс іншым. Вы таксама можаце дазволіць або адхіліць асобныя допісы.
disallow: Забараніць допіс
disallow_account: Забараніць аўтара
@ -1069,6 +1127,25 @@ be:
other: Выкарысталі %{count} чалавек за апошні тыдзень
title: Рэкамендацыі і трэнды
trending: Трэндавае
username_blocks:
add_new: Дадаць новае
block_registrations: Заблакіраваць рэгістрацыю
comparison:
contains: Мае
equals: Такое ж, як
contains_html: Мае %{string}
created_msg: Правіла імя карыстальніка паспяхова створанае
delete: Выдаліць
edit:
title: Змяніць правіла імя карыстальніка
matches_exactly_html: Такое ж, як %{string}
new:
create: Стварыць правіла
title: Стварыць новае правіла імя карыстальніка
no_username_block_selected: Аніводнае з правіл імён карыстальніка не было змененае, бо аніводнае не было абранае
not_permitted: Забаронена
title: Правілы імені карыстальніка
updated_msg: Правіла імя карыстальніка паспяхова абноўленае
warning_presets:
add_new: Дадаць новы
delete: Выдаліць
@ -1227,6 +1304,7 @@ be:
set_new_password: Прызначыць новы пароль
setup:
email_below_hint_html: Праверце папку са спамам або зрабіце новы запыт. Вы можаце выправіць свой email, калі ён няправільны.
email_settings_hint_html: Націсніце на спасылку, якую мы адправілі на %{email}, каб пачаць карыстацца Mastodon. Мы пакуль пачакаем тут.
link_not_received: Не атрымалі спасылку?
new_confirmation_instructions_sent: Праз некалькі хвілін вы атрымаеце новы ліст на email са спасылкай для пацверджання!
title: Праверце вашу пошту
@ -1235,6 +1313,7 @@ be:
title: Уваход у %{domain}
sign_up:
manual_review: Рэгістрацыі на %{domain} праходзяць ручную праверку нашымі мадэратарамі. Каб дапамагчы нам апрацаваць вашу рэгістрацыю, напішыце крыху пра сябе і чаму вы хочаце мець уліковы запіс на %{domain}.
preamble: З уліковым запісам на гэтым серверы Mastodon Вы зможаце падпісацца на любога чалавека ў федэральным сусвеце, незалежна ад таго, на якім серверы знаходзіцца яго ўліковы запіс.
title: Наладзьма вас на %{domain}.
status:
account_status: Стан уліковага запісу
@ -1246,9 +1325,15 @@ be:
view_strikes: Праглядзець мінулыя папярэджанні для вашага ўліковага запісу
too_fast: Форма адпраўлена занадта хутка, паспрабуйце яшчэ раз.
use_security_key: Выкарыстаеце ключ бяспекі
user_agreement_html: Я прачытаў і згаджаюся з <a href="%{terms_of_service_path}" target="_blank">умовамі карыстання</a> і <a href="%{privacy_policy_path}" target="_blank">палітыкай прыватнасці</a>
user_privacy_agreement_html: Я прачытаў і згаджаюся з <a href="%{privacy_policy_path}" target="_blank">палітыкай прыватнасці</a>
author_attribution:
example_title: Прыклад тэксту
hint_html: Вы пішаце навіны ці артыкулы ў блогу па-за Mastodon? Кантралюйце, як пазначаецца Вашае аўтарства, калі імі дзеляцца ў Mastodon.
instructions: 'Упэўніцеся, што гэты код прысутнічае ў HTML-кодзе Вашага артыкула:'
more_from_html: Больш ад %{name}
s_blog: Блог %{name}
then_instructions: Пасля, дадайце назву сайта публікацыі ў полі знізу.
title: Пазначэнне аўтарства
challenge:
confirm: Працягнуць
@ -1464,6 +1549,68 @@ be:
merge_long: Захаваць існуючыя запісы і дадаць новыя
overwrite: Перазапісаць
overwrite_long: Замяніць бягучыя запісы на новыя
overwrite_preambles:
blocking_html:
few: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных карыстальнікаў</strong> <strong>%{count} карыстальнікамі</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных карыстальнікаў</strong> <strong>%{count} карыстальнікамі</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных карыстальнікаў</strong> <strong>%{count} карыстальнікам</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных карыстальнікаў</strong> <strong>%{count} карыстальнікамі</strong> з <strong>%{filename}</strong>.
bookmarks_html:
few: Вы збіраецеся <strong>замяніць свае закладкі</strong> <strong>%{count} допісамі</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>замяніць свае закладкі</strong> <strong>%{count} допісамі</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>замяніць свае закладкі</strong> <strong>%{count} допісам</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>замяніць свае закладкі</strong> <strong>%{count} допісамі</strong> з <strong>%{filename}</strong>.
domain_blocking_html:
few: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных даменаў</strong> <strong>%{count} даменамі</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных даменаў</strong> <strong>%{count} даменамі</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных даменаў</strong> <strong>%{count} даменам</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>замяніць свой спіс заблакіраваных даменаў</strong> <strong>%{count} дамены</strong> з <strong>%{filename}</strong>.
following_html:
few: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong> і <strong>адпішацеся ад усіх астатніх</strong>.
many: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковых запісаў</strong> з <strong>%{filename}</strong> і <strong>адпішацеся ад усіх астатніх</strong>.
one: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковы запіс</strong> з <strong>%{filename}</strong> і <strong>адпішацеся ад усіх астатніх</strong>.
other: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong> і <strong>адпішацеся ад усіх астатніх</strong>.
lists_html:
few: Вы збіраецеся <strong>замяніць свае спісы</strong> змесцівам з <strong>%{filename}</strong>. <strong>%{count} уліковыя запісы</strong> будуць дададзеныя ў новыя спісы.
many: Вы збіраецеся <strong>замяніць свае спісы</strong> змесцівам з <strong>%{filename}</strong>. <strong>%{count} уліковых запісаў</strong> будуць дададзеныя ў новыя спісы.
one: Вы збіраецеся <strong>замяніць свае спісы</strong> змесцівам з <strong>%{filename}</strong>. <strong>%{count} уліковы запіс</strong> будзе дададзены ў новыя спісы.
other: Вы збіраецеся <strong>замяніць свае спісы</strong> змесцівам з <strong>%{filename}</strong>. <strong>%{count} уліковыя запісы</strong> будуць дададзеныя ў новыя спісы.
muting_html:
few: Вы збіраецеся <strong>замяніць свой спіс уліковых запісаў, якія Вы ігнаруеце,</strong> <strong>%{count} уліковымі запісамі</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>замяніць свой спіс уліковых запісаў, якія Вы ігнаруеце,</strong> <strong>%{count} уліковымі запісамі</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>замяніць свой спіс уліковых запісаў, якія Вы ігнаруеце,</strong> <strong>%{count} уліковым запісам</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>замяніць свой спіс уліковых запісаў, якія Вы ігнаруеце,</strong> <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
preambles:
blocking_html:
few: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} уліковых запісаў</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} уліковы запіс</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
bookmarks_html:
few: Вы збіраецеся дадаць <strong>%{count} допісы</strong> з <strong>%{filename}</strong> у Вашыя <strong>закладкі</strong>.
many: Вы збіраецеся дадаць <strong>%{count} допісаў</strong> з <strong>%{filename}</strong> у Вашыя <strong>закладкі</strong>.
one: Вы збіраецеся дадаць <strong>%{count} допіс</strong> з <strong>%{filename}</strong> у Вашыя <strong>закладкі</strong>.
other: Вы збіраецеся дадаць <strong>%{count} допісаў</strong> з <strong>%{filename}</strong> у Вашыя <strong>закладкі</strong>.
domain_blocking_html:
few: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} дамены</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} даменаў</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} дамен</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>заблакіраваць</strong> <strong>%{count} дамены</strong> з <strong>%{filename}</strong>.
following_html:
few: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковых запісаў</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковы запіс</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
lists_html:
few: Вы збіраецеся дадаць <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong> у Вашыя <strong>спісы</strong>. Калі спісаў няма, то будуць створаны новыя.
many: Вы збіраецеся дадаць <strong>%{count} уліковых запісаў</strong> з <strong>%{filename}</strong> у Вашыя <strong>спісы</strong>. Калі спісаў няма, то будуць створаны новыя.
one: Вы збіраецеся дадаць <strong>%{count} уліковы запіс</strong> з <strong>%{filename}</strong> у Вашыя <strong>спісы</strong>. Калі спісаў няма, то будуць створаны новыя.
other: Вы збіраецеся дадаць <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong> у Вашыя <strong>спісы</strong>. Калі спісаў няма, то будуць створаны новыя.
muting_html:
few: Вы збіраецеся пачаць <strong>ігнараваць</strong> <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
many: Вы збіраецеся пачаць <strong>ігнараваць</strong> <strong>%{count} уліковых запісаў</strong> з <strong>%{filename}</strong>.
one: Вы збіраецеся пачаць <strong>ігнараваць</strong> <strong>%{count} уліковы запіс</strong> з <strong>%{filename}</strong>.
other: Вы збіраецеся пачаць <strong>ігнараваць</strong> <strong>%{count} уліковыя запісы</strong> з <strong>%{filename}</strong>.
preface: Вы можаце імпартаваць даныя, экспартаваныя вамі з іншага сервера, напрыклад, спіс людзей, на якіх вы падпісаны або якіх блакуеце.
recent_imports: Нядаўнія імпарты
states:
@ -1550,7 +1697,8 @@ be:
media_attachments:
validations:
images_and_video: Немагчыма далучыць відэа да допісу, які ўжо змяшчае выявы
not_ready: Няможна далучыць файлы, апрацоўка якіх яшчэ не скончылася. Паспрабуйце яшчэ раз праз хвілінку!
not_found: Файл %{ids} не знойдзены або ўжо далучаны да іншага допісу
not_ready: Немагчыма далучыць файлы, апрацоўка якіх яшчэ не скончылася. Паспрабуйце яшчэ раз праз хвілінку!
too_many: Немагчыма далучыць больш за 4 файлы
migrations:
acct: Перамешчана ў
@ -1598,7 +1746,7 @@ be:
sign_up:
subject: "%{name} зарэгістраваўся"
favourite:
body: "%{name} упадабаў ваш пост:"
body: "%{name} упадабаў(-ла) Ваш допіс:"
subject: "%{name} упадабаў ваш допіс"
title: Новае ўпадабанае
follow:
@ -1617,8 +1765,12 @@ be:
title: Новае згадванне
poll:
subject: Апытанне ад %{name} скончылася
quote:
body: 'Ваш допіс працытаваў карыстальнік %{name}:'
subject: Карыстальнік %{name} працытаваў Ваш допіс
title: Цытаваць
reblog:
body: "%{name} пашырыў ваш пост:"
body: "%{name} пашырыў(-ла) Ваш допіс:"
subject: "%{name} пашырыў ваш допіс"
title: Новае пашырэнне
status:
@ -1696,7 +1848,7 @@ be:
follow_failure: Вы не можаце падпісацца на некаторыя акаўнты.
follow_selected_followers: Падпісацца на выбраных падпісчыкаў
followers: Падпісчыкі
following: Падпісаны
following: Падпіскі
invited: Запрошаны
last_active: Апошняя актыўнасць
most_recent: Даўнасць
@ -1835,6 +1987,7 @@ be:
edited_at_html: Адрэдагавана %{date}
errors:
in_reply_not_found: Здаецца, допіс, на які вы спрабуеце адказаць, не існуе.
quoted_status_not_found: Выглядае, што допісу, які Вы спрабуеце цытаваць, не існуе.
over_character_limit: перавышаная колькасць сімвалаў у %{max}
pin_errors:
direct: Допісы, бачныя толькі згаданым карыстальнікам, нельга замацаваць
@ -1842,6 +1995,8 @@ be:
ownership: Немагчыма замацаваць чужы допіс
reblog: Немагчыма замацаваць пашырэнне
quote_policies:
followers: Толькі Вашыя падпісчыкі
nobody: Ніхто
public: Усе
title: '%{name}: "%{quote}"'
visibilities:
@ -1862,9 +2017,9 @@ be:
interaction_exceptions: Выключэнні, заснаваныя на ўзаемадзеянні
interaction_exceptions_explanation: Звярніце ўвагу, што няма гарантыі выдалення пастоў, калі колькасць іх упадабанняў ці пашырэннняў упадзе ніжэй за ліміт, хаця некалі гэтая колькасць перавышала яго.
keep_direct: Захаваць асабістыя паведамленні
keep_direct_hint: Не выдаляць асабістыя паведамленні
keep_media: Захоўваць допісы з далучаным медыя
keep_media_hint: Не выдаляць вашыя допісы, якія ўтрымліваюць медыя
keep_direct_hint: Не выдаляе асабістыя паведамленні
keep_media: Захоўваць допісы з медыя ўлажэннямі
keep_media_hint: Не выдаляць вашыя допісы, якія ўтрымліваюць медыя ўлажэнні
keep_pinned: Захаваць замацаваныя допісы
keep_pinned_hint: Не выдаляць вашыя замацаваныя допісы
keep_polls: Працягнуць апытанне
@ -1896,6 +2051,11 @@ be:
does_not_match_previous_name: не супадае з папярэднім імям
terms_of_service:
title: Умовы выкарыстання
terms_of_service_interstitial:
future_preamble_html: Мы ўносім праўкі ў нашыя ўмовы карыстання, якія пачнуць дзейнічаць <strong>%{date}</strong>. Мы раім Вам азнаёміцца з абноўленымі ўмовамі.
past_preamble_html: Пасля Вашага апошняга наведвання мы ўнеслі праўкі ў нашыя ўмовы карыстання. Мы раім Вам азнаёміцца з абноўленымі ўмовамі.
review_link: Прачытаць умовы карыстання
title: На %{domain} змяняюцца ўмовы карыстання
themes:
contrast: Mastodon (высокі кантраст)
default: Mastodon (цёмная)
@ -1927,6 +2087,10 @@ be:
recovery_instructions_html: Калі раптам вы страціце доступ да свайго тэлефона, вы можаце скарыстаць адзін з кодаў аднаўлення ніжэй каб аднавіць доступ да свайго ўліковага запісу. <strong>Захоўвайце іх у бяспечным месцы</strong>. Напрыклад, вы можаце раздрукаваць іх і захоўваць разам з іншымі важнымі дакументамі.
webauthn: Ключы бяспекі
user_mailer:
announcement_published:
description: 'Аб''ява ад адміністратараў %{domain}:'
subject: Аб'ява сэрвісу
title: Аб'ява сэрвісу %{domain}
appeal_approved:
action: Налады ўліковага запісу
explanation: Апеляцыя на папярэджанне супраць вашага ўліковага запісу ад %{strike_date}, якую вы падалі %{appeal_date}, была ўхвалена. Ваш уліковы запіс зноў на добрым рахунку.
@ -1957,7 +2121,13 @@ be:
subject: У вас уліковы запіс зайшлі з новага IP-адрасу
title: Новы ўваход
terms_of_service_changed:
agreement: Працягваючы карыстацца %{domain}, Вы пагаджаецеся з гэтымі ўмовамі. Калі Вы не згодныя з абноўленымі ўмовамі, то можаце ў любы момант адмовіцца ад пагаднення з %{domain}, выдаліўшы свой профіль.
changelog: 'Коратка пра тое, што значыць гэтае абнаўленне:'
description: 'Вы атрымалі дадзены ліст, бо мы ўносім праўкі ў нашыя ўмовы карыстання на %{domain}. Гэтыя абнаўленні ўступяць у сілу %{date}. Мы раім Вам цалкам азнаёміцца з абноўленымі ўмовамі тут:'
description_html: Вы атрымалі дадзены ліст, бо мы ўносім праўкі ў нашыя ўмовы карыстання на %{domain}. Гэтыя абнаўленні ўступяць у сілу <strong>%{date}</strong>. Мы раім Вам цалкам азнаёміцца з <a href="%{path}" target="_blank">абноўленымі ўмовамі тут</a>.
sign_off: Каманда %{domain}
subject: Абнаўленні ў нашых умовах карыстання
subtitle: Змяняюцца ўмовы карыстання на %{domain}
title: Важнае абнаўленне
warning:
appeal: Падаць апеляцыю
@ -1981,7 +2151,7 @@ be:
none: Папярэджанне для %{acct}
sensitive: З гэтага моманту вашыя допісы на %{acct} будуць пазначаныя як далікатныя
silence: Ваш уліковы запіс %{acct} быў абмежаваны
suspend: Ваш уліковы запіс %{acct} быў выключаны
suspend: Ваш уліковы запіс %{acct} быў прыпынены
title:
delete_statuses: Выдаленыя допісы
disable: Уліковы запіс замарожаны
@ -2047,6 +2217,7 @@ be:
instructions_html: Скапіруйце прыведзены ніжэй код і ўстаўце ў HTML вашага сайта. Затым дадайце адрас вашага сайта ў адно з дадатковых палёў вашага профілю на ўкладцы «рэдагаваць профіль» і захавайце змены.
verification: Верыфікацыя
verified_links: Вашыя правераныя спасылкі
website_verification: Пацвярджэнне сайта
webauthn_credentials:
add: Дадаць новы ключ бяспекі
create:

View File

@ -19,13 +19,13 @@ az:
unconfirmed: Davam etmək üçün e-poçt ünvanınızı təsdiqləməlisiniz.
mailer:
confirmation_instructions:
action: E-poçt ünvanını təsdiqlə
action: E-poçt ünvanını doğrula
action_with_app: Təsdiqlə və %{app}-a geri qayıt
explanation: Siz %{host} saytında bu e-poçt ilə hesab yaratmısınız. Onu aktivləşdirməkdən bir klik uzaqlıqdasınız. Əgər bu siz olmamısınızsa, zəhmət olmasa, bu e-məktuba məhəl qoymayın.
explanation: Bu e-poçt ünvanı ilə %{host} üzərində bir hesab yaratmısınız. Onu aktivləşdirməkdən bir klik uzaqlıqdasınız. Əgər bunu siz etməmisinizsə, lütfən e-poçtu yox sayın.
explanation_when_pending: Bu e-poçt ünvanı ilə %{host} ünvanına dəvət üçün müraciət etmisiniz. E-poçt ünvanınızı təsdiqlədikdən sonra müraciətinizi nəzərdən keçirəcəyik. Hesab məlumatlarını dəyişdirmək və ya hesabınızı silmək üçün giriş edə bilərsiniz, ancaq hesabınız təsdiqlənənə qədər əksər funksiyalara erişə bilməyəcəksiniz. Müraciətinizə rədd cavabı gəlsə, veriləriniz silinəcək, sizdən heç bir əməliyyat etməyiniz istənilməyəcək. Əgər bu siz deyilsinizsə, lütfən bu e-poçtu yox sayın.
extra_html: Həmçinin zəhmət olmasa, <a href="%{terms_path}">serverin qaydalarını</a> və <a href="%{policy_path}">istifadə şərtlərini</a> oxuyun.
subject: 'Mastodon: %{instance} üçün təsdiqlənmə təlimatları'
title: E-poçt ünvanını təsdiqlə
title: E-poçt ünvanını doğrula
email_changed:
explanation: 'Hesabınız üçün e-poçt ünvanı buna dəyişdirilir:'
extra: E-poçtunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza erişib. Hesabınıza giriş edə bilmirsinizsə, lütfən parolunuzu dərhal dəyişdirin və ya server admini ilə əlaqə saxlayın.
@ -40,7 +40,7 @@ az:
explanation: E-poçtunuzu dəyişdirmək üçün yeni ünvanı təsdiqləyin.
extra: Bu dəyişikliyi siz etməmisinizsə, lütfən bu e-poçtu yox sayın. Yuxarıdakı keçidə erişənə qədər Mastodon hesabının e-poçt ünvanı dəyişməyəcək.
subject: 'Mastodon: %{instance} üçün e-poçtu təsdiqlə'
title: E-poçt ünvanını təsdiqlə
title: E-poçt ünvanını doğrula
reset_password_instructions:
action: Parolu dəyiş
explanation: Siz hesabınız üçün yeni parol tələb etmisiniz.

View File

@ -3,20 +3,20 @@ be:
devise:
confirmations:
confirmed: Адрас вашай электроннай пошты паспяхова пацверджаны.
send_instructions: Цягам некалькіх хвілін вы атрымаеце ліст з інструкцыямі, каб пацвердзіць вашую электронную пошту. Калі ласка, зазірніце ў папку са спамам, калі не знойдзеце ліст.
send_paranoid_instructions: Калі адрас вашай электроннай пошты існуе ў нашай базе даных, на працягу некалькіх хвілін вы атрымаеце ліст з інструкцыямі, каб пацвердзіць вашу электронную пошту. Калі вы не знойдзеце ліст, праверце папку са спамам.
send_instructions: Цягам некалькіх хвілін Вы атрымаеце ліст з інструкцыямі, каб пацвердзіць вашую электронную пошту. Калі ласка, зазірніце ў папку са спамам, калі не знойдзеце ліст.
send_paranoid_instructions: Калі адрас Вашай электроннай пошты існуе ў нашай базе даных, на працягу некалькіх хвілін Вы атрымаеце ліст з інструкцыямі, каб пацвердзіць Вашу электронную пошту. Калі Вы не знойдзеце ліст, праверце папку са спамам.
failure:
already_authenticated: Вы ўжо ўвайшлі.
inactive: Ваш уліковы запіс яшчэ не актываваны.
invalid: Няправільны %{authentication_keys} або пароль.
last_attempt: У вас ёсць яшчэ адна спроба, перш чым ваш рахунак будзе заблакаваны
last_attempt: У вас ёсць яшчэ адна спроба, перш чым Ваш уліковы запіс будзе заблакіраваны.
locked: Ваш уліковы запіс заблакіраваны.
not_found_in_database: Няправільны %{authentication_keys} або пароль.
omniauth_user_creation_failure: Памылка пры стварэнні ўліковага запісу для гэтай асобы.
pending: Ваш уліковы запіс яшчэ разглядаецца.
timeout: Ваш сеанс скончыўся. Каб працягнуць, увайдзіце яшчэ раз.
unauthenticated: Каб працягнуць, вам трэба ўвайсці або зарэгістравацца.
unconfirmed: Вы павінны пацвердзіць свой адрас электроннай пошты, перш чым працягнуць
unconfirmed: Вы мусіце пацвердзіць свой адрас электроннай пошты, перш чым працягнуць.
mailer:
confirmation_instructions:
action: Пацвердзіць адрас электроннай пошты
@ -27,24 +27,24 @@ be:
subject: 'Mastodon: Інструкцыі па пацвярджэнні для %{instance}'
title: Праверце адрас электроннай пошты
email_changed:
explanation: Адрас электроннай пошты для вашага ўліковага запісу будзе зменены на
extra: Калі вы не змянялі сваю электронную пошту, хутчэй за ўсё, нехта атрымаў доступ да вашага ўліковага запісу. Неадкладна змяніце свой пароль або звярніцеся да адміністратара сервера, калі вы заблакіраваны са свайго ўліковага запісу.
explanation: 'Адрас электроннай пошты для вашага ўліковага запісу будзе зменены на:'
extra: Калі Вы не змянялі сваю электронную пошту, хутчэй за ўсё, нехта атрымаў доступ да вашага ўліковага запісу. Неадкладна змяніце свой пароль або звярніцеся да адміністратара сервера, калі Вы заблакіраваны са свайго ўліковага запісу.
subject: 'Mastodon: адрас электроннай пошты зменены'
title: Новы адрас электроннай пошты
password_change:
explanation: Пароль для вашага ўліковага запісу быў зменены
extra: Калі вы не змянялі свой пароль, імаверна, нехта атрымаў доступ да вашага ўліковага запісу. Неадкладна змяніце свой пароль або звярніцеся да адміністратара сервера, калі вы заблакіраваны са свайго ўліковага запісу.
explanation: Пароль для вашага ўліковага запісу быў зменены.
extra: Калі Вы не змянялі свой пароль, імаверна, нехта атрымаў доступ да вашага ўліковага запісу. Неадкладна змяніце свой пароль або звярніцеся да адміністратара сервера, калі Вы заблакіраваны са свайго ўліковага запісу.
subject: 'Mastodon: пароль зменены'
title: Пароль зменены
reconfirmation_instructions:
explanation: Пацвердзіце, каб змяніць адрас вашай электроннай пошты.
extra: Калі гэтыя змены не былі зроблены вамі, ігнаруйце гэты ліст. Адрас электроннай пошты для акаўнту Mastodon не будзе зменены, пакуль вы не пяройдзеце па спасылцы вышэй.
extra: Калі гэтыя змены не былі зроблены Вамі, праігнаруйце гэты ліст. Адрас электроннай пошты для ўліковага запісу Mastodon не будзе зменены, пакуль вы не пяройдзеце па спасылцы вышэй.
subject: 'Mastodon: пацвердзіце электронную пошту для %{instance}'
title: Пацвердзіце адрас электроннай пошты
reset_password_instructions:
action: Змяніць пароль
explanation: Вы запыталі новы пароль для свайго ўліковага запісу.
extra: Калі вы не рабілі такога запыту, калі ласка, ігнаруйце гэты ліст. Ваш пароль не будзе зменены, пакуль вы не пяройдзеце па спасылцы вышэй і не створыце новы.
extra: Калі Вы не рабілі такога запыту, калі ласка, праігнаруйце гэты ліст. Ваш пароль не будзе зменены, пакуль Вы не пяройдзеце па спасылцы вышэй і не створыце новы.
subject: 'Mastodon: Інструкцыі па скіданню пароля'
title: Скіданне пароля
two_factor_disabled:
@ -58,21 +58,21 @@ be:
subtitle: Для вашага ўліковага запісу была ўключаная двухфактарная аўтэнтыфікацыя.
title: двухэтапнае спраўджанне уключана
two_factor_recovery_codes_changed:
explanation: Папярэднія коды аднаўлення былі ануляваны і створаны новыя.
subject: 'Mastodon: створаны новыя коды аднаўлення'
subtitle: Папярэднія коды аднаўлення былі ануляваны і замест іх створаны новыя.
explanation: Папярэднія коды аднаўлення былі ануляваны і былі створаныя новыя.
subject: 'Mastodon: створаныя новыя коды аднаўлення'
subtitle: Папярэднія коды аднаўлення былі ануляваны і замест іх былі створаныя новыя.
title: 2FA коды аднаўлення былі зменены
unlock_instructions:
subject: 'Mastodon: інструкцыя па разблакаванні'
webauthn_credential:
added:
explanation: Наступны ключ бяспекі быў дададзены ў ваш уліковы запіс
explanation: Наступны ключ бяспекі быў дададзены ў Ваш уліковы запіс
subject: 'Mastodon: новы ключ бяспекі'
title: Быў дададзены новы ключ бяспекі
deleted:
explanation: Наступны ключ бяспекі быў выдалены з вашага ўліковага запісу
explanation: Наступны ключ бяспекі быў выдалены з Вашага ўліковага запісу
subject: 'Mastodon: ключ бяспекі выдалены'
title: Адзін з вашых ключоў бяспекі быў выдалены
title: Адзін з Вашых ключоў бяспекі быў выдалены
webauthn_disabled:
explanation: Аўтэнтыфікацыя з дапамогай ключоў бяспекі была адключаная для вашага ўліковага запісу.
extra: Зараз уваход у сістэму магчымы толькі з выкарыстаннем токена, згенераванага спалучанай праграмай TOTP.
@ -80,29 +80,29 @@ be:
title: Ключы бяспекі адключаны
webauthn_enabled:
explanation: Для вашага ўліковага запісу ўключана аўтэнтыфікацыя па ключу бяспекі.
extra: Цяпер ваш ключ бяспекі можна выкарыстоўваць для ўваходу ў сістэму.
extra: Цяпер Ваш ключ бяспекі можна выкарыстоўваць для ўваходу ў сістэму.
subject: 'Mastodon: Аўтэнтыфікацыя праз ключ бяспекі была ўключана'
title: Ключы бяспекі ўключаны
omniauth_callbacks:
failure: Немагчыма аўтэнтыфікаваць вас з %{kind}, таму што “%{reason}”.
success: Паспяховая аўтэнтыфікацыя з %{kind} уліковага запісу.
passwords:
no_token: Вы не можаце атрымаць доступ да гэтай старонкі не з ліста аднаўлення пароля. Калі вы ўсе ж такі перайшлі па спасылцы ў лісце аднаўлення пароля, упэўніцеся, што яна поўная.
send_instructions: Калі ваш электроны адрас існуе ў нашай базе даных, вы атрымаеце спасылку для аднаўлення пароля на сваю электронную пошту праз пару хвілін. Калі вы не атрымалі гэты ліст, праверце папку са спамам.
send_paranoid_instructions: Калі ваш электроны адрас існуе ў нашай базе даных, вы атрымаеце спасылку для аднаўлення пароля на сваю электронную пошту праз пару хвілін. Калі вы не атрымалі гэты ліст, праверце папку са спамам.
no_token: Вы не можаце атрымаць доступ да гэтай старонкі не з ліста аднаўлення пароля. Калі Вы ўсе ж такі перайшлі па спасылцы ў лісце аднаўлення пароля, упэўніцеся, што яна поўная.
send_instructions: Калі Ваш электроны адрас існуе ў нашай базе даных, Вы атрымаеце спасылку для аднаўлення пароля на сваю электронную пошту праз пару хвілін. Калі Вы не атрымалі гэты ліст, праверце папку са спамам.
send_paranoid_instructions: Калі Ваш электроны адрас існуе ў нашай базе даных, Вы атрымаеце спасылку для аднаўлення пароля на сваю электронную пошту праз пару хвілін. Калі Вы не атрымалі гэты ліст, праверце папку са спамам.
updated: Ваш пароль быў паспяхова зменены. Вы ўвайшлі ў сістэму.
updated_not_active: Ваш пароль быў паспяхова зменены.
registrations:
destroyed: Пакуль! Ваш уліковы запіс быў паспяхова выдалены. Мы спадзяваемся хутка ўбачыць вас зноў.
update_needs_confirmation: Вы паспяхова абнавілі свой уліковы запіс, аднак, нам неабходна пацвердзіць ваш новы адрас электроннай пошты. Праверце вашу пошту і перайдзіце па спасылцы для пацвярджэння свайго новага адраса электроннай пошты. Калі вы не атрымалі гэты ліст, праверце папку са спамам.
update_needs_confirmation: Вы паспяхова абнавілі свой уліковы запіс, аднак, нам неабходна пацвердзіць Ваш новы адрас электроннай пошты. Праверце Вашу пошту і перайдзіце па спасылцы для пацвярджэння свайго новага адраса электроннай пошты. Калі Вы не атрымалі гэты ліст, праверце папку са спамам.
updated: Ваш уліковы запіс быў паспяхова абноўлены.
sessions:
already_signed_out: Выхад паспяховы.
signed_in: Уваход паспяховы.
signed_out: Выхад паспяховы.
unlocks:
send_instructions: Вы атрымаеце ліст з інструкцыямі па разблакаванні вашага ўліковага запісу цягам некалькіх хвілін. Праверце тэчку са спамам, калі вы не атрымалі такі ліст.
send_paranoid_instructions: Калі ваш уліковы запіс існуе, вы атрымаеце ліст з інструкцыямі па яго разблакаванні цягам некалькіх хвілін. Праверце тэчку са спамам, калі вы не атрымалі такі ліст.
send_instructions: Вы атрымаеце ліст з інструкцыямі па разблакіроўцы вашага ўліковага запісу цягам некалькіх хвілін. Праверце тэчку са спамам, калі Вы не атрымалі такі ліст.
send_paranoid_instructions: Калі Ваш уліковы запіс існуе, вы атрымаеце ліст з інструкцыямі па яго разблакіроўцы цягам некалькіх хвілін. Праверце тэчку са спамам, калі Вы не атрымалі такі ліст.
unlocked: Ваш уліковы запіс быў разблакіраваны. Увайдзіце, каб працягнуць.
errors:
messages:

View File

@ -1,6 +1,12 @@
---
az:
doorkeeper:
authorized_applications:
index:
authorized_at: "%{date} tarixində səlahiyyət verilib"
description_html: Bunlar, API istifadə edərək hesabınıza erişəbilən tətbiqlərdir. Əgər burada tanımadığınız tətbiqlər və ya yanlış davranan bir tətbiq varsa, erişimini ləğv edə bilərsiniz.
last_used_at: Ən son %{date} istifadə edilib
title: Səlahiyyətli tətbiqləriniz
errors:
messages:
invalid_token:
@ -14,13 +20,23 @@ az:
write: Yalnız yazma erişimi
title:
all: Mastodon hesabınıza tam erişim
filters: Filtrlər
follow: İzləmələr, səsi kəsmələr və əngəlləmələr
follows: İzlənilənlər
scopes:
admin:read: serverdəki bütün veriləri oxuma
admin:read:domain_blocks: əngəllənən bütün domenlərin həssas məlumatlarını oxuma
admin:read:email_domain_blocks: əngəllənən bütün e-poçt domenlərinin həssas məlumatlarını oxuma
admin:write: serverdəki bütün veriləri dəyişdirmə
admin:write:accounts: hesablarda moderasiya əməliyyatlarını icra et
admin:write:canonical_email_blocks:
admin:write:domain_allows: domen icazələri üzərində moderasiya əməliyyatlarını icra et
admin:write:domain_blocks: əngəllənən domenlər üzərində moderasiya fəaliyyətlərini icra et
admin:write:email_domain_blocks: əngəllənən e-poçt domenləri üzərində moderasiya fəaliyyətlərini icra et
admin:write:ip_blocks: IP əngəlləmələri üzrə moderasiya əməliyyatlarını icra et
admin:write:reports: hesabatlarda moderasiya əməliyyatlarını icra et
read: hesabınızın bütün verilərini oxuma
read:filters: filtrlərinizə baxın
read:follows: izlədiklərinizə baxın
write: hesabınızın bütün verilərini dəyişdirmə
write:filters: filtrlər yarat

View File

@ -4,7 +4,7 @@ be:
attributes:
doorkeeper/application:
name: Назва праграмы
redirect_uri: перанакіравць URI
redirect_uri: Перанакіравць URI
scopes: Дазволы
website: Вэб-сайт праграмы
errors:
@ -12,8 +12,8 @@ be:
doorkeeper/application:
attributes:
redirect_uri:
fragment_present: не можа ўтрымліваць фрагмент
invalid_uri: URI павінен быць сапраўдным
fragment_present: не можа ўтрымліваць фрагмент.
invalid_uri: URI павінен быць сапраўдным.
relative_uri: павінен быць абсалютным URI.
secured_uri: павінен быць HTTPS/SSL URI.
doorkeeper:
@ -60,6 +60,7 @@ be:
error:
title: Узнікла памылка
new:
prompt_html: "%{client_name} хоча атрымаць дазвол на доступ да Вашага ўліковага запісу. <strong>Ухваляйце гэты запыт толькі калі Вы ведаеце гэту крыніцу і давяраеце ёй.</strong>"
review_permissions: Прагледзець дазволы
title: Патрабуецца аўтарызацыя
show:
@ -71,7 +72,7 @@ be:
revoke: Вы ўпэўнены?
index:
authorized_at: Аўтарызавана %{date}
description_html: Гэта прыкладанні якія могуць мець доступ да вашага акаунта з дапамогай API. Калі вы бачыце тут прыкладанні, якія вы не пазнаеце, або прыкладанне блага сябе паводзіць вы можаце прыбраць ягонны доступ.
description_html: Гэта прыкладанні якія могуць мець доступ да вашага ўліковага запісу з дапамогай API. Калі вы бачыце тут прыкладанні, якія вы не пазнаеце, або прыкладанне блага сябе паводзіць вы можаце прыбраць ягоны доступ.
last_used_at: Апошні раз скарыстана %{date}
never_used: Не выкарыстоўвалася
scopes: Дазволы
@ -119,10 +120,10 @@ be:
write: Доступ толькі для запісу
title:
accounts: Уліковыя запісы
admin/accounts: Кіраванне акаўнтамі
admin/accounts: Кіраванне ўліковымі запісамі
admin/all: Усе кіравальныя функцыі
admin/reports: Кіраванне скардамі
all: Поўны доступ да акаўнта Mastodon
all: Поўны доступ да ўліковага запісу Mastodon
blocks: Блакаванні
bookmarks: Закладкі
conversations: Размовы
@ -149,15 +150,15 @@ be:
title: Патрабуецца аўтарызацыя OAuth
scopes:
admin:read: чытаць усе даныя на серверы
admin:read:accounts: чытаць канфідэнцыйную інфармацыю ўсіх акаўнтаў
admin:read:accounts: чытаць канфідэнцыяльную інфармацыю ўсіх уліковых запісаў
admin:read:canonical_email_blocks: чытаць канфідэнцыйную інфармацыю ўсіх кананічных блокаў электроннай пошты
admin:read:domain_allows: чытаць канфідэнцыйную інфармацыю ўсіх дазволеных даменаў
admin:read:domain_blocks: чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў
admin:read:email_domain_blocks: чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў эл. пошты
admin:read:ip_blocks: чытаць канфідэнцыяльную інфармацыю ўсіх блакіраваных IP
admin:read:reports: чытаць канфідэнцыйную інфармацыю ўсіх справаздач і справаздачных уліковых запісаў
admin:read:reports: чытаць канфідэнцыяльную інфармацыю ўсіх скаргаў і абскарджаных уліковых запісаў
admin:write: змяняць усе даныя на серверы
admin:write:accounts: выконваць дзеянні па мадэрацыі акаўнтаў
admin:write:accounts: выконваць дзеянні па мадэрацыі ўліковых запісаў
admin:write:canonical_email_blocks: выконваць дзеянні па мадэрацыі кананічных блокаў электроннай пошты
admin:write:domain_allows: дазваляе праводзіць мадэрацыю ў дамене
admin:write:domain_blocks: мадэраваць блакіраваныя дамены
@ -188,7 +189,7 @@ be:
write:conversations: ігнараваць і выдаляць размовы
write:favourites: упадабаныя допісы
write:filters: ствараць фільтры
write:follows: Сачыць за людзьмі
write:follows: сачыць за людзьмі
write:lists: ствараць спiсы
write:media: запампоўваць медыяфайлы
write:mutes: ігнараваць людзей і размовы

View File

@ -19,7 +19,7 @@ fi:
following: Sinun täytyy seurata käyttäjää, jota haluat tukea
posts:
one: Julkaisu
other: viestiä
other: Julkaisua
posts_tab_heading: Julkaisut
self_follow_error: Oman tilisi seuraaminen ei ole sallittua
admin:
@ -507,12 +507,14 @@ fi:
registration_requested: Rekisteröintiä pyydetty
registrations:
confirm: Vahvista
description: Sait rekisteröinnin FASP:lta. Hylkää se, jos et aloittanut sitä. Jos aloitat tämän, vertaile huolellisesti nimeä ja sormenjälkeä ennen rekisteröinnin vahvistamista.
reject: Hylkää
title: Vahvista FASP-rekisteröinti
save: Tallenna
select_capabilities: Valitse kyvykkyydet
sign_in: Kirjaudu sisään
status: Tila
title: Fediversumin Tukitoimintojen Tarjoajat
title: FASP
follow_recommendations:
description_html: "<strong>Seurantasuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä</strong>. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä."

View File

@ -567,6 +567,7 @@ kab:
accept: Qbel
back: Tuɣalin
invited_by: 'Tzemreḍ ad tkecmeḍ ɣer %{domain} s tanemmirt i tinnubga i d-teṭṭfeḍ sɣur :'
preamble: Tiyi ttwasemmant-d yerna ttwaḍemnent sɣur imḍebbren n %{domain}.
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ḍ.
@ -578,6 +579,7 @@ kab:
preamble_html: Kcem ar <strong>%{domain}</strong> 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 yellan deg uqeddac-a n Mastodon, ad tizimreḍ ad t-ḍefreḍ yal yiwen nniḍen i yellan deg fediverse, akken yebɣu yili wanda i yella umiḍan-nsen.
title: Iyya ad d-nessewjed tiɣawsiwin i %{domain}.
status:
account_status: Addad n umiḍan
@ -744,6 +746,8 @@ kab:
action: Err
body: 'Yuder-ik·ikem-id %{name} deg:'
subject: Yuder-ik·ikem-id %{name}
quote:
title: Tabdert tamaynut
reblog:
subject: "%{name} yesselha addad-ik·im"
title: Azuzer amaynut

View File

@ -187,6 +187,7 @@ ko:
create_relay: 릴레이 생성
create_unavailable_domain: 사용 불가능한 도메인 생성
create_user_role: 역할 생성
create_username_block: 새 사용자명 규칙 만들기
demote_user: 사용자 강등
destroy_announcement: 공지사항 삭제
destroy_canonical_email_block: 이메일 차단 삭제
@ -200,6 +201,7 @@ ko:
destroy_status: 게시물 삭제
destroy_unavailable_domain: 사용 불가능한 도메인 제거
destroy_user_role: 역할 삭제
destroy_username_block: 사용자명 규칙 삭제
disable_2fa_user: 2단계 인증 비활성화
disable_custom_emoji: 커스텀 에모지 비활성화
disable_relay: 릴레이 비활성화
@ -234,6 +236,7 @@ ko:
update_report: 신고 업데이트
update_status: 게시물 수정
update_user_role: 역할 수정
update_username_block: 사용자명 규칙 업데이트
actions:
approve_appeal_html: "%{name} 님이 %{target}의 중재 결정에 대한 이의 제기를 승인했습니다"
approve_user_html: "%{name} 님이 %{target} 님의 가입을 승인했습니다"
@ -252,6 +255,7 @@ ko:
create_relay_html: "%{name} 님이 릴레이 %{target}를 생성했습니다"
create_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 중지했습니다"
create_user_role_html: "%{name} 님이 %{target} 역할을 생성했습니다"
create_username_block_html: "%{name} 님이 %{target}를 포함하는 사용자명에 대한 규칙을 생성했습니다"
demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다"
destroy_announcement_html: "%{name} 님이 공지 %{target}을 삭제했습니다"
destroy_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단 해제했습니다"
@ -265,6 +269,7 @@ ko:
destroy_status_html: "%{name} 님이 %{target} 님의 게시물을 삭제했습니다"
destroy_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 재개"
destroy_user_role_html: "%{name} 님이 %{target} 역할을 삭제했습니다"
destroy_username_block_html: "%{name} 님이 %{target}를 포함하는 사용자명에 대한 규칙을 삭제했습니다"
disable_2fa_user_html: "%{name} 님이 사용자 %{target} 님의 2단계 인증을 비활성화 했습니다"
disable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 비활성화했습니다"
disable_relay_html: "%{name} 님이 릴레이 %{target}를 비활성화했습니다"
@ -299,6 +304,7 @@ ko:
update_report_html: "%{name} 님이 신고 %{target}를 업데이트 했습니다"
update_status_html: "%{name} 님이 %{target}의 게시물을 업데이트했습니다"
update_user_role_html: "%{name} 님이 %{target} 역할을 수정했습니다"
update_username_block_html: "%{name} 님이 %{target}를 포함하는 사용자명에 대한 규칙을 수정했습니다"
deleted_account: 계정을 삭제했습니다
empty: 로그를 찾을 수 없습니다
filter_by_action: 동작 별 필터
@ -1071,10 +1077,23 @@ ko:
trending: 유행 중
username_blocks:
add_new: 새로 추가
block_registrations: 가입 차단
comparison:
contains: 포함
equals: 일치
contains_html: "%{string} 포함"
created_msg: 사용자명 규칙을 생성했습니다
delete: 삭제
edit:
title: 사용자명 규칙 편집
matches_exactly_html: "%{string}과 일치"
new:
create: 규칙 만들기
title: 새 유저네임 규칙 만들기
no_username_block_selected: 아무 것도 선택 되지 않아 어떤 사용자명 규칙도 변경 되지 않았습니다
not_permitted: 허용하지 않음
title: 사용자명 규칙
updated_msg: 사용자명 규칙을 변경했습니다
warning_presets:
add_new: 새로 추가
delete: 삭제
@ -1631,6 +1650,10 @@ ko:
title: 새 답글
poll:
subject: "%{name}의 설문이 종료됨"
quote:
body: '당신의 게시물을 %{name} 님이 인용했습니다:'
subject: "%{name} 님이 내 게시물을 인용했습니다"
title: 새 인용
reblog:
body: '당신의 게시물을 %{name} 님이 부스트 했습니다:'
subject: "%{name} 님이 내 게시물을 부스트 했습니다"
@ -1837,6 +1860,7 @@ ko:
edited_at_html: "%{date}에 편집됨"
errors:
in_reply_not_found: 답장하려는 게시물이 존재하지 않습니다.
quoted_status_not_found: 인용하려는 게시물이 존재하지 않습니다.
over_character_limit: 최대 %{max}자까지 입력할 수 있습니다
pin_errors:
direct: 멘션된 사용자들에게만 보이는 게시물은 고정될 수 없습니다
@ -1844,6 +1868,8 @@ ko:
ownership: 다른 사람의 게시물은 고정될 수 없습니다
reblog: 부스트는 고정될 수 없습니다
quote_policies:
followers: 내 팔로워만
nobody: 없음
public: 모두
title: '%{name}: "%{quote}"'
visibilities:

View File

@ -690,6 +690,36 @@ nan:
remote_user_placeholder: tuì %{instance} 來ê遠距離用者
reopen: 重頭phah開檢舉
report: '檢舉 #%{id}'
reported_account: 受檢舉ê口座
reported_by: 檢舉人
reported_with_application: 用應用程式檢舉
resolved: 解決ah
resolved_msg: 檢舉成功解決ah
skip_to_actions: 跳kàu行動
status: 狀態
statuses: 受檢舉ê內容
statuses_description_html: 冒犯ê內容ē引用tī kap受檢舉口座ê聯絡
summary:
action_preambles:
delete_html: Lí teh-beh <strong>thâi掉</strong> <strong>@%{acct}</strong> ê tsi̍t-kuá PO文。Tse ē:
mark_as_sensitive_html: Lí teh-beh <strong>kā</strong> <strong>@%{acct}</strong> ê tsi̍t-kuá PO文<strong>標做敏感</strong>。Tse ē:
silence_html: Lí teh-beh <strong>限制</strong> <strong>@%{acct}</strong> ê口座。Tse ē:
suspend_html: Lí teh-beh <strong>停止</strong> <strong>@%{acct}</strong> ê口座權限。Tse ē:
actions:
delete_html: Thâi掉冒犯ê PO文
mark_as_sensitive_html: Kā冒犯êPO文ê媒體標做敏感
silence_html: Kā in ê個人資料kap內容標做kan-ta有跟tuè êá是手動tshiau伊ê個人檔案ê通看見來嚴嚴限制 <strong>@%{acct}</strong> ê傳播範圍
suspend_html: Kā <strong>@%{acct}</strong> 停止權限koh kā in ê 個人資料kap內容標做bē當用kap bē當hām in互動
close_report: 'Kā 檢舉報告 #%{id} 標做解決ah'
close_reports_html: Kā <strong>ta̍k ê</strong>tuì <strong>@%{acct}</strong> ê檢舉標做解決ah
delete_data_html: Tuì tann起30kang以後thâi掉 <strong>@%{acct}</strong> ê個人資料kap內容除非佇tsit ê期限進前取消停止in ê權限
preview_preamble_html: "<strong>@%{acct}</strong> ē收著警告包含下kha ê內容:"
record_strike_html: 記錄tuì <strong>@%{acct}</strong>ê警告來幫tsān lí提升佇tsit ê口座ê未來違規
send_email_html: Kā警告電子phue寄hōo <strong>@%{acct}</strong>
warning_placeholder: 通選ê,管理行動ê補充理由
target_origin: 受檢舉ê口座ê來源
title: 檢舉
unassign: 取消分配
roles:
privileges:
manage_announcements: 管理公告

View File

@ -7,26 +7,78 @@ az:
defaults:
current_password: Təhlükəsizlik səbəblərinə görə lütfən hazırkı hesabın parolunu daxil edin
phrase: Mətndəki böyük-kiçik hərfdən və ya göndərişin məzmun xəbərdarlığından asılı olmayaraq uyuşdurulacaq
setting_aggregate_reblogs: Təzəlikcə təkrar paylaşılmış göndərişlər üçün yeni təkrar paylaşımlar göstərilməsin (yalnız yeni alınan təkrar paylaşımlara təsir edir).
setting_always_send_emails: Normalda, Mastodon-u aktiv olaraq istifadə etdiyiniz zaman e-poçt bildirişləri göndərilməyəcək
setting_default_quote_policy: Bu ayar, yalnız növbəti Mastodon versiyası ilə yaradılmış göndərişlər üçün qüvvəyə minəcək, ancaq hazırlıq mərhələsində tərcihinizi edə bilərsiniz.
setting_default_sensitive: Həssas media, ilkin olaraq gizlədilir və bir kliklə göstərilə bilər
setting_display_media_default: Həssas olaraq işarələnmiş medianı gizlət
setting_display_media_hide_all: Medianı həmişə gizlət
setting_display_media_show_all: Medianı həmişə göstər
setting_system_scrollbars_ui: Yalnız Safari və Chrome əaslı masaüstü brauzerlərinə tətbiq olunur
setting_use_blurhash: Meyillər, gizli vizualların rənglərinə əsaslanır, ancaq detalları gizlədir
setting_use_pending_items: Lenti avtomatik diyirləmək əvəzinə, zaman xətti güncəlləmələrini tək bir kliklə gizlət
featured_tag:
name: 'Budur, təzəlikcə istifadə etdiyiniz mövzu etiketlərindən bəziləri:'
form_admin_settings:
content_cache_retention_period: Digər serverlərdən olan bütün göndərişlər (təkrar paylaşımlar və cavablar daxil olmaqla) göstərilən gün sayından sonra, lokal istifadəçilərin həmin göndərişlərlə qarşılıqlı əlaqəsinə baxılmadan silinəcək. Buna, lokal istifadəçinin həmin göndərişi əlfəcinlərə və ya sevimlilərə əlavə etdiyi hallar da daxildir. Fərqli instansiyalardakı istifadəçilər arasında olan şəxsi adçəkmələr də itəcək və bərpası mümkün olmayacaq. Bu ayarın istifadəsi xüsusi məqsədli instansiyalar üçün nəzərdə tutulub və ümumi məqsədli istifadəyə tətbiq edildikdə bir çox istifadəçi gözləntilərini qarşılamaya bilər.
imports:
data: Digər Mastodon serverindən xaricə köçürdüyünüz CSV faylı
ip_block:
severities:
no_access: Bütün resurslara erişimi əngəllə
sessions:
otp: 'Telefon tətbiqiniz tərəfindən yaradılmış iki faktorlu kodu daxil edin və ya geri qaytarma kodlarınızdan birini istifadə edin:'
user:
chosen_languages: İşarələnsə, yalnız seçilmiş dillərdəki göndərişlər ümumi zaman xətlərində nümayiş etdiriləcək
user_role:
permissions_as_keys: Bu rola sahib istifadəçilər bunlara erişə biləcək...
labels:
account:
show_collections: Profildə izlənilənləri və izləyiciləri göstər
defaults:
autofollow: Hesabınızı izləməyə dəvət edin
confirm_new_password: Yeni parolu təsdiqlə
confirm_password: Parolu təsdiqlə
current_password: Hazırkı parol
data: Veri
display_name: Ekran adı
header: Örtük şəkli
locale: İnterfeys dili
max_uses: Maksimum istifadə sayı
new_password: Yeni parol
password: Parol
setting_system_scrollbars_ui: Sistemin ilkin diyircəyini istifadə edin
setting_advanced_layout: Qabaqcıl veb interfeysini fəallaşdır
setting_aggregate_reblogs: Zaman xəttindəki TP-ları qruplaşdır
setting_always_send_emails: E-poçt göndərişlərini həmişə göndər
setting_auto_play_gif: Animasiyalı GIF-ləri avto-oxut
setting_boost_modal: Bir təkrar paylaşımı silməzdən əvvəl təsdiq dialoq pəncərəsini göstər
setting_default_privacy: Göndəriş məxfiliyi
setting_default_sensitive: Medianı həmişə həssas olaraq işarələ
setting_delete_modal: Bir göndərişi silməzdən əvvəl təsdiq dialoq pəncərəsini göstər
setting_disable_hover_cards: Üzərinə gəldikdə profil önizləməsini sıradan çıxart
setting_disable_swiping: Sürüşdürmə hərəkətlərini sıradan çıxart
setting_display_media: Medianın nümayişi
setting_expand_spoilers: Məzmun xəbərdarlığı ilə işarələnmiş göndərişləri həmişə genişləndir
setting_missing_alt_text_modal: Alternativ mətni olmayan medianı göndərməzdən əvvəl təsdiq dialoq pəncərəsini göstər
setting_reduce_motion: Animasiyalarda hərəkəti azalt
setting_system_font_ui: Sistemin ilkin şriftini istifadə et
setting_system_scrollbars_ui: Sistemin ilkin sürüşdürmə çubuğunu istifadə et
setting_trends: Bugünün trendlərini göstər
setting_use_blurhash: Gizli media üçün rəngli meyilləri göstər
setting_use_pending_items: Yavaş rejim
form_admin_settings:
show_domain_blocks: Əngəllənən domenləri göstər
timeline_preview: Ümumi zaman xətlərinə səlahiyyətsiz erişimə icazə ver
ip_block:
severities:
no_access: Erişimi əngəllə
notification_emails:
appeal: Kimsə, bir moderasiya qərarına etiraz edir
favourite: Kimsə göndərişinizi sevimlilərinə əlavə etdi
follow: Kimsə sizi izləyir
follow_request: Kimsə sizi izləmək üçün sorğu göndərdi
mention: Kimsə adınızı çəkdi
quote: Kimsə sizdən sitat gətirdi
reblog: Kimsə göndərişinizi təkrar paylaşdı
username_block:
username: Uyuşacaq söz

View File

@ -3,12 +3,14 @@ be:
simple_form:
hints:
account:
attribution_domains: Адзін на радок. Абараняе ад ілжывых значанняў аўтарства.
discoverable: Вашы публічныя паведамленні і профіль могуць быць паказаны або рэкамендаваны ў розных раздзелах Mastodon, і ваш профіль можа быць прапанаваны іншым карыстальнікам.
display_name: Ваша поўнае імя або ваш псеўданім.
fields: Ваша хатняя старонка, займеннікі, узрост, усё, што заўгодна.
indexable: Вашыя публічныя допісы могуць з'яўляцца ў рэзультатах пошуку Mastodon. Людзі, якія ўзаемадзейнічалі з вашымі допісамі, усё роўна маюць магчымасць іх знаходзіць.
note: 'Вы можаце @згадваць іншых людзей або выкарыстоўваць #хэштэгі.'
show_collections: Людзі змогуць праглядаць спіс вашых падпісак і падпісчыкаў. Людзі, на якіх вы падпісаны ў любым выпадку будуць бачыць, што вы іх чытаеце.
unlocked: Людзі змогуць падпісвацца на Вас без запыту на ўхваленне. Зніміце птушку, калі хочаце разглядаць запыты на падпіску і выбіраць, ці хочаце Вы прымаць або адмаўляць новым падпісчыкам.
account_alias:
acct: Прызначце карыстальнік@дамен уліковага запісу з якога вы хочаце пераехаць
account_migration:
@ -43,7 +45,7 @@ be:
context: Адзін ці некалькі кантэкстаў, да якіх трэба прымяніць фільтр
current_password: У мэтах бяспекі, увядзіце пароль бягучага ўліковага запісу
current_username: Каб пацвердзіць, увядзіце, калі ласка імя карыстальніка бягучага ўліковага запісу
digest: Будзе даслана толькі пасля доўгага перыяду неактыўнасці і толькі калі вы атрымалі асабістыя паведамленні падчас вашай адсутнасці
digest: Будзе даслана толькі пасля доўгага перыяду неактыўнасці і толькі, калі Вы атрымалі асабістыя паведамленні падчас Вашай адсутнасці
email: Пацвярджэнне будзе выслана па электроннай пошце
header: WEBP, PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў
inbox_url: Капіраваць URL са старонкі рэтранслятара, якім вы хочаце карыстацца
@ -54,11 +56,13 @@ be:
scopes: Абярыце, якімі API праграма зможа карыстацца. Выбар дазволу найвышэйшага ўзроўню ўключае ў сябе дазволу астатніх узроўняў.
setting_aggregate_reblogs: Не паказваць новыя пашырэнні для допісаў, якія пашырылі нядаўна (закранае толькі нядаўнія пашырэнні)
setting_always_send_emails: Звычайна лісты з апавяшчэннямі не будуць дасылацца, калі вы актыўна карыстаецеся Mastodon
setting_default_quote_policy: Гэтая налада будзе працаваць толькі з допісамі, створанымі ў наступнай версіі Mastodon, але Вы можаце падрыхтавацца і задаць яе.
setting_default_sensitive: Далікатныя медыя прадвызначана схаваныя. Іх можна адкрыць адзіным клікам
setting_display_media_default: Хаваць медыя пазначаныя як далікатныя
setting_display_media_hide_all: Заўсёды хаваць медыя
setting_display_media_show_all: Заўсёды паказваць медыя
setting_emoji_style: Як паказваць эмодзі. "Аўтаматычны" будзе намагацца выкарыстоўваць мясцовыя эмодзі, але для састарэлых браўзераў — Twemoji.
setting_system_scrollbars_ui: Працуе толькі ў камп'ютарных браўзерах на аснове Safari і Chrome
setting_use_blurhash: Градыенты заснаваны на колерах схаваных выяў, але размываюць дэталі
setting_use_pending_items: Схаваць абнаўленні стужкі за клікам замест аўтаматычнага пракручвання стужкі
username: Вы можаце выкарыстоўваць літары, лічбы і падкрэсліванне
@ -71,8 +75,9 @@ be:
featured_tag:
name: 'Вось некаторыя з хэштэгаў, якімі вы нядаўна карысталіся:'
filters:
action: Абярыце, што зрабіць, калі пост падпадае пад умовы фільтру
action: Абярыце, што зрабіць, калі допіс падпадае пад умовы фільтру
actions:
blur: Схавайце медыя за знакам папярэджання, не хаваючы пры гэтым тэкст
hide: Поўнасцю схаваць адфільтраванае змесціва, дзейнічаць, нібы яго не існуе
warn: Схаваць адфільтраваны кантэнт за папярэджаннем з назвай фільтру
form_admin_settings:
@ -86,7 +91,8 @@ be:
favicon: WEBP, PNG, GIF ці JPG. Замяняе прадвызначаны favicon Mastodon на ўласны значок.
mascot: Замяняе ілюстрацыю ў пашыраным вэб-інтэрфейсе.
media_cache_retention_period: Медыяфайлы з допісаў, зробленых выдаленымі карыстальнікамі, кэшыруюцца на вашым серверы. Пры станоўчым значэнні медыяфайлы будуць выдалены праз пазначаную колькасць дзён. Калі медыяданыя будуць запытаны пасля выдалення, яны будуць спампаваны зноў, калі зыходнае змесціва усё яшчэ даступнае. У сувязі з абмежаваннямі на частату абнаўлення картак перадпрагляду іншых сайтаў, рэкамендуецца ўсталяваць значэнне не менш за 14 дзён, інакш гэтыя карткі не будуць абнаўляцца па запыце раней за гэты тэрмін.
peers_api_enabled: Спіс даменных імён, з якімі сутыкнуўся гэты сервер у fediverse. Даныя пра тое, ці знаходзіцеся вы з дадзеным серверам у федэрацыі, не ўключаны. Уключаны толькі даныя пра тое, што ваш сервер ведае пра іншыя серверы. Гэта выкарыстоўваецца сэрвісамі, якія збіраюць статыстыку па федэрацыі ў агульным сэнсе.
min_age: Карыстальнікі будуць атрымліваць запыт на пацвярджэнне даты нараджэння падчас рэгістрацыі
peers_api_enabled: Спіс даменных імён, з якімі сутыкнуўся гэты сервер у федэральным сусвеце. Даныя пра тое, ці знаходзіцеся вы з дадзеным серверам у федэрацыі, не ўключаны. Уключаны толькі даныя пра тое, што ваш сервер ведае пра іншыя серверы. Гэта выкарыстоўваецца сэрвісамі, якія збіраюць статыстыку па федэрацыі ў агульным сэнсе.
profile_directory: Дырэкторыя профіляў змяшчае спіс усіх карыстальнікаў, якія вырашылі быць бачнымі.
require_invite_text: Калі рэгістрацыя патрабуе ручнога пацвержання, зрабіце поле "Чаму вы хочаце далучыцца?" абавязковым
site_contact_email: Як людзі могуць звязацца з вамі па юрыдычных запытах або пытаннях падтрымкі.
@ -129,21 +135,44 @@ be:
tag:
name: Вы можаце змяняць толькі рэгістр літар, напрыклад для таго, каб падвысіць чытабельнасць
terms_of_service:
changelog: Можна карыстацца сінтаксісам Markdown, каб структураваць тэкст.
effective_date: Дапушчальны перыяд часу можа вар'іравацца ад 10 да 30 дзён з моманту, як Вы апавясціце сваіх карыстальнікаў.
text: Тэкст можна структураваць з дапамогай сінтаксісу Markdown.
terms_of_service_generator:
admin_email: Юрыдычныя абвесткі ўключаюць сустрэчныя абвесткі, судзейскія пастановы, запыты на выдаленне і запыты праваахоўных органаў.
arbitration_address: Можа быць такім жа, што і фізічны адрас вышэй, або “N/A”, калі карыстаецеся электроннай поштай.
arbitration_website: Можа быць у выглядзе электроннай формы або “N/A”, калі карыстаецеся электроннай поштай.
choice_of_law: шашашаГорад, вобласць, тэрыторыя штата (Зша), унутраныя законы якой рэгулююць усе прэтэнзіі.
dmca_address: 'Для ўладальнікаў з ЗША: выкарыстоўвайце адрас, які зарэгістраваны ў даведніку ўпаўнаважаных агентаў DMCA. Спіс паштовых адрасоў даступны па прамым запыце, выкарыстоўвайце запыт на адмову ад правоў на пошту ўпаўнаважаных агентаў DMCA, каб адправіць электронны ліст у Офіс па Аўтарскіх Правах і апішыце, што Вы мадэратар, які працуе з уласнага дому, які баіцца помсты ці пакарання за свае дзеянні і якому патрэбны выкарыстаць паштовы адрас, каб прыбраць дамашні адрас з публічнага доступу.'
dmca_email: Можа быць такім жа, што і "Электронны адрас для юрыдычных абвестак" вышэй.
domain: Унікальны ідэнтыфікатар анлайн сэрвісу, які Вы прадстаўляеце.
jurisdiction: Дадайце краіну, дзе жыве той, хто плаціць за рахункі. Калі гэта кампанія ці іншая інстанцыя, дадайце краіну, дзе яна знаходзіцца, а таксама (па меры неабходнасці) горад, вобласць, тэрыторыю штата (ЗША).
min_age: Не павінен быць ніжэй за мінімальны ўзрост, які патрабуюць законы Вашай юрысдыкцыі.
user:
chosen_languages: У публічных стужках будуць паказвацца допісы толькі на тых мовах, якія вы пазначыце
date_of_birth:
few: Нам трэба ўпэўніцца, што Вы як мінімум %{count} чалавекі з тых, хто карыстаецца %{domain}. Мы не будзем захоўваць гэту інфармацыю.
many: Нам трэба ўпэўніцца, што Вы як мінімум %{count} людзей з тых, хто карыстаецца %{domain}. Мы не будзем захоўваць гэту інфармацыю.
one: Нам трэба ўпэўніцца, што Вы як мінімум %{count} чалавек з тых, хто карыстаецца %{domain}. Мы не будзем захоўваць гэту інфармацыю.
other: Нам трэба ўпэўніцца, што Вы як мінімум %{count} чалавекі з тых, хто карыстаецца %{domain}. Мы не будзем захоўваць гэту інфармацыю.
role: Роля кантралюе тое, якія дазволы мае карыстальнік.
user_role:
color: Колер, які будзе выкарыстоўвацца для гэтай ролі па ўсім UI, у фармаце RGB ці hex
highlighted: Гэта робіць ролю публічна бачнай
name: Публічная назва ролі, калі роля дэманструецца як значок у профілю
permissions_as_keys: Карыстальнікі з гэтай роляй будуць мець доступ да...
position: Ролі вышэйшага рангу займаюцца вырашэннем канфліктаў у пэўных сітуацыях. Некаторыя дзеянні можна выкананаць толькі над ролямі з ніжэйшым рангам
username_block:
allow_with_approval: Рэгістрацыя не будзе цалкам забараняцца. Замест гэтага на адпаведныя рэгістрацыі спатрэбіцца Ваша ўхваленне
comparison: Калі ласка, бярыце пад увагу Сканторпскую Праблему, калі блакіруеце частковыя супадзенні
username: Супадзе пры любым рэгістры літар і часта ўжывальных амогліфах, накшталт "4" у якасці "а" ці "3" у якасці "е"
webhook:
events: Выберыце падзеі для адпраўкі
template: Стварыце сваю ўласную карысную нагрузку JSON з дапамогай інтэрпаляцыі зменных. Пакіньце пустым для стандартнага змесціва JSON.
url: Куды падзеі будуць адпраўляцца
labels:
account:
attribution_domains: Сайтам дазволена пазначаць ваша аўтарства
discoverable: Уключыць профіль і допісы ў алгарытмы рэкамендацый
fields:
name: Пазнака
@ -222,8 +251,10 @@ be:
setting_emoji_style: Стыль эмодзі
setting_expand_spoilers: Заўжды разгортваць допісы з папярэджаннем аб змесціве
setting_hide_network: Схаваць вашы сувязі
setting_missing_alt_text_modal: Паказваць акно пацвярджэння перад публікацыяй медыя без альтэрнатыўнага тэксту
setting_reduce_motion: Памяншэнне руху ў анімацыях
setting_system_font_ui: Выкарыстоўваць прадвызначаны сістэмны шрыфт
setting_system_scrollbars_ui: Паказваць паласу пракручвання па змаўчанні
setting_theme: Тэма сайта
setting_trends: Паказваць трэнды дня
setting_unfollow_modal: Паказваць акно пацвярджэння перад адпісваннем
@ -242,6 +273,7 @@ be:
name: Хэштэг
filters:
actions:
blur: Хаваць медыя з папярэджаннем
hide: Схаваць цалкам
warn: Схаваць з папярэджаннем
form_admin_settings:
@ -255,6 +287,7 @@ be:
favicon: Значок сайта
mascot: Уласны маскот(спадчына)
media_cache_retention_period: Працягласць захавання кэшу для медыя
min_age: Патрабаванне мінімальнага ўзросту
peers_api_enabled: Апублікаваць спіс знойдзеных сервераў у API
profile_directory: Уключыць каталог профіляў
registrations_mode: Хто можа зарэгістравацца
@ -277,7 +310,7 @@ be:
interactions:
must_be_follower: Заблакіраваць апавяшчэнні ад непадпісаных людзей
must_be_following: Заблакіраваць апавяшчэнні ад людзей на якіх вы не падпісаны
must_be_following_dm: Заблакіраваць асабістыя паведамленні ад людзей на якіх вы не падпісаны
must_be_following_dm: Заблакіраваць асабістыя паведамленні ад людзей, на якіх Вы не падпісаныя
invite:
comment: Каментар
invite_request:
@ -298,6 +331,7 @@ be:
follow_request: Нехта даслаў вам запыт на падпіску
mention: Нехта згадаў вас
pending_account: Новы акаўнт патрабуе разгляду
quote: Хтосьці цытаваў Вас
reblog: Нехта пашырыў ваш допіс
report: Новая скарга даслана
software_updates:
@ -320,9 +354,15 @@ be:
usable: Дазволіць допісам выкарыстоўваць гэты хэштэг лакальна
terms_of_service:
changelog: Што змянілася?
effective_date: Дата пачатку дзеяння
text: Умовы выкарыстання
terms_of_service_generator:
admin_email: Адрас электроннай пошты для юрыдычных абвестак
arbitration_address: Фізічны адрас для арбітражных абвестак
arbitration_website: Сайт для дасылання арбітражных абвестак
choice_of_law: Выбар заканадаўства
dmca_address: Фізічны адрас для абвестак DMCA/аўтарскага права
dmca_email: Адрас электроннай пошты для абвестак DMCA/аўтарскага права
domain: Дамен
jurisdiction: Юрысдыкцыя
min_age: Мінімальны ўзрост
@ -338,6 +378,10 @@ be:
name: Назва
permissions_as_keys: Дазволы
position: Прыярытэт
username_block:
allow_with_approval: Дазваляць рэгістрацыі з ухваленнем
comparison: Метад параўнання
username: Словы, з якімі трэба параўноўваць
webhook:
events: Актыўныя падзеі
template: Шаблон карыснай нагрузкі

View File

@ -56,7 +56,7 @@ da:
scopes: De API'er, som applikationen vil kunne tilgå. Vælges en topniveaudstrækning, vil detailvalg være unødvendige.
setting_aggregate_reblogs: Vis ikke nye fremhævelser for nyligt fremhævede indlæg (påvirker kun nyligt modtagne fremhævelser)
setting_always_send_emails: Normalt sendes ingen e-mailnotifikationer under aktivt brug af Mastodon
setting_default_quote_policy: Denne indstilling træder kun i kraft for indlæg oprettet med den næste Mastodon-version, men egne præference kan vælges som forberedelse.
setting_default_quote_policy: Denne indstilling træder kun i kraft for indlæg oprettet med den næste Mastodon-version, men egen præference kan vælges som forberedelse.
setting_default_sensitive: Sensitive medier er som standard skjult og kan vises med et klik
setting_display_media_default: Skjul medier med sensitiv-markering
setting_display_media_hide_all: Skjul altid medier

View File

@ -27,6 +27,8 @@ kab:
username: Tzemreḍ ad tesqedceḍ isekkilen, uṭṭunen akked yijerriden n wadda
featured_tag:
name: 'Ha-t-an kra seg ihacṭagen i tesseqdaceḍ ussan-a ineggura maḍi :'
form_admin_settings:
min_age: Ad ttwasutren yiseqdacen ad sentemen azemz-nsen n tlalit deg ujerred
form_challenge:
current_password: Tkecmeḍ ɣer temnaḍt taɣellsant
imports:
@ -37,15 +39,19 @@ kab:
comment: D afrayan. Cfu ɣef wayɣer i terniḍ alugen-a.
severities:
no_access: Sewḥel anekcu ɣer akk tiɣbula
user:
date_of_birth:
one: Ilaq ad neḍmen belli tesɛiḍ ma ulac %{count} akken ad tesqedceḍ %{domain}. Ur neḥrez ara aya.
other: Ilaq ad neḍmen belli tesɛiḍ ma ulac %{count} akken ad tesqedceḍ %{domain}. Ur neḥrez ara aya.
labels:
account:
fields:
name: Tabzimt
value: Agbur
account_alias:
acct: Tansa n umiḍan aqbur
acct: Asulay n umiḍan aqbur
account_migration:
acct: Tansa n umiḍan amaynut
acct: Asulay n umiḍan amaynut
account_warning_preset:
title: Azwel
admin_account_action:
@ -90,12 +96,14 @@ kab:
setting_always_send_emails: Dima ttazen-d ilɣa s yimayl
setting_default_language: Tutlayt n usuffeɣ
setting_default_privacy: Tabaḍnit n usuffeɣ
setting_default_quote_policy: Anwa i izemren ad d-yebder
setting_display_media: Askanay n imidyaten
setting_display_media_default: Akk-a kan
setting_display_media_hide_all: Ffer-iten akk
setting_display_media_show_all: Sken-iten-id akk
setting_hide_network: Ffer azetta-k·m inmetti
setting_theme: Asental n wesmel
setting_trends: Sken-d inezzaɣ n wass-a
setting_use_pending_items: Askar aleɣwayan
sign_in_token_attempt: Tangalt n tɣellist
title: Azwel
@ -116,6 +124,7 @@ kab:
status_page_url: URL n uusebter n waddaden
theme: Asentel amezwer
thumbnail: Tanfult n uqeddac
trends: Rmed inezzaɣ
interactions:
must_be_follower: Ssewḥel ilɣa sɣur wid akk d tid ur yellin ara d imeḍfaren-ik·im
must_be_following: Ssewḥel ilɣa sɣur wid akked tid ur tettḍafareḍ ara

View File

@ -56,6 +56,7 @@ ko:
scopes: 애플리케이션에 허용할 API들입니다. 최상위 스코프를 선택하면 개별적인 것은 선택하지 않아도 됩니다.
setting_aggregate_reblogs: 최근에 부스트 됐던 게시물은 새로 부스트 되어도 보여주지 않기 (새로 받은 부스트에만 적용됩니다)
setting_always_send_emails: 기본적으로 마스토돈을 활동적으로 사용하고 있을 때에는 이메일 알림이 보내지지 않습니다
setting_default_quote_policy: 이 설정은 다음 마스토돈 버전부터 효과가 적용되지만 미리 준비할 수 있도록 설정을 제공합니다.
setting_default_sensitive: 민감한 미디어는 기본적으로 가려져 있으며 클릭해서 볼 수 있습니다
setting_display_media_default: 민감함으로 표시된 미디어 가리기
setting_display_media_hide_all: 모든 미디어를 가리기
@ -158,6 +159,9 @@ ko:
name: 역할이 배지로 표시될 경우, 그 역할에 대한 공개적인 이름입니다
permissions_as_keys: 이 역할을 가진 사용자는 다음에 접근할 수 있게 됩니다...
position: 특정 상황에서 충돌이 발생할 경우 더 높은 역할이 충돌을 해결합니다. 특정 작업은 우선순위가 낮은 역할에 대해서만 수행될 수 있습니다
username_block:
allow_with_approval: 바로 가입을 막는 대신, 일치하는 가입에 승인을 요구합니다
username: 대소문자와 관계 없고 "4"를 "a"로, "3"을 "e"로 사용하는 등의 보편적으로 사용되는 비슷한 문자까지 매치됩니다
webhook:
events: 전송할 이벤트를 선택하세요
template: 원하는 JSON 페이로드를 변수와 함께 작성하거나, 그대로 두어 기본 JSON을 사용할 수 있습니다.
@ -323,6 +327,7 @@ ko:
follow_request: 누군가 나를 팔로우 하길 요청할 때
mention: 누군가 나를 언급했을 때
pending_account: 새 계정이 심사가 필요할 때
quote: 누군가 나를 인용했을 때
reblog: 누군가 내 게시물을 부스트 했을 때
report: 새 신고가 접수되었을 때
software_updates:
@ -369,6 +374,10 @@ ko:
name: 이름
permissions_as_keys: 권한
position: 우선순위
username_block:
allow_with_approval: 승인을 통한 가입 허용
comparison: 비교 방식
username: 일치할 단어
webhook:
events: 활성화된 이벤트
template: 페이로드 템플릿

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddDeliveryLastFailedAtToFaspProviders < ActiveRecord::Migration[8.0]
def change
add_column :fasp_providers, :delivery_last_failed_at, :datetime
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.0].define(version: 2025_07_17_003848) do
ActiveRecord::Schema[8.0].define(version: 2025_08_05_075010) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_catalog.plpgsql"
@ -488,6 +488,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_17_003848) do
t.string "fediverse_account"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.datetime "delivery_last_failed_at"
t.index ["base_url"], name: "index_fasp_providers_on_base_url", unique: true
end
@ -1483,53 +1484,6 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_17_003848) do
add_foreign_key "web_settings", "users", name: "fk_11910667b2", on_delete: :cascade
add_foreign_key "webauthn_credentials", "users", on_delete: :cascade
create_view "instances", materialized: true, sql_definition: <<-SQL
WITH domain_counts(domain, accounts_count) AS (
SELECT accounts.domain,
count(*) AS accounts_count
FROM accounts
WHERE (accounts.domain IS NOT NULL)
GROUP BY accounts.domain
)
SELECT domain_counts.domain,
domain_counts.accounts_count
FROM domain_counts
UNION
SELECT domain_blocks.domain,
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
FROM (domain_blocks
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_blocks.domain)::text)))
UNION
SELECT domain_allows.domain,
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
FROM (domain_allows
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_allows.domain)::text)));
SQL
add_index "instances", "reverse(('.'::text || (domain)::text)), domain", name: "index_instances_on_reverse_domain"
add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true
create_view "user_ips", sql_definition: <<-SQL
SELECT user_id,
ip,
max(used_at) AS used_at
FROM ( SELECT users.id AS user_id,
users.sign_up_ip AS ip,
users.created_at AS used_at
FROM users
WHERE (users.sign_up_ip IS NOT NULL)
UNION ALL
SELECT session_activations.user_id,
session_activations.ip,
session_activations.updated_at
FROM session_activations
UNION ALL
SELECT login_activities.user_id,
login_activities.ip,
login_activities.created_at
FROM login_activities
WHERE (login_activities.success = true)) t0
GROUP BY user_id, ip;
SQL
create_view "account_summaries", materialized: true, sql_definition: <<-SQL
SELECT accounts.id AS account_id,
mode() WITHIN GROUP (ORDER BY t0.language) AS language,
@ -1580,4 +1534,51 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_17_003848) do
SQL
add_index "global_follow_recommendations", ["account_id"], name: "index_global_follow_recommendations_on_account_id", unique: true
create_view "instances", materialized: true, sql_definition: <<-SQL
WITH domain_counts(domain, accounts_count) AS (
SELECT accounts.domain,
count(*) AS accounts_count
FROM accounts
WHERE (accounts.domain IS NOT NULL)
GROUP BY accounts.domain
)
SELECT domain_counts.domain,
domain_counts.accounts_count
FROM domain_counts
UNION
SELECT domain_blocks.domain,
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
FROM (domain_blocks
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_blocks.domain)::text)))
UNION
SELECT domain_allows.domain,
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
FROM (domain_allows
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_allows.domain)::text)));
SQL
add_index "instances", "reverse(('.'::text || (domain)::text)), domain", name: "index_instances_on_reverse_domain"
add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true
create_view "user_ips", sql_definition: <<-SQL
SELECT user_id,
ip,
max(used_at) AS used_at
FROM ( SELECT users.id AS user_id,
users.sign_up_ip AS ip,
users.created_at AS used_at
FROM users
WHERE (users.sign_up_ip IS NOT NULL)
UNION ALL
SELECT session_activations.user_id,
session_activations.ip,
session_activations.updated_at
FROM session_activations
UNION ALL
SELECT login_activities.user_id,
login_activities.ip,
login_activities.created_at
FROM login_activities
WHERE (login_activities.success = true)) t0
GROUP BY user_id, ip;
SQL
end

View File

@ -51,8 +51,8 @@
"@react-spring/web": "^9.7.5",
"@reduxjs/toolkit": "^2.0.1",
"@use-gesture/react": "^10.3.1",
"@vitejs/plugin-legacy": "^6.1.1",
"@vitejs/plugin-react": "^4.2.1",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-react": "^5.0.0",
"arrow-key-navigation": "^1.2.0",
"async-mutex": "^0.5.0",
"axios": "^1.4.0",
@ -108,7 +108,7 @@
"regenerator-runtime": "^0.14.0",
"requestidlecallback": "^0.3.0",
"rollup-plugin-gzip": "^4.1.1",
"rollup-plugin-visualizer": "^6.0.0",
"rollup-plugin-visualizer": "^6.0.3",
"sass": "^1.62.1",
"stacktrace-js": "^2.0.2",
"stringz": "^2.1.0",
@ -117,27 +117,27 @@
"tiny-queue": "^0.2.1",
"twitter-text": "3.1.0",
"use-debounce": "^10.0.0",
"vite": "^6.3.5",
"vite": "^7.1.1",
"vite-plugin-manifest-sri": "^0.2.0",
"vite-plugin-pwa": "^1.0.0",
"vite-plugin-static-copy": "^3.1.0",
"vite-plugin-pwa": "^1.0.2",
"vite-plugin-static-copy": "^3.1.1",
"vite-plugin-svgr": "^4.3.0",
"vite-tsconfig-paths": "^5.1.4",
"wicg-inert": "^3.1.2",
"workbox-expiration": "^7.0.0",
"workbox-routing": "^7.0.0",
"workbox-strategies": "^7.0.0",
"workbox-window": "^7.0.0"
"workbox-expiration": "^7.3.0",
"workbox-routing": "^7.3.0",
"workbox-strategies": "^7.3.0",
"workbox-window": "^7.3.0"
},
"devDependencies": {
"@eslint/js": "^9.23.0",
"@formatjs/cli": "^6.1.1",
"@storybook/addon-a11y": "^9.0.4",
"@storybook/addon-docs": "^9.0.4",
"@storybook/addon-vitest": "^9.0.4",
"@storybook/react-vite": "^9.0.4",
"@testing-library/dom": "^10.2.0",
"@testing-library/react": "^16.0.0",
"@storybook/addon-a11y": "^9.1.1",
"@storybook/addon-docs": "^9.1.1",
"@storybook/addon-vitest": "^9.1.1",
"@storybook/react-vite": "^9.1.1",
"@testing-library/dom": "^10.4.1",
"@testing-library/react": "^16.3.0",
"@types/debug": "^4",
"@types/emoji-mart": "3.0.14",
"@types/escape-html": "^1.0.2",
@ -162,10 +162,10 @@
"@types/react-toggle": "^4.0.3",
"@types/redux-immutable": "^4.0.3",
"@types/requestidlecallback": "^0.3.5",
"@vitest/browser": "^3.2.1",
"@vitest/coverage-v8": "^3.2.0",
"@vitest/ui": "^3.2.1",
"chromatic": "^13.0.0",
"@vitest/browser": "^3.2.4",
"@vitest/coverage-v8": "^3.2.4",
"@vitest/ui": "^3.2.4",
"chromatic": "^13.1.3",
"eslint": "^9.23.0",
"eslint-import-resolver-typescript": "^4.2.5",
"eslint-plugin-formatjs": "^5.3.1",
@ -185,19 +185,18 @@
"playwright": "^1.54.1",
"prettier": "^3.3.3",
"react-test-renderer": "^18.2.0",
"storybook": "^9.0.4",
"storybook": "^9.1.1",
"stylelint": "^16.19.1",
"stylelint-config-prettier-scss": "^1.0.0",
"stylelint-config-standard-scss": "^15.0.1",
"typescript": "~5.7.3",
"typescript-eslint": "^8.29.1",
"vitest": "^3.2.1"
"vitest": "^3.2.4"
},
"resolutions": {
"@types/react": "^18.2.7",
"@types/react-dom": "^18.2.4",
"kind-of": "^6.0.3",
"vite": "^6.3.5"
"kind-of": "^6.0.3"
},
"peerDependenciesMeta": {
"react": {

View File

@ -12,27 +12,22 @@ RSpec.describe ActivityPub::Activity::Delete do
id: 'foo',
type: 'Delete',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: ActivityPub::TagManager.instance.uri_for(status),
object: object_json,
signature: 'foo',
}.with_indifferent_access
}.deep_stringify_keys
end
let(:object_json) { ActivityPub::TagManager.instance.uri_for(status) }
describe '#perform' do
subject { described_class.new(json, sender) }
before do
subject.perform
end
it 'deletes sender\'s status' do
subject.perform
expect(Status.find_by(id: status.id)).to be_nil
end
end
context 'when the status has been reblogged' do
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when the status has been reblogged' do
let!(:reblogger) { Fabricate(:account) }
let!(:follower) { Fabricate(:account, username: 'follower', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
let!(:reblog) { Fabricate(:status, account: reblogger, reblog: status) }
@ -55,12 +50,8 @@ RSpec.describe ActivityPub::Activity::Delete do
expect { reblog.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
context 'when the status has been reported' do
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when the status has been reported' do
let!(:reporter) { Fabricate(:account) }
before do
@ -76,23 +67,9 @@ RSpec.describe ActivityPub::Activity::Delete do
expect(Status.with_discarded.find_by(id: status.id)).to_not be_nil
end
end
end
context 'when the deleted object is an account' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Delete',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: ActivityPub::TagManager.instance.uri_for(sender),
signature: 'foo',
}.with_indifferent_access
end
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when the deleted object is an account' do
let(:object_json) { ActivityPub::TagManager.instance.uri_for(sender) }
let(:service) { instance_double(DeleteAccountService, call: true) }
before do
@ -106,27 +83,36 @@ RSpec.describe ActivityPub::Activity::Delete do
.to have_received(:call).with(sender, { reserve_username: false, skip_activitypub: true })
end
end
end
context 'when the deleted object is a quote authorization' do
let(:quoter) { Fabricate(:account, domain: 'b.example.com') }
let(:status) { Fabricate(:status, account: quoter) }
let(:quoted_status) { Fabricate(:status, account: sender, uri: 'https://example.com/statuses/1234') }
let!(:quote) { Fabricate(:quote, approval_uri: 'https://example.com/approvals/1234', state: :accepted, status: status, quoted_status: quoted_status) }
context 'when the deleted object is a quote authorization' do
let(:quoter) { Fabricate(:account, domain: 'b.example.com') }
let(:status) { Fabricate(:status, account: quoter) }
let(:quoted_status) { Fabricate(:status, account: sender, uri: 'https://example.com/statuses/1234') }
let!(:quote) { Fabricate(:quote, approval_uri: 'https://example.com/approvals/1234', state: :accepted, status: status, quoted_status: quoted_status) }
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Delete',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: quote.approval_uri,
signature: 'foo',
}.with_indifferent_access
let(:object_json) { quote.approval_uri }
it 'revokes the authorization' do
expect { subject.perform }
.to change { quote.reload.state }.to('revoked')
end
end
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when the deleted object is an inlined quote authorization' do
let(:quoter) { Fabricate(:account, domain: 'b.example.com') }
let(:status) { Fabricate(:status, account: quoter) }
let(:quoted_status) { Fabricate(:status, account: sender, uri: 'https://example.com/statuses/1234') }
let!(:quote) { Fabricate(:quote, approval_uri: 'https://example.com/approvals/1234', state: :accepted, status: status, quoted_status: quoted_status) }
let(:object_json) do
{
type: 'QuoteAuthorization',
id: quote.approval_uri,
attributedTo: ActivityPub::TagManager.instance.uri_for(quoted_status.account),
interactionTarget: ActivityPub::TagManager.instance.uri_for(quoted_status),
interactingObject: ActivityPub::TagManager.instance.uri_for(status),
}.deep_stringify_keys
end
it 'revokes the authorization' do
expect { subject.perform }

View File

@ -80,6 +80,7 @@ RSpec.describe CustomEmoji, :attachment_processing do
describe 'Normalizations' do
describe 'domain' do
it { is_expected.to normalize(:domain).from(' www.mastodon.host ').to('www.mastodon.host') }
it { is_expected.to normalize(:domain).from('wWw.MaStOdOn.CoM').to('www.mastodon.com') }
it { is_expected.to normalize(:domain).from(nil).to(nil) }
end

View File

@ -214,4 +214,102 @@ RSpec.describe Fasp::Provider do
expect(subject.delivery_failure_tracker).to be_a(DeliveryFailureTracker)
end
end
describe '#available?' do
subject { Fabricate(:fasp_provider, delivery_last_failed_at:) }
let(:delivery_last_failed_at) { nil }
before do
allow(subject.delivery_failure_tracker).to receive(:available?).and_return(available)
end
context 'when the delivery failure tracker reports it is available' do
let(:available) { true }
it 'returns true' do
expect(subject.available?).to be true
end
end
context 'when the delivery failure tracker reports it is unavailable' do
let(:available) { false }
context 'when the last failure was more than one hour ago' do
let(:delivery_last_failed_at) { 61.minutes.ago }
it 'returns true' do
expect(subject.available?).to be true
end
end
context 'when the last failure is very recent' do
let(:delivery_last_failed_at) { 5.minutes.ago }
it 'returns false' do
expect(subject.available?).to be false
end
end
end
end
describe '#update_availability!' do
subject { Fabricate(:fasp_provider, delivery_last_failed_at:) }
before do
allow(subject.delivery_failure_tracker).to receive(:available?).and_return(available)
end
context 'when `delivery_last_failed_at` is `nil`' do
let(:delivery_last_failed_at) { nil }
context 'when the delivery failure tracker reports it is available' do
let(:available) { true }
it 'does not update the provider' do
subject.update_availability!
expect(subject.saved_changes?).to be false
end
end
context 'when the delivery failure tracker reports it is unavailable' do
let(:available) { false }
it 'sets `delivery_last_failed_at` to the current time' do
freeze_time
subject.update_availability!
expect(subject.delivery_last_failed_at).to eq Time.zone.now
end
end
end
context 'when `delivery_last_failed_at` is present' do
context 'when the delivery failure tracker reports it is available' do
let(:available) { true }
let(:delivery_last_failed_at) { 5.minutes.ago }
it 'sets `delivery_last_failed_at` to `nil`' do
subject.update_availability!
expect(subject.delivery_last_failed_at).to be_nil
end
end
context 'when the delivery failure tracker reports it is unavailable' do
let(:available) { false }
let(:delivery_last_failed_at) { 5.minutes.ago }
it 'updates `delivery_last_failed_at` to the current time' do
freeze_time
subject.update_availability!
expect(subject.delivery_last_failed_at).to eq Time.zone.now
end
end
end
end
end

View File

@ -13,7 +13,10 @@ RSpec.describe ActivityPub::DeleteQuoteAuthorizationSerializer do
expect(subject.deep_symbolize_keys)
.to include(
actor: eq(ActivityPub::TagManager.instance.uri_for(status.account)),
object: ActivityPub::TagManager.instance.approval_uri_for(quote, check_approval: false),
object: a_hash_including(
type: 'QuoteAuthorization',
id: ActivityPub::TagManager.instance.approval_uri_for(quote, check_approval: false)
),
type: 'Delete'
)
end

View File

@ -0,0 +1,57 @@
# frozen_string_literal: true
RSpec.shared_examples 'worker handling fasp delivery failures' do
context 'when provider is not available' do
before do
provider.update(delivery_last_failed_at: 1.minute.ago)
domain = Addressable::URI.parse(provider.base_url).normalized_host
UnavailableDomain.create!(domain:)
end
it 'does not attempt connecting and does not fail the job' do
expect { subject }.to_not raise_error
expect(stubbed_request).to_not have_been_made
end
end
context 'when connection to provider fails' do
before do
base_stubbed_request
.to_raise(HTTP::ConnectionError)
end
context 'when provider becomes unavailable' do
before do
travel_to 5.minutes.ago
4.times do
provider.delivery_failure_tracker.track_failure!
travel_to 1.minute.since
end
end
it 'updates the provider and does not fail the job, so it will not be retried' do
expect { subject }.to_not raise_error
expect(provider.reload.delivery_last_failed_at).to eq Time.current
end
end
context 'when provider is still marked as available' do
it 'fails the job so it can be retried' do
expect { subject }.to raise_error(HTTP::ConnectionError)
end
end
end
context 'when connection to a previously unavailable provider succeeds' do
before do
provider.update(delivery_last_failed_at: 2.hours.ago)
domain = Addressable::URI.parse(provider.base_url).normalized_host
UnavailableDomain.create!(domain:)
end
it 'marks the provider as being available again' do
expect { subject }.to_not raise_error
expect(provider).to be_available
end
end
end

View File

@ -5,12 +5,14 @@ require 'rails_helper'
RSpec.describe Fasp::AccountSearchWorker, feature: :fasp do
include ProviderRequestHelper
subject { described_class.new.perform('cats') }
let(:provider) { Fabricate(:account_search_fasp) }
let(:account) { Fabricate(:account) }
let(:fetch_service) { instance_double(ActivityPub::FetchRemoteActorService, call: true) }
let(:path) { '/account_search/v0/search?term=cats&limit=10' }
let!(:stubbed_request) do
path = '/account_search/v0/search?term=cats&limit=10'
stub_provider_request(provider,
method: :get,
path:,
@ -25,7 +27,7 @@ RSpec.describe Fasp::AccountSearchWorker, feature: :fasp do
end
it 'requests search results and fetches received account uris' do
described_class.new.perform('cats')
subject
expect(stubbed_request).to have_been_made
expect(fetch_service).to have_received(:call).with('https://fedi.example.com/accounts/2')
@ -35,7 +37,7 @@ RSpec.describe Fasp::AccountSearchWorker, feature: :fasp do
it 'marks a running async refresh as finished' do
async_refresh = AsyncRefresh.create("fasp:account_search:#{Digest::MD5.base64digest('cats')}", count_results: true)
described_class.new.perform('cats')
subject
expect(async_refresh.reload).to be_finished
end
@ -43,8 +45,16 @@ RSpec.describe Fasp::AccountSearchWorker, feature: :fasp do
it 'tracks the number of fetched accounts in the async refresh' do
async_refresh = AsyncRefresh.create("fasp:account_search:#{Digest::MD5.base64digest('cats')}", count_results: true)
described_class.new.perform('cats')
subject
expect(async_refresh.reload.result_count).to eq 2
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:get, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end

View File

@ -5,15 +5,19 @@ require 'rails_helper'
RSpec.describe Fasp::AnnounceAccountLifecycleEventWorker do
include ProviderRequestHelper
subject { described_class.new.perform(account_uri, 'new') }
let(:account_uri) { 'https://masto.example.com/accounts/1' }
let(:subscription) do
Fabricate(:fasp_subscription, category: 'account')
end
let(:provider) { subscription.fasp_provider }
let(:path) { '/data_sharing/v0/announcements' }
let!(:stubbed_request) do
stub_provider_request(provider,
method: :post,
path: '/data_sharing/v0/announcements',
path:,
response_body: {
source: {
subscription: {
@ -27,8 +31,16 @@ RSpec.describe Fasp::AnnounceAccountLifecycleEventWorker do
end
it 'sends the account uri to subscribed providers' do
described_class.new.perform(account_uri, 'new')
subject
expect(stubbed_request).to have_been_made
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:post, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end

View File

@ -5,15 +5,19 @@ require 'rails_helper'
RSpec.describe Fasp::AnnounceContentLifecycleEventWorker do
include ProviderRequestHelper
subject { described_class.new.perform(status_uri, 'new') }
let(:status_uri) { 'https://masto.example.com/status/1' }
let(:subscription) do
Fabricate(:fasp_subscription)
end
let(:provider) { subscription.fasp_provider }
let(:path) { '/data_sharing/v0/announcements' }
let!(:stubbed_request) do
stub_provider_request(provider,
method: :post,
path: '/data_sharing/v0/announcements',
path:,
response_body: {
source: {
subscription: {
@ -27,8 +31,16 @@ RSpec.describe Fasp::AnnounceContentLifecycleEventWorker do
end
it 'sends the status uri to subscribed providers' do
described_class.new.perform(status_uri, 'new')
subject
expect(stubbed_request).to have_been_made
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:post, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end

View File

@ -5,6 +5,8 @@ require 'rails_helper'
RSpec.describe Fasp::AnnounceTrendWorker do
include ProviderRequestHelper
subject { described_class.new.perform(status.id, 'favourite') }
let(:status) { Fabricate(:status) }
let(:subscription) do
Fabricate(:fasp_subscription,
@ -14,10 +16,12 @@ RSpec.describe Fasp::AnnounceTrendWorker do
threshold_likes: 2)
end
let(:provider) { subscription.fasp_provider }
let(:path) { '/data_sharing/v0/announcements' }
let!(:stubbed_request) do
stub_provider_request(provider,
method: :post,
path: '/data_sharing/v0/announcements',
path:,
response_body: {
source: {
subscription: {
@ -36,15 +40,23 @@ RSpec.describe Fasp::AnnounceTrendWorker do
end
it 'sends the account uri to subscribed providers' do
described_class.new.perform(status.id, 'favourite')
subject
expect(stubbed_request).to have_been_made
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:post, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end
context 'when the configured threshold is not met' do
it 'does not notify any provider' do
described_class.new.perform(status.id, 'favourite')
subject
expect(stubbed_request).to_not have_been_made
end

View File

@ -5,13 +5,17 @@ require 'rails_helper'
RSpec.describe Fasp::BackfillWorker do
include ProviderRequestHelper
subject { described_class.new.perform(backfill_request.id) }
let(:backfill_request) { Fabricate(:fasp_backfill_request) }
let(:provider) { backfill_request.fasp_provider }
let(:status) { Fabricate(:status) }
let(:path) { '/data_sharing/v0/announcements' }
let!(:stubbed_request) do
stub_provider_request(provider,
method: :post,
path: '/data_sharing/v0/announcements',
path:,
response_body: {
source: {
backfillRequest: {
@ -25,8 +29,16 @@ RSpec.describe Fasp::BackfillWorker do
end
it 'sends status uri to provider that requested backfill' do
described_class.new.perform(backfill_request.id)
subject
expect(stubbed_request).to have_been_made
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:post, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end

View File

@ -5,13 +5,15 @@ require 'rails_helper'
RSpec.describe Fasp::FollowRecommendationWorker, feature: :fasp do
include ProviderRequestHelper
subject { described_class.new.perform(account.id) }
let(:provider) { Fabricate(:follow_recommendation_fasp) }
let(:account) { Fabricate(:account) }
let(:account_uri) { ActivityPub::TagManager.instance.uri_for(account) }
let(:fetch_service) { instance_double(ActivityPub::FetchRemoteActorService) }
let(:path) { "/follow_recommendation/v0/accounts?accountUri=#{URI.encode_uri_component(account_uri)}" }
let!(:stubbed_request) do
account_uri = ActivityPub::TagManager.instance.uri_for(account)
path = "/follow_recommendation/v0/accounts?accountUri=#{URI.encode_uri_component(account_uri)}"
stub_provider_request(provider,
method: :get,
path:,
@ -28,7 +30,7 @@ RSpec.describe Fasp::FollowRecommendationWorker, feature: :fasp do
end
it "sends the requesting account's uri to provider and fetches received account uris" do
described_class.new.perform(account.id)
subject
expect(stubbed_request).to have_been_made
expect(fetch_service).to have_received(:call).with('https://fedi.example.com/accounts/1')
@ -38,7 +40,7 @@ RSpec.describe Fasp::FollowRecommendationWorker, feature: :fasp do
it 'marks a running async refresh as finished' do
async_refresh = AsyncRefresh.create("fasp:follow_recommendation:#{account.id}", count_results: true)
described_class.new.perform(account.id)
subject
expect(async_refresh.reload).to be_finished
end
@ -46,14 +48,22 @@ RSpec.describe Fasp::FollowRecommendationWorker, feature: :fasp do
it 'tracks the number of fetched accounts in the async refresh' do
async_refresh = AsyncRefresh.create("fasp:follow_recommendation:#{account.id}", count_results: true)
described_class.new.perform(account.id)
subject
expect(async_refresh.reload.result_count).to eq 2
end
it 'persists the results' do
expect do
described_class.new.perform(account.id)
subject
end.to change(Fasp::FollowRecommendation, :count).by(2)
end
describe 'provider delivery failure handling' do
let(:base_stubbed_request) do
stub_request(:get, provider.url(path))
end
it_behaves_like('worker handling fasp delivery failures')
end
end

View File

@ -73,6 +73,7 @@ export const config: UserConfigFnPromise = async ({ mode, command }) => {
port: 3036,
},
build: {
target: 'modules',
commonjsOptions: { transformMixedEsModules: true },
chunkSizeWarningLimit: 1 * 1024 * 1024, // 1MB
sourcemap: true,

1061
yarn.lock

File diff suppressed because it is too large Load Diff