%div - if defined?(title) %h3= title - if defined?(text) %p= text + /[if mso] + | %div - - if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked - = render 'application/mailer/button', text: button_text, url: button_url + - if defined?(show_apps_buttons) && show_apps_buttons + .email-welcome-apps-btns + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' + - elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked + = render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false + /[if mso] + |
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(feature_title) + %h2.email-h2= feature_title + - if defined?(feature_text) + %p.email-p= feature_text + - if defined?(feature_btn_url) + = link_to '', href: feature_btn_url, class: 'email-link-with-arrow' do + #{t('user_mailer.welcome.feature_action')} + %span= '❯' + /[if mso] + | + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(key) + %p{ class: ('email-desktop-text-right' if defined?(text_first_on_desktop) && text_first_on_desktop) } + = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}.png"), alt: '', width: 240, height: 230 + /[if mso] + |
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.follows_title') + %p.email-h-sub= t('user_mailer.welcome.follows_subtitle') + = render partial: 'application/mailer/follow', collection: @suggestions + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/suggestions'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.follows_view_more') + %span= '❯' + /[if mso] + | + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.hashtags_title') + %p.email-h-sub= t('user_mailer.welcome.hashtags_subtitle') + = render partial: 'application/mailer/hashtag', collection: @tags + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/tags'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.hashtags_view_more') + %span= '❯' + /[if mso] + |
tootctl search deploy --only=%{value}
+ message_html: Речниковите съответствия в Elasticsearch са с изтекла давност. Пуснете tootctl search deploy --only=%{value}
elasticsearch_preset:
action: Преглед на документацията
message_html: Вашият клъстер в Elasticsearch има повече от един възел, но Mastodon не е настроен да ги употребява.
@@ -905,14 +905,14 @@ bg:
statuses:
allow: Позволяване на публикацията
allow_account: Позволяване на автора
- description_html: Има публикации, за които сървърът ви знае, че в момента са често споделяни или означавани като любими. Биха помогнали на вашите нови и завръщащи се потребители да открият повече хора за последване. Никоя от публикациите няма да бъде показана публично, докато не одобрите автора и докато авторът не позволи акаунтът му да бъде предлган на другите. Може още да позволявате или отхвърляте отделни публикации.
+ description_html: Това са публикации, за които сървърът ви знае, че са често споделяни или харесвани в момента. Това може да помогне на вашите нови и завръщащи се потребители да открият повече хора за следване. Никоя от публикациите няма да бъде показана публично, докато не одобрите автора и докато авторът не позволи акаунтът му да бъде предлган на другите. Също така можете да позволявате или отхвърляте отделни публикации.
disallow: Забраняване на публикацията
disallow_account: Забрана на автора
no_status_selected: Няма промяна, тъй като няма избрана нашумяла публикация
not_discoverable: Авторът не е избрал да е откриваем
shared_by:
- one: Споделено или сложено веднъж в любими
- other: Споделено или сложено в любими %{friendly_count} пъти
+ one: Споделено или харесано веднъж
+ other: Споделено или харесано %{friendly_count} пъти
title: Налагащи се публикации
tags:
current_score: Текущ резултат %{score}
@@ -1009,7 +1009,7 @@ bg:
remove: Разкачвне на псевдонима
appearance:
advanced_web_interface: Разширен уеб интерфейс
- advanced_web_interface_hint: 'Ако желаете да се възползвате от пълната ширина на своя екран, разширеният уеб интерфейс ще ви позволи да настроите най-различни колони, за да виждате едновременно множество информация: Начало, известия, федериран инфопоток, множество списъци и хаштагове.'
+ advanced_web_interface_hint: 'Ако желаете да се възползвате от цялата ширина на своя екран, разширеният уеб интерфейс ще ви позволи да настроите няколко различни колони, за да виждате едновременно различна информация: Начало, известия, федерирана хронология, множество списъци и хаштагове.'
animations_and_accessibility: Анимация и достъпност
confirmation_dialogs: Диалогов прозорец за потвърждение
discovery: Откриване
@@ -1231,13 +1231,13 @@ bg:
add_new: Добавяне на нов
errors:
limit: Вече достигнахте максималния брой хаштагове
- hint_html: "Какво представляват актуалните хаштагове? Те се показват ясно на вашия публичен профил и позволяват на хората да преглеждат публичните ви публикации с тези хаштагове. Те са чудесен инструмент, с който може да се следи творческа работа или дългосрочни проекти."
+ hint_html: "Изтъкнете най-важните си хаштагове на профила? Чудесен инструмент за организиране на вашите творби и дългосрочни проекти, изтъкнатите хаштагове са отчетливо видими на вашия профил и позволяват лесен достъп до вашите собствени публикации."
filters:
contexts:
account: Профили
home: Начало и списъци
notifications: Известия
- public: Публични инфопотоци
+ public: Публични хронологии
thread: Разговори
edit:
add_keyword: Добавяне на ключова дума
@@ -1400,11 +1400,11 @@ bg:
confirmation_html: Наистина ли искате да спрете абонамента от получаването на %{type} за Mastodon в %{domain} към имейла си при %{email}? Може винаги пак да се абонирате от своите настройки за известяване по е-поща.
emails:
notification_emails:
- favourite: е-писма с любими известия
+ favourite: е-писма за харесани известия
follow: е-писма с известия за последване
follow_request: е-писма със заявки за следване
mention: е-писма с известия за споменаване
- reblog: е-писма с известия за подсилване
+ reblog: е-писма с известия за раздуване
resubscribe_html: Ако погрешка сте спрели абонамента, то може пак да се абонирате от своите настройки за известия по е-поща.
success_html: Повече няма да получавате %{type} за Mastodon в %{domain} към имейла си при %{email}.
title: Спиране на абонамента
@@ -1459,9 +1459,9 @@ bg:
sign_up:
subject: "%{name} се регистрира"
favourite:
- body: 'Вашата публикация беше добавена в любими от %{name}:'
+ body: 'Вашата публикация беше харесана от %{name}:'
subject: "%{name} хареса вашата публикация"
- title: Нова любима публикация
+ title: Нова харесана публикация
follow:
body: "%{name} те последва!"
subject: "%{name} те последва"
@@ -1479,9 +1479,9 @@ bg:
poll:
subject: Анкетата от %{name} приключи
reblog:
- body: 'Ваша публикация беше подсилена от %{name}:'
- subject: "%{name} подсили ваша публикация"
- title: Ново подсилване
+ body: 'Ваша публикация беше раздута от %{name}:'
+ subject: "%{name} разду ваша публикация"
+ title: Ново раздуване
status:
subject: "%{name} току-що публикува"
update:
@@ -1530,7 +1530,7 @@ bg:
preferences:
other: Друго
posting_defaults: По подразбиране за публикации
- public_timelines: Публични инфопотоци
+ public_timelines: Публични хронологии
privacy:
hint_html: "Персонализирайте как искате профилът ви и публикациите ви да се намират. Разнообразие от функции в Mastodon може да ви помогнат да достигнете по-широка публика, когато е включено. Отделете малко време, за да прегледате тези настройки, за да се уверите, че отговарят на вашия случай на употреба."
privacy: Поверителност
@@ -1668,7 +1668,7 @@ bg:
video:
one: "%{count} видео"
other: "%{count} видеозаписа"
- boosted_from_html: Подсилено от %{acct_link}
+ boosted_from_html: Раздуто от %{acct_link}
content_warning: 'Предупреждение за съдържание: %{warning}'
default_language: Същият като езика на интерфейса
disallowed_hashtags:
@@ -1680,10 +1680,10 @@ bg:
open_in_web: Отвори в уеб
over_character_limit: прехвърлен лимит от %{max} символа
pin_errors:
- direct: Публикациите, които са видими само за споменати потребители не може да се закачат
+ direct: Публикациите, които са видими само за потребители споменати в тях, не могат да бъдат закачани
limit: Вече сте закачили максималния брой публикации
- ownership: Публикация на някого другиго не може да се закачи
- reblog: Подсилване не може да се закача
+ ownership: Публикация на някого другиго не може да бъде закачена
+ reblog: Раздуване не може да бъде закачано
poll:
total_people:
one: "%{count} човек"
@@ -1704,27 +1704,27 @@ bg:
public: Публично
public_long: Всеки ги вижда
unlisted: Публично, но не показвай в публичния канал
- unlisted_long: Всеки ги вижда, но са скрити от публичните инфопотоци
+ unlisted_long: Всеки ги вижда, но са скрити от публичните хронологии
statuses_cleanup:
enabled: Автоматично изтриване на стари публикации
enabled_hint: От само себе си трие публикациите ви, щом достигнат указания възрастов праг, освен ако не съвпаднат с някое от изключенията долу
exceptions: Изключения
explanation: Тъй като изтриването на публикации е скъпа операция, това се прави бавно във времето, когато сървърът иначе не е зает. Поради тази причина публикациите ви може да се изтрият известно време след като достигнат възрастовия праг.
ignore_favs: Игнориране на харесвания
- ignore_reblogs: Игнориране на подсилвания
+ ignore_reblogs: Игнориране на раздувания
interaction_exceptions: Изключения въз основа на взаимодействия
- interaction_exceptions_explanation: Забележете, че няма гаранция, че публикацията ще се изтрият, ако паднат под прага на брой маркирания като любими/подсилвания, след като са го надвишили.
+ interaction_exceptions_explanation: Забележете, че няма гаранция, че публикациите ще бъдат изтрити, ако паднат под прага на брой маркирания като харесвани или раздувани, след като са го надвишили.
keep_direct: Запазване на директните съобщения
keep_direct_hint: Директните ви съобщения не се изтриват
keep_media: Задържане на публикации с прикачена мултимедия
keep_media_hint: Не изтрива публикации, които съдържат мултимедийни прикачвания
- keep_pinned: Запазване на закачените публикации
- keep_pinned_hint: Не изтрива закачени публикации
+ keep_pinned: Задържане на закачените публикации
+ keep_pinned_hint: Не изтрива закачените ви публикации
keep_polls: Запазване на запитванията
keep_polls_hint: Не изтрива запитвания
keep_self_bookmark: Запазване на публикации, добавени в отметки
keep_self_bookmark_hint: Не се изтриват ваши публикации, ако сте ги добавили към отметки
- keep_self_fav: Запазване на публикации, които сте маркирали като любими
+ keep_self_fav: Задържане на публикации, които сте харесали
keep_self_fav_hint: Не се изтриват публикации, които сте харесали
min_age:
'1209600': 2 седмици
@@ -1736,10 +1736,10 @@ bg:
'63113904': 2 години
'7889238': 3 месеца
min_age_label: Възрастов праг
- min_favs: Запазване на публикации, маркирани като любими поне
- min_favs_hint: Не се изтриват никоя от публикациите ви, маркирани като любими поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя маркирания като любими
- min_reblogs: Запазване на публикации с поне толкова споделяния
- min_reblogs_hint: Не се изтриват ваши публикации, споделени поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от техния брой споделяния
+ min_favs: Запазване на харесани публикации поне
+ min_favs_hint: Не се изтрива никоя от публикациите, които сте харесали поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя харесвания
+ min_reblogs: Запазване на публикации с поне толкова раздувания
+ min_reblogs_hint: Не се изтриват ваши публикации, споделени поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя на техния раздувания
stream_entries:
sensitive_content: Деликатно съдържание
strikes:
@@ -1841,10 +1841,6 @@ bg:
edit_profile_action: Настройване на профила
edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват.
explanation: Ето няколко стъпки за начало
- final_action: Начало на публикуване
- final_step: 'Публикувайте! Дори без последователи, вашите публични публикации ще бъдат видени от други, например в местния инфопоток или под хаштагове. Не забравяйте да се представите с хаштаг #introductions.'
- full_handle: Пълното ви име
- full_handle_hint: Ето какво бихте казали на приятелите си, за да могат да ви изпращат съобщения или да ви последват от друг сървър.
subject: Добре дошли в Mastodon
title: Добре дошли на борда, %{name}!
users:
diff --git a/config/locales/br.yml b/config/locales/br.yml
index d20609a8ce..01c6db4ef5 100644
--- a/config/locales/br.yml
+++ b/config/locales/br.yml
@@ -3,6 +3,7 @@ br:
about:
contact_missing: Andermenet
contact_unavailable: N'eus ket
+ hosted_on: Servijer Mastodon herberc'hiet war %{domain}
title: Diwar-benn
accounts:
follow: Heuliañ
@@ -135,6 +136,9 @@ br:
disputes:
appeals:
title: Galvoù
+ domain_allows:
+ export: Ezporzhiañ
+ import: Enporzhiañ
domain_blocks:
domain: Domani
new:
@@ -151,6 +155,8 @@ br:
domain: Domani
new:
create: Ouzhpenniñ un domani
+ export_domain_allows:
+ no_file: Restr ebet diuzet
follow_recommendations:
status: Statud
suppressed: Dilamet
@@ -265,10 +271,12 @@ br:
delete_statuses: Dilamet eo bet toudoù %{target} gant %{name}
trends:
allow: Aotren
+ approved: Aprouet
links:
allow: Aotren al liamm
preview_card_providers:
title: Embannerien·ezed
+ rejected: Nac'het
statuses:
allow: Aotren ar c'hannad
tags:
@@ -297,6 +305,9 @@ br:
title: Hashtagoù diouzh ar c'hiz
appearance:
discovery: Dizoloadur
+ localization:
+ body: Gant tud a-youl vat eo troet Mastodon.
+ guide_link: https://crowdin.com/project/mastodon
application_mailer:
view: 'Sellet :'
view_status: Gwelet ar c'hannad
@@ -373,10 +384,12 @@ br:
title: Toudoù silet
generic:
all: Pep tra
+ changes_saved_msg: Enrollet eo bet ar cheñchamantoù gant berzh!
copy: Eilañ
delete: Dilemel
none: Hini ebet
order_by: Urzhiañ dre
+ save_changes: Enrollañ ar cheñchamantoù
today: hiziv
imports:
modes:
@@ -488,6 +501,7 @@ br:
settings:
account: Kont
account_settings: Arventennoù ar gont
+ back: Distreiñ da vMastodon
development: Diorren
edit_profile: Kemmañ ar profil
featured_tags: Hashtagoù pennañ
@@ -521,13 +535,14 @@ br:
'604800': 1 sizhunvezh
'63113904': 2 vloavezh
themes:
- default: Mastodoñ (Teñval)
- mastodon-light: Mastodoñ (Sklaer)
+ default: Mastodon (Teñval)
+ mastodon-light: Mastodon (Sklaer)
time:
formats:
default: "%d a viz %b %Y, %H:%M"
month: Miz %b %Y
time: "%H:%M"
+ with_time_zone: "%d a viz %b %Y, %H:%M %Z"
two_factor_authentication:
add: Ouzhpennañ
disable: Diweredekaat
@@ -546,7 +561,7 @@ br:
none: Diwall
welcome:
edit_profile_action: Kefluniañ ar profil
- subject: Donemat e Mastodoñ
+ subject: Donemat e Mastodon
title: Degemer mat e bourzh, %{name}!
users:
follow_limit_reached: N'hallit ket heulian muioc'h eget %{limit} a zen
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 58f6e26374..d80fb598e3 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -767,6 +767,7 @@ ca:
disabled: Per a ningú
users: Per als usuaris locals en línia
registrations:
+ moderation_recommandation: Assegureu-vos de tenir un equip de moderadors adient i actiu abans d'obrir l'alta de comptes al públic!
preamble: Controla qui pot crear un compte en el teu servidor.
title: Registres
registrations_mode:
@@ -774,6 +775,7 @@ ca:
approved: Cal l’aprovació per a registrar-se
none: No es pot registrar ningú
open: Qualsevol pot registrar-se
+ warning_hint: Recomanem utilitzar l'opció "Es requereix aprovació per a donar-se d'alta" si no teniu un equip de moderadors que puguin gestionar els enviaments de brossa o maliciosos en un temps raonable.
security:
authorized_fetch: Requereix autenticació dels servidors federats
authorized_fetch_hint: Requerir l'autenticació dels servidors federats permet una aplicació més estricta dels bloqueigs a nivell d'usuari i a nivell de servidor. Tanmateix, això provoca una penalització del rendiment, redueix l'abast de les seves respostes i pot introduir problemes de compatibilitat amb alguns serveis federats. A més, això no impedirà que els actors dedicats busquin les teves publicacions i comptes públics.
@@ -966,6 +968,9 @@ ca:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: A causa de la manca d'activitat recent dels moderadors, s'ha passat el procés d'alta de %{instance} al mode de revisió manual, a fi d'evitar que malfactors l'utilitzin com a plataforma. Podeu obrir el procés de registre en qualsevol moment.
+ subject: S'ha passat el procés d'alta de %{instance} al mode de validació manual
new_appeal:
actions:
delete_statuses: eliminar els seus tuts
@@ -1548,7 +1553,7 @@ ca:
unrecognized_emoji: no és un emoji reconegut
redirects:
prompt: Si confieu en aquest enllaç, feu-hi clic per a continuar.
- title: Esteu sortint de %{instance}.
+ title: Deixeu %{instance}.
relationships:
activity: Activitat del compte
confirm_follow_selected_followers: Segur que vols seguir els seguidors seleccionats?
@@ -1841,10 +1846,6 @@ ca:
edit_profile_action: Configura el perfil
edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir.
explanation: Aquests són alguns consells per a començar
- final_action: Comença a publicar
- final_step: 'Comença a publicar! Fins i tot sense seguidors, els altres poden veure els teus missatges públics, per exemple, a la línia de temps local i a les etiquetes. És possible que vulguis presentar-te amb l''etiqueta #introductions.'
- full_handle: El teu nom d'usuari sencer
- full_handle_hint: Això és el que has de dir als teus amics perquè puguin enviar-te missatges o seguir-te des d'un altre servidor.
subject: Et donem la benvinguda a Mastodon
title: Benvingut a bord, %{name}!
users:
diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml
index 7905024381..fec8f73323 100644
--- a/config/locales/ckb.yml
+++ b/config/locales/ckb.yml
@@ -521,11 +521,14 @@ ckb:
all: بۆ هەموو کەسێک
disabled: بۆ هیچ کەسێک
users: بۆ چوونە ژوورەوەی بەکارهێنەرانی ناوخۆ
+ registrations:
+ moderation_recommandation: تکایە دڵنیابە پێش ئەوەی ناو تۆمارکردن بۆ هەمووان بکەیتەوە، تیمێکی میانڕەوی گونجاو و کاردانەوەتان هەیە!
registrations_mode:
modes:
approved: پەسەندکردنی داواکراو بۆ ناوتۆمارکردن
none: کەس ناتوانێت خۆی تۆمار بکات
open: هەر کەسێک دەتوانێت خۆی تۆمار بکات
+ warning_hint: پێشنیار دەکەین "ڕەزامەندی پێویستە بۆ ناو تۆمارکردن" بەکاربهێنیت مەگەر دڵنیا بیت کە تیمی بەڕێوەبردنەکەت دەتوانێت لە کاتی خۆیدا مامەڵە لەگەڵ سپام و تۆمارکردنی زیانبەخشدا بکات.
site_uploads:
delete: سڕینەوەی فایلی بارکراو
destroyed_msg: بارکردنی ماڵپەڕ بە سەرکەوتوویی سڕدراوەتەوە!
@@ -1032,9 +1035,6 @@ ckb:
welcome:
edit_profile_action: پرۆفایلی جێگیرکردن
explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت
- final_action: دەست بکە بە بڵاوکردنەوە
- full_handle: ناوی بەکارهێنەری تەواوی ئێوە
- full_handle_hint: ئەمە ئەو شتەیە کە بە هاوڕێکانت دەلێی بۆ ئەوەی پەیام یان لە ڕاژەیەکی دیکەی ترەوە بەدوات بکەون.
subject: بەخێربیت بۆ ماستۆدۆن
title: بەخێربێیت، بەکارهێنەر %{name}!
users:
diff --git a/config/locales/co.yml b/config/locales/co.yml
index f5b6b46d92..c3c185c2f5 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -1050,9 +1050,6 @@ co:
welcome:
edit_profile_action: Cunfigurazione di u prufile
explanation: Eccu alcune idee per principià
- final_action: Principià à pustà
- full_handle: U vostru identificatore cumplettu
- full_handle_hint: Quessu ghjè cio chì direte à i vostri amichi per circavi, abbunassi à u vostru contu da altrò, o mandà missaghji.
subject: Benvenutu·a nant’à Mastodon
title: Benvenutu·a, %{name}!
users:
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index eafbead761..69640a261f 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -439,6 +439,7 @@ cs:
view: Zobrazit blokaci domény
email_domain_blocks:
add_new: Přidat
+ allow_registrations_with_approval: Povolit registrace se schválením
attempts_over_week:
few: "%{count} pokusy o registraci za poslední týden"
many: "%{count} pokusů o registraci za poslední týden"
@@ -635,6 +636,7 @@ cs:
created_at: Nahlášené
delete_and_resolve: Smazat příspěvky
forwarded: Přeposláno
+ forwarded_replies_explanation: Toto hlášení je od uživatele z jiného serveru, a je o obsahu z jeho serveru. Byl převeden na vás, protože nahlášený obsah odpovídá jednomu z vašich uživatelů.
forwarded_to: Přeposláno na %{domain}
mark_as_resolved: Označit jako vyřešené
mark_as_sensitive: Označit jako citlivé
@@ -645,7 +647,7 @@ cs:
create_and_resolve: Vyřešit s poznámkou
create_and_unresolve: Znovu otevřít s poznámkou
delete: Smazat
- placeholder: Popište, jaké akce byly vykonány, nebo jakékoliv jiné související aktuality…
+ placeholder: Popište, jaké akce byly vykonány, nebo jakékoliv jiné související aktuality...
title: Poznámky
notes_description_html: Zobrazit a zanechat poznámky pro ostatní moderátory i sebe v budoucnu
processed_msg: Nahlášení č.%{id} bylo úspěšně zpracováno
@@ -714,7 +716,7 @@ cs:
administrator_description: Uživatelé s tímto oprávněním obejdou všechna oprávnění
delete_user_data: Mazat uživatelská data
delete_user_data_description: Umožňuje uživatelům bezodkladně mazat data jiných uživatelů
- invite_users: Zvát uživatele
+ invite_users: Pozvat uživatele
invite_users_description: Umožňuje uživatelům zvát na server nové lidi
manage_announcements: Spravovat oznámení
manage_announcements_description: Umožňuje uživatelům spravovat oznámení na serveru
@@ -793,22 +795,27 @@ cs:
disabled: Nikomu
users: Přihlášeným místním uživatelům
registrations:
+ moderation_recommandation: Před otevřením registrací všem se ujistěte, že máte vhodný a reaktivní moderační tým!
preamble: Mějte pod kontrolou, kdo může vytvořit účet na vašem serveru.
title: Registrace
registrations_mode:
modes:
- approved: Pro registraci je vyžadováno schválení
+ approved: Schválení požadované pro registraci
none: Nikdo se nemůže registrovat
open: Kdokoliv se může registrovat
+ warning_hint: Doporučujeme použít "Schválení požadované pro registraci", pokud si nejste jistí, že váš moderační tým dokáže včas zpracovat spam a škodlivé registrace.
security:
authorized_fetch: Vyžadovat autentizaci od federovaných serverů
+ authorized_fetch_hint: Vyžadování ověřování pravosti od federalizovaných serverů umožňuje přísnější prosazování uživatelských i serverních bloků. K tomu však dochází k snížení výkonu, snižení dosah vašich odpovědí a můžou se zavést problémy s kompatibilitou s některými federálními službami. Kromě toho to nebude bránit oddaným uživatelům či robotům v načítání vašich veřejných příspěvků a účtů.
authorized_fetch_overridden_hint: Momentálně nemůžete změnit toto nastavení, protože je přepsáno proměnnou prostředí.
+ federation_authentication: Uplatnění ověřování pravosti federace
title: Nastavení serveru
site_uploads:
delete: Odstranit nahraný soubor
destroyed_msg: Upload stránky byl úspěšně smazán!
software_updates:
critical_update: Kritické — aktualizujte, prosím, co nejdříve
+ description: Doporučujeme udržovat vaši instalaci Mastodonu aktuální, aby se využily nejnovější opravy a funkce. Kromě toho je někdy velmi důležité včas aktualizovat Mastodon, aby se předešlo bezpečnostním problémům. Z těchto důvodů Mastodon kontroluje aktualizace každých 30 minut a bude vás informovat podle nastavení e-mailových oznámení.
documentation_link: Zjistit více
release_notes: Poznámky k vydání
title: Dostupné aktualizace
@@ -997,6 +1004,9 @@ cs:
title: Webhooky
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Kvůli nedostatku nedávných aktivit od moderátorů byly registrace na %{instance} automaticky přepnuty na vyžadující manuální kontrolu. aby se zabránilo použití %{instance} jako platformy pro potenciálně škodlivých hráčů. Můžete ji kdykoliv přepnout zpět na otevřené registrace.
+ subject: Registrace pro %{instance} byly automaticky přepnuty na vyžadující schválení
new_appeal:
actions:
delete_statuses: smazání jeho příspěvků
@@ -1072,8 +1082,12 @@ cs:
hint_html: Ještě jedna věc! Musíme potvrdit, že jste člověk (to proto, abychom drželi stranou spam!). Vyřešte CAPTCHA níže a klikněte na "Pokračovat".
title: Bezpečnostní kontrola
confirmations:
+ awaiting_review: Vaše e-mailová adresa je potvrzena! Personál %{domain} nyní kontrolují vaši registraci. Pokud váš účet schválí, obdržíte e-mail!
awaiting_review_title: Vaše registrace se ověřuje
clicking_this_link: kliknutím na tento odkaz
+ login_link: přihlásit se
+ proceed_to_login_html: Nyní můžete pokračovat do %{login_link}.
+ redirect_to_app_html: Měli byste být přesměrováni do aplikace %{app_name}. Pokud se tak nestalo, zkuste %{clicking_this_link} nebo ručně se vrátit do aplikace.
registration_complete: Vaše registrace na %{domain} je hotová!
welcome_title: Vítám uživatele %{name}!
wrong_email_hint: Pokud není e-mail správný, můžete si ho změnit v nastavení účtu.
@@ -1244,7 +1258,7 @@ cs:
date: Datum
download: Stáhnout váš archiv
hint_html: Můžete si vyžádat archiv vašich příspěvků a nahraných médií. Exportovaná data budou ve formátu ActivityPub a budou čitelná kterýmkoliv kompatibilním softwarem. Archiv si můžete vyžádat každých 7 dní.
- in_progress: Kompiluji váš archiv…
+ in_progress: Kompilujeme váš archiv...
request: Vyžádat váš archiv
size: Velikost
blocks: Blokujete
@@ -1354,6 +1368,20 @@ cs:
merge_long: Ponechat existující záznamy a přidat nové
overwrite: Přepsat
overwrite_long: Nahradit aktuální záznamy novými
+ overwrite_preambles:
+ blocking_html: Chystáte se nahradit váš seznam bloků s %{total_items} účtami od %{filename}.
+ bookmarks_html: Chystáte se nahradit své záložky s %{total_items} příspěvků z %{filename}.
+ domain_blocking_html: Chystáte se nahradit seznam stránek s %{total_items} stránek z %{filename}.
+ following_html: Chystáte se sledovat až %{total_items} účtů z %{filename} a přestanete sledovat všechny ostatní.
+ lists_html: Chystáte se nahradit své seznamy obsahem %{filename}. Až %{total_items} účtů budou přidány do nových seznamů.
+ muting_html: Chystáte se nahradit seznam skrytých účtů s %{total_items} účtami z %{filename}.
+ preambles:
+ blocking_html: Chystáte se blokovat až %{total_items} účtů z %{filename}.
+ bookmarks_html: Chystáte se přidat až %{total_items} příspěvků z %{filename} do vašich záložek.
+ domain_blocking_html: Chystáte se blokovat až %{total_items} stránek z %{filename}.
+ following_html: Chystáte se sledovat až %{total_items} účtů z %{filename}.
+ lists_html: Chystáte se přidat %{total_items} účtů z %{filename} do vaších seznamů. Nové seznamy budou vytvořeny, pokud neexistuje žádný seznam, do kterého by bylo možné přidat.
+ muting_html: Chystáte se skrýt až %{total_items} účtů z %{filename}.
preface: Můžete importovat data, která jste exportovali z jiného serveru, jako například seznam lidí, které sledujete či blokujete.
recent_imports: Nedávné importy
states:
@@ -1369,8 +1397,12 @@ cs:
bookmarks: Import záložek
domain_blocking: Import blokovaných domén
following: Import sledovaných účtů
- muting: Import ztlumených účtů
+ lists: Příjmání seznamů
+ muting: Dovoz skrytých uživatelů
type: Typ importu
+ type_groups:
+ constructive: Sledování a Záložky
+ destructive: Bloky & skrytí
types:
blocking: Seznam blokovaných
bookmarks: Záložky
@@ -1391,6 +1423,7 @@ cs:
'86400': 1 den
expires_in_prompt: Nikdy
generate: Vygenerovat zvací odkaz
+ invalid: Tato pozvánka není platná
invited_by: 'Pozval váš uživatel:'
max_uses:
few: "%{count} použití"
@@ -1417,6 +1450,21 @@ cs:
failed_sign_in_html: Neúspěšný pokus o přihlášení %{method} z %{ip} (%{browser})
successful_sign_in_html: Úspěšné přihlášení %{method} z %{ip} (%{browser})
title: Historie přihlášení
+ mail_subscriptions:
+ unsubscribe:
+ action: Ano, odeberte odběr
+ complete: Odběr byl odhlášen
+ confirmation_html: Opravdu nechcete dostávat %{type} pro Mastodon na %{domain} na váš e-mail %{email}? Vždy se můžete opět přihlásit do nastavení e-mailových oznámení.
+ emails:
+ notification_emails:
+ favourite: e-mailové oznámení při oblíbení
+ follow: e-mailové oznámení při sledování
+ follow_request: e-mail při žádost o sledování
+ mention: e-mailové oznámení při zmínění
+ reblog: e-mailové oznámení při boostu
+ resubscribe_html: Při omylu se můžete znovu přihlásit do vaších nastavení e-mailových oznámení.
+ success_html: Již nebudete dostávat %{type} pro Mastodon na %{domain} na vaší e-mailové adrese %{email}.
+ title: Odhlásit odběr
media_attachments:
validations:
images_and_video: K příspěvku, který již obsahuje obrázky, nelze připojit video
@@ -1496,6 +1544,7 @@ cs:
update:
subject: Uživatel %{name} upravil příspěvek
notifications:
+ administration_emails: E-mailová oznámení administrátora
email_events: Události pro e-mailová oznámení
email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:'
other_settings: Další nastavení oznámení
@@ -1554,6 +1603,9 @@ cs:
errors:
limit_reached: Dosažen limit různých reakcí
unrecognized_emoji: není známý smajlík
+ redirects:
+ prompt: Pokud tomuto odkazu důvěřujete, klikněte na něj a pokračujte.
+ title: Odcházíte z %{instance}.
relationships:
activity: Aktivita účtu
confirm_follow_selected_followers: Jste si jisti, že chcete sledovat vybrané sledující?
@@ -1616,6 +1668,7 @@ cs:
unknown_browser: Neznámý prohlížeč
weibo: Weibo
current_session: Aktuální relace
+ date: Datum
description: "%{browser} na systému %{platform}"
explanation: Tohle jsou webové prohlížeče aktuálně přihlášené na váš účet Mastodon.
ip: IP adresa
@@ -1772,8 +1825,10 @@ cs:
default: "%d. %b %Y, %H:%M"
month: "%b %Y"
time: "%H:%M"
+ with_time_zone: "%b %d, %Y, %H:%M %Z"
translation:
errors:
+ quota_exceeded: Byla vyčerpaná kvóta pro využívání překládací služby na úrovni serveru.
too_many_requests: Na překladatelskou službu bylo zasláno v poslední době příliš mnoho požadavků.
two_factor_authentication:
add: Přidat
@@ -1792,16 +1847,27 @@ cs:
webauthn: Bezpečnostní klíče
user_mailer:
appeal_approved:
+ action: Možnosti Účtu
explanation: Odvolání proti prohřešku vašeho účtu ze dne %{strike_date}, které jste podali %{appeal_date}, bylo schváleno. Váš účet je opět v pořádku.
subject: Vaše odvolání ze dne %{date} bylo schváleno
+ subtitle: Váš účet je opět v dobrém stavu.
title: Odvolání schváleno
appeal_rejected:
explanation: Odvolání proti prohřešku vašeho účtu ze dne %{strike_date}, které jste podali %{appeal_date}, bylo zamítnuto.
subject: Vaše odvolání z %{date} bylo zamítnuto
+ subtitle: Vaše odvolání bylo zamítnuto.
title: Odvolání zamítnuto
backup_ready:
+ explanation: Požádali jste o úplnou zálohu vašeho účtu Mastodon.
+ extra: Nyní je připraven ke stažení!
subject: Váš archiv je připraven ke stažení
title: Stažení archivu
+ failed_2fa:
+ details: 'Zde jsou podrobnosti o pokusu o přihlášení:'
+ explanation: Někdo se pokusil přihlásit k vašemu účtu, ale poskytl neplatný token Dvoufázového ověření.
+ further_actions_html: Pokud jste to nebyl, doporučujeme vám okamžitě %{action}, protože váš účet mohl být napaden.
+ subject: Druhý omyl při Dvoufázovém ověření
+ title: Omyl při Dvoufázovém ověření
suspicious_sign_in:
change_password: změnit vaše heslo
details: 'Tady jsou detaily přihášení:'
@@ -1844,10 +1910,6 @@ cs:
edit_profile_action: Nastavit profil
edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat.
explanation: Zde je pár tipů do začátku
- final_action: Začít psát
- final_step: 'Začněte psát příspěvky! I bez sledujících mohou vaše veřejné příspěvky vidět ostatní, například na místní časové ose nebo v hashtagu. Možná se budete chtít představit na hashtagu #představení.'
- full_handle: Vaše celá adresa profilu
- full_handle_hint: Tohle je, co byste řekli svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru.
subject: Vítejte na Mastodonu
title: Vítejte na palubě, %{name}!
users:
@@ -1855,10 +1917,13 @@ cs:
go_to_sso_account_settings: Přejděte do nastavení účtu poskytovatele identity
invalid_otp_token: Neplatný kód pro dvoufázové ověřování
otp_lost_help_html: Pokud jste ztratili přístup k oběma, spojte se s %{email}
+ rate_limited: Příliš mnoho pokusů o ověření, zkuste to znovu později.
seamless_external_login: Jste přihlášeni přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná.
signed_in_as: 'Přihlášeni jako:'
verification:
+ extra_instructions_html: Tip: Odkaz na vaší webové stránce může být neviditelný. Důležitou součástí je rel="me"
, která brání proti napodování vás na webových stránkách s obsahem vytvořeným uživatelem. Můžete dokonce použít odkaz
v záhlaví stránky místo a
, ale HTML musí být přístupné bez spuštění JavaScript.
here_is_how: Jak na to
+ hint_html: "Ověření Vaší identity na Mastodonu je pro každého výborné. Na základě otevřených webových standardů, nyní a navždy zdarma. Jediné, co potřebujete, je osobní webová stránka, na které vás lidé poznají. Když odkazujete na tuto stránku z vašeho profilu, zkontrolujeme, zda webové stránky odkazují na váš profil a zobrazí na něm vizuální indikátor."
instructions_html: Zkopírujte a vložte níže uvedený kód do HTML vašeho webu. Poté přidejte adresu vašeho webu do jednoho z extra políček na vašem profilu na záložce "Upravit profil" a uložte změny.
verification: Ověření
verified_links: Vaše ověřené odkazy
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 768dd3e0c8..19343146f3 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -823,6 +823,7 @@ cy:
disabled: I neb
users: I ddefnyddwyr lleol wedi'u mewngofnodi
registrations:
+ moderation_recommandation: Gwnewch yn siŵr bod gennych chi dîm cymedroli digonol ac adweithiol cyn i chi agor cofrestriadau i bawb!
preamble: Rheoli pwy all greu cyfrif ar eich gweinydd.
title: Cofrestriadau
registrations_mode:
@@ -830,6 +831,7 @@ cy:
approved: Mae angen cymeradwyaeth i gofrestru
none: Nid oes neb yn gallu cofrestru
open: Gall unrhyw un cofrestru
+ warning_hint: Rydym yn argymell defnyddio “Mae angen cymeradwyaeth ar gyfer cofrestru” oni bai eich bod yn hyderus y gall eich tîm cymedroli ymdrin â chofrestriadau sbam a rhai maleisus mewn modd amserol.
security:
authorized_fetch: Mae angen dilysu gan weinyddion ffederal
authorized_fetch_hint: Mae gofyn am ddilysiad gan weinyddion ffederal yn galluogi gorfodi llymach ar flociau lefel defnyddiwr a lefel gweinydd. Fodd bynnag, daw hyn ar gost perfformiad arafach, mae'n lleihau cyrhaeddiad eich atebion, a gall gyflwyno materion cydnawsedd gyda rhai gwasanaethau ffederal. Yn ogystal, ni fydd hyn yn atal actorion ymroddedig rhag estyn eich postiadau a'ch cyfrifon cyhoeddus.
@@ -1038,6 +1040,9 @@ cy:
title: Bachau Gwe
webhook: Bachyn Gwe
admin_mailer:
+ auto_close_registrations:
+ body: Oherwydd diffyg gweithgarwch cymedrolwr diweddar, mae cofrestriadau ar %{instance} wedi'u newid yn awtomatig i'r angen i gael adolygiad â llaw, er mwyn atal %{instance} rhag cael ei ddefnyddio fel llwyfan ar gyfer actorion drwg posibl. Gallwch ei newid yn ôl i agor cofrestriadau ar unrhyw adeg.
+ subject: Mae cofrestriadau ar gyfer %{instance} wedi'u newid yn awtomatig i'r angen i gael cymeradwyaeth
new_appeal:
actions:
delete_statuses: i ddileu eu postiadau
@@ -1650,6 +1655,9 @@ cy:
errors:
limit_reached: Cyrhaeddwyd terfyn y gwahanol adweithiau
unrecognized_emoji: nid yw'n emoji cydnabyddedig
+ redirects:
+ prompt: Os ydych chi'n ymddiried yn y ddolen hon, cliciwch arni i barhau.
+ title: Rydych chi'n gadael %{instance}.
relationships:
activity: Gweithgareddau cyfrif
confirm_follow_selected_followers: Ydych chi'n siŵr eich bod am ddilyn y dilynwyr a ddewiswyd?
@@ -1911,13 +1919,19 @@ cy:
appeal_rejected:
explanation: Mae apêl y rhybudd yn erbyn eich cyfrif ar %{strike_date} a gyflwynwyd gennych ar %{appeal_date} wedi'i gwrthod.
subject: Mae eich apêl ar %{date} wedi'i gwrthod
- subtitle: Mae eich apêl wedi'i gwrthod
+ subtitle: Mae eich apêl wedi'i gwrthod.
title: Mae'r apêl wedi'i gwrthod
backup_ready:
explanation: Rydych wedi gofyn am gopi wrth gefn llawn o'ch cyfrif Mastodon.
extra: Mae nawr yn barod i'w lwytho i lawr!
subject: Mae eich archif yn barod i'w lawrlwytho
title: Allfudo archif
+ failed_2fa:
+ details: 'Dyma fanylion yr ymgais i fewngofnodi:'
+ explanation: Mae rhywun wedi ceisio mewngofnodi i'ch cyfrif ond wedi darparu ail ffactor dilysu annilys.
+ further_actions_html: Os nad chi oedd hwn, rydym yn argymell eich bod yn %{action} ar unwaith oherwydd gall fod o dan fygythiad.
+ subject: Methiant dilysu ail ffactor
+ title: Wedi methu dilysu ail ffactor
suspicious_sign_in:
change_password: newidiwch eich cyfrinair
details: 'Dyma fanylion y mewngofnodi:'
@@ -1960,10 +1974,6 @@ cy:
edit_profile_action: Sefydlu proffil
edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn.
explanation: Dyma ambell nodyn i'ch helpu i ddechrau
- final_action: Dechrau postio
- final_step: 'Dechreuwch bostio! Hyd yn oed heb ddilynwyr, efallai y bydd eraill yn gweld eich postiadau cyhoeddus, er enghraifft ar y ffrwd leol neu mewn hashnodau. Efallai y byddwch am gyflwyno eich hun ar yr hashnod #cyflwyniadau neu/a #introductions.'
- full_handle: Eich enw llawn
- full_handle_hint: Dyma beth fyddech chi'n ei ddweud wrth eich ffrindiau fel y gallant anfon neges neu eich dilyn o weinydd arall.
subject: Croeso i Mastodon
title: Croeso, %{name}!
users:
@@ -1971,6 +1981,7 @@ cy:
go_to_sso_account_settings: Ewch i osodiadau cyfrif eich darparwr hunaniaeth
invalid_otp_token: Côd dau-ffactor annilys
otp_lost_help_html: Os colloch chi fynediad i'r ddau, mae modd i chi gysylltu a %{email}
+ rate_limited: Gormod o geisiadau dilysu, ceisiwch eto yn nes ymlaen.
seamless_external_login: Yr ydych wedi'ch mewngofnodi drwy wasanaeth allanol, felly nid yw gosodiadau cyfrinair ac e-bost ar gael.
signed_in_as: 'Wedi mewngofnodi fel:'
verification:
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 57899d5f71..62e28cef16 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -500,7 +500,7 @@ da:
instance_accounts_dimension: Mest fulgte konti
instance_accounts_measure: gemte konti
instance_followers_measure: vores følgere dér
- instance_follows_measure: deres følgere dér
+ instance_follows_measure: deres følgere her
instance_languages_dimension: Topsprog
instance_media_attachments_measure: gemte medievedhæftninger
instance_reports_measure: anmeldelser af dem
@@ -767,6 +767,7 @@ da:
disabled: Til ingen
users: Til indloggede lokale brugere
registrations:
+ moderation_recommandation: Sørg for, at der er et tilstrækkeligt og reaktivt moderationsteam, før registrering åbnes for alle!
preamble: Styr, hvem der kan oprette en konto på serveren.
title: Registreringer
registrations_mode:
@@ -774,6 +775,7 @@ da:
approved: Tilmeldingsgodkendelse kræves
none: Ingen kan tilmelde sig
open: Alle kan tilmelde sig
+ warning_hint: Brug af "Godkendelse kræves ved tilmelding" anbefales, medmindre man er sikker på, at moderationsteamet kan håndtere spam og ondsindede registreringer i tide.
security:
authorized_fetch: Kræver godkendelse fra fødererede servere
authorized_fetch_hint: Krav om godkendelse fra fødererede servere muliggør strengere håndhævelse af både bruger- og serverniveaublokeringer. Omkostningen er dog en ydelsesreduktion, reduceret udstrækning af dine svar samt potentielle kompatibilitetsproblemer med visse fødererede tjenester. Derudover vil dette ikke hindre målrettede aktører i at hente dine offentlige indlæg og konti.
@@ -966,6 +968,9 @@ da:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Grundet manglende nylig moderatoraktivitet er registreringsproceduren på %{instance} automatisk ændret til at kræve manuel gennemgang for at forhindre, at %{instance} bruges som platform for potentielle dårlige aktører. Proceduren kan til enhver tid ændre igen til åbne registreringer.
+ subject: Registreringsproceduren for %{instance} er automatisk ændret til at kræve godkendelse
new_appeal:
actions:
delete_statuses: for sletning af vedkommendes indlæg
@@ -1440,7 +1445,7 @@ da:
before: 'Inder der fortsættes, læs venligst disse notater omhyggeligt:'
cooldown: Efter flytningen er der en venteperiode, hvor kontoen ikke kan flyttes igen
disabled_account: Efterfølgende er din nuværende konto ikke fuldt funktionsdygtig, der er dog adgang til dataeksport samt genaktivering.
- followers: Denne handling vil flytte alle følgere fra den aktuelle konto til den nye ditto
+ followers: Denne handling vil flytte alle følgere fra den aktuelle konto til den nye konto
only_redirect_html: Alternativt kan du oprette en omdirigering for din profil alene.
other_data: Ingen øvrige data flyttes automatisk
redirect: Din nuværende kontoprofil opdateres med en omdirigeringsnotits og ekskluderes fra søgninger
@@ -1841,10 +1846,6 @@ da:
edit_profile_action: Opsæt profil
edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses.
explanation: Her er nogle råd for at få dig i gang
- final_action: Begynd at poste
- final_step: 'Begynd at poste! Selv uden følgere vil offentlige indlæg kunne ses af andre f.eks. på den lokale tidslinje og i hashtags. Man kan introducere sig selv via hastagget #introductions.'
- full_handle: Dit fulde brugernavn
- full_handle_hint: Dette er, hvad du oplyser til dine venner, så de kan sende dig beskeder eller følge dig fra andre servere.
subject: Velkommen til Mastodon
title: Velkommen ombord, %{name}!
users:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index b77f415190..123942672e 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -767,6 +767,7 @@ de:
disabled: Niemandem
users: Für angemeldete lokale Benutzer*innen
registrations:
+ moderation_recommandation: Bitte vergewissere dich, dass du ein geeignetes und reaktionsschnelles Moderationsteam hast, bevor du die Registrierungen uneingeschränkt zulässt!
preamble: Lege fest, wer auf deinem Server ein Konto erstellen darf.
title: Registrierungen
registrations_mode:
@@ -774,6 +775,7 @@ de:
approved: Registrierung muss genehmigt werden
none: Niemand darf sich registrieren
open: Alle können sich registrieren
+ warning_hint: Wir empfehlen die Einstellung „Registrierung muss genehmigt werden“ zu verwenden, es sei denn, du bist dir sicher, dass dein Moderationsteam Spam und böswillige Registrierungen rechtzeitig bearbeiten kann.
security:
authorized_fetch: Authentisierung von föderierten Servern erforderlich machen
authorized_fetch_hint: Das Anfordern einer Authentisierung von föderierten Servern ermöglicht ein strengeres Durchsetzen von Sperren sowohl auf Ebene der Benutzer*innen als auch des Servers. Allerdings ist das mit Leistungseinbußen verbunden, reduziert die Reichweite deiner Antworten und kann zu Kompatibilitätsproblemen mit einigen föderierten Diensten führen. Darüber hinaus wird das Abrufen deiner öffentlichen Beiträge und Konten durch spezialisierte Akteur*innen nicht verhindert.
@@ -966,6 +968,9 @@ de:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Aufgrund fehlender Aktivität von Moderator*innen müssen neue Registrierungen auf %{instance} jetzt manuell genehmigt werden. Dies wurde automatisch umgestellt, damit %{instance} nicht als Plattform für Böswillige missbraucht werden kann. Du kannst jederzeit auf uneingeschränkte Registrierungen zurückwechseln.
+ subject: Registrierungen auf %{instance} müssen ab jetzt manuell genehmigt werden (automatisch umgestellt)
new_appeal:
actions:
delete_statuses: das Löschen der Beiträge
@@ -979,7 +984,7 @@ de:
next_steps: Du kannst dem Einspruch zustimmen, um die Moderationsentscheidung rückgängig zu machen, oder ihn ignorieren.
subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung auf %{instance} erhoben"
new_critical_software_updates:
- body: Kritische Updates wurden für Mastodon veröffentlicht – du solltest so schnell wie möglich aktualisieren!
+ body: ein neues Sicherheitsupdate wurde veröffentlicht. Du solltest Mastodon so schnell wie möglich aktualisieren!
subject: Kritische Mastodon-Updates sind für %{instance} verfügbar!
new_pending_account:
body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen.
@@ -1023,7 +1028,7 @@ de:
salutation: "%{name},"
settings: 'E-Mail-Einstellungen ändern: %{link}'
unsubscribe: Abbestellen
- view: 'Hier überprüfen:'
+ view: 'Siehe:'
view_profile: Profil anzeigen
view_status: Beitrag anschauen
applications:
@@ -1841,10 +1846,6 @@ de:
edit_profile_action: Profil einrichten
edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen.
explanation: Hier sind ein paar Tipps, um loszulegen
- final_action: Mit erstem Beitrag starten
- final_step: 'Fang jetzt an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel in der lokalen Timeline oder über die Hashtags. Möglicherweise möchtest du dich allen mit dem Hashtag #neuhier vorstellen.'
- full_handle: Dein vollständiger Profilname
- full_handle_hint: Deinen vollständigen Profilnamen kannst du deinen Freund*innen mitteilen, damit sie dich anschreiben oder dir von einem anderen Server folgen können.
subject: Willkommen bei Mastodon!
title: Willkommen an Bord, %{name}!
users:
diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml
index 28e721e667..4e6adf42e5 100644
--- a/config/locales/devise.ar.yml
+++ b/config/locales/devise.ar.yml
@@ -47,14 +47,19 @@ ar:
subject: 'ماستدون: تعليمات استعادة كلمة المرور'
title: إعادة تعيين كلمة السر
two_factor_disabled:
+ explanation: أصبح الولوج الآن ممكنا باستخدام عنوان البريد الإلكتروني وكلمة المرور فقط.
subject: 'ماستدون: نظام المصادقة بخطوتين مُعطّل'
+ subtitle: تم تعطيل المصادقة بعاملين لحسابك.
title: إنّ 2FA معطّل
two_factor_enabled:
+ explanation: سيتعين استخدام رمز يتم إنشاؤه بواسطة تطبيق TOTP المقترن لتسجيل الدخول.
subject: 'ماستدون: تم تفعيل نظام المصادقة بخطوتين'
- title: إنّ 2FA نشِط
+ subtitle: تم تفعيل المصادقة الثنائية لحسابك.
+ title: الاستيثاق الثنائي 2FA مُفعّل
two_factor_recovery_codes_changed:
explanation: لقد تم إلغاء رموز الاسترداد السابقة وأنشئت رموز جديدة.
subject: 'ماستدون: تم إعادة توليد رموز استرجاع المصادقة بخطوتين'
+ subtitle: تم إبطال رموز الاسترداد السابقة وإنشاء رموز جديدة.
title: تم استبدال رموز استرجاع 2FA
unlock_instructions:
subject: 'ماستدون: تعليمات فك القفل'
@@ -68,9 +73,13 @@ ar:
subject: 'ماستدون: تم حذف مفتاح الأمان'
title: تم حذف أحد مفاتيح الأمان الخاصة بك
webauthn_disabled:
+ explanation: تم تعطيل المصادقة باستخدام مفاتيح الأمان لحسابك.
+ extra: يمكن الآن تسجيل الدخول باستخدام الرمز المميز الذي تم إنشاؤه بواسطة تطبيق TOTP المقترن فقط.
subject: 'ماستدون: الاستيثاق مع مفاتيح الأمان معطلة'
title: مفاتيح الأمان معطلة
webauthn_enabled:
+ explanation: تم تمكين مصادقة مفتاح الأمان لحسابك.
+ extra: يمكن الآن استخدام مفتاح الأمان الخاص بك لتسجيل الدخول.
subject: 'ماستدون: تم تفعيل نظام استيثاق مفتاح الأمان'
title: مفاتيح الأمان مفعلة
omniauth_callbacks:
diff --git a/config/locales/devise.be.yml b/config/locales/devise.be.yml
index 8679275c20..81f3120a88 100644
--- a/config/locales/devise.be.yml
+++ b/config/locales/devise.be.yml
@@ -12,6 +12,7 @@ be:
last_attempt: У вас ёсць яшчэ адна спроба, перш чым ваш рахунак будзе заблакаваны
locked: Ваш уліковы запіс заблакіраваны.
not_found_in_database: Няправільны %{authentication_keys} або пароль.
+ omniauth_user_creation_failure: Памылка пры стварэнні ўліковага запісу для гэтай асобы.
pending: Ваш уліковы запіс яшчэ разглядаецца.
timeout: Ваш сеанс скончыўся. Каб працягнуць, увайдзіце яшчэ раз.
unauthenticated: Вам патрэбна зайсьці альбо зарэгістравацца, каб працягнуць
@@ -47,14 +48,19 @@ be:
subject: 'Mastodon: Інструкцыі па скіданню пароля'
title: Скіданне пароля
two_factor_disabled:
+ explanation: Уваход у сістэму цяпер магчымы толькі з выкарыстаннем адраса электроннай пошты і пароля.
subject: 'Mastodon: двухфактарная аўтэнтыфікацыя адключана'
+ subtitle: Двухфактарная аўтэнтыфікацыя для вашага ўліковага запісу была адключаная.
title: двухэтапнае спраўджанне адключана
two_factor_enabled:
+ explanation: Для ўваходу ў сістэму патрабуецца токен, згенераваны спалучанай праграмай TOTP.
subject: 'Mastodon: двухфактарная аўтэнтыфікацыя ўключана'
+ subtitle: Для вашага ўліковага запісу была ўключаная двухфактарная аўтэнтыфікацыя.
title: двухэтапнае спраўджанне уключана
two_factor_recovery_codes_changed:
explanation: Папярэднія коды аднаўлення былі ануляваны і створаны новыя.
subject: 'Mastodon: створаны новыя коды аднаўлення'
+ subtitle: Папярэднія коды аднаўлення былі ануляваны і замест іх створаны новыя.
title: 2FA коды аднаўлення былі зменены
unlock_instructions:
subject: 'Mastodon: інструкцыя па разблакаванні'
@@ -68,9 +74,13 @@ be:
subject: 'Mastodon: ключ бяспекі выдалены'
title: Адзін з вашых ключоў бяспекі быў выдалены
webauthn_disabled:
+ explanation: Аўтэнтыфікацыя з дапамогай ключоў бяспекі была адключаная для вашага ўліковага запісу.
+ extra: Зараз уваход у сістэму магчымы толькі з выкарыстаннем токена, згенераванага спалучанай праграмай TOTP.
subject: 'Mastodon: Аўтэнтыфікацыя з дапамогай ключоў бяспекі адключана'
title: Ключы бяспекі адключаны
webauthn_enabled:
+ explanation: Для вашага ўліковага запісу ўключана аўтэнтыфікацыя па ключу бяспекі.
+ extra: Цяпер ваш ключ бяспекі можна выкарыстоўваць для ўваходу ў сістэму.
subject: 'Mastodon: Аўтэнтыфікацыя праз ключ бяспекі была ўключана'
title: Ключы бяспекі ўключаны
omniauth_callbacks:
diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml
index f3586bcd85..116939762c 100644
--- a/config/locales/devise.bg.yml
+++ b/config/locales/devise.bg.yml
@@ -12,6 +12,7 @@ bg:
last_attempt: Разполагате с още един опит преди акаунтът ви да се заключи.
locked: Вашият акаунт е заключен.
not_found_in_database: Невалиден %{authentication_keys} или парола.
+ omniauth_user_creation_failure: Грешка, сътворявайки акаунт за тази самоличност.
pending: Вашият акаунт все още е в процес на проверка.
timeout: Заседанието ви изтече. Влезте пак, за да продължите.
unauthenticated: Преди да продължите, трябва да влезете или да се регистрирате.
diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml
index 205e11e797..cb406e5f5e 100644
--- a/config/locales/devise.br.yml
+++ b/config/locales/devise.br.yml
@@ -19,7 +19,7 @@ br:
mailer:
confirmation_instructions:
action: Gwiriekaat ar chomlec'h postel
- action_with_app: Kadarnaat ha distroiñ da %{app}
+ action_with_app: Kadarnaat ha distreiñ da %{app}
explanation: Krouet ho peus ur c'hont war %{host} gant ar chomlec'h-postel-mañ. N'eus nemet ur c'hlik evit bevaat anezhañ. Ma ne oa ket krouet ganeoc'h, dianavezit ar postel-se.
explanation_when_pending: Enskrivañ ho peus d'ur c'hemennad da %{host} gant ar chomlec'h-postel-se. Pa vo kadarnaet ho chomlec'h-postel, hoc'h enskrivadur a vo asantet. Gallout a rit mont-tre evit kemmañ munudoù ho kont pe skarzhañ anezhañ, met ne c'hellit ket implijout ul lod eus an aezamantoù par ma n'eo ket asantet ho kont. Ma vefe hoc'h enskrivadur nac'het, ho keloù a vefe skarzhet, neuze ne vo ket ret deoc'h ober netra ken. Ma ne oa ket ac'hanoc'h, dianavezit ar postel-se.
extra_html: Mar plij, gwiriit ivez reolennoù ar servijer ha hon divizoù-implij.
diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml
index 3720d3c5f7..9b4ccccff7 100644
--- a/config/locales/devise.ca.yml
+++ b/config/locales/devise.ca.yml
@@ -14,6 +14,7 @@ ca:
last_attempt: Tens un intent més abans no es bloqui el teu compte.
locked: El teu compte s'ha blocat.
not_found_in_database: "%{authentication_keys} o contrasenya no són vàlids."
+ omniauth_user_creation_failure: S'ha produït un error en crear un compte per a aquesta identitat.
pending: El teu compte encara està en revisió.
timeout: La teva sessió ha expirat. Torna a iniciar-la per a continuar.
unauthenticated: Necessites iniciar sessió o registrar-te abans de continuar.
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index fb3893325c..4dbc2e08bf 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -12,6 +12,7 @@ cs:
last_attempt: Máte ještě jeden pokus, než bude váš účet uzamčen.
locked: Váš účet je uzamčen.
not_found_in_database: Neplatné %{authentication_keys} nebo heslo.
+ omniauth_user_creation_failure: Při vytvoření účtu pro tuto identitu se nastala chyba.
pending: Váš účet je stále posuzován.
timeout: Vaše relace vypršela. Pro pokračování se prosím přihlaste znovu.
unauthenticated: Před pokračováním se musíte přihlásit nebo zaregistrovat.
@@ -47,15 +48,20 @@ cs:
subject: 'Mastodon: Instrukce pro obnovení hesla'
title: Obnovení hesla
two_factor_disabled:
+ explanation: Přihlášení je nyní možné pouze pomocí emailové adresy a hesla.
subject: 'Mastodon: Dvoufázové ověření bylo vypnuto'
- title: 2FA bylo vypnuto
+ subtitle: Dvoufaktorové ověřování vašeho účtu bylo vypnuto.
+ title: Dvoufázové ověření bylo vypnuto
two_factor_enabled:
+ explanation: Pro přihlášení bude vyžadován token generovaný spárovanou TOTP aplikací.
subject: 'Mastodon: Dvoufázové ověření bylo zapnuto'
- title: 2FA bylo zapnuto
+ subtitle: Dvoufaktorové ověřování vašeho účtu bylo zapnuto.
+ title: Dvoufázové ověření bylo zapnuto
two_factor_recovery_codes_changed:
explanation: Předchozí záložní kódy byly zrušeny a byly vygenerovány nové.
- subject: 'Mastodon: Dvoufázové záložní kódy byly znovu vygenerovány'
- title: Záložní kódy pro 2FA byly změněny
+ subject: 'Mastodon: Záložní kódy pro dvoufázové ověření byly znovu vygenerovány'
+ subtitle: Předchozí záložní kódy byly zrušeny a byly vygenerovány nové.
+ title: Záložní kódy pro dvoufázové ověření byly změněny
unlock_instructions:
subject: 'Mastodon: Instrukce pro odemčení účtu'
webauthn_credential:
@@ -68,9 +74,13 @@ cs:
subject: 'Mastodon: Bezpečnostní klíč byl smazán'
title: Jeden z vašich bezpečnostních klíčů byl smazán
webauthn_disabled:
- subject: 'Mastodon: Přihlašování bezpečnostními klíči bylo vypnuto'
+ explanation: 'Mastodon: Přihlašování pomocí bezpečnostními klíčemi bylo pro váš účet vypnuto.'
+ extra: Přihlášení je nyní možné pouze pomocí tokenem vygenerovaný spárovanou TOTP aplikací.
+ subject: 'Mastodon: Přihlašování pomocí bezpečnostními klíčemi bylo vypnuto'
title: Bezpečnostní klíče byly zakázány
webauthn_enabled:
+ explanation: 'Mastodon: Přihlašování bezpečnostními klíči bylo pro váš účet povoleno.'
+ extra: Váš bezpečnostní klíč nyní může být použit pro přihlášení.
subject: 'Mastodon: Přihlašování bezpečnostními klíči bylo povoleno'
title: Bezpečnostní klíče byly povoleny
omniauth_callbacks:
diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml
index d3eeb8eeb6..523ae70b04 100644
--- a/config/locales/devise.cy.yml
+++ b/config/locales/devise.cy.yml
@@ -12,6 +12,7 @@ cy:
last_attempt: Mae gennych un cyfle arall cyn i'ch cyfrif gael ei gloi.
locked: Mae eich cyfrif wedi ei gloi.
not_found_in_database: "%{authentication_keys} neu gyfrinair annilys."
+ omniauth_user_creation_failure: Gwall wrth greu cyfrif ar gyfer yr hunaniaeth hon.
pending: Mae eich cyfrif dal o dan adolygiad.
timeout: Mae eich sesiwn wedi dod i ben. Mewngofnodwch eto i barhau.
unauthenticated: Mae angen i chi fewngofnodi neu gofrestru cyn parhau.
diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml
index daf802cdb7..c472242ba7 100644
--- a/config/locales/devise.da.yml
+++ b/config/locales/devise.da.yml
@@ -12,6 +12,7 @@ da:
last_attempt: Du har ét forsøg mere, før din konto bliver låst.
locked: Din konto er låst.
not_found_in_database: Ugyldig %{authentication_keys} eller adgangskode.
+ omniauth_user_creation_failure: Fejl under oprettelse af konto for denne identitet.
pending: Din konto er stadig under revision.
timeout: Session udløbet. Log ind igen for at fortsætte.
unauthenticated: Log ind eller tilmeld dig for at fortsætte.
diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml
index cf05ddc16b..7982f8a743 100644
--- a/config/locales/devise.de.yml
+++ b/config/locales/devise.de.yml
@@ -12,6 +12,7 @@ de:
last_attempt: Du hast nur noch einen Versuch, bevor dein Zugang gesperrt wird.
locked: Dein Konto ist gesperrt.
not_found_in_database: "%{authentication_keys} oder Passwort ungültig."
+ omniauth_user_creation_failure: Fehler beim Erstellen eines Kontos für diese Identität.
pending: Dein Konto wird weiterhin überprüft.
timeout: Deine Sitzung ist abgelaufen. Bitte melde dich erneut an, um fortzufahren.
unauthenticated: Du musst dich anmelden oder registrieren, bevor du fortfahren kannst.
diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml
index 8fa02bbd4a..823be9aa6c 100644
--- a/config/locales/devise.en-GB.yml
+++ b/config/locales/devise.en-GB.yml
@@ -47,14 +47,19 @@ en-GB:
subject: 'Mastodon: Reset password instructions'
title: Password reset
two_factor_disabled:
+ explanation: Login is now possible using only e-mail address and password.
subject: 'Mastodon: Two-factor authentication disabled'
+ subtitle: Two-factor authentication for your account has been disabled.
title: 2FA disabled
two_factor_enabled:
+ explanation: A token generated by the paired TOTP app will be required for login.
subject: 'Mastodon: Two-factor authentication enabled'
+ subtitle: Two-factor authentication has been enabled for your account.
title: 2FA enabled
two_factor_recovery_codes_changed:
explanation: The previous recovery codes have been invalidated and new ones generated.
subject: 'Mastodon: Two-factor recovery codes re-generated'
+ subtitle: The previous recovery codes have been invalidated and new ones generated.
title: 2FA recovery codes changed
unlock_instructions:
subject: 'Mastodon: Unlock instructions'
@@ -68,9 +73,13 @@ en-GB:
subject: 'Mastodon: Security key deleted'
title: One of your security keys has been deleted
webauthn_disabled:
+ explanation: Authentication with security keys has been disabled for your account.
+ extra: Login is now possible using only the token generated by the paired TOTP app.
subject: 'Mastodon: Authentication with security keys disabled'
title: Security keys disabled
webauthn_enabled:
+ explanation: Security key authentication has been enabled for your account.
+ extra: Your security key can now be used for login.
subject: 'Mastodon: Security key authentication enabled'
title: Security keys enabled
omniauth_callbacks:
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
index 4439397c8e..61bd33851b 100644
--- a/config/locales/devise.en.yml
+++ b/config/locales/devise.en.yml
@@ -12,6 +12,7 @@ en:
last_attempt: You have one more attempt before your account is locked.
locked: Your account is locked.
not_found_in_database: Invalid %{authentication_keys} or password.
+ omniauth_user_creation_failure: Error creating an account for this identity.
pending: Your account is still under review.
timeout: Your session expired. Please login again to continue.
unauthenticated: You need to login or sign up before continuing.
diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml
index ca60ee5deb..6249294597 100644
--- a/config/locales/devise.es-AR.yml
+++ b/config/locales/devise.es-AR.yml
@@ -12,6 +12,7 @@ es-AR:
last_attempt: Tenés un intento más antes de que se bloquee tu cuenta.
locked: Se bloqueó tu cuenta.
not_found_in_database: "%{authentication_keys} o contraseña no válidas."
+ omniauth_user_creation_failure: Error al crear una cuenta para esta identidad.
pending: Tu cuenta todavía está bajo revisión.
timeout: Venció tu sesión. Por favor, volvé a iniciar sesión para continuar.
unauthenticated: Necesitás iniciar sesión o registrarte antes de continuar.
diff --git a/config/locales/devise.es-MX.yml b/config/locales/devise.es-MX.yml
index c4a7f319af..ac90412e85 100644
--- a/config/locales/devise.es-MX.yml
+++ b/config/locales/devise.es-MX.yml
@@ -12,6 +12,7 @@ es-MX:
last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada.
locked: Tu cuenta está bloqueada.
not_found_in_database: Incorrecto %{authentication_keys} o contraseña.
+ omniauth_user_creation_failure: Error al crear una cuenta para esta identidad.
pending: Su cuenta aun se encuentra bajo revisión.
timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar.
unauthenticated: Necesita iniciar sesión o registrarse antes de continuar.
diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml
index 642871710d..0d8fc0ac67 100644
--- a/config/locales/devise.es.yml
+++ b/config/locales/devise.es.yml
@@ -12,6 +12,7 @@ es:
last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada.
locked: Tu cuenta está bloqueada.
not_found_in_database: Incorrecto %{authentication_keys} o contraseña.
+ omniauth_user_creation_failure: Error al crear una cuenta para esta identidad.
pending: Su cuenta aun se encuentra bajo revisión.
timeout: Tu sesión expiró. Por favor, inicia sesión nuevamente para continuar.
unauthenticated: Necesitas iniciar sesión o registrarte antes de continuar.
diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml
index 624f9ee93d..3e675659fe 100644
--- a/config/locales/devise.eu.yml
+++ b/config/locales/devise.eu.yml
@@ -12,6 +12,7 @@ eu:
last_attempt: Saiakera bat geratzen zaizu zure kontua giltzapetu aurretik.
locked: Zure kontua giltzapetuta dago.
not_found_in_database: Baliogabeko %{authentication_keys} edo pasahitza.
+ omniauth_user_creation_failure: Errorea identitate honen kontu bat sortzean.
pending: Zure kontua oraindik berrikusteke dago.
timeout: Zure saioa iraungitu da. Hasi saioa berriro jarraitzeko.
unauthenticated: Saioa hasi edo izena eman behar duzu jarraitu aurretik.
diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml
index d4198626d4..c441e346a2 100644
--- a/config/locales/devise.fa.yml
+++ b/config/locales/devise.fa.yml
@@ -2,16 +2,17 @@
fa:
devise:
confirmations:
- confirmed: نشانی ایمیل شما با موفقیت تأیید شد.
- send_instructions: تا دقایقی دیگر ایمیلی خواهید گرفت که به شما میگوید چگونه باید نشانی ایمیل خود را تأیید کنید. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
- send_paranoid_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر ایمیلی خواهید گرفت که به شما میگوید چگونه باید نشانی ایمیل خود را تأیید کنید. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
+ confirmed: نشانی رایانامهتان با موفقیت تأیید شد.
+ send_instructions: تا دقایقی دیگر رایانامهای با دستورالعمل تأیید نشانی رایانامهتان دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
+ send_paranoid_instructions: اگر نشانی رایانامهتان در پایگاه دادهمان وجود داشته باشد، تا دقایقی دیگر تا دقایقی دیگر رایانامهای با دستورالعمل تأیید نشانی رایانامهتان دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
failure:
- already_authenticated: همین الآن هم وارد شدهاید.
- inactive: حساب شما هنوز فعال نشده است.
+ already_authenticated: از پیش وارد شدهاید.
+ inactive: هنوز حسابتان فعّال نشده.
invalid: "%{authentication_keys} یا گذرواژه نامعتبر."
last_attempt: پیش از آن که حساب شما قفل شود، یک فرصت دیگر دارید.
- locked: حساب شما قفل شده است.
+ locked: حسابتان قفل شده.
not_found_in_database: "%{authentication_keys} یا گذرواژه نامعتبر."
+ omniauth_user_creation_failure: خطای ایجاد حسابی برای این هویت.
pending: حساب شما همچنان در دست بررسی است.
timeout: مهلت این ورود شما به سر رسید. برای ادامه، دوباره وارد شوید.
unauthenticated: برای ادامه باید وارد شوید یا ثبت نام کنید.
@@ -24,37 +25,42 @@ fa:
explanation_when_pending: شما با این نشانی ایمیل برای %{host} درخواست دعوتنامه دادهاید. اگر ایمیل خود را تأیید کنید، ما درخواست شما را بررسی خواهیم کرد. تا وقتی بررسی تمام نشده، شما نمیتوانید به حساب خود وارد شوید. اگر درخواست شما رد شود، ما اطلاعاتی را که از شما داریم پاک خواهیم کرد پس نیازی به کاری از سمت شما نخواهد بود. اگر شما چنین درخواستی ندادهاید، لطفاً این ایمیل را نادیده بگیرید.
extra_html: لطفاً همچنین قوانین کارساز و شرایط خدمتمان را بررسی کنید.
subject: 'ماستودون: دستورالعمل تأیید برای %{instance}'
- title: تأیید نشانی ایمیل
+ title: تأیید نشانی رایانامه
email_changed:
- explanation: 'نشانی ایمیل حساب شما تغییر میکند به:'
- extra: اگر شما ایمیل خود را عوض نکردید، شاید کسی به حساب شما دسترسی پیدا کرده است. در این صورت لطفاً هر چه زودتر گذرواژه حسابتان را عوض کنید. اگر گذرواژهتان دیگر کار نمیکند، لطفاً با مدیر سرور تماس بگیرید.
- subject: 'ماستودون: نشانی ایمیل عوض شد'
- title: نشانی ایمیل تازه
+ explanation: 'نشانی رایانامهٔ حسابتان تغییر میکند به:'
+ extra: اگر رایانامهتان را عوض نکردهاید، ممکن است کسی به حسابتان دسترسی پیدا کرده باشد. لطفاً فوراُ گذرواژهتان را عوض کرده و اگر از حسابتان بیرون ماندهاید با مدیر کارساز تماس بگیرید.
+ subject: 'ماستودون: رایانامه عوض شد'
+ title: نشانی جدید رایانامه
password_change:
- explanation: گذرواژه حساب شما تغییر کرد.
- extra: اگر شما گذرواژه حسابتان را تغییر ندادید، شاید کسی به حساب شما دسترسی پیدا کرده است. در این صورت لطفاً هر چه زودتر گذرواژه حسابتان را عوض کنید. اگر گذرواژهتان دیگر کار نمیکند، لطفاً با مدیر سرور تماس بگیرید.
- subject: 'ماستودون: گذرواژهتان عوض شد'
- title: گذرواژهتان عوض شد
+ explanation: گذرواژهٔ حسابتان عوض شده.
+ extra: اگر گذرواژهتان را عوض نکردهاید، ممکن است کسی به حسابتان دسترسی پیدا کرده باشد. لطفاً فوراُ گذرواژهتان را عوض کرده و اگر از حسابتان بیرون ماندهاید با مدیر کارساز تماس بگیرید.
+ subject: 'ماستودون: گذرواژه عوض شد'
+ title: گذرواژه عوض شد
reconfirmation_instructions:
- explanation: نشانی تازه را تأیید کنید تا ایمیلتان عوض شود.
- extra: اگر شما باعث این تغییر نبودید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید، نشانی ایمیل مربوط به حساب شما عوض نخواهد شد.
+ explanation: برای تغییر رایانامهتان نشانی جدید را تأیید کنید.
+ extra: اگر خودتان چنین درخواستی ندادهاید لطفاً از این رایانامه چشم بپوشید. نشانی رایانامهٔ حساب ماستودون تا وقتی به پیوند بالا دسترسی پیدا نکنید عوض نخواهد شد.
subject: 'ماستودون: تأیید رایانامه برای %{instance}'
- title: تأیید نشانی ایمیل
+ title: تأیید نشانی رایانامه
reset_password_instructions:
action: تغییر گذرواژه
- explanation: شما گذرواژه تازهای برای حسابتان درخواست کردید.
- extra: اگر شما چنین درخواستی نکردید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید و گذرواژه تازهای نسازید، گذرواژه شما عوض نخواهد شد.
- subject: 'ماستودون: راهنمایی برای بازنشانی گذرواژه'
+ explanation: درخواست گذرواژهای تازهای برای حسابتان کردهاید.
+ extra: اگر خودتان چنین درخواستی ندادهاید لطفاً از این رایانامه چشم بپوشید. گذرواژهتان تا وقتی به پیوند بالا دسترسی پیدا نکرده و گذرواژهٔ جدیدی نسازید عوض نخواهد شد.
+ subject: 'ماستودون: دستورالعملهای بازنشانی گذرواژه'
title: بازنشانی گذرواژه
two_factor_disabled:
- subject: 'ماستودون: تأیید هویت دو مرحلهای از کار افتاد'
- title: ورود دومرحلهای غیرفعال
+ explanation: ورود اکنون تنها با نشانی رایانامه و گذرواژه ممکن است.
+ subject: 'ماستودون: هویتسنجی دو مرحلهای از کار افتاده'
+ subtitle: هویتسنجی دو مرحلهای برای حسابتان از کار افتاده.
+ title: ورود دومرحلهای از کار افتاده
two_factor_enabled:
- subject: 'ماستودون: تأیید هویت دومرحلهای به کار افتاد'
- title: ورود دومرحلهای فعال
+ explanation: ورود نیازمند ژتونی تولید شده به دست کارهٔ TOTP جفتشده است.
+ subject: 'ماستودون: هویتسنجی دومرحلهای به کار افتاده'
+ subtitle: هویتسنجی دو عاملی برای حسابتان به کار افتاده.
+ title: ورود دومرحلهای به کار افتاده
two_factor_recovery_codes_changed:
explanation: کدهای بازیابی پیشین نامعتبر شده و کدهای جدیدی ساخته شدند.
subject: 'ماستودون: کدهای بازیابی برای تأیید هویت دو مرحلهای دوباره ساخته شدند'
+ subtitle: کدهای بازیابی پیشین از اعتبار ساقط شده و کدهایی جدید ایجاد شدند.
title: کدهای بازیابی تأیید هویت دو مرحلهای عوض شدهاند
unlock_instructions:
subject: 'ماستودون: دستورالعملهای قفلگشایی'
@@ -68,9 +74,13 @@ fa:
subject: 'ماستودون: کلید امنیتی حذف شد'
title: یکی از کلیدهای امنیتیتان حذف شد
webauthn_disabled:
+ explanation: هویتسنجی با کلیدهای امنیتی برای حسابتان از کار افتاده.
+ extra: ورود اکنون تنها با ژتون تولید شده به دست کارهٔ TOTP جفتشده ممکن است.
subject: 'ماستودون: تأیید هویت با کلیدهای امنیتی از کار افتاد'
title: کلیدهای امنیتی از کار افتادند
webauthn_enabled:
+ explanation: هویتسنجی با کلیدهای امنیتی برای حسابتان به کار افتاده.
+ extra: کلید امنیتیتان اکنون میتواند برای ورود استفاده شود.
subject: 'ماستودون: تأیید هویت با کلید امنیتی به کار افتاد'
title: کلیدهای امنیتی به کار افتادند
omniauth_callbacks:
@@ -86,22 +96,22 @@ fa:
destroyed: بدرود! حساب شما با موفقیت لغو شد. امیدواریم دوباره شما را ببینیم.
signed_up: خوش آمدید! شما با موفقیت ثبت نام کردید.
signed_up_but_inactive: خوش آمدید! با موفقیت ثبت نام کردید. ولی هنوز وارد نشدهاید؛ چرا که حسابتان هنوز فعال نشده است.
- signed_up_but_locked: خوش آمدید! با موفقیت ثبت نام کردید. ولی هنوز وارد نشدهاید؛ چرا که حسابتان قفل است.
- signed_up_but_pending: پیغامی که دارای یک پیوند برای تأیید است به نشانی ایمیل شما فرستاده شده. پس از اینکه پیوند را باز کردید، ما درخواست شما را بررسی خواهیم کرد. اگر درخواست شما پذیرفته شود، به شما خواهیم گفت.
- signed_up_but_unconfirmed: پیامی با یک پیوند تأیید به نشانی ایمیل شما فرستاده شده. لطفاً پیوند موجود در ایمیل را دنبال کنید تا حسابتان فعال شود. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
- update_needs_confirmation: شما با موفقیت حسابتان را بهروز کردید، ولی لازم است که ما نشانی ایمیل تازهٔ شما را تأیید کنیم. لطفاً ایمیل خود را ببینید و پیوند موجود در ایمیل را دنبال کنید تا تا نشانی ایمیل تازهٔ شما تأیید شود. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
- updated: حسابتان با موفقبت بهروز شد.
+ signed_up_but_locked: با موفّقیت ثبتنام کردهاید. با این حال نمیتوان واردتان کرد؛ چرا که حسابتان قفل است.
+ signed_up_but_pending: پیامی با پیوند تأیید به نشانی رایانامهتان فرستاده شده. پس از زدن پیوند درخواستتان را بازبینی خواهیم کرد. در صورت پذیرش آگاه خواهید شد.
+ signed_up_but_unconfirmed: پیامی با پیوند تأیید به نشانی رایانامهتان فرستاده شده. لطفاً برای فعّال کردن حسابتان پیوند را بزنید. اگر این رایانامه را نگرفتهاید شاخهٔ هرزنامهها را بررسی کنید.
+ update_needs_confirmation: حسابتان را با موفّقیت بهروز کردید؛ ولی باید نشانی رایانامهٔ جدیتان را تأیید کنیم. لطفاً رایانامهتان را بررسی کرده و برای تأیید نشانی رایانهٔ جدیدتان پیوند را بزنید. اگر این رایانامه را نگرفتهاید شاخهٔ هرزنامهها را بررسی کنید.
+ updated: حسابتان با موفّقیت بهروز شد.
sessions:
- already_signed_out: با موفقیت خارج شدید.
- signed_in: با موفقیت وارد شدید.
- signed_out: با موفقیت خارج شدید.
+ already_signed_out: با موفّقیت خارج شدید.
+ signed_in: با موفّقیت وارد شدید.
+ signed_out: با موفّقیت خارج شدید.
unlocks:
- send_instructions: تا دقایقی دیگر ایمیلی خواهید گرفت که به شما میگوید چگونه باید قفل حساب خود را باز کنید. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
- send_paranoid_instructions: اگر حساب شما موجود باشد، تا دقایقی دیگر ایمیلی خواهید گرفت که به شما میگوید چگونه باید قفل آن را باز کنید. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
- unlocked: قفل حساب شما با موفقیت باز شد. لطفاً برای ادامه وارد سیستم شوید.
+ send_instructions: تا دقایقی دیگر رایانامهای با دستورالعمل قفلگشایی حسابتان دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
+ send_paranoid_instructions: اگر حسابتان وجود داشته باشد تا دقایقی دیگر رایانامهای با دستورالعمل قفلگشاییش دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامههایتان را بررسی کنید.
+ unlocked: حسابتان با موفّقیت قفلگشایی شد. لطفاً برای ادامه وارد شوید.
errors:
messages:
- already_confirmed: تأیید شده، لطفاً وارد شوید
+ already_confirmed: از پیش تأیید شده. لطفاً ورود را بیازمایید
confirmation_period_expired: باید ظرف %{period} تأیید شود، لطفاً دوباره درخواست دهید
expired: مهلتش به سر رسید، لطفاً دوباره درخواست دهید
not_found: پیدا نشد
diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml
index 22fd7ff47b..003d48417b 100644
--- a/config/locales/devise.fi.yml
+++ b/config/locales/devise.fi.yml
@@ -12,33 +12,34 @@ fi:
last_attempt: Sinulla on vielä yksi yritys ennen kuin tilisi lukitaan.
locked: Tilisi on lukittu.
not_found_in_database: Virheellinen %{authentication_keys} tai salasana.
+ omniauth_user_creation_failure: Virhe luotaessa tiliä tälle henkilöllisyydelle.
pending: Tilisi on vielä tarkistamatta.
- timeout: Istuntosi on umpeutunut. Jatka kirjautumalla uudelleen sisään.
+ timeout: Istuntosi on vanhentunut. Jatkaaksesi käyttöä, kirjaudu uudelleen.
unauthenticated: Sinun on kirjauduttava tai rekisteröidyttävä ennen kuin voit jatkaa.
unconfirmed: Vahvista sähköpostiosoitteesi, ennen kuin jatkat.
mailer:
confirmation_instructions:
action: Vahvista sähköpostiosoite
action_with_app: Vahvista ja palaa %{app}
- explanation: Olet luonut tilin palvelimelle %{host} käyttäen tätä sähköpostiosoitetta. Olet painalluksen päässä tilin aktivoinnista. Jos et luonut tiliä itse, voit jättää tämän viestin huomiotta.
+ explanation: Olet luonut käyttäjätilin palvelimelle %{host} tätä sähköpostiosoitetta käyttäen. Olet painalluksen päässä tilin aktivoinnista. Jos et luonut tiliä itse, voit jättää tämän viestin huomiotta.
explanation_when_pending: Teit hakemuksen kutsusta palvelimelle %{host} tällä sähköpostiosoitteella. Kun olet vahvistanut sähköpostiosoitteesi, tarkistamme hakemuksesi. Voit kirjautua sisään muuttaaksesi hakemuksen sisältöä tai poistaaksesi tilin, mutta et voi käyttää suurinta osaa toiminnallisuudesta ennen kuin hakemuksesi on hyväksytty. Jos hakemuksesi hylätään, tietosi poistetaan eikä sinulta tarvita enempää toimia. Jos sinä et tehnyt hakemusta, voit jättää tämän viestin huomiotta.
extra_html: Tutustu myös palvelimen sääntöihin ja palveluehtoihimme.
subject: 'Mastodon: Vahvistusohjeet instanssille %{instance}'
title: Vahvista sähköpostiosoite
email_changed:
explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:'
- extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
+ extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitoon, ellet pääse sisään käyttäjätilillesi.
subject: 'Mastodon: Sähköpostiosoite vaihdettu'
title: Uusi sähköpostiosoite
password_change:
explanation: Tilisi salasana on vaihdettu.
- extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
+ extra: Ellet vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttäjätilillesi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitoon, jos kirjautuminen käyttäjätilillesi ei onnistu.
subject: 'Mastodon: salasana vaihdettu'
title: Salasana vaihdettu
reconfirmation_instructions:
explanation: Vahvista uusi sähköpostiosoite, niin muutos astuu voimaan.
extra: Jos et tehnyt muutosta itse, voit jättää tämän viestin huomiotta. Mastodon-tilin sähköpostiosoitetta ei vaihdeta, ennen kuin klikkaat yllä olevaa linkkiä.
- subject: 'Mastodon: vahvista sähköpostiosoite: %{instance}'
+ subject: 'Mastodon: Vahvista sähköpostiosoite palvelimelle %{instance}'
title: Vahvista sähköpostiosoite
reset_password_instructions:
action: Vaihda salasana
@@ -55,27 +56,27 @@ fi:
explanation: Sisäänkirjautuminen edellyttää liitetyn TOTP-sovelluksen luomaa aikarajattua kertatunnuslukua.
subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön'
subtitle: Kaksivaiheinen todennus on otettu käyttöön tilillesi.
- title: 2-vaiheinen todennus käytössä
+ title: Kaksivaiheinen todennus käytössä
two_factor_recovery_codes_changed:
- explanation: Uudet palautuskoodit on nyt luotu ja vanhat on mitätöity.
- subject: 'Mastodon: kaksivaiheisen todennuksen palautuskoodit luotiin uudelleen'
- subtitle: Aiemmat palautuskoodit on mitätöity ja tilalle on luotu uudet.
+ explanation: Uudet palautuskoodit on nyt luotu, ja vanhat mitätöity.
+ subject: 'Mastodon: Kaksivaihetodennuksen palautuskoodit luotiin uudelleen'
+ subtitle: Aiemmat palautuskoodit on mitätöity, ja korvaavat uudet koodit on luotu.
title: 2-vaiheisen todennuksen palautuskoodit vaihdettiin
unlock_instructions:
subject: 'Mastodon: lukituksen poistamisen ohjeet'
webauthn_credential:
added:
explanation: Seuraava suojausavain on lisätty tilillesi
- subject: 'Mastodon: uusi suojausavain'
+ subject: 'Mastodon: Uusi suojausavain'
title: Uusi suojausavain on lisätty
deleted:
explanation: Seuraava suojausavain on poistettu tililtäsi
- subject: 'Mastodon: suojausavain poistettu'
+ subject: 'Mastodon: Suojausavain poistettu'
title: Yksi suojausavaimistasi on poistettu
webauthn_disabled:
- explanation: Turva-avaimin kirjautuminen on poistettu käytöstä tililtäsi.
- extra: Sisäänkirjautuminen on nyt mahdollista pelkällä palveluun liitetyn TOTP-sovelluksen luomalla aikarajoitteisella kertatunnusluvulla.
- subject: 'Mastodon: Todennus suojausavaimilla poistettu käytöstä'
+ explanation: Turva-avaimin kirjautuminen tilillesi on kytketty pois käytöstä.
+ extra: Olet nyt mahdollistanut sisäänkirjautumisen käyttäjätilillesi pelkästään palveluun liitetyn TOTP-sovelluksen luomalla aikarajoitteisella kertatunnusluvulla.
+ subject: 'Mastodon: Turva-avaintodennus on poistettu käytöstä'
title: Suojausavaimet poistettu käytöstä
webauthn_enabled:
explanation: Turva-avaimella kirjautuminen on otettu käyttöön tilillesi.
@@ -86,20 +87,20 @@ fi:
failure: Tunnistautuminen lähteestä %{kind} ei onnistunut, koska "%{reason}".
success: Tunnistautuminen tililtä %{kind} onnistui.
passwords:
- no_token: Tälle sivulle pääsee vain salasananvaihtoviestin kautta. Jos tiedät tulevasi salasananvaihtoviestin kautta, varmista, että käytät koko viestissä mainittua URL-osoitetta.
- send_instructions: Jos sähköpostiosoite on tietokannassamme, siihen lähetetään pian linkki salasanan vaihtoon. Jos et saa viestiä, tarkista roskapostikansio.
- send_paranoid_instructions: Jos sähköpostiosoite on tietokannassamme, siihen lähetetään pian linkki salasanan vaihtoon. Jos et saa viestiä, tarkista roskapostikansio.
+ no_token: Tälle sivulle pääsee vain salasananvaihtoviestin kautta. Jos tiedät tulevasi sen kautta, varmista, että käytät viestissä mainittua URL-osoitetta kokonaisuudessaan.
+ send_instructions: Jos sähköpostiosoite on tietokannassamme, siihen lähetetään pian viesti, jossa on linkki salasanan vaihtamiseksi. Mikäli viestiä ei kuulu, tarkista myös roskapostisi.
+ send_paranoid_instructions: Jos sähköpostiosoite on tietokannassamme, siihen lähetetään pian viesti, jossa on linkki salasanan vaihtamiseksi. Mikäli viestiä ei kuulu, tarkista myös roskapostisi.
updated: Salasanan vaihto onnistui. Olet nyt kirjautunut sisään.
updated_not_active: Salasanan vaihto onnistui.
registrations:
- destroyed: Tilisi on poistettu. Näkemiin ja tervetuloa uudelleen!
+ destroyed: Tilisi on poistettu. Näkemiin ja tervetuloa uudelleen.
signed_up: Tervetuloa! Rekisteröityminen onnistui.
- signed_up_but_inactive: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä tiliäsi ei ole vielä aktivoitu.
- signed_up_but_locked: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä tilisi on lukittu.
- signed_up_but_pending: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Kun olet klikannut linkkiä, tarkistamme hakemuksesi. Sinulle tiedotetaan jos se hyväksytään.
- signed_up_but_unconfirmed: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Aktivoi tili seuraamalla linkkiä. Jos et saanut viestiä, tarkista roskapostikansio.
- update_needs_confirmation: Tilin päivitys onnistui, mutta uusi sähköpostiosoite on vahvistettava. Tarkista sähköpostisi ja vahvista uusi sähköpostiosoite seuraamalla vahvistuslinkkiä. Jos et saanut viestiä, tarkista roskapostikansio.
- updated: Tilin päivitys onnistui.
+ signed_up_but_inactive: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä käyttäjätiliäsi ei ole vielä aktivoitu.
+ signed_up_but_locked: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä käyttäjätilisi on lukittuna.
+ signed_up_but_pending: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Sen avattuasi tarkistamme hakemuksesi, ja ilmoitamme hyväksynnästä.
+ signed_up_but_unconfirmed: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Aktivoi käyttäjätilisi seuraamalla linkkiä. Mikäli sitä ei kuulu, tarkista myös roskapostisi.
+ update_needs_confirmation: Tilin päivitys onnistui. Uusi sähköpostiosoite on kuitenkin vahvistettava. Tarkista saapuneet viestisi, ja vahvista uusi sähköpostiosoitteesi vahvistuslinkkiä seuraten. Mikäli viestiä ei kuulu, tarkista myös roskapostisi.
+ updated: Käyttäjätilisi tietojen päivittäminen onnistui.
sessions:
already_signed_out: Uloskirjautuminen onnistui.
signed_in: Sisäänkirjautuminen onnistui.
diff --git a/config/locales/devise.fo.yml b/config/locales/devise.fo.yml
index 1f7708bb44..30f83ba0da 100644
--- a/config/locales/devise.fo.yml
+++ b/config/locales/devise.fo.yml
@@ -12,6 +12,7 @@ fo:
last_attempt: Tú kanst royna einaferð afturat áðrenn kontan verður stongd.
locked: Kontan hjá tær er læst.
not_found_in_database: Ogyldigur %{authentication_keys} ella loyniorð.
+ omniauth_user_creation_failure: Feilur í sambandi við, at ein konta fyri hendan samleikan bleiv stovnað.
pending: Kontan hjá tær verður kannað enn.
timeout: Tín innritan er útgingin. Innrita av nýggjum, fyri at hada fram.
unauthenticated: Tú mást skriva teg inn aftur fyri at halda fram.
diff --git a/config/locales/devise.fy.yml b/config/locales/devise.fy.yml
index 05fd7b8071..c8a04a7405 100644
--- a/config/locales/devise.fy.yml
+++ b/config/locales/devise.fy.yml
@@ -12,6 +12,7 @@ fy:
last_attempt: Jo hawwe noch ien besykjen oer eardat jo account blokkearre wurdt.
locked: Jo account is blokkearre.
not_found_in_database: "%{authentication_keys} of wachtwurd ûnjildich."
+ omniauth_user_creation_failure: Flater by it oanmeitsjen fan in account foar dizze identiteit.
pending: Jo account moat noch hieltyd beoardiele wurde.
timeout: Jo sesje is ferrûn. Meld jo opnij oan om troch te gean.
unauthenticated: Jo moatte oanmelde of registrearje.
diff --git a/config/locales/devise.ga.yml b/config/locales/devise.ga.yml
index 0949e140d1..6e6bd0a013 100644
--- a/config/locales/devise.ga.yml
+++ b/config/locales/devise.ga.yml
@@ -1,9 +1,23 @@
---
ga:
devise:
+ confirmations:
+ confirmed: D'éirigh le deimhniú do ríomhphost.
+ send_instructions: Gheobhaidh tú r-phost go gairid ina mbeidh treoracha faoi conas do sheoladh r-phost a dheimhniú. Féach i d'fhillteán turscair mura bhfuair tú an r-phost seo.
+ send_paranoid_instructions: Más ann do do r-phost inár mbonneagar, gheobhaidh tú r-phost i gceann cúpla nóiméad faoi conas do sheoladh r-phost a dheimhniú. Féach i d'fhillteán turscair mura bhfuair tú an r-phost seo.
failure:
+ already_authenticated: Tá tú sínithe isteach cheana.
+ inactive: Níl do chuntas gníomhachtaithe fós.
+ invalid: "%{authentication_keys} nó pasfhocal neamhbhailí."
+ last_attempt: Tá iarracht amháin eile agat sula gcuirtear do chuntas faoi ghlas.
locked: Tá do chuntas faoi ghlas.
+ pending: Tá do chuntas fós faoi athbhreithniú.
+ unauthenticated: Ní mór duit lógáil isteach nó síniú suas roimh leanúint leat.
+ unconfirmed: Caithfidh tú do r-phost a dheimhniú roimh leanúint leat.
mailer:
+ confirmation_instructions:
+ action: Deimhnigh seoladh r-phost
+ action_with_app: Deimhnigh agus fill ar %{app}
email_changed:
title: Seoladh ríomhphoist nua
password_change:
diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml
index b9f4a0a005..00b1824808 100644
--- a/config/locales/devise.gl.yml
+++ b/config/locales/devise.gl.yml
@@ -12,6 +12,7 @@ gl:
last_attempt: Tes un intento máis antes de que a túa conta fique bloqueada.
locked: A túa conta está bloqueada.
not_found_in_database: "%{authentication_keys} ou contrasinal non válidos."
+ omniauth_user_creation_failure: Erro ao crear unha conta para esta identidade.
pending: A túa conta aínda está baixo revisión.
timeout: A túa sesión caducou. Accede outra vez para continuar.
unauthenticated: Precisas iniciar sesión ou rexistrarte antes de continuar.
diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml
index f2ec3a6716..02e307ae1c 100644
--- a/config/locales/devise.he.yml
+++ b/config/locales/devise.he.yml
@@ -12,6 +12,7 @@ he:
last_attempt: יש לך עוד ניסיון אחד לפני נעילת החשבון.
locked: חשבון זה נעול.
not_found_in_database: "%{authentication_keys} או סיסמה לא נכונים."
+ omniauth_user_creation_failure: שגיאה ביצירת חשבון לזהות הזו.
pending: חשבונך נמצא עדיין בבדיקה.
timeout: פג תוקף השהיה בחשבון. נא להכנס מחדש על מנת להמשיך.
unauthenticated: יש להרשם או להכנס לחשבון על מנת להמשיך.
diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml
index fea56ab24a..8c9fdf6a50 100644
--- a/config/locales/devise.hu.yml
+++ b/config/locales/devise.hu.yml
@@ -12,6 +12,7 @@ hu:
last_attempt: Már csak egy próbálkozásod maradt, mielőtt a fiókodat zároljuk.
locked: A fiókodat zároltuk.
not_found_in_database: Helytelen %{authentication_keys} vagy jelszó.
+ omniauth_user_creation_failure: Hiba történt a fiók létrehozása során ehhez az identitáshoz.
pending: A fiókod még engedélyezésre vár.
timeout: A munkameneted lejárt. A folytatáshoz jelentkezz be újra.
unauthenticated: A folytatás előtt be kell jelentkezned vagy regisztrálnod kell.
diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml
index c45994160c..4b4d1f441b 100644
--- a/config/locales/devise.ia.yml
+++ b/config/locales/devise.ia.yml
@@ -11,17 +11,36 @@ ia:
email_changed:
title: Nove adresse de e-mail
password_change:
+ subject: 'Mastodon: Contrasigno cambiate'
title: Contrasigno cambiate
reconfirmation_instructions:
+ explanation: Confirma le nove adresse pro cambiar tu email.
title: Verificar adresse de e-mail
reset_password_instructions:
action: Cambiar contrasigno
+ subject: 'Mastodon: Instructiones pro reinitialisar le contrasigno'
title: Reinitialisar contrasigno
two_factor_disabled:
title: 2FA disactivate
two_factor_enabled:
title: 2FA activate
+ unlock_instructions:
+ subject: 'Mastodon: Instructiones pro disblocar'
+ webauthn_credential:
+ added:
+ explanation: Le sequente clave de securitate esseva addite a tu conto
+ subject: 'Mastodon: Nove clave de securitate'
+ title: Un nove clave de securitate esseva addite
+ deleted:
+ explanation: Le sequente clave de securitate esseva delite de tu conto
+ subject: 'Mastodon: Clave de securitate delite'
+ webauthn_disabled:
+ title: Claves de securitate disactivate
+ webauthn_enabled:
+ title: Claves de securitate activate
registrations:
+ destroyed: A revider! Tu conto esseva cancellate con successo. Nos spera vider te novemente tosto.
+ signed_up_but_pending: Un message con un ligamine de confirmation esseva inviate a tu conto de email. Post que tu clicca le ligamine, nos revidera tu application. Tu essera notificate si illo es approbate.
updated: Tu conto ha essite actualisate con successo.
unlocks:
unlocked: Tu conto ha essite disblocate con successo. Initia session a continuar.
diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml
index 332c9da456..9c82bd4529 100644
--- a/config/locales/devise.ie.yml
+++ b/config/locales/devise.ie.yml
@@ -12,6 +12,7 @@ ie:
last_attempt: Hay solmen un prova ante que tui conto deveni serrat.
locked: Tui conto es serrat.
not_found_in_database: Ínvalid %{authentication_keys} o passa-parol.
+ omniauth_user_creation_failure: Errore in li creation de un conto por ti-ci identitá.
pending: Tui conto es ancor sub revision.
timeout: Tui session ha expirat. Ples reintrar denov por continuar.
unauthenticated: Tu deve intrar o registrar te ante continuar.
diff --git a/config/locales/devise.is.yml b/config/locales/devise.is.yml
index 12015fa29d..a045bdd80c 100644
--- a/config/locales/devise.is.yml
+++ b/config/locales/devise.is.yml
@@ -12,6 +12,7 @@ is:
last_attempt: Þú getur reynt einu sinni í viðbót áður en aðgangnum þínum verður læst.
locked: Notandaaðgangurinn þinn er læstur.
not_found_in_database: Ógilt %{authentication_keys} eða lykilorð.
+ omniauth_user_creation_failure: Villa við að útbúa aðgang fyrir þetta auðkenni.
pending: Notandaaðgangurinn þinn er enn til yfirferðar.
timeout: Setan þín er útrunnin. Skráðu þig aftur inn til að halda áfram.
unauthenticated: Þú þarft að skrá þig inn eða nýskrá þig áður en lengra er haldið.
diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml
index 19bd999aad..8aaea3c15b 100644
--- a/config/locales/devise.it.yml
+++ b/config/locales/devise.it.yml
@@ -12,6 +12,7 @@ it:
last_attempt: Hai un altro tentativo, prima che il tuo profilo venga bloccato.
locked: Il tuo profilo è bloccato.
not_found_in_database: "%{authentication_keys} o password non valida."
+ omniauth_user_creation_failure: Errore nella creazione di un account per questa identità.
pending: Il tuo profilo è ancora in revisione.
timeout: La tua sessione è scaduta. Sei pregato di accedere nuovamente per continuare.
unauthenticated: Devi accedere o registrarti, per continuare.
diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml
index 44a9a31839..2cd7cfa415 100644
--- a/config/locales/devise.ja.yml
+++ b/config/locales/devise.ja.yml
@@ -12,6 +12,7 @@ ja:
last_attempt: あと1回失敗するとアカウントがロックされます。
locked: アカウントはロックされました。
not_found_in_database: "%{authentication_keys}かパスワードが誤っています。"
+ omniauth_user_creation_failure: 指定されたIDに対応するアカウントを作成できませんでした。
pending: あなたのアカウントはまだ承認待ちです。
timeout: セッションの有効期限が切れました。続行するには再度ログインしてください。
unauthenticated: 続行するにはログインするか、アカウントを作成してください。
diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml
index 2f60629fd7..f878a5b503 100644
--- a/config/locales/devise.kab.yml
+++ b/config/locales/devise.kab.yml
@@ -13,13 +13,13 @@ kab:
locked: Amiḍan-ik yettwargel.
not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir.
pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli.
- timeout: Tiγimit n tuqqna tezri. Ma ulac aγilif ɛiwed tuqqna akken ad tkemmleḍ.
- unauthenticated: Ilaq ad teqqneḍ neγ ad tjerrḍeḍ akken ad tkemmelḍ.
+ timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ.
+ unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ akken ad tkemmelḍ.
unconfirmed: Ilaq ad wekdeḍ tansa-inek imayl akken ad tkemmelḍ.
mailer:
confirmation_instructions:
action: Senqed tansa-inek imayl
- action_with_app: Wekked sakkin uγal γer %{app}
+ action_with_app: Sentem sakkin uɣal ɣer %{app}
explanation: Aqla-k terniḍ amiḍan deg %{host} s tansa imayl-agi. Mazal-ak yiwen utekki akken ad t-tremdeḍ. Ma mačči d kečč i yessutren ay-agi, ttxil-k ssinef izen-a.
explanation_when_pending: Tsutreḍ-d ajerred deg %{host} s tansa-agi imayl. Ad nγeṛ asuter-ik ticki tsentmeḍ tansa-ik imayl. Send asentem, ur tezmireḍ ara ad teqqneḍ γer umiḍan-ik. Ma yella nugi asuter-ik, isefka-ik ad ttwakksen seg uqeddac, ihi ulac tigawt-nniḍen ara k-d-yettuqeblen. Ma mačči d kečč i yellan deffir n usuter-agi, ttxil-k ssinef izen-agi.
extra_html: Ttxil-k ẓer daγen ilugan n uqeddac akked twetlin n useqdec-nneγ.
@@ -87,7 +87,7 @@ kab:
unlocks:
send_instructions: Deg kra n tesdatin, ad teṭṭfeḍ imayl deg-s iwellihen i yilaqen i userreḥ n umiḍan-ik·im. Ma yella ur tufiḍ ara izen-agi, ttxil-k·m ẓer deg ukaram spam.
send_paranoid_instructions: Ma yella umiḍan-ik·im yella, ad teṭṭfeḍ imayl deg tesdatin i d-iteddun, deg-s iwellihen i yilaqen i userreḥ n umiḍan-ik·im. Ma yella ur tufiḍ ara izen-agi, ttxil-k·m ẓer deg ukaram spam.
- unlocked: Iserreḥ umiḍan-ik·im akken iwata. ttxil qqen akken ad tkemleḍ.
+ unlocked: Iserreḥ umiḍan-ik·im akken iwata. Ttxil qqen akken ad tkemleḍ.
errors:
messages:
already_confirmed: ittwasentem yakan, ttxil εreḍ ad teqneḍ
diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml
index 0c848e4bac..198d44a4f7 100644
--- a/config/locales/devise.ko.yml
+++ b/config/locales/devise.ko.yml
@@ -12,6 +12,7 @@ ko:
last_attempt: 계정이 잠기기까지 한 번의 시도가 남았습니다.
locked: 계정이 잠겼습니다.
not_found_in_database: 올바르지 않은 %{authentication_keys} 혹은 암호입니다.
+ omniauth_user_creation_failure: 이 신원으로 계정을 만드는데 실패했습니다.
pending: 이 계정은 아직 검토 중입니다.
timeout: 세션이 만료되었습니다. 다시 로그인 하세요.
unauthenticated: 계속 하려면 로그인을 해야 합니다.
diff --git a/config/locales/devise.lad.yml b/config/locales/devise.lad.yml
index 2b6b8aafb1..7d447140f4 100644
--- a/config/locales/devise.lad.yml
+++ b/config/locales/devise.lad.yml
@@ -3,7 +3,7 @@ lad:
devise:
confirmations:
confirmed: Tu adreso de posta elektronika tyene sido konfirmado korektamente.
- send_instructions: Risiviras una posta elektronika kon instruksyones para konfirmar tu adreso de posta elektronika en unos minutos. Por favor, komprova tu kuti de spam si no risivites esta posta elektronika.
+ send_instructions: Risiviras una mesaj de posta elektronika kon instruksyones para konfirmar tu adreso de posta elektronika en unos minutos. Por favor, komprova tu kuti de spam si no risivites esta posta elektronika.
send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras una posta elektronika kon instruksyones sobre komo konfirmar tu adreso de posta elektronika en pokos minutos.
failure:
already_authenticated: Ya te konektates kon tu kuento.
@@ -12,7 +12,8 @@ lad:
last_attempt: Aprova una vez mas antes de ke tu kuento sea blokado.
locked: Tu kuento esta blokado.
not_found_in_database: Inkorekto %{authentication_keys} o kod.
- pending: Tu ainda esta basho revizyon.
+ omniauth_user_creation_failure: Ay un error en kriyar un kuento para esta identita.
+ pending: Tu kuento ainda esta basho revizyon.
timeout: Tu sesyon tiene kadukado. Por favor konektate kon tu kuento de muevo para kontinuar.
unauthenticated: Kale konektarte kon tu kuento o enregistrarte antes de kontinuar.
unconfirmed: Tyenes ke konfirmar tu adreso de posta elektronika antes de kontinuar.
@@ -45,17 +46,17 @@ lad:
explanation: Solisitates un muevo kod para tu kuento.
extra: Si no solisitates esto, por favor ignora esta posta. Tu kod no trokara asta ke tu aksedas al atadijo arriva i kriyes un muevo.
subject: 'Mastodon: Instruksyones para reinisyar kod'
- title: Reinisyar kod
+ title: Reinisya kod
two_factor_disabled:
explanation: Agora puedes konektarte kon tu kuento uzando solo tu adreso de posta i kod.
subject: 'Mastodon: La autentifikasyon de dos pasos esta inkapasitada'
subtitle: La autentifikasyon en dos pasos para tu kuento tiene sido inkapasitada.
- title: Autentifikasyon 2FA inkapasitada
+ title: Autentifikasyon de dos pasos inkapasitada
two_factor_enabled:
explanation: Se rekierira un token djenerado por la aplikasyon TOTP konektada para entrar.
subject: 'Mastodon: La autentifikasyon de dos pasos esta kapasitada'
subtitle: La autentifikasyon de dos pasos para tu kuento tiene sido kapasitada.
- title: Autentifikasyon 2FA aktivada
+ title: Autentifikasyon de dos pasos aktivada
two_factor_recovery_codes_changed:
explanation: Los kodiches de rekuperasyon previos tienen sido invalidados i se djeneraron kodiches muevos.
subject: 'Mastodon: Los kodiches de rekuperasyon de dos pasos fueron rejenerados'
@@ -69,9 +70,9 @@ lad:
subject: 'Mastodon: Mueva yave de sigurita'
title: Se tiene adjustado una mueva yave de sigurita
deleted:
- explanation: La sigiente yave de sigurita a sido supremida de tu kuento
+ explanation: La sigiente yave de sigurita a sido suprimida de tu kuento
subject: 'Mastodon: Yave de sigurita supremida'
- title: Una de tus yaves de sigurita tiene sido supremida
+ title: Una de tus yaves de sigurita tiene sido suprimida
webauthn_disabled:
explanation: La autentifikasyon kon yaves de sigurita tiene sido inkapasitada para tu kuento.
extra: Agora el inisyo de sesyon solo es posivle utilizando el token djeenerado por la aplikasyon TOTP konektada.
@@ -89,25 +90,25 @@ lad:
no_token: No puedes akseder a esta pajina si no vienes dizde una posta elektronika de restablesimyento de kod. Si vienes dizde una posta elektronika de restablesimyento de kod, por favor asigurate de utilizar el URL kompleto embiado.
send_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta no deseado si no risives akeya posta elektronika.
- updated: Tu kod a sido trokado kon reusho. Tinenes entrado en kuento.
- updated_not_active: Tu kod se tiene trokado kon reusho.
+ updated: Tu kod a sido trokado kon reushita. Tyenes entrado en kuento.
+ updated_not_active: Tu kod se tiene trokado kon reushita.
registrations:
- destroyed: Tu kuento a sido efasado kon reusho. Asperamos verte de muevo pronto.
+ destroyed: Tu kuento a sido efasado kon reushita. Asperamos verte de muevo pronto.
signed_up: Bienvenido! Te tienes enrejistrado djustamente.
- signed_up_but_inactive: Te tienes enrejistrado kon reusho. Entanto, no se pudio inisyar sesyon porke tu kuento ainda no esta aktivado.
- signed_up_but_locked: Te tienes enrejistrado kon reusho. Entanto, no pudites konektarte kon tu kuento porke tu kuento esta blokado.
+ signed_up_but_inactive: Te tienes enrejistrado kon reushita. Entanto, no se pudio inisyar sesyon porke tu kuento ainda no esta aktivado.
+ signed_up_but_locked: Te tienes enrejistrado kon reushita. Entanto, no pudites konektarte kon tu kuento porke tu kuento esta blokado.
signed_up_but_pending: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Dempues de klikar en el atadijo, revizaremos tu solisitud. Seras avizado si se acheta.
signed_up_but_unconfirmed: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Por favor, sigue el atadijo para aktivar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
- update_needs_confirmation: Tienes aktualizado tu kuento kon reusho, pero kale verifikar tu muevo adreso de posta elektronika. Por favor, komprova tu posta elektronika i sige el atadijo de konfirmasyon para konfirmar tu muevo adreso de posta elektronika. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
- updated: Tu kuento se aktualizo kon reusho.
+ update_needs_confirmation: Tienes aktualizado tu kuento kon reushita, pero kale verifikar tu muevo adreso de posta elektronika. Por favor, komprova tu posta elektronika i sige el atadijo de konfirmasyon para konfirmar tu muevo adreso de posta elektronika. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
+ updated: Tu kuento se aktualizo kon reushita.
sessions:
- already_signed_out: Salites del kuento kon reusho.
- signed_in: Konektates kon tu kuento kon reusho.
- signed_out: Salites del kuento kon reusho.
+ already_signed_out: Salites del kuento kon reushita.
+ signed_in: Konektates kon tu kuento kon reushita.
+ signed_out: Salites del kuento kon reushita.
unlocks:
send_instructions: En unos minutos risiviras una posta elektronika kon instruksyones para dezblokar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
send_paranoid_instructions: Si tu kuento existe, en unos minutos risiviras una posta elektronika kon instruksyones para dezblokarlo. Por favor, reviza tu kuti de posta spam si no risives akeya posta elektronika.
- unlocked: Tu kuento fue dezblokado kon reusho. Por favor, konektate kon tu kuento para kontinuar.
+ unlocked: Tu kuento fue dezblokado kon reushita. Por favor, konektate kon tu kuento para kontinuar.
errors:
messages:
already_confirmed: ya estaba konfirmado, por favor aprova konektarte kon tu kuento
diff --git a/config/locales/devise.lt.yml b/config/locales/devise.lt.yml
index 3fba5ed08e..548894cca0 100644
--- a/config/locales/devise.lt.yml
+++ b/config/locales/devise.lt.yml
@@ -12,6 +12,7 @@ lt:
last_attempt: Turi dar vieną bandymą, kol tavo paskyra bus užrakinta.
locked: Tavo paskyra užrakinta.
not_found_in_database: Netinkami %{authentication_keys} arba slaptažodis.
+ omniauth_user_creation_failure: Klaida kuriant šios tapatybės paskyrą.
pending: Tavo paskyra vis dar peržiūrima.
timeout: Tavo seansas baigėsi. Norėdamas (-a) tęsti, prisijunk dar kartą.
unauthenticated: Prieš tęsdamas (-a) turi prisijungti arba užsiregistruoti.
diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml
index 33d777e2cc..ab6ae84db4 100644
--- a/config/locales/devise.nl.yml
+++ b/config/locales/devise.nl.yml
@@ -12,6 +12,7 @@ nl:
last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort.
locked: Jouw account is opgeschort.
not_found_in_database: "%{authentication_keys} of wachtwoord ongeldig."
+ omniauth_user_creation_failure: Fout bij het aanmaken van een account voor deze identiteit.
pending: Jouw account moet nog steeds worden beoordeeld.
timeout: Jouw sessie is verlopen, log opnieuw in.
unauthenticated: Je dient in te loggen of te registreren.
@@ -74,7 +75,7 @@ nl:
title: Een van jouw beveiligingssleutels is verwijderd
webauthn_disabled:
explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor je account.
- extra: Het is nu alleen mogelijk om te te loggen met een door de authenticatie-app gegeneerde toegangscode.
+ extra: Het is nu alleen mogelijk om in te loggen met een door de authenticatie-app gegeneerde toegangscode.
subject: 'Mastodon: Verificatie met beveiligingssleutels is uitgeschakeld'
title: Beveiligingssleutels uitgeschakeld
webauthn_enabled:
diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml
index 96920d42b5..01d6e5a468 100644
--- a/config/locales/devise.nn.yml
+++ b/config/locales/devise.nn.yml
@@ -12,6 +12,7 @@ nn:
last_attempt: Du har eitt forsøk igjen før kontoen din vert låst.
locked: Kontoen din er låst.
not_found_in_database: Ugyldig %{authentication_keys} eller passord.
+ omniauth_user_creation_failure: Greidde ikkje laga konto for denne identiteten.
pending: Kontoen din er vert gjennomgått enno.
timeout: Økta di er utgått. Logg inn omatt for å halde fram.
unauthenticated: Du må logge inn eller registere deg før du kan halde fram.
@@ -47,19 +48,19 @@ nn:
subject: 'Mastodon: Instuksjonar for å endra passord'
title: Attstilling av passord
two_factor_disabled:
- explanation: Innlogging er nå mulig med kun e-postadresse og passord.
+ explanation: No kan du logga inn med berre epostadresse og passord.
subject: 'Mastodon: To-faktor-autentisering deaktivert'
- subtitle: To-faktor autentisering for din konto har blitt deaktivert.
+ subtitle: Tofaktorinnlogging for denne kontoen er skrudd av.
title: 2FA deaktivert
two_factor_enabled:
- explanation: En token generert av den sammenkoblede TOTP-appen vil være påkrevd for innlogging.
+ explanation: Du treng ein kode frå den tilkopla tofaktor-appen din for å logga inn.
subject: 'Mastodon: To-faktor-autentisering aktivert'
- subtitle: Tofaktorautentisering er aktivert for din konto.
+ subtitle: Tofaktorpålogging er skrudd på for kontoen din.
title: 2FA aktivert
two_factor_recovery_codes_changed:
explanation: Dei førre gjenopprettingskodane er ugyldige og nye er genererte.
subject: 'Mastodon: To-faktor-gjenopprettingskodar har vorte genererte på nytt'
- subtitle: De forrige gjenopprettingskodene er gjort ugyldige og nye er generert.
+ subtitle: Dei førre innloggingskodane er ikkje gyldige lenger, og nye kodar er laga.
title: 2FA-gjenopprettingskodane er endra
unlock_instructions:
subject: 'Mastodon: Instruksjonar for å opne kontoen igjen'
@@ -73,13 +74,13 @@ nn:
subject: 'Mastodon: Sikkerheitsnøkkel sletta'
title: Ein av sikkerheitsnøklane dine har blitt sletta
webauthn_disabled:
- explanation: Autentisering med sikkerhetsnøkler er deaktivert for kontoen din.
- extra: Innlogging er nå mulig med kun tilgangstoken generert av den sammenkoblede TOTP-appen.
+ explanation: Innlogging med tryggingsnykjel er skrudd av for kontoen din.
+ extra: No kan du logga inn med berre kodane som er laga av den tilkopla tofaktor-appen din.
subject: 'Mastodon: Autentisering med sikkerheitsnøklar vart skrudd av'
title: Sikkerheitsnøklar deaktivert
webauthn_enabled:
- explanation: Sikkerhetsnøkkelautentisering har blitt aktivert for kontoen din.
- extra: Sikkerhetsnøkkelen din kan nå bli brukt for innlogging.
+ explanation: Innlogging med tryggingsnyklar er skrudd på for kontoen din.
+ extra: No kan du bruka tryggingsnykjelen din for å logga inn.
subject: 'Mastodon: Sikkerheitsnøkkelsautentisering vart skrudd på'
title: Sikkerheitsnøklar aktivert
omniauth_callbacks:
diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml
index a6d48f11ef..f34fd04633 100644
--- a/config/locales/devise.pl.yml
+++ b/config/locales/devise.pl.yml
@@ -12,6 +12,7 @@ pl:
last_attempt: Masz jeszcze jedną próbę; Twoje konto zostanie zablokowane jeśli się nie powiedzie.
locked: Twoje konto zostało zablokowane.
not_found_in_database: Nieprawidłowy %{authentication_keys} lub hasło.
+ omniauth_user_creation_failure: Błąd przy tworzeniu konta dla tej tożsamości.
pending: Twoje konto oczekuje na przegląd.
timeout: Twoja sesja wygasła. Zaloguj się ponownie, aby kontynuować..
unauthenticated: Zapisz się lub zaloguj, aby kontynuować.
diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml
index 8b53f96514..e79a83c431 100644
--- a/config/locales/devise.pt-BR.yml
+++ b/config/locales/devise.pt-BR.yml
@@ -12,6 +12,7 @@ pt-BR:
last_attempt: Você tem mais uma tentativa antes de sua conta ser bloqueada.
locked: Sua conta está bloqueada.
not_found_in_database: "%{authentication_keys} ou senha inválida."
+ omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
pending: Sua conta está sendo revisada.
timeout: Sua sessão expirou. Por favor, entre novamente para continuar.
unauthenticated: Você precisa entrar ou criar uma conta antes de continuar.
diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml
index c169ddeb97..c66181fc5b 100644
--- a/config/locales/devise.pt-PT.yml
+++ b/config/locales/devise.pt-PT.yml
@@ -12,6 +12,7 @@ pt-PT:
last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada.
locked: A tua conta está bloqueada.
not_found_in_database: "%{authentication_keys} ou palavra-passe inválida."
+ omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
pending: A sua conta está ainda a aguardar revisão.
timeout: A tua sessão expirou. Por favor, entra de novo para continuares.
unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar.
diff --git a/config/locales/devise.ro.yml b/config/locales/devise.ro.yml
index 1a6a3ecd77..868bb4b3a1 100644
--- a/config/locales/devise.ro.yml
+++ b/config/locales/devise.ro.yml
@@ -47,14 +47,19 @@ ro:
subject: Instrucțiuni pentru resetarea parolei
title: Resetare parolă
two_factor_disabled:
+ explanation: Conectarea este acum posibilă folosind doar adresa de e-mail și parola.
subject: Autentificare cu doi factori dezactivată
+ subtitle: Autentificarea cu doi factori pentru contul dvs. a fost dezactivată.
title: 2FA dezactivat
two_factor_enabled:
+ explanation: Pentru autentificare va fi necesar un token generat de aplicația TOTP asociată.
subject: Autentificare în doi pași activată
+ subtitle: Autentificarea cu doi factori a fost activată pentru contul dvs.
title: 2FA activat
two_factor_recovery_codes_changed:
explanation: Codurile anterioare de recuperare au fost invalidate și unele noi generate.
subject: Recuperare în doi factori
+ subtitle: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi.
title: Coduri de recuperare 2FA modificate
unlock_instructions:
subject: Instrucțiuni de deblocare
@@ -68,9 +73,13 @@ ro:
subject: 'Mastodon: Cheie de securitate ștearsă'
title: Una dintre cheile tale de securitate a fost ștearsă
webauthn_disabled:
+ explanation: Autentificarea cu chei de securitate a fost dezactivată pentru contul dvs.
+ extra: Conectarea este acum posibilă folosind doar token-ul generat de aplicația TOTP asociată.
subject: 'Mastodon: Autentificarea cu chei de securitate dezactivată'
title: Chei de securitate dezactivate
webauthn_enabled:
+ explanation: Autentificarea cu cheie de securitate a fost activată pentru contul dvs.
+ extra: Cheia ta de securitate poate fi acum folosită pentru conectare.
subject: 'Mastodon: Autentificarea cheii de securitate activată'
title: Chei de securitate activate
omniauth_callbacks:
diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml
index 3eb4b5304c..bc01b73ccf 100644
--- a/config/locales/devise.sk.yml
+++ b/config/locales/devise.sk.yml
@@ -12,6 +12,7 @@ sk:
last_attempt: Máš posledný pokus pred zamknutím tvojho účtu.
locked: Tvoj účet je zamknutý.
not_found_in_database: Nesprávny %{authentication_keys}, alebo heslo.
+ omniauth_user_creation_failure: Chyba pri vytváraní účtu pre túto identitu.
pending: Tvoj účet je stále prehodnocovaný.
timeout: Tvoja aktívna sezóna vypršala. Pre pokračovanie sa prosím prihlás znovu.
unauthenticated: K pokračovaniu sa musíš zaregistrovať alebo prihlásiť.
diff --git a/config/locales/devise.sl.yml b/config/locales/devise.sl.yml
index 2d567e63f4..0eb9b6330a 100644
--- a/config/locales/devise.sl.yml
+++ b/config/locales/devise.sl.yml
@@ -12,6 +12,7 @@ sl:
last_attempt: Pred zaklepom računa imate še en poskus.
locked: Vaš račun je zaklenjen.
not_found_in_database: Neveljavno %{authentication_keys} ali geslo.
+ omniauth_user_creation_failure: Napaka pri ustvarjanju računa za to identiteto.
pending: Vaš račun je še vedno pod drobnogledom.
timeout: Vaša seja je potekla. Če želite nadaljevati, se znova prijavite.
unauthenticated: Pred nadaljevanjem se morate prijaviti ali vpisati.
diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml
index 32136a0baa..76dd493245 100644
--- a/config/locales/devise.sq.yml
+++ b/config/locales/devise.sq.yml
@@ -12,6 +12,7 @@ sq:
last_attempt: Mund të provoni edhe një herë, përpara se llogaria juaj të kyçet.
locked: Llogaria juaj është e kyçur.
not_found_in_database: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
+ omniauth_user_creation_failure: Gabim në krijim llogarie për këtë identitet.
pending: Llogaria juaj është ende nën shqyrtim.
timeout: Sesioni juaj ka skaduar. Ju lutemi, që të vazhdohet, ribëni hyrjen.
unauthenticated: Përpara se të vazhdohet më tej, lypset të bëni hyrjen ose të regjistroheni.
diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml
index c48ed87dca..3947b2d84f 100644
--- a/config/locales/devise.sr-Latn.yml
+++ b/config/locales/devise.sr-Latn.yml
@@ -12,6 +12,7 @@ sr-Latn:
last_attempt: Imate još jedan pokušaj pre nego što Vaš nalog bude zaključan.
locked: Vaš nalog je zaključan.
not_found_in_database: Neispravna %{authentication_keys} ili lozinka.
+ omniauth_user_creation_failure: Greška pri kreiranju naloga za ovaj identitet.
pending: Vaš račun je još uvek u pregledu.
timeout: Vreme trajanja Vaše sesije je isteklo. Za nastavak prijavite se ponovo.
unauthenticated: Za nastavak se morate prijaviti ili registrovati.
diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml
index 3e49cf97ee..a4c08dfaf0 100644
--- a/config/locales/devise.sr.yml
+++ b/config/locales/devise.sr.yml
@@ -12,6 +12,7 @@ sr:
last_attempt: Имате још један покушај пре него што Ваш налог буде закључан.
locked: Ваш налог је закључан.
not_found_in_database: Неисправна %{authentication_keys} или лозинка.
+ omniauth_user_creation_failure: Грешка при креирању налога за овај идентитет.
pending: Ваш налог се још увек прегледа.
timeout: Ваша сесија је истекла. Пријавите се поново да бисте наставили.
unauthenticated: Морате да се пријавите или региструјете пре него што наставите.
diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml
index 6544f426bd..9300493fa0 100644
--- a/config/locales/devise.sv.yml
+++ b/config/locales/devise.sv.yml
@@ -77,6 +77,7 @@ sv:
subject: 'Mastodon: Autentisering med säkerhetsnycklar är inaktiverat'
title: Säkerhetsnycklar inaktiverade
webauthn_enabled:
+ explanation: Autentisering med säkerhetsnyckel har aktiverats för ditt konto.
extra: Din säkerhetsnyckel kan nu användas för inloggning.
subject: 'Mastodon: Autentisering med säkerhetsnyckel är aktiverat'
title: Säkerhetsnycklar aktiverade
diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml
index 40baabcf75..50e2e4b29e 100644
--- a/config/locales/devise.th.yml
+++ b/config/locales/devise.th.yml
@@ -12,6 +12,7 @@ th:
last_attempt: คุณลองได้อีกหนึ่งครั้งก่อนที่จะมีการล็อคบัญชีของคุณ
locked: มีการล็อคบัญชีของคุณอยู่
not_found_in_database: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง"
+ omniauth_user_creation_failure: เกิดข้อผิดพลาดในการสร้างบัญชีสำหรับข้อมูลประจำตัวนี้
pending: บัญชีของคุณยังคงอยู่ระหว่างการตรวจทาน
timeout: เซสชันของคุณหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้งเพื่อดำเนินการต่อ
unauthenticated: คุณจำเป็นต้องเข้าสู่ระบบหรือลงทะเบียนก่อนดำเนินการต่อ
diff --git a/config/locales/devise.tok.yml b/config/locales/devise.tok.yml
new file mode 100644
index 0000000000..d15ecd21b2
--- /dev/null
+++ b/config/locales/devise.tok.yml
@@ -0,0 +1 @@
+tok:
diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml
index 66ca9b2816..e709d3fff1 100644
--- a/config/locales/devise.tr.yml
+++ b/config/locales/devise.tr.yml
@@ -12,6 +12,7 @@ tr:
last_attempt: Hesabınız kilitlenmeden önce bir kez daha denemeniz gerekir.
locked: Hesabınız kilitlendi.
not_found_in_database: Geçersiz %{authentication_keys} ya da parola.
+ omniauth_user_creation_failure: Bu kimlik için hesap oluşturmada hata.
pending: Hesabınız hala inceleniyor.
timeout: Oturum süreniz sona erdi. Lütfen devam etmek için tekrar giriş yapınız.
unauthenticated: Devam etmeden önce oturum açmanız veya kayıt olmanız gerek.
diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml
index 55429b3c76..65e89a274f 100644
--- a/config/locales/devise.uk.yml
+++ b/config/locales/devise.uk.yml
@@ -12,6 +12,7 @@ uk:
last_attempt: У вас залишилась ще одна спроба, після якої ваш обліковий запис буде заблоковано.
locked: Ваш обліковий запис заблоковано.
not_found_in_database: Неправильний %{authentication_keys} або пароль.
+ omniauth_user_creation_failure: Помилка створення облікового запису для цієї особи.
pending: Ваш обліковий запис ще перебуває на розгляді.
timeout: Час сеансу минув. Будь ласка, увійдіть знову, щоб продовжити.
unauthenticated: Щоб продовжити, увійдіть або зареєструйтеся.
@@ -47,14 +48,19 @@ uk:
subject: 'Mastodon: Інструкції для скидання паролю'
title: Скидання пароля
two_factor_disabled:
+ explanation: Вхід можливий лише за допомогою адреси електронної пошти та пароля.
subject: 'Mastodon: двофакторну авторизацію вимкнено'
+ subtitle: Двоетапна перевірка для вашого облікового запису вимкнена.
title: Двофакторна автентифікація вимкнена
two_factor_enabled:
+ explanation: Для входу необхідний токен створений пов'язаним застосунком TOTP.
subject: 'Mastodon: двофакторну авторизацію увімкнено'
+ subtitle: Двоетапна перевірка увімкнена для вашого облікового запису.
title: Двофакторна автентифікація увімкнена
two_factor_recovery_codes_changed:
explanation: Попередні коди відновлення були анульовані і генеруються нові.
subject: 'Mastodon: коди двофакторного відновлення повторно згенеровано'
+ subtitle: Попередні коди відновлення анульовані та генеруються нові.
title: Коди двофакторного відновлення змінено
unlock_instructions:
subject: 'Mastodon: Інструкції для розблокування'
@@ -68,9 +74,13 @@ uk:
subject: 'Mastodon: Ключ безпеки видалено'
title: Один з ваших ключів безпеки було видалено
webauthn_disabled:
+ explanation: Автентифікація з ключами безпеки була вимкнена для вашого облікового запису.
+ extra: Тепер можна ввійти використовуючи лише токен, згенерований застосунком TOTP.
subject: 'Mastodon: Аутентифікація за допомогою ключів безпеки вимкнена'
title: Ключі безпеки вимкнуто
webauthn_enabled:
+ explanation: Вхід за допомогою ключів безпеки ввімкнено для вашого облікового запису.
+ extra: Тепер ви можете використовувати ваш ключ безпеки для входу.
subject: 'Mastodon: Авторизація ключа безпеки увімкнена'
title: Ключі безпеки увімкнено
omniauth_callbacks:
diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml
index 190f7282c4..6ae78f83cc 100644
--- a/config/locales/devise.vi.yml
+++ b/config/locales/devise.vi.yml
@@ -12,6 +12,7 @@ vi:
last_attempt: Nếu thử sai lần nữa, tài khoản của bạn sẽ bị khóa.
locked: Tài khoản của bạn bị khóa.
not_found_in_database: "%{authentication_keys} không có trong dữ liệu."
+ omniauth_user_creation_failure: Xảy ra lỗi khi tạo tài khoản này.
pending: Tài khoản của bạn vẫn đang được xem xét.
timeout: Phiên của bạn đã hết hạn. Vui lòng đăng nhập lại để tiếp tục.
unauthenticated: Bạn cần đăng nhập để tiếp tục.
diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml
index 9b4b3ae203..3eb722b961 100644
--- a/config/locales/devise.zh-CN.yml
+++ b/config/locales/devise.zh-CN.yml
@@ -12,6 +12,7 @@ zh-CN:
last_attempt: 你只有最后一次尝试机会,若未通过,帐号将被锁定。
locked: 你的账户已被锁定。
not_found_in_database: "%{authentication_keys}或密码错误。"
+ omniauth_user_creation_failure: 为此身份创建账户时出错。
pending: 你的账号仍在审核中。
timeout: 你的会话已过期。请重新登录再继续操作。
unauthenticated: 继续操作前请注册或者登录。
diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml
index 7f728bf0ad..a2620a8e4a 100644
--- a/config/locales/devise.zh-HK.yml
+++ b/config/locales/devise.zh-HK.yml
@@ -12,6 +12,7 @@ zh-HK:
last_attempt: 若你再一次嘗試失敗,我們將鎖定你的帳號,以策安全。
locked: 你的帳號已被鎖定。
not_found_in_database: 不正確的%{authentication_keys}或密碼。
+ omniauth_user_creation_failure: 為此身份建立帳號時出錯。
pending: 你的帳號仍在審核中
timeout: 你的登入階段已經過期,請重新登入以繼續使用。
unauthenticated: 你必須先登入或登記,以繼續使用。
diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml
index 06438971a7..7ead831e4f 100644
--- a/config/locales/devise.zh-TW.yml
+++ b/config/locales/devise.zh-TW.yml
@@ -12,6 +12,7 @@ zh-TW:
last_attempt: 帳號鎖定前,您還有最後一次嘗試機會。
locked: 已鎖定您的帳號。
not_found_in_database: 無效的 %{authentication_keys} 或密碼。
+ omniauth_user_creation_failure: 以此身分新增帳號時發生錯誤。
pending: 您的帳號仍在審核中。
timeout: 登入階段逾時。請重新登入以繼續。
unauthenticated: 您必須先登入或註冊才能繼續使用。
diff --git a/config/locales/doorkeeper.be.yml b/config/locales/doorkeeper.be.yml
index 4524dd707e..748cbeafa1 100644
--- a/config/locales/doorkeeper.be.yml
+++ b/config/locales/doorkeeper.be.yml
@@ -132,7 +132,7 @@ be:
follow: Падпіскі, ігнараванне і блакіроўка
follows: Падпіскі
lists: Спісы
- media: Мультымедыйныя ўкладанні
+ media: Мультымедыйныя далучэнні
mutes: Ігнараваныя
notifications: Апавяшчэнні
push: Push-апавяшчэнні
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index ba2100edfd..be2a4d971a 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -84,7 +84,7 @@ cs:
credential_flow_not_configured: Proud Resource Owner Password Credentials selhal, protože Doorkeeper.configure.resource_owner_from_credentials nebylo nakonfigurováno.
invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentizaci či nepodporované autentizační metodě.
invalid_grant: Poskytnuté oprávnění je neplatné, vypršela jeho platnost, bylo odvoláno, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu.
- invalid_redirect_uri: URI pro přesměrování není platné.
+ invalid_redirect_uri: Zahrnutá přesměrovací URI není platná.
invalid_request:
missing_param: 'Chybí potřebný parametr: %{value}.'
request_not_authorized: Požadavek musí být autorizován. Potřebný parametr pro autorizaci požadavku chybí nebo není platný.
diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml
index 9886e034b0..e7963672fa 100644
--- a/config/locales/doorkeeper.eu.yml
+++ b/config/locales/doorkeeper.eu.yml
@@ -97,7 +97,7 @@ eu:
unknown: Sarbide token-a baliogabea da
resource_owner_authenticator_not_configured: Baliabidearen jabearen bilaketak huts egin du Doorkeeper.configure.resource_owner_authenticator konfiguratu gabe dagoelako.
server_error: Autorizatze zerbitzariak eskaera betetzea eragotzi duen ustekabeko baldintza bat aurkitu du.
- temporarily_unavailable: Autorizatze zerbitzariak ezin du orain eskaera bete une batez zerbitzariak gainezka egin duelako edo mantentze lanetan dagoelako.
+ temporarily_unavailable: Baimen-zerbitzariak ezin du orain eskaera bete, une batez zerbitzariak gainezka egin duelako edo mantentze lanetan dagoelako.
unauthorized_client: Bezeroak ez du eskaera hau metodo hau erabiliz egiteko baimenik.
unsupported_grant_type: Autorizatze mota ez da onartzen autorizatze zerbitzarian.
unsupported_response_type: Autorizatze zerbitzari honek ez du onartzen erantzun mota hau.
diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml
index 57ee4777c9..7564bc2dc6 100644
--- a/config/locales/doorkeeper.gl.yml
+++ b/config/locales/doorkeeper.gl.yml
@@ -151,9 +151,9 @@ gl:
admin:read:accounts: ler información sensible de todas as contas
admin:read:canonical_email_blocks: ler a información sensíbel de tódolos bloqueos de correos electrónicos canónicos
admin:read:domain_allows: ler a información sensible de todos os dominios permitidos
- admin:read:domain_blocks: ler a información sensible de tódolos bloqueos de dominio
+ admin:read:domain_blocks: ler a información sensible de todos os bloqueos de dominio
admin:read:email_domain_blocks: ler a información sensible de tódolos dominios de correo electrónico
- admin:read:ip_blocks: ler a información sensible de tódolos bloqueos de IP
+ admin:read:ip_blocks: ler a información sensible de todos os bloqueos de IP
admin:read:reports: ler información sensible de todos os informes e contas denunciadas
admin:write: modificar todos os datos no servidor
admin:write:accounts: executar accións de moderación nas contas
diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml
index d689354f61..443342b404 100644
--- a/config/locales/doorkeeper.ia.yml
+++ b/config/locales/doorkeeper.ia.yml
@@ -34,6 +34,8 @@ ia:
confirmations:
revoke: Es tu secur?
index:
+ last_used_at: Ultime uso in %{date}
+ never_used: Nunquam usate
scopes: Permissiones
title: Tu applicationes autorisate
flash:
@@ -53,6 +55,7 @@ ia:
conversations: Conversationes
favourites: Favoritos
lists: Listas
+ mutes: Silentiates
notifications: Notificationes
push: Notificationes push
search: Cercar
@@ -63,15 +66,23 @@ ia:
applications: Applicationes
oauth2_provider: Fornitor OAuth2
scopes:
+ admin:read: leger tote le datos in le servitor
+ read: leger tote le datos de tu conto
+ read:accounts: vider informationes de conto
read:favourites: vider tu favoritos
+ read:filters: vider tu filtros
read:lists: vider tu listas
read:notifications: vider tu notificationes
+ read:reports: vider tu reportos
read:statuses: vider tote le messages
write:accounts: modificar tu profilo
write:blocks: blocar contos e dominios
+ write:conversations: silentiar e deler conversationes
write:favourites: messages favorite
write:filters: crear filtros
+ write:follows: sequer personas
write:lists: crear listas
write:media: incargar files de medios
+ write:mutes: silentiar personas e conversationes
write:notifications: rader tu notificationes
write:statuses: publicar messages
diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml
index fe1a8d9c50..d7f8904a35 100644
--- a/config/locales/doorkeeper.kab.yml
+++ b/config/locales/doorkeeper.kab.yml
@@ -36,7 +36,7 @@ kab:
application: Asnas
callback_url: URL n tririt n wawal
delete: Kkes
- empty: Ulac γur-ek·em isnasen.
+ empty: Ulac ɣur-k·m isnasen.
name: Isem
new: Asnas amaynut
show: Ẓer
@@ -57,7 +57,7 @@ kab:
new:
title: Tlaq tsiregt
show:
- title: Nγel tangalt n wurag sakkin senteḍ-itt deg usnas.
+ title: Nɣel tangalt n wurag sakkin senteḍ-itt deg usnas.
authorized_applications:
buttons:
revoke: Ḥwi
@@ -113,13 +113,13 @@ kab:
read:notifications: ẓer tilγa-ik
read:reports: ẓer ineqqisen-ik·im
read:search: anadi deg umkan-ik·im
- read:statuses: ẓer meṛṛa tisuffaγ
+ read:statuses: ẓer meṛṛa tisuffaɣ
write: beddel meṛṛa isefka n umiḍan-ik
write:accounts: ẓreg amaγnu-ik
write:blocks: seḥbes imiḍanen d tγula
- write:bookmarks: ad yernu tisuffγin γer ticraḍ
+ write:bookmarks: ad yernu tisuffaɣ ɣer ticraḍ
write:filters: rnu-d imsizedgen
write:follows: ḍfeṛ imdanen
write:lists: ad yesnulfu tibdarin
- write:media: ad yessali ifayluyen n teγwalt
+ write:media: ad yessali ifuyla n umidya
write:notifications: sfeḍ tilɣa-k·m
diff --git a/config/locales/doorkeeper.lad.yml b/config/locales/doorkeeper.lad.yml
index f52bac39c2..b2c140b9c2 100644
--- a/config/locales/doorkeeper.lad.yml
+++ b/config/locales/doorkeeper.lad.yml
@@ -130,7 +130,7 @@ lad:
favourites: Favoritos
filters: Filtros
follow: Segimientos, silensiasyones i blokos
- follows: Segimientos
+ follows: Segimyentos
lists: Listas
media: Aneksos de multimedia
mutes: Silensiasyones
diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml
index 3c2c75565b..067e065588 100644
--- a/config/locales/doorkeeper.th.yml
+++ b/config/locales/doorkeeper.th.yml
@@ -156,13 +156,13 @@ th:
admin:read:ip_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้น IP ทั้งหมด
admin:read:reports: อ่านข้อมูลที่ละเอียดอ่อนของรายงานและบัญชีที่ได้รับการรายงานทั้งหมด
admin:write: ปรับเปลี่ยนข้อมูลทั้งหมดในเซิร์ฟเวอร์
- admin:write:accounts: ทำการกระทำการควบคุมบัญชี
- admin:write:canonical_email_blocks: ทำการกระทำการควบคุมการปิดกั้นอีเมลมาตรฐาน
- admin:write:domain_allows: ทำการกระทำการควบคุมการอนุญาตโดเมน
- admin:write:domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมน
- admin:write:email_domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมนอีเมล
- admin:write:ip_blocks: ทำการกระทำการควบคุมการปิดกั้น IP
- admin:write:reports: ทำการกระทำการควบคุมรายงาน
+ admin:write:accounts: ทำการกระทำการกลั่นกรองต่อบัญชี
+ admin:write:canonical_email_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นอีเมลมาตรฐาน
+ admin:write:domain_allows: ทำการกระทำการกลั่นกรองต่อการอนุญาตโดเมน
+ admin:write:domain_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นโดเมน
+ admin:write:email_domain_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นโดเมนอีเมล
+ admin:write:ip_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้น IP
+ admin:write:reports: ทำการกระทำการกลั่นกรองต่อรายงาน
crypto: ใช้การเข้ารหัสแบบต้นทางถึงปลายทาง
follow: ปรับเปลี่ยนความสัมพันธ์ของบัญชี
push: รับการแจ้งเตือนแบบผลักของคุณ
diff --git a/config/locales/doorkeeper.tok.yml b/config/locales/doorkeeper.tok.yml
new file mode 100644
index 0000000000..6aef4fb34b
--- /dev/null
+++ b/config/locales/doorkeeper.tok.yml
@@ -0,0 +1,51 @@
+---
+tok:
+ doorkeeper:
+ applications:
+ buttons:
+ cancel: o pini
+ destroy: o weka
+ edit: o ante
+ submit: o awen
+ confirmations:
+ destroy: ni li pona ala pona?
+ edit:
+ title: o ante e ilo nanpa
+ form:
+ error: 'pakala a! o lukin e ni: lipu sina li jo ala jo e pakala.'
+ index:
+ delete: o weka
+ empty: sina li jo e ilo nanpa ala.
+ name: nimi
+ new: o pali e ilo nanpa sin
+ title: ilo nanpa sina
+ new:
+ title: o pali e ilo nanpa sin
+ show:
+ title: ilo nanpa pi nimi %{name}
+ authorizations:
+ error:
+ title: pakala li lon.
+ authorized_applications:
+ confirmations:
+ revoke: ni li pona ala pona?
+ index:
+ scopes: ken
+ errors:
+ messages:
+ invalid_request:
+ missing_param: o pana e sona "%{value}".
+ flash:
+ applications:
+ create:
+ notice: sina pali e ilo nanpa.
+ destroy:
+ notice: sina weka e ilo nanpa.
+ update:
+ notice: sina ante e ilo nanpa.
+ authorized_applications:
+ destroy:
+ notice: sina weka e ilo nanpa tawa sina.
+ grouped_scopes:
+ access:
+ read: lukin taso
diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml
index fce8c646e8..2dde5f6322 100644
--- a/config/locales/doorkeeper.tr.yml
+++ b/config/locales/doorkeeper.tr.yml
@@ -15,7 +15,7 @@ tr:
fragment_present: parça içeremez.
invalid_uri: geçerli bir URL olmalıdır.
relative_uri: mutlaka bir URL olmalıdır.
- secured_uri: HTTPS/SSL URL olması gerekir.
+ secured_uri: HTTPS/SSL URI olması gerekir.
doorkeeper:
applications:
buttons:
@@ -84,7 +84,7 @@ tr:
credential_flow_not_configured: Kaynak Sahibi Parolası Kimlik Bilgileri akışı Doorkeeper.configure.resource_owner_from_credentials 'ın yapılandırılmamış olması nedeniyle başarısız oldu.
invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu.
invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URL'siyle eşleşmiyor veya başka bir istemciye verilmiş.
- invalid_redirect_uri: Dahil edilmiş yönlendirme URL'si geçersiz.
+ invalid_redirect_uri: Dahil edilmiş yönlendirme uri'si geçersiz.
invalid_request:
missing_param: 'Gerekli parametre eksik: %{value}.'
request_not_authorized: İsteğin yetkilendirilmesi gerekiyor. İsteği yetkilendirmek için gereken parametre eksik veya geçersiz.
@@ -128,7 +128,7 @@ tr:
conversations: Sohbetler
crypto: Uçtan uca şifreleme
favourites: Favoriler
- filters: Filtreler
+ filters: Süzgeçler
follow: Takipler, Sessizler ve Engeller
follows: Takip edilenler
lists: Listeler
@@ -161,7 +161,7 @@ tr:
admin:write:domain_allows: alan adı izinleri için denetleme eylemleri gerçekleştirin
admin:write:domain_blocks: alan adı engellemeleri için denetleme eylemleri gerçekleştirin
admin:write:email_domain_blocks: e-posta alan adı engellemeleri için denetleme eylemleri gerçekleştirin
- admin:write:ip_blocks: IP engellemeleri için denetleme eylemleri gerçekleştirin
+ admin:write:ip_blocks: IP blokları üzerinde moderasyon eylemleri gerçekleştir
admin:write:reports: raporlarda denetleme eylemleri gerçekleştirin
crypto: uçtan uca şifreleme kullan
follow: hesap ilişkilerini değiştirin
@@ -171,7 +171,7 @@ tr:
read:blocks: engellemelerinizi görün
read:bookmarks: yer imlerinizi görün
read:favourites: favorilerinizi görün
- read:filters: filtrelerinizi görün
+ read:filters: süzgeçlerinizi görün
read:follows: takip ettiklerinizi görün
read:lists: listelerinizi görün
read:mutes: sessize aldıklarınızı görün
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 8b632a358b..c641d4dca9 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -309,6 +309,7 @@ el:
unpublish: Αναίρεση δημοσίευσης
unpublished_msg: Επιτυχής ακύρωση δημοσίευσης ανακοίνωσης!
updated_msg: Επιτυχής ενημέρωση ανακοίνωσης!
+ critical_update_pending: Κρίσιμη ενημέρωση σε αναμονή
custom_emojis:
assign_category: Ανάθεση κατηγορίας
by_domain: Τομέας
@@ -382,6 +383,15 @@ el:
undo: Αφαίρεση συναλλαγής με τον τομέα
domain_blocks:
add_new: Προσθήκη νέου αποκλεισμού τομέα
+ confirm_suspension:
+ cancel: Άκυρο
+ confirm: Αναστολή
+ permanent_action: Η κατάργηση της αναστολής δε θα αποκαταστήσει καθόλου δεδομένα ή σχέση.
+ preamble_html: Πρόκειται να αναστείλετε το %{domain} και τους υποτομείς του.
+ remove_all_data: Αυτό θα αφαιρέσει όλο το περιεχόμενο, τα μέσα και τα δεδομένα προφίλ για τους λογαριασμούς αυτού του τομέα από το διακομιστή σας.
+ stop_communication: Ο διακομιστής σας θα σταματήσει να επικοινωνεί με αυτούς τους διακομιστές.
+ title: Επιβεβαίωση αποκλεισμού τομέα για %{domain}
+ undo_relationships: Αυτό θα αναιρέσει οποιαδήποτε σχέση ακολουθίας μεταξύ των λογαριασμών αυτών των διακομιστών και των δικών σας.
created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία
destroyed_msg: Ο αποκλεισμός τομέα αναιρέθηκε
domain: Τομέας
@@ -415,6 +425,7 @@ el:
view: Εμφάνιση αποκλεισμού τομέα
email_domain_blocks:
add_new: Προσθήκη νέου
+ allow_registrations_with_approval: Να επιτρέπονται εγγραφές με έγκριση
attempts_over_week:
one: "%{count} προσπάθεια την τελευταία εβδομάδα"
other: "%{count} προσπάθειες εγγραφής την τελευταία εβδομάδα"
@@ -524,6 +535,7 @@ el:
total_reported: Αναφορές προς εκείνους
total_storage: Συνημμένα πολυμέσα
totals_time_period_hint_html: Τα σύνολα που εμφανίζονται παρακάτω περιλαμβάνουν στοιχεία από την αρχή.
+ unknown_instance: Προς το παρόν δεν υπάρχει καμία εγγραφή αυτού του τομέα σε αυτόν το διακομιστή.
invites:
deactivate_all: Απενεργοποίηση όλων
filter:
@@ -600,6 +612,7 @@ el:
created_at: Αναφέρθηκε
delete_and_resolve: Διαγραφή αναρτήσεων
forwarded: Προωθημένα
+ forwarded_replies_explanation: Αυτή η αναφορά είναι από απομακρυσμένο χρήστη και για απομακρυσμένο περιεχόμενο. Σας έχει διαβιβαστεί, επειδή το αναφερόμενο περιεχόμενο απαντά σε έναν από τους χρήστες σας.
forwarded_to: Προώθημένα προς %{domain}
mark_as_resolved: Σημείωση ως επιλυμένο
mark_as_sensitive: Σήμανση ως ευαίσθητο
@@ -1694,10 +1707,6 @@ el:
edit_profile_action: Στήσιμο προφίλ
edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν.
explanation: Μερικές συμβουλές για να ξεκινήσεις
- final_action: Ξεκίνα να αναρτάς
- final_step: 'Ξεκίνα να δημοσιεύεις! Ακόμα και χωρίς ακόλουθους τις δημόσιες δημοσιεύσεις σου μπορεί να τις δουν άλλοι, για παράδειγμα στην τοπική ροή ή στις ετικέτες. Ίσως να θέλεις να μας γνωρίσεις τον εαυτό σου με την ετικέτα #introductions.'
- full_handle: Το πλήρες όνομά σου
- full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο διακομιστή.
subject: Καλώς ήρθες στο Mastodon
title: Καλώς όρισες, %{name}!
users:
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index b11c6de11f..6b2554fe15 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -425,6 +425,7 @@ en-GB:
view: View domain block
email_domain_blocks:
add_new: Add new
+ allow_registrations_with_approval: Allow registrations with approval
attempts_over_week:
one: "%{count} attempt over the last week"
other: "%{count} sign-up attempts over the last week"
@@ -1545,6 +1546,9 @@ en-GB:
errors:
limit_reached: Limit of different reactions reached
unrecognized_emoji: is not a recognised emoji
+ redirects:
+ prompt: If you trust this link, click it to continue.
+ title: You are leaving %{instance}.
relationships:
activity: Account activity
confirm_follow_selected_followers: Are you sure you want to follow selected followers?
@@ -1607,6 +1611,7 @@ en-GB:
unknown_browser: Unknown Browser
weibo: Weibo
current_session: Current session
+ date: Date
description: "%{browser} on %{platform}"
explanation: These are the web browsers currently logged in to your Mastodon account.
ip: IP
@@ -1773,16 +1778,27 @@ en-GB:
webauthn: Security keys
user_mailer:
appeal_approved:
+ action: Account Settings
explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been approved. Your account is once again in good standing.
subject: Your appeal from %{date} has been approved
+ subtitle: Your account is once again in good standing.
title: Appeal approved
appeal_rejected:
explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been rejected.
subject: Your appeal from %{date} has been rejected
+ subtitle: Your appeal has been rejected.
title: Appeal rejected
backup_ready:
+ explanation: You requested a full backup of your Mastodon account.
+ extra: It's now ready for download!
subject: Your archive is ready for download
title: Archive takeout
+ failed_2fa:
+ details: 'Here are details of the sign-in attempt:'
+ explanation: Someone has tried to sign in to your account but provided an invalid second authentication factor.
+ further_actions_html: If this wasn't you, we recommend that you %{action} immediately as it may be compromised.
+ subject: Second factor authentication failure
+ title: Failed second factor authentication
suspicious_sign_in:
change_password: change your password
details: 'Here are details of the login:'
@@ -1825,10 +1841,6 @@ en-GB:
edit_profile_action: Setup profile
edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
explanation: Here are some tips to get you started
- final_action: Start posting
- final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.'
- full_handle: Your full handle
- full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
subject: Welcome to Mastodon
title: Welcome aboard, %{name}!
users:
@@ -1836,6 +1848,7 @@ en-GB:
go_to_sso_account_settings: Go to your identity provider's account settings
invalid_otp_token: Invalid two-factor code
otp_lost_help_html: If you lost access to both, you may get in touch with %{email}
+ rate_limited: Too many authentication attempts, try again later.
seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
signed_in_as: 'Logged in as:'
verification:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 9d739be07f..cff244a4b9 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -767,6 +767,7 @@ en:
disabled: To no one
users: To logged-in local users
registrations:
+ moderation_recommandation: Please make sure you have an adequate and reactive moderation team before you open registrations to everyone!
preamble: Control who can create an account on your server.
title: Registrations
registrations_mode:
@@ -774,6 +775,7 @@ en:
approved: Approval required for sign up
none: Nobody can sign up
open: Anyone can sign up
+ warning_hint: We recommend using “Approval required for sign up” unless you are confident your moderation team can handle spam and malicious registrations in a timely fashion.
security:
authorized_fetch: Require authentication from federated servers
authorized_fetch_hint: Requiring authentication from federated servers enables stricter enforcement of both user-level and server-level blocks. However, this comes at the cost of a performance penalty, reduces the reach of your replies, and may introduce compatibility issues with some federated services. In addition, this will not prevent dedicated actors from fetching your public posts and accounts.
@@ -966,6 +968,9 @@ en:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Due to a lack of recent moderator activity, registrations on %{instance} have been automatically switched to requiring manual review, to prevent %{instance} from being used as a platform for potential bad actors. You can switch it back to open registrations at any time.
+ subject: Registrations for %{instance} have been automatically switched to requiring approval
new_appeal:
actions:
delete_statuses: to delete their posts
@@ -1839,13 +1844,42 @@ en:
silence: Account limited
suspend: Account suspended
welcome:
- edit_profile_action: Setup profile
- edit_profile_step: You can customize your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
+ apps_android_action: Get it on Google Play
+ apps_ios_action: Download on the App Store
+ apps_step: Download our official apps.
+ apps_title: Mastodon apps
+ checklist_subtitle: 'Let''s get you started on this new social frontier:'
+ checklist_title: Welcome Checklist
+ edit_profile_action: Personalize
+ edit_profile_step: Boost your interactions by having a comprehensive profile.
+ edit_profile_title: Personalize your profile
explanation: Here are some tips to get you started
- final_action: Start posting
- final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.'
- full_handle: Your full handle
- full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
+ feature_action: Learn more
+ feature_audience: Mastodon provides you with a unique possibility of managing your audience without middlemen. Mastodon deployed on your own infrastructure allows you to follow and be followed from any other Mastodon server online and is under no one's control but yours.
+ feature_audience_title: Build your audience in confidence
+ feature_control: You know best what you want to see on your home feed. No algorithms or ads to waste your time. Follow anyone across any Mastodon server from a single account and receive their posts in chronological order, and make your corner of the internet a little more like you.
+ feature_control_title: Stay in control of your own timeline
+ feature_creativity: Mastodon supports audio, video and picture posts, accessibility descriptions, polls, content warnings, animated avatars, custom emojis, thumbnail crop control, and more, to help you express yourself online. Whether you're publishing your art, your music, or your podcast, Mastodon is there for you.
+ feature_creativity_title: Unparalleled creativity
+ feature_moderation: Mastodon puts decision making back in your hands. Each server creates their own rules and regulations, which are enforced locally and not top-down like corporate social media, making it the most flexible in responding to the needs of different groups of people. Join a server with the rules you agree with, or host your own.
+ feature_moderation_title: Moderating the way it should be
+ follow_action: Follow
+ follow_step: Following interesting people is what Mastodon is all about.
+ follow_title: Personalize your home feed
+ follows_subtitle: Follow well-known accounts
+ follows_title: Who to follow
+ follows_view_more: View more people to follow
+ hashtags_recent_count: "%{people} people in the past %{days} days"
+ hashtags_subtitle: Explore what’s trending since past 2 days
+ hashtags_title: Trending hashtags
+ hashtags_view_more: View more trending hashtags
+ post_action: Compose
+ post_step: Say hello to the world with text, photos, videos, or polls.
+ post_title: Make your first post
+ share_action: Share
+ share_step: Let your friends know how to find you on Mastodon.
+ share_title: Share your Mastodon profile
+ sign_in_action: Sign in
subject: Welcome to Mastodon
title: Welcome aboard, %{name}!
users:
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index beb6aa6d9f..bc694578b7 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -1763,10 +1763,6 @@ eo:
edit_profile_action: Agordi profilon
edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli.
explanation: Jen kelkaj konsiloj por helpi vin komenci
- final_action: Ekmesaĝi
- final_step: 'Ekmesaĝu! Eĉ sen sekvantoj, viaj publikaj mesaĝoj povas esti vidataj de aliaj, ekzemple en la loka templinio aŭ per kradvortoj. Eble vi ŝatus prezenti vin per la kradvorto #introductions / #konigo.'
- full_handle: Via kompleta uzantnomo
- full_handle_hint: Jen kion vi dirus al viaj amikoj, por ke ili mesaĝu aŭ sekvu vin de alia servilo.
subject: Bonvenon en Mastodon
title: Bonvenon, %{name}!
users:
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index d1dbdbf0b8..37fcc11d78 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -767,6 +767,7 @@ es-AR:
disabled: A nadie
users: A usuarios locales con sesiones abiertas
registrations:
+ moderation_recommandation: Por favor, ¡asegurate de tener un equipo de moderación adecuado y reactivo antes de abrir los registros a todos!
preamble: Controlá quién puede crear una cuenta en tu servidor.
title: Registros
registrations_mode:
@@ -774,6 +775,7 @@ es-AR:
approved: Se requiere aprobación para registrarse
none: Nadie puede registrarse
open: Cualquiera puede registrarse
+ warning_hint: Recomendamos el uso de la opción “Se requiere aprobación para registrarse”, a menos que estés seguro de que tu equipo de moderación puede manejar el spam y los registros maliciosos de forma oportuna.
security:
authorized_fetch: Requiere autenticación de servidores federados
authorized_fetch_hint: Requerir autenticación de servidores federados permite un cumplimiento más estricto tanto de los bloques de nivel de usuario como de nivel de servidor. Sin embargo, esto se produce a costa de una penalidad en el rendimiento, reduce el alcance de tus respuestas y puede introducir problemas de compatibilidad con algunos servicios federados. Además, esto no impedirá que actores dedicados obtengan tus mensajes y cuentas públicas.
@@ -966,6 +968,9 @@ es-AR:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Debido a la falta de actividad reciente por parte de moderadores, los registros en %{instance} fueron cambiados automáticamente para requerir revisión manual, para evitar que %{instance} se use como una plataforma para potenciales malos actores. Podés volver a cambiar esto para abrir los registros en cualquier momento.
+ subject: Los registros de %{instance} se cambiaron automáticamente para requerir aprobación
new_appeal:
actions:
delete_statuses: para eliminar sus mensajes
@@ -1841,10 +1846,6 @@ es-AR:
edit_profile_action: Configurar perfil
edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte.
explanation: Aquí hay algunos consejos para empezar
- final_action: Empezá a enviar mensajes
- final_step: "¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación»."
- full_handle: Tu nombre de usuario completo
- full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor.
subject: Bienvenido a Mastodon
title: "¡Bienvenido a bordo, %{name}!"
users:
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 4d228e98d4..26dbc2dfb8 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -767,6 +767,7 @@ es-MX:
disabled: A nadie
users: Para los usuarios locales que han iniciado sesión
registrations:
+ moderation_recommandation: Por favor, ¡asegúrate de tener un equipo de moderación adecuado y reactivo antes de abrir los registros a todo el mundo!
preamble: Controla quién puede crear una cuenta en tu servidor.
title: Registros
registrations_mode:
@@ -774,6 +775,7 @@ es-MX:
approved: Se requiere aprobación para registrarse
none: Nadie puede registrarse
open: Cualquiera puede registrarse
+ warning_hint: Recomendamos el uso de “Se requiere aprobación para registrarse” a menos que estés seguro de que tu equipo de moderación puede manejar el spam y los registros maliciosos en un tiempo razonable.
security:
authorized_fetch: Requerir autenticación de servidores federados
authorized_fetch_hint: Requerir autenticación de servidores federados permite un cumplimiento más estricto tanto de los bloqueos a nivel de usuario como a nivel de servidor. Sin embargo, esto se produce a costa de una penalización en el rendimiento, reduce el alcance de tus respuestas y puede introducir problemas de compatibilidad con algunos servicios federados. Además, esto no impedirá que actores dedicados obtengan tus cuentas y publicaciones públicas.
@@ -966,6 +968,9 @@ es-MX:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Debido a la falta de moderadores activos, los registros en %{instance} han sido cambiados automáticamente para requerir revisión manual, para evitar que %{instance} se utilice potencialmente como plataforma por malos actores. Puedes volver a cambiarlo para abrir los registros en cualquier momento.
+ subject: Se ha cambiado automáticamente el registro de %{instance} para requerir aprobación
new_appeal:
actions:
delete_statuses: para eliminar sus mensajes
@@ -1548,7 +1553,7 @@ es-MX:
unrecognized_emoji: no es un emoji conocido
redirects:
prompt: Si confías en este enlace, púlsalo para continuar.
- title: Vas a salir de %{instance}.
+ title: Estás saliendo de %{instance}.
relationships:
activity: Actividad de la cuenta
confirm_follow_selected_followers: "¿Estás seguro de que quieres seguir a las cuentas seleccionadas?"
@@ -1841,10 +1846,6 @@ es-MX:
edit_profile_action: Configurar el perfil
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
explanation: Aquí hay algunos consejos para empezar
- final_action: Empezar a publicar
- final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones."
- full_handle: Su sobrenombre completo
- full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
subject: Bienvenido a Mastodon
title: Te damos la bienvenida a bordo, %{name}!
users:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 08fc0988e4..7956580138 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -31,7 +31,7 @@ es:
created_msg: "¡Nota de moderación creada con éxito!"
destroyed_msg: "¡Nota de moderación destruida con éxito!"
accounts:
- add_email_domain_block: Poner en lista negra el dominio del correo
+ add_email_domain_block: Bloquear el dominio del correo
approve: Aprobar
approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente
are_you_sure: "¿Estás seguro?"
@@ -767,6 +767,7 @@ es:
disabled: A nadie
users: Para los usuarios locales que han iniciado sesión
registrations:
+ moderation_recommandation: Por favor, ¡asegúrate de tener un equipo de moderación adecuado y reactivo antes de abrir los registros a todo el mundo!
preamble: Controla quién puede crear una cuenta en tu servidor.
title: Registros
registrations_mode:
@@ -774,6 +775,7 @@ es:
approved: Se requiere aprobación para registrarse
none: Nadie puede registrarse
open: Cualquiera puede registrarse
+ warning_hint: Recomendamos el uso de “Se requiere aprobación para registrarse” a menos que estés seguro de que tu equipo de moderación puede manejar el spam y los registros maliciosos en un tiempo razonable.
security:
authorized_fetch: Requerir autenticación de servidores federados
authorized_fetch_hint: Requerir autenticación de servidores federados permite un cumplimiento más estricto tanto de los bloqueos a nivel de usuario como a nivel de servidor. Sin embargo, esto se produce a costa de una penalización en el rendimiento, reduce el alcance de tus respuestas y puede introducir problemas de compatibilidad con algunos servicios federados. Además, esto no impedirá que actores dedicados obtengan tus cuentas y publicaciones públicas.
@@ -966,6 +968,9 @@ es:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Debido a la falta de moderadores activos, los registros en %{instance} han sido cambiados automáticamente para requerir revisión manual, para evitar que %{instance} se utilice potencialmente como plataforma por malos actores. Puedes volver a cambiarlo para abrir los registros en cualquier momento.
+ subject: Se ha cambiado automáticamente el registro de %{instance} para requerir aprobación
new_appeal:
actions:
delete_statuses: para eliminar sus mensajes
@@ -1841,10 +1846,6 @@ es:
edit_profile_action: Configurar el perfil
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
explanation: Aquí hay algunos consejos para empezar
- final_action: Empezar a publicar
- final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones."
- full_handle: Su sobrenombre completo
- full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
subject: Bienvenido a Mastodon
title: Te damos la bienvenida a bordo, %{name}!
users:
diff --git a/config/locales/et.yml b/config/locales/et.yml
index f82ee6cb8f..ed25488ce4 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -1546,6 +1546,9 @@ et:
errors:
limit_reached: Jõutud on erinevate reaktsioonide limiidini
unrecognized_emoji: ei ole tuntud emotikoon
+ redirects:
+ prompt: Kui te usaldate seda linki, klõpsake sellele, et jätkata.
+ title: Te lahkute %{instance}.
relationships:
activity: Konto tegevus
confirm_follow_selected_followers: Oled kindel, et soovid jälgida valitud jälgijaid?
@@ -1843,10 +1846,6 @@ et:
Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q
explanation: Siin on mõned nõuanded, mis aitavad alustada
- final_action: Alusta postitamist
- final_step: 'Nüüd tee oma esimene postitus. Hea tava on uues kohas ennast tutvustada ning kindlasti kasuta selles postituses ka silti #tutvustus. Isegi kui sul ei ole veel jälgijaid, siis su postitusi näevad kohalikul ajajoonel ka kõik teised serveri kasutajad.'
- full_handle: Kasutajanimi Mastodon võrgustikus
- full_handle_hint: Kui jagad kasutajanime väljaspool serverit, siis kasuta kindlasti pikka nime. Erinevates serverites võib olla sama kasutajanimega liikmeid.
subject: Tere tulemast Mastodoni
title: Tere tulemast, %{name}!
users:
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 444d0e2c5f..fb3013e008 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -336,7 +336,7 @@ eu:
not_permitted: Ez daukazu ekintza hau burutzeko baimenik
overwrite: Gainidatzi
shortcode: Laster-kodea
- shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarra besterik ez
+ shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarrak soilik
title: Emoji pertsonalak
uncategorized: Kategoriarik gabe
unlist: Kendu zerrendatik
@@ -597,7 +597,7 @@ eu:
silence_description_html: Kontua soilik honen jarraitzaile edo espresuki bilatzen dutenentzat izango da ikusgarri, kontuaren irisgarritasuna gogorki mugatzen delarik.
suspend_description_html: Kontua bera eta honen edukiak eskuraezinak izango dira, eta azkenean, ezabatuak. Kontu honekin erlazionatzea ezinezkoa izango da. Prozesua 30 egunez itzulgarria izango da. Kontu honen aurkako txosten guztiak baztertuko lirateke.
actions_description_html: Erabaki txosten hau konpontzeko ze ekintza hartu. Salatutako kontuaren aurka zigor ekintza bat hartzen baduzu, eposta jakinarazpen bat bidaliko zaie, Spam kategoria hautatzean ezik.
- actions_description_remote_html: Txosten honi konponbidea aurkitzeko zein ekintza egin hautatu. Hau soilik zure zerbitzaria kontu honekin nola komunikatu eta bere edukia nola maneiatzeko da.
+ actions_description_remote_html: Hautatu txosten honi konponbidea aurkitzeko zein neurri hartu. Hau soilik zure zerbitzaria urruneko kontu honekin nola komunikatu eta bere edukia nola maneiatzeko da.
add_to_report: Gehitu gehiago txostenera
are_you_sure: Ziur zaude?
assign_to_self: Esleitu niri
@@ -769,6 +769,7 @@ eu:
disabled: Inori ez
users: Saioa hasita duten erabiltzaile lokalei
registrations:
+ moderation_recommandation: Mesedez, ziurtatu moderazio-talde egokia eta erreaktiboa duzula erregistroak guztiei ireki aurretik!
preamble: Kontrolatu nork sortu dezakeen kontua zerbitzarian.
title: Izen emateak
registrations_mode:
@@ -776,6 +777,7 @@ eu:
approved: Izena emateko onarpena behar da
none: Ezin du inork izena eman
open: Edonork eman dezake izena
+ warning_hint: "“Izena emateko onarpena behar da” erabiltzea gomendatzen dugu, baldin eta ez badakizu ziur zure moderazio-taldeak spama eta erregistro maltzurrak arrazoizko denboran erantzun ditzakeela."
security:
authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik
authorized_fetch_hint: Zerbitzari federatuen autentifikazioa eskatzeak erabiltzaile-mailako zein zerbitzari-mailako blokeak zorrotzago betearaztea ahalbidetzen du. Hala ere, horrek errendimendu galera dakar, zure erantzunen irismena murrizten du eta baliteke federatutako zerbitzu batzuekin bateragarritasun-arazoak sortu ahal izatea. Horrez gain, horrek ez du eragotziko aktore dedikatuek zure mezu eta kontu publikoak eskuratzea.
@@ -1703,8 +1705,8 @@ eu:
title: '%{name}: "%{quote}"'
visibilities:
direct: Zuzena
- private: Jarraitzaileak besterik ez
- private_long: Erakutsi jarraitzaileei besterik ez
+ private: Jarraitzaileak soilik
+ private_long: Erakutsi jarraitzaileei soilik
public: Publikoa
public_long: Edonork ikusi dezake
unlisted: Zerrendatu gabea
@@ -1845,10 +1847,6 @@ eu:
edit_profile_action: Ezarri profila
edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu.
explanation: Hona hasteko aholku batzuk
- final_action: Hasi bidalketak argitaratzen
- final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure bidalketa publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.'
- full_handle: Zure erabiltzaile-izen osoa
- full_handle_hint: Hau da lagunei esango zeniekeena beste zerbitzari batetik zu jarraitzeko edo zuri mezuak bidaltzeko.
subject: Ongi etorri Mastodon-era
title: Ongi etorri, %{name}!
users:
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index bb3368dd9e..4339e06c34 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -80,7 +80,7 @@ fa:
joined: عضو شده در
location:
all: همه
- local: محلّی
+ local: محلی
remote: کارسازهای دیگر
title: مکان
login_status: وضعیت ورود
@@ -415,13 +415,14 @@ fa:
public_comment: یادداشت عمومی
public_comment_hint: یادداشتی دربارهٔ محدودیت روی این دامین برای عموم، در صورتی که فهرست دامینهای محدود شده منتشر شود.
reject_media: نپذیرفتن پروندههای رسانهای
- reject_media_hint: پروندههای رسانهای ذخیرهشدهٔ محلّی را پاک کرده و از بارگیریشان در آینده خودداری میکند. بیتأثیر روی معلقها
+ reject_media_hint: پروندههای رسانهای ذخیرهشدهٔ محلی را پاک کرده و از بارگیریشان در آینده خودداری میکند. بیتأثیر روی معلّقها
reject_reports: نپذیرفتن گزارشها
reject_reports_hint: گزارشهایی را که از این دامنه میآید نادیده میگیرد. بیتأثیر برای معلقشدهها
undo: واگردانی مسدودسازی دامین
view: دیدن مسدودسازی دامنه
email_domain_blocks:
add_new: افزودن تازه
+ allow_registrations_with_approval: اجازهٔ ثبتنام با تأیید
attempts_over_week:
one: "%{count} تلاش در هفتهٔ گذشته"
other: "%{count} تلاش ورود در هفتهٔ گذشته"
@@ -1578,10 +1579,6 @@ fa:
edit_profile_action: تنظیم نمایه
edit_profile_step: میتوانید نمایهتان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از اینها سفارشی کنید. میتوانید تعیین کنید که پیگیران جدید را پیشاز این که بتوانند دنبالتان کنند بازبینی کنید.
explanation: نکتههایی که برای آغاز کار به شما کمک میکنند
- final_action: چیزی منتشر کنید
- final_step: 'چیزی بنویسید! حتا بدون پیگیر ممکن است فرستههای عمومیتان دیده شود. برای مثال روی خط زمانی محلی یا در برچسبها. شاید بخواهید با برچسب #معرفی خودتان را معرّفی کنید.'
- full_handle: نام کاربری کامل شما
- full_handle_hint: این چیزی است که باید به دوستانتان بگویید تا بتوانند از کارسازی دیگر به شما پیام داده یا پیگیرتان شوند.
subject: به ماستودون خوش آمدید
title: خوش آمدید، کاربر %{name}!
users:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 856532f8f1..dc303991bc 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -387,7 +387,7 @@ fi:
cancel: Peruuta
confirm: Jäädytä
permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita.
- preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} ja sen aliverkkotunnukset.
+ preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} aliverkkotunnuksineen.
remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä.
stop_communication: Palvelimesi lopettaa viestinnän näiden palvelinten kanssa.
title: Vahvista verkkotunnuksen %{domain} esto
@@ -767,6 +767,7 @@ fi:
disabled: Ei kenellekkään
users: Kirjautuneille paikallisille käyttäjille
registrations:
+ moderation_recommandation: Varmista, että sinulla on riittävä ja toimintavalmis joukko moderaattoreita ennen kuin avaat rekisteröitymiset kaikille!
preamble: Määritä, kuka voi luoda tilin palvelimellesi.
title: Rekisteröityminen
registrations_mode:
@@ -774,6 +775,7 @@ fi:
approved: Rekisteröinti vaatii hyväksynnän
none: Kukaan ei voi rekisteröityä
open: Kaikki voivat rekisteröityä
+ warning_hint: Suosittelemme käyttämään asetusta “Rekisteröinti vaatii hyväksynnän” ellet ole varma siitä, että moderaattorit ovat valmiina käsittelemään roskapostia ja haittarekisteröitymisiä oikea-aikaisesti.
security:
authorized_fetch: Vaadi todennus liittoutuvilta palvelimilta
authorized_fetch_hint: Todennuksen vaatiminen liittoutuvilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin liittoutuvien palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi.
@@ -831,7 +833,7 @@ fi:
suspend: "%{name} jäädytti käyttäjän %{target} tilin"
appeal_approved: Valitti
appeal_pending: Valitus vireillä
- appeal_rejected: Muutoksenhaku hylättiin
+ appeal_rejected: Vetoomus hylättiin
system_checks:
database_schema_check:
message_html: Tietokannan siirto on vireillä. Suorita ne varmistaaksesi, että sovellus toimii odotetulla tavalla
@@ -966,6 +968,9 @@ fi:
title: Webhookit
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Viimeaikaisen moderaattoritoiminnan puutteen vuoksi %{instance} rekisteröinnit on vaihdettu automaattisesti manuaaliseen tarkasteluun, jotta %{instance} ei käytetä mahdollisien huonojen toimijoiden alustana. Voit vaihtaa sen takaisin avaamalla rekisteröinnit milloin tahansa.
+ subject: Rekisteröinnit %{instance} on automaattisesti vaihdettu vaatimaan hyväksyntää
new_appeal:
actions:
delete_statuses: poistaa hänen julkaisunsa
@@ -1043,10 +1048,10 @@ fi:
confirmations:
awaiting_review: Sähköpostiosoitteesi on vahvistettu! Seuraavaksi palvelimen %{domain} ylläpito tarkistaa rekisteröitymisesi, ja saat lopuksi ilmoituksen sähköpostitse, jos tilisi hyväksytään!
awaiting_review_title: Rekisteröitymisesi on tarkistettavana
- clicking_this_link: tästä linkistä
+ clicking_this_link: napsauttaa tätä linkkiä
login_link: kirjautumalla sisään
proceed_to_login_html: Voit nyt jatkaa %{login_link}.
- redirect_to_app_html: Sinun olisi pitänyt ohjautua sovellukseen %{app_name}. Jos näin ei tapahtunut, yritä avata se %{clicking_this_link} tai palaa sovellukseen manuaalisesti.
+ redirect_to_app_html: Sinun olisi pitänyt ohjautua sovellukseen %{app_name}. Jos näin ei tapahtunut, voit %{clicking_this_link} tai palata sovellukseen käsikäyttöisesti.
registration_complete: Rekisteröitymisesi palvelimelle %{domain} on nyt valmis!
welcome_title: Tervetuloa, %{name}!
wrong_email_hint: Jos sähköpostiosoite ei ole oikein, voit muuttaa sen tilin asetuksista.
@@ -1547,7 +1552,7 @@ fi:
limit_reached: Erilaisten reaktioiden raja saavutettu
unrecognized_emoji: ei ole tunnistettu emoji
redirects:
- prompt: Jos luotat tähän linkkiin, jatka napsauttamalla.
+ prompt: Mikäli luotat linkkiin, jatka napsauttaen sitä.
title: Olet poistumassa palvelimelta %{instance}.
relationships:
activity: Tilin aktiivisuus
@@ -1560,7 +1565,7 @@ fi:
followers: Seuraajat
following: Seuratut
invited: Kutsutut
- last_active: Viimeksi aktiivinen
+ last_active: Viimeksi aktiiviset
most_recent: Viimeisimmät
moved: Muuttaneet
mutual: Seuraatte toisianne
@@ -1794,11 +1799,11 @@ fi:
subject: Arkisto on valmiina ladattavaksi
title: Arkiston tallennus
failed_2fa:
- details: 'Tässä on tietoja kirjautumisyrityksestä:'
- explanation: Joku on yrittänyt kirjautua tilillesi mutta on antanut virheellisen toisen vaiheen todennustekijän.
+ details: 'Sisäänkirjautumispyrkimyksen yksityiskohtaiset tiedot:'
+ explanation: Joku on yrittänyt kirjautua tilillesi antaen väärän toisen todennustunnisteen.
further_actions_html: Jos se et ollut sinä, suosittelemme, että %{action} välittömästi, sillä se on saattanut vaarantua.
subject: Kaksivaiheisen todennuksen virhe
- title: Epäonnistunut kaksivaiheinen todennus
+ title: Kaksivaihekirjautumisen toinen vaihe epäonnistui
suspicious_sign_in:
change_password: vaihda salasanasi
details: 'Tässä on tiedot kirjautumisesta:'
@@ -1841,10 +1846,6 @@ fi:
edit_profile_action: Määritä profiili
edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse.
explanation: Näillä vinkeillä pääset alkuun
- final_action: Ala julkaista
- final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.'
- full_handle: Koko käyttäjätunnuksesi
- full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta.
subject: Tervetuloa Mastodoniin
title: Tervetuloa mukaan, %{name}!
users:
@@ -1852,7 +1853,7 @@ fi:
go_to_sso_account_settings: Avaa identiteettitarjoajasi tiliasetukset
invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyden osoitteeseen %{email}
- rate_limited: Liian monta todennusyritystä. Yritä myöhemmin uudelleen.
+ rate_limited: Liian monta todennusyritystä – yritä uudelleen myöhemmin.
seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.
signed_in_as: 'Kirjautunut tilillä:'
verification:
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index 10b1e76f5f..6a8dd9b2ee 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -767,6 +767,7 @@ fo:
disabled: Til ongan
users: Fyri lokalum brúkarum, sum eru ritaðir inn
registrations:
+ moderation_recommandation: Vinarliga tryggja tær, at tú hevur eitt nøktandi og klárt umsjónartoymi, áðreen tú letur upp fyri skrásetingum frá øllum!
preamble: Stýr, hvør kann stovna eina kontu á tínum ambætara.
title: Skrásetingar
registrations_mode:
@@ -774,6 +775,7 @@ fo:
approved: Góðkenning kravd fyri tilmelding
none: Eingin kann tilmelda seg
open: Øll kunnu tilmelda seg
+ warning_hint: Vit mæla til at brúka "Góðkenning kravd fyri tilmelding" uttan so at tú er fullvís/ur í, at umsjónartoymið hjá tær kann handfara ruskpost og óndsinnaðar skrásetingar so hvørt.
security:
authorized_fetch: Krev samgildi frá sameindum ambætarum
authorized_fetch_hint: At krevja samgildi frá sameindum ambætarum ger strangari útinning av blokkum bæði á brúkara- og ambætara-stigi møguliga. Tó so, kostnaðurin er ein avriksstraffur, minkar um hvussu langt svarini hjá tær røkka og kann viðføra sambæristruplleikar við summar sameindar tænastur. Harafturat forðar hetta ikki teimum, ið miðvíst leggja seg eftir at heinta tínar almennu postar og kontur.
@@ -966,6 +968,9 @@ fo:
title: Webhooks/vevhúkar
webhook: Webhook/vevhúkur
admin_mailer:
+ auto_close_registrations:
+ body: Vegna avmarkað virksemi hjá umsjónarfólki eru skrásetingar á %{instance} broyttar sjálvvirkandi til at krevja manuella eftirkanning fyri at forða at %{instance} verður brúktur sum ein pallur fyri ringar aktørar. Tú kanst skifta aftur til opnar skrásetingar tá tú vilt.
+ subject: Skrásetingar á %{instance} eru sjálvvirkandi broyttar soleiðis at tær krevja váttan
new_appeal:
actions:
delete_statuses: at strika teirra postar
@@ -1841,10 +1846,6 @@ fo:
edit_profile_action: Set upp vanga
edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær.
explanation: Her eru nøkur ráð so tú kann koma gott ígongd
- final_action: Byrja at posta
- final_step: 'Byrja at posta! Sjálvt uttan fylgjarar, so kunnu tínir almennu postar vera sæddir av øðrum, til dømis á lokalu tíðarlinjuni ella í frámerkjum. Kanska vilt tú greiða frá um teg sjálva/n við frámerkinum #introductions.'
- full_handle: Fulla brúkaranavn títt
- full_handle_hint: Hetta er tað, sum tú fortelur vinum tínum, soleiðis at tey kunnu senda tær boð ella fylgja tær frá einum øðrum ambætara.
subject: Vælkomin til Mastodon
title: Vælkomin umborð, %{name}!
users:
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 3676d0b7b5..97cb08c918 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -1841,10 +1841,6 @@ fr-CA:
edit_profile_action: Configuration du profil
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
explanation: Voici quelques conseils pour vous aider à démarrer
- final_action: Commencez à publier
- final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
- full_handle: Votre identifiant complet
- full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur.
subject: Bienvenue sur Mastodon
title: Bienvenue à bord, %{name} !
users:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index a3aaf7a26e..b085937c76 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1841,10 +1841,6 @@ fr:
edit_profile_action: Configuration du profil
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
explanation: Voici quelques conseils pour vous aider à démarrer
- final_action: Commencez à publier
- final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
- full_handle: Votre identifiant complet
- full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur.
subject: Bienvenue sur Mastodon
title: Bienvenue à bord, %{name} !
users:
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index c59ad72725..caa88dcfe4 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -1546,6 +1546,9 @@ fy:
errors:
limit_reached: Limyt fan ferskate emoji-reaksjes berikt
unrecognized_emoji: is gjin besteande emoji-reaksje
+ redirects:
+ prompt: As jo dizze keppeling fertrouwe, klik der dan op om troch te gean.
+ title: Jo ferlitte %{instance}.
relationships:
activity: Accountaktiviteit
confirm_follow_selected_followers: Binne jo wis dat jo de selektearre folgers folgje wolle?
@@ -1838,10 +1841,6 @@ fy:
edit_profile_action: Profyl ynstelle
edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle.
explanation: Hjir binne inkelde tips om jo op wei te helpen
- final_action: Begjin mei berjochten te pleatsen
- final_step: 'Begjin berjochten te pleatsen! Sels sûnder folgers kinne jo iepenbiere berjochten troch oaren besjoen wurde, bygelyks op de lokale tiidline en ûnder hashtags. Jo kinne josels foarstelle mei it gebrûk fan de hashtag #introductions.'
- full_handle: Jo folsleine Mastodon-adres
- full_handle_hint: Dit jouwe jo oan jo freonen, sadat se jo berjochten stjoere kinne of (fan in oare Mastodon-server ôf) folgje kinne.
subject: Wolkom op Mastodon
title: Wolkom oan board %{name}!
users:
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index 521f4fd60d..e2a43564c0 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -439,6 +439,7 @@ gd:
view: Seall bacadh na h-àrainne
email_domain_blocks:
add_new: Cuir tè ùr ris
+ allow_registrations_with_approval: Ceadaich clàradh le aontachadh
attempts_over_week:
few: "%{count} oidhirpean clàraidh rè na seachdain seo chaidh"
one: "%{count} oidhirp clàraidh rè na seachdain seo chaidh"
@@ -1879,10 +1880,6 @@ gd:
edit_profile_action: Suidhich a’ phròifil agad
edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu."
explanation: Seo gliocas no dhà gus tòiseachadh
- final_action: Tòisich air postadh
- final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith ’gad leantainn, chì cuid mhath na postaichean poblach agad, can air an loidhne-ama ionadail no le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #fàilte?'
- full_handle: D’ ainm-cleachdaiche slàn
- full_handle_hint: Seo na bheir thu dha na caraidean agad ach an urrainn dhaibh teachdaireachd a chur thugad no ’gad leantainn o fhrithealaiche eile.
subject: Fàilte gu Mastodon
title: Fàilte air bòrd, %{name}!
users:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 7b3fd1a6eb..8520b90ead 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -767,6 +767,7 @@ gl:
disabled: Para ninguén
users: Para usuarias locais conectadas
registrations:
+ moderation_recommandation: Por favor, pon interese en crear un equipo de moderación competente e reactivo antes de permitir que calquera poida crear unha conta!
preamble: Xestiona quen pode crear unha conta no teu servidor.
title: Rexistros
registrations_mode:
@@ -774,6 +775,7 @@ gl:
approved: Precisa aprobación para rexistrarse
none: Rexistro pechado
open: Rexistro aberto
+ warning_hint: Recomendamos utilizar "Requerir aprobación para o rexistro" a menos que confíes en que o equipo de moderación é quen de xestionar áxilmente o spam e a creación de contas maliciosas.
security:
authorized_fetch: Require autenticación desde os servidores federados
authorized_fetch_hint: Ao requerir autenticación desde os servidores federados activas un reforzamento das políticas de bloqueo a nivel usuaria e nivel servidor. Este proceder ten un custo no rendemento, reducindo o alcance das túas respostas e podería introducir problemas de compatibilidade con algúns servizos federados. Ademais, non evitará que contas con tal propósito vexan as túas publicacións públicas e contas.
@@ -966,6 +968,9 @@ gl:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Debido á falta de actividade recente de moderación, a creación de contas en %{instance} mudou ao modo de revisión manual das solicitudes, para evitar que %{instance} sexa usada como plataforma por actores maliciosos. Podes volver ao rexistro aberto en calquera momento.
+ subject: O modo de creación de contas en %{instance} mudou automáticamente a aprobación manual
new_appeal:
actions:
delete_statuses: borrar as súas publicacións
@@ -1841,10 +1846,6 @@ gl:
edit_profile_action: Configurar perfil
edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan.
explanation: Aquí tes algunhas endereitas para ir aprendendo
- final_action: Comeza a publicar
- final_step: 'Publica! Incluso sen seguidoras, as túas mensaxes públicas serán vistas por outras persoas, por exemplo na cronoloxía local e nos cancelos. Poderías presentarte ao #fediverso utilizando o cancelo #introductions.'
- full_handle: O teu alcume completo
- full_handle_hint: Compárteo coas túas amizades para que poidan seguirte ou enviarche mensaxes desde outros servidores.
subject: Benvida a Mastodon
title: Benvida, %{name}!
users:
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 05b52213a7..55ab576142 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -795,6 +795,7 @@ he:
disabled: לאף אחד
users: למשתמשים מקומיים מחוברים
registrations:
+ moderation_recommandation: יש לוודא שלאתר יש צוות מנחות ומנחי שיחה מספק ושירותי בטרם תבחרו לפתוח הרשמה לכולם!
preamble: שליטה בהרשאות יצירת חשבון בשרת שלך.
title: הרשמות
registrations_mode:
@@ -802,6 +803,7 @@ he:
approved: נדרש אישור הרשמה
none: אף אחד לא יכול להרשם
open: כל אחד יכול להרשם
+ warning_hint: אנו ממליצים להפעיל דרישה לאישור ידני של הרשמה אלא אם אתם מאמינים שצוות הנחיית השיחות שלכם יוכל להסתדר בזריזות עם מפיצי תכנים פוגעניים או פרסומיים על בסיס קבוע.
security:
authorized_fetch: לדרוש הזדהות מול שרתים בפדרציה
authorized_fetch_hint: הדרישה להזדהות מול שרתים בפדרציה מאפשרת חסימה יותר יעילה ברמת המשתמש וברמת שרת. עם זאת, הדרישה באה עם מחיר של נפילת ביצועים, מקטינה את מעגל התפוצה של התשובות שלך, ועשויה ליצור אי תאימות מול שירותים אחרים בפדרציה. בנוסף, זה לא ימנע מצדדים החלטיים לקבל גישת קריאה להודעות ופרופילים ציבוריים.
@@ -1002,6 +1004,9 @@ he:
title: התליות רשת
webhook: התליית רשת
admin_mailer:
+ auto_close_registrations:
+ body: עקב חוסר פעילות מנחים, הרשמות אל %{instance} עברו אוטומטית למצב אישור ידני, כדי למנוע משרת %{instance} לשמש לכר פעילות לגורמים עוינים. ניתן תמיד לחזור להרשמה פתוחה.
+ subject: הרשמות אל %{instance} הועברו אוטומטית לדרישה לאישור ידני
new_appeal:
actions:
delete_statuses: כדי למחוק את הודעותיהם
@@ -1905,10 +1910,6 @@ he:
edit_profile_action: הגדרת פרופיל
edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך.
explanation: הנה כמה טיפים לעזור לך להתחיל
- final_action: התחל/ילי לחצרץ
- final_step: 'התחל/ילי לחצצר! אפילו ללא עוקבים ייתכן שהחצרוצים הפומביים שלך יראו ע"י אחרים, למשל בציר הזמן המקומי או בתגיות הקבצה (האשתגים). כדאי להציג את עצמך תחת התגית #introductions או #היכרות'
- full_handle: שם המשתמש המלא שלך
- full_handle_hint: זה מה שתאמר.י לחברייך כדי שיוכלו לשלוח לך הודעה או לעקוב אחרייך ממופע אחר.
subject: ברוכים הבאים למסטודון
title: ברוך/ה הבא/ה, %{name} !
users:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 545da69d9c..733d883da0 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -767,6 +767,7 @@ hu:
disabled: Senkinek
users: Bejelentkezett helyi felhasználóknak
registrations:
+ moderation_recommandation: Győződj meg arról, hogy megfelelő és gyors reagálású moderátor csapatod van, mielőtt mindenki számára megnyitod a regisztrációt!
preamble: Szabályozd, hogy ki hozhat létre fiókot a kiszolgálón.
title: Regisztrációk
registrations_mode:
@@ -774,6 +775,7 @@ hu:
approved: A regisztráció engedélyhez kötött
none: Senki sem regisztrálhat
open: Bárki regisztrálhat
+ warning_hint: Javasoljuk a "Jóváhagyás szükséges a regisztrációhoz” lehetőség használatát, hacsak nem vagy biztos abban, hogy a moderátor csapatod időben tudja kezelni a szemetet és a rosszindulatú regisztrációkat.
security:
authorized_fetch: Hitelesítés szükséges a föderációs kiszolgálóktól
authorized_fetch_hint: A föderációs szerverek hitelesítésének szükségessége lehetővé teszi mind a felhasználói mind a szerver szintű blokkok szigorúbb végrehajtását. Ez azonban a teljesítménybüntetés árán jár, csökkenti a válaszok elérhetőségét és kompatibilitási problémákat vethet fel egyes föderációs szolgáltatásokkal. Emellett ez nem akadályozza meg a dedikált szereplőket abban, hogy nyilvános bejegyzéseiket és fiókjaikat letöltsék.
@@ -966,6 +968,9 @@ hu:
title: Webhookok
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: A közelmúlt moderátori tevékenységének hiánya miatt a %{instance} regisztrációja automatikusan kézi ellenőrzést igénylőre váltott azért, hogy megakadályozzuk, hogy a %{instance} potenciálisan rossz szándékú szereplők számára szolgálhasson platformként. A nyílt regisztrációt bármikor visszakapcsolhatod.
+ subject: "%{instance} regisztrációja automatikusan átállt jóváhagyást igénylőre"
new_appeal:
actions:
delete_statuses: bejegyzések törléséről
@@ -1548,7 +1553,7 @@ hu:
unrecognized_emoji: nem ismert emodzsi
redirects:
prompt: Ha megbízol ebben a hivatkozásban, kattints rá a folytatáshoz.
- title: Épp elhagyni készülöd a %{instance} kiszolgálót.
+ title: Elhagyod a(z) %{instance} kiszolgálót.
relationships:
activity: Fiók aktivitás
confirm_follow_selected_followers: Biztos, hogy követni akarod a kiválasztott követőket?
@@ -1841,10 +1846,6 @@ hu:
edit_profile_action: Készítsd el profilod
edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek.
explanation: Néhány tipp a kezdeti lépésekhez
- final_action: Kezdj bejegyzéseket írni
- final_step: 'Kezdj tülkölni! A nyilvános bejegyzéseid még követők híján is megjelennek másoknak, például a helyi idővonalon vagy a hashtageknél. Kezdd azzal, hogy bemutatkozol a #bemutatkozas vagy az #introductions hashtag használatával.'
- full_handle: Teljes felhasználóneved
- full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más szerverekről.
subject: Üdvözöl a Mastodon
title: Üdv a fedélzeten, %{name}!
users:
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index f3a6392ff0..b0d8f00864 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -875,7 +875,6 @@ hy:
suspend: Հաշիւը արգելափակուած է
welcome:
edit_profile_action: Կարգաւորել հաշիւը
- final_action: Սկսել գրել
subject: Բարի գալուստ Մաստոդոն
title: Բարի գալուստ նաւամատոյց, %{name}
users:
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 48a802a2cd..52cf861b48 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -33,11 +33,27 @@ ia:
username: Nomine de usator
action_logs:
action_types:
+ create_announcement: Crear annuncio
+ destroy_ip_block: Deler le regula IP
+ destroy_status: Deler le message
+ destroy_unavailable_domain: Deler le dominio non disponibile
+ disable_user: Disactivar le usator
+ enable_user: Activar le usator
reset_password_user: Reinitialisar contrasigno
+ update_announcement: Actualisar annuncio
+ update_custom_emoji: Actualisar emoji personalisate
+ actions:
+ change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}"
+ create_announcement_html: "%{name} creava un nove annuncio %{target}"
announcements:
+ edit:
+ title: Modificar annuncio
+ empty: Necun annuncios trovate.
new:
create: Crear annuncio
title: Nove annuncio
+ publish: Publicar
+ published_msg: Annuncio publicate con successo!
title: Annuncios
custom_emojis:
by_domain: Dominio
@@ -46,9 +62,16 @@ ia:
delete: Deler
disable: Disactivar
disabled: Disactivate
+ enable: Activar
+ enabled: Activate
+ enabled_msg: Emoji activate con successo
+ new:
+ title: Adder nove emoji personalisate
dashboard:
active_users: usatores active
+ media_storage: Immagazinage de medios
new_users: nove usatores
+ opened_reports: reportos aperte
website: Sito web
domain_allows:
add_new: Permitter federation con dominio
@@ -58,9 +81,14 @@ ia:
domain: Dominio
export: Exportar
import: Importar
+ private_comment: Commento private
+ public_comment: Commento public
email_domain_blocks:
add_new: Adder nove
delete: Deler
+ domain: Dominio
+ new:
+ create: Adder un dominio
export_domain_allows:
no_file: Necun file seligite
follow_recommendations:
@@ -79,6 +107,7 @@ ia:
filter:
available: Disponibile
ip_blocks:
+ add_new: Crear regula
delete: Deler
expires_in:
'1209600': 2 septimanas
@@ -95,8 +124,120 @@ ia:
enable: Activar
enabled: Activate
reports:
+ add_to_report: Adder plus al reporto
are_you_sure: Es tu secur?
cancel: Cancellar
+ delete_and_resolve: Deler le messages
+ notes:
+ delete: Deler
+ skip_to_actions: Saltar al actiones
+ status: Stato
+ updated_at: Actualisate
+ view_profile: Vider profilo
+ roles:
+ everyone: Permissiones predefinite
+ privileges:
+ manage_users: Gerer usatores
+ rules:
+ delete: Deler
+ settings:
+ about:
+ title: A proposito de
+ appearance:
+ preamble: Personalisar le interfacie web de Mastodon.
+ title: Apparentia
+ discovery:
+ profile_directory: Directorio de profilos
+ public_timelines: Chronologias public
+ trends: Tendentias
+ title: Parametros de servitor
+ site_uploads:
+ delete: Deler file incargate
+ statuses:
+ language: Lingua
+ metadata: Metadatos
+ open: Aperir message
+ original_status: Message original
+ title: Messages del conto
+ trending: Tendentias
+ visibility: Visibilitate
+ strikes:
+ actions:
+ none: "%{name} ha inviate un advertimento a %{target}"
+ system_checks:
+ rules_check:
+ action: Gerer le regulas del servitor
+ software_version_critical_check:
+ action: Vider le actualisationes disponibile
+ software_version_patch_check:
+ action: Vider le actualisationes disponibile
+ upload_check_privacy_error:
+ action: Verifica hic pro plus de information
+ edit_profile:
+ other: Alteres
+ existing_username_validator:
+ not_found_multiple: non poteva trovar %{usernames}
+ exports:
+ archive_takeout:
+ date: Data
+ download: Discargar tu archivo
+ size: Dimension
+ blocks: Tu ha blocate
+ bookmarks: Marcapaginas
+ csv: CSV
+ mutes: Tu ha silentiate
+ storage: Immagazinage de medios
+ featured_tags:
+ add_new: Adder nove
+ filters:
+ contexts:
+ account: Profilos
+ home: Pagina de initio e listas
+ notifications: Notificationes
+ public: Chronologias public
+ thread: Conversationes
+ edit:
+ add_keyword: Adder parola clave
+ keywords: Parolas clave
+ statuses: Messages individual
+ title: Modificar filtro
+ index:
+ delete: Deler
+ generic:
+ all: Toto
+ cancel: Cancellar
+ changes_saved_msg: Cambios salveguardate con successo!
+ confirm: Confirmar
+ copy: Copiar
+ delete: Deler
+ order_by: Ordinar per
+ save_changes: Salvar le cambios
+ today: hodie
+ imports:
+ errors:
+ empty: File CSV vacue
+ too_large: Le file es troppo longe
+ failures: Fallimentos
+ status: Stato
+ types:
+ lists: Listas
+ invites:
+ expires_in:
+ '1800': 30 minutas
+ '21600': 6 horas
+ '3600': 1 hora
+ '43200': 12 horas
+ '604800': 1 septimana
+ '86400': 1 die
+ expires_in_prompt: Nunquam
+ login_activities:
+ authentication_methods:
+ password: contrasigno
+ migrations:
+ errors:
+ not_found: non poterea esser trovate
+ preferences:
+ public_timelines: Chronologias public
statuses_cleanup:
min_age:
'1209600': 2 septimanas
diff --git a/config/locales/id.yml b/config/locales/id.yml
index ec8cf9e031..e7f42e115b 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -1560,10 +1560,6 @@ id:
edit_profile_action: Siapkan profil
edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda.
explanation: Beberapa tips sebelum Anda memulai
- final_action: Mulai mengirim
- final_step: 'Mulai mengirim! Bahkan tanpa pengikut, kiriman publik Anda dapat dilihat oleh orang lain, misalkan di linimasa lokal atau dalam tagar. Anda dapat memperkenalkan diri Anda dalam tagar #introductions.'
- full_handle: Penanganan penuh Anda
- full_handle_hint: Ini yang dapat Anda sampaikan kepada teman agar mereka dapat mengirim pesan atau mengikuti Anda dari server lain.
subject: Selamat datang di Mastodon
title: Selamat datang, %{name}!
users:
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index a8287da533..eec8569bb2 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -767,6 +767,7 @@ ie:
disabled: A necun
users: A local usatores qui ha initiat session
registrations:
+ moderation_recommandation: Ples assecurar que tu have un equip de moderation quel es adequat e reactiv ante que tu aperte registrationes a omnes!
preamble: Decider qui posse crear un conto che vor servitor.
title: Registrationes
registrations_mode:
@@ -774,6 +775,7 @@ ie:
approved: Aprobation besonat por adhesion
none: Nequi posse registrar se
open: Quicunc posse registrar se
+ warning_hint: Noi recomanda usar "Aprobation besonat por inscrir" si tu ne es confident que tui equip de moderation posse gerer spam e maliciosi registrationes in un curt témpor.
security:
authorized_fetch: Postular autentication de federat servitores
authorized_fetch_hint: Postular autentication de federat servitores possibilisa plu strict infortiament de ambi usatori e servitori bloccas. Támen, ti fórsan va limitar li potentie de vor servitor, reducter li atingement de vor responses, e possibilmen introducter problemas de compatibilitá con quelc federat servicies. Additionalmen, ti ne va preventer dedicat actores de accesser vor public postas e contos.
@@ -966,6 +968,9 @@ ie:
title: Webcrocs
webhook: Webcroc
admin_mailer:
+ auto_close_registrations:
+ body: Pro un manca de recent activitá moderatori, registrationes sur %{instance} ha esset automaticmen changeat al mode quel besona un manual recension, por que %{instance} ne mey esser usat quam un platform por malfatores. Tu posse rechangear a apert registrationes quandecunc.
+ subject: Registrationes por %{instance} ha esset automaticmen changeat al mode quel besona aprobation
new_appeal:
actions:
delete_statuses: deleter su postas
@@ -1793,6 +1798,12 @@ ie:
extra: It es ja pret a descargar!
subject: Tui archive es pret por descargar
title: Descargar archive
+ failed_2fa:
+ details: 'Vi li detallies del prova de intrar:'
+ explanation: Alqui provat accesser tui conto ma usat un ínvalid duesim factor de autentication.
+ further_actions_html: Si it ne esset tu, noi recomanda que tu strax %{action} nam li conto posse esser compromisset.
+ subject: Falliment de autentication de duesim factor
+ title: Fallit autentication de duesim factor
suspicious_sign_in:
change_password: changear tui passa-parol
details: 'Vi li detallies del apertion de session:'
@@ -1835,10 +1846,6 @@ ie:
edit_profile_action: Configuration de profil
edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te.
explanation: Vi quelc suggestiones por que tu mey comensar
- final_action: Comensar postar
- final_step: 'Comensa a postar! Mem sin sequitores, tui public postas posse esser videt de altres, per exemple in li local témpor-linea o in hashtags. Tu fórsan vole introducter te per li hashtag #introductions.'
- full_handle: Tui plen usator-nómine
- full_handle_hint: Ti-ci es ti quel tu vell dir a tui amics por que ili mey inviar missages a te o sequer te de un altri servitor.
subject: Benevenit a Mastodon
title: Benevenit, %{name}!
users:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 341477852f..189f616a4e 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -1799,10 +1799,6 @@ io:
edit_profile_action: Facez profilo
edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu.
explanation: Subo esas guidilo por helpar vu komencar
- final_action: Komencez postigar
- final_step: 'Jus postigez! Mem sen sequanti, vua publika posti povas videsar da altra personi, exemplo es en lokala tempolineo e en hashtagi. Vu povas anke introduktar su en #introductions hashtagi.'
- full_handle: Vua kompleta profilnomo
- full_handle_hint: Co esas quon vu dicos a amiki por ke oli povas mesajigar o sequar vu de altra servilo.
subject: Bonveno a Mastodon
title: Bonveno, %{name}!
users:
diff --git a/config/locales/is.yml b/config/locales/is.yml
index d374c60755..da6eee9e20 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -769,6 +769,7 @@ is:
disabled: Til engra
users: Til innskráðra staðværra notenda
registrations:
+ moderation_recommandation: Tryggðu að þú hafir hæft og aðgengilegt umsjónarteymi til taks áður en þú opnar á skráningar fyrir alla!
preamble: Stýrðu því hverjir geta útbúið notandaaðgang á netþjóninum þínum.
title: Nýskráningar
registrations_mode:
@@ -776,6 +777,7 @@ is:
approved: Krafist er samþykkt nýskráningar
none: Enginn getur nýskráð sig
open: Allir geta nýskráð sig
+ warning_hint: Við mælum með því að nota "Krafist er samþykkt nýskráningar" nema ef þú sért viss um að umsjónarteymið þitt geti brugðist tímanlega við ruslpósti og skráningum í misjöfnum tilgangi.
security:
authorized_fetch: Krefjast auðkenningar frá netþjónum í skýjasambandi
authorized_fetch_hint: Að krefjast auðkenningar frá netþjónum í skýjasambandi kallar fram strangari útfærslu á útilokunum, bæði varðandi notendur og netþjóna. Hins vegar kemur þetta niður á afköstum, minnkar útbreiðslu á svörum þínum og gæti valdið samhæfnivandamálum við sumar sambandsþjónustur. Að auki kemur þetta ekki í veg fyrir að aðilar sem ætla sér að ná í opinberar færslur og notendaaðganga frá þér geri það.
@@ -968,6 +970,9 @@ is:
title: Webhook-vefkrækjur
webhook: Webhook-vefkrækja
admin_mailer:
+ auto_close_registrations:
+ body: Vegna skorts á virkni umsjónaraðila að undanförnu, hafa nýskráningar á %{instance} sjálfkrafa verið stilltar á að þarfnast samþykktar umsjónaraðila, til að koma í veg fyrir að %{instance} verði mögulega misnotað af óprúttnum aðilum. Þú getur skipt hvenær sem er aftur yfir í opnar nýskráningar.
+ subject: Nýskráningar á %{instance} hafa sjálfkrafa verið stilltar á að krefjast samþykktar
new_appeal:
actions:
delete_statuses: að eyða færslum viðkomandi
@@ -1845,10 +1850,6 @@ is:
edit_profile_action: Setja upp notandasnið
edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér.
explanation: Hér eru nokkrar ábendingar til að koma þér í gang
- final_action: Byrjaðu að skrifa
- final_step: 'Byrjaðu að tjá þig! Jafnvel án fylgjenda geta aðrir séð opinberar færslur frá þér, til dæmis á staðværu tímalínunni eða í myllumerkjum. Þú gætir jafnvel viljað kynna þig á myllumerkinu #introductions.'
- full_handle: Fullt auðkenni þitt
- full_handle_hint: Þetta er það sem þú myndir gefa upp við vini þína svo þeir geti sent þér skilaboð eða fylgst með þér af öðrum netþjóni.
subject: Velkomin í Mastodon
title: Velkomin/n um borð, %{name}!
users:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 31de2252d1..3adb4f6c65 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -767,6 +767,7 @@ it:
disabled: A nessuno
users: Agli utenti locali connessi
registrations:
+ moderation_recommandation: Assicurati di avere un team di moderazione adeguato e reattivo prima di aprire le registrazioni a tutti!
preamble: Controlla chi può creare un account sul tuo server.
title: Registrazioni
registrations_mode:
@@ -774,6 +775,7 @@ it:
approved: Approvazione richiesta per le iscrizioni
none: Nessuno può iscriversi
open: Chiunque può iscriversi
+ warning_hint: Ti consigliamo di utilizzare “Approvazione richiesta per la registrazione” a meno che tu non sia sicuro che il tuo team di moderazione possa gestire lo spam e le registrazioni dannose in modo tempestivo.
security:
authorized_fetch: Richiede l'autenticazione dai server federati
authorized_fetch_hint: La richiesta di autenticazione da server federati consente un'applicazione più rigorosa dei blocchi sia a livello di utente che a livello di server. Tuttavia, ciò comporta una riduzione delle prestazioni, riduce la portata delle tue risposte e potrebbe introdurre problemi di compatibilità con alcuni servizi federati. Inoltre, ciò non impedirà agli attori dedicati di recuperare i tuoi post pubblici e account.
@@ -966,6 +968,9 @@ it:
title: Webhook
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: A causa della mancanza di attività recente da parte dei moderatori, le registrazioni su %{instance} sono passate automaticamente alla richiesta di revisione manuale, per evitare che %{instance} venga utilizzata come piattaforma per potenziali malintenzionati. Puoi ripristinarlo per aprire le registrazioni in qualsiasi momento.
+ subject: Le registrazioni per %{instance} sono passate automaticamente alla richiesta di approvazione
new_appeal:
actions:
delete_statuses: per cancellare i loro post
@@ -1843,10 +1848,6 @@ it:
edit_profile_action: Configura profilo
edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti.
explanation: Ecco alcuni suggerimenti per iniziare
- final_action: Inizia a pubblicare
- final_step: 'Inizia a pubblicare! Anche senza seguaci, i tuoi post pubblici possono essere visti da altri, ad esempio sulla timeline locale o negli hashtag. Potresti presentarti con l''hashtag #presentazione.'
- full_handle: Il tuo nome utente completo
- full_handle_hint: Questo è ciò che diresti ai tuoi amici in modo che possano seguirti o contattarti da un altro server.
subject: Benvenuto/a su Mastodon
title: Benvenuto a bordo, %{name}!
users:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 6880f64c5e..460f02d0a5 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -753,6 +753,7 @@ ja:
disabled: 誰にも許可しない
users: ログイン済みローカルユーザーのみ許可
registrations:
+ moderation_recommandation: 登録受付を開始する前に、迅速かつ適切にモデレーションを行うチームを編成しましょう!
preamble: あなたのサーバー上でアカウントを作成できるユーザーを制御します。
title: アカウント作成
registrations_mode:
@@ -760,6 +761,7 @@ ja:
approved: 登録には承認が必要
none: 誰にも許可しない
open: 誰でも登録可
+ warning_hint: モデレーションチームがスパムや悪意のある登録を迅速に処理できる自信がない限り、サインアップを承認制にすることをお勧めします。
security:
authorized_fetch: 連合サーバーによる署名なしでの情報取得を拒否する
authorized_fetch_hint: ほかの連合サーバーから受け付けるリクエストに署名を必須にすることで、ユーザーによるブロックおよびドメインブロック両方の効果をより強力にします。ただし連合の処理コストが増えてパフォーマンス面で不利になるほか、このサーバーから送られた反応が届く範囲が狭まったり、連合における互換性の問題を招く可能性もあります。また、この機能は公開投稿やプロフィールへのアクセスをブロックした相手から完全に遮断できるものではありません。
@@ -948,6 +950,9 @@ ja:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: "%{instance} のモデレーターによる活動がしばらくなかったため、%{instance} のアカウント作成は手動での承認を必要とするように自動的に変更されました。これには %{instance} が悪意ある者の踏み台として使われることを防ぐ役割があります。アカウント作成は必要に応じていつでも再び開放できます。"
+ subject: "%{instance} のアカウント作成は自動的に承認制に変更されました"
new_appeal:
actions:
delete_statuses: 投稿を削除する
@@ -1811,10 +1816,6 @@ ja:
プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。
新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。
explanation: 始めるにあたってのアドバイスです
- final_action: 始めましょう
- final_step: 'さあ、始めましょう! たとえフォロワーがまだいなくても、あなたの公開した投稿はローカルタイムラインやハッシュタグなどを通じて誰かの目にとまるはずです。自己紹介をしたいときには #introductions ハッシュタグが便利かもしれません。'
- full_handle: あなたの正式なユーザーID
- full_handle_hint: 別のサーバーの友達とフォローやメッセージをやり取りする際には、これを伝えることになります。
subject: Mastodonへようこそ
title: ようこそ、%{name}さん!
users:
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 926922154f..1b3d48810e 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -472,9 +472,6 @@ ka:
welcome:
edit_profile_action: პროფილის მოწყობა
explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის
- final_action: დაიწყე პოსტვა
- full_handle: თქვენი სრული სახელური
- full_handle_hint: ეს არის ის რასაც ეტყვით თქვენს მეგობრებს, რათა მოგწერონ ან გამოგყვნენ სხვა ინსტანციიდან.
subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში
title: კეთილი იყოს თქვენი მობრძანება, %{name}!
users:
diff --git a/config/locales/kab.yml b/config/locales/kab.yml
index 66aeafde60..d424810926 100644
--- a/config/locales/kab.yml
+++ b/config/locales/kab.yml
@@ -5,19 +5,19 @@ kab:
contact_missing: Ur yettusbadu ara
contact_unavailable: Wlac
hosted_on: Maṣṭudun yersen deg %{domain}
- title: Γef
+ title: Ɣef
accounts:
follow: Ḍfeṛ
followers:
one: Umeḍfaṛ
other: Imeḍfaṛen
- following: Yeṭafaṛ
+ following: Yeṭṭafaṛ
last_active: armud aneggaru
nothing_here: Ulac kra da!
posts:
- one: Tajewwiqt
- other: Tijewwiqin
- posts_tab_heading: Tijewwiqin
+ one: Tasuffeɣt
+ other: Tisuffaɣ
+ posts_tab_heading: Tisuffaɣ
admin:
account_actions:
action: Eg tigawt
@@ -47,7 +47,7 @@ kab:
disable_two_factor_authentication: Gdel 2FA
disabled: Yensa
display_name: Isem ara d-yettwaskanen
- domain: Taγult
+ domain: Taɣult
edit: Ẓreg
email: Imayl
email_status: Addad n imayl
@@ -111,7 +111,7 @@ kab:
targeted_reports: Yettwazen uneqqis sɣur wiyaḍ
silence: Sgugem
silenced: Yettwasgugem
- statuses: Tisuffɣin
+ statuses: Tisuffaɣ
subscribe: Jerred
suspended: Yeḥbes
title: Imiḍanen
@@ -203,22 +203,22 @@ kab:
announcements:
destroyed_msg: Tamselɣut tettwakkes akken iwata!
edit:
- title: Ẓreg ulγu
- empty: Ulac kra n ulγuyen.
+ title: Ẓreg ulɣu
+ empty: Ulac kra n yilɣa yettwafen.
live: Srid
new:
- create: Rnu-d ulγu
- title: Ulγu amaynut
+ create: Snlufu-d ulɣu
+ title: Ulɣu amaynut
publish: Sufeɣ
published_msg: Tamselɣut tettwasufeɣ-d akken iwata!
scheduled_for: Yettusɣiwsen i %{time}
scheduled_msg: Tamselɣut tettusɣiwes i usufeɣ!
- title: Ulγuyen
+ title: Ilɣa
custom_emojis:
assign_category: Efk taggayt
- by_domain: Taγult
+ by_domain: Taɣult
copied_msg: Takna tadigant n imuji yettwarna-d mebla ugur
- copy: Nγel
+ copy: Nɣel
create_new_category: Rnu-d taggayt tamaynut
created_msg: Imuji yettwarna-d mebla ugur!
delete: Kkes
@@ -229,7 +229,7 @@ kab:
enable: Rmed
enabled: Yermed
enabled_msg: Imuji yermed mebla ugur
- list: Umuγ
+ list: Tabdart
new:
title: Timerna n imuji udmawan amaynut
overwrite: Semselsi
@@ -256,7 +256,7 @@ kab:
add_new: Rni iḥder amaynut n taɣult
confirm_suspension:
cancel: Sefsex
- domain: Taγult
+ domain: Taɣult
export: Sifeḍ
import: Kter
new:
@@ -274,9 +274,9 @@ kab:
email_domain_blocks:
add_new: Rnu amaynut
delete: Kkes
- domain: Taγult
+ domain: Taɣult
new:
- create: Rnu taγult
+ create: Rnu taɣult
title: Timerna n taɣult tamaynut n imayl ɣer tebdart taberkant
title: Tabdart taberkant n imayl
follow_recommendations:
@@ -286,8 +286,8 @@ kab:
instances:
back_to_all: Akk
back_to_limited: Ɣur-s talast
- back_to_warning: Γur-wat
- by_domain: Taγult
+ back_to_warning: Ɣur-wat
+ by_domain: Taɣult
content_policies:
policy: Tasertit
delivery:
@@ -306,7 +306,7 @@ kab:
private_comment: Awennit uslig
public_comment: Awennit azayez
title: Tamatut
- total_blocked_by_us: Ttwasḥebsen sγur-neγ
+ total_blocked_by_us: Ttwasḥebsen sɣur-neɣ
total_followed_by_them: Ṭtafaṛen-t
total_followed_by_us: Neṭṭafaṛ-it
total_reported: Ineqqisen fell-asen
@@ -354,12 +354,15 @@ kab:
other: "%{count} n timawin"
action_taken_by: Tigawt yettwaṭṭfen sɣur
are_you_sure: Tetḥaq-eḍ?
+ cancel: Sefsex
category: Taggayt
comment:
none: Ula yiwen
confirm: Sentem
+ delete_and_resolve: Kkes tisuffaɣ
mark_as_resolved: Creḍ-it yefra
mark_as_unresolved: Creḍ-it ur yefra ara
+ no_one_assigned: Ula yiwen
notes:
create: Rnu tazmilt
create_and_resolve: Fru s tamawt
@@ -390,16 +393,16 @@ kab:
title: Ilugan n uqeddac
settings:
about:
- title: Γef
+ title: Ɣef
appearance:
title: Udem
discovery:
- profile_directory: Akaram n imaγnuten
+ profile_directory: Akaram n imaɣnuten
trends: Ayen mucaɛen
domain_blocks:
all: I medden akk
- disabled: Γef ula yiwen
- users: Γef yimseqdacen idiganen i yeqqnen
+ disabled: Ɣef ula yiwen
+ users: Ɣef yimseqdacen idiganen i yeqqnen
registrations:
title: Ajerred
registrations_mode:
@@ -408,19 +411,26 @@ kab:
open: Zemren akk ad jerden
site_uploads:
delete: Kkes afaylu yulin
+ software_updates:
+ documentation_link: Issin ugar
statuses:
application: Asnas
- back_to_account: Tuγalin γer usebter n umiḍan
+ back_to_account: Tuɣalin ɣer usebter n umiḍan
deleted: Yettwakkes
favourites: Imenyafen
language: Tutlayt
media:
- title: Taγwalt
- title: Tisuffiγin n umiḍan
- with_media: S taγwalt
+ title: Amidya
+ title: Tisuffaɣ n umiḍan
+ trending: Ayen mucaɛen
+ visibility: Abani
+ with_media: S umidya
title: Tadbelt
trends:
allow: Sireg
+ statuses:
+ title: Tisuffaɣ mucaɛen
+ trending: Ayen mucaɛen
warning_presets:
add_new: Rnu amaynut
delete: Kkes
@@ -431,7 +441,11 @@ kab:
new_report:
body: "%{reporter} yettwazen ɣef %{target}"
subject: Aneqqis amaynut i %{instance} (#%{id})
+ new_trends:
+ new_trending_statuses:
+ title: Tisuffaɣ mucaɛen
appearance:
+ advanced_web_interface: Agrudem n web leqqayen
discovery: Asnirem
localization:
guide_link: https://crowdin.com/project/mastodon
@@ -448,6 +462,8 @@ kab:
your_token: Ajiṭun-ik·im n unekcum
auth:
apply_for_account: Suter amiḍan
+ confirmations:
+ welcome_title: Ansuf yessek·em, %{name}!
delete_account: Kkes amiḍan
description:
prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!"
@@ -455,9 +471,11 @@ kab:
forgot_password: Tettud awal-ik uffir?
log_in_with: Qqen s
login: Qqen
- logout: Ffeγ
- migrate_account: Gujj γer umiḍan nniḍen
- or_log_in_with: Neγ eqqen s
+ logout: Ffeɣ
+ migrate_account: Gujj ɣer umiḍan nniḍen
+ or_log_in_with: Neɣ eqqen s
+ progress:
+ confirm: Sentem imayl
providers:
cas: CAS
saml: SAML
@@ -466,8 +484,11 @@ kab:
reset_password: Wennez awal uffir
rules:
back: Tuɣalin
- security: Taγellist
+ security: Taɣellist
set_new_password: Egr-d awal uffir amaynut
+ sign_in:
+ preamble_html: Kcem ar %{domain} s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya.
+ title: Akeččum ɣer %{domain}
status:
account_status: Addad n umiḍan
use_security_key: Seqdec tasarut n teɣlist
@@ -498,16 +519,21 @@ kab:
warning:
username_available: Isem-ik·im n useqdac ad yuɣal yella i tikkelt-nniḍen
username_unavailable: Isem-ik·im n useqdac ad yeqqim ulac-it
+ disputes:
+ strikes:
+ status: 'Tasuffeɣt #%{id}'
+ title_actions:
+ none: Ɣur-wat
errors:
'500':
- title: Asebter-ayi d arameγtu
+ title: Asebter-ayi d arameɣtu
existing_username_validator:
not_found_multiple: ur yezmir ara ad yaf %{usernames}
exports:
archive_takeout:
date: Azemz
download: Sider-d aḥraz-ik·im
- size: Teγzi
+ size: Teɣzi
bookmarks: Ticraḍ
csv: CSV
lists: Tibdarin
@@ -516,8 +542,8 @@ kab:
add_new: Rnu amaynut
filters:
contexts:
- account: Imuγna
- notifications: Tilγa
+ account: Imeɣna
+ notifications: Ilɣa
thread: Idiwenniyen
edit:
title: Ẓreg amzizdig
@@ -534,8 +560,10 @@ kab:
remove: Kkes seg umsizdeg
generic:
all: Akk
+ cancel: Sefsex
changes_saved_msg: Ttwaskelsen ibelliden-ik·im akken ilaq!
- copy: Nγel
+ confirm: Sentem
+ copy: Nɣel
delete: Kkes
order_by: Sizwer s
save_changes: Sekles ibeddilen
@@ -561,11 +589,13 @@ kab:
'604800': 1 umalas
'86400': 1 wass
expires_in_prompt: Werǧin
+ generate: Slaled aseɣwen n uɛraḍ
invited_by: 'Tettwaɛraḍeḍ s ɣur:'
max_uses:
one: 1 uuseqdec
other: "%{count} yiseqdac"
max_uses_prompt: Ulac talast
+ prompt: Slaled rnu bḍu assaɣen d wiyaḍ akken ad kecmen ɣer uqeddac-a
table:
expires_at: Ad ifat di
title: Ɛreḍ-d kra n yimdanen
@@ -575,7 +605,7 @@ kab:
sign_in_token: tangalt n tɣellist n tansa imayl
webauthn: tisura n tɣellist
migrations:
- acct: Ibeddel γer
+ acct: Ibeddel ɣer
incoming_migrations: Tusiḍ-d seg umiḍan nniḍen
proceed_with_move: Awid imeḍfaṛen-ik
moderation:
@@ -597,7 +627,7 @@ kab:
reblog:
subject: "%{name} yesselha addad-ik·im"
notifications:
- other_settings: Iγewwaṛen nniḍen n tilγa
+ other_settings: Iɣewwaṛen nniḍen n yilɣa
number:
human:
decimal_units:
@@ -611,17 +641,20 @@ kab:
setup: Sbadu
pagination:
newer: Amaynut
- next: Γer zdat
+ next: Ɣer zdat
older: Aqbuṛ
prev: Win iɛeddan
preferences:
other: Wiyaḍ
+ privacy:
+ privacy: Tabaḍnit
+ search: Anadi
privacy_policy:
title: Tasertit tabaḍnit
relationships:
activity: Armud n umiḍan
followers: Imeḍfaṛen
- following: Yeṭafaṛ
+ following: Yeṭṭafaṛ
invited: Yettwancad
last_active: Armud aneggaru
most_recent: Melmi kan
@@ -634,6 +667,7 @@ kab:
browser: Iminig
browsers:
alipay: Alipay
+ blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -648,37 +682,41 @@ kab:
qq: Iminig QQ
safari: Safari
weibo: Weibo
- current_session: Tiγimit tamirant
+ current_session: Tiɣimit tamirant
+ date: Azemz
description: "%{browser} s %{platform}"
ip: IP
platforms:
adobe_air: Adobe Air
android: Android
+ blackberry: BlackBerry
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
+ kai_os: KaiOS
linux: Linux
mac: macOS
windows: Windows
windows_mobile: Windows Mobile
- windows_phone: Tiliγri Windows Phone
+ windows_phone: Tiliɣri Windows Phone
revoke: Ḥwi
title: Tiɣimiyin
settings:
account: Amiḍan
- account_settings: Iγewwaṛen n umiḍan
+ account_settings: Iɣewwaṛen n umiḍan
appearance: Udem
authorized_apps: Isnasen yettussirgen
- back: Uγal γer Maṣṭudun
+ back: Uɣal ɣer Maṣṭudun
delete: Tukksa n umiḍan
development: Taneflit
- edit_profile: Ẓreg amaγnu
+ edit_profile: Ẓreg amaɣnu
export: Taktert n yisefka
import: Kter
import_and_export: Taktert d usifeḍ
migrate: Tunigin n umiḍan
- notifications: Tilγa
+ notifications: Ilɣa
preferences: Imenyafen
- profile: Ameγnu
+ profile: Ameɣnu
relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ
statuses_cleanup: Tukksa tawurmant n tsuffaɣ
two_factor_authentication: Asesteb s snat n tarrayin
@@ -745,22 +783,23 @@ kab:
otp: Asnas n usesteb
webauthn: Tisura n teɣlist
user_mailer:
+ appeal_approved:
+ action: Iɣewwaṛen n umiḍan
warning:
categories:
spam: Aspam
title:
disable: Amiḍan i igersen
- none: Γur-wat
+ none: Ɣur-wat
silence: Amiḍan yesɛa talast
suspend: Amiḍan yettwaḥbas
welcome:
- final_action: Bdu asuffeɣ
- full_handle: Tansa umiḍan-ik takemmalit
- subject: Ansuf γer Maṣṭudun
+ subject: Ansuf ɣer Maṣṭudun
title: Ansuf yessek·em, %{name}!
users:
signed_in_as: 'Teqqneḍ amzun d:'
verification:
+ here_is_how: Ha-t-a amek
verification: Asenqed
webauthn_credentials:
add: Rnu tasarut n teɣlist tamaynut
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index 27c76b4378..2cd894befb 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -721,9 +721,6 @@ kk:
welcome:
edit_profile_action: Профиль өңдеу
explanation: Мына кеңестерді шолып өтіңіз
- final_action: Жазба жазу
- full_handle: Желі тұтқасы
- full_handle_hint: This is what you would tell your friends so they can message or follow you frоm another server.
subject: Mastodon Желісіне қош келдіңіз
title: Ортаға қош келдің, %{name}!
users:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 9f4f1343c7..45a95139f0 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -525,7 +525,7 @@ ko:
total_followed_by_us: 우리가 한 팔로우
total_reported: 이들에 대한 신고
total_storage: 미디어 첨부
- totals_time_period_hint_html: 아래에 표시된 총계에는 모든 시간에 대한 데이터가 포함됩니다.
+ totals_time_period_hint_html: 아래에 표시된 총계는 역대 데이터에 대한 것입니다.
unknown_instance: 현재 이 서버에서 해당 도메인에 대한 기록은 없습니다.
invites:
deactivate_all: 전부 비활성화
@@ -755,6 +755,7 @@ ko:
disabled: 아무에게도 안 함
users: 로그인 한 사용자에게
registrations:
+ moderation_recommandation: 모두에게 가입을 열기 전에 적절하고 반응이 빠른 중재 팀을 데리고 있는지 확인해 주세요!
preamble: 누가 이 서버에 계정을 만들 수 있는지 제어합니다.
title: 가입
registrations_mode:
@@ -762,6 +763,7 @@ ko:
approved: 가입하려면 승인이 필요함
none: 아무도 가입 할 수 없음
open: 누구나 가입 할 수 있음
+ warning_hint: 당신의 중재 팀이 스팸이나 악의적인 가입을 시기적절하게 처리할 수 있다고 자신할 수 없다면 "가입이 승인을 요구하도록" 설정하는 것을 추천합니다.
security:
authorized_fetch: 연합된 서버들에게서 인증 필수
authorized_fetch_hint: 연합된 서버들에게서 인증을 요구하는 것은 사용자 레벨과 서버 레벨의 차단을 좀 더 확실하게 해줍니다. 한편으로는 성능적인 페널티, 답글의 전달 범위 감소, 몇몇 연합된 서비스들과의 호환성 문제가 있을 가능성이 있습니다. 추가적으로 이 기능은 전용 액터가 공개된 게시물이나 계정을 페치하는 것은 막지 않습니다.
@@ -950,6 +952,9 @@ ko:
title: 웹훅
webhook: 웹훅
admin_mailer:
+ auto_close_registrations:
+ body: 최근 모더레이터 활동 부족으로, %{instance}가 안좋은 일에 사용되는 것을 방지하기 위해 %{instance}의 가입이 수동 심사를 요구하도록 자동으로 변경되었습니다. 언제든지 가입을 다시 열 수 있습니다.
+ subject: "%{instance}의 가입이 승인을 필요로 하도록 자동으로 변경되었습니다"
new_appeal:
actions:
delete_statuses: 게시물을 삭제하는 것
@@ -1811,10 +1816,6 @@ ko:
edit_profile_action: 프로필 설정
edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다.
explanation: 시작하기 전에 몇가지 팁들을 준비했습니다
- final_action: 포스팅 시작하기
- final_step: '게시물을 올리세요! 팔로워가 없더라도, 공개 게시물들은 다른 사람에게 보여질 수 있습니다, 예를 들자면 로컬이나 연합 타임라인 등이 있습니다. 사람들에게 자신을 소개하고 싶다면 #툿친소 해시태그를 이용해보세요.'
- full_handle: 당신의 풀 핸들은 다음과 같습니다
- full_handle_hint: 이것을 당신의 친구들에게 알려주면 다른 서버에서 팔로우 하거나 메시지를 보낼 수 있습니다.
subject: 마스토돈에 오신 것을 환영합니다
title: 환영합니다 %{name} 님!
users:
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index e78e7ecfbb..d744aaa903 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -1594,10 +1594,6 @@ ku:
edit_profile_action: Profîlê saz bike
edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî.
explanation: Li vir çend serişte hene ku tu dest pê bike
- final_action: Dest bi weşandinê bike
- final_step: 'Dest bi weşandinê bike! Bêyî şopîneran jî dibe ku şandiyên te yên gelemperî ji hêla kesên din ve werin dîtin, mînakî li ser demjimêra herêmî û di hashtagan de. Dibe ku tu bixwazî xwe li ser hashtagê #nasname bidî nasandin.'
- full_handle: Hemî destikê te
- full_handle_hint: Ji hevalên xwe re, ji bona ji rajekarekê din peyam bişîne an jî ji bona ku te bikaribe bişopîne tişta ku tu bibêjî ev e.
subject: Tu bi xêr hatî Mastodon
title: Bi xêr hatî, %{name}!
users:
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 02308cf2f0..13e29f927e 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -18,6 +18,9 @@ lad:
nothing_here: No ay niente aki!
pin_errors:
following: Deves estar sigiendo a la persona a la ke keres achetar
+ posts:
+ one: Publikasyon
+ other: Publikasyones
posts_tab_heading: Publikasyones
admin:
account_actions:
@@ -82,7 +85,7 @@ lad:
title: Lokalizasyon
login_status: Estado de koneksyon kon kuento
media_attachments: Aneksos de multimedia
- memorialize: Konvirtir en memorial
+ memorialize: Konvirte en memorial
memorialized: Kuento komemorativo
memorialized_msg: "%{username} se konvirtido kon sukseso en un kuento komemorativo"
moderation:
@@ -106,14 +109,14 @@ lad:
previous_strikes_description_html:
one: Este kuento tiene un amonestamiento.
other: Este kuento tiene %{count} amonestamientos.
- promote: Promosyonar
+ promote: Promosyona
protocol: Protokol
public: Publiko
push_subscription_expires: Ekspirasyon del abonamiento PuSH
- redownload: Arefreskar profil
+ redownload: Arefreska profil
redownloaded_msg: Se aktualizo djustamente el profil de %{username} dizde el orijin
reject: Refuza
- rejected_msg: La solisitasyon de enrejistrasyon de %{username} a sido refuzada kon sukseso
+ rejected_msg: La solisitasyon de enrejistrasyon de %{username} tyene sido refuzada kon sukseso
remote_suspension_irreversible: Los datos de este kuento fueron irreversivlemente supremidos.
remote_suspension_reversible_hint_html: El kuento fue suspendido en este sirvidor i los datos seran totalmente supremidos el %{date}. Asta estonses el sirvidor remoto puede restaurar este kuento sin dingun efekto negativo. Si keres supremir todos los datos del kuento pishin, puedes fazerlo a kontinuasyon.
remove_avatar: Efasa imaje de profil
@@ -288,7 +291,7 @@ lad:
empty: No se toparon rejistros.
filter_by_action: Filtra por aksion
filter_by_user: Filtra por utilizador
- title: Log de revizyon
+ title: Defter de revizyon
announcements:
destroyed_msg: Pregon supremido kon sukseso!
edit:
@@ -303,12 +306,12 @@ lad:
scheduled_for: Programado para %{time}
scheduled_msg: Pregon programado para su publikasyon!
title: Pregones
- unpublish: Retirar publikasyon
+ unpublish: Retira publikasyon
unpublished_msg: Pregon retirado kon sukseso!
updated_msg: Pregon aktualizado kon sukseso!
critical_update_pending: Aktualizasyon kritika esta asperando
custom_emojis:
- assign_category: Asinyar kategoria
+ assign_category: Asinya kategoria
by_domain: Domeno
copied_msg: Kopia lokala del emoji kriyada kon sukseso
copy: Kopia
@@ -328,7 +331,7 @@ lad:
list: Lista
listed: Listados
new:
- title: Adjustar muevo emoji personalizado
+ title: Adjusta muevo emoji personalizado
no_emoji_selected: No se troko dingun emoji porke no eskojites dinguno
not_permitted: No tienes permiso para realizar esta aksyon
overwrite: Sobreskrive
@@ -506,8 +509,8 @@ lad:
all: Todos
clear: Alimpiar yerros de entrega
failing: Fayando
- restart: Reinisyar entrega
- stop: Detener entrega
+ restart: Reinisya entrega
+ stop: Deten entrega
unavailable: No desponivle
delivery_available: Entrega desponivle
delivery_error_days: Diyas de yerro de entrega
@@ -632,7 +635,7 @@ lad:
reported_by: Raportado por
resolved: Rezolvido
resolved_msg: Tienes rezolvido la denunsia djustamente!
- skip_to_actions: Ir direktamente a las aksyones
+ skip_to_actions: Va direktamente a las aksyones
status: Estado
statuses: Kontenido raportado
statuses_description_html: El kontenido ofensivo se sitara en la komunikasyon kon el kuento raportado
@@ -643,12 +646,12 @@ lad:
silence_html: 'Vas limitar el kuento de @%{acct}''''. Esto va:'
suspend_html: 'Vas suspender el kuento de @%{acct}''''. Esto va:'
actions:
- delete_html: Kitar las publikasyones ofensivas
- mark_as_sensitive_html: Markar los multimedios de la publikasyon komo sensivles
- silence_html: Severamente limitar la vizivilita de @%{acct}, fazendo su profil i kontenido vizivles solo para las personas ke ya lo sigen o manualmente bushkan su profil
- suspend_html: Suspender @%{acct}, faziendo su profil i kontenido inaksesivle i no disponivle para interaksiones
- close_report: 'Markar raporto #%{id} komo rezolvido'
- close_reports_html: Markar todos los raportos kontra @%{acct} komo rezolvidos
+ delete_html: Kita las publikasyones ofensivas
+ mark_as_sensitive_html: Marka los multimedios de la publikasyon komo sensivles
+ silence_html: Severamente limita la vizivilita de @%{acct}, fazendo su profil i kontenido vizivles solo para las personas ke ya lo sigen o manualmente bushkan su profil
+ suspend_html: Suspende @%{acct}, faziendo su profil i kontenido inaksesivle i no disponivle para interaksiones
+ close_report: 'Marka raporto #%{id} komo rezolvido'
+ close_reports_html: Marka todos los raportos kontra @%{acct} komo rezolvidos
delete_data_html: Efasa el profil i kontenido de @%{acct} en 30 dias si no sea desuspendido en akel tiempo
preview_preamble_html: "@%{acct} resivira una avertensya komo esta:"
record_strike_html: Enrejistra un amonestamiento kontra @%{acct} para ke te ayude eskalar las violasyones de reglas de este kuento en el avenir
@@ -656,7 +659,7 @@ lad:
warning_placeholder: Adisionalas, opsionalas razones la aksyon de moderasyon.
target_origin: Orijin del kuento raportado
title: Raportos
- unassign: Dezasinyar
+ unassign: Dezasinya
unknown_action_msg: 'Aksyon no konesida: %{action}'
unresolved: No rezolvido
updated_at: Aktualizado
@@ -742,6 +745,7 @@ lad:
preamble: La marka de tu sirvidor lo desferensia de otros sirvidores de la red. Esta enformasyon puede amostrarse por una varieta de entornos, komo en la enterfaz web de Mastodon, en aplikasyones nativas, en previsualizasiones de atadijos en otros sitios internetikos i en aplikasyones de mesajes, etc. Por esta razon, es mijor mantener esta enformasyon klara, breve i konsiza.
title: Marka
captcha_enabled:
+ desc_html: Esto se baza en eskriptos eksternos de hCaptcha, ke pueden ser una influensya negra a la sigurita i privasita. Ademas, esto puede rezultar en un proseso de enrejistrasyon signifikativamente manko aksesivle para algunas personas (espesyalmente diskapasitadas). Por estas razones, por favor, konsidera otras alternativas komo rejistrasyon por aprovasyon manuala o kon envitasyon.
title: Solisita ke los muevos utilizadores rezolven un CAPTCHA para konfirmar su konto
content_retention:
preamble: Kontrola komo el kontenido jenerado por el utilizador se magazina en Mastodon.
@@ -763,6 +767,7 @@ lad:
disabled: A dinguno
users: Para los utilizadores lokales ke entrado en su kuento
registrations:
+ moderation_recommandation: Por favor, asigurate ke tyenes una taifa de moderasyon adekuada i reaktiva antes de avrir los enrejistramyentos a todos!
preamble: Kontrola ken puede kriyar un kuento en tu sirvidor.
title: Enrejistramientos
registrations_mode:
@@ -770,7 +775,10 @@ lad:
approved: Se rekiere achetasion para enrejistrarse
none: Permete a los utilizadores trokar la konfigurasyon del sitio
open: Kualkiera puede enrejistrarse
+ warning_hint: Rekomendamos el uzo de "Se rekiere achetasion para enrejistrarse" a manko ke estes siguro ke tu taifa de moderasyon puede moderar el spam i los enrejistramyentos malisiozos en un tyempo razonavle.
security:
+ authorized_fetch: Rekere autentifikasyon de sirvidores federados
+ authorized_fetch_hint: Rekerir autentifikasyon de sirvidores federados permite un forsamyento mas estrikto de los blokos a nivel de utilizador i a nivel de sirvidor. Malgrado esto, el koste de esto es una penalizasyon de efisyensya, reduksyon del alkanse de tus repuestas i puede introduzir problemas de kompatibilita kon algunos sirvisyos federados. Ademas, esto no impidira ke aktores dedikados obtengan tus kuentos publikos i publikasyones publikas.
authorized_fetch_overridden_hint: Agora no puedes trokar esta konfigurasyon dkee esta sovreeskrita por una variable de entorno.
federation_authentication: Forzamyento de autentifikasyon para la federasyon
title: Konfigurasyon del sirvidor
@@ -779,6 +787,7 @@ lad:
destroyed_msg: Dosya supremida kon sukseso!
software_updates:
critical_update: Kritiko – por favor aktualiza pishin
+ description: Rekomendamos ke mantengas aktualizada tu enstalasyon de Mastodon para benefisyar de las muevas koreksyones y funksyones. Ademas, a vezes es kritiko aktualizar Mastodon punktualmente para evitar problemas de sigurita. Por estas razones, Mastodon komprova si ay aktualizasyones kada 30 minutos, i te avizara de akodro a tus preferensyas de avizos por posta elektronika.
documentation_link: Ambezate mas
release_notes: Notas sovre la versyon
title: Aktualizasyones desponivles
@@ -832,11 +841,16 @@ lad:
message_html: El klaster de Elasticsearch no es sano (estado kolorado), funksyones de bushkeda no estan disponivles
elasticsearch_health_yellow:
message_html: El klaster de Elasticsearch no es sano (estado amariyo), es posivle ke keras investigar la razon
+ elasticsearch_index_mismatch:
+ message_html: Las mapas de indeksos Elasticsearch estan dezaktualizadas. Por favor, uza tootctl search deploy --only=%{value}
elasticsearch_preset:
action: Ve dokumentasyon
message_html: Tu klaster de Elasticsearch tiene mas ke un nodo, ama Mastodon no esta konfigurado para uzarlos.
elasticsearch_preset_single_node:
action: Ve dokumentasyon
+ message_html: Tu klaster de Elasticsearch solo tyene un nodo, ES_PRESET
deve estableserse a single_node_cluster
.
+ elasticsearch_reset_chewy:
+ message_html: Tu indekso del sistema Elasticsearch esta dezaktualizado por un trokamyento de konfigurasyon. Por favor uza tootctl search deploy --reset-chewy
para aktualizarlo.
elasticsearch_running_check:
message_html: No se pudo konektar a Elasticsearch. Por favor, averigua ke esta egzekutandose, o dezaktiva la bushkeda de teksto kompleto
elasticsearch_version_check:
@@ -954,6 +968,9 @@ lad:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Por la falta de moderadores aktivos, los enrejistramyentos en %{instance} tyenen sido trokados otomatikamente para rekerir revizyon manuala, para ke %{instance} no se utilize potensyalmente komo platforma por malos aktores. Puedes trokarlo de muevo para avrir los enrejistramyentos en kualseker momento.
+ subject: Enrejistramyentos de %{instance} fueron otomatikamente trokados i agora nesesitan aprovasyon
new_appeal:
actions:
delete_statuses: para supremir sus mesajes
@@ -1089,6 +1106,7 @@ lad:
preamble_html: Konektate kon tus kredensiales de %{domain}. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki.
title: Konektate kon %{domain}
sign_up:
+ manual_review: Las enrejistrasyones en %{domain} pasan por la revizyon manuala de muestros moderadores. Para ayudarmos a prosesar tu enrejistrasyon, eskrive un poko sovre ti i por ke keres un kuento en %{domain}.
preamble: Kon un kuento en este sirvidor de Mastodon, podras segir a kualkier otra persona en la red, endependientemente del sirvidor en el ke se tope.
title: Kriya kuento de Mastodon en %{domain}.
status:
@@ -1103,7 +1121,7 @@ lad:
use_security_key: Uza la yave de sigurita
challenge:
confirm: Kontinua
- hint_html: "Tip: No retornaremos a demandarte por el kod durante la sigiente ora."
+ hint_html: "Konsejo: No retornaremos a demandarte por el kod durante la sigiente ora."
invalid_password: Kod inkorekto
prompt: Konfirma kod para segir
crypto:
@@ -1133,7 +1151,7 @@ lad:
confirm_password: Eskrive tu kod aktual para demostrar tu identita
confirm_username: Eskrive tu nombre de utilizador para konfirmar
proceed: Efasa kuento
- success_msg: Tu kuento fue efasado kon reusho
+ success_msg: Tu kuento fue efasado kon reushita
warning:
before: 'Antes de kontinuar, por favor melda kon atensyon las sigientes notas:'
caches: El kontenido ke tiene sido magazinado en kashe por otros sirvidores puede persistir
@@ -1179,6 +1197,7 @@ lad:
invalid_domain: no es un nombre de domeno valido
edit_profile:
basic_information: Enformasyon bazika
+ hint_html: "Personaliza lo ke la djente ve en tu profil publiko i kon tus publikasyones. Es mas probavle ke otras personas te sigan i enteraktuen kontigo kuando kompletas tu profil i foto."
other: Otros
errors:
'400': La solisitasyon ke enviates no fue valida o fue malformada.
@@ -1258,11 +1277,18 @@ lad:
batch:
remove: Kita del filtro
index:
+ hint: Este filtro se aplika a la seleksyon de publikasyones individualas independentemente de otros kriteryos. Puedes adjustar mas publikasyones a este filtro dizde la enterfaz de web.
title: Publikasyones filtradas
generic:
all: Todos
+ all_items_on_page_selected_html:
+ one: "%{count} elemento en esta pajina esta eskojido."
+ other: Todos los %{count} elementos en esta pajina estan eskojidos.
+ all_matching_items_selected_html:
+ one: "%{count} elemento ke koenside con tu bushkeda esta eskojido."
+ other: Todos los %{count} elementos ke koensiden con tu bushkeda estan eskojidos.
cancel: Anula
- changes_saved_msg: Trokamientos guadrados kon reusho!
+ changes_saved_msg: Trokamientos guadrados kon reushita!
confirm: Konfirma
copy: Kopia
delete: Efasa
@@ -1286,6 +1312,7 @@ lad:
too_large: Dosya es mas grande
failures: Yerros
imported: Importado
+ mismatched_types_warning: Parese ke podrias eskojer el tipo inkorekto para este importo, por favor verifikalo de muevo.
modes:
merge: Une
merge_long: Manten rejistros egzistentes i adjusta muevos
@@ -1303,6 +1330,7 @@ lad:
bookmarks_html: Estas a punto de adjustar asta %{total_items} publikasyones de %{filename} a tus markadores.
domain_blocking_html: Estas a punto de blokar asta %{total_items} domenos de %{filename}.
following_html: Estas a punto de segir asta %{total_items} kuentos de %{filename}.
+ lists_html: Estas a punto de adjustar %{total_items} kuentos dizde %{filename} a tus listas. Se kriyaran muevas listas si no ay listas para adjustarlas.
muting_html: Estas a punto de silensyar asta %{total_items} kuentos de %{filename}.
preface: Puedes importar siertos datos, komo todas las personas a las kualas estas sigiendo o blokando en tu kuento en esta instansya, dizde dosyas eksportadas de otra instansya.
recent_imports: Importasyones resyentes
@@ -1374,6 +1402,7 @@ lad:
unsubscribe:
action: Si, dezabona
complete: Dezabonado
+ confirmation_html: Estas siguro de ke ya no keres risivir %{type} de Mastodon en %{domain} a tu posta elektronika %{email}? Syempre podras reabonarte dizde las opsyones de avizos por posta..
emails:
notification_emails:
favourite: avizos de favoritos por posta
@@ -1381,6 +1410,8 @@ lad:
follow_request: avizos de solisitasyones de segimyento por posta
mention: avizos de enmentaduras por posta
reblog: avizos de repartajasyones por posta
+ resubscribe_html: Si tyenes deabonado por yerro, puedes reabonar en tus opsyones de avizos por posta elektronika.
+ success_html: Ya no risiviras %{type} de Mastodon en %{domain} a tu posta en %{email}.
title: Dezabona
media_attachments:
validations:
@@ -1506,9 +1537,13 @@ lad:
posting_defaults: Konfigurasyon predeterminada de publikasyones
public_timelines: Linyas de tiempo publikas
privacy:
+ hint_html: "Personaliza el diskuvrimyento de tu profil y tus publikasyones. En Mastodon tyenes distinktas funksyones ke te ayudaran a alkansar una audiensya mas ancha si las aktivas. Reviza estas opsyones por un momento para estar siguro ke kaven tus nesesidades."
privacy: Privasita
+ privacy_hint_html: Kontrola kuanto keres revelar a otros. Las personas diskuvren profiles i aplikasyones interesantes navigando por los suivantes de otras personas i vyendo dizde ke aplikasyones publikan, ama puede ke preferas mantenerlo eskondido.
reach: Alkanse
+ reach_hint_html: Kontrola si keres ke te diskuvren i sigen muevas personas. Keres ke tus publikasyones se amostren en la seksyon de Eksplorasyon? Keres que tu kuento este rekomendado a otras personas? Keres achetar otomatikamente a todos los muevos suivantes o tener kontrol sovre kada uno de eyos?
search: Bushkeda
+ search_hint_html: Kontrola komo keres ke te topen. Keres ke otras personas te topan por lo ke tyenes publikado publikamente? Keres ke las personas de fuera de Mastodon topen tu profil al bushkar en la web? Por favor, akodrate de ke la ekskluzyon totala de todos los bushkadores no puede ser garantizada para enformasyon publika.
title: Privasita i alkanse
privacy_policy:
title: Politika de privasita
@@ -1555,6 +1590,7 @@ lad:
over_total_limit: Tienes superado el limito de %{limit} publikasyones programadas
too_soon: La data programada deve estar en el avenir
self_destruct:
+ lead_html: Malorozamente, %{domain} va serrar permanentemente. Si teniyas un kuento ayi, ya no podras utilizarlo, ama ainda puedes solisitar una kopya de tus datos.
title: Este sirvidor esta serrando
sessions:
activity: Ultima aktivita
@@ -1728,6 +1764,7 @@ lad:
with_time_zone: "%d de %b del %Y, %H:%M %Z"
translation:
errors:
+ quota_exceeded: La kuota de uzo del sirvisyo de traduksyon para todo el sirvidor tiene sido sovrepasada.
too_many_requests: Ay demaziadas solisitudes de servisyo de traduksyon.
two_factor_authentication:
add: Adjusta
@@ -1740,7 +1777,7 @@ lad:
lost_recovery_codes: Los kodiches de rekuperasyon te permeten obtener akseso a tu kuento si piedres tu telefon. Si tienes pedrido tus kodiches de rekuperasyon, puedes redjenerarlos aki. Tus viejos kodiches de rekuperasyon se aran malatos.
methods: Metodos de autentifikasyon de dos pasos
otp: Aplikasyon de autentifikasyon
- recovery_codes: Fazer kopias de sigurita de tus kodiches de rekuperasyon
+ recovery_codes: Faz kopias de sigurita de tus kodiches de rekuperasyon
recovery_codes_regenerated: Kodiches de rekupersayon redjenerados kon sukseso
recovery_instructions_html: Si piedres akseso a tu telefon, puedes uzar uno de los sigientes kodiches de rekuperasyon para obtener akseso a tu kuento. Mantenlos a salvo. Por enshemplo, puedes imprimirlos i guadrarlos kon otros dokumentos emportantes.
webauthn: Yaves de sigurita
@@ -1757,11 +1794,16 @@ lad:
subtitle: Tu apelasyon fue refuzada.
title: Apelasyon refuzada
backup_ready:
+ explanation: Tienes solisitado una kopia de sigurita de tu kuento de Mastodon.
extra: Agora esta pronto para abashar!
subject: Tu dosya esta pronta para abashar
title: Abasha dosya
failed_2fa:
details: 'Aki estan los peratim de las provas de koneksyon kon tu kuento:'
+ explanation: Algun ha intentado konektarte kon tu cuenta ama prokuro un sigundo paso de autentifikasyon invalido.
+ further_actions_html: Si no fuites tu, rekomendamos %{action} inmediatamente deke puede estar komprometido.
+ subject: Autentikasyon del sigundo paso sin sukseso
+ title: Autentifikasyon del sigundo paso no reushida
suspicious_sign_in:
change_password: troka tu kod
details: 'Aki estan los peratim de la koneksyon kon tu kuento:'
@@ -1804,10 +1846,6 @@ lad:
edit_profile_action: Konfigurasyon de profil
edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte.
explanation: Aki ay algunos konsejos para ampesar
- final_action: Ampesa a publikar
- final_step: 'Ampesa a publikar! Inkluzo sin suivantes, tus publikasyones publikas pueden ser vistas por otros, por enshemplo en la linya de tiempo lokal o en etiketas. Tal vez keras aprezentarte kon la etiketa de #introduksiones.'
- full_handle: Tu sovrenombre kompleto
- full_handle_hint: Esto es lo ke le dirias a tus haverim para ke eyos puedan embiarte mesajes o segirte dizde otra instansya.
subject: Bienvenido a Mastodon
title: Bienvenido, %{name}!
users:
@@ -1819,7 +1857,10 @@ lad:
seamless_external_login: Estas konektado por un servisyo eksterno i estonses la konfigurasyon de kod i konto de posta no estan disponivles.
signed_in_as: 'Konektado komo:'
verification:
+ extra_instructions_html: Konsejo: El atadijo en tu web puede ser invizivle. La parte importante es rel="me"
, ke evita la suplantasyon de identita en sitios kon kontenido jenerado por el utilizador. Puedes inkluzo uzar una etiketa atadijo
en la kavesera de la pajina en vez de a
, ama el HTML deve ser aksesivle sin exekutar JavaScript.
here_is_how: Ansina es komo
+ hint_html: "La verifikasyon de identita en Mastodon es para todos. Bazado en estandardes abiertos, agora i para syempre. Todo lo ke nesesitas es un sitio web propio ke la gente rekonozka. Kuando adjustas un atadijo a este sitio web dizde tu profil, komprovaremos ke el sitio web se ata a tu profil i lo amostraremos vizualmente."
+ instructions_html: Kopia i apega este kodiche en el HTML de tu sitio web. Estonses, adjusta el adreso de tu sitio web en uno de los kutis adisyonales de tu profil dizde la seksyon "Edita profil" i guadra los trokamyentos.
verification: Verifikasyon
verified_links: Tus atadijos verifikados
webauthn_credentials:
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 1d159bf45a..7ffce1a516 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -102,14 +102,27 @@ lt:
public: Viešas
push_subscription_expires: PuSH prenumeramivas pasibaigė
redownload: Perkrauti profilį
+ rejected_msg: Sėkmingai patvirtinta %{username} registracijos paraiška
+ remote_suspension_irreversible: Šios paskyros duomenys negrįžtamai ištrinti.
+ remote_suspension_reversible_hint_html: Paskyra jų serveryje buvo sustabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko nuotolinis serveris gali atkurti šią paskyrą be jokių neigiamų pasekmių. Jei norite iš karto pašalinti visus paskyros duomenis, galite tai padaryti toliau.
remove_avatar: Panaikinti profilio nuotrauką
remove_header: Panaikinti antraštę
+ removed_header_msg: Sėkmingai pašalintas %{username} antraštės paveikslėlis
resend_confirmation:
already_confirmed: Šis vartotojas jau patvirtintas
+ send: Dar kartą išsiųsti patvirtinimo nuorodą
+ success: Patvirtinimo laiškas sėkmingai išsiųstas!
reset: Iš naujo
reset_password: Atkurti slaptažodį
resubscribe: Per prenumeruoti
+ role: Vaidmuo
search: Ieškoti
+ search_same_email_domain: Kiti tą patį el. pašto domeną turintys naudotojai
+ search_same_ip: Kiti tą patį IP turintys naudotojai
+ security: Apsauga
+ security_measures:
+ only_password: Tik slaptažodis
+ password_and_2fa: Slaptažodis ir 2FA
sensitized: Pažymėti kaip jautrią informaciją
shared_inbox_url: Bendroji gautųjų URL
show:
@@ -120,13 +133,21 @@ lt:
statuses: Statusai
subscribe: Prenumeruoti
suspended: Užrakintas
+ suspension_irreversible: Šios paskyros duomenys negrįžtamai ištrinti. Galite atšaukti paskyros sustabdymą, kad ja būtų galima naudotis, tačiau nebus atkurti jokie anksčiau turėti duomenys.
+ suspension_reversible_hint_html: Paskyra sustabdyta, o duomenys bus visiškai pašalinti %{date}. Iki to laiko paskyrą galima atkurti be jokių neigiamų pasekmių. Jei norite iš karto pašalinti visus paskyros duomenis, galite tai padaryti toliau.
title: Vartotojai
+ unblock_email: El. pašto adreso atblokavimas
+ unblocked_email_msg: Sėkmingai atblokuotas %{username} el. pašto adresas
unconfirmed_email: Nepatvirtintas el pašto adresas
undo_silenced: Atšaukti užtildymą
undo_suspension: Atšaukti užrakinimą
+ unsilenced_msg: Sėkmingai panaikintas %{username} paskyros apribojimas
unsubscribe: Nebeprenumeruoti
+ unsuspended_msg: Sėkmingai panaikintas %{username} paskyros apribojimas
username: Slapyvardis
+ view_domain: Peržiūrėti domeno santrauką
warn: Įspėti
+ whitelisted: Leidžiama federacijai
action_logs:
title: Audito žurnalas
custom_emojis:
@@ -260,6 +281,8 @@ lt:
desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją.
domain_blocks:
all: Visiems
+ registrations:
+ moderation_recommandation: Prieš atidarant registraciją visiems, įsitikink, kad turi tinkamą ir reaguojančią prižiūrėjimo komandą!
software_updates:
description: Rekomenduojama nuolat atnaujinti Mastodon diegyklę, kad galėtum naudotis naujausiais pataisymais ir funkcijomis. Be to, kartais labai svarbu laiku naujinti Mastodon, kad būtų išvengta saugumo problemų. Dėl šių priežasčių Mastodon kas 30 minučių tikrina, ar yra atnaujinimų, ir praneša tau apie tai pagal tavo el. pašto pranešimų parinktis.
statuses:
@@ -283,6 +306,9 @@ lt:
edit_preset: Keisti įspėjimo nustatymus
title: Valdyti įspėjimo nustatymus
admin_mailer:
+ auto_close_registrations:
+ body: Dėl pastarojo meto peržiūrėtojų aktyvumo trūkumo %{instance} registracija buvo automatiškai pakeista į reikalaujančią rankinės būdo peržiūros, kad %{instance} nebūtų naudojama kaip platforma potencialiems blogiems veikėjams. Bet kuriuo metu gali ją vėl perjungti į atvirą registraciją.
+ subject: "%{instance} registracijos automatiškai pakeistos į reikalaujančias patvirtinimo"
new_report:
body: "%{reporter} parašė skundą apie %{target}"
body_remote: Kažkas iš %{domain} parašė skundą apie %{target}
@@ -293,7 +319,7 @@ lt:
guide_link_text: Visi gali prisidėti.
application_mailer:
notification_preferences: Keisti el pašto parinktis
- settings: 'Keisti el pašto parinktis: %{link}'
+ settings: 'Keisti el. pašto nuostatas: %{link}'
view: 'Peržiūra:'
view_profile: Peržiurėti profilį
view_status: Peržiūrėti statusą
@@ -582,10 +608,6 @@ lt:
welcome:
edit_profile_action: Nustatyti profilį
explanation: Štai keletas patarimų, kaip pradėti
- final_action: Pradėti kelti įrašus
- final_step: 'Pradėk skelbti! Net jei ir neturi sekėjų, tavo viešus įrašus gali matyti kiti, pavyzdžiui, vietinėje laiko skalėje arba saitažodžiuose. Galbūt norėsi prisistatyti saitažodyje #introductions.'
- full_handle: Tavo pilnas slapyvardis
- full_handle_hint: Štai ką pasakytum savo draugams, kad jie galėtų parašyti arba sekti tave iš kito serverio.
subject: Sveiki atvykę į Mastodon
title: Sveiki atvykę, %{name}!
users:
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index fcf478cf93..89bdf5f05f 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -1855,10 +1855,6 @@ lv:
edit_profile_action: Iestatīt profilu
edit_profile_step: Tu vari pielāgot savu profilu, augšupielādējot profila attēlu, mainot parādāmo vārdu un citas lietas. Vari izvēlēties pārskatīt jaunus sekotājus, pirms atļauj viņiem tev sekot.
explanation: Šeit ir daži padomi, kā sākt darbu
- final_action: Sāc publicēt
- final_step: 'Sāc publicēt! Pat bez sekotājiem tavas publiskās ziņas var redzēt citi, piemēram, vietējā ziņu lentā vai atsaucēs. Iespējams, tu vēlēsies iepazīstināt ar sevi, izmantojot tēmturi #introductions.'
- full_handle: Tavs pilnais lietotājvārds
- full_handle_hint: Šis ir tas, ko tu pasaki saviem draugiem, lai viņi varētu tev ziņot vai sekot tev no cita servera.
subject: Laipni lūgts Mastodon
title: Laipni lūgts uz borta, %{name}!
users:
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 6625a13b3b..81f1851b1e 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -1772,10 +1772,6 @@ ms:
edit_profile_action: Sediakan profil
edit_profile_step: Anda boleh menyesuaikan profil anda dengan memuat naik gambar profil, menukar nama paparan anda dan banyak lagi. Anda boleh ikut serta untuk menyemak pengikut baharu sebelum mereka dibenarkan mengikuti anda.
explanation: Berikut ialah beberapa petua untuk anda bermula
- final_action: Mula menyiarkan
- final_step: 'Mula menyiarkan! Walaupun tanpa pengikut, pos awam anda mungkin dilihat oleh orang lain, contohnya pada garis masa tempatan atau dalam hashtag. Anda mungkin ingin memperkenalkan diri anda pada hashtag #introductions.'
- full_handle: Pemegang penuh anda
- full_handle_hint: Inilah yang anda akan beritahu rakan anda supaya mereka boleh menghantar mesej atau mengikuti anda dari server lain.
subject: Selamat datang kepada Mastodon
title: Selamat datang, %{name}!
users:
diff --git a/config/locales/my.yml b/config/locales/my.yml
index 094f581eb9..18f5c6a2d0 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -1771,10 +1771,6 @@ my:
edit_profile_action: ပရိုဖိုင်ထည့်သွင်းရန်
edit_profile_step: ပရိုဖိုင်ဓာတ်ပုံတစ်ပုံ တင်ခြင်း၊ ဖော်ပြမည့်အမည် ပြောင်းလဲခြင်းနှင့် အခြားအရာများပြုလုပ်ခြင်းတို့ဖြင့် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ စောင့်ကြည့်သူအသစ်များ သင့်ကိုစောင့်ကြည့်ခွင့်မပြုမီ ပြန်လည်သုံးသပ်ရန်အတွက် ဆုံးဖြတ်နိုင်ပါသည်။
explanation: ဤသည်မှာ သင် စတင်အသုံးပြုနိုင်ရန်အတွက် အကြံပြုချက်အချို့ဖြစ်ပါသည်
- final_action: ပို့စ် တင်ရန်
- final_step: 'ပို့စ်စပြီး တင်နိုင်ပါပြီ။ စောင့်ကြည့်သူများမရှိသေးသော်လည်း သင့်အများမြင်ပို့စ်များကို ဒေသတွင်းစာမျက်နှာ သို့မဟုတ် ဟက်ရှ်တက်စာမျက်နှာတို့တွင် အခြားသူများက မြင်နိုင်ပါသည်။ #introductions ဟက်ရှ်တက်ဖြင့် သင့်ကိုယ်သင် မိတ်ဆက်နိုင်ပါသည်။'
- full_handle: ကိုယ်တိုင်ထိန်းချုပ်နိုင်သည်
- full_handle_hint: ဤသည်မှာ သင့်သူငယ်ချင်းများကို အခြားဆာဗာတစ်ခုမှ မက်ဆေ့ချ်ပို့နိုင်ကြောင်း သို့မဟုတ် စောင့်ကြည့်နိုင်ကြောင်း အသိပေးပါမည်။
subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။
title: "%{name} က ကြိုဆိုပါတယ်။"
users:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index a3657890da..c935e9f4aa 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -767,6 +767,7 @@ nl:
disabled: Aan niemand
users: Aan ingelogde lokale gebruikers
registrations:
+ moderation_recommandation: Zorg ervoor dat je een adequaat en responsief moderatieteam hebt voordat je registraties voor iedereen openstelt!
preamble: Toezicht houden op wie een account op deze server kan registreren.
title: Registraties
registrations_mode:
@@ -774,6 +775,7 @@ nl:
approved: Goedkeuring vereist om te kunnen registreren
none: Niemand kan zich registreren
open: Iedereen kan zich registreren
+ warning_hint: We raden je aan om “Goedkeuring vereist om te kunnen registreren” te gebruiken, tenzij je er zeker van bent dat jouw moderatieteam spam en kwaadwillende registraties tijdig kan afhandelen.
security:
authorized_fetch: Verificatie van gefedeerde servers vereisen
authorized_fetch_hint: Verificatie vereisen van gefedereerde servers maakt een striktere handhaving van blokkades op gebruikersniveau en serverniveau mogelijk. Dit gaat echter ten koste van de prestaties, vermindert het bereik van je reacties en kan compatibiliteitsproblemen met sommige gefedereerde services opleveren. Bovendien zal dit niet voorkomen dat personen met slechte bedoelingen je openbare berichten en accounts kunnen ophalen.
@@ -966,6 +968,9 @@ nl:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: In verband met een gebrek aan recentelijke moderator-activiteit, is de registratie-modus op %{instance} automatisch veranderd naar handmatige beoordeling door moderatoren. Dit om te voorkomen dat %{instance} als platform voor eventueel misbruik kan worden gebruikt. Je kunt op elk gewenst moment veel terugschakelen naar open registraties.
+ subject: De registratie-modus op %{instance} is automatisch veranderd naar handmatige beoordeling door moderatoren
new_appeal:
actions:
delete_statuses: het verwijderen van diens berichten
@@ -1794,10 +1799,10 @@ nl:
subject: Jouw archief staat klaar om te worden gedownload
title: Archief ophalen
failed_2fa:
- details: 'Hier zijn details van de aanmeldpoging:'
+ details: 'Hier zijn details van de inlogpoging:'
explanation: Iemand heeft geprobeerd om in te loggen op jouw account maar heeft een ongeldige tweede verificatiefactor opgegeven.
further_actions_html: Als jij dit niet was, raden we je aan om onmiddellijk %{action} aangezien het in gevaar kan zijn.
- subject: Tweede factor authenticatiefout
+ subject: Tweestapsverificatiefout
title: Tweestapsverificatie mislukt
suspicious_sign_in:
change_password: je wachtwoord te wijzigen
@@ -1841,10 +1846,6 @@ nl:
edit_profile_action: Profiel instellen
edit_profile_step: Je kunt jouw profiel aanpassen door een profielfoto te uploaden, jouw weergavenaam aan te passen en meer. Je kunt het handmatig goedkeuren van volgers instellen.
explanation: Hier zijn enkele tips om je op weg te helpen
- final_action: Begin berichten te plaatsen
- final_step: 'Begin berichten te plaatsen! Zelfs zonder volgers kunnen jouw openbare berichten door anderen bekeken worden, bijvoorbeeld op de lokale tijdlijn en onder hashtags. Je kunt jezelf voorstellen met het gebruik van de hashtag #introductions.'
- full_handle: Jouw volledige Mastodonadres
- full_handle_hint: Dit geef je aan jouw vrienden, zodat ze jou berichten kunnen sturen of (vanaf een andere Mastodonserver) kunnen volgen.
subject: Welkom op Mastodon
title: Welkom aan boord %{name}!
users:
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index ffa5198a3a..aecd148e28 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -31,7 +31,7 @@ nn:
created_msg: Moderatormerknad er laga!
destroyed_msg: Moderatormerknad er utsletta!
accounts:
- add_email_domain_block: Gøym e-postdomene
+ add_email_domain_block: Blokker e-postdomene
approve: Godtak
approved_msg: Godkjende %{username} sin registreringssøknad
are_you_sure: Er du sikker?
@@ -767,13 +767,15 @@ nn:
disabled: Til ingen
users: Til lokale brukarar som er logga inn
registrations:
+ moderation_recommandation: Pass på at du har mange og kjappe redaktørar og moderatorar på laget ditt før du opnar for allmenn registrering!
preamble: Kontroller kven som kan oppretta konto på tenaren din.
title: Registreringar
registrations_mode:
modes:
- approved: Godkjenning kreves for påmelding
+ approved: Godkjenning krevst for å registrera seg
none: Ingen kan melda seg inn
open: Kven som helst kan melda seg inn
+ warning_hint: Me rår til at du bruker "Godkjenning krevst for å registrera seg" viss du ikkje er sikker på at moderatorane kan handtera søppel og illmeinte registreringar kvikt.
security:
authorized_fetch: Krev autentisering frå fødererte tenarar
authorized_fetch_hint: Krav om autentisering frå fødererte tenarar gjer det mogleg med strengare handheving av blokkering, både på brukar- og tenar-nivå. Likevel, dette har ein kostnad når det gjeld yting, reduserer rekkevidda til svara dine og kan medføra kompabilitetsproblem med enkelte fødererte tenester. Dette vil heller ikkje hindra dei som verkeleg vil i å henta dei offentlege innlegga eller kontoane dine.
@@ -966,6 +968,9 @@ nn:
title: Webhooker
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: På grunn av mangel på nyleg moderatoraktivitet, er registreringar på %{instance} automatisk bytt til å krevje manuell gjennomgang, for å hindre at %{instance} vert brukt som ein plattform for potensielle dårlege aktørar. Du kan byte tilbake for å opne registreringar når som helst.
+ subject: Registreringar for %{instance} er automatisk bytt til å krevje godkjenning
new_appeal:
actions:
delete_statuses: å slette sine innlegg
@@ -1447,7 +1452,7 @@ nn:
moderation:
title: Moderasjon
move_handler:
- carry_blocks_over_text: Denne brukaren flytta frå %{acct}, som du gøymde.
+ carry_blocks_over_text: Denne brukaren flytta frå %{acct}, som du hadde blokkert.
carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet.
copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:'
navigation:
@@ -1534,7 +1539,7 @@ nn:
privacy:
hint_html: "Tilpass korleis du vil at andre skal finna profilen og innlegga dine. Mastodon har fleire funksjonar du kan ta i bruk for å få kontakt med eit større publikum. Sjå gjerne gjennom innstillingane slik at du er sikker på at dei passar til deg og din bruk."
privacy: Personvern
- privacy_hint_html: Ha kontroll over kor mykje du vil dela. Folk finn interessante profilar og fine appar ved å sjå gjennom kva andre fylgjer og kva appar dei legg ut innlegg med, men det kan henda du vil gøyma desse opplysingane.
+ privacy_hint_html: Kontroller kor mykje du vil dela. Folk finn interessante profilar og fine appar ved å sjå gjennom kva andre fylgjer og kva appar dei legg ut innlegg med, men det kan henda du vil gøyma desse opplysingane.
reach: Nå andre
reach_hint_html: Hald styring med om du vil at andre skal kunna oppdaga og fylgja deg. Vil du at innlegga dine skal stå på Utforsk-sida? Vil du at andre skal sjå deg i tilrådingane for kven dei skal fylgja? Vil du ta imot nye fylgjarar automatisk, eller vil du kontrollera kvar einskild fylgjar?
search: Søk
@@ -1547,8 +1552,8 @@ nn:
limit_reached: Grensen for forskjellige reaksjoner nådd
unrecognized_emoji: er ikke en gjenkjent emoji
redirects:
- prompt: Hvis du stoler på denne lenken, så trykk på den for å fortsette.
- title: Du forlater %{instance}.
+ prompt: Viss du stolar på denne lenka, klikkar du på ho for å halda fram.
+ title: No forlèt du %{instance}.
relationships:
activity: Kontoaktivitet
confirm_follow_selected_followers: Er du sikker på at du ynskjer å fylgja dei valde fylgjarane?
@@ -1778,7 +1783,7 @@ nn:
webauthn: Sikkerhetsnøkler
user_mailer:
appeal_approved:
- action: Kontoinnstillinger
+ action: Kontoinnstillingar
explanation: Apellen på prikken mot din kontor på %{strike_date} som du la inn på %{appeal_date} har blitt godkjend. Din konto er nok ein gong i god stand.
subject: Din klage fra %{date} er godkjent
subtitle: Kontoen din er tilbake i god stand.
@@ -1786,11 +1791,11 @@ nn:
appeal_rejected:
explanation: Klagen på advarselen mot din konto den %{strike_date} som du sendte inn den %{appeal_date} har blitt avvist.
subject: Din klage fra %{date} er avvist
- subtitle: Anken din har blitt avvist.
+ subtitle: Klaga di vart avvist.
title: Anke avvist
backup_ready:
- explanation: Du etterspurte en fullstendig sikkerhetskopi av din Mastodon-konto.
- extra: Den er nå klar for nedlasting!
+ explanation: Du ba om ein fullstendig tryggingskopi av Mastodon-kontoen din.
+ extra: No kan du lasta han ned!
subject: Arkivet ditt er klart til å lastes ned
title: Nedlasting av arkiv
failed_2fa:
@@ -1841,10 +1846,6 @@ nn:
edit_profile_action: Lag til profil
edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg.
explanation: Her er nokre tips for å koma i gang
- final_action: Kom i gang med å leggja ut
- final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.'
- full_handle: Det fulle brukarnamnet ditt
- full_handle_hint: Dette er det du fortel venene dine for at dei skal kunna senda deg meldingar eller fylgja deg frå ein annan tenar.
subject: Velkomen til Mastodon
title: Velkomen om bord, %{name}!
users:
diff --git a/config/locales/no.yml b/config/locales/no.yml
index d26b20379e..481e28e863 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -1841,10 +1841,6 @@
edit_profile_action: Sett opp profil
edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg.
explanation: Her er noen tips for å komme i gang
- final_action: Start postingen
- final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.'
- full_handle: Ditt fullstendige brukernavn
- full_handle_hint: Dette er hva du forteller venner slik at de kan sende melding eller følge deg fra en annen instanse.
subject: Velkommen til Mastodon
title: Velkommen ombord, %{name}!
users:
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 2887fc98b3..b8330992c9 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -968,9 +968,6 @@ oc:
welcome:
edit_profile_action: Configuracion del perfil
explanation: Vaquí qualques astúcias per vos preparar
- final_action: Començar de publicar
- full_handle: Vòstre escais-nom complèt
- full_handle_hint: Es aquò que vos cal donar a vòstres amics per que pòscan vos escriure o sègre a partir d’un autre servidor.
subject: Benvengut a Mastodon
title: Vos desirem la benvenguda a bòrd %{name} !
users:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 5bc78a6adf..f7c5d60f65 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -795,6 +795,7 @@ pl:
disabled: Nikomu
users: Zalogowanym lokalnym użytkownikom
registrations:
+ moderation_recommandation: Upewnij się, że masz adekwatny i szybko reagujący zespół moderacyjny przed otwarciem rejestracji!
preamble: Kontroluj, kto może utworzyć konto na Twoim serwerze.
title: Rejestracje
registrations_mode:
@@ -802,6 +803,7 @@ pl:
approved: Przyjęcie jest wymagane do rejestracji
none: Nikt nie może się zarejestrować
open: Każdy może się zarejestrować
+ warning_hint: Polecamy "Przyjęcie jest wymagane do rejestracji" chyba że masz pewność, że twój zespół moderacyjny może szybko obsłużyć spam i złośliwe rejestracje.
security:
authorized_fetch: Wymagaj uwierzytelnienia od sfederowanych serwerów
authorized_fetch_hint: Wymaganie uwierzytelnienia ze sfederowanych serwerów pozwala na ściślejsze wymuszanie bloków z poziomu użytkowników i serwera, ale jest wolniejsze, redukuje zasięg odpowiedzi, i może być niekompatybilne z niektórymi sfederowanymi usługami. Nie chroni również publicznych kont i wpisów przed oddanymi użytkownikami.
@@ -1002,6 +1004,9 @@ pl:
title: Webhooki
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Z powodu braku niedawnych działań moderacyjnych, rejestracje na %{instance} wymagają ręcznej weryfikacji (by uniknąć dystrybucji spamu itp.). W dowolnym momencie możesz przywrócić politykę otwartej rejestracji.
+ subject: "%{instance} zostało automatycznie przełączone na zatwierdzanie rejestracji"
new_appeal:
actions:
delete_statuses: aby usunąć ich wpisy
@@ -1905,10 +1910,6 @@ pl:
edit_profile_action: Skonfiguruj profil
edit_profile_step: Możesz dostosować profil wysyłając awatar, zmieniając wyświetlaną nazwę i o wiele więcej. Jeżeli chcesz, możesz również włączyć przeglądanie i ręczne akceptowanie nowych próśb o możliwość obserwacji Twojego profilu.
explanation: Kilka wskazówek, które pomogą Ci rozpocząć
- final_action: Zacznij pisać
- final_step: 'Zacznij tworzyć! Nawet jeżeli nikt Cię nie obserwuje, Twoje publiczne wiadomości będą widziane przez innych, na przykład na lokalnej osi czasu i w hashtagach. Możesz też utworzyć wpis wprowadzający używając hashtagu #introductions.'
- full_handle: Twój pełny adres
- full_handle_hint: Ten adres możesz podać znajomym, aby mogli skontaktować się z Tobą lub zacząć obserwować z innego serwera.
subject: Witaj w Mastodonie
title: Witaj na pokładzie, %{name}!
users:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 79396d627f..86972f9ef1 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -767,6 +767,7 @@ pt-BR:
disabled: Para ninguém
users: Para usuários locais logados
registrations:
+ moderation_recommandation: Por favor, certifique-se de ter uma equipe de moderação adequada e reativa antes de abrir as inscrições para todos!
preamble: Controle quem pode criar uma conta no seu servidor.
title: Inscrições
registrations_mode:
@@ -1840,10 +1841,6 @@ pt-BR:
edit_profile_action: Configurar perfil
edit_profile_step: Você pode personalizar seu perfil enviando uma foto de perfil, mudando seu nome de exibição e mais. Você pode optar por revisar novos seguidores antes que eles possam te seguir.
explanation: Aqui estão algumas dicas para você começar
- final_action: Comece a publicar
- final_step: 'Comece a postar! Mesmo sem seguidores, suas postagens públicas podem ser vistas pelos outros, por exemplo, na linha do tempo local ou nas hashtags. Você pode querer fazer uma introdução usando a hashtag #introduções.'
- full_handle: Seu nome de usuário completo
- full_handle_hint: Isso é o que você compartilha com seus amigos para que eles possam te mandar mensagens ou te seguir a partir de outro servidor.
subject: Boas-vindas ao Mastodon
title: Boas vindas, %{name}!
users:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 8a20bc68a1..0786ba2ed4 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -767,6 +767,7 @@ pt-PT:
disabled: Para ninguém
users: Para utilizadores locais que se encontrem autenticados
registrations:
+ moderation_recommandation: Por favor, certifique-se de que você tem uma equipe de moderação adequada e reativa antes de abrir os registros para todos!
preamble: Controle quem pode criar uma conta no seu servidor.
title: Inscrições
registrations_mode:
@@ -774,6 +775,7 @@ pt-PT:
approved: Registo sujeito a aprovação
none: Ninguém se pode registar
open: Qualquer pessoa se pode registar
+ warning_hint: Recomendamos o uso de "Aprovação necessária para se cadastrar", a menos que você esteja confiante de que sua equipe de moderação pode lidar com spam e registros maliciosos em tempo hábil.
security:
authorized_fetch: Exigir autenticação de servidores federados
authorized_fetch_hint: Exigir autenticação de servidores federados permite uma aplicação mais rigorosa de bloqueios tanto ao nível do utilizador como do servidor. No entanto, isso é feito à custa de uma diminuição de desempenho, reduz o alcance das suas respostas e pode introduzir problemas de compatibilidade com alguns serviços federados. Além disso, isso não impede os atores mais empenhados de aceder às suas publicações e contas públicas.
@@ -966,6 +968,9 @@ pt-PT:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Devido à falta de atividade recente dos moderadores, as inscrições em %{instance} foram automaticamente alteradas para requererem revisão manual, para evitar que %{instance} seja utilizada como plataforma para potenciais maus atores. Pode voltar a alterar para inscrições abertas em qualquer altura.
+ subject: As incrições em %{instance} foram automaticamente alteradas para requererem aprovação
new_appeal:
actions:
delete_statuses: para eliminar as suas publicações
@@ -1841,10 +1846,6 @@ pt-PT:
edit_profile_action: Configurar o perfil
edit_profile_step: Pode personalizar o seu perfil carregando uma imagem de perfil, alterando o nome a exibir, entre outras opções. Pode optar por rever os novos seguidores antes de estes o poderem seguir.
explanation: Aqui estão algumas dicas para começar
- final_action: Começar a publicar
- final_step: 'Comece a publicar! Mesmo sem seguidores, as suas mensagens públicas podem ser vistas por outros, como por exemplo na cronologia local e em etiquetas. Pense em apresentar-se usando a etiqueta #apresentações.'
- full_handle: O seu nome completo
- full_handle_hint: Isto é o que tem de facultar aos seus amigos para que eles lhe possam enviar mensagens ou segui-lo a partir de outra instância.
subject: Bem-vindo ao Mastodon
title: Bem-vindo a bordo, %{name}!
users:
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 1bdc4e8ca5..8e4f9e7913 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -709,9 +709,6 @@ ro:
welcome:
edit_profile_action: Configurare profil
explanation: Iată câteva sfaturi pentru a începe
- final_action: Începe să postezi
- full_handle: Numele tău complet
- full_handle_hint: Asta este ceea ce vei putea spune prietenilor pentru a te putea contacta sau pentru a te urmării de pe un alt server.
subject: Bine ai venit
title: Bine ai venit la bord, %{name}!
users:
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 04e49e0427..3f15b064f0 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -1905,10 +1905,6 @@ ru:
edit_profile_action: Настроить профиль
edit_profile_step: Вы можете настроить свой профиль добавляя аватарку, изменяя отображаемое имя и так далее. Вы можете вручную подтверждать подписчиков, перед тем как им будет разрешено подписаться на вас.
explanation: Вот несколько советов для новичков
- final_action: Начать постить
- final_step: 'Начинайте постить! Даже без подписчиков, ваши публичные посты могут быть увиденными другими, например в локальной ленте или в хештегах. Вы можете представиться с хэштегом #introductions.'
- full_handle: Ваше обращение
- full_handle_hint: То, что Вы хотите сообщить своим друзьям, чтобы они могли написать Вам или подписаться с другого узла.
subject: Добро пожаловать в Mastodon
title: Добро пожаловать на борт, %{name}!
users:
diff --git a/config/locales/sc.yml b/config/locales/sc.yml
index 273ef9d2d9..533764606b 100644
--- a/config/locales/sc.yml
+++ b/config/locales/sc.yml
@@ -1094,9 +1094,6 @@ sc:
welcome:
edit_profile_action: Cunfigura su profilu
explanation: Inoghe ddoe at una paja de impòsitos pro cumintzare
- final_action: Cumintza a publicare
- full_handle: Su nòmine utente intreu tuo
- full_handle_hint: Custu est su chi dias nàrrere a is amistades tuas pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore.
subject: Ti donamus su benebènnidu a Mastodon
title: Ti donamus su benebènnidu, %{name}!
users:
diff --git a/config/locales/sco.yml b/config/locales/sco.yml
index a1071197f1..dc273d2d83 100644
--- a/config/locales/sco.yml
+++ b/config/locales/sco.yml
@@ -1584,10 +1584,6 @@ sco:
edit_profile_action: Setup profile
edit_profile_step: Ye kin customize yer profile bi uploadin a profile picture, chyngin yer display nemm an mair. Ye kin opt-in fir tae luik ower new follaers afore they’re allooed tae follae ye.
explanation: Here some tips fir tae get ye stertit
- final_action: Stert postin
- final_step: 'Stert postin! Even athout follaers, yer public posts kin stull be seen bi ithers, fir example on the local timeline or in hashtags. Ye mibbie want tae introduce yersel on the #introductions hashtag.'
- full_handle: Yer ful haunnle
- full_handle_hint: This is whit ye wad tell yer pals sae thit they kin message or follae ye fae anither server.
subject: Welcome tae Mastodon, 'mon in
title: Welcome aboord, %{name}!
users:
diff --git a/config/locales/si.yml b/config/locales/si.yml
index 660fd3ba31..ac292d6cf8 100644
--- a/config/locales/si.yml
+++ b/config/locales/si.yml
@@ -1436,9 +1436,6 @@ si:
welcome:
edit_profile_action: පැතිකඩ පිහිටුවන්න
explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න
- final_action: ලිපි පළ කරන්න
- full_handle: ඔබේ සම්පූර්ණ හසුරුව
- full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය.
subject: මාස්ටඩන් වෙත පිළිගනිමු
title: නැවට සාදරයෙන් පිළිගනිමු, %{name}!
users:
diff --git a/config/locales/simple_form.af.yml b/config/locales/simple_form.af.yml
index 6c87a7a636..a7c449f86d 100644
--- a/config/locales/simple_form.af.yml
+++ b/config/locales/simple_form.af.yml
@@ -14,6 +14,8 @@ af:
labels:
defaults:
locale: Koppelvlaktaal
+ new_password: Newe wagwoord
+ password: Wagwoord
featured_tag:
name: Hutsetiket
form_admin_settings:
diff --git a/config/locales/simple_form.an.yml b/config/locales/simple_form.an.yml
index f354e5ba82..6ec8380f2a 100644
--- a/config/locales/simple_form.an.yml
+++ b/config/locales/simple_form.an.yml
@@ -31,14 +31,12 @@ an:
text: Nomás puetz apelar una amonestación una vegada
defaults:
autofollow: Los usuarios que se rechistren per medio d'a invitación te seguirán automaticament
- avatar: PNG, GIF u JPG. Maximo %{size}. Será escalau a %{dimensions}px
bot: Esta cuenta executa prencipalment accions automatizadas y podría no estar monitorizada
context: Un u multiples contextos en os quals ha d'aplicar-se lo filtro
current_password: Per razons de seguranza per favor ingrese la clau d'a cuenta actual
current_username: Pa confirmar, per favor ingrese lo nombre d'usuario d'a cuenta actual
digest: Solo ninviau dimpués d'un largo periodo d'inactividat y nomás si has recibiu mensaches personals entre la tuya ausencia
email: Se le ninviará un correu de confirmación
- header: PNG, GIF u JPG. Maximo %{size}. Será escalau a %{dimensions}px
inbox_url: Copia la URL d'a pachina prencipal d'o relés que quiers utilizar
irreversible: Las publicacions filtradas desapareixerán irreversiblement, mesmo si este filtro ye eliminau mas abance
locale: L'idioma d'a interficie d'usuario, correus y notificacions push
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 92e181a8ed..896fcbf3fa 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -39,14 +39,12 @@ ar:
text: يمكنك الطعن في عقوبة مرة واحدة فقط
defaults:
autofollow: سوف يتابعك تلقائيًا الأشخاص الذين يقومون بالتسجيل من خلال الدعوة
- avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
bot: يقوم هذا الحساب أساسا بإجراءات آلية وقد لا يتم مراقبته
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
current_password: لأسباب أمنية ، يرجى إدخال الكلمة السرية الخاصة بالحساب الحالي
current_username: يرجى إدخال اسم المستخدم الخاص بالحساب الحالي قصد التأكيد
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
email: سوف تتلقى رسالة إلكترونية للتأكيد
- header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الاستقبال للمُرحَّل
irreversible: المنشورات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 9b560b67eb..e396962567 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -18,10 +18,8 @@ ast:
text: Pues usar la sintaxis de los artículos. Ten en cuenta l'espaciu que l'anunciu va ocupar na pantalla del usuariu/a
defaults:
autofollow: Les persones que se rexistren pente la invitación van siguite automáticamente
- avatar: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px
bot: Avisa a otres persones de qu'esta cuenta fai principalmente aiciones automatizaes ya de que ye posible que nun tean supervisaes
digest: Namás s'unvia dempués d'un periodu llongu d'inactividá ya namás si recibiesti dalgún mensaxe personal demientres la to ausencia
- header: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px
irreversible: Los artículos peñeraos desapaecen de forma irreversible, magar que la peñera se quite dempués
locale: La llingua de la interfaz, los mensaxes per corréu electrónicu ya los avisos push
password: Usa polo menos 8 caráuteres
diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml
index 7ad87cdd9f..e72d16a187 100644
--- a/config/locales/simple_form.be.yml
+++ b/config/locales/simple_form.be.yml
@@ -39,14 +39,14 @@ be:
text: Вы можаце абскардзіць рашэнне толькі адзін раз
defaults:
autofollow: Людзі, якія зарэгістраваліся праз запрашэнне, аўтаматычна падпішуцца на вас
- avatar: PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў
+ avatar: WEBP, PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў
bot: Паведаміць іншым, што гэты ўліковы запіс у асноўным выконвае аўтаматычныя дзеянні і можа не кантралявацца
context: Адзін ці некалькі кантэкстаў, да якіх трэба прымяніць фільтр
current_password: У мэтах бяспекі, калі ласка, увядзіце пароль бягучага ўліковага запісу
current_username: Каб пацвердзіць, увядзіце, калі ласка імя карыстальніка бягучага ўліковага запісу
digest: Будзе даслана толькі пасля доўгага перыяду неактыўнасці і толькі калі вы атрымалі асабістыя паведамленні падчас вашай адсутнасці
email: Пацвярджэнне будзе выслана па электроннай пошце
- header: PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў
+ header: WEBP, PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў
inbox_url: Капіраваць URL са старонкі рэтранслятара, якім вы хочаце карыстацца
irreversible: Адфільтраваныя пасты прападуць незваротна, нават калі фільтр потым будзе выдалены
locale: Мова карыстальніцкага інтэрфейсу, электронных паведамленняў і апавяшчэнняў
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 68e45ef47b..831e1a2f8c 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -9,7 +9,7 @@ bg:
indexable: Вашите обществени публикации може да се появят в резултатите от търсене в Mastodon. Взаимодействалите с публикациите ви може да ги търсят независимо.
note: 'Може да @споменавате други хора или #хаштагове.'
show_collections: Хората ще може да разглеждат през вашите последвания и последователи. Хората, които сте следвали, ще видят, че ги следвате независимо от това.
- unlocked: Хората ще може да ви следват без да се изисква одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи.
+ unlocked: Хората ще могат да ви последват без изискване на одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи.
account_alias:
acct: Посочете потребителско_име@домейн на акаунта си, от който искате да се преместите
account_migration:
@@ -39,14 +39,14 @@ bg:
text: Може да възразите срещу провинение само веднъж
defaults:
autofollow: Хората, които се регистрират чрез поканата, автоматично ще ви последват
- avatar: PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела
+ avatar: WEBP, PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела
bot: Сигнализиране до другите, че акаунтът изпълнява предимно автоматизирани деяния и може да не се наблюдава
context: Един или повече контексти, към които да се приложи филтърът
current_password: От съображения за сигурност, въведете паролата на текущия акаунт
current_username: Въведете потребителското име на текущия профил, за да потвърдите
digest: Изпраща се само след дълъг период на бездействие и само ако сте получили лични съобщения във ваше отсъствие
email: Ще ви се изпрати имейл за потвърждение
- header: PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела
+ header: WEBP, PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела
inbox_url: Копирайте URL адреса от заглавната страница на предаващия сървър, който искате да използвате
irreversible: Филтрираните публикации ще изчезнат безвъзвратно, дори филтърът да бъде премахнат по-късно
locale: Езикът на потребителския интерфейс, известиятата по имейл и насочените известия
@@ -261,7 +261,7 @@ bg:
status_page_url: URL адрес на страница със състоянието
theme: Стандартна тема
thumbnail: Образче на сървъра
- timeline_preview: Позволяване на неупълномощен достъп до публични часови оси
+ timeline_preview: Позволяване на неудостоверен достъп до публични инфопотоци
trendable_by_default: Без преглед на налагащото се
trends: Включване на налагащи се
trends_as_landing_page: Употреба на налагащото се като целева страница
diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml
index 9e8aefad49..529e3224e6 100644
--- a/config/locales/simple_form.br.yml
+++ b/config/locales/simple_form.br.yml
@@ -3,8 +3,8 @@ br:
simple_form:
hints:
defaults:
- avatar: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px
- header: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px
+ avatar: WEBP, PNG, GIF pe JPG. Bihanoc'h eget %{size}. A vo izelaet betek %{dimensions}px
+ header: WEBP, PNG, GIF pe JPG. Bihanoc'h eget %{size}. A vo izelaet betek %{dimensions}px
password: Implijit 8 lizherennoù d'an neubeutañ
setting_default_sensitive: Ar mediaoù kizidik a zo kuzhet dre ziouer ha gallout a reont bezañ diguzhet dre ur c'hlik
setting_display_media_default: Kuzhat mediaoù aroueziet evel kizidik
@@ -41,7 +41,7 @@ br:
email: Chomlec'h postel
expires_in: Mont war e dermen goude
header: Talbenn
- locale: Yezh ar c'hetal
+ locale: Yezh an etrefas
new_password: Ger-tremen nevez
note: Kinnig
password: Ger-tremen
@@ -49,6 +49,7 @@ br:
setting_display_media_default: Dre ziouer
setting_display_media_hide_all: Kuzhat pep tra
setting_display_media_show_all: Diskouez pep tra
+ setting_theme: Neuz al lec'hienn
setting_use_pending_items: Mod gorrek
title: Titl
username: Anv
@@ -73,6 +74,7 @@ br:
usable: Aotren an embannadurioù da implijout an hashtag-mañ
user:
role: Roll
+ time_zone: Gwerzhid eur
user_role:
name: Anv
'no': Ket
diff --git a/config/locales/simple_form.ckb.yml b/config/locales/simple_form.ckb.yml
index a6110e2034..3c1d8315e3 100644
--- a/config/locales/simple_form.ckb.yml
+++ b/config/locales/simple_form.ckb.yml
@@ -25,14 +25,12 @@ ckb:
text: دەتوانیت ڕستەسازی توت بەکار بێنیت. تکایە بیر لەو بۆشاییە بکەوە کە بانگەوازەکە لەسەر شاشەی بەکارهێنەرەکە دەست نیشان دەکات
defaults:
autofollow: ئەو کەسانەی کە لە ڕێگەی بانگهێشتکردنەوە تۆمار دەکرێن بە خۆکارانە شوێنت دەکەون
- avatar: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}px
bot: ئەم هەژمارە بەشێوەیەکی سەرەکی کردارە خۆکارانە ئەنجام دەدات و لەوانەیە چاودێری نەکرێت
context: یەک یان چەند دەقێک کە پالافتنەکە جێبەجێ بکات
current_password: بۆ مەبەستی پاراستن تکایە تێپەروشەی هەژمارەی ئێستاکەت بنووسە
current_username: بۆ دڵنیابوون، تکایە ناوی بەکارهێنەری ئەم هەژمارەیە بنووسە
digest: تەنیا دوای ماوەیەکی زۆر لە بێ چالاکیدەنێردرێت و تەنیا ئەگەر نامەیەکی کەسیت بۆ نووسرابێت
email: ئیمەیڵێکی پشتڕاستکردنەوەت بۆ دەنێردرێت
- header: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}پیکسێڵ
inbox_url: نیشانەی پەڕەی سەرەکی ئەو رێڵە کە هەرەکتە بەکاریببەیت ڕوونووس دەکات
irreversible: توتە فلتەرکراوەکە بە شێوەیەکی نەگەڕاو فرەدەدرێن، تەنانەت ئەگەر فلتەردواتر لاببرێت
locale: زمانی ڕووکاری بەکارهێنەر، ئیمەیلەکان و ئاگانامەکان
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index fd6f595e91..dfec033469 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -23,14 +23,12 @@ co:
text: Pudete utilizà a sintassa di i statuti. Pensate à a piazza chì l'annunziu hà da piglià nant'à u screnu di l'utilizatore
defaults:
autofollow: Quelli·e chì s'arregistranu cù l'invitazione saranu autumaticamente abbunati·e à voi
- avatar: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px
bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu
context: Cuntestu·i induve u filtru deve esse applicatu
current_password: Per ragione di sicurità, entrate a chjave d'accessu di stu contu
current_username: Per cunfirmà, entrate u cugnome di questu contu
digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti
email: Avete da riceve un'e-mail di cunfirmazione
- header: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px
inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà
irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru
locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index dff9378098..ca8cc49a98 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -3,9 +3,13 @@ cs:
simple_form:
hints:
account:
+ discoverable: Vaše veřejné příspěvky a profil mohou být zobrazeny nebo doporučeny v různých oblastech Mastodonu a váš profil může být navrhován ostatním uživatelům.
display_name: Vaše celé jméno nebo přezdívka.
fields: Vaše domovská stránka, zájmena, věk, cokoliv chcete.
+ indexable: Vaše veřejné příspěvky se mohou objevit ve výsledcích vyhledávání na Mastodonu. Lidé, kteří s vašimi příspěvky interagovaly, je mohou stále vyhledávat.
note: 'Můžete @zmínit jiné osoby nebo #hashtagy.'
+ show_collections: Lidé budou moci procházet skrz sledující. Lidé, které sledujete, uvidí, že je sledujete bezohledně.
+ unlocked: Lidé vás budou moci sledovat, aniž by vás žádali o schválení. Zrušte zaškrtnutí, pokud chcete zkontrolovat požadavky a zvolte, zda přijmete nebo odmítněte nové následovníky.
account_alias:
acct: Zadejte svůj účet, ze kterého se chcete přesunout jinam, ve formátu přezdívka@doména
account_migration:
@@ -34,15 +38,15 @@ cs:
appeal:
text: Proti prohřešku se můžete odvolat jen jednou
defaults:
- autofollow: Lidé, kteří se zaregistrují na základě pozvánky, vás budou automaticky sledovat
- avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px
+ autofollow: Lidé, kteří se zaregistrují skrz pozvánky, vás budou automaticky sledovat
+ avatar: WEBP, PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px
bot: Signalizovat ostatním, že účet převážně vykonává automatizované akce a nemusí být monitorován
context: Jeden či více kontextů, ve kterých má být filtr uplatněn
current_password: Z bezpečnostních důvodů prosím zadejte heslo současného účtu
current_username: Potvrďte prosím tuto akci zadáním uživatelského jména aktuálního účtu
digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste během své nepřítomnosti obdrželi osobní zprávy
email: Bude vám poslán potvrzovací e-mail
- header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px
+ header: WEBP, PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px
inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít
irreversible: Filtrované příspěvky nenávratně zmizí, i pokud bude filtr později odstraněn
locale: Jazyk uživatelského rozhraní, e-mailů a push notifikací
@@ -72,7 +76,7 @@ cs:
hide: Úplně schovat filtrovaný obsah tak, jako by neexistoval
warn: Schovat filtrovaný obsah za varováním zmiňujicím název filtru
form_admin_settings:
- activity_api_enabled: Počty lokálně publikovaných příspěvků, aktivních uživatelů a nových registrací v týdenních intervalech
+ activity_api_enabled: Počty lokálně zveřejnělých příspěvků, aktivních uživatelů a nových registrací v týdenních intervalech
backups_retention_period: Zachovat generované uživatelské archivy pro zadaný počet dní.
bootstrap_timeline_accounts: Tyto účty budou připnuty na vrchol nových uživatelů podle doporučení.
closed_registrations_message: Zobrazeno při zavření registrace
@@ -116,6 +120,9 @@ cs:
sessions:
otp: 'Zadejte kód pro dvoufázové ověření vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
webauthn: Pokud jde o USB klíč, vložte jej a případně se dotkněte jeho tlačítka.
+ settings:
+ indexable: Vaše profilová stránka se může objevit ve výsledcích vyhledávání na Google, Bingu a ostatních vyhledávačích.
+ show_application: I tak budete vždy moci vidět, která aplikace zveřejnila váš příspěvek.
tag:
name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti
user:
@@ -133,9 +140,13 @@ cs:
url: Kam budou události odesílány
labels:
account:
+ discoverable: Zobrazovat profil a příspěvky ve vyhledávacích algoritmech
fields:
name: Označení
value: Obsah
+ indexable: Zahrnout veřejné příspěvky do výsledků hledání
+ show_collections: Zobrazit koho sledujete a kdo vás sleduje v profilu
+ unlocked: Automaticky přijímat nové sledující
account_alias:
acct: Adresa starého účtu
account_migration:
@@ -280,9 +291,18 @@ cs:
pending_account: Je třeba posoudit nový účet
reblog: Někdo boostnul váš příspěvek
report: Je odesláno nové hlášení
+ software_updates:
+ all: Upozornit na všechny aktualizace
+ critical: Upozornit pouze na kritické aktualizace
+ label: Nová verze Mastodonu k dispozici
+ none: Nikdy neoznamovat aktualizace (nedoporučeno)
+ patch: Upozornit na aktualizace chyb
trending_tag: Nový trend vyžaduje posouzení
rule:
text: Pravidlo
+ settings:
+ indexable: Zahrnout stránku profilu do vyhledávačů
+ show_application: Zobrazit aplikaci, ze které jste odeslali příspěvek
tag:
listable: Povolit zobrazení tohoto hashtagu ve vyhledávání a návrzích
name: Hashtag
@@ -303,6 +323,7 @@ cs:
url: URL koncového bodu
'no': Ne
not_recommended: Nedoporučuje se
+ overridden: Přepsáno
recommended: Doporučeno
required:
mark: "*"
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index ddc1b1b935..3daedfc860 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -39,14 +39,14 @@ cy:
text: Dim ond unwaith y gallwch apelio yn erbyn rhybudd
defaults:
autofollow: Bydd pobl sy'n cofrestru drwy'r gwahoddiad yn eich dilyn yn awtomatig
- avatar: PNG, GIF neu JPG. %{size} yn uchafswm. Bydd yn cael ei israddio i %{dimensions}px
+ avatar: WEBP, PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei leihau i %{dimensions}px
bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomatig yn bennaf ac mae'n bosib nad yw'n cael ei fonitro
context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio
current_password: At ddibenion diogelwch, nodwch gyfrinair y cyfrif cyfredol
current_username: I gadarnhau, nodwch enw defnyddiwr y cyfrif cyfredol
digest: Ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb
email: Byddwch yn derbyn e-bost cadarnhau
- header: PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei israddio i %{dimensions}px
+ header: WEBP, PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei leihau i %{dimensions}px
inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio
irreversible: Bydd postiadau wedi'u hidlo'n diflannu'n ddiwrthdro, hyd yn oed os caiff yr hidlydd ei dynnu'n ddiweddarach
locale: Iaith y rhyngwyneb, e-byst a hysbysiadau gwthiadwy
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 0d86b2bc8d..fde0bcc248 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -39,14 +39,14 @@ da:
text: En advarsel kan kun appelleres én gang
defaults:
autofollow: Personer tilmeldt via invitationen vil automatisk blive følgere
- avatar: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px
+ avatar: WEBP, PNG, GIF eller JPG. Maks. %{size}. Nedskaleres til %{dimensions}px
bot: Signalér til andre, at denne konto primært udfører automatiserede handlinger og muligvis ikke monitoreres
context: En eller flere kontekster, hvor filteret skal anvendes
current_password: Angiv af sikkerhedsårsager adgangskoden til den aktuelle konto
current_username: For at bekræfte, angiv brugernavnet for den aktuelle konto
digest: Sendes kun efter en lang inaktivitetsperiode, og kun hvis du har modtaget personlige beskeder under fraværet
email: En bekræftelses-e-mail fremsendes
- header: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px
+ header: WEBP, PNG, GIF eller JPG. Maks. %{size}. Nedskaleres til %{dimensions}px
inbox_url: Kopiér URL'en fra forsiden af den videreformidler, der skal anvendes
irreversible: Filtrerede indlæg forsvinder permanent, selv hvis filteret senere fjernes
locale: Sprog til brug for brugerflade, e-mails og push-notifikationer
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index fcf92e29f4..b8fec42d66 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -39,14 +39,14 @@ de:
text: Du kannst nur einmal Einspruch gegen eine Maßnahme einlegen
defaults:
autofollow: Personen, die sich über deine Einladung registrieren, folgen automatisch deinem Profil
- avatar: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert
+ avatar: WEBP, PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert
bot: Signalisiert, dass dieses Konto hauptsächlich automatisierte Aktionen durchführt und möglicherweise nicht persönlich betreut wird
context: Orte, an denen der Filter aktiv sein soll
current_password: Gib aus Sicherheitsgründen bitte das Passwort des aktuellen Kontos ein
current_username: Um das zu bestätigen, gib den Profilnamen des aktuellen Kontos ein
digest: Wenn du eine längere Zeit inaktiv bist oder du während deiner Abwesenheit in einer privaten Nachricht erwähnt worden bist
email: Du wirst eine E-Mail zur Verifizierung dieser E-Mail-Adresse erhalten
- header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert
+ header: WEBP, PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert
inbox_url: Kopiere die URL von der Startseite des gewünschten Relays
irreversible: Bereinigte Beiträge verschwinden unwiderruflich für dich, auch dann, wenn dieser Filter zu einem späteren wieder entfernt wird
locale: Die Sprache der Bedienoberfläche, E-Mails und Push-Benachrichtigungen
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index dc140a199f..4ffc496d02 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -31,14 +31,12 @@ el:
text: Μπορείς να κάνετε έφεση σε ένα παράπτωμα μόνο μία φορά
defaults:
autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα
- avatar: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται
context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο
current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού
current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού
digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου
email: Θα σου σταλεί email επιβεβαίωσης
- header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις
irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί
locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index f0c18d1128..2ac4508b05 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -39,14 +39,12 @@ en-GB:
text: You can only appeal a strike once
defaults:
autofollow: People who sign up through the invite will automatically follow you
- avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
bot: Signal to others that the account mainly performs automated actions and might not be monitored
context: One or multiple contexts where the filter should apply
current_password: For security purposes please enter the password of the current account
current_username: To confirm, please enter the username of the current account
digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
email: You will be sent a confirmation e-mail
- header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
inbox_url: Copy the URL from the frontpage of the relay you want to use
irreversible: Filtered posts will disappear irreversibly, even if filter is later removed
locale: The language of the user interface, e-mails and push notifications
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 0b718c5b65..7ece81290f 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -39,14 +39,14 @@ en:
text: You can only appeal a strike once
defaults:
autofollow: People who sign up through the invite will automatically follow you
- avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
+ avatar: WEBP, PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
bot: Signal to others that the account mainly performs automated actions and might not be monitored
context: One or multiple contexts where the filter should apply
current_password: For security purposes please enter the password of the current account
current_username: To confirm, please enter the username of the current account
digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
email: You will be sent a confirmation e-mail
- header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
+ header: WEBP, PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
inbox_url: Copy the URL from the frontpage of the relay you want to use
irreversible: Filtered posts will disappear irreversibly, even if filter is later removed
locale: The language of the user interface, e-mails and push notifications
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index d25412561b..ef4641d3e7 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -39,14 +39,12 @@ eo:
text: Oni povas apelaci strikin nur unufoje
defaults:
autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin
- avatar: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px
bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata
context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi
current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto
current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto
digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto
email: Vi ricevos konfirman retpoŝton
- header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px
inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi
irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita
locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index 9b52ece34e..a074091313 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -39,14 +39,14 @@ es-AR:
text: Sólo podés apelar un incumplimiento una vez
defaults:
autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
- avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.'
+ avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada
context: Uno o múltiples contextos en los que debe aplicarse el filtro
current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual
current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual
digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia
email: Se te enviará un correo electrónico de confirmación
- header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.'
+ header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
inbox_url: Copiá la dirección web desde la página principal del relé que querés usar
irreversible: Los mensajes filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después
locale: El idioma de la interface de usuario, correos electrónicos y notificaciones push
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 932ed6c59a..d8f1cf95a0 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -39,14 +39,14 @@ es-MX:
text: Sólo puede apelar una amonestación a la vez
defaults:
autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
- avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada
context: Uno o múltiples contextos en los que debe aplicarse el filtro
current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual
current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual
digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
email: Se le enviará un correo de confirmación
- header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
inbox_url: Copia la URL de la página principal del relés que quieres utilizar
irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
locale: El idioma de la interfaz de usuario, correos y notificaciones push
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 997f09bf08..fee260aa89 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -11,9 +11,9 @@ es:
show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo.
unlocked: Las personas podrán seguirte sin pedir aprobación. Desmarca si deseas revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores.
account_alias:
- acct: Especifique su nombre de usuario@dominio de la cuenta de donde se desea migrar
+ acct: Especifica el nombre_de_usuario@dominio de la cuenta desde donde deseas migrar
account_migration:
- acct: Especifique el nombre de usuario@dominio de la cuenta de la cual se desea migrar
+ acct: Especifica el nombre_de_usuario@dominio de la cuenta hacia la que quieres migrar
account_warning_preset:
text: Puede usar sintaxis de publicaciones, como URLs, hashtags y menciones
title: Opcional. No es visible para el destinatario
@@ -21,14 +21,14 @@ es:
include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia
send_email_notification: El usuario recibirá una explicación de lo que ha sucedido con su cuenta
text_html: Opcional. Puede usar sintaxis de publicaciones. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo
- type_html: Elige lo qué vas a hacer con %{acct}
+ type_html: Elige lo que vas a hacer con %{acct}
types:
disable: Evita que el usuario utilice su cuenta, pero no elimina ni oculta sus contenidos.
- none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción.
+ none: Utiliza esto para enviar una advertencia al usuario, sin ejecutar ninguna otra acción.
sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles.
silence: Evita que el usuario pueda publicar con visibilidad pública, y oculta sus mensajes y notificaciones a personas que no lo siguen. Cierra todos los informes contra esta cuenta.
suspend: Evita cualquier interacción desde o hacia esta cuenta y elimina su contenido. Reversible en 30 días. Cierra todos los informes contra esta cuenta.
- warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida
+ warning_preset_id: Opcional. Aún puedes añadir texto personalizado al final de la configuración predefinida
announcement:
all_day: Cuando está seleccionado solo se mostrarán las fechas del rango de tiempo
ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
@@ -36,17 +36,17 @@ es:
starts_at: Opcional. En caso de que su anuncio esté vinculado a un intervalo de tiempo específico
text: Puedes usar la sintaxis de publicaciones. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
appeal:
- text: Sólo puedes apelar una amonestación una vez
+ text: Solo puedes apelar la amonestación una vez
defaults:
autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
- avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada
context: Uno o múltiples contextos en los que debe aplicarse el filtro
current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual
current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual
digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
email: Se le enviará un correo de confirmación
- header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
inbox_url: Copia la URL de la página principal del relés que quieres utilizar
irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
locale: El idioma de la interfaz de usuario, correos y notificaciones push
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
index 501e1f333e..15cf403cf2 100644
--- a/config/locales/simple_form.et.yml
+++ b/config/locales/simple_form.et.yml
@@ -39,14 +39,12 @@ et:
text: Otsust on võimalik vaidlustada vaid 1 kord
defaults:
autofollow: Inimesed, kes loovad konto selle kutse läbi, automaatselt jälgivad sind
- avatar: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini
bot: Teavita teisi, et see konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all
context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma
current_password: Sisesta turvalisuse huvides oma siinse konto salasõna
current_username: Kinnitamiseks palun sisesta oma konto kasutajanimi
digest: Saadetakse ainult pärast pikka tegevusetuse perioodi ja ainult siis, kui on saadetud otsesõnumeid
email: Sulle saadetakse e-posti teel kinnituskiri
- header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini
inbox_url: Kopeeri soovitud vahendaja avalehe URL
irreversible: Filtreeritud postitused kaovad taastamatult, isegi kui filter on hiljem eemaldatud
locale: Kasutajaliidese, e-kirjade ja tõuketeadete keel
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 6f2bbfd969..b417b45fa9 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -39,14 +39,14 @@ eu:
text: Neurri bati apelazioa behin bakarrik jarri diezaiokezu
defaults:
autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko dizute
- avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
+ avatar: WEBP, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen
context: Iragazkia aplikatzeko testuinguru bat edo batzuk
current_password: Segurtasunagatik sartu uneko kontuaren pasahitza
current_username: Berresteko sartu uneko kontuaren erabiltzaile-izena
- digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu, besterik ez
+ digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu soilik
email: Baieztapen e-mail bat bidaliko zaizu
- header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da
+ header: WEBP, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa
irreversible: Iragazitako tootak betirako galduko dira, geroago iragazkia kentzen baduzu ere
locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza
@@ -126,7 +126,7 @@ eu:
tag:
name: Letrak maiuskula/minuskulara aldatu ditzakezu besterik ez, adibidez irakurterrazago egiteko
user:
- chosen_languages: Ezer markatzekotan, hautatutako hizkuntzetan dauden tootak besterik ez dira erakutsiko
+ chosen_languages: Markatzean, hautatutako hizkuntzetan dauden tutak besterik ez dira erakutsiko.
role: Rolak erabiltzaileak dituen baimenak kontrolatzen ditu
user_role:
color: Rolarentzat erabiltzaile interfazean erabiliko den kolorea, formatu hamaseitarreko RGB bezala
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index 23fbc43b07..a312e5aa1c 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -39,14 +39,12 @@ fa:
text: فقط یک بار میتوانید برای اخطار درخواست تجدیدنظر کنید
defaults:
autofollow: کسانی که از راه دعوتنامه عضو میشوند به طور خودکار پیگیر شما خواهند شد
- avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد
context: یک یا چند زمینه که پالایه باید در آنها اعمال شود
current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید
current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید
digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد
email: به شما ایمیل تأییدی فرستاده خواهد شد
- header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
irreversible: فرستههای پالوده به طور برگشتناپذیری ناپدید میشوند، حتا اگر بعدها پالایه برداشته شود
locale: زبان واسط کاربری، رایانامهها و آگاهیهای ارسالی
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index 29f2398a90..96bf11ef2d 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -5,7 +5,7 @@ fi:
account:
discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille.
display_name: Koko nimesi tai lempinimesi.
- fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat.
+ fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa.
indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta.
note: 'Voit @mainita muita käyttäjiä tai #aihetunnisteita.'
show_collections: Käyttäjät voivat selata seurattujasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä.
@@ -39,14 +39,14 @@ fi:
text: Voit valittaa varoituksesta vain kerran
defaults:
autofollow: Henkilöt, jotka rekisteröityvät kutsun kautta, seuraavat sinua automaattisesti
- avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
+ avatar: WEBP, PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja eikä sitä ehkä valvota
context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa
current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana
current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjänimi
digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana
email: Sinulle lähetetään vahvistussähköposti
- header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
+ header: WEBP, PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta
irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin
locale: Käyttöliittymän, sähköpostien ja puskuilmoitusten kieli
@@ -55,14 +55,14 @@ fi:
scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä.
setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia)
setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät Mastodonia aktiivisesti
- setting_default_sensitive: Arkaluonteinen media on oletuksena piilotettu, ja se voidaan näyttää yhdellä napsautuksella
+ setting_default_sensitive: Arkaluonteinen media piilotetaan oletusarvoisesti, ja se voidaan näyttää yhdellä napsautuksella
setting_display_media_default: Piilota arkaluonteiseksi merkitty media
- setting_display_media_hide_all: Piilota media aina
- setting_display_media_show_all: Näytä media aina
+ setting_display_media_hide_all: Piilota mediasisältö aina
+ setting_display_media_show_all: Näytä mediasisältö aina
setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin mutta sumentavat yksityiskohdat
setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan
username: Voit käyttää kirjaimia, numeroita ja alaviivoja
- whole_word: Kun avainsana tai -fraasi on kokonaan aakkosnumeerinen, se on voimassa vain, jos se vastaa koko sanaa
+ whole_word: Kun avainsana tai -fraasi on täysin aakkosnumeerinen, suodatin aktivoituu vain sen täysvastineille
domain_allow:
domain: Tämä verkkotunnus voi noutaa tietoja tältä palvelimelta ja sieltä saapuvat tiedot käsitellään ja tallennetaan
email_domain_block:
@@ -78,7 +78,7 @@ fi:
form_admin_settings:
activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä
backups_retention_period: Säilytä luodut arkistot määritetyn määrän päiviä.
- bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seuraamissuositusten yläpuolelle.
+ bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seuraamissuosituslistojen alkuun.
closed_registrations_message: Näkyy, kun rekisteröityminen on suljettu
content_cache_retention_period: Kaikki julkaisut ja tehostukset muilta palvelimilta poistetaan, kun määritelty määrä päiviä on kulunut. Osaa julkaisuista voi olla mahdoton palauttaa. Kaikki julkaisuihin liittyvät kirjanmerkit, suosikit ja tehostukset menetetään, eikä niitä voi palauttaa.
custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa.
@@ -108,26 +108,26 @@ fi:
text: Tämä auttaa meitä arvioimaan hakemustasi
ip_block:
comment: Valinnainen. Muista miksi lisäsit tämän säännön.
- expires_in: IP-osoitteet ovat rajallinen resurssi, joskus niitä jaetaan ja vaihtavat usein omistajaa. Tästä syystä epämääräisiä IP-lohkoja ei suositella.
- ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia alueita käyttämällä CIDR-syntaksia. Varo, että et lukitse itseäsi ulos!
+ expires_in: IP-osoitteet ovat rajallinen resurssi – joskus niitä jaetaan, ja ne vaihtavat usein omistajaa. Niinpä epämääräisiä IP-lohkoja ei suositella.
+ ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia IP-osoitealueita CIDR-syntaksin avulla. Varo lukitsemasta itseäsi ulos!
severities:
no_access: Estä pääsy kaikkiin resursseihin
sign_up_block: Uudet rekisteröitymiset eivät ole mahdollisia
sign_up_requires_approval: Uudet rekisteröitymiset edellyttävät hyväksyntääsi
severity: Valitse, mitä tapahtuu tämän IP-osoitteen pyynnöille
rule:
- text: Kuvaile sääntöä tai vaatimusta tämän palvelimen käyttäjille. Yritä pitää se lyhyenä ja yksinkertaisena
+ text: Kuvaile sääntöä tai edellytystä palvelimesi käyttäjille. Suosi tiivistä, yksinkertaista ilmaisua
sessions:
- otp: Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia.
+ otp: 'Näppäile mobiilisovelluksessa näkyvä kaksivaiheisen todennuksen tunnusluku, tai käytä tarvittaessa palautuskoodia:'
webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä.
settings:
indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa.
show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin.
tag:
- name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi
+ name: Voit esimerkiksi vaihtaa suur- ja pienaakkosten kesken helppolukuistaaksesi tekstiäsi
user:
- chosen_languages: Kun valittu, vain valituilla kielillä kirjoitetut julkaisut näkyvät julkisilla aikajanoilla
- role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on
+ chosen_languages: Jos valitset kieliä oheisesta listauksesta, vain niidenkieliset julkaisut näkyvät julkisilla aikajanoilla sinulle
+ role: Rooli vaikuttaa käyttäjän käyttöoikeuksiin
user_role:
color: Väri, jota käytetään roolille kaikkialla käyttöliittymässä, RGB-heksadesimaalimuodossa
highlighted: Tämä tekee roolista julkisesti näkyvän
@@ -152,22 +152,22 @@ fi:
account_migration:
acct: Uuden tilin käyttäjänimi
account_warning_preset:
- text: Esiasetettu teksti
+ text: Esimääritetty teksti
title: Nimi
admin_account_action:
- include_statuses: Sisällytä raportoidut viestit sähköpostiin
+ include_statuses: Sisällytä raportoidut viestit sähköposti-ilmoitukseen
send_email_notification: Ilmoita käyttäjälle sähköpostitse
text: Mukautettu varoitus
type: Toimi
types:
- disable: Poista kirjautuminen käytöstä
- none: Älä tee mitään
+ disable: Jäädytä
+ none: Lähetä varoitus
sensitive: Arkaluonteinen
silence: Rajoita
suspend: Jäädytä
- warning_preset_id: Käytä varoitusmallia
+ warning_preset_id: Käytä varoituspohjaa
announcement:
- all_day: Koko päivän kestävä tapahtuma
+ all_day: Koko päivän tapahtuma
ends_at: Tapahtuman loppu
scheduled_at: Ajoita julkaisu
starts_at: Tapahtuman alku
@@ -196,7 +196,7 @@ fi:
max_uses: Käyttökertoja enintään
new_password: Uusi salasana
note: Elämäkerta
- otp_attempt: Kaksivaiheisen tunnistuksen koodi
+ otp_attempt: Kaksivaiheisen todennuksen tunnusluku
password: Salasana
phrase: Avainsana tai -fraasi
setting_advanced_layout: Ota edistynyt selainkäyttöliittymä käyttöön
@@ -208,19 +208,19 @@ fi:
setting_default_privacy: Julkaisun näkyvyys
setting_default_sensitive: Merkitse media aina arkaluonteiseksi
setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista
- setting_disable_swiping: Poista pyyhkäisyt käytöstä
+ setting_disable_swiping: Poista pyyhkäisyeleet käytöstä
setting_display_media: Median näyttäminen
setting_display_media_default: Oletus
setting_display_media_hide_all: Piilota kaikki
setting_display_media_show_all: Näytä kaikki
setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt julkaisut
- setting_hide_network: Piilota verkkosi
+ setting_hide_network: Piilota verkostotietosi
setting_reduce_motion: Vähennä animaatioiden liikettä
setting_system_font_ui: Käytä järjestelmän oletusfonttia
setting_theme: Sivuston teema
setting_trends: Näytä päivän trendit
setting_unfollow_modal: Kysy vahvistusta ennen seuraamisen lopettamista
- setting_use_blurhash: Näytä värikkäät liukuvärit piilotetulle medialle
+ setting_use_blurhash: Käytä värikästä liukusävytystä piilotetulle medialle
setting_use_pending_items: Hidas tila
severity: Vakavuus
sign_in_token_attempt: Turvakoodi
@@ -230,13 +230,13 @@ fi:
username_or_email: Käyttäjänimi tai sähköpostiosoite
whole_word: Koko sana
email_domain_block:
- with_dns_records: Sisällytä toimialueen MX tietueet ja IP-osoite
+ with_dns_records: Sisällytä toimialueen MX-tietueet ja IP-osoitteet
featured_tag:
name: Aihetunniste
filters:
actions:
hide: Piilota kokonaan
- warn: Piilota ja näytä varoitus
+ warn: Piilota varoittaen
form_admin_settings:
activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta ohjelmointirajapinnassa
backups_retention_period: Käyttäjän arkiston säilytysaika
@@ -244,9 +244,9 @@ fi:
closed_registrations_message: Mukautettu viesti, kun rekisteröityminen ei ole saatavilla
content_cache_retention_period: Sisällön välimuistin säilytysaika
custom_css: Mukautettu CSS
- mascot: Mukautettu maskotti (legacy)
- media_cache_retention_period: Median välimuistin säilytysaika
- peers_api_enabled: Julkaise löydettyjen instanssien luettelo ohjelmointirajapinnassa
+ mascot: Mukautettu maskotti (vanhentunut ominaisuus)
+ media_cache_retention_period: Mediasisältövälimuistin säilytysaika
+ peers_api_enabled: Julkaise löydettyjen palvelinten luettelo ohjelmointirajapinnassa
profile_directory: Ota profiilihakemisto käyttöön
registrations_mode: Kuka voi rekisteröityä
require_invite_text: Vaadi syy liittyä
@@ -260,11 +260,11 @@ fi:
site_title: Palvelimen nimi
status_page_url: Tilasivun URL-osoite
theme: Oletusteema
- thumbnail: Palvelimen pikkukuva
+ thumbnail: Palvelimen pienoiskuva
timeline_preview: Salli todentamaton pääsy julkisille aikajanoille
- trendable_by_default: Salli trendit ilman ennakkotarkastusta
+ trendable_by_default: Salli suositun sisällön koonti ilman ennakkotarkastusta
trends: Ota trendit käyttöön
- trends_as_landing_page: Käytä trendejä aloitussivuna
+ trends_as_landing_page: Käytä suosittua sisältöä aloitussivuna
interactions:
must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua
must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa
@@ -318,7 +318,7 @@ fi:
permissions_as_keys: Oikeudet
position: Prioriteetti
webhook:
- events: Tapahtumat käytössä
+ events: Käytössä olevat tapahtumat
template: Hyötykuormapohja
url: Päätepisteen URL
'no': Ei
@@ -327,8 +327,8 @@ fi:
recommended: Suositeltu
required:
mark: "*"
- text: pakollinen tieto
+ text: vaadittu tieto
title:
sessions:
- webauthn: Käytä jotakin suojausavainta kirjautuaksesi sisään
+ webauthn: Käytä yhtä turva-avaimistasi kirjautuaksesi sisään
'yes': Kyllä
diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml
index e4d87e1786..003eede25b 100644
--- a/config/locales/simple_form.fo.yml
+++ b/config/locales/simple_form.fo.yml
@@ -39,14 +39,14 @@ fo:
text: Tú kanst bara kæra eina atsókn eina ferð
defaults:
autofollow: Fólk, sum tilmelda seg gjøgnum innbjóðingina, fylgja tær sjálvvirkandi
- avatar: PNG, GIF ella JPG. Ikki størri enn %{size}. Verður minkað til %{dimensions}px
+ avatar: WEBP, PNG, GIF ella JPG. Í mesta lagi %{size}. Verður minkað til %{dimensions}px
bot: Tekin til onnur, at kontan í høvuðsheitum ger sjálvvirkandi atgerðir og møguliga ikki verður yvirvakað
context: Ein ella fleiri kontekstir, har sum filtrið skal brúkast
current_password: Av trygdarávum vinarliga les inn loyniorðið hjá verandi kontu
current_username: Fyri at vátta, vinarliga les inn brúkaranavnið á verandi kontu
digest: Einans sent eftir eitt langt tíðarskeið við óvirkni og einans um tú hevur móttikið persónlig boð meðan tú var burtur
email: Tú fær sendandi ein váttanarteldupost
- header: PNG, GIF ella JPG. Ikki størri enn %{size}. Verður minkað til %{dimensions}px
+ header: WEBP, PNG, GIF ella JPG. Í mesta lagi %{size}. Verður minkað til %{dimensions}px
inbox_url: Avrita URL'in frá forsíðuni hjá reiðlagnum, sum tú vilt brúka
irreversible: Filtreraðir postar blíva burtur med alla, eisini sjálvt um filtrið seinni verður strikað
locale: Málið, sum verður brúkt í brúkaramarkamótinum, teldupostum og skumpiboðum
diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml
index f5a2a428e9..a4e57841e6 100644
--- a/config/locales/simple_form.fr-CA.yml
+++ b/config/locales/simple_form.fr-CA.yml
@@ -39,14 +39,14 @@ fr-CA:
text: Vous ne pouvez faire appel d'une sanction qu'une seule fois
defaults:
autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement
- avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
+ avatar: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px
bot: Signale aux autres que ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé
context: Un ou plusieurs contextes où le filtre devrait s’appliquer
current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte
current_username: Pour confirmer, veuillez saisir le nom d'utilisateur de ce compte
digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence
email: Vous recevrez un courriel de confirmation
- header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
+ header: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px
inbox_url: Copiez l’URL depuis la page d’accueil du relai que vous souhaitez utiliser
irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard
locale: La langue de l’interface, des courriels et des notifications
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 5a74facb7a..bd1dc6885f 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -39,14 +39,14 @@ fr:
text: Vous ne pouvez faire appel d'une sanction qu'une seule fois
defaults:
autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement
- avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
+ avatar: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px
bot: Signale aux autres que ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé
context: Un ou plusieurs contextes où le filtre devrait s’appliquer
current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte
current_username: Pour confirmer, veuillez saisir l’identifiant de ce compte
digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence
email: Vous recevrez un courriel de confirmation
- header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
+ header: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px
inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser
irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard
locale: La langue de l’interface, des courriels et des notifications
diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml
index f506b79252..8cedc3b1d5 100644
--- a/config/locales/simple_form.fy.yml
+++ b/config/locales/simple_form.fy.yml
@@ -39,14 +39,12 @@ fy:
text: Jo kinne mar ien kear beswier yntsjinje tsjin in fêststelde oertrêding
defaults:
autofollow: Minsken dy’t harren fia de útnûging registrearre hawwe, folgje jo automatysk
- avatar: PNG, GIF of JPG. Maksimaal %{size}. Wurdt weromskeald nei %{dimensions}px
bot: Sinjaal nei oare brûkers ta dat dizze account yn haadsaak automatisearre berjochten stjoert en mooglik net kontrolearre wurdt
context: Ien of meardere lokaasjes wêr’t it filter aktyf wêze moat
current_password: Fier foar feilichheidsredenen it wachtwurd fan jo aktuele account yn
current_username: Fier ta befêstiging de brûkersnamme fan jo aktuele account yn
digest: Wurdt allinnich nei in lange perioade fan ynaktiviteit ferstjoerd en allinnich wannear’t jo wylst jo ôfwêzigens persoanlike berjochten ûntfongen hawwe
email: Jo krije in befêstigings-e-mailberjocht
- header: PNG, GIF of JPG. Maksimaal %{size}. Wurdt weromskeald nei %{dimensions}px
inbox_url: Kopiearje de URL fan de foarside fan de relayserver dy’t jo brûke wolle
irreversible: Filtere berjochten ferdwine definityf, sels as it filter letter fuortsmiten wurdt
locale: De taal fan de brûkersomjouwing, e-mailberjochten en pushmeldingen
diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml
index f567866c3e..7941ac334d 100644
--- a/config/locales/simple_form.gd.yml
+++ b/config/locales/simple_form.gd.yml
@@ -39,14 +39,12 @@ gd:
text: Chan urrainn dhut ath-thagradh a dhèanamh air rabhadh ach aon turas
defaults:
autofollow: Leanaidh na daoine a chlàraicheas leis a cuireadh thu gu fèin-obrachail
- avatar: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px
bot: Comharraich do chàch gu bheil an cunntas seo ri gnìomhan fèin-obrachail gu h-àraidh is dh’fhaoidte nach doir duine sam bith sùil air idir
context: Na co-theacsaichean air am bi a’ chriathrag an sàs
current_password: A chùm tèarainteachd, cuir a-steach facal-faire a’ chunntais làithrich
current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich
digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh
email: Thèid post-d dearbhaidh a chur thugad
- header: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px
inbox_url: Dèan lethbhreac dhen URL o phrìomh-dhuilleag an ath-sheachadain a bu mhiann leat cleachdadh
irreversible: Thèid postaichean criathraichte à sealladh gu buan fiù ’s ma bheir thu a’ chriathrag air falbh às dèidh làimhe
locale: Cànan eadar-aghaidh a’ chleachdaiche, nam post-d ’s nam brathan putaidh
@@ -304,10 +302,10 @@ gd:
indexable: Gabh a-staigh duilleag na pròifil sna h-einnseanan-luirg
show_application: Seall dè an aplacaid a chuir thu post leatha
tag:
- listable: Leig leis an taga hais seo gun nochd e ann an toraidhean luirg ’s am measg nam molaidhean
+ listable: Faodaidh an taga hais seo nochdadh ann an toraidhean luirg ’s am measg nam molaidhean
name: Taga hais
- trendable: Leig leis an taga hais seo gun nochd e am measg nan treandaichean
- usable: Leig le postaichean an taga hais seo a chleachdadh
+ trendable: Faodaidh an taga hais seo nochdadh am measg nan treandaichean
+ usable: Faodaidh postaichean an taga hais seo a chleachdadh
user:
role: Dreuchd
time_zone: Roinn-tìde
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 7bafca6b71..719da8eefa 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -39,14 +39,14 @@ gl:
text: Só podes apelar a decisión unha vez
defaults:
autofollow: As persoas que se conectaron a través dun convite seguirante automáticamente
- avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
+ avatar: WEBP, PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
bot: Advirte ás usuarias de que esta conta realiza principalmente accións automatizadas e podería non estar monitorizada
context: Un ou varios contextos onde se debería aplicar o filtro
current_password: Por razóns de seguridade, introduce o contrasinal da conta actual
current_username: Para confirmar, introduce o nome de usuaria da conta actual
digest: Enviar só tras un longo período de inactividade e só se recibiches algunha mensaxe directa na tua ausencia
email: Ímosche enviar un correo de confirmación
- header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
+ header: WEBP, PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
inbox_url: Copiar o URL desde a páxina de inicio do repetidor que queres utilizar
irreversible: As publicacións filtradas desaparecerán de xeito irreversible, incluso se despois se elimina o filtro
locale: O idioma da interface de usuaria, correos e notificacións
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index 0a8a57c347..3d7512c5f5 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -39,14 +39,14 @@ he:
text: ניתן לערער על עברה רק פעם אחת
defaults:
autofollow: אנשים שיצטרפו בעזרת ההזמנה יעקבו אחריך באופן אוטומטי
- avatar: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן ל-%{dimensions}px
+ avatar: WEBP, PNG, GIF או JPG. גודל מירבי %{size}. גודל התמונה יוקטן ל־%{dimensions} פיקסלים
bot: איתות לאחרים שהחשבון מבצע בעיקר פעולות אוטומטיות ועשוי לא להיות מנוטר
context: הקשר אחד או יותר בהם יופעל המסנן
current_password: מסיבות אבטחה נא להזין את הסיסמא של החשבון הנוכחי
current_username: על מנת לאשר, נא להכניס את שם המשתמש של החשבון הנוכחי
digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך
email: דוא"ל אישור יישלח אליך
- header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px
+ header: WEBP, PNG, GIF או JPG. גודל מירבי %{size}. גודל התמונה יוקטן ל־%{dimensions} פיקסלים
inbox_url: נא להעתיק את הקישורית מדף הבית של הממסר בו תרצה/י להשתמש
irreversible: הודעות מסוננות יעלמו באופן בלתי הפיך, אפילו אם מאוחר יותר יוסר המסנן
locale: שפת ממשק המשתמש, הדוא"ל וההתראות בדחיפה
diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml
index 3db4fd3b4a..ea40543c51 100644
--- a/config/locales/simple_form.hr.yml
+++ b/config/locales/simple_form.hr.yml
@@ -8,8 +8,6 @@ hr:
title: Proizvoljno. Nije vidljivo primatelju
defaults:
autofollow: Ljudi koji se registriraju kroz pozivnicu će te automatski slijediti
- avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px
- header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px
password: Mora biti najmanje 8 znakova
setting_display_media_default: Sakrij medijski sadržaj označen kao osjetljiv
setting_display_media_hide_all: Uvijek sakrij medijski sadržaj
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 6e11f7fb93..573809c73a 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -39,14 +39,14 @@ hu:
text: Egy vétséget csak egyszer fellebbezhetsz meg
defaults:
autofollow: Akik meghívón keresztül regisztrálnak, automatikusan követni fognak téged
- avatar: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre
+ avatar: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra.
bot: Ez a fiók automatikus műveleteket végez és valószínűleg nem figyeljük
context: Kontextusok, ahol a szűrőnek működnie kell
current_password: Biztonsági okok miatt kérlek, írd be a jelenlegi fiók jelszavát
current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét
digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben
email: Kapsz egy megerősítő e-mailt
- header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre
+ header: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra.
inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét
irreversible: A kiszűrt bejegyzések visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is
locale: A felhasználói felület, e-mailek, push üzenetek nyelve
diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml
index 9dbcd1301e..0525f2d6fc 100644
--- a/config/locales/simple_form.hy.yml
+++ b/config/locales/simple_form.hy.yml
@@ -23,14 +23,12 @@ hy:
text: Կարող ես օգտագործել գրառման առանձնայատկութիւնը։ Խնդրում ենք, լինել խելամիտ յայտարարութեան տարածքն օգտագործելիս, այն յայտնուելու է օգտատիրոջ էկրանին
defaults:
autofollow: Հրաւէրի միջոցով գրանցուող մարդիկ կը հետեւեն քեզ
- avatar: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions}
bot: Այս հաշիւը հիմնականում կատարում է աւտօմատացուած գործողութւնները եւ գուցէ չի վերայսկուում
context: Մէկ կամ մի քանի կոնտեքստներ, որտեղ պէտք է կիրառուի զտիչ
current_password: Անվտանգութեան նկատառումներից ելնելով, խնդրում ենք մուտքագրել տուել հաշուի ծածկագիրը
current_username: Հաստատելու համար խնդրում ենք մուտքագրել տուել հաշուի օգտանունը
digest: Ուղարկուում է պասիւութեան երկար շրջանից յետոյ եւ միայն այն դէպքում, երբ բացակայութեանդ ժամանակ որեւէ անձնական հաղորդագրութիւն ես ստացել
email: Քեզ ուղարկուել է հաստատման իմակ
- header: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions}
inbox_url: Պատճէնիր URL այն շերտի դիմերեսից, որը ցանկանում ես օգտագործել
irreversible: Զտուած գրառումները կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես
locale: Ինտերֆեյսի լեզուն, էլ. նամակները եւ push ծանուցումները
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 552abb2550..af198d932a 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -26,6 +26,7 @@ ia:
username: Nomine de usator
username_or_email: Nomine de usator o e-mail
form_admin_settings:
+ bootstrap_timeline_accounts: Recommenda sempre iste contos a nove usatores
custom_css: CSS personalisate
profile_directory: Activar directorio de profilos
site_contact_email: Adresse de e-mail de contacto
diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml
index 51046ce9d4..8b9e74406a 100644
--- a/config/locales/simple_form.id.yml
+++ b/config/locales/simple_form.id.yml
@@ -29,14 +29,12 @@ id:
text: Anda hanya dapat mengajukan banding peringatan sekali
defaults:
autofollow: Orang yang ingin mendaftar lewat undangan, otomatis mengikuti Anda
- avatar: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px
bot: Akun ini melakukan aksi otomatis dan mungkin tak termonitor
context: Satu atau lebih konteks tempat saringan perlu diterapkan
current_password: Untuk tujuan keamanan mohon masukkan kata sandi akun ini
current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini
digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda
email: Anda akan dikirimi email konfirmasi
- header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px
inbox_url: Salin URL dari halaman depan relai yang ingin Anda pakai
irreversible: Toot tersaring akan hilang permanen bahkan jika saringan dihapus kemudian
locale: Bahasa antar muka pengguna, email, dan notifikasi dorong
diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml
index dfd0836412..3cf5c33f2c 100644
--- a/config/locales/simple_form.ie.yml
+++ b/config/locales/simple_form.ie.yml
@@ -39,14 +39,14 @@ ie:
text: Tu posse apellar un admoniment solmen un vez
defaults:
autofollow: Persones qui adherer per li invitation va sequer te automaticmen
- avatar: PNG, GIF o JPEG. Admaxim %{size}. Li grandore va esser contraet a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG, con un maximum de %{size}. Va esser diminuet a %{dimensions}px
bot: Dir a altres que li conto primarimen far automatic actiones e que fórsan null homan vigila it
context: Un o multiplic contextus u li filtre deve aplicar
current_password: Por securital rasones, ples introducter li passa-parol del actual conto
current_username: Por confirmar, ples inmetter li usator-nómine del actual conto
digest: Misset solmen pos un long periode de ínactivitá e solmen si tu ha recivet quelcunc missages personal in tui inbuxe
email: On va misser te un email de confirmation
- header: PNG, GIF o JPEG. Admaxim %{size}. Li grandore va esser contraet a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG, con un maximum de %{size}. Va esser diminuet a %{dimensions}px
inbox_url: Copiar li URL del initial págine del relé quel tu vole usar
irreversible: Filtrat postas va desaparir ínreversibilmen, mem si li filtre es removet plu tard
locale: Li lingue del usator-interfacie, emails e notificationes push
diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml
index eef2014d19..57a2aeb64d 100644
--- a/config/locales/simple_form.io.yml
+++ b/config/locales/simple_form.io.yml
@@ -39,14 +39,12 @@ io:
text: Vu povas nur apelar striko unafoye
defaults:
autofollow: Personi quo registresesas tra invito automatika sequos vu
- avatar: En la formato PNG, GIF o JPG. Til %{size}. Esos mikrigita a %{dimensions}px
bot: Signalez a altra personi ke la konto precipue havas automatikigita agi e forsan ne surveyesas
context: Situeso kande filtrilo debas aplikesar
current_password: Por sekuresorezoni, pozez pasvorto di ca konto
current_username: Por konfirmar, pozez uzantonomo di ca konto
digest: Nur sendesas pos longa neaktiveso e nur se vu ganis irga mesaji dum ke vu esas neprezenta
email: Vu sendesos konfirmretposto
- header: En la formato PNG, GIF o JPG. Til %{size}. Esos mikrigita a %{dimensions}px
inbox_url: Kopiez URL de frontpagino de relayo quon vu volas uzar
irreversible: Filtrita posti neinversigeble desaparos, mem se filtro efacesas pose
locale: Linguo di uzantointervizajo, retposti e pulsavizi
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 87190693f6..0859e89897 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -39,14 +39,14 @@ is:
text: Þú getur aðeins áfrýjað refsingu einu sinni
defaults:
autofollow: Fólk sem skráir sig í gegnum boðið mun sjálfkrafa fylgjast með þér
- avatar: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
+ avatar: WEBP, PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
bot: Þessi aðgangur er aðallega til að framkvæma sjálfvirkar aðgerðir og gæti verið án þess að hann sé vaktaður reglulega
context: Eitt eða fleiri samhengi þar sem sían ætti að gilda
current_password: Í öryggisskyni skaltu setja inn lykilorðið fyrir þennan notandaaðgang
current_username: Til að staðfesta skaltu setja inn notandanafnið fyrir þennan notandaaðgang
digest: Er aðeins sent eftir lengri tímabil án virkni og þá aðeins ef þú hefur fengið persónuleg skilaboð á meðan þú hefur ekki verið á línunni
email: Þú munt fá sendan staðfestingarpóst
- header: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
+ header: WEBP, PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
inbox_url: Afritaðu slóðina af forsíðu endurvarpans sem þú vilt nota
irreversible: Síaðar færslur munu hverfa óendurkræft, jafnvel þó sían sé seinna fjarlægð
locale: Tungumál notandaviðmótsins, tölvupósts og ýti-tilkynninga
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 731379835a..244cf7c44a 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -39,14 +39,14 @@ it:
text: Puoi appellarti solo una volta
defaults:
autofollow: Le persone che si iscrivono attraverso l'invito ti seguiranno automaticamente
- avatar: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona
context: Uno o più contesti nei quali il filtro dovrebbe essere applicato
current_password: Per motivi di sicurezza inserisci la password dell'account attuale
current_username: Per confermare, inserisci il nome utente dell'account attuale
digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza
email: Ti manderemo una email di conferma
- header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
inbox_url: Copia la URL dalla pagina iniziale del ripetitore che vuoi usare
irreversible: I post filtrati scompariranno in modo irreversibile, anche se il filtro viene eliminato
locale: La lingua dell'interfaccia utente, di email e notifiche push
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 08e866b55e..eae1ea2179 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -39,14 +39,12 @@ ja:
text: 一度だけ異議を申し立てることができます
defaults:
autofollow: 招待から登録した人が自動的にあなたをフォローするようになります
- avatar: "%{size}までのPNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます"
bot: このアカウントは主に自動で動作し、人が見ていない可能性があります
context: フィルターを適用する対象 (複数選択可)
current_password: 現在のアカウントのパスワードを入力してください
current_username: 確認のため、現在のアカウントのユーザー名を入力してください
digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます
email: 確認のメールが送信されます
- header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます"
inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします
irreversible: フィルターが後で削除されても、除外された投稿は元に戻せなくなります
locale: ユーザーインターフェース、メールやプッシュ通知の言語
@@ -294,7 +292,7 @@ ja:
software_updates:
all: すべてのアップデートを通知する
critical: 緊急のアップデートのみ通知する
- label: 新しいMastodonバージョンが利用可能です
+ label: 新しいMastodonバージョンが利用可能になった時
none: 通知しない (非推奨)
patch: 緊急のアップデートとバグ修正アップデートを通知する
trending_tag: 新しいトレンドのレビューをする必要がある時
diff --git a/config/locales/simple_form.ka.yml b/config/locales/simple_form.ka.yml
index e5d874c5a5..48f028c575 100644
--- a/config/locales/simple_form.ka.yml
+++ b/config/locales/simple_form.ka.yml
@@ -4,11 +4,9 @@ ka:
hints:
defaults:
autofollow: ადამიანები რომლებიც დარეგისტრირდებიან მოწვევით, ავტომატურად გამოგყვებიან
- avatar: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე
bot: ეს ანგარიში უმთავრესად ასრულებს ავტომატურ მოქმედებებს და შესაძლოა არ იყოს მონიტორინგის ქვეშ
context: ერთ ან მრავალი კონტექსტი სადაც ფილტრი უნდა შესრულდეს
digest: იგზავნება მხოლოდ ხანგრძლივი უაქტივობის პერიოდის შემდეგ და არყოფნისას თუ მიიღეთ ერთი წერილი მაინც
- header: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე
inbox_url: ურლ დააკოირეთ გამოყენებისთვის სასურველი რილეის წინა გვერდიდან
irreversible: გაფილტრული ტუტები გაუქმდება აღუდგენლად, იმ შემთხვევაშიც კი თუ ფილტრი სამომავლოდ გაუქმდება
locale: მომხმარებლის ინტერფეისის, ელ-ფოსტის წერილების და ფუშ შეტყობინებების ენა
diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml
index 1e1c52da24..c7370aedf6 100644
--- a/config/locales/simple_form.kab.yml
+++ b/config/locales/simple_form.kab.yml
@@ -12,7 +12,7 @@ kab:
defaults:
autofollow: Imdanen ara ijerrden s usnebgi-inek, ad k-ḍefṛen s wudem awurman
email: Ad n-teṭṭfeḍ imayl i usentem
- irreversible: Tijewwaqin i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat
+ irreversible: Tisuffaɣ i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat
locale: Tutlayt n ugrudem, imaylen d tilγa
password: Seqdec ma drus 8 n yisekkilen
setting_display_media_default: Ffer teywalt yettwacreḍ d tanafrit
@@ -55,6 +55,7 @@ kab:
data: Isefka
display_name: Isem ara d-yettwaskanen
email: Tansa imayl
+ expires_in: Ad yemmet
header: Ixef
locale: Tutlayt n wegrudem
max_uses: Amḍan afellay n iseqdacen
@@ -69,12 +70,12 @@ kab:
setting_display_media_show_all: Ssken kullec
setting_hide_network: Ffer azetta-k·m
setting_theme: Asental n wesmel
- setting_use_pending_items: Askar aleγwayan
+ setting_use_pending_items: Askar aleɣwayan
sign_in_token_attempt: Tangalt n tɣellist
title: Azwel
type: Anaw n uktar
username: Isem n useqdac
- username_or_email: Isem n useqdac neγ imal
+ username_or_email: Isem n useqdac neɣ imal
whole_word: Awal akk
featured_tag:
name: Ahacṭag
@@ -84,7 +85,7 @@ kab:
invite:
comment: Awennit
invite_request:
- text: Acimi tebγiḍ ad ternuḍ iman-ik?
+ text: Acimi tebɣiḍ ad ternuḍ iman-ik?
ip_block:
comment: Awennit
ip: IP
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 4da58e6c64..1dee6f1431 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -39,14 +39,14 @@ ko:
text: 처벌에 대해 단 한 번만 이의제기를 할 수 있습니다
defaults:
autofollow: 이 초대로 가입한 사람은 나를 팔로우하게 됩니다.
- avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨
+ avatar: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨
bot: 이 계정이 대부분 자동으로 작업을 수행하고 잘 확인하지 않는다는 것을 알립니다.
context: 필터를 적용 할 한 개 이상의 컨텍스트
current_password: 보안을 위해 현재 계정의 암호를 입력해주세요
current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요
digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기
email: 확인용 이메일을 보냈습니다.
- header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨
+ header: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨
inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다
irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
locale: 사용자 인터페이스, 이메일, 푸시 알림 언어
diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml
index fb7a45c34b..aa8501bf24 100644
--- a/config/locales/simple_form.ku.yml
+++ b/config/locales/simple_form.ku.yml
@@ -29,14 +29,12 @@ ku:
text: Tu dikarî tenê carekê îtîraza binpêkirinê bikî
defaults:
autofollow: Mirovên ku bi riya vexwendinê xwe tomar kirine ew ên bi xweberî te bişopînin
- avatar: PNG, GIF an jî JPG. Herî zêde %{size} dê ber bi %{dimensions}px ve were kêmkirin
bot: Ji yên din re nîşan bike ku ajimêr bi piranî kiryarên xweberî dike û dibe ku neyê çavdêrî kirin
context: Yek an jî zêdetir girêdan divê parzûn were sepandin
current_password: Ji bo ewlehiyê ji kerema xwe borînpeyva ajimêrê xwe têxe
current_username: Ji bo piştrastkirinê, ji kerema xwe navê bikarhêner ya ajimêrê niha binvîse
digest: Tenê piştî demek dirêj neçalakiyê de û tenê di nebûna te da peyamên teybetî standî be tê şandin
email: Ji te re e-name ya pejirandinê were
- header: PNG, GIF an jî JPG. Herî zêde %{size} ber bi %{dimensions}px ve were kêmkirin
inbox_url: Girêdanê ji rûpela pêşîn a guhêrkera ku tu dixwazî bi kar bînî jê bigire
irreversible: Şandiyên parzûnkirî êdî bê veger wenda bibe, heger parzûn paşê were rakirin jî nabe
locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin
diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml
index c23960e07d..f9ee9a4b9a 100644
--- a/config/locales/simple_form.lad.yml
+++ b/config/locales/simple_form.lad.yml
@@ -32,21 +32,21 @@ lad:
announcement:
all_day: Kuando esta eskojido solo se amostraran las datas del rango de tiempo
ends_at: Opsyonal. El pregon dezaparesera otomatikamente en este momento
- scheduled_at: Deshar en blanko para publikar el pregon pishin
+ scheduled_at: Desha en blanko para publikar el pregon pishin
starts_at: Opsyonal. En caso de ke tu pregon este atado a un intervalo de tiempo espesifiko
text: Puedes kulanear la sintaksa de publikasyones. Por favor nota el espasyo ke okupara el pregon en el ekran del utilizador
appeal:
text: Solo puedes apelar un amonestamiento una vez
defaults:
autofollow: Los utilizadores ke se enrejistren por la envitasyon te segiran otomatikamente
- avatar: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px
bot: Indika ke este kuento egzekuta prinsipalmente aksyones otomatizadas i podria no ser monitorizada
context: Uno o multiples kontekstos en los ke deve aplikarse el filtro
current_password: Por razones de sigurita por favor ingresa el kod del kuento aktual
current_username: Para konfirmar, por favor ingresa el nombre de utilizador del kuento aktual
digest: Solo embiado dempues de un eluengo periodo de inaktivita i solo si tienes recibido mesajes personales durante tu ausensya
email: Se te embiara konfirmasyon por posta elektronika
- header: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px
inbox_url: Kopia el URL de la pajina prinsipala del relevo ke keres utilizar
irreversible: Las publikasyones filtradas dezapareseran irreversivlemente, inkluzo si este filtro es supremido mas adelante
locale: La lingua de la enterfaz de utilizador, posta i avizos arrepushados
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index 6eb90340dc..53b8d672de 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -39,14 +39,14 @@ lt:
text: Gali pateikti apeliaciją dėl streiko tik vieną kartą
defaults:
autofollow: Žmonės, kurie užsiregistruos per kvietimą, automatiškai seks tave
- avatar: PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk.
+ avatar: WEBP, PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk.
bot: Signalizuoti kitiems, kad paskyroje daugiausia atliekami automatiniai veiksmai ir kad ji gali būti nestebima
context: Vienas arba keli kontekstai, kuriems turėtų būti taikomas filtras
current_password: Saugumo sumetimais įvesk dabartinės paskyros slaptažodį
current_username: Kad patvirtintum, įvesk dabartinės paskyros naudotojo vardą
digest: Siunčiama tik po ilgo neaktyvumo laikotarpio ir tik tuo atveju, jei negavai jokių asmeninių žinučių
email: Tau bus išsiųstas patvirtinimo el. laiškas
- header: PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk.
+ header: WEBP, PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk.
inbox_url: Nukopijuok URL adresą iš pradinio puslapio perdavėjo, kurį nori naudoti
irreversible: Filtruoti įrašai išnyks negrįžtamai, net jei vėliau filtras bus pašalintas
locale: Naudotojo sąsajos kalba, el. laiškai ir stumiamieji pranešimai
diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml
index bf831c946f..5d23a70100 100644
--- a/config/locales/simple_form.lv.yml
+++ b/config/locales/simple_form.lv.yml
@@ -39,14 +39,12 @@ lv:
text: Brīdinājumu var pārsūdzēt tikai vienu reizi
defaults:
autofollow: Cilvēki, kuri reģistrējas, izmantojot uzaicinājumu, automātiski sekos tev
- avatar: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions} px
bot: Paziņo citiem, ka kontā galvenokārt tiek veiktas automatizētas darbības un tas var netikt uzraudzīts
context: Viens vai vairāki konteksti, kur jāpiemēro filtrs
current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli
current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli
digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas
email: Tev tiks nosūtīts apstiprinājuma e-pasts
- header: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px
inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot
irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts
locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda
diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml
index 79929cec5d..9e9931cc3e 100644
--- a/config/locales/simple_form.ms.yml
+++ b/config/locales/simple_form.ms.yml
@@ -39,14 +39,12 @@ ms:
text: Anda boleh membuat rayuan terhadap pelanggaran sekali sahaja
defaults:
autofollow: Orang yang mendaftar melalui undangan akan mengikuti anda secara automatik
- avatar: PNG, GIF atau JPG. Kebanyakannya %{size}. Saiz akan dikecilkan kepada %{dimensions}px
bot: Memberi isyarat kepada orang lain bahawa akaun itu kebanyakannya melakukan tindakan automatik dan mungkin tidak dipantau
context: Satu atau berbilang konteks di mana penapis harus digunakan
current_password: Untuk tujuan keselamatan sila masukkan kata laluan akaun semasa
current_username: Untuk mengesahkan, sila masukkan nama pengguna akaun semasa
digest: Hanya dihantar selepas tempoh yang lama tidak aktif dan hanya jika anda telah menerima sebarang mesej peribadi semasa ketiadaan anda
email: Anda akan dihantar e-mel pengesahan
- header: PNG, GIF atau JPG. Paling banyak %{size}. Akan diturunkan skala kepada %{dimensions}px
inbox_url: Salin URL dari muka depan geganti yang anda mahu gunakan
irreversible: Siaran yang ditapis akan hilang secara tidak dapat dipulihkan, walaupun penapis dialih keluar kemudian
locale: Bahasa untuk antara muka pengguna, e-mel dan pemberitahuan segera
diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml
index 80b234c17c..4f8a39782a 100644
--- a/config/locales/simple_form.my.yml
+++ b/config/locales/simple_form.my.yml
@@ -39,14 +39,12 @@ my:
text: လုပ်ဆောင်ချက်တစ်ကြိမ်သာ အသုံးပြုနိုင်သည်
defaults:
autofollow: ဖိတ်ကြားချက်မှတစ်ဆင့် အကောင့်ဖွင့်သူများမှာ သင့်ကို အလိုအလျောက်စောင့်ကြည့်မည်ဖြစ်ပါသည်
- avatar: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည်။
bot: အကောင့်သည် အဓိကအားဖြင့် အလိုအလျောက် လုပ်ဆောင်ချက်များ ဆောင်ရွက်နိုင်ပြီး စောင့်ကြည့်ခြင်းမပြုနိုင်ကြောင်း အခြားသူများအား အသိပေးပါ
context: စစ်ထုတ်သင့်သည့် အကြောင်းအရာ တစ်ခု သို့မဟုတ် များစွာ
current_password: လုံခြုံရေးအတွက် ကျေးဇူးပြုပြီး လက်ရှိအကောင့်၏ စကားဝှက်ကို ထည့်ပါ
current_username: အတည်ပြုရန်အတွက် လက်ရှိအကောင့်၏ အသုံးပြုသူအမည်ကို ရိုက်ထည့်ပါ
digest: အချိန်အတော်ကြာ အသုံးမပြုသည့်သည့်နောက်တွင်သာ ပေးပို့ပြီး အသုံးမပြုသည့်ကာလအတွင်း ကိုယ်ရေးကိုယ်တာစာများသာ လက်ခံရန်
email: သင့်ထံ အတည်ပြုချက်အီးမေးလ်တစ်စောင် ပေးပို့ပါမည်
- header: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည်
inbox_url: သင်အသုံးပြုလိုသော relay ၏ ရှေ့စာမျက်နှာမှ URL ကို ကူးယူပါ
irreversible: စစ်ထုတ်ခြင်းကိုဖယ်ရှားလိုက်ပါက စစ်ထုတ်ထားသော ပို့စ်များမှာ ပျောက်ကွယ်သွားပါမည်
locale: အသုံးပြုသူမှ လက်ရှိသုံးနေသည့်ဘာသာစကား၊ အီးမေးလ်များနှင့် ရရှိစေရန်ပေးပို့သည့် အသိပေးချက်များ
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index b0b695745b..3f4f339b93 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -39,14 +39,14 @@ nl:
text: Je kunt maar eenmalig bezwaar indienen tegen een vastgestelde overtreding
defaults:
autofollow: Mensen die zich via de uitnodiging hebben geregistreerd, volgen jou automatisch
- avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px
+ avatar: WEBP, PNG, GIF of JPG. Maximaal %{size}. Wordt verkleind naar %{dimensions}px
bot: Signaal aan anderen dat het account voornamelijk geautomatiseerde acties uitvoert en mogelijk niet wordt gecontroleerd
context: Een of meerdere locaties waar de filter actief moet zijn
current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in
current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in
digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen
email: Je krijgt een bevestigingsmail
- header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px
+ header: WEBP, PNG, GIF of JPG. Maximaal %{size}. Wordt verkleind naar %{dimensions}px
inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken
irreversible: Gefilterde berichten verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd
locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen
@@ -148,9 +148,9 @@ nl:
show_collections: Accounts die jij volgt en die jou volgen op je profiel tonen
unlocked: Automatisch nieuwe volgers accepteren
account_alias:
- acct: Mastodonadres van het oude account
+ acct: Mastodon-adres van het oude account
account_migration:
- acct: Mastodonadres van het nieuwe account
+ acct: Mastodon-adres van het nieuwe account
account_warning_preset:
text: Tekst van preset
title: Titel
diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml
index 266ef1fcce..98cc372be7 100644
--- a/config/locales/simple_form.nn.yml
+++ b/config/locales/simple_form.nn.yml
@@ -39,14 +39,14 @@ nn:
text: Ei åtvaring kan kun ankast ein gong
defaults:
autofollow: Folk som lagar ein konto gjennom innbydinga fylgjer deg automatisk
- avatar: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px
+ avatar: WEBP, PNG, GIF eller JPG. Maks %{size}. Blir forminska til %{dimensions}pkt
bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med
context: En eller flere sammenhenger der filteret skal gjelde
current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker
current_username: Skriv inn brukarnamnet til den noverande kontoen for å stadfesta
digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte
email: Du får snart ein stadfestings-e-post
- header: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px
+ header: WEBP, PNG, GIF eller JPG. Maks %{size}. Blir forminska til %{dimensions}pkt
inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke
irreversible: Filtrerte tut vil verta borte for evig, sjølv om filteret vert fjerna seinare
locale: Språket til brukargrensesnittet, e-postar og push-varsel
@@ -55,8 +55,8 @@ nn:
scopes: API-ane som programmet vil få tilgjenge til. Ettersom du vel eit toppnivåomfang tarv du ikkje velja einskilde API-ar.
setting_aggregate_reblogs: Ikkje vis nye framhevingar for tut som nyleg har vorte heva fram (Påverkar berre nylege framhevingar)
setting_always_send_emails: Vanlegvis vil ikkje e-postvarsel bli sendt når du brukar Mastodon aktivt
- setting_default_sensitive: Nærtakande media vert gøymd som standard og kan synast med eit klikk
- setting_display_media_default: Gøym media som er merka som nærtakande
+ setting_default_sensitive: Sensitive media vert gøymde som standard, og du syner dei ved å klikka på dei
+ setting_display_media_default: Gøym media som er merka som sensitive
setting_display_media_hide_all: Alltid skjul alt media
setting_display_media_show_all: Vis alltid media
setting_use_blurhash: Overgangar er basert på fargane til skjulte grafikkelement, men gjer detaljar utydelege
@@ -220,7 +220,7 @@ nn:
setting_theme: Sidetema
setting_trends: Vis kva som er populært i dag
setting_unfollow_modal: Vis stadfesting før du sluttar å fylgja nokon
- setting_use_blurhash: Vis fargerike overgangar for gøymt media
+ setting_use_blurhash: Vis fargerike overgangar for gøymde medium
setting_use_pending_items: Saktemodus
severity: Alvorsgrad
sign_in_token_attempt: Trygdenykel
@@ -235,8 +235,8 @@ nn:
name: Emneknagg
filters:
actions:
- hide: Gøym totalt
- warn: Gøym med ei advarsel
+ hide: Gøym heilt
+ warn: Gøym med ei åtvaring
form_admin_settings:
activity_api_enabled: Legg ut samla statistikk om brukaraktiviteten i APIet
backups_retention_period: Arkiveringsperiode for brukararkiv
@@ -266,9 +266,9 @@ nn:
trends: Aktiver trendar
trends_as_landing_page: Bruk trendar som startside
interactions:
- must_be_follower: Gøym varslingar frå folk som ikkje fylgjer deg
- must_be_following: Gøym varslingar frå folk du ikkje fylgjer
- must_be_following_dm: Gøym direktemeldinger frå folk du ikkje fylgjer
+ must_be_follower: Blokker varsel frå folk som ikkje fylgjer deg
+ must_be_following: Blokker varsel frå folk du ikkje fylgjer
+ must_be_following_dm: Blokker direktemeldinger frå folk du ikkje fylgjer
invite:
comment: Kommentar
invite_request:
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index 7651792212..6c47a9deee 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -39,14 +39,12 @@
text: Du kan kun anke en advarsel en gang
defaults:
autofollow: Folk som lager en konto gjennom invitasjonen, vil automatisk følge deg
- avatar: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px
bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med
context: En eller flere sammenhenger der filteret skal gjelde
current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker
current_username: For å bekrefte, vennligst skriv inn brukernavnet til den nåværende kontoen
digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte
email: Du vil bli tilsendt en bekreftelses-E-post
- header: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px
inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke
irreversible: Filtrerte innlegg vil ugjenkallelig forsvinne, selv om filteret senere blir fjernet
locale: Språket til brukergrensesnittet, e-mailer og push-varsler
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 7159eed322..ba9c260e47 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -25,14 +25,12 @@ oc:
text: Podètz utilizar la sintaxi dels tuts. Gardatz al cap qu’aquesta anóncia ocuparà la fenèstra de l’utilizaire
defaults:
autofollow: Lo mond que se marcan gràcia a l’invitacion vos segràn automaticament
- avatar: PNG, GIF o JPG. Maximum %{size}. Serà retalhat en %{dimensions}px
bot: Avisar lo mond qu’aqueste compte es pas d’una persona
context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar
current_password: Per de rasons de seguretat volgatz picar lo senhal del compte actual
current_username: Per confirmar, volgatz picar lo nom d’utilizaire del compte actual
digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia
email: Vos mandarem un corrièl de confirmacion
- header: PNG, GIF o JPG. Maximum %{size}. Serà retalhada en %{dimensions}px
inbox_url: Copiatz l’URL de la pagina màger del relai que volètz utilizar
irreversible: Los tuts filtrats desapareisseràn irreversiblament, encara que lo filtre siá suprimit mai tard
locale: La lenga de l’interfàcia d’utilizacion, los messatges e las notificacions
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index a55a93556f..4a8208202f 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -39,14 +39,14 @@ pl:
text: Możesz wysłać odwołanie do ostrzeżenia tylko raz
defaults:
autofollow: Osoby, które zarejestrują się z Twojego zaproszenia automatycznie zaczną Cię obserwować
- avatar: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
+ avatar: WEBP, PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
bot: To konto wykonuje głównie zautomatyzowane działania i może nie być monitorowane
context: Jedno lub wiele miejsc, w których filtr zostanie zastosowany
current_password: Ze względów bezpieczeństwa wprowadź hasło obecnego konta
current_username: Aby potwierdzić, wprowadź nazwę użytkownika obecnego konta
digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią
email: Otrzymasz e-mail potwierdzający
- header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
+ header: WEBP, PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
inbox_url: Skopiuj adres ze strony głównej przekaźnika, którego chcesz użyć
irreversible: Filtrowane wpisy znikną bezpowrotnie, nawet gdy filtr zostanie usunięty
locale: Język interfejsu, wiadomości e-mail i powiadomieniach push
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 1c303c0dae..3a4e99a0d1 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -39,14 +39,12 @@ pt-BR:
text: Você só pode solicitar uma revisão uma vez
defaults:
autofollow: Pessoas que criarem conta através de seu convite te seguirão automaticamente
- avatar: PNG, GIF or JPG. Arquivos de até %{size}. Serão redimensionados para %{dimensions}px
bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada
context: Um ou mais contextos onde o filtro deve atuar
current_password: Para fins de segurança, digite a senha da conta atual
current_username: Para confirmar, digite o nome de usuário da conta atual
digest: Enviado apenas após um longo período de inatividade com um resumo das menções recebidas durante ausência
email: Você receberá um e-mail de confirmação
- header: PNG, GIF ou JPG de até %{size}. Serão redimensionados para %{dimensions}px
inbox_url: Copie o link da página inicial do repetidor que você deseja usar
irreversible: As publicações filtradas desaparecerão irreversivelmente, mesmo se o filtro for removido depois
locale: O idioma da interface do usuário, e-mails e notificações
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 691ecec3a0..9c54e72140 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -39,14 +39,14 @@ pt-PT:
text: Só pode recorrer uma única vez de uma reprimenda
defaults:
autofollow: As pessoas que aderirem através do convite segui-lo-ão automaticamente
- avatar: PNG, GIF ou JPG. Ficheiros no máximo de %{size}. Serão reduzidos para %{dimensions}px
+ avatar: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px
bot: Esta conta executa essencialmente ações automatizadas e pode não ser monitorizada
context: Um ou diversos contextos nos quais o filtro deve ser aplicado
current_password: Para fins de segurança, queira inserir a palavra-passe da conta atual
current_username: Para confirmar, queira inserir o nome de utilizador da conta atual
digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência
email: Será enviado um e-mail de confirmação
- header: PNG, GIF ou JPG. Ficheiros no máximo de %{size}. Serão reduzidos para %{dimensions}px
+ header: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px
inbox_url: Copie o URL da página inicial do repetidor que quer usar
irreversible: Publicações filtradas irão desaparecer irremediavelmente, mesmo que o filtro seja removido posteriormente
locale: O idioma da interface de utilizador, e-mails e notificações push
diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml
index cade572f38..5593022708 100644
--- a/config/locales/simple_form.ro.yml
+++ b/config/locales/simple_form.ro.yml
@@ -23,14 +23,12 @@ ro:
text: Poți folosi sintaxa de postare. Te rugăm să fii atent la spațiul pe care anunțul îl va ocupa pe ecranul utilizatorului
defaults:
autofollow: Persoanele care se înregistrează datorită invitației tale te vor urmări automat
- avatar: PNG, GIF sau JPG. Cel mult %{size}. Va fi redimensionată la %{dimensions}px
bot: Acest cont performează în cea mai mare parte acțiuni automate și nu poate fi monitorizat
context: Contextele în care filtrul trebuie aplicat
current_password: În scopuri de securitate, vă rugăm să introduceţi parola contului curent
current_username: Pentru a confirma, vă rugăm să introduceţi numele de utilizator al contului curent
digest: Este trimis doar după o lungă perioadă de inactivitate și numai dacă primești mesaje personale în perioada de absență
email: Vei primi un e-mail de confirmare
- header: PNG, GIF sau JPG. Cel mult %{size}. Vor fi redimensionate la %{dimensions}px
inbox_url: Copiază adresa URL de pe prima pagină a reului pe care vrei să îl utilizezi
irreversible: Postările sortate vor dispărea ireversibil, chiar dacă filtrul este ulterior șters
locale: Limba interfaței de utilizator, e-mailurile si notificările push
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 2d82a66358..192a2f96df 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -39,14 +39,12 @@ ru:
text: Вы можете обжаловать замечание только один раз
defaults:
autofollow: Люди, пришедшие по этому приглашению, автоматически будут подписаны на вас.
- avatar: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшен до %{dimensions}px.
bot: Отметьте, если с этой учётной записи выполняются автоматизированные действия и она может не просматриваться владельцем.
context: Один или несколько контекстов, к которым должны быть применены фильтры
current_password: В целях безопасности введите пароль текущей учётной записи
current_username: Для подтверждения, пожалуйста, введите имя пользователя текущей учётной записи
digest: Если вы долго не заглядывали, отправим вам дайджест событий, которые происходили в период вашего отсутствия.
email: Вам будет отправлено электронное письмо с подтверждением.
- header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px.
inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать
irreversible: Отфильтрованные посты будут утеряны навсегда, даже если в будущем фильтр будет убран
locale: Язык интерфейса, e-mail писем и push-уведомлений
diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml
index 5f5d633079..792619e6c7 100644
--- a/config/locales/simple_form.sc.yml
+++ b/config/locales/simple_form.sc.yml
@@ -27,14 +27,12 @@ sc:
text: Podes impreare sintassi in is tuts. Dae cara a su tretu chi s'annùntziu at a pigare in s'ischermu de s'utente
defaults:
autofollow: Is persones chi s'ant a registrare pro mèdiu de s'invitu t'ant a sighire in manera automàtica
- avatar: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px
bot: Sinnala a àtere chi custu contu faghet pro su prus atziones automatizadas e diat pòdere no èssere monitoradu
context: Unu o prus cuntestos in ue su filtru si diat dèpere aplicare
current_password: Pro chistiones de seguresa inserta sa crae de intrada de su contu atuale
current_username: Pro cunfirmare inserta su nòmine utente de su contu atuale
digest: Imbiadu isceti a pustis de unu perìodu longu de inatividade, e isceti si as retzidu calicunu messàgiu personale cando non bi fias
email: As a retzire unu messàgiu eletrònicu de cunfirma
- header: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px
inbox_url: Còpia s'URL dae sa pàgina printzipale de su ripetidore chi boles impreare
irreversible: Is tuts filtrados ant a isparèssere in manera irreversìbile, fintzas si prus a tardu s'at a bogare su filtru
locale: S'idioma de s'interfache de s'utente, de is messàgios de posta eletrònica e de is notìficas push
diff --git a/config/locales/simple_form.sco.yml b/config/locales/simple_form.sco.yml
index 85fa66ddc9..7eeaca375a 100644
--- a/config/locales/simple_form.sco.yml
+++ b/config/locales/simple_form.sco.yml
@@ -29,14 +29,12 @@ sco:
text: Ye kin ainly appeal a strike the wance
defaults:
autofollow: Fowk thit signs up throu the invite wull follae ye automatic
- avatar: PNG, GIF or JPG. At maist %{size}. Wull get doonscaled tae %{dimensions}px
bot: Signal tae ithers thit the accoont maistly performs automatit actions an mibbie wullnae be monitort
context: Ae or mair contexts whaur the filter shuid apply
current_password: Fir security purposes please pit in the passwird o the current accoont
current_username: Fir tae confirm, please pit in the uisernemm o the current accoont
digest: Ainly sent efter a lang whilie o inactivity an ainly if ye'v gotten onie personal messages whilst ye wis awa
email: Ye'll be sent a confirmation email
- header: PNG, GIF or JPG. At maist %{size}. Wull get doonscaled tae %{dimensions}px
inbox_url: Copy the URL fae the frontpage o the relay thit ye'r wantin tae uise
irreversible: Filtert posts wull dizappear irreversibly, even if filter is taen aff efter
locale: The leid o the uiser interface, emails an push notes
diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml
index ededa85bcc..eb41d263bc 100644
--- a/config/locales/simple_form.si.yml
+++ b/config/locales/simple_form.si.yml
@@ -27,14 +27,12 @@ si:
text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි
defaults:
autofollow: ආරාධනාව හරහා ලියාපදිංචි වන පුද්ගලයින් ස්වයංක්රීයව ඔබව අනුගමනය කරනු ඇත
- avatar: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත
bot: ගිණුම ප්රධාන වශයෙන් ස්වයංක්රීය ක්රියා සිදු කරන බවත් නිරීක්ෂණය නොකළ හැකි බවත් අන් අයට සංඥා කරන්න
context: පෙරහන යෙදිය යුතු සන්දර්භ එකක් හෝ කිහිපයක්
current_password: ආරක්ෂක අරමුණු සඳහා කරුණාකර ජංගම ගිණුමේ මුරපදය ඇතුළත් කරන්න
current_username: තහවුරු කිරීමට, කරුණාකර වත්මන් ගිණුමේ පරිශීලක නාමය ඇතුළත් කරන්න
digest: දිගු කාලයක් අක්රියව සිටීමෙන් පසුව පමණක් යවන ලද අතර ඔබ නොමැති විට ඔබට කිසියම් පුද්ගලික පණිවිඩයක් ලැබී ඇත්නම් පමණි
email: ඔබට තහවුරු කිරීමේ විද්යුත් තැපෑලක් එවනු ලැබේ
- header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත
inbox_url: ඔබට භාවිතා කිරීමට අවශ්ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න
irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්රතිවර්ත්යව අතුරුදහන් වනු ඇත
locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්රීලක අතුරුමුහුණතේ භාෂාව
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 614812a3a9..71bd25d6df 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -16,14 +16,14 @@ sk:
warning_preset_id: Voliteľné. Stále môžeš vložiť vlastný text na samý koniec predlohy
defaults:
autofollow: Ľudia ktorí sa zaregistrujú prostredníctvom pozvánky, ťa budú inheď následovať
- avatar: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px
+ avatar: WEBP, PNG, GIF, alebo JPG. Najviac %{size}. Bude zmenšený na %{dimensions}px
bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný
context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené
current_password: Z bezpečtnostných dôvodov prosím zadaj heslo súčasného účtu
current_username: Pre potvrdenie prosím zadaj prezývku súčasného účtu
digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdržal/a nejaké osobné správy kým si bol/a preč
email: Bude ti odoslaný potvrdzujúci email
- header: PNG, GIF, alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px
+ header: WEBP, PNG, GIF, alebo JPG. Najviac %{size}. Bude zmenšený na %{dimensions}px
inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať
irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš
locale: Jazyk užívateľského rozhrania, emailových, a nástenkových oboznámení
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index ef345f78c3..1e56894384 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -39,14 +39,14 @@ sl:
text: Na ukrep se lahko pritožite le enkrat
defaults:
autofollow: Osebe, ki se prijavijo prek povabila, vas bodo samodejno sledile
- avatar: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
+ avatar: WEBP, PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions} sl. točk
bot: Ta račun v glavnem opravlja samodejna dejanja in morda ni pod nadzorom
context: En ali več kontekstov, kjer naj se uporabi filter
current_password: Iz varnostnih razlogov vnesite geslo trenutnega računa
current_username: Za potrditev vnesite uporabniško ime trenutnega računa
digest: Pošlje se le po dolgem obdobju nedejavnosti in samo, če ste prejeli osebna sporočila v vaši odsotnosti
email: Poslali vam bomo potrditveno e-pošto
- header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
+ header: WEBP, PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions} sl. točk
inbox_url: Kopirajte URL naslov s prve strani releja, ki ga želite uporabiti
irreversible: Filtrirane objave bodo nepovratno izginile, tudi če je filter kasneje odstranjen
locale: Jezik uporabniškega vmesnika, e-poštnih sporočil in potisnih obvestil
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index dc07478070..b8404766f3 100644
--- a/config/locales/simple_form.sq.yml
+++ b/config/locales/simple_form.sq.yml
@@ -39,14 +39,14 @@ sq:
text: Një paralajmërim mund ta apeloni vetëm një herë
defaults:
autofollow: Personat që regjistrohen përmes ftesës do t’ju ndjekin vetvetiu
- avatar: PNG, GIF ose JPG. Maksimumi %{size}. Do të zvogëlohen në %{dimensions}px
+ avatar: WEBP, PNG, GIF ose JPG. E shumta %{size}. Do të zvogëlohet në %{dimensions}px
bot: Kjo llogari kryesisht bën veprime të automatizuara dhe mund të mos mbikëqyret dot
context: Një ose disa kontekste kur duhet të zbatohet filtri
current_password: Për qëllime sigurie, ju lutemi, jepni fjalëkalimin e llogarisë së tanishme
current_username: Që ta ripohoni, ju lutemi, jepni emrin e përdoruesit të llogarisë së tanishme
digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës tuaj
email: Do t’ju dërgohet një email ripohimi
- header: PNG, GIF ose JPG. E shumta %{size}. Do të ripërmasohet në %{dimensions}px
+ header: WEBP, PNG, GIF ose JPG. E shumta %{size}. Do të zvogëlohet në %{dimensions}px
inbox_url: Kopjoni URL-në prej faqes ballore të relesë që doni të përdorni
irreversible: Mesazhet e filtruar do të zhduken në mënyrë të pakthyeshme, edhe nëse filtri hiqet më vonë
locale: Gjuha e ndërfaqes së përdoruesit, email-eve dhe njoftimeve push
diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml
index 6405ee338a..62e12201ae 100644
--- a/config/locales/simple_form.sr-Latn.yml
+++ b/config/locales/simple_form.sr-Latn.yml
@@ -39,14 +39,12 @@ sr-Latn:
text: Možete podneti samo jednu žalbu na upisan prestup
defaults:
autofollow: Osobe koje se prijave kroz pozivnice će vas automatski zapratiti
- avatar: PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px
bot: Daje drugima do znanja da ovaj nalog uglavnom vrši automatizovane radnje i možda se ne nadgleda
context: Jedan ili više konteksta u kojima treba da se primeni filter
current_password: Iz bezbednosnih razloga molimo Vas unesite lozinku trenutnog naloga
current_username: Da biste potvrdili, Molimo Vas unesite korisničko ime trenutno aktivnog naloga
digest: Šalje se samo posle dužeg perioda neaktivnosti i samo u slučaju da ste primili jednu ili više ličnih poruka tokom Vašeg odsustva
email: Biće Vam poslat mejl sa potvrdom
- header: PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px
inbox_url: Kopirajte URL sa naslovne strane releja koji želite koristiti
irreversible: Filtrirane obajve će nestati nepovratno, čak i ako je filter kasnije uklonjen
locale: Jezik korisničkog okruženja, e-pošte i mobilnih obaveštenja
@@ -192,7 +190,7 @@ sr-Latn:
honeypot: "%{label} (ne popunjavaj)"
inbox_url: URL od relejnog prijemnog sandučeta
irreversible: Ispustiti umesto sakriti
- locale: Jezik
+ locale: Jezik okruženja
max_uses: Maksimalni broj korišćenja
new_password: Nova lozinka
note: Biografija
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index da1ac81233..10434be1e4 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -39,14 +39,12 @@ sr:
text: Можете поднети само једну жалбу на уписан преступ
defaults:
autofollow: Особе које се пријаве кроз позивнице ће вас аутоматски запратити
- avatar: PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px
bot: Даје другима до знања да овај налог углавном врши аутоматизоване радње и можда се не надгледа
context: Један или више контекста у којима треба да се примени филтер
current_password: Из безбедносних разлога молимо Вас унесите лозинку тренутног налога
current_username: Да бисте потврдили, Молимо Вас унесите корисничко име тренутно активног налога
digest: Шаље се само после дужег периода неактивности и само у случају да сте примили једну или више личних порука током Вашег одсуства
email: Биће Вам послат мејл са потврдом
- header: PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px
inbox_url: Копирајте URL са насловне стране релеја који желите користити
irreversible: Филтриранe обајве ће нестати неповратно, чак и ако је филтер касније уклоњен
locale: Језик корисничког окружења, е-поште и мобилних обавештења
@@ -192,7 +190,7 @@ sr:
honeypot: "%{label} (не попуњавај)"
inbox_url: URL од релејног пријемног сандучета
irreversible: Испустити уместо сакрити
- locale: Језик
+ locale: Језик окружења
max_uses: Максимални број коришћења
new_password: Нова лозинка
note: Биографија
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index b01436b415..fcf3788027 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -39,14 +39,12 @@ sv:
text: Du kan endast överklaga en varning en gång
defaults:
autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig
- avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px
bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas
context: Ett eller fler sammanhang där filtret ska tillämpas
current_password: Av säkerhetsskäl krävs lösenordet till det nuvarande kontot
current_username: Ange det nuvarande kontots användarnamn för att bekräfta
digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro
email: Du kommer att få ett bekräftelsemeddelande via e-post
- header: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px
inbox_url: Kopiera webbadressen från hemsidan av det ombud du vill använda
irreversible: Filtrerade inlägg kommer att försvinna oåterkalleligt, även om filter tas bort senare
locale: Språket för användargränssnittet, e-postmeddelanden och push-aviseringar
diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml
index a3819e5eb5..fcf031f90e 100644
--- a/config/locales/simple_form.ta.yml
+++ b/config/locales/simple_form.ta.yml
@@ -17,7 +17,6 @@ ta:
starts_at: கட்டாயமில்லை. உங்கள் அறிவிப்பு ஒரு குறிப்பிட்ட நேரத்தில் வெளியாக வேண்டுமெனில் மட்டும்
defaults:
autofollow: அழைப்பின் வாயிலாக புதிய கணக்கை துவங்குவோர் தாமாகவே உங்களை பின்தொடர்வர்
- avatar: PNG, GIF or JPG. அதிகபட்சம் %{size}, %{dimensions}px க்கு குறைக்கப்படும்
bot: இந்த கணக்கு முக்கியமாக தானியங்கு செயல்களைச் செய்கிறது மற்றும் கண்காணிக்கப்படாமல் போகலாம்
current_password: பாதுகாப்பு காரணங்களுக்காக, தங்களின் தற்போதைய கணக்கின் கடவுச்சொல்லை உள்ளீடு செய்க
current_username: உறுதிசெய்ய, தற்போதைய கணக்கின் பயனர் பெயரை உள்ளிடுக
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index c388001888..259bb00099 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -18,7 +18,7 @@ th:
text: คุณสามารถใช้ไวยากรณ์โพสต์ เช่น URL, แฮชแท็ก และการกล่าวถึง
title: ไม่จำเป็น ไม่ปรากฏแก่ผู้รับ
admin_account_action:
- include_statuses: ผู้ใช้จะเห็นว่าโพสต์ใดก่อให้เกิดการกระทำการควบคุมหรือคำเตือน
+ include_statuses: ผู้ใช้จะเห็นว่าโพสต์ใดก่อให้เกิดการกระทำการกลั่นกรองหรือคำเตือน
send_email_notification: ผู้ใช้จะได้รับคำอธิบายว่าเกิดอะไรขึ้นกับบัญชีของเขา
text_html: ไม่จำเป็น คุณสามารถใช้ไวยากรณ์โพสต์ คุณสามารถ เพิ่มคำเตือนที่ตั้งไว้ล่วงหน้า เพื่อประหยัดเวลา
type_html: เลือกสิ่งที่จะทำกับ %{acct}
@@ -39,14 +39,14 @@ th:
text: คุณสามารถอุทธรณ์การดำเนินการได้เพียงครั้งเดียวเท่านั้น
defaults:
autofollow: ผู้คนที่ลงทะเบียนผ่านคำเชิญจะติดตามคุณโดยอัตโนมัติ
- avatar: PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px
+ avatar: WEBP, PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px
bot: ส่งสัญญาณให้ผู้อื่นว่าบัญชีทำการกระทำแบบอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์
context: หนึ่งหรือหลายบริบทที่ตัวกรองควรนำไปใช้
current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน
current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน
digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น
email: คุณจะได้รับอีเมลการยืนยัน
- header: PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px
+ header: WEBP, PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px
inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้
irreversible: โพสต์ที่กรองอยู่จะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลังก็ตาม
locale: ภาษาของส่วนติดต่อผู้ใช้, อีเมล และการแจ้งเตือนแบบผลัก
@@ -86,7 +86,7 @@ th:
media_cache_retention_period: จะลบไฟล์สื่อที่ดาวน์โหลดหลังจากจำนวนวันที่ระบุเมื่อตั้งเป็นค่าบวก และดาวน์โหลดใหม่ตามความต้องการ
peers_api_enabled: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป
profile_directory: ไดเรกทอรีโปรไฟล์แสดงรายการผู้ใช้ทั้งหมดที่ได้เลือกรับให้สามารถค้นพบได้
- require_invite_text: เมื่อการลงทะเบียนต้องมีการอนุมัติด้วยตนเอง ทำให้การป้อนข้อความ “ทำไมคุณจึงต้องการเข้าร่วม?” บังคับแทนที่จะไม่จำเป็น
+ require_invite_text: เมื่อการลงทะเบียนต้องการการอนุมัติด้วยตนเอง ทำให้การป้อนข้อความ “ทำไมคุณจึงต้องการเข้าร่วม?” บังคับแทนที่จะไม่จำเป็น
site_contact_email: วิธีที่ผู้คนสามารถเข้าถึงคุณสำหรับการสอบถามด้านกฎหมายหรือการสนับสนุน
site_contact_username: วิธีที่ผู้คนสามารถเข้าถึงคุณใน Mastodon
site_extended_description: ข้อมูลเพิ่มเติมใด ๆ ที่อาจเป็นประโยชน์กับผู้เยี่ยมชมและผู้ใช้ของคุณ สามารถจัดโครงสร้างด้วยไวยากรณ์ Markdown
@@ -113,7 +113,7 @@ th:
severities:
no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด
sign_up_block: จะไม่สามารถทำการลงทะเบียนใหม่
- sign_up_requires_approval: การลงทะเบียนใหม่จะต้องมีการอนุมัติของคุณ
+ sign_up_requires_approval: การลงทะเบียนใหม่จะต้องการการอนุมัติของคุณ
severity: เลือกสิ่งที่จะเกิดขึ้นกับคำขอจาก IP นี้
rule:
text: อธิบายกฎหรือข้อกำหนดสำหรับผู้ใช้ในเซิร์ฟเวอร์นี้ พยายามทำให้กฎหรือข้อกำหนดสั้นและเรียบง่าย
@@ -282,7 +282,7 @@ th:
sign_up_requires_approval: จำกัดการลงทะเบียน
severity: กฎ
notification_emails:
- appeal: ใครสักคนอุทธรณ์การตัดสินใจของผู้ควบคุม
+ appeal: ใครสักคนอุทธรณ์การตัดสินใจของผู้กลั่นกรอง
digest: ส่งอีเมลสรุป
favourite: ใครสักคนได้ชื่นชอบโพสต์ของคุณ
follow: ใครสักคนได้ติดตามคุณ
diff --git a/config/locales/simple_form.tok.yml b/config/locales/simple_form.tok.yml
new file mode 100644
index 0000000000..37b0ee765a
--- /dev/null
+++ b/config/locales/simple_form.tok.yml
@@ -0,0 +1,17 @@
+---
+tok:
+ simple_form:
+ hints:
+ account:
+ display_name: nimi sina ale anu nimi sina musi.
+ defaults:
+ setting_display_media_hide_all: sitelen ale li len
+ setting_display_media_show_all: sitelen ale li len ala
+ labels:
+ defaults:
+ expires_in: ona o moli lon
+ setting_theme: kule lipu
+ user_role:
+ name: nimi
+ required:
+ text: ni li ken ala lon ala
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index 7d16531eae..cc644d4df4 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -39,16 +39,16 @@ tr:
text: Bir eyleme yalnızca bir kere itiraz edebilirsiniz
defaults:
autofollow: Davetiyeyle kaydolan kişiler sizi otomatik olarak takip eder
- avatar: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir
+ avatar: En fazla %{size} olacak şekilde WEBP, PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px boyutuna küçültülecektir
bot: Bu hesap temelde otomatik eylemler gerçekleştirir ve izlenmeyebilir
context: Filtrenin geçerli olması gereken bir veya daha fazla içerik
current_password: Güvenlik nedeniyle lütfen şu anki hesabın parolasını girin
current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin
digest: Sadece uzun bir süre hareketsiz kaldıktan sonra ve yalnızca yokluğunuzda herhangi bir kişisel mesaj aldıysanız gönderilir
email: Onay e-postası gönderilir
- header: PNG, GIF ya da JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecek
+ header: WEBP, PNG, GIF veya JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecektir
inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın
- irreversible: Filtrelenmiş gönderiler, filtre daha sonra kaldırılsa bile, geri dönüşümsüz biçimde kaybolur
+ irreversible: Süzgeçlenmiş gönderiler, filtre daha sonra kaldırılsa bile, geri dönüşümsüz biçimde kaybolur
locale: Kullanıcı arayüzünün dili, e-postalar ve push bildirimleri
password: En az 8 karakter kullanın
phrase: Metnin büyük/küçük harf durumundan veya gönderinin içerik uyarısından bağımsız olarak eşleştirilecek
@@ -74,7 +74,7 @@ tr:
action: Bir gönderi filtreyle eşleştiğinde hangi eylemin yapılacağını seçin
actions:
hide: Filtrelenmiş içeriği tamamen gizle, sanki varolmamış gibi
- warn: Filtrelenmiş içeriği, filtrenin başlığından söz eden bir uyarının arkasında gizle
+ warn: Süzgeçlenmiş içeriği, süzgecinin başlığından söz eden bir uyarının arkasında gizle
form_admin_settings:
activity_api_enabled: Yerel olarak yayınlanan gönderi, etkin kullanıcı ve yeni kayıtların haftalık sayıları
backups_retention_period: Üretilen kullanıcı arşivlerini belirli gün sayısı kadar sakla.
@@ -118,7 +118,7 @@ tr:
rule:
text: Bu sunucu üzerindeki kullanıcılar için bir kural veya gereksinimi tanımlayın. Kuralı kısa ve yalın tutmaya çalışın
sessions:
- otp: Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz.
+ otp: 'Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz:'
webauthn: Bir USB anahtarıysa, taktığınızdan ve gerekirse üzerine tıkladığınızdan emin olun.
settings:
indexable: Profil sayfanız Google, Bing ve diğerlerindeki arama sonuçlarında görüntülenebilir.
@@ -178,10 +178,10 @@ tr:
autofollow: Hesabınızı takip etmeye davet edin
avatar: Profil resmi
bot: Bu bir bot hesabı
- chosen_languages: Dilleri filtrele
+ chosen_languages: Dilleri süzgeçle
confirm_new_password: Yeni parolayı onayla
confirm_password: Parolayı doğrula
- context: İçeriği filtrele
+ context: İçeriği süzgeçle
current_password: Güncel parola
data: Veri
display_name: Görünen isim
@@ -203,7 +203,7 @@ tr:
setting_aggregate_reblogs: Zaman çizelgesindeki boostları grupla
setting_always_send_emails: Her zaman e-posta bildirimleri gönder
setting_auto_play_gif: Hareketli GIF'leri otomatik oynat
- setting_boost_modal: Boostlamadan önce onay iletişim kutusu göster
+ setting_boost_modal: Paylaşmadan önce onay iletişim kutusu göster
setting_default_language: Gönderi dili
setting_default_privacy: Gönderi gizliliği
setting_default_sensitive: Medyayı her zaman hassas olarak işaretle
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index aa64ecfdb7..a85684a0f9 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -39,14 +39,14 @@ uk:
text: Ви можете оскаржити рішення лише один раз
defaults:
autofollow: Люди, що зареєструвалися за вашим запрошенням, автоматично підпишуться на вас
- avatar: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px
+ avatar: WEBP, PNG, GIF, або JPG. Максимальний розмір - %{size}. Буде зменшено до %{dimensions}px
bot: Цей обліковий запис виконує переважно автоматичні дії та може не відстежуватися
context: Один або кілька контекстів, до яких повинні бути застосовані фільтри
current_password: Для цілей безпеки, будь ласка, введіть пароль поточного облікового запису
current_username: Для підтвердження, будь ласка, введіть ім'я користувача поточного облікового запису
digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період
email: Вам надійде електронний лист з підтвердженням
- header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px
+ header: WEBP, PNG, GIF, або JPG. Максимальний розмір - %{size}. Буде зменшено до %{dimensions}px
inbox_url: Скопіюйте інтернет-адресу з титульної сторінки ретранслятора
irreversible: Відфільтровані дописи зникнуть назавжди, навіть якщо фільтр потім буде вилучено
locale: Мова інтерфейсу, електронних листів та push-сповіщень
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index 8943527b16..817883941c 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -39,14 +39,12 @@ vi:
text: Bạn chỉ có thể khiếu nại mỗi lần một cảnh cáo
defaults:
autofollow: Những người đăng ký sẽ tự động theo dõi bạn
- avatar: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật
context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng
current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại
digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt)
email: Bạn sẽ được gửi một email xác minh
- header: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng
irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc
locale: Ngôn ngữ của giao diện, email và thông báo đẩy
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 7a56fa2559..d0ca529a4d 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -39,14 +39,14 @@ zh-CN:
text: 你仅能对单次处罚提交一次申诉
defaults:
autofollow: 通过邀请链接注册的用户将会自动关注你
- avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px
+ avatar: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px
bot: 来自这个账户的绝大多数操作都是自动进行的,并且可能无人监控
context: 过滤器的应用环境
current_password: 为了安全起见,请输入当前账号的密码
current_username: 请输入当前账号的用户名以确认
digest: 仅在你长时间未登录,且收到了私信时发送
email: 我们会向你发送一封确认邮件
- header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px
+ header: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px
inbox_url: 从你想要使用的中继站的主页上复制 URL
irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样
locale: 用户界面、电子邮件和推送通知中使用的语言
diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml
index ad963b32b6..6fa052082e 100644
--- a/config/locales/simple_form.zh-HK.yml
+++ b/config/locales/simple_form.zh-HK.yml
@@ -39,14 +39,12 @@ zh-HK:
text: 你每次只能提出一次申訴
defaults:
autofollow: 通過邀請網址註冊的用戶將會自動關注你
- avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
bot: 這個帳號是機械人,所做的事情可能沒有經人為監察
context: 過濾器應該套用的一項或多項條件
current_password: 基於保安緣故,請輸入目前帳號的密碼
current_username: 請輸入目前帳戶的使用者名稱以確認
digest: 僅在你長時間未登錄,且收到了私信時發送
email: 你將收到一封確認電郵
- header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
inbox_url: 在你想要使用的中繼站首頁,複製它的網址
irreversible: 文章過濾是不可還原的,即使日後過濾器被移除,也無法重新看到被它濾走的文章
locale: 使用者介面、電郵和通知的語言
diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml
index a31ad5eb11..c83a7be75a 100644
--- a/config/locales/simple_form.zh-TW.yml
+++ b/config/locales/simple_form.zh-TW.yml
@@ -39,14 +39,14 @@ zh-TW:
text: 您只能對警示提出一次申訴
defaults:
autofollow: 通過邀請網址註冊的使用者將自動跟隨您
- avatar: 支援 PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size},會等比例縮減至 %{dimensions} 像素
+ avatar: 支援 WEBP、PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size}。將等比例縮減至 %{dimensions} 像素
bot: 此帳號主要執行自動化操作且可能未受人為監控
context: 此過濾器應套用於以下一項或多項情境
current_password: 因安全因素,請輸入目前帳號的密碼
current_username: 請輸入目前帳號的使用者名稱以確認
digest: 僅於您長時間未登入且於未登入期間收到私訊時傳送
email: 您將收到一封確認電子郵件
- header: 支援 PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size},會等比例縮減至 %{dimensions} 像素
+ header: 支援 WEBP、PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size}。將等比例縮減至 %{dimensions} 像素
inbox_url: 從您想要使用的中繼首頁複製網址
irreversible: 已過濾的嘟文將會不可逆地消失,即便之後移除過濾器也一樣
locale: 使用者介面、電子郵件與推播通知的語言
@@ -200,12 +200,12 @@ zh-TW:
password: 密碼
phrase: 關鍵字或片語
setting_advanced_layout: 啟用進階網頁介面
- setting_aggregate_reblogs: 時間軸中的群組轉嘟
+ setting_aggregate_reblogs: 於時間軸中不重複顯示轉嘟
setting_always_send_emails: 總是發送電子郵件通知
setting_auto_play_gif: 自動播放 GIF 動畫
setting_boost_modal: 轉嘟前先詢問我
setting_default_language: 嘟文語言
- setting_default_privacy: 嘟文可見範圍
+ setting_default_privacy: 嘟文隱私設定
setting_default_sensitive: 總是將媒體標記為敏感內容
setting_delete_modal: 刪除嘟文前先詢問我
setting_disable_swiping: 停用滑動手勢
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 20df763463..d97cfac0ea 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -88,7 +88,7 @@ sk:
remote: Federované
title: Umiestnenie
login_status: Stav prihlásenia
- media_attachments: Prílohy
+ media_attachments: Mediálne prílohy
memorialize: Zmeň na "Navždy budeme spomínať"
memorialized: Spomienka na
memorialized_msg: Úspešne zmenené %{username} na spomienkové konto
@@ -175,6 +175,7 @@ sk:
approve_user: Odobri užívateľa
assigned_to_self_report: Priraď hlásenie
change_email_user: Zmeň email pre užívateľa
+ change_role_user: Zmeň užívateľskú rolu
confirm_user: Potvrď užívateľa
create_account_warning: Vytvor výstrahu
create_announcement: Vytvor oboznámenie
@@ -251,15 +252,22 @@ sk:
enable_user_html: "%{name} povolil/a prihlásenie pre používateľa %{target}"
memorialize_account_html: "%{name} zmenil/a účet %{target} na pamätnú stránku"
reject_appeal_html: "%{name} zamietol/la námietku moderovacieho rozhodnutia od %{target}"
+ remove_avatar_user_html: "%{name} vymazal/a %{target}/ov/in avatar"
reopen_report_html: "%{name} znovu otvoril/a nahlásenie %{target}"
resend_user_html: "%{name} znovu odoslal/a potvrdzovací email pre %{target}"
reset_password_user_html: "%{name} resetoval/a heslo používateľa %{target}"
resolve_report_html: "%{name} vyriešil/a nahlásenie %{target}"
- sensitive_account_html: "%{name} označil médium od %{target} za chúlostivé"
+ sensitive_account_html: "%{name} označil/a médium od %{target} za chúlostivé"
silence_account_html: "%{name} obmedzil/a účet %{target}"
suspend_account_html: "%{name} zablokoval/a účet používateľa %{target}"
unassigned_report_html: "%{name} odobral/a report od %{target}"
+ unsensitive_account_html: "%{name} odznačil/a médium od %{target} ako chúlostivé"
unsuspend_account_html: "%{name} spojazdnil/a účet %{target}"
+ update_announcement_html: "%{name} aktualizoval/a oboznámenie %{target}"
+ update_custom_emoji_html: "%{name} aktualizoval/a emotikonu %{target}"
+ update_domain_block_html: "%{name} aktualizoval/a blokovanie domény pre %{target}"
+ update_ip_block_html: "%{name} zmenil/a pravidlo pre IP %{target}"
+ update_status_html: "%{name} aktualizoval/a príspevok od %{target}"
update_user_role_html: "%{name} zmenil/a rolu pre %{target}"
deleted_account: zmazaný účet
empty: Žiadne záznamy nenájdené.
@@ -363,6 +371,7 @@ sk:
silence: Obmedz
suspend: Pozastav
title: Nové blokovanie domény
+ no_domain_block_selected: Žiadne blokovanie domén nebolo zmenené, keďže žiadne neboli vybrané
not_permitted: Nemáš povolenie na vykonanie tohto kroku
obfuscate: Zatemniť názov domény
private_comment: Súkromný komentár
@@ -625,6 +634,7 @@ sk:
approved: Pre registráciu je nutné povolenie
none: Nikto sa nemôže registrovať
open: Ktokoľvek sa môže zaregistrovať
+ warning_hint: Odporúčame používať "Pre registráciu je potrebné schválenie", pokiaľ si niesi istý/á, že tvoj moderovací tím vie zvládnuť spam a záškodné registrácie včas.
title: Nastavenia servera
site_uploads:
delete: Vymaž nahratý súbor
@@ -730,6 +740,8 @@ sk:
enabled: Aktívne
status: Stav
admin_mailer:
+ auto_close_registrations:
+ subject: Registrácie na %{instance} boli automaticky prepnuté na vyžadujúce schválenie
new_appeal:
actions:
none: varovanie
@@ -783,6 +795,7 @@ sk:
captcha_confirmation:
title: Bezpečnostná kontrola
confirmations:
+ clicking_this_link: kliknutím na tento odkaz
login_link: prihlás sa
welcome_title: Vitaj, %{name}!
delete_account: Vymaž účet
@@ -1277,9 +1290,6 @@ sk:
welcome:
edit_profile_action: Nastav profil
explanation: Tu nájdeš nejaké tipy do začiatku
- final_action: Začni prispievať
- full_handle: Adresa tvojho profilu v celom formáte
- full_handle_hint: Toto je čo musíš dať vedieť svojím priateľom aby ti mohli posielať správy, alebo ťa následovať z iného serveru.
subject: Vitaj na Mastodone
title: Vitaj na palube, %{name}!
users:
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index ba707f49eb..c9b2343b69 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -795,6 +795,7 @@ sl:
disabled: Nikomur
users: Prijavljenim krajevnim uporabnikom
registrations:
+ moderation_recommandation: Preden prijave odprete za vse poskrbite, da imate v ekipi moderatorjev zadosti aktivnih članov.
preamble: Nadzirajte, kdo lahko ustvari račun na vašem strežniku.
title: Registracije
registrations_mode:
@@ -802,6 +803,7 @@ sl:
approved: Potrebna je odobritev za prijavo
none: Nihče se ne more prijaviti
open: Vsakdo se lahko prijavi
+ warning_hint: Priporočamo uporabo možnosti »Potrebna je odobritev za prijavo«, razen če ste gotovi, da se bo vaša ekipa moderatorjev res zmožna hitro odzvati na neželene vsebine in škodoželjne prijave.
security:
authorized_fetch: Od drugih strežnikov v federaciji zahtevaj overitev pristnosti
authorized_fetch_hint: Zahtevanje overitve pristnosti od drugih strežnikov v federaciji omogoči strožje uveljavljanje uporabniških in strežniških blokad. Vendar je cena za to počasnejše delovanje, zmanjšanje dosega vaših odgovorov in morebitne težave z združljivostjo z nekaterimi storitvami v federaciji. Poleg tega to odločenim akterjem ne bo preprečilo pridobivanja vaših javnih objav in računov.
@@ -1002,6 +1004,9 @@ sl:
title: Spletne zanke
webhook: Spletna zanka
admin_mailer:
+ auto_close_registrations:
+ body: Zaradi pomanjkanja moderiranja v zadnjem času, se je za strežnik %{instance} samodejno vklopilo ročno preverjanje in potrjevanje prijav. S tem se prepreči morebitno zlorabo strežnika %{instance}. Prijave lahko kadarkoli spet spremenite nazaj v odprte.
+ subject: Za strežnik %{instance} se je samodejno vklopilo ročno potrjevanje prijav
new_appeal:
actions:
delete_statuses: brisanje njihovih objav,
@@ -1598,6 +1603,9 @@ sl:
errors:
limit_reached: Dosežena omejitev različnih reakcij/odzivov
unrecognized_emoji: ni prepoznan emotikon
+ redirects:
+ prompt: Če zaupate tej povezavi, jo kliknite za nadaljevanje.
+ title: Zapuščate %{instance}.
relationships:
activity: Dejavnost računa
confirm_follow_selected_followers: Ali ste prepričani, da želite slediti izbranim sledilcem?
@@ -1854,6 +1862,12 @@ sl:
extra: Zdaj je na voljo za prenos!
subject: Vaš arhiv je pripravljen za prenos
title: Prevzem arhiva
+ failed_2fa:
+ details: 'Tukaj so podrobnosti poskusa prijave:'
+ explanation: Nekdo se je poskusil prijaviti v vaš račun, vendar ni podal veljavnega drugega faktorja preverjanja pristnosti.
+ further_actions_html: Če to niste bili vi, priporočamo, da takoj %{action}, ker je lahko ogrožena varnost.
+ subject: Napaka preverjanja pristnosti z drugim faktorjem
+ title: Preverjanje pristnosti z drugim faktorjem je spodletelo
suspicious_sign_in:
change_password: spremenite svoje geslo
details: 'Tukaj so podrobnosti prijave:'
@@ -1896,10 +1910,6 @@ sl:
edit_profile_action: Nastavitve profila
edit_profile_step: Profil lahko prilagodite tako, da naložite sliko profila, spremenite pojavno ime in drugo. Lahko izberete, da želite pregledati nove sledilce, preden jim dovolite sledenje.
explanation: Tu je nekaj nasvetov za začetek
- final_action: Začnite objavljati
- final_step: 'Začnite objavljati! Tudi brez sledilcev bodo vaše javne objave videli drugi, npr. na krajevni časovnici ali v ključnikih. Morda se želite predstaviti s ključnikom #introductions.'
- full_handle: Vaša polna ročica
- full_handle_hint: To bi povedali svojim prijateljem, da vam lahko pošljejo sporočila ali vam sledijo iz drugega strežnika.
subject: Dobrodošli na Mastodon
title: Dobrodošli, %{name}!
users:
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 3dd4731209..4293271bb2 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -188,7 +188,7 @@ sq:
create_user_role: Krijoni Rol
demote_user: Zhgradoje Përdoruesin
destroy_announcement: Fshije Lajmërimin
- destroy_canonical_email_block: Fshi Bllokim El-esh
+ destroy_canonical_email_block: Fshi Bllokim Email-esh
destroy_custom_emoji: Fshi Emotikon Vetjak
destroy_domain_allow: Fshi Lejim Përkatësie
destroy_domain_block: Fshi Bllokim Përkatësie
@@ -283,7 +283,7 @@ sq:
unsuspend_account_html: "%{name} hoqi pezullimin për llogarinë e %{target}"
update_announcement_html: "%{name} përditësoi lajmërimin %{target}"
update_custom_emoji_html: "%{name} përditësoi emoxhin %{target}"
- update_domain_block_html: "%{name} përditësoi bllokimin e përkatësish për %{target}"
+ update_domain_block_html: "%{name} përditësoi bllokim përkatësish për %{target}"
update_ip_block_html: "%{name} ndryshoi rregull për IP-në %{target}"
update_status_html: "%{name} përditësoi gjendjen me %{target}"
update_user_role_html: "%{name} ndryshoi rolin për %{target}"
@@ -764,6 +764,7 @@ sq:
disabled: Për askënd
users: Për përdorues vendorë që kanë bërë hyrjen
registrations:
+ moderation_recommandation: Ju lutemi, sigurohuni si keni një ekip adekuat dhe reagues moderimi, përpara se të hapni regjistrimet për këdo!
preamble: Kontrolloni cilët mund të krijojnë llogari në shërbyesin tuaj.
title: Regjistrime
registrations_mode:
@@ -771,6 +772,7 @@ sq:
approved: Për regjistrim, lypset miratimi
none: S’mund të regjistrohet ndokush
open: Mund të regjistrohet gjithkush
+ warning_hint: Rekomandojmë përdorimin e “Për regjistrim lypset miratim”. veç nëse jeni i bindur se ekipi juaj i moderimit mund të trajtojë në kohë mesazhe të padëshiruar dhe regjistrime dashakeqe.
security:
authorized_fetch: Kërko doemos mirëfilltësim prej shërbyes të federuar
authorized_fetch_hint: Kërkimi doemos i kryerjes së mirëfilltësimit për shërbyes të federuar aktivizon detyrim më strikt të bllokimeve si në shkallë përdoruesi, ashtu edhe në shkallë shërbyesi. Por kjo vjen me koston e një keqësimi të funksionimit, redukton përhapjen e përgjigjeve tuaja dhe mund të sjellë probleme përputhshmërie me disa shërbime të federuara. Veç kësaj, kjo s’do t’ua pengojë, aktorëve vënë kësaj, të sjellin postimet dhe llogaritë tuaja publike.
@@ -962,6 +964,9 @@ sq:
title: Webhook-ë
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Për shkak mungese veprimtarie moderatori së fundi, regjistrimet te %{instance} janë kaluar automatikisht të kërkojnë shqyrtim dorazi, për të penguar përdorimin e %{instance} si një platformë për aktorë të këqij. Mund të kaloni kurdo te regjistrime të hapura.
+ subject: Regjistrimet te %{instance} janë kaluar automatikisht të kërkojnë miratim
new_appeal:
actions:
delete_statuses: fshirje e postimeve të tij
@@ -1837,10 +1842,6 @@ sq:
edit_profile_action: Ujdisje profili
edit_profile_step: Profilin tuaj mund ta përshtatni duke ngarkuar një figurë, duke ndryshuar emrin tuaj në ekran, etj. Mund të zgjidhni të shqyrtoni ndjekës të rinj, para se të jenë lejuar t’ju ndjekin.
explanation: Ja disa ndihmëza, sa për t’ia filluar
- final_action: Filloni të postoni
- final_step: 'Filloni të postoni! Edhe pa ndjekës, postimet tuaja publike mund të shihen nga të tjerët, për shembull, në rrjedhën kohore vendore, ose në hashtag-ë. Mund të doni të prezantoni veten përmes hashtag-ut #introductions.'
- full_handle: Identifikuesi juaj i plotë
- full_handle_hint: Kjo është ajo çka do të duhej t’u tregonit shokëve tuaj, që të mund t’ju dërgojnë mesazhe ose t’ju ndjekin nga një shërbyes tjetër.
subject: Mirë se vini te Mastodon-i
title: Mirë se vini, %{name}!
users:
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index b55b6e0d19..a1f6df067f 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -1873,10 +1873,6 @@ sr-Latn:
edit_profile_action: Podesi nalog
edit_profile_step: Možete prilagoditi svoj profil tako što ćete postaviti profilnu sliku, promeniti ime za prikaz i tako dalje. Možete dati saglasnost da pregledate nove pratioce pre nego što im dozvolite da Vas zaprate.
explanation: Evo nekoliko saveta za početak
- final_action: Počnite objavljivati
- final_step: 'Počnite da objavljujete! Čak i bez pratilaca, Vaše javne objave su vidljive drugim ljudima, na primer na lokalnoj vremenskoj liniji ili u heš oznakama. Možda želite da se predstavite sa heš oznakom #introductions ili #predstavljanja.'
- full_handle: Vaš pun nadimak
- full_handle_hint: Ovo biste rekli svojim prijateljima kako bi vam oni poslali poruku, ili zapratili sa druge instance.
subject: Dobro došli na Mastodon
title: Dobro došli, %{name}!
users:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 8de7c90e73..494b41a754 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -1781,8 +1781,8 @@ sr:
does_not_match_previous_name: не поклапа се са претходним именом
themes:
contrast: Велики контраст
- default: Mastodon (тамно)
- mastodon-light: Mastodon (светло)
+ default: Mastodon (тамна)
+ mastodon-light: Mastodon (светла)
time:
formats:
default: "%d %b %Y, %H:%M"
@@ -1873,10 +1873,6 @@ sr:
edit_profile_action: Подеси налог
edit_profile_step: Можете прилагодити свој профил тако што ћете поставити профилну слику, променити име за приказ и тако даље. Можете дати сагласност да прегледате нове пратиоце пре него што им дозволите да Вас запрате.
explanation: Ево неколико савета за почетак
- final_action: Почните објављивати
- final_step: 'Почните да објављујете! Чак и без пратилаца, Ваше јавне објаве су видљиве другим људима, на пример на локалној временској линији или у хеш ознакама. Можда желите да се представите са хеш ознаком #introductions или #представљања.'
- full_handle: Ваш пун надимак
- full_handle_hint: Ово бисте рекли својим пријатељима како би вам они послали поруку, или запратили са друге инстанце.
subject: Добро дошли на Mastodon
title: Добро дошли, %{name}!
users:
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index deac7cc638..d0f3994b4e 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -1837,10 +1837,6 @@ sv:
edit_profile_action: Profilinställning
edit_profile_step: Du kan anpassa din profil genom att ladda upp en profilbild, ändra ditt visningsnamn med mera. Du kan välja att granska nya följare innan de får följa dig.
explanation: Här är några tips för att komma igång
- final_action: Börja göra inlägg
- final_step: 'Börja skriv inlägg! Även utan följare kan dina offentliga inlägg ses av andra, exempelvis på den lokala tidslinjen eller i hashtaggar. Du kanske vill introducera dig själv under hashtaggen #introduktion eller #introductions.'
- full_handle: Ditt fullständiga användarnamn/mastodonadress
- full_handle_hint: Det här är vad du skulle berätta för dina vänner så att de kan meddela eller följa dig från en annan instans.
subject: Välkommen till Mastodon
title: Välkommen ombord, %{name}!
users:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index ac5cfbacf5..5253dd6b78 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -23,11 +23,11 @@ th:
admin:
account_actions:
action: ทำการกระทำ
- title: ทำการกระทำการควบคุม %{acct}
+ title: ทำการกระทำการกลั่นกรองต่อ %{acct}
account_moderation_notes:
create: เขียนหมายเหตุ
- created_msg: สร้างหมายเหตุการควบคุมสำเร็จ!
- destroyed_msg: ทำลายหมายเหตุการควบคุมสำเร็จ!
+ created_msg: สร้างหมายเหตุการกลั่นกรองสำเร็จ!
+ destroyed_msg: ทำลายหมายเหตุการกลั่นกรองสำเร็จ!
accounts:
add_email_domain_block: ปิดกั้นโดเมนอีเมล
approve: อนุมัติ
@@ -93,8 +93,8 @@ th:
pending: รอดำเนินการ
silenced: จำกัดอยู่
suspended: ระงับอยู่
- title: การควบคุม
- moderation_notes: หมายเหตุการควบคุม
+ title: การกลั่นกรอง
+ moderation_notes: หมายเหตุการกลั่นกรอง
most_recent_activity: กิจกรรมล่าสุด
most_recent_ip: IP ล่าสุด
no_account_selected: ไม่มีการเปลี่ยนแปลงบัญชีเนื่องจากไม่มีการเลือก
@@ -226,7 +226,7 @@ th:
update_status: อัปเดตโพสต์
update_user_role: อัปเดตบทบาท
actions:
- approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการควบคุมจาก %{target}"
+ approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการกลั่นกรองจาก %{target}"
approve_user_html: "%{name} ได้อนุมัติการลงทะเบียนจาก %{target}"
assigned_to_self_report_html: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง"
change_email_user_html: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}"
@@ -263,7 +263,7 @@ th:
enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}"
memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์"
promote_user_html: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}"
- reject_appeal_html: "%{name} ได้ปฏิเสธการอุทธรณ์การตัดสินใจในการควบคุมจาก %{target}"
+ reject_appeal_html: "%{name} ได้ปฏิเสธการอุทธรณ์การตัดสินใจในการกลั่นกรองจาก %{target}"
reject_user_html: "%{name} ได้ปฏิเสธการลงทะเบียนจาก %{target}"
remove_avatar_user_html: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก"
reopen_report_html: "%{name} ได้เปิดรายงาน %{target} ใหม่"
@@ -395,7 +395,7 @@ th:
import: นำเข้า
new:
create: สร้างการปิดกั้น
- hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะนำไปใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ
+ hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะนำไปใช้วิธีการกลั่นกรองที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ
severity:
desc_html: "จำกัด จะทำให้โพสต์จากบัญชีที่โดเมนนี้ไม่ปรากฏแก่ใครก็ตามที่ไม่ได้กำลังติดตามเขา ระงับ จะเอาข้อมูลเนื้อหา, สื่อ และโปรไฟล์ทั้งหมดสำหรับบัญชีของโดเมนนี้ออกจากเซิร์ฟเวอร์ของคุณ ใช้ ไม่มี หากคุณแค่ต้องการปฏิเสธไฟล์สื่อ"
noop: ไม่มี
@@ -407,7 +407,7 @@ th:
obfuscate: ทำให้ชื่อโดเมนคลุมเครือ
obfuscate_hint: ทำให้ชื่อโดเมนในรายการคลุมเครือบางส่วนหากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน
private_comment: ความคิดเห็นส่วนตัว
- private_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับการใช้งานภายในโดยผู้ควบคุม
+ private_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับการใช้งานภายในโดยผู้กลั่นกรอง
public_comment: ความคิดเห็นสาธารณะ
public_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับสาธารณชนทั่วไป หากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน
reject_media: ปฏิเสธไฟล์สื่อ
@@ -452,7 +452,7 @@ th:
title: นำเข้าการปิดกั้นโดเมน
no_file: ไม่ได้เลือกไฟล์
follow_recommendations:
- description_html: "คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามส่วนบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด"
+ description_html: "คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามเฉพาะบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด"
language: สำหรับภาษา
status: สถานะ
suppress: ระงับคำแนะนำการติดตาม
@@ -512,7 +512,7 @@ th:
moderation:
all: ทั้งหมด
limited: จำกัดอยู่
- title: การควบคุม
+ title: การกลั่นกรอง
private_comment: ความคิดเห็นส่วนตัว
public_comment: ความคิดเห็นสาธารณะ
purge: ล้างข้อมูล
@@ -587,7 +587,7 @@ th:
add_to_report: เพิ่มข้อมูลเพิ่มเติมไปยังรายงาน
are_you_sure: คุณแน่ใจหรือไม่?
assign_to_self: มอบหมายให้ฉัน
- assigned: ผู้ควบคุมที่ได้รับมอบหมาย
+ assigned: ผู้กลั่นกรองที่ได้รับมอบหมาย
by_target_domain: โดเมนของบัญชีที่ได้รับการรายงาน
cancel: ยกเลิก
category: หมวดหมู่
@@ -596,7 +596,7 @@ th:
none: ไม่มี
comment_description_html: 'เพื่อให้ข้อมูลเพิ่มเติม %{name} ได้เขียน:'
confirm: ยืนยัน
- confirm_action: ยืนยันการกระทำการควบคุมต่อ @%{acct}
+ confirm_action: ยืนยันการกระทำการกลั่นกรองต่อ @%{acct}
created_at: รายงานเมื่อ
delete_and_resolve: ลบโพสต์
forwarded: ส่งต่อแล้ว
@@ -613,7 +613,7 @@ th:
delete: ลบ
placeholder: อธิบายว่ามีการใช้การกระทำใด หรือการอัปเดตที่เกี่ยวข้องอื่นใด...
title: หมายเหตุ
- notes_description_html: ดูและฝากหมายเหตุถึงผู้ควบคุมอื่น ๆ และตัวคุณเองในอนาคต
+ notes_description_html: ดูและฝากหมายเหตุถึงผู้กลั่นกรองอื่น ๆ และตัวคุณเองในอนาคต
processed_msg: 'ประมวลผลรายงาน #%{id} สำเร็จ'
quick_actions_description_html: 'ดำเนินการอย่างรวดเร็วหรือเลื่อนลงเพื่อดูเนื้อหาที่รายงาน:'
remote_user_placeholder: ผู้ใช้ระยะไกลจาก %{instance}
@@ -644,7 +644,7 @@ th:
preview_preamble_html: "@%{acct} จะได้รับคำเตือนโดยมีเนื้อหาดังต่อไปนี้:"
record_strike_html: บันทึกการดำเนินการต่อ @%{acct} เพื่อช่วยให้คุณเลื่อนระดับการละเมิดในอนาคตจากบัญชีนี้
send_email_html: ส่งอีเมลคำเตือนถึง @%{acct}
- warning_placeholder: การให้เหตุผลเพิ่มเติมที่ไม่จำเป็นสำหรับการกระทำการควบคุม
+ warning_placeholder: การให้เหตุผลเพิ่มเติมที่ไม่จำเป็นสำหรับการกระทำการกลั่นกรอง
target_origin: จุดเริ่มต้นของบัญชีที่ได้รับการรายงาน
title: รายงาน
unassign: เลิกมอบหมาย
@@ -660,7 +660,7 @@ th:
administration: การดูแล
devops: DevOps
invites: คำเชิญ
- moderation: การควบคุม
+ moderation: การกลั่นกรอง
special: พิเศษ
delete: ลบ
description_html: ด้วย บทบาทผู้ใช้ คุณสามารถปรับแต่งว่าฟังก์ชันและพื้นที่ใดของ Mastodon ที่ผู้ใช้ของคุณสามารถเข้าถึง
@@ -679,7 +679,7 @@ th:
manage_announcements: จัดการประกาศ
manage_announcements_description: อนุญาตให้ผู้ใช้จัดการประกาศในเซิร์ฟเวอร์
manage_appeals: จัดการการอุทธรณ์
- manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการควบคุม
+ manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการกลั่นกรอง
manage_blocks: จัดการการปิดกั้น
manage_blocks_description: อนุญาตให้ผู้ใช้ปิดกั้นผู้ให้บริการอีเมลและที่อยู่ IP
manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง
@@ -689,7 +689,7 @@ th:
manage_invites: จัดการคำเชิญ
manage_invites_description: อนุญาตให้ผู้ใช้เรียกดูและปิดใช้งานลิงก์เชิญ
manage_reports: จัดการรายงาน
- manage_reports_description: อนุญาตให้ผู้ใช้ตรวจทานรายงานและทำการกระทำการควบคุมต่อรายงานเหล่านั้น
+ manage_reports_description: อนุญาตให้ผู้ใช้ตรวจทานรายงานและทำการกระทำการกลั่นกรองต่อรายงานเหล่านั้น
manage_roles: จัดการบทบาท
manage_roles_description: อนุญาตให้ผู้ใช้จัดการและกำหนดบทบาทที่ต่ำกว่าบทบาทของเขา
manage_rules: จัดการกฎ
@@ -701,7 +701,7 @@ th:
manage_user_access: จัดการการเข้าถึงของผู้ใช้
manage_user_access_description: อนุญาตให้ผู้ใช้ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยของผู้ใช้อื่น เปลี่ยนที่อยู่อีเมลของเขา และตั้งรหัสผ่านของเขาใหม่
manage_users: จัดการผู้ใช้
- manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการควบคุมต่อผู้ใช้เหล่านั้น
+ manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการกลั่นกรองต่อผู้ใช้เหล่านั้น
manage_webhooks: จัดการเว็บฮุค
manage_webhooks_description: อนุญาตให้ผู้ใช้ตั้งค่าเว็บฮุคสำหรับเหตุการณ์การดูแล
view_audit_log: ดูรายการบันทึกการตรวจสอบ
@@ -721,7 +721,7 @@ th:
settings:
about:
manage_rules: จัดการกฎของเซิร์ฟเวอร์
- preamble: ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่เซิร์ฟเวอร์ได้รับการดำเนินงาน ควบคุม ได้รับทุน
+ preamble: ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่เซิร์ฟเวอร์ได้รับการดำเนินงาน กลั่นกรอง ได้รับทุน
rules_hint: มีพื้นที่เฉพาะสำหรับกฎที่คาดหวังให้ผู้ใช้ของคุณปฏิบัติตาม
title: เกี่ยวกับ
appearance:
@@ -753,6 +753,7 @@ th:
disabled: ให้กับไม่มีใคร
users: ให้กับผู้ใช้ในเซิร์ฟเวอร์ที่เข้าสู่ระบบ
registrations:
+ moderation_recommandation: โปรดตรวจสอบให้แน่ใจว่าคุณมีทีมการกลั่นกรองที่เพียงพอและมีปฏิกิริยาตอบสนองก่อนที่คุณจะเปิดการลงทะเบียนให้กับทุกคน!
preamble: ควบคุมผู้ที่สามารถสร้างบัญชีในเซิร์ฟเวอร์ของคุณ
title: การลงทะเบียน
registrations_mode:
@@ -760,6 +761,7 @@ th:
approved: ต้องการการอนุมัติสำหรับการลงทะเบียน
none: ไม่มีใครสามารถลงทะเบียน
open: ใครก็ตามสามารถลงทะเบียน
+ warning_hint: เราแนะนำให้ใช้ “ต้องการการอนุมัติสำหรับการลงทะเบียน” เว้นแต่คุณมั่นใจว่าทีมการกลั่นกรองของคุณสามารถจัดการกับสแปมและการลงทะเบียนที่เป็นอันตรายได้อย่างทันท่วงที
security:
authorized_fetch: ต้องมีการรับรองความถูกต้องจากเซิร์ฟเวอร์ที่ติดต่อกับภายนอก
authorized_fetch_hint: การต้องการการรับรองความถูกต้องจากเซิร์ฟเวอร์ที่ติดต่อกับภายนอกทำให้การบังคับใช้การปิดกั้นทั้งระดับผู้ใช้และระดับเซิร์ฟเวอร์เข้มงวดขึ้น อย่างไรก็ตาม สิ่งนี้มาพร้อมกับต้นทุนที่ต้องแลกด้วยผลเสียด้านประสิทธิภาพ ลดการเข้าถึงการตอบกลับของคุณ และอาจก่อให้เกิดปัญหาความเข้ากันได้กับบริการที่ติดต่อกับภายนอกบางอย่าง นอกจากนี้ สิ่งนี้จะไม่ป้องกันตัวดำเนินการเฉพาะจากการดึงข้อมูลโพสต์และบัญชีสาธารณะของคุณ
@@ -771,7 +773,7 @@ th:
destroyed_msg: ลบการอัปโหลดไซต์สำเร็จ!
software_updates:
critical_update: สำคัญ — โปรดอัปเดตอย่างรวดเร็ว
- description: ขอแนะนำให้ทำให้การติดตั้ง Mastodon ของคุณทันสมัยอยู่เสมอเพื่อรับประโยชน์จากการแก้ไขและคุณลักษณะล่าสุด ยิ่งไปกว่านั้น บางครั้งก็เป็นสิ่งสำคัญที่จะอัปเดต Mastodon ในเวลาที่เหมาะสมเพื่อหลีกเลี่ยงปัญหาความปลอดภัย ด้วยเหตุผลเหล่านี้ Mastodon จึงตรวจสอบการอัปเดตทุก 30 นาที และจะแจ้งเตือนคุณตามการกำหนดลักษณะการแจ้งเตือนอีเมลของคุณ
+ description: ขอแนะนำให้ทำให้การติดตั้ง Mastodon ของคุณทันสมัยอยู่เสมอเพื่อรับประโยชน์จากการแก้ไขและคุณลักษณะล่าสุด ยิ่งไปกว่านั้น บางครั้งก็เป็นสิ่งสำคัญที่จะอัปเดต Mastodon อย่างทันท่วงทีเพื่อหลีกเลี่ยงปัญหาความปลอดภัย ด้วยเหตุผลเหล่านี้ Mastodon จึงตรวจสอบการอัปเดตทุก 30 นาที และจะแจ้งเตือนคุณตามการกำหนดลักษณะการแจ้งเตือนอีเมลของคุณ
documentation_link: เรียนรู้เพิ่มเติม
release_notes: บันทึกประจำรุ่น
title: การอัปเดตที่พร้อมใช้งาน
@@ -948,6 +950,9 @@ th:
title: เว็บฮุค
webhook: เว็บฮุค
admin_mailer:
+ auto_close_registrations:
+ body: เนื่องจากการขาดกิจกรรมของผู้กลั่นกรองล่าสุด จึงมีการสลับการลงทะเบียนใน %{instance} เป็นการต้องการการตรวจทานด้วยตนเองโดยอัตโนมัติ เพื่อป้องกันไม่ให้มีการใช้ %{instance} เป็นแพลตฟอร์มสำหรับผู้ไม่ประสงค์ดี คุณสามารถสลับการลงทะเบียนกลับเป็นการลงทะเบียนแบบเปิดเมื่อใดก็ได้
+ subject: มีการสลับการลงทะเบียนสำหรับ %{instance} เป็นการต้องการการอนุมัติโดยอัตโนมัติ
new_appeal:
actions:
delete_statuses: เพื่อลบโพสต์ของเขา
@@ -957,9 +962,9 @@ th:
sensitive: เพื่อทำเครื่องหมายบัญชีของเขาว่าละเอียดอ่อน
silence: เพื่อจำกัดบัญชีของเขา
suspend: เพื่อระงับบัญชีของเขา
- body: "%{target} กำลังอุทธรณ์การตัดสินใจในการควบคุมโดย %{action_taken_by} จาก %{date} ซึ่งเป็น %{type} เขาเขียนว่า:"
- next_steps: คุณสามารถอนุมัติการอุทธรณ์เพื่อเลิกทำการตัดสินใจในการควบคุม หรือเพิกเฉยต่อการอุทธรณ์
- subject: "%{username} กำลังอุทธรณ์การตัดสินใจในการควบคุมใน %{instance}"
+ body: "%{target} กำลังอุทธรณ์การตัดสินใจในการกลั่นกรองโดย %{action_taken_by} จาก %{date} ซึ่งก็คือ %{type} เขาเขียนว่า:"
+ next_steps: คุณสามารถอนุมัติการอุทธรณ์เพื่อเลิกทำการตัดสินใจในการกลั่นกรอง หรือเพิกเฉยต่อการอุทธรณ์
+ subject: "%{username} กำลังอุทธรณ์การตัดสินใจในการกลั่นกรองใน %{instance}"
new_critical_software_updates:
body: มีการปล่อยรุ่น Mastodon สำคัญใหม่ คุณอาจต้องการอัปเดตโดยเร็วที่สุดเท่าที่จะเป็นไปได้!
subject: การอัปเดต Mastodon สำคัญพร้อมใช้งานสำหรับ %{instance}!
@@ -1067,8 +1072,8 @@ th:
accept: ยอมรับ
back: ย้อนกลับ
invited_by: 'คุณสามารถเข้าร่วม %{domain} ได้ด้วยคำเชิญที่คุณได้รับจาก:'
- preamble: มีการตั้งและบังคับใช้กฎโดยผู้ควบคุมของ %{domain}
- preamble_invited: ก่อนที่คุณจะดำเนินการต่อ โปรดพิจารณากฎพื้นฐานที่ตั้งโดยผู้ควบคุมของ %{domain}
+ preamble: มีการตั้งและบังคับใช้กฎโดยผู้กลั่นกรองของ %{domain}
+ preamble_invited: ก่อนที่คุณจะดำเนินการต่อ โปรดพิจารณากฎพื้นฐานที่ตั้งโดยผู้กลั่นกรองของ %{domain}
title: กฎพื้นฐานบางประการ
title_invited: คุณได้รับการเชิญ
security: ความปลอดภัย
@@ -1083,7 +1088,7 @@ th:
preamble_html: เข้าสู่ระบบด้วยข้อมูลประจำตัว %{domain} ของคุณ หากบัญชีของคุณได้รับการโฮสต์ในเซิร์ฟเวอร์อื่น คุณจะไม่สามารถเข้าสู่ระบบได้ที่นี่
title: เข้าสู่ระบบ %{domain}
sign_up:
- manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้ควบคุมของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain}
+ manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้กลั่นกรองของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain}
preamble: ด้วยบัญชีในเซิร์ฟเวอร์ Mastodon นี้ คุณจะสามารถติดตามบุคคลอื่นใดในเครือข่าย โดยไม่คำนึงถึงที่ซึ่งบัญชีของเขาได้รับการโฮสต์
title: มาตั้งค่าของคุณใน %{domain} กันเลย
status:
@@ -1364,7 +1369,7 @@ th:
webauthn: กุญแจความปลอดภัย
description_html: หากคุณเห็นกิจกรรมที่คุณไม่รู้จัก พิจารณาเปลี่ยนรหัสผ่านของคุณและเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัย
empty: ไม่มีประวัติการรับรองความถูกต้อง
- failed_sign_in_html: ความพยายามลงชื่อเข้าด้วย %{method} จาก %{ip} (%{browser}) ล้มเหลว
+ failed_sign_in_html: ความพยายามในการลงชื่อเข้าด้วย %{method} จาก %{ip} (%{browser}) ล้มเหลว
successful_sign_in_html: ลงชื่อเข้าด้วย %{method} จาก %{ip} (%{browser}) สำเร็จ
title: ประวัติการรับรองความถูกต้อง
mail_subscriptions:
@@ -1419,7 +1424,7 @@ th:
other_data: จะไม่ย้ายข้อมูลอื่น ๆ โดยอัตโนมัติ
redirect: จะอัปเดตโปรไฟล์ของบัญชีปัจจุบันของคุณด้วยข้อสังเกตการเปลี่ยนเส้นทางและจะไม่รวมอยู่ในการค้นหา
moderation:
- title: การควบคุม
+ title: การกลั่นกรอง
move_handler:
carry_blocks_over_text: ผู้ใช้นี้ได้ย้ายจาก %{acct} ซึ่งคุณได้ปิดกั้น
carry_mutes_over_text: ผู้ใช้นี้ได้ย้ายจาก %{acct} ซึ่งคุณได้ซ่อน
@@ -1520,6 +1525,9 @@ th:
errors:
limit_reached: ถึงขีดจำกัดของการตอบสนองต่าง ๆ แล้ว
unrecognized_emoji: ไม่ใช่อีโมจิที่รู้จัก
+ redirects:
+ prompt: หากคุณเชื่อถือลิงก์นี้ ให้คลิกลิงก์เพื่อดำเนินการต่อ
+ title: คุณกำลังจะออกจาก %{instance}
relationships:
activity: กิจกรรมบัญชี
confirm_follow_selected_followers: คุณแน่ใจหรือไม่ว่าต้องการติดตามผู้ติดตามที่เลือก?
@@ -1624,7 +1632,7 @@ th:
profile: โปรไฟล์สาธารณะ
relationships: การติดตามและผู้ติดตาม
statuses_cleanup: การลบโพสต์แบบอัตโนมัติ
- strikes: การดำเนินการการควบคุม
+ strikes: การดำเนินการการกลั่นกรอง
two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย
webauthn_authentication: กุญแจความปลอดภัย
statuses:
@@ -1758,6 +1766,12 @@ th:
extra: ตอนนี้ข้อมูลสำรองพร้อมสำหรับการดาวน์โหลดแล้ว!
subject: การเก็บถาวรของคุณพร้อมสำหรับการดาวน์โหลดแล้ว
title: การส่งออกการเก็บถาวร
+ failed_2fa:
+ details: 'นี่คือรายละเอียดของความพยายามในการลงชื่อเข้า:'
+ explanation: ใครสักคนได้ลองลงชื่อเข้าบัญชีของคุณแต่ให้การรับรองความถูกต้องด้วยปัจจัยที่สองที่ไม่ถูกต้อง
+ further_actions_html: หากนี่ไม่ใช่คุณ เราแนะนำให้คุณ %{action} ทันทีเนื่องจากอาจมีการบุกรุกบัญชี
+ subject: ความล้มเหลวการรับรองความถูกต้องด้วยปัจจัยที่สอง
+ title: การรับรองความถูกต้องด้วยปัจจัยที่สองล้มเหลว
suspicious_sign_in:
change_password: เปลี่ยนรหัสผ่านของคุณ
details: 'นี่คือรายละเอียดของการลงชื่อเข้า:'
@@ -1772,9 +1786,9 @@ th:
spam: สแปม
violation: เนื้อหาละเมิดหลักเกณฑ์ชุมชนดังต่อไปนี้
explanation:
- delete_statuses: มีการพบว่าโพสต์บางส่วนของคุณละเมิดหลักเกณฑ์ชุมชนจำนวนหนึ่งหรือมากกว่าและได้รับการเอาออกโดยผู้ควบคุมของ %{instance} ในเวลาต่อมา
+ delete_statuses: มีการพบว่าโพสต์บางส่วนของคุณละเมิดหลักเกณฑ์ชุมชนจำนวนหนึ่งหรือมากกว่าและได้รับการเอาออกโดยผู้กลั่นกรองของ %{instance} ในเวลาต่อมา
disable: คุณไม่สามารถใช้บัญชีของคุณได้อีกต่อไป แต่โปรไฟล์และข้อมูลอื่น ๆ ของคุณยังคงอยู่ในสภาพเดิม คุณสามารถขอข้อมูลสำรองของข้อมูลของคุณ เปลี่ยนการตั้งค่าบัญชี หรือลบบัญชีของคุณ
- mark_statuses_as_sensitive: ทำเครื่องหมายโพสต์บางส่วนของคุณว่าละเอียดอ่อนโดยผู้ควบคุมของ %{instance} แล้ว นี่หมายความว่าผู้คนจะต้องแตะสื่อในโพสต์ก่อนที่จะแสดงตัวอย่าง คุณสามารถทำเครื่องหมายสื่อว่าละเอียดอ่อนด้วยตัวคุณเองเมื่อโพสต์ในอนาคต
+ mark_statuses_as_sensitive: ทำเครื่องหมายโพสต์บางส่วนของคุณว่าละเอียดอ่อนโดยผู้กลั่นกรองของ %{instance} แล้ว นี่หมายความว่าผู้คนจะต้องแตะสื่อในโพสต์ก่อนที่จะแสดงตัวอย่าง คุณสามารถทำเครื่องหมายสื่อว่าละเอียดอ่อนด้วยตัวคุณเองเมื่อโพสต์ในอนาคต
sensitive: จากนี้ไป จะทำเครื่องหมายไฟล์สื่อที่อัปโหลดทั้งหมดของคุณว่าละเอียดอ่อนและซ่อนอยู่หลังการคลิกไปยังคำเตือน
silence: คุณยังคงสามารถใช้บัญชีของคุณแต่เฉพาะผู้คนที่กำลังติดตามคุณอยู่แล้วเท่านั้นที่จะเห็นโพสต์ของคุณในเซิร์ฟเวอร์นี้ และอาจไม่รวมคุณอยู่ในคุณลักษณะการค้นพบต่าง ๆ อย่างไรก็ตาม ผู้อื่นอาจยังติดตามคุณด้วยตนเอง
suspend: คุณไม่สามารถใช้บัญชีของคุณได้อีกต่อไป และจะไม่สามารถเข้าถึงโปรไฟล์และข้อมูลอื่น ๆ ของคุณได้อีกต่อไป คุณยังคงสามารถเข้าสู่ระบบเพื่อขอข้อมูลสำรองของข้อมูลของคุณจนกว่าจะเอาข้อมูลออกอย่างสมบูรณ์ในเวลาประมาณ 30 วัน แต่เราจะเก็บรักษาข้อมูลพื้นฐานบางอย่างไว้เพื่อป้องกันไม่ให้คุณหลบเลี่ยงการระงับ
@@ -1800,10 +1814,6 @@ th:
edit_profile_action: ตั้งค่าโปรไฟล์
edit_profile_step: คุณสามารถปรับแต่งโปรไฟล์ของคุณได้โดยอัปโหลดรูปภาพโปรไฟล์ เปลี่ยนชื่อที่แสดงของคุณ และอื่น ๆ คุณสามารถเลือกรับการตรวจทานผู้ติดตามใหม่ก่อนที่จะอนุญาตให้เขาติดตามคุณ
explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน
- final_action: เริ่มโพสต์
- final_step: 'เริ่มโพสต์! แม้ว่าไม่มีผู้ติดตาม โพสต์สาธารณะของคุณอาจเห็นโดยผู้อื่น ตัวอย่างเช่น ในเส้นเวลาในเซิร์ฟเวอร์หรือในแฮชแท็ก คุณอาจต้องการแนะนำตัวเองในแฮชแท็ก #introductions'
- full_handle: นามเต็มของคุณ
- full_handle_hint: นี่คือสิ่งที่คุณจะบอกเพื่อน ๆ ของคุณเพื่อให้เขาสามารถส่งข้อความหรือติดตามคุณจากเซิร์ฟเวอร์อื่น
subject: ยินดีต้อนรับสู่ Mastodon
title: ยินดีต้อนรับ %{name}!
users:
diff --git a/config/locales/tok.yml b/config/locales/tok.yml
new file mode 100644
index 0000000000..9f962d2b53
--- /dev/null
+++ b/config/locales/tok.yml
@@ -0,0 +1,5 @@
+---
+tok:
+ admin:
+ accounts:
+ are_you_sure: ni li pona ala pona?
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index b3a52715b7..7dbec9abbd 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -10,7 +10,7 @@ tr:
follow: Takip et
followers:
one: Takipçi
- other: Takipçi
+ other: Takipçiler
following: Takip ediliyor
instance_actor_flash: Bu hesap, herhangi bir bireysel kullanıcı değil, sunucunun kendisini temsil etmek için kullanılan sanal bir aktördür. Birleştirme amacıyla kullanılmaktadır ve askıya alınmamalıdır.
last_active: son etkinlik
@@ -767,6 +767,7 @@ tr:
disabled: Hiç kimseye
users: Oturum açan yerel kullanıcılara
registrations:
+ moderation_recommandation: Lütfen kayıtları herkese açmadan önce yeterli ve duyarlı bir denetleyici ekibine sahip olduğunuzdan emin olun!
preamble: Sunucunuzda kimin hesap oluşturabileceğini denetleyin.
title: Kayıtlar
registrations_mode:
@@ -774,6 +775,7 @@ tr:
approved: Kayıt için onay gerekli
none: Hiç kimse kayıt olamaz
open: Herkes kaydolabilir
+ warning_hint: Denetleyici ekibinizin istenmeyen ve kötü niyetli kayıtları ele alabilecekleri konusunda emin değilseniz "Kayıt için onay gerekli" seçeneğini kullanmanızı öneririz.
security:
authorized_fetch: Dağıtık sunuculardan kimlik doğrulama gerektir
authorized_fetch_hint: Dağıtık sunuculardan kimlik doğrulaması istemek, hem kullanıcı düzeyinde hem de sunucu düzeyinde blokların daha sıkı bir şekilde uygulanmasını sağlar. Ancak bu performans kaybına sebep olur, yanıtlarınızın erişimini azaltır ve bazı dağıtık hizmetlerle uyumluluk sorunları ortaya çıkarabilir. Ayrıca bu, özel aktörlerin herkese açık gönderilerinizi ve hesaplarınızı getirilmesini engellemez.
@@ -966,6 +968,9 @@ tr:
title: Web kancaları
webhook: Web kancası
admin_mailer:
+ auto_close_registrations:
+ body: Son zamanlardaki denetleyi faaliyeti eksikliğinden dolayı, %{instance} üzerindeki kayıtlar, %{instance} sunucusunun olası kötü aktörler tarafından bir platform olarak kullanımını engellemek için otomatik olarak elle onay gerektirecek şekilde değiştirilmiştir. İstediğiniz zaman açık kayıtlara çevirebilirsiniz.
+ subject: "%{instance} üzerindeki kayıtlar otomatik olarak onay gerektirecek şekilde değiştirilmiştir"
new_appeal:
actions:
delete_statuses: gönderilerini silme
@@ -1201,8 +1206,8 @@ tr:
'406': Bu sayfa istenen formatta mevcut değil.
'410': Aradığınız sayfa artık yok.
'422':
- content: Güvenlik doğrulaması başarısız oldu. Site cookie'lerini engellemiş olabilirsiniz.
- title: Güvenlik doğrulamasu başarısız
+ content: Güvenlik doğrulaması başarısız oldu. Site çerezlerini engellemiş olabilirmisiniz?
+ title: Güvenlik doğrulaması başarısız
'429': Kısıtlandı
'500':
content: Üzgünüz, ancak bir şey ters gitti.
@@ -1243,15 +1248,15 @@ tr:
add_keyword: Anahtar sözcük ekle
keywords: Anahtar Sözcükler
statuses: Tekil gönderiler
- statuses_hint_html: Bu filtre, aşağıdaki anahtar kelimelerle eşleşip eşleşmediklerinden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Filtredeki gönderileri inceleyin veya kaldırın.
- title: Filtreyi düzenle
+ statuses_hint_html: Bu süzgeçlere, aşağıdaki anahtar kelimelerle eşleşip eşleşmediklerinden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Süzgeçlerdeki gönderileri inceleyin veya kaldırın.
+ title: Süzgeci düzenle
errors:
- deprecated_api_multiple_keywords: Bu parametreler, birden fazla filtre anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın.
+ deprecated_api_multiple_keywords: Bu parametreler, birden fazla süzgeç anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın.
invalid_context: Sıfır ya da geçersiz içerik sağlandı
index:
contexts: "%{contexts} içindeki filtreler"
delete: Sil
- empty: Hiç filtreniz yok.
+ empty: Hiç süzgeciniz yok.
expires_in: "%{distance} sürede sona eriyor"
expires_on: "%{date} tarihinde sona eriyor"
keywords:
@@ -1263,16 +1268,16 @@ tr:
statuses_long:
one: "%{count} tekil gönderi gizli"
other: "%{count} tekil gönderi gizli"
- title: Filtreler
+ title: Süzgeçler
new:
- save: Yeni filtre kaydet
- title: Yeni filtre ekle
+ save: Yeni süzgeç kaydet
+ title: Yeni süzgeç ekle
statuses:
- back_to_filter: Filtreye dön
+ back_to_filter: Süzgeçe dön
batch:
- remove: Filtreden kaldır
+ remove: Süzgeçden kaldır
index:
- hint: Bu filtre diğer ölçütlerden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Web arayüzünü kullanarak bu filtreye daha fazla gönderi ekleyebilirsiniz.
+ hint: Bu süzgece diğer ölçütlerden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Web arayüzünü kullanarak bu süzgece daha fazla gönderi ekleyebilirsiniz.
title: Süzgeçlenmiş gönderiler
generic:
all: Tümü
@@ -1480,8 +1485,8 @@ tr:
subject: Anket %{name} tarafından sonlandırıldı
reblog:
body: "%{name} durumunuzu boostladı:"
- subject: "%{name} durumunuzu boostladı"
- title: Yeni boost
+ subject: "%{name} durumunuzu paylaştı"
+ title: Yeni paylaşım
status:
subject: "%{name} az önce gönderdi"
update:
@@ -1544,7 +1549,7 @@ tr:
title: Gizlilik Politikası
reactions:
errors:
- limit_reached: Farklı reaksiyonların sınırına ulaşıldı
+ limit_reached: Farklı tepkilerin sınırına ulaşıldı
unrecognized_emoji: tanınan bir emoji değil
redirects:
prompt: Eğer bu bağlantıya güveniyorsanız, tıklayıp devam edebilirsiniz.
@@ -1663,17 +1668,17 @@ tr:
other: "%{count} ses"
description: 'Ekli: %{attached}'
image:
- one: "%{count} resim"
- other: "%{count} resim"
+ one: "%{count} görsel"
+ other: "%{count} görseller"
video:
one: "%{count} video"
- other: "%{count} video"
- boosted_from_html: "%{acct_link} kişisinden boostladı"
+ other: "%{count} videolar"
+ boosted_from_html: "%{acct_link} kişisinden paylaştı"
content_warning: 'İçerik uyarısı: %{warning}'
default_language: Arayüz diliyle aynı
disallowed_hashtags:
one: 'izin verilmeyen bir etiket içeriyordu: %{tags}'
- other: 'izin verilmeyen hashtag''leri içeriyordu: %{tags}'
+ other: 'izin verilmeyen etiketler içeriyordu: %{tags}'
edited_at_html: "%{date} tarihinde düzenlendi"
errors:
in_reply_not_found: Yanıtlamaya çalıştığınız durum yok gibi görünüyor.
@@ -1683,14 +1688,14 @@ tr:
direct: Sadece değinilen kullanıcıların görebileceği gönderiler üstte tutulamaz
limit: Halihazırda maksimum sayıda gönderi sabitlediniz
ownership: Başkasının gönderisi sabitlenemez
- reblog: Bir boost sabitlenemez
+ reblog: Bir gönderi sabitlenemez
poll:
total_people:
one: "%{count} kişi"
- other: "%{count} kişi"
+ other: "%{count} kişiler"
total_votes:
one: "%{count} oy"
- other: "%{count} oy"
+ other: "%{count} oylar"
vote: Oy Ver
show_more: Daha fazlasını göster
show_newer: Yenileri göster
@@ -1756,7 +1761,7 @@ tr:
default: "%d %b %Y %H:%M"
month: "%b %Y"
time: "%H:%M"
- with_time_zone: "%d.%m.%Y %H:%M %Z"
+ with_time_zone: "%b %d, %Y, %H:%M %Z"
translation:
errors:
quota_exceeded: Çeviri hizmetinin sunucu kapsamındaki kullanım kotası aşıldı.
@@ -1774,7 +1779,7 @@ tr:
otp: Authenticator uygulaması
recovery_codes: Kurtarma kodlarını yedekle
recovery_codes_regenerated: Kurtarma kodları başarıyla yeniden oluşturuldu
- recovery_instructions_html: 'Eğer telefonunuza erişiminizi kaybederseniz, aşağıdaki kurtarma kodlarından birini kullanarak hesabınıza giriş yapabilirsiniz. Kurtarma kodlarınızı güvenli halde tutunuz. Örneğin: kodların çıktısını alıp diğer önemli belgeleriniz ile birlikte saklayabilirsiniz.'
+ recovery_instructions_html: 'Eğer telefonunuza erişiminizi kaybederseniz, aşağıdaki kurtarma kodlarından birini kullanarak hesabınıza giriş yapabilirsiniz. Kurtarma kodlarınızı güvenli halde tutunuz. Örneğin: kodların çıktısını alıp diğer önemli belgeleriniz ile birlikte saklayabilirsiniz.'
webauthn: Güvenlik anahtarları
user_mailer:
appeal_approved:
@@ -1841,10 +1846,6 @@ tr:
edit_profile_action: Profil kurulumu
edit_profile_step: Bir profil resmi yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Sizi takip etmelerine izin verilmeden önce yeni takipçileri incelemeyi tercih edebilirsiniz.
explanation: İşte sana başlangıç için birkaç ipucu
- final_action: Gönderi yazmaya başlayın
- final_step: 'Gönderi yazmaya başlayın! Takipçiler olmadan bile, herkese açık gönderileriniz başkaları tarafından görülebilir, örneğin yerel zaman tünelinde veya etiketlerde. Kendinizi #introductions etiketinde tanıtmak isteyebilirsiniz.'
- full_handle: Tanıtıcınız
- full_handle_hint: Arkadaşlarınıza, size başka bir sunucudan mesaj atabilmeleri veya sizi takip edebilmeleri için söyleyeceğiniz şey budur.
subject: Mastodon'a hoş geldiniz
title: Gemiye hoşgeldin, %{name}!
users:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 531bdb3d59..7273a0ff2b 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -795,6 +795,7 @@ uk:
disabled: Нікого
users: Для авторизованих локальних користувачів
registrations:
+ moderation_recommandation: Переконайтеся, що у вас є адекватна і швидка команда модерації, перш ніж ви відкриєте реєстрацію для всіх!
preamble: Контролюйте, хто може створити обліковий запис на вашому сервері.
title: Реєстрації
registrations_mode:
@@ -802,6 +803,7 @@ uk:
approved: Для входу потрібне схвалення
none: Ніхто не може увійти
open: Будь-хто може увійти
+ warning_hint: Радимо використовувати "Обов'язкове затвердження", якщо ви не впевнені, що ваша команда модерації може вчасно обробляти спам та зловмисні реєстрації.
security:
authorized_fetch: Вимагати аутентифікацію з федеративних серверів
authorized_fetch_hint: Вимога автентифікації від федеративних серверів забезпечує суворіше застосування блокування як на рівні користувача, так і на рівні сервера. Однак це призводить до зниження продуктивності, зменшує охоплення ваших відповідей і може спричинити проблеми сумісності з деякими федеративними сервісами. Крім того, це не завадить зловмисникам отримувати ваші загальнодоступні дописи та облікові записи.
@@ -1002,6 +1004,9 @@ uk:
title: Вебхуки
webhook: Вебхук
admin_mailer:
+ auto_close_registrations:
+ body: Через нестачу нещодавньої активності модератора реєстрація на %{instance} автоматично перемкнута на обов'язковий розгляд вручну, для запобігання використанню %{instance} платформою для потенційних зловмисників. Ви можете будь-коли перемкнутися на відкриту реєстрацію.
+ subject: Реєстрації для %{instance} автоматично перейшли на такі, що вимагають схвалення
new_appeal:
actions:
delete_statuses: щоб видалити їхні дописи
@@ -1845,14 +1850,24 @@ uk:
action: Налаштування облікового запису
explanation: Оскарження попередження вашому обліковому запису %{strike_date}, яке ви надіслали %{appeal_date} було схвалено. Ваш обліковий запис знову вважається добропорядним.
subject: Вашу апеляцію від %{date} було схвалено
+ subtitle: Ваш обліковий запис знову готовий до користування.
title: Апеляцію схвалено
appeal_rejected:
explanation: Оскарження попередження вашому обліковому запису %{strike_date}, яке ви надіслали %{appeal_date} було відхилено.
subject: Вашу апеляцію від %{date} було відхилено
+ subtitle: Вашу апеляцію відхилено.
title: Апеляцію відхилено
backup_ready:
+ explanation: Ви просили про створення резервної копії вашого облікового запису Mastodon.
+ extra: Вона готова до завантаження!
subject: Ваш архів готовий до завантаження
title: Винесення архіву
+ failed_2fa:
+ details: 'Подробиці спроби входу:'
+ explanation: Хтось намагався ввійти у ваш обліковий запис, але надав недійсний другий фактор автентифікації.
+ further_actions_html: Якщо це не ви, ми радимо вам негайно %{action}, оскільки обліковий запис може бути скомпрометованим.
+ subject: Помилка другого фактору автентифікації
+ title: Помилка другого фактора автентифікації
suspicious_sign_in:
change_password: змінити свій пароль
details: 'Відомості про вхід:'
@@ -1895,10 +1910,6 @@ uk:
edit_profile_action: Налаштувати профіль
edit_profile_step: Ви можете налаштувати свій профіль, завантаживши зображення профілю, змінивши відображуване ім'я та інше. Ви можете включити для перегляду нових підписників до того, як вони матимуть змогу підписатися на вас.
explanation: Ось кілька порад для початку
- final_action: Почати писати
- final_step: 'Почніть дописувати! Навіть не підписавшись на вас, інші зможуть побачити ваші дописи, наприклад, у локальній стрічці та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.'
- full_handle: Ваше звернення
- full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів.
subject: Ласкаво просимо до Mastodon
title: Ласкаво просимо, %{name}!
users:
@@ -1906,7 +1917,7 @@ uk:
go_to_sso_account_settings: Перейдіть до налаштувань облікового запису постачальника ідентифікації
invalid_otp_token: Введено неправильний код
otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email}
- rate_limited: Занадто багато спроб з'єднання. Спробуйте ще раз пізніше.
+ rate_limited: Забагато спроб з'єднання. Спробуйте ще раз пізніше.
seamless_external_login: Ви увійшли за допомогою зовнішнього сервісу, тому налаштування паролю та електронної пошти недоступні.
signed_in_as: 'Ви увійшли як:'
verification:
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 045a000e38..e362c97a41 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -948,6 +948,9 @@ vi:
title: Webhook
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: Do gần đây thiếu kiểm duyệt viên nên việc đăng ký trên %{instance} sẽ tự động chuyển thành duyệt thủ công, để tránh %{instance} bị sử dụng làm nền tảng cho những kẻ xấu. Bạn có thể chuyển nó trở lại trạng thái đăng ký mở bất kỳ lúc nào.
+ subject: Đăng ký mới %{instance} đã được tự động chuyển sang duyệt thủ công
new_appeal:
actions:
delete_statuses: xóa tút của họ
@@ -1809,10 +1812,6 @@ vi:
edit_profile_action: Cài đặt trang hồ sơ
edit_profile_step: Bạn có thể chỉnh sửa trang hồ sơ của mình bằng cách tải lên ảnh đại diện, ảnh bìa, đổi biệt danh và hơn thế nữa. Bạn cũng có thể tự phê duyệt những người theo dõi mới.
explanation: Dưới đây là một số mẹo để giúp bạn bắt đầu
- final_action: Soạn tút mới
- final_step: 'Viết tút mới! Ngay cả khi chưa có người theo dõi, người khác vẫn có thể xem tút công khai của bạn trên bảng tin máy chủ và qua hashtag. Hãy giới thiệu bản thân với hashtag #introductions.'
- full_handle: Tên đầy đủ của bạn
- full_handle_hint: Đây cũng là địa chỉ được dùng để giao tiếp với tất cả mọi người.
subject: Chào mừng đến với Mastodon
title: Xin chào %{name}!
users:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index d1255bfefe..46a0e40152 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -753,6 +753,7 @@ zh-CN:
disabled: 不对任何人
users: 对本地已登录用户
registrations:
+ moderation_recommandation: 在向所有人开放注册之前,请确保您拥有一个人手足够且反应迅速的管理团队!
preamble: 控制谁可以在你的服务器上创建账号。
title: 注册
registrations_mode:
@@ -760,6 +761,7 @@ zh-CN:
approved: 注册时需要批准
none: 关闭注册
open: 开放注册
+ warning_hint: 我们建议使用“注册必须经过批准”,除非您确信您的管理团队能够及时处理骚扰和恶意注册。
security:
authorized_fetch: 需要跨站认证
authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账户。
@@ -772,13 +774,13 @@ zh-CN:
software_updates:
critical_update: 紧急 — 请尽快更新
description: 建议您及时更新Mastodon实例,以便获得最新修复和功能。此外,为避免安全问题,有时候及时更新Mastodon是至关重要的。出于这些原因,Mastodon每30分钟检查一次更新,并根据您的电子邮件通知偏好向您发送通知。
- documentation_link: 了解详情
- release_notes: 更新日志
+ documentation_link: 详细了解
+ release_notes: 发行说明
title: 可用的更新
type: 类型
types:
- major: 大版本更新
- minor: 小版本更新
+ major: 重大更新
+ minor: 次要更新
patch: 补丁级更新 - 修复了错误并进行了易于应用的更改
version: 版本
statuses:
@@ -948,6 +950,9 @@ zh-CN:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: 由于近期缺乏管理员活动, %{instance} 上的注册已自动切换为需要手动审核,以防止 %{instance} 被潜在的不良行为者用作平台。您可以随时将其切换回开放注册。
+ subject: "%{instance} 的注册已自动切换为需要批准"
new_appeal:
actions:
delete_statuses: 删除其嘟文
@@ -1809,10 +1814,6 @@ zh-CN:
edit_profile_action: 设置个人资料
edit_profile_step: 您可以通过上传个人资料图片、更改您的昵称等来自定义您的个人资料。 您可以选择在新关注者关注您之前对其进行审核。
explanation: 下面是几个小贴士,希望它们能帮到你
- final_action: 开始嘟嘟
- final_step: '开始发布嘟文! 即使没有关注者,您的公开嘟文也可能会被其他人看到,例如在本地时间轴或话题标签中。 您可能想在 #introductions 话题标签上介绍自己。'
- full_handle: 你的完整用户地址
- full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一台服务器向你发送信息或者关注你。
subject: 欢迎来到 Mastodon
title: "%{name},欢迎你的加入!"
users:
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index b010a75c04..e666e4965d 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -1809,10 +1809,6 @@ zh-HK:
edit_profile_action: 設定個人資料
edit_profile_step: 你可以透過上傳頭像、更改顯示名稱等來自訂個人檔案。你可以選擇讓新使用者追蹤你之前先審查他們。
explanation: 下面是幾個小貼士,希望它們能幫到你
- final_action: 開始發文
- final_step: '開始發文吧!即使你沒有追蹤者,其他人仍然能在本站時間軸或標籤等地方,看到你的公開帖文。試着用 #introductions 標籤來介紹自己吧。'
- full_handle: 你的完整 Mastodon 地址
- full_handle_hint: 這訊息將顯示給你朋友們,讓他們能從另一個服務站發信息給你,或者關注你的。
subject: 歡迎來到 Mastodon (萬象)
title: 歡迎 %{name} 加入!
users:
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 7fe60541e6..3cd3583830 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -755,6 +755,7 @@ zh-TW:
disabled: 給沒有人
users: 套用至所有登入的本站使用者
registrations:
+ moderation_recommandation: 對所有人開放註冊之前,請確保您有人手充足且反應靈敏的管理員團隊!
preamble: 控制誰能於您伺服器上建立帳號。
title: 註冊
registrations_mode:
@@ -762,6 +763,7 @@ zh-TW:
approved: 註冊需要審核
none: 沒有人可註冊
open: 任何人皆能註冊
+ warning_hint: 建議您使用「需要審核註冊」除非您相信您的管理員團隊能即時處理垃圾訊息與惡意帳號註冊。
security:
authorized_fetch: 要求自聯邦宇宙伺服器之驗證
authorized_fetch_hint: 要求聯邦宇宙伺服器進行驗證將更嚴格地執行使用者層級及伺服器層級之封鎖。然而,這將會帶來一些性能損失、減少您的回嘟觸及量、並可能會引入與某些聯邦宇宙伺服器之相容性問題。 此外,這無法阻止專門服務抓取您的公開嘟文及帳號資料。
@@ -779,7 +781,7 @@ zh-TW:
title: 可取得的更新
type: 類型
types:
- major: 主要版本更新 (major release)
+ major: 主要版本更新
minor: 次要版本更新 (minor release)
patch: 修正版本 (patch release) — 錯誤修正及易於套用之變更
version: 版本
@@ -950,6 +952,9 @@ zh-TW:
title: Webhooks
webhook: Webhook
admin_mailer:
+ auto_close_registrations:
+ body: 由於近日缺少管理員活動,%{instance} 上之註冊已自動切換為需要人工審核,以防止 %{instance} 被作為潛在不良行為者之跳板。您隨時能將其切換回開放註冊。
+ subject: "%{instance} 之註冊已自動切換為需要審核"
new_appeal:
actions:
delete_statuses: 要刪除他們的嘟文
@@ -1811,10 +1816,6 @@ zh-TW:
edit_profile_action: 設定個人檔案
edit_profile_step: 您可以設定您的個人檔案,包括上傳大頭貼、變更顯示名稱等等。您也可以選擇於新的跟隨者跟隨前,先對他們進行審核。
explanation: 以下是幾個小技巧,希望它們能幫到您
- final_action: 開始嘟嘟
- final_step: '開始嘟嘟吧!即使您現在沒有跟隨者,其他人仍然能於本站時間軸、主題標籤等地方,看到您的公開嘟文。試著用 #introductions 這個主題標籤介紹一下自己吧。'
- full_handle: 您的完整帳號名稱
- full_handle_hint: 您需要將這告訴您的朋友們,這樣他們就能從另一個伺服器向您發送訊息或跟隨您。
subject: 歡迎來到 Mastodon
title: "%{name} 誠摯歡迎您的加入!"
users:
diff --git a/config/routes.rb b/config/routes.rb
index bb088821fd..51c10a14f6 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'sidekiq_unique_jobs/web'
+require 'sidekiq_unique_jobs/web' if ENV['ENABLE_SIDEKIQ_UNIQUE_JOBS_UI'] == true
require 'sidekiq-scheduler/web'
class RedirectWithVary < ActionDispatch::Routing::PathRedirect
diff --git a/config/settings.yml b/config/settings.yml
index 67297c26ce..208c8e3760 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -9,7 +9,7 @@ defaults: &defaults
site_terms: ''
site_contact_username: ''
site_contact_email: ''
- registrations_mode: 'open'
+ registrations_mode: 'none'
profile_directory: true
closed_registrations_message: ''
timeline_preview: true
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 3f9cbd9a7a..488c2f2ab3 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -63,3 +63,7 @@
interval: 30 minutes
class: Scheduler::SoftwareUpdateCheckScheduler
queue: scheduler
+ auto_close_registrations_scheduler:
+ interval: 1 hour
+ class: Scheduler::AutoCloseRegistrationsScheduler
+ queue: scheduler
diff --git a/db/migrate/20161006213403_rails_settings_migration.rb b/db/migrate/20161006213403_rails_settings_migration.rb
index 401b7a83b7..9764196fab 100644
--- a/db/migrate/20161006213403_rails_settings_migration.rb
+++ b/db/migrate/20161006213403_rails_settings_migration.rb
@@ -1,12 +1,6 @@
# frozen_string_literal: true
-MIGRATION_BASE_CLASS = if ActiveRecord::VERSION::MAJOR >= 5
- ActiveRecord::Migration[5.0]
- else
- ActiveRecord::Migration[4.2]
- end
-
-class RailsSettingsMigration < MIGRATION_BASE_CLASS
+class RailsSettingsMigration < ActiveRecord::Migration[5.0]
def self.up
create_table :settings do |t|
t.string :var, null: false
diff --git a/db/migrate/20170317193015_add_search_index_to_accounts.rb b/db/migrate/20170317193015_add_search_index_to_accounts.rb
index e29da61b15..0edc381549 100644
--- a/db/migrate/20170317193015_add_search_index_to_accounts.rb
+++ b/db/migrate/20170317193015_add_search_index_to_accounts.rb
@@ -2,7 +2,17 @@
class AddSearchIndexToAccounts < ActiveRecord::Migration[5.0]
def up
- execute 'CREATE INDEX search_index ON accounts USING gin((setweight(to_tsvector(\'simple\', accounts.display_name), \'A\') || setweight(to_tsvector(\'simple\', accounts.username), \'B\') || setweight(to_tsvector(\'simple\', coalesce(accounts.domain, \'\')), \'C\')));'
+ execute <<~SQL.squish
+ CREATE INDEX search_index
+ ON accounts
+ USING gin(
+ (
+ setweight(to_tsvector('simple', accounts.display_name), 'A') ||
+ setweight(to_tsvector('simple', accounts.username), 'B') ||
+ setweight(to_tsvector('simple', coalesce(accounts.domain, '')), 'C')
+ )
+ )
+ SQL
end
def down
diff --git a/db/migrate/20170918125918_ids_to_bigints.rb b/db/migrate/20170918125918_ids_to_bigints.rb
index 83c5ab971b..64f1d0093a 100644
--- a/db/migrate/20170918125918_ids_to_bigints.rb
+++ b/db/migrate/20170918125918_ids_to_bigints.rb
@@ -7,80 +7,73 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
include Mastodon::MigrationHelpers
include Mastodon::MigrationWarning
+ TABLE_COLUMN_MAPPING = [
+ [:account_domain_blocks, :account_id],
+ [:account_domain_blocks, :id],
+ [:accounts, :id],
+ [:blocks, :account_id],
+ [:blocks, :id],
+ [:blocks, :target_account_id],
+ [:conversation_mutes, :account_id],
+ [:conversation_mutes, :id],
+ [:domain_blocks, :id],
+ [:favourites, :account_id],
+ [:favourites, :id],
+ [:favourites, :status_id],
+ [:follow_requests, :account_id],
+ [:follow_requests, :id],
+ [:follow_requests, :target_account_id],
+ [:follows, :account_id],
+ [:follows, :id],
+ [:follows, :target_account_id],
+ [:imports, :account_id],
+ [:imports, :id],
+ [:media_attachments, :account_id],
+ [:media_attachments, :id],
+ [:mentions, :account_id],
+ [:mentions, :id],
+ [:mutes, :account_id],
+ [:mutes, :id],
+ [:mutes, :target_account_id],
+ [:notifications, :account_id],
+ [:notifications, :from_account_id],
+ [:notifications, :id],
+ [:oauth_access_grants, :application_id],
+ [:oauth_access_grants, :id],
+ [:oauth_access_grants, :resource_owner_id],
+ [:oauth_access_tokens, :application_id],
+ [:oauth_access_tokens, :id],
+ [:oauth_access_tokens, :resource_owner_id],
+ [:oauth_applications, :id],
+ [:oauth_applications, :owner_id],
+ [:reports, :account_id],
+ [:reports, :action_taken_by_account_id],
+ [:reports, :id],
+ [:reports, :target_account_id],
+ [:session_activations, :access_token_id],
+ [:session_activations, :user_id],
+ [:session_activations, :web_push_subscription_id],
+ [:settings, :id],
+ [:settings, :thing_id],
+ [:statuses, :account_id],
+ [:statuses, :application_id],
+ [:statuses, :in_reply_to_account_id],
+ [:stream_entries, :account_id],
+ [:stream_entries, :id],
+ [:subscriptions, :account_id],
+ [:subscriptions, :id],
+ [:tags, :id],
+ [:users, :account_id],
+ [:users, :id],
+ [:web_settings, :id],
+ [:web_settings, :user_id],
+ ].freeze
+
disable_ddl_transaction!
def migrate_columns(to_type)
- included_columns = [
- [:account_domain_blocks, :account_id],
- [:account_domain_blocks, :id],
- [:accounts, :id],
- [:blocks, :account_id],
- [:blocks, :id],
- [:blocks, :target_account_id],
- [:conversation_mutes, :account_id],
- [:conversation_mutes, :id],
- [:domain_blocks, :id],
- [:favourites, :account_id],
- [:favourites, :id],
- [:favourites, :status_id],
- [:follow_requests, :account_id],
- [:follow_requests, :id],
- [:follow_requests, :target_account_id],
- [:follows, :account_id],
- [:follows, :id],
- [:follows, :target_account_id],
- [:imports, :account_id],
- [:imports, :id],
- [:media_attachments, :account_id],
- [:media_attachments, :id],
- [:mentions, :account_id],
- [:mentions, :id],
- [:mutes, :account_id],
- [:mutes, :id],
- [:mutes, :target_account_id],
- [:notifications, :account_id],
- [:notifications, :from_account_id],
- [:notifications, :id],
- [:oauth_access_grants, :application_id],
- [:oauth_access_grants, :id],
- [:oauth_access_grants, :resource_owner_id],
- [:oauth_access_tokens, :application_id],
- [:oauth_access_tokens, :id],
- [:oauth_access_tokens, :resource_owner_id],
- [:oauth_applications, :id],
- [:oauth_applications, :owner_id],
- [:reports, :account_id],
- [:reports, :action_taken_by_account_id],
- [:reports, :id],
- [:reports, :target_account_id],
- [:session_activations, :access_token_id],
- [:session_activations, :user_id],
- [:session_activations, :web_push_subscription_id],
- [:settings, :id],
- [:settings, :thing_id],
- [:statuses, :account_id],
- [:statuses, :application_id],
- [:statuses, :in_reply_to_account_id],
- [:stream_entries, :account_id],
- [:stream_entries, :id],
- [:subscriptions, :account_id],
- [:subscriptions, :id],
- [:tags, :id],
- [:users, :account_id],
- [:users, :id],
- [:web_settings, :id],
- [:web_settings, :user_id],
- ]
- included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
+ display_warning
- migration_duration_warning(<<~EXPLANATION)
- This migration has some sections that can be safely interrupted
- and restarted later, and will tell you when those are occurring.
-
- For more information, see https://github.com/mastodon/mastodon/pull/5088
- EXPLANATION
-
- tables = included_columns.map(&:first).uniq
table_sizes = {}
# Sort tables by their size
@@ -103,6 +96,25 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
end
end
+ def display_warning
+ migration_duration_warning(<<~EXPLANATION)
+ This migration has some sections that can be safely interrupted
+ and restarted later, and will tell you when those are occurring.
+
+ For more information, see https://github.com/mastodon/mastodon/pull/5088
+ EXPLANATION
+ end
+
+ def tables
+ included_columns.map(&:first).uniq
+ end
+
+ def included_columns
+ TABLE_COLUMN_MAPPING.dup.tap do |included_columns|
+ included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
+ end
+ end
+
def up
migrate_columns(:bigint)
end
diff --git a/db/migrate/20190715164535_add_instance_actor.rb b/db/migrate/20190715164535_add_instance_actor.rb
index 3785dc2553..6871b37bdf 100644
--- a/db/migrate/20190715164535_add_instance_actor.rb
+++ b/db/migrate/20190715164535_add_instance_actor.rb
@@ -5,6 +5,8 @@ class AddInstanceActor < ActiveRecord::Migration[5.2]
# Dummy class, to make migration possible across version changes
validates :username, uniqueness: { scope: :domain, case_sensitive: false }
+ INSTANCE_ACTOR_ID = -99
+
before_create :generate_keys
def generate_keys
@@ -15,10 +17,10 @@ class AddInstanceActor < ActiveRecord::Migration[5.2]
end
def up
- Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain)
+ Account.create!(id: Account::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain)
end
def down
- Account.find_by(id: -99, actor_type: 'Application').destroy!
+ Account.find_by(id: Account::INSTANCE_ACTOR_ID, actor_type: 'Application').destroy!
end
end
diff --git a/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb
index f2d3aa8ee8..02f073e14f 100644
--- a/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb
+++ b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb
@@ -9,9 +9,32 @@ class AddCaseInsensitiveIndexToTags < ActiveRecord::Migration[5.2]
redundant_tag_ids = row['ids'].split(',')[1..]
safety_assured do
- execute "UPDATE accounts_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM accounts_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)"
- execute "UPDATE statuses_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM statuses_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.status_id = t0.status_id)"
- execute "UPDATE featured_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM featured_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)"
+ execute <<~SQL.squish
+ UPDATE accounts_tags
+ AS t0
+ SET tag_id = #{canonical_tag_id}
+ WHERE
+ tag_id IN (#{redundant_tag_ids.join(', ')})
+ AND NOT EXISTS (SELECT t1.tag_id FROM accounts_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)
+ SQL
+
+ execute <<~SQL.squish
+ UPDATE statuses_tags
+ AS t0
+ SET tag_id = #{canonical_tag_id}
+ WHERE
+ tag_id IN (#{redundant_tag_ids.join(', ')})
+ AND NOT EXISTS (SELECT t1.tag_id FROM statuses_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.status_id = t0.status_id)
+ SQL
+
+ execute <<~SQL.squish
+ UPDATE featured_tags
+ AS t0
+ SET tag_id = #{canonical_tag_id}
+ WHERE
+ tag_id IN (#{redundant_tag_ids.join(', ')})
+ AND NOT EXISTS (SELECT t1.tag_id FROM featured_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)
+ SQL
end
Tag.where(id: redundant_tag_ids).in_batches.delete_all
diff --git a/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb
index 9b475966bb..90a1b1a5cf 100644
--- a/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb
+++ b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb
@@ -3,13 +3,26 @@
class FixCanonicalEmailBlocksForeignKey < ActiveRecord::Migration[6.1]
def up
safety_assured do
- execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id) ON DELETE CASCADE;'
+ execute <<~SQL.squish
+ ALTER TABLE canonical_email_blocks
+ DROP CONSTRAINT fk_rails_1ecb262096,
+ ADD CONSTRAINT fk_rails_1ecb262096
+ FOREIGN KEY (reference_account_id)
+ REFERENCES accounts(id)
+ ON DELETE CASCADE
+ SQL
end
end
def down
safety_assured do
- execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id);'
+ execute <<~SQL.squish
+ ALTER TABLE canonical_email_blocks
+ DROP CONSTRAINT fk_rails_1ecb262096,
+ ADD CONSTRAINT fk_rails_1ecb262096
+ FOREIGN KEY (reference_account_id)
+ REFERENCES accounts(id)
+ SQL
end
end
end
diff --git a/db/migrate/20220309213005_fix_reblog_deleted_at.rb b/db/migrate/20220309213005_fix_reblog_deleted_at.rb
index e3474beeb1..7fb9bff26c 100644
--- a/db/migrate/20220309213005_fix_reblog_deleted_at.rb
+++ b/db/migrate/20220309213005_fix_reblog_deleted_at.rb
@@ -4,7 +4,16 @@ class FixReblogDeletedAt < ActiveRecord::Migration[6.1]
disable_ddl_transaction!
def up
- safety_assured { execute 'UPDATE statuses s SET deleted_at = r.deleted_at FROM statuses r WHERE s.reblog_of_id = r.id AND r.deleted_at IS NOT NULL' }
+ safety_assured do
+ execute <<~SQL.squish
+ UPDATE statuses s
+ SET deleted_at = r.deleted_at
+ FROM statuses r
+ WHERE
+ s.reblog_of_id = r.id
+ AND r.deleted_at IS NOT NULL
+ SQL
+ end
end
def down; end
diff --git a/db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb b/db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb
index 00afee26d0..42dc37f08b 100644
--- a/db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb
+++ b/db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb
@@ -3,7 +3,9 @@
class MigrateSettingsToUserRoles < ActiveRecord::Migration[6.1]
disable_ddl_transaction!
- class UserRole < ApplicationRecord; end
+ class UserRole < ApplicationRecord
+ EVERYONE_ROLE_ID = -99
+ end
def up
process_role_everyone
@@ -17,7 +19,7 @@ class MigrateSettingsToUserRoles < ActiveRecord::Migration[6.1]
private
def process_role_everyone
- everyone_role = UserRole.find_by(id: -99)
+ everyone_role = UserRole.find_by(id: UserRole::EVERYONE_ROLE_ID)
return unless everyone_role
everyone_role.permissions &= ~::UserRole::FLAGS[:invite_users] unless min_invite_role == 'user'
diff --git a/db/seeds/02_instance_actor.rb b/db/seeds/02_instance_actor.rb
index 55e83e8a08..2b6befec0d 100644
--- a/db/seeds/02_instance_actor.rb
+++ b/db/seeds/02_instance_actor.rb
@@ -1,3 +1,3 @@
# frozen_string_literal: true
-Account.create_with(actor_type: 'Application', locked: true, username: 'mastodon.internal').find_or_create_by(id: -99)
+Account.create_with(actor_type: 'Application', locked: true, username: 'mastodon.internal').find_or_create_by(id: Account::INSTANCE_ACTOR_ID)
diff --git a/docker-compose.yml b/docker-compose.yml
index 93451d9611..154754d45f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -56,7 +56,7 @@ services:
web:
build: .
- image: ghcr.io/mastodon/mastodon:v4.2.0
+ image: ghcr.io/mastodon/mastodon:v4.2.7
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@@ -77,7 +77,7 @@ services:
streaming:
build: .
- image: ghcr.io/mastodon/mastodon:v4.2.0
+ image: ghcr.io/mastodon/mastodon:v4.2.7
restart: always
env_file: .env.production
command: node ./streaming
@@ -95,7 +95,7 @@ services:
sidekiq:
build: .
- image: ghcr.io/mastodon/mastodon:v4.2.0
+ image: ghcr.io/mastodon/mastodon:v4.2.7
restart: always
env_file: .env.production
command: bundle exec sidekiq
diff --git a/jsconfig.json b/jsconfig.json
index 7b710de83c..d52816a98b 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -11,7 +11,7 @@
"noEmit": true,
"resolveJsonModule": true,
"strict": false,
- "target": "ES2022",
+ "target": "ES2022"
},
- "exclude": ["**/build/*", "**/node_modules/*", "**/public/*", "**/vendor/*"],
+ "exclude": ["**/build/*", "**/node_modules/*", "**/public/*", "**/vendor/*"]
}
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index dd7c84207e..1135ba0a17 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -17,7 +17,7 @@ module Mastodon
end
def default_prerelease
- 'alpha.1'
+ 'alpha.3'
end
def prerelease
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index f50ef4bbff..cb364b3021 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -544,6 +544,7 @@ namespace :mastodon do
owner_role = UserRole.find_by(name: 'Owner')
user = User.new(email: email, password: password, confirmed_at: Time.now.utc, account_attributes: { username: username }, bypass_invite_request_check: true, role: owner_role)
user.save(validate: false)
+ user.approve!
Setting.site_contact_username = username
diff --git a/lib/tasks/sidekiq_unique_jobs.rake b/lib/tasks/sidekiq_unique_jobs.rake
new file mode 100644
index 0000000000..bedc8fe4c6
--- /dev/null
+++ b/lib/tasks/sidekiq_unique_jobs.rake
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+namespace :sidekiq_unique_jobs do
+ task delete_all_locks: :environment do
+ digests = SidekiqUniqueJobs::Digests.new
+ digests.delete_by_pattern('*', count: digests.count)
+
+ expiring_digests = SidekiqUniqueJobs::ExpiringDigests.new
+ expiring_digests.delete_by_pattern('*', count: expiring_digests.count)
+ end
+end
diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake
index 885be79f41..935f6d24a3 100644
--- a/lib/tasks/tests.rake
+++ b/lib/tasks/tests.rake
@@ -50,7 +50,7 @@ namespace :tests do
exit(1)
end
- if Account.find(-99).private_key.blank?
+ if Account.find(Account::INSTANCE_ACTOR_ID).private_key.blank?
puts 'Instance actor does not have a private key'
exit(1)
end
diff --git a/package.json b/package.json
index d0b1b2e71c..9f20a981ae 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@mastodon/mastodon",
"license": "AGPL-3.0-or-later",
- "packageManager": "yarn@4.0.2",
+ "packageManager": "yarn@4.1.1",
"engines": {
"node": ">=18"
},
@@ -12,22 +12,18 @@
"scripts": {
"build:development": "cross-env RAILS_ENV=development NODE_ENV=development ./bin/webpack",
"build:production": "cross-env RAILS_ENV=production NODE_ENV=production ./bin/webpack",
- "fix:js": "yarn lint:js --fix",
- "fix:json": "prettier --write \"**/*.{json,json5}\"",
- "fix:md": "prettier --write \"**/*.md\"",
- "fix:sass": "stylelint --fix \"**/*.{css,scss}\" && prettier --write \"**/*.{css,scss}\"",
- "fix:yml": "prettier --write \"**/*.{yaml,yml}\"",
- "fix": "yarn fix:js && yarn fix:json && yarn fix:sass && yarn fix:yml",
+ "fix:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives --fix",
+ "fix:css": "stylelint --fix \"**/*.{css,scss}\"",
+ "fix": "yarn fix:js && yarn fix:css",
+ "format": "prettier --write --log-level warn .",
+ "format:check": "prettier --check --ignore-unknown .",
"i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' '--ignore=**/*.d.ts' --out-file app/javascript/mastodon/locales/en.json --format config/formatjs-formatter.js",
"jest": "cross-env NODE_ENV=test jest",
"lint:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives",
- "lint:json": "prettier --check \"**/*.{json,json5}\"",
- "lint:md": "prettier --check \"**/*.md\"",
- "lint:sass": "stylelint \"**/*.{css,scss}\" && prettier --check \"**/*.{css,scss}\"",
- "lint:yml": "prettier --check \"**/*.{yaml,yml}\"",
- "lint": "yarn lint:js && yarn lint:json && yarn lint:sass && yarn lint:yml",
+ "lint:css": "stylelint \"**/*.{css,scss}\"",
+ "lint": "yarn lint:js && yarn lint:css",
"postversion": "git push --tags",
- "prepare": "husky install",
+ "prepare": "husky",
"start": "node ./streaming/index.js",
"test": "yarn lint && yarn run typecheck && yarn jest",
"typecheck": "tsc --noEmit"
@@ -49,7 +45,7 @@
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@rails/ujs": "^7.1.1",
+ "@rails/ujs": "7.1.3-2",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
@@ -89,7 +85,6 @@
"mark-loader": "^0.1.6",
"marky": "^1.2.5",
"mini-css-extract-plugin": "^1.6.2",
- "mkdirp": "^3.0.1",
"path-complete-extname": "^1.0.0",
"postcss": "^8.4.24",
"postcss-loader": "^4.3.0",
@@ -118,7 +113,6 @@
"redux-immutable": "^4.0.0",
"regenerator-runtime": "^0.14.0",
"requestidlecallback": "^0.3.0",
- "rimraf": "^5.0.1",
"sass": "^1.62.1",
"sass-loader": "^10.2.0",
"stacktrace-js": "^2.0.2",
@@ -175,23 +169,20 @@
"@types/redux-immutable": "^4.0.3",
"@types/requestidlecallback": "^0.3.5",
"@types/webpack": "^4.41.33",
- "@types/yargs": "^17.0.24",
- "@typescript-eslint/eslint-plugin": "^6.0.0",
- "@typescript-eslint/parser": "^6.17.0",
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
+ "@typescript-eslint/parser": "^7.0.0",
"babel-jest": "^29.5.0",
"eslint": "^8.41.0",
- "eslint-config-prettier": "^9.0.0",
"eslint-define-config": "^2.0.0",
"eslint-import-resolver-typescript": "^3.5.5",
"eslint-plugin-formatjs": "^4.10.1",
"eslint-plugin-import": "~2.29.0",
"eslint-plugin-jsdoc": "^48.0.0",
"eslint-plugin-jsx-a11y": "~6.8.0",
- "eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-promise": "~6.1.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
- "husky": "^8.0.3",
+ "husky": "^9.0.11",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"lint-staged": "^15.0.0",
@@ -200,8 +191,7 @@
"stylelint": "^16.0.2",
"stylelint-config-standard-scss": "^13.0.0",
"typescript": "^5.0.4",
- "webpack-dev-server": "^3.11.3",
- "yargs": "^17.7.2"
+ "webpack-dev-server": "^3.11.3"
},
"resolutions": {
"kind-of": "^6.0.3",
diff --git a/public/embed.js b/public/embed.js
index defba403e4..f8e6a22db4 100644
--- a/public/embed.js
+++ b/public/embed.js
@@ -31,6 +31,8 @@
var iframe = iframes.get(data.id);
+ if(!iframe) return;
+
if ('source' in e && iframe.contentWindow !== e.source) {
return;
}
@@ -38,7 +40,7 @@
iframe.height = data.height;
});
- [].forEach.call(document.querySelectorAll('iframe.mastodon-embed'), function (iframe) {
+ document.querySelectorAll('iframe.mastodon-embed').forEach(iframe => {
// select unique id for each iframe
var id = 0, failCount = 0, idBuffer = new Uint32Array(1);
while (id === 0 || iframes.has(id)) {
diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb
index cf484ff5a4..11ef03c842 100644
--- a/spec/controllers/activitypub/collections_controller_spec.rb
+++ b/spec/controllers/activitypub/collections_controller_spec.rb
@@ -17,34 +17,27 @@ RSpec.describe ActivityPub::CollectionsController do
end
describe 'GET #show' do
- context 'when id is "featured"' do
- context 'without signature' do
- subject(:response) { get :show, params: { id: 'featured', account_username: account.username } }
+ subject(:response) { get :show, params: { id: id, account_username: account.username } }
- let(:body) { body_as_json }
+ context 'when id is "featured"' do
+ let(:id) { 'featured' }
+
+ context 'without signature' do
let(:remote_account) { nil }
- it 'returns http success' do
+ it 'returns http success and correct media type' do
expect(response).to have_http_status(200)
- end
-
- it 'returns application/activity+json' do
expect(response.media_type).to eq 'application/activity+json'
end
it_behaves_like 'cacheable response'
- it 'returns orderedItems with pinned statuses' do
- expect(body[:orderedItems]).to be_an Array
- expect(body[:orderedItems].size).to eq 3
- end
-
- it 'includes URI of private pinned status' do
- expect(body[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned))
- end
-
- it 'does not include contents of private pinned status' do
- expect(response.body).to_not include(private_pinned.text)
+ it 'returns orderedItems with correct items' do
+ expect(body_as_json[:orderedItems])
+ .to be_an(Array)
+ .and have_attributes(size: 3)
+ .and include(ActivityPub::TagManager.instance.uri_for(private_pinned))
+ .and not_include(private_pinned.text)
end
context 'when account is permanently suspended' do
@@ -73,33 +66,19 @@ RSpec.describe ActivityPub::CollectionsController do
let(:remote_account) { Fabricate(:account, domain: 'example.com') }
context 'when getting a featured resource' do
- before do
- get :show, params: { id: 'featured', account_username: account.username }
- end
-
- it 'returns http success' do
+ it 'returns http success and correct media type' do
expect(response).to have_http_status(200)
- end
-
- it 'returns application/activity+json' do
expect(response.media_type).to eq 'application/activity+json'
end
it_behaves_like 'cacheable response'
- it 'returns orderedItems with pinned statuses' do
- json = body_as_json
- expect(json[:orderedItems]).to be_an Array
- expect(json[:orderedItems].size).to eq 3
- end
-
- it 'includes URI of private pinned status' do
- json = body_as_json
- expect(json[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned))
- end
-
- it 'does not include contents of private pinned status' do
- expect(response.body).to_not include(private_pinned.text)
+ it 'returns orderedItems with expected items' do
+ expect(body_as_json[:orderedItems])
+ .to be_an(Array)
+ .and have_attributes(size: 3)
+ .and include(ActivityPub::TagManager.instance.uri_for(private_pinned))
+ .and not_include(private_pinned.text)
end
end
@@ -111,50 +90,36 @@ RSpec.describe ActivityPub::CollectionsController do
context 'when signed request account is blocked' do
before do
account.block!(remote_account)
- get :show, params: { id: 'featured', account_username: account.username }
end
- it 'returns http success' do
+ it 'returns http success and correct media type and cache headers' do
expect(response).to have_http_status(200)
- end
-
- it 'returns application/activity+json' do
expect(response.media_type).to eq 'application/activity+json'
- end
-
- it 'returns private Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'private'
end
it 'returns empty orderedItems' do
- json = body_as_json
- expect(json[:orderedItems]).to be_an Array
- expect(json[:orderedItems].size).to eq 0
+ expect(body_as_json[:orderedItems])
+ .to be_an(Array)
+ .and have_attributes(size: 0)
end
end
context 'when signed request account is domain blocked' do
before do
account.block_domain!(remote_account.domain)
- get :show, params: { id: 'featured', account_username: account.username }
end
- it 'returns http success' do
+ it 'returns http success and correct media type and cache headers' do
expect(response).to have_http_status(200)
- end
-
- it 'returns application/activity+json' do
expect(response.media_type).to eq 'application/activity+json'
- end
-
- it 'returns private Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'private'
end
it 'returns empty orderedItems' do
- json = body_as_json
- expect(json[:orderedItems]).to be_an Array
- expect(json[:orderedItems].size).to eq 0
+ expect(body_as_json[:orderedItems])
+ .to be_an(Array)
+ .and have_attributes(size: 0)
end
end
end
@@ -162,8 +127,9 @@ RSpec.describe ActivityPub::CollectionsController do
end
context 'when id is not "featured"' do
+ let(:id) { 'hoge' }
+
it 'returns http not found' do
- get :show, params: { id: 'hoge', account_username: account.username }
expect(response).to have_http_status(404)
end
end
diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb
index 6b5a69d42a..db7f60d3f8 100644
--- a/spec/controllers/activitypub/replies_controller_spec.rb
+++ b/spec/controllers/activitypub/replies_controller_spec.rb
@@ -90,7 +90,7 @@ RSpec.describe ActivityPub::RepliesController do
context 'when there are few self-replies' do
it 'points next to replies from other people' do
expect(page_json).to be_a Hash
- expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=true', 'page=true')
+ expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true')
end
end
@@ -101,7 +101,7 @@ RSpec.describe ActivityPub::RepliesController do
it 'points next to other self-replies' do
expect(page_json).to be_a Hash
- expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=false', 'page=true')
+ expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=false', 'page=true')
end
end
end
@@ -140,7 +140,7 @@ RSpec.describe ActivityPub::RepliesController do
it 'points next to other replies' do
expect(page_json).to be_a Hash
- expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=true', 'page=true')
+ expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true')
end
end
end
@@ -196,6 +196,13 @@ RSpec.describe ActivityPub::RepliesController do
private
+ def parsed_uri_query_values(uri)
+ Addressable::URI
+ .parse(uri)
+ .query
+ .split('&')
+ end
+
def ap_public_collection
ActivityPub::TagManager::COLLECTIONS[:public]
end
diff --git a/spec/controllers/admin/accounts_controller_spec.rb b/spec/controllers/admin/accounts_controller_spec.rb
index ef3053b6b3..b90bb414b0 100644
--- a/spec/controllers/admin/accounts_controller_spec.rb
+++ b/spec/controllers/admin/accounts_controller_spec.rb
@@ -9,18 +9,8 @@ RSpec.describe Admin::AccountsController do
describe 'GET #index' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
-
- around do |example|
- default_per_page = Account.default_per_page
- Account.paginates_per 1
- example.run
- Account.paginates_per default_per_page
- end
-
- it 'filters with parameters' do
- account_filter = instance_double(AccountFilter, results: Account.all)
- allow(AccountFilter).to receive(:new).and_return(account_filter)
- params = {
+ let(:params) do
+ {
origin: 'local',
by_domain: 'domain',
status: 'active',
@@ -29,25 +19,35 @@ RSpec.describe Admin::AccountsController do
email: 'local-part@domain',
ip: '0.0.0.42',
}
-
- get :index, params: params
-
- expect(AccountFilter).to have_received(:new).with(hash_including(params))
end
- it 'paginates accounts' do
+ around do |example|
+ default_per_page = Account.default_per_page
+ Account.paginates_per 1
+ example.run
+ Account.paginates_per default_per_page
+ end
+
+ before do
Fabricate(:account)
- get :index, params: { page: 2 }
-
- accounts = assigns(:accounts)
- expect(accounts.count).to eq 1
- expect(accounts.klass).to be Account
+ account_filter = instance_double(AccountFilter, results: Account.all)
+ allow(AccountFilter).to receive(:new).and_return(account_filter)
end
- it 'returns http success' do
- get :index
- expect(response).to have_http_status(200)
+ it 'returns success and paginates and filters with parameters' do
+ get :index, params: params.merge(page: 2)
+
+ expect(response)
+ .to have_http_status(200)
+ expect(assigns(:accounts))
+ .to have_attributes(
+ count: eq(1),
+ klass: be(Account)
+ )
+ expect(AccountFilter)
+ .to have_received(:new)
+ .with(hash_including(params))
end
end
diff --git a/spec/controllers/admin/disputes/appeals_controller_spec.rb b/spec/controllers/admin/disputes/appeals_controller_spec.rb
index f830c3b95c..bf7f9bd704 100644
--- a/spec/controllers/admin/disputes/appeals_controller_spec.rb
+++ b/spec/controllers/admin/disputes/appeals_controller_spec.rb
@@ -30,42 +30,48 @@ RSpec.describe Admin::Disputes::AppealsController do
end
describe 'POST #approve' do
+ subject { post :approve, params: { id: appeal.id } }
+
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- before do
- post :approve, params: { id: appeal.id }
- end
+ it 'redirects back to the strike page and notifies target account about approved appeal', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'unsuspends a suspended account' do
- expect(target_account.reload.suspended?).to be false
- end
+ expect(response)
+ .to redirect_to(disputes_strike_path(appeal.strike))
- it 'redirects back to the strike page' do
- expect(response).to redirect_to(disputes_strike_path(appeal.strike))
- end
+ expect(target_account.reload)
+ .to_not be_suspended
- it 'notifies target account about approved appeal', :sidekiq_inline do
- expect(UserMailer.deliveries.size).to eq(1)
- expect(UserMailer.deliveries.first.to.first).to eq(target_account.user.email)
- expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at)))
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(target_account.user.email),
+ subject: eq(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at)))
+ )
end
end
describe 'POST #reject' do
+ subject { post :reject, params: { id: appeal.id } }
+
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- before do
- post :reject, params: { id: appeal.id }
- end
+ it 'redirects back to the strike page and notifies target account about rejected appeal', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'redirects back to the strike page' do
- expect(response).to redirect_to(disputes_strike_path(appeal.strike))
- end
+ expect(response)
+ .to redirect_to(disputes_strike_path(appeal.strike))
- it 'notifies target account about rejected appeal', :sidekiq_inline do
- expect(UserMailer.deliveries.size).to eq(1)
- expect(UserMailer.deliveries.first.to.first).to eq(target_account.user.email)
- expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.appeal_rejected.subject', date: I18n.l(appeal.created_at)))
+ expect(emails.size)
+ .to eq(1)
+
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(target_account.user.email),
+ subject: eq(I18n.t('user_mailer.appeal_rejected.subject', date: I18n.l(appeal.created_at)))
+ )
end
end
end
diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb
index c8f566f68b..71748cbbec 100644
--- a/spec/controllers/admin/invites_controller_spec.rb
+++ b/spec/controllers/admin/invites_controller_spec.rb
@@ -44,14 +44,13 @@ describe Admin::InvitesController do
end
describe 'POST #deactivate_all' do
+ before { Fabricate(:invite, expires_at: nil) }
+
it 'expires all invites, then redirects to admin_invites_path' do
- invites = Fabricate.times(1, :invite, expires_at: nil)
-
- post :deactivate_all
-
- invites.each do |invite|
- expect(invite.reload).to be_expired
- end
+ expect { post :deactivate_all }
+ .to change { Invite.exists?(expires_at: nil) }
+ .from(true)
+ .to(false)
expect(response).to redirect_to admin_invites_path
end
diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb
index 97daaf8da9..02760154fb 100644
--- a/spec/controllers/admin/reports_controller_spec.rb
+++ b/spec/controllers/admin/reports_controller_spec.rb
@@ -58,6 +58,7 @@ describe Admin::ReportsController do
report.reload
expect(report.action_taken_by_account).to eq user.account
expect(report.action_taken?).to be true
+ expect(last_action_log.target).to eq(report)
end
end
@@ -70,6 +71,7 @@ describe Admin::ReportsController do
report.reload
expect(report.action_taken_by_account).to be_nil
expect(report.action_taken?).to be false
+ expect(last_action_log.target).to eq(report)
end
end
@@ -81,6 +83,7 @@ describe Admin::ReportsController do
expect(response).to redirect_to(admin_report_path(report))
report.reload
expect(report.assigned_account).to eq user.account
+ expect(last_action_log.target).to eq(report)
end
end
@@ -92,6 +95,13 @@ describe Admin::ReportsController do
expect(response).to redirect_to(admin_report_path(report))
report.reload
expect(report.assigned_account).to be_nil
+ expect(last_action_log.target).to eq(report)
end
end
+
+ private
+
+ def last_action_log
+ Admin::ActionLog.last
+ end
end
diff --git a/spec/controllers/admin/resets_controller_spec.rb b/spec/controllers/admin/resets_controller_spec.rb
index e82a3a6afa..10ed2cf969 100644
--- a/spec/controllers/admin/resets_controller_spec.rb
+++ b/spec/controllers/admin/resets_controller_spec.rb
@@ -5,6 +5,8 @@ require 'rails_helper'
describe Admin::ResetsController do
render_views
+ subject { post :create, params: { account_id: account.id } }
+
let(:account) { Fabricate(:account) }
before do
@@ -13,11 +15,11 @@ describe Admin::ResetsController do
describe 'POST #create', :sidekiq_inline do
it 'redirects to admin accounts page' do
- expect do
- post :create, params: { account_id: account.id }
- end.to change(Devise.mailer.deliveries, :size).by(2)
+ emails = capture_emails { subject }
- expect(Devise.mailer.deliveries).to have_attributes(
+ expect(emails.size)
+ .to eq(2)
+ expect(emails).to have_attributes(
first: have_attributes(
to: include(account.user.email),
subject: I18n.t('devise.mailer.password_change.subject')
diff --git a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb b/spec/controllers/api/v1/accounts/statuses_controller_spec.rb
deleted file mode 100644
index 9bf385c03d..0000000000
--- a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe Api::V1::Accounts::StatusesController do
- render_views
-
- let(:user) { Fabricate(:user) }
- let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') }
-
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'GET #index' do
- it 'returns expected headers', :aggregate_failures do
- Fabricate(:status, account: user.account)
- get :index, params: { account_id: user.account.id, limit: 1 }
-
- expect(response).to have_http_status(200)
- expect(response.headers['Link'].links.size).to eq(2)
- end
-
- context 'with only media' do
- it 'returns http success' do
- get :index, params: { account_id: user.account.id, only_media: true }
-
- expect(response).to have_http_status(200)
- end
- end
-
- context 'with exclude replies' do
- let!(:status) { Fabricate(:status, account: user.account) }
- let!(:status_self_reply) { Fabricate(:status, account: user.account, thread: status) }
-
- before do
- Fabricate(:status, account: user.account, thread: Fabricate(:status)) # Reply to another user
- get :index, params: { account_id: user.account.id, exclude_replies: true }
- end
-
- it 'returns posts along with self replies', :aggregate_failures do
- expect(response)
- .to have_http_status(200)
- expect(body_as_json)
- .to have_attributes(size: 2)
- .and contain_exactly(
- include(id: status.id.to_s),
- include(id: status_self_reply.id.to_s)
- )
- end
- end
-
- context 'with only own pinned' do
- before do
- Fabricate(:status_pin, account: user.account, status: Fabricate(:status, account: user.account))
- end
-
- it 'returns http success' do
- get :index, params: { account_id: user.account.id, pinned: true }
-
- expect(response).to have_http_status(200)
- end
- end
-
- context "with someone else's pinned statuses" do
- let(:account) { Fabricate(:account, username: 'bob', domain: 'example.com') }
- let(:status) { Fabricate(:status, account: account) }
- let(:private_status) { Fabricate(:status, account: account, visibility: :private) }
-
- before do
- Fabricate(:status_pin, account: account, status: status)
- Fabricate(:status_pin, account: account, status: private_status)
- end
-
- it 'returns http success' do
- get :index, params: { account_id: account.id, pinned: true }
- expect(response).to have_http_status(200)
- end
-
- context 'when user does not follow account' do
- it 'lists the public status only' do
- get :index, params: { account_id: account.id, pinned: true }
- json = body_as_json
- expect(json.map { |item| item[:id].to_i }).to eq [status.id]
- end
- end
-
- context 'when user follows account' do
- before do
- user.account.follow!(account)
- end
-
- it 'lists both the public and the private statuses' do
- get :index, params: { account_id: account.id, pinned: true }
- json = body_as_json
- expect(json.map { |item| item[:id].to_i }).to contain_exactly(status.id, private_status.id)
- end
- end
- end
- end
-end
diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb
index 0b7f02f590..75ab287652 100644
--- a/spec/controllers/auth/registrations_controller_spec.rb
+++ b/spec/controllers/auth/registrations_controller_spec.rb
@@ -44,27 +44,93 @@ RSpec.describe Auth::RegistrationsController do
end
end
- describe 'GET #update' do
- let(:user) { Fabricate(:user) }
+ describe 'PUT #update' do
+ let(:current_password) { 'current password' }
+ let(:user) { Fabricate(:user, password: current_password) }
before do
request.env['devise.mapping'] = Devise.mappings[:user]
sign_in(user, scope: :user)
- post :update
end
it 'returns http success' do
+ put :update
expect(response).to have_http_status(200)
end
it 'returns private cache control headers' do
+ put :update
expect(response.headers['Cache-Control']).to include('private, no-store')
end
+ it 'can update the user email' do
+ expect do
+ put :update, params: {
+ user: {
+ email: 'newemail@example.com',
+ current_password: current_password,
+ },
+ }
+ expect(response).to redirect_to(edit_user_registration_path)
+ end.to change { user.reload.unconfirmed_email }.to('newemail@example.com')
+ end
+
+ it 'requires the current password to update the email' do
+ expect do
+ put :update, params: {
+ user: {
+ email: 'newemail@example.com',
+ current_password: 'something',
+ },
+ }
+ expect(response).to have_http_status(200)
+ end.to_not(change { user.reload.unconfirmed_email })
+ end
+
+ it 'can update the user password' do
+ expect do
+ put :update, params: {
+ user: {
+ password: 'new password',
+ password_confirmation: 'new password',
+ current_password: current_password,
+ },
+ }
+ expect(response).to redirect_to(edit_user_registration_path)
+ end.to(change { user.reload.encrypted_password })
+ end
+
+ it 'requires the password confirmation' do
+ expect do
+ put :update, params: {
+ user: {
+ password: 'new password',
+ password_confirmation: 'something else',
+ current_password: current_password,
+ },
+ }
+ expect(response).to have_http_status(200)
+ end.to_not(change { user.reload.encrypted_password })
+ end
+
+ it 'requires the current password to update the password' do
+ expect do
+ put :update, params: {
+ user: {
+ password: 'new password',
+ password_confirmation: 'new password',
+ current_password: 'something',
+ },
+ }
+ expect(response).to have_http_status(200)
+ end.to_not(change { user.reload.encrypted_password })
+ end
+
context 'when suspended' do
let(:user) { Fabricate(:user, account_attributes: { username: 'test', suspended_at: Time.now.utc }) }
it 'returns http forbidden' do
+ put :update
expect(response).to have_http_status(403)
end
end
diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb
index b663f55afa..e78554ec7d 100644
--- a/spec/controllers/auth/sessions_controller_spec.rb
+++ b/spec/controllers/auth/sessions_controller_spec.rb
@@ -57,11 +57,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: 'pam_user1', password: '123456' } }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to be_instance_of(User)
end
end
@@ -71,11 +69,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: 'pam_user1', password: 'WRONGPW' } }
end
- it 'shows a login error' do
+ it 'shows a login error and does not log the user in' do
expect(flash[:alert]).to match I18n.t('devise.failure.invalid', authentication_keys: I18n.t('activerecord.attributes.user.email'))
- end
- it "doesn't log the user in" do
expect(controller.current_user).to be_nil
end
end
@@ -92,11 +88,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: user.email, password: '123456' } }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
end
end
@@ -110,16 +104,16 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: user.email, password: user.password } }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
end
end
context 'when using a valid password on a previously-used account with a new IP address' do
+ subject { post :create, params: { user: { email: user.email, password: user.password } } }
+
let(:previous_ip) { '1.2.3.4' }
let(:current_ip) { '4.3.2.1' }
@@ -127,21 +121,24 @@ RSpec.describe Auth::SessionsController do
Fabricate(:login_activity, user: user, ip: previous_ip)
allow(controller.request).to receive(:remote_ip).and_return(current_ip)
user.update(current_sign_in_at: 1.month.ago)
- post :create, params: { user: { email: user.email, password: user.password } }
end
- it 'redirects to home' do
- expect(response).to redirect_to(root_path)
- end
+ it 'logs the user in and sends suspicious email and redirects home', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'logs the user in' do
- expect(controller.current_user).to eq user
- end
+ expect(response)
+ .to redirect_to(root_path)
- it 'sends a suspicious sign-in mail', :sidekiq_inline do
- expect(UserMailer.deliveries.size).to eq(1)
- expect(UserMailer.deliveries.first.to.first).to eq(user.email)
- expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.suspicious_sign_in.subject'))
+ expect(controller.current_user)
+ .to eq user
+
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(user.email),
+ subject: eq(I18n.t('user_mailer.suspicious_sign_in.subject'))
+ )
end
end
@@ -150,11 +147,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: user.email.upcase, password: user.password } }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
end
end
@@ -164,11 +159,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { email: user.email, password: 'wrongpw' } }
end
- it 'shows a login error' do
+ it 'shows a login error and does not log the user in' do
expect(flash[:alert]).to match I18n.t('devise.failure.invalid', authentication_keys: I18n.t('activerecord.attributes.user.email'))
- end
- it "doesn't log the user in" do
expect(controller.current_user).to be_nil
end
end
@@ -270,29 +263,28 @@ RSpec.describe Auth::SessionsController do
travel_to '2023-12-20T10:00:00Z'
end
- it 'does not log the user in' do
- Auth::SessionsController::MAX_2FA_ATTEMPTS_PER_HOUR.times do
- post :create, params: { user: { otp_attempt: '1234' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
- expect(controller.current_user).to be_nil
+ it 'does not log the user in, sets a flash message, and sends a suspicious sign in email', :sidekiq_inline do
+ emails = capture_emails do
+ Auth::SessionsController::MAX_2FA_ATTEMPTS_PER_HOUR.times do
+ post :create, params: { user: { otp_attempt: '1234' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
+ expect(controller.current_user).to be_nil
+ end
+ post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
+ expect(controller.current_user)
+ .to be_nil
- expect(controller.current_user).to be_nil
- expect(flash[:alert]).to match I18n.t('users.rate_limited')
- end
+ expect(flash[:alert])
+ .to match I18n.t('users.rate_limited')
- it 'sends a suspicious sign-in mail', :sidekiq_inline do
- Auth::SessionsController::MAX_2FA_ATTEMPTS_PER_HOUR.times do
- post :create, params: { user: { otp_attempt: '1234' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
- expect(controller.current_user).to be_nil
- end
-
- post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
-
- expect(UserMailer.deliveries.size).to eq(1)
- expect(UserMailer.deliveries.first.to.first).to eq(user.email)
- expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.failed_2fa.subject'))
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(user.email),
+ subject: eq(I18n.t('user_mailer.failed_2fa.subject'))
+ )
end
end
@@ -301,11 +293,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
end
end
@@ -318,11 +308,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- it 'shows a login error' do
+ it 'shows a login error and does not log the user in' do
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
- end
- it "doesn't log the user in" do
expect(controller.current_user).to be_nil
end
end
@@ -332,11 +320,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- it 'redirects to home' do
+ it 'redirects to home and logs the user in' do
expect(response).to redirect_to(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
end
end
@@ -346,11 +332,9 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- it 'shows a login error' do
+ it 'shows a login error and does not log the user in' do
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
- end
- it "doesn't log the user in" do
expect(controller.current_user).to be_nil
end
end
@@ -417,15 +401,11 @@ RSpec.describe Auth::SessionsController do
post :create, params: { user: { credential: fake_credential } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
- it 'instructs the browser to redirect to home' do
+ it 'instructs the browser to redirect to home, logs the user in, and updates the sign count' do
expect(body_as_json[:redirect_path]).to eq(root_path)
- end
- it 'logs the user in' do
expect(controller.current_user).to eq user
- end
- it 'updates the sign count' do
expect(webauthn_credential.reload.sign_count).to eq(sign_count)
end
end
@@ -434,15 +414,17 @@ RSpec.describe Auth::SessionsController do
end
describe 'GET #webauthn_options' do
+ subject { get :webauthn_options, session: { attempt_user_id: user.id } }
+
+ let!(:user) do
+ Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
+ end
+
context 'with WebAuthn and OTP enabled as second factor' do
let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" }
let(:fake_client) { WebAuthn::FakeClient.new(domain) }
- let!(:user) do
- Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
- end
-
before do
user.update(webauthn_id: WebAuthn.generate_user_id)
public_key_credential = WebAuthn::Credential.from_create(fake_client.create)
@@ -456,9 +438,18 @@ RSpec.describe Auth::SessionsController do
end
it 'returns http success' do
- get :webauthn_options
+ subject
+
expect(response).to have_http_status 200
end
end
+
+ context 'when WebAuthn not enabled' do
+ it 'returns http unauthorized' do
+ subject
+
+ expect(response).to have_http_status 401
+ end
+ end
end
end
diff --git a/spec/controllers/custom_css_controller_spec.rb b/spec/controllers/custom_css_controller_spec.rb
index 99d36d21b9..405fa0bcf3 100644
--- a/spec/controllers/custom_css_controller_spec.rb
+++ b/spec/controllers/custom_css_controller_spec.rb
@@ -14,17 +14,6 @@ describe CustomCssController do
expect(response).to have_http_status(200)
end
- it 'returns public cache control header' do
- expect(response.headers['Cache-Control']).to include('public')
- end
-
- it 'does not set cookies' do
- expect(response.cookies).to be_empty
- expect(response.headers['Set-Cookies']).to be_nil
- end
-
- it 'does not set sessions' do
- expect(session).to be_empty
- end
+ it_behaves_like 'cacheable response'
end
end
diff --git a/spec/controllers/disputes/appeals_controller_spec.rb b/spec/controllers/disputes/appeals_controller_spec.rb
index da2f86ade5..99d5a8b17f 100644
--- a/spec/controllers/disputes/appeals_controller_spec.rb
+++ b/spec/controllers/disputes/appeals_controller_spec.rb
@@ -10,19 +10,23 @@ RSpec.describe Disputes::AppealsController do
let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
describe '#create' do
+ subject { post :create, params: params }
+
context 'with valid params' do
let(:current_user) { Fabricate(:user) }
let(:strike) { Fabricate(:account_warning, target_account: current_user.account) }
+ let(:params) { { strike_id: strike.id, appeal: { text: 'Foo' } } }
- before do
- post :create, params: { strike_id: strike.id, appeal: { text: 'Foo' } }
- end
+ it 'notifies staff about new appeal and redirects back to strike page', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'notifies staff about new appeal', :sidekiq_inline do
- expect(ActionMailer::Base.deliveries.first.to).to eq([admin.email])
- end
-
- it 'redirects back to the strike page' do
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(admin.email),
+ subject: eq(I18n.t('admin_mailer.new_appeal.subject', username: current_user.account.acct, instance: Rails.configuration.x.local_domain))
+ )
expect(response).to redirect_to(disputes_strike_path(strike.id))
end
end
@@ -30,16 +34,12 @@ RSpec.describe Disputes::AppealsController do
context 'with invalid params' do
let(:current_user) { Fabricate(:user) }
let(:strike) { Fabricate(:account_warning, target_account: current_user.account) }
+ let(:params) { { strike_id: strike.id, appeal: { text: '' } } }
- before do
- post :create, params: { strike_id: strike.id, appeal: { text: '' } }
- end
+ it 'does not send email and renders strike show page', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'does not send email', :sidekiq_inline do
- expect(ActionMailer::Base.deliveries.size).to eq(0)
- end
-
- it 'renders the strike show page' do
+ expect(emails).to be_empty
expect(response).to render_template('disputes/strikes/show')
end
end
diff --git a/spec/controllers/instance_actors_controller_spec.rb b/spec/controllers/instance_actors_controller_spec.rb
index 36b9049fbc..70aaff9d65 100644
--- a/spec/controllers/instance_actors_controller_spec.rb
+++ b/spec/controllers/instance_actors_controller_spec.rb
@@ -12,21 +12,18 @@ RSpec.describe InstanceActorsController do
get :show, params: { format: format }
end
- it 'returns http success with correct media type, headers, and session values' do
- expect(response).to have_http_status(200)
-
- expect(response.media_type).to eq 'application/activity+json'
-
- expect(response.cookies).to be_empty
- expect(response.headers['Set-Cookies']).to be_nil
-
- expect(session).to be_empty
-
- expect(response.headers['Cache-Control']).to include 'public'
+ it 'returns http success with correct media type and body' do
+ expect(response)
+ .to have_http_status(200)
+ .and have_attributes(
+ media_type: eq('application/activity+json')
+ )
expect(body_as_json)
.to include(:id, :type, :preferredUsername, :inbox, :publicKey, :inbox, :outbox, :url)
end
+
+ it_behaves_like 'cacheable response'
end
before do
diff --git a/spec/controllers/manifests_controller_spec.rb b/spec/controllers/manifests_controller_spec.rb
index d0699c438b..9279fae024 100644
--- a/spec/controllers/manifests_controller_spec.rb
+++ b/spec/controllers/manifests_controller_spec.rb
@@ -14,17 +14,6 @@ describe ManifestsController do
expect(response).to have_http_status(200)
end
- it 'returns public cache control header' do
- expect(response.headers['Cache-Control']).to include('public')
- end
-
- it 'does not set cookies' do
- expect(response.cookies).to be_empty
- expect(response.headers['Set-Cookies']).to be_nil
- end
-
- it 'does not set sessions' do
- expect(session).to be_empty
- end
+ it_behaves_like 'cacheable response'
end
end
diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb
index d41e707d43..2bb0c8de3b 100644
--- a/spec/controllers/tags_controller_spec.rb
+++ b/spec/controllers/tags_controller_spec.rb
@@ -20,13 +20,7 @@ RSpec.describe TagsController do
expect(response).to have_http_status(200)
end
- it 'returns Vary header' do
- expect(response.headers['Vary']).to eq 'Accept, Accept-Language, Cookie'
- end
-
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie'
end
context 'when requested as JSON' do
@@ -36,13 +30,7 @@ RSpec.describe TagsController do
expect(response).to have_http_status(200)
end
- it 'returns Vary header' do
- expect(response.headers['Vary']).to eq 'Accept, Accept-Language, Cookie'
- end
-
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie'
end
end
diff --git a/spec/fabricators/software_update_fabricator.rb b/spec/fabricators/software_update_fabricator.rb
index 622fff66e8..f4b607da0a 100644
--- a/spec/fabricators/software_update_fabricator.rb
+++ b/spec/fabricators/software_update_fabricator.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
Fabricator(:software_update) do
- version '99.99.99'
+ version { sequence(:version) { |point| "99.99.#{point}" } }
urgent false
type 'patch'
end
diff --git a/spec/features/admin/domain_blocks_spec.rb b/spec/features/admin/domain_blocks_spec.rb
index 6a1405cdf6..99aa7cf1a7 100644
--- a/spec/features/admin/domain_blocks_spec.rb
+++ b/spec/features/admin/domain_blocks_spec.rb
@@ -12,9 +12,7 @@ describe 'blocking domains through the moderation interface' do
it 'adds a new domain block' do
visit new_admin_domain_block_path
- fill_in 'domain_block_domain', with: 'example.com'
- select I18n.t('admin.domain_blocks.new.severity.silence'), from: 'domain_block_severity'
- click_on I18n.t('admin.domain_blocks.new.create')
+ submit_domain_block('example.com', 'silence')
expect(DomainBlock.exists?(domain: 'example.com', severity: 'silence')).to be true
expect(DomainBlockWorker).to have_received(:perform_async)
@@ -25,9 +23,7 @@ describe 'blocking domains through the moderation interface' do
it 'presents a confirmation screen before suspending the domain' do
visit new_admin_domain_block_path
- fill_in 'domain_block_domain', with: 'example.com'
- select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
- click_on I18n.t('admin.domain_blocks.new.create')
+ submit_domain_block('example.com', 'suspend')
# It doesn't immediately block but presents a confirmation screen
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
@@ -47,9 +43,7 @@ describe 'blocking domains through the moderation interface' do
visit new_admin_domain_block_path
- fill_in 'domain_block_domain', with: 'example.com'
- select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
- click_on I18n.t('admin.domain_blocks.new.create')
+ submit_domain_block('example.com', 'suspend')
# It doesn't immediately block but presents a confirmation screen
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
@@ -69,9 +63,7 @@ describe 'blocking domains through the moderation interface' do
visit new_admin_domain_block_path
- fill_in 'domain_block_domain', with: 'subdomain.example.com'
- select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
- click_on I18n.t('admin.domain_blocks.new.create')
+ submit_domain_block('subdomain.example.com', 'suspend')
# It doesn't immediately block but presents a confirmation screen
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))
@@ -84,8 +76,11 @@ describe 'blocking domains through the moderation interface' do
expect(DomainBlockWorker).to have_received(:perform_async)
# And leaves the previous block alone
- expect(domain_block.reload.severity).to eq 'silence'
- expect(domain_block.reload.domain).to eq 'example.com'
+ expect(domain_block.reload)
+ .to have_attributes(
+ severity: eq('silence'),
+ domain: eq('example.com')
+ )
end
end
@@ -109,4 +104,12 @@ describe 'blocking domains through the moderation interface' do
expect(domain_block.reload.severity).to eq 'suspend'
end
end
+
+ private
+
+ def submit_domain_block(domain, severity)
+ fill_in 'domain_block_domain', with: domain
+ select I18n.t("admin.domain_blocks.new.severity.#{severity}"), from: 'domain_block_severity'
+ click_on I18n.t('admin.domain_blocks.new.create')
+ end
end
diff --git a/spec/features/captcha_spec.rb b/spec/features/captcha_spec.rb
index 15c37eb463..06c823adf2 100644
--- a/spec/features/captcha_spec.rb
+++ b/spec/features/captcha_spec.rb
@@ -19,12 +19,10 @@ describe 'email confirmation flow when captcha is enabled' do
# It presents the user with a captcha form
expect(page).to have_title(I18n.t('auth.captcha_confirmation.title'))
- # It does not confirm the user just yet
- expect(user.reload.confirmed?).to be false
-
# It redirects to app and confirms user
- click_on I18n.t('challenge.confirm')
- expect(user.reload.confirmed?).to be true
+ expect { click_on I18n.t('challenge.confirm') }
+ .to change { user.reload.confirmed? }.from(false).to(true)
+
expect(page).to have_current_path(/\A#{client_app.confirmation_redirect_uri}/, url: true)
# Browsers will generally reload the original page upon redirection
@@ -32,8 +30,9 @@ describe 'email confirmation flow when captcha is enabled' do
visit "/auth/confirmation?confirmation_token=#{user.confirmation_token}&redirect_to_app=true"
# It presents a page with a link to the app callback
- expect(page).to have_content(I18n.t('auth.confirmations.registration_complete', domain: 'cb6e6126.ngrok.io'))
- expect(page).to have_link(I18n.t('auth.confirmations.clicking_this_link'), href: client_app.confirmation_redirect_uri)
+ expect(page)
+ .to have_content(I18n.t('auth.confirmations.registration_complete', domain: 'cb6e6126.ngrok.io'))
+ .and have_link(I18n.t('auth.confirmations.clicking_this_link'), href: client_app.confirmation_redirect_uri)
end
end
diff --git a/spec/fixtures/files/text.png b/spec/fixtures/files/text.png
new file mode 100644
index 0000000000..7463b54fd5
Binary files /dev/null and b/spec/fixtures/files/text.png differ
diff --git a/spec/helpers/json_ld_helper_spec.rb b/spec/helpers/json_ld_helper_spec.rb
index 99857278a1..4855085027 100644
--- a/spec/helpers/json_ld_helper_spec.rb
+++ b/spec/helpers/json_ld_helper_spec.rb
@@ -56,15 +56,15 @@ describe JsonLdHelper do
describe '#fetch_resource' do
context 'when the second argument is false' do
it 'returns resource even if the retrieved ID and the given URI does not match' do
- stub_request(:get, 'https://bob.test/').to_return body: '{"id": "https://alice.test/"}'
- stub_request(:get, 'https://alice.test/').to_return body: '{"id": "https://alice.test/"}'
+ stub_request(:get, 'https://bob.test/').to_return(body: '{"id": "https://alice.test/"}', headers: { 'Content-Type': 'application/activity+json' })
+ stub_request(:get, 'https://alice.test/').to_return(body: '{"id": "https://alice.test/"}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource('https://bob.test/', false)).to eq({ 'id' => 'https://alice.test/' })
end
it 'returns nil if the object identified by the given URI and the object identified by the retrieved ID does not match' do
- stub_request(:get, 'https://mallory.test/').to_return body: '{"id": "https://marvin.test/"}'
- stub_request(:get, 'https://marvin.test/').to_return body: '{"id": "https://alice.test/"}'
+ stub_request(:get, 'https://mallory.test/').to_return(body: '{"id": "https://marvin.test/"}', headers: { 'Content-Type': 'application/activity+json' })
+ stub_request(:get, 'https://marvin.test/').to_return(body: '{"id": "https://alice.test/"}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource('https://mallory.test/', false)).to be_nil
end
@@ -72,7 +72,7 @@ describe JsonLdHelper do
context 'when the second argument is true' do
it 'returns nil if the retrieved ID and the given URI does not match' do
- stub_request(:get, 'https://mallory.test/').to_return body: '{"id": "https://alice.test/"}'
+ stub_request(:get, 'https://mallory.test/').to_return(body: '{"id": "https://alice.test/"}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource('https://mallory.test/', true)).to be_nil
end
end
@@ -80,12 +80,12 @@ describe JsonLdHelper do
describe '#fetch_resource_without_id_validation' do
it 'returns nil if the status code is not 200' do
- stub_request(:get, 'https://host.test/').to_return status: 400, body: '{}'
+ stub_request(:get, 'https://host.test/').to_return(status: 400, body: '{}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource_without_id_validation('https://host.test/')).to be_nil
end
it 'returns hash' do
- stub_request(:get, 'https://host.test/').to_return status: 200, body: '{}'
+ stub_request(:get, 'https://host.test/').to_return(status: 200, body: '{}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource_without_id_validation('https://host.test/')).to eq({})
end
end
diff --git a/spec/lib/activitypub/activity/announce_spec.rb b/spec/lib/activitypub/activity/announce_spec.rb
index 8ad892975d..b556bfd6c2 100644
--- a/spec/lib/activitypub/activity/announce_spec.rb
+++ b/spec/lib/activitypub/activity/announce_spec.rb
@@ -35,7 +35,7 @@ RSpec.describe ActivityPub::Activity::Announce do
context 'when sender is followed by a local account' do
before do
Fabricate(:account).follow!(sender)
- stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
+ stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json), headers: { 'Content-Type': 'application/activity+json' })
subject.perform
end
@@ -120,7 +120,7 @@ RSpec.describe ActivityPub::Activity::Announce do
let(:object_json) { 'https://example.com/actor/hello-world' }
before do
- stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
+ stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json), headers: { 'Content-Type': 'application/activity+json' })
end
context 'when the relay is enabled' do
diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb
index e4966cffa3..dec17b916b 100644
--- a/spec/lib/activitypub/activity/create_spec.rb
+++ b/spec/lib/activitypub/activity/create_spec.rb
@@ -970,12 +970,15 @@ RSpec.describe ActivityPub::Activity::Create do
it 'creates an encrypted message' do
encrypted_message = target_device.encrypted_messages.reload.first
- expect(encrypted_message).to_not be_nil
- expect(encrypted_message.from_device_id).to eq '1234'
- expect(encrypted_message.from_account).to eq sender
- expect(encrypted_message.type).to eq 1
- expect(encrypted_message.body).to eq 'Foo'
- expect(encrypted_message.digest).to eq 'Foo123'
+ expect(encrypted_message)
+ .to be_present
+ .and have_attributes(
+ from_device_id: eq('1234'),
+ from_account: eq(sender),
+ type: eq(1),
+ body: eq('Foo'),
+ digest: eq('Foo123')
+ )
end
it 'creates a message franking' do
diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb
index 55e9b4bb51..05d2609b0d 100644
--- a/spec/lib/activitypub/tag_manager_spec.rb
+++ b/spec/lib/activitypub/tag_manager_spec.rb
@@ -52,20 +52,27 @@ RSpec.describe ActivityPub::TagManager do
expect(subject.to(status)).to include(subject.followers_uri_for(mentioned))
end
- it "returns URIs of mentions for direct silenced author's status only if they are followers or requesting to be" do
- bob = Fabricate(:account, username: 'bob')
- alice = Fabricate(:account, username: 'alice')
- foo = Fabricate(:account)
- author = Fabricate(:account, username: 'author', silenced: true)
- status = Fabricate(:status, visibility: :direct, account: author)
- bob.follow!(author)
- FollowRequest.create!(account: foo, target_account: author)
- status.mentions.create(account: alice)
- status.mentions.create(account: bob)
- status.mentions.create(account: foo)
- expect(subject.to(status)).to include(subject.uri_for(bob))
- expect(subject.to(status)).to include(subject.uri_for(foo))
- expect(subject.to(status)).to_not include(subject.uri_for(alice))
+ context 'with followers and requested followers' do
+ let!(:bob) { Fabricate(:account, username: 'bob') }
+ let!(:alice) { Fabricate(:account, username: 'alice') }
+ let!(:foo) { Fabricate(:account) }
+ let!(:author) { Fabricate(:account, username: 'author', silenced: true) }
+ let!(:status) { Fabricate(:status, visibility: :direct, account: author) }
+
+ before do
+ bob.follow!(author)
+ FollowRequest.create!(account: foo, target_account: author)
+ status.mentions.create(account: alice)
+ status.mentions.create(account: bob)
+ status.mentions.create(account: foo)
+ end
+
+ it "returns URIs of mentions for direct silenced author's status only if they are followers or requesting to be" do
+ expect(subject.to(status))
+ .to include(subject.uri_for(bob))
+ .and include(subject.uri_for(foo))
+ .and not_include(subject.uri_for(alice))
+ end
end
end
@@ -97,20 +104,27 @@ RSpec.describe ActivityPub::TagManager do
expect(subject.cc(status)).to include(subject.uri_for(mentioned))
end
- it "returns URIs of mentions for silenced author's non-direct status only if they are followers or requesting to be" do
- bob = Fabricate(:account, username: 'bob')
- alice = Fabricate(:account, username: 'alice')
- foo = Fabricate(:account)
- author = Fabricate(:account, username: 'author', silenced: true)
- status = Fabricate(:status, visibility: :public, account: author)
- bob.follow!(author)
- FollowRequest.create!(account: foo, target_account: author)
- status.mentions.create(account: alice)
- status.mentions.create(account: bob)
- status.mentions.create(account: foo)
- expect(subject.cc(status)).to include(subject.uri_for(bob))
- expect(subject.cc(status)).to include(subject.uri_for(foo))
- expect(subject.cc(status)).to_not include(subject.uri_for(alice))
+ context 'with followers and requested followers' do
+ let!(:bob) { Fabricate(:account, username: 'bob') }
+ let!(:alice) { Fabricate(:account, username: 'alice') }
+ let!(:foo) { Fabricate(:account) }
+ let!(:author) { Fabricate(:account, username: 'author', silenced: true) }
+ let!(:status) { Fabricate(:status, visibility: :public, account: author) }
+
+ before do
+ bob.follow!(author)
+ FollowRequest.create!(account: foo, target_account: author)
+ status.mentions.create(account: alice)
+ status.mentions.create(account: bob)
+ status.mentions.create(account: foo)
+ end
+
+ it "returns URIs of mentions for silenced author's non-direct status only if they are followers or requesting to be" do
+ expect(subject.cc(status))
+ .to include(subject.uri_for(bob))
+ .and include(subject.uri_for(foo))
+ .and not_include(subject.uri_for(alice))
+ end
end
it 'returns poster of reblogged post, if reblog' do
diff --git a/spec/lib/request_pool_spec.rb b/spec/lib/request_pool_spec.rb
index a31d078327..a82eb5a188 100644
--- a/spec/lib/request_pool_spec.rb
+++ b/spec/lib/request_pool_spec.rb
@@ -33,18 +33,14 @@ describe RequestPool do
subject
- threads = Array.new(5) do
- Thread.new do
- subject.with('http://example.com') do |http_client|
- http_client.get('/').flush
- # Nudge scheduler to yield and exercise the full pool
- sleep(0.01)
- end
+ multi_threaded_execution(5) do
+ subject.with('http://example.com') do |http_client|
+ http_client.get('/').flush
+ # Nudge scheduler to yield and exercise the full pool
+ sleep(0.01)
end
end
- threads.map(&:join)
-
expect(subject.size).to be > 1
end
diff --git a/spec/lib/signature_parser_spec.rb b/spec/lib/signature_parser_spec.rb
new file mode 100644
index 0000000000..08e9bea66c
--- /dev/null
+++ b/spec/lib/signature_parser_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe SignatureParser do
+ describe '.parse' do
+ subject { described_class.parse(header) }
+
+ context 'with Signature headers conforming to draft-cavage-http-signatures-12' do
+ let(:header) do
+ # This example signature string deliberately mixes uneven spacing
+ # and quoting styles to ensure everything is covered
+ 'keyId = "https://remote.domain/users/bob#main-key,",algorithm= rsa-sha256 , headers="host date digest (request-target)",signature="gmhMjgMROGElJU3fpehV2acD5kMHeELi8EFP2UPHOdQ54H0r55AxIpji+J3lPe+N2qSb/4H1KXIh6f0lRu8TGSsu12OQmg5hiO8VA9flcA/mh9Lpk+qwlQZIPRqKP9xUEfqD+Z7ti5wPzDKrWAUK/7FIqWgcT/mlqB1R1MGkpMFc/q4CIs2OSNiWgA4K+Kp21oQxzC2kUuYob04gAZ7cyE/FTia5t08uv6lVYFdRsn4XNPn1MsHgFBwBMRG79ng3SyhoG4PrqBEi5q2IdLq3zfre/M6He3wlCpyO2VJNdGVoTIzeZ0Zz8jUscPV3XtWUchpGclLGSaKaq/JyNZeiYQ=="' # rubocop:disable Layout/LineLength
+ end
+
+ it 'correctly parses the header' do
+ expect(subject).to eq({
+ 'keyId' => 'https://remote.domain/users/bob#main-key,',
+ 'algorithm' => 'rsa-sha256',
+ 'headers' => 'host date digest (request-target)',
+ 'signature' => 'gmhMjgMROGElJU3fpehV2acD5kMHeELi8EFP2UPHOdQ54H0r55AxIpji+J3lPe+N2qSb/4H1KXIh6f0lRu8TGSsu12OQmg5hiO8VA9flcA/mh9Lpk+qwlQZIPRqKP9xUEfqD+Z7ti5wPzDKrWAUK/7FIqWgcT/mlqB1R1MGkpMFc/q4CIs2OSNiWgA4K+Kp21oQxzC2kUuYob04gAZ7cyE/FTia5t08uv6lVYFdRsn4XNPn1MsHgFBwBMRG79ng3SyhoG4PrqBEi5q2IdLq3zfre/M6He3wlCpyO2VJNdGVoTIzeZ0Zz8jUscPV3XtWUchpGclLGSaKaq/JyNZeiYQ==', # rubocop:disable Layout/LineLength
+ })
+ end
+ end
+
+ context 'with a malformed Signature header' do
+ let(:header) { 'hello this is malformed!' }
+
+ it 'raises an error' do
+ expect { subject }.to raise_error(SignatureParser::ParsingError)
+ end
+ end
+ end
+end
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index 7ef5ca94cc..f6376eb36e 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -746,13 +746,13 @@ RSpec.describe Account do
end
it 'is valid if we are creating an instance actor account with a period' do
- account = Fabricate.build(:account, id: -99, actor_type: 'Application', locked: true, username: 'example.com')
+ account = Fabricate.build(:account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true, username: 'example.com')
expect(account.valid?).to be true
end
it 'is valid if we are creating a possibly-conflicting instance actor account' do
_account = Fabricate(:account, username: 'examplecom')
- instance_account = Fabricate.build(:account, id: -99, actor_type: 'Application', locked: true, username: 'example.com')
+ instance_account = Fabricate.build(:account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true, username: 'example.com')
expect(instance_account.valid?).to be true
end
@@ -1035,19 +1035,10 @@ RSpec.describe Account do
it 'increments the count in multi-threaded an environment when account_stat is not yet initialized' do
subject
- increment_by = 15
- wait_for_start = true
-
- threads = Array.new(increment_by) do
- Thread.new do
- true while wait_for_start
- described_class.find(subject.id).increment_count!(:followers_count)
- end
+ multi_threaded_execution(15) do
+ described_class.find(subject.id).increment_count!(:followers_count)
end
- wait_for_start = false
- threads.each(&:join)
-
expect(subject.reload.followers_count).to eq 15
end
end
diff --git a/spec/models/account_suggestions/friends_of_friends_source_spec.rb b/spec/models/account_suggestions/friends_of_friends_source_spec.rb
new file mode 100644
index 0000000000..56a974add5
--- /dev/null
+++ b/spec/models/account_suggestions/friends_of_friends_source_spec.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe AccountSuggestions::FriendsOfFriendsSource do
+ describe '#get' do
+ subject { described_class.new }
+
+ let!(:bob) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:alice) { Fabricate(:account, discoverable: true, hide_collections: true) }
+ let!(:eve) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:mallory) { Fabricate(:account, discoverable: false, hide_collections: false) }
+ let!(:eugen) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:john) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:jerk) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:neil) { Fabricate(:account, discoverable: true, hide_collections: false) }
+ let!(:larry) { Fabricate(:account, discoverable: true, hide_collections: false) }
+
+ context 'with follows and blocks' do
+ before do
+ bob.block!(jerk)
+ FollowRecommendationMute.create!(account: bob, target_account: neil)
+
+ # bob follows eugen, alice and larry
+ [eugen, alice, larry].each { |account| bob.follow!(account) }
+
+ # alice follows eve and mallory
+ [john, mallory].each { |account| alice.follow!(account) }
+
+ # eugen follows eve, john, jerk, larry and neil
+ [eve, mallory, jerk, larry, neil].each { |account| eugen.follow!(account) }
+ end
+
+ it 'returns eligible accounts', :aggregate_failures do
+ results = subject.get(bob)
+
+ # eve is returned through eugen
+ expect(results).to include([eve.id, :friends_of_friends])
+
+ # john is not reachable because alice hides who she follows
+ expect(results).to_not include([john.id, :friends_of_friends])
+
+ # mallory is not discoverable
+ expect(results).to_not include([mallory.id, :friends_of_friends])
+
+ # larry is not included because he's followed already
+ expect(results).to_not include([larry.id, :friends_of_friends])
+
+ # jerk is blocked
+ expect(results).to_not include([jerk.id, :friends_of_friends])
+
+ # the suggestion for neil has already been rejected
+ expect(results).to_not include([neil.id, :friends_of_friends])
+ end
+ end
+
+ context 'with deterministic order' do
+ before do
+ # bob follows eve and mallory
+ [eve, mallory].each { |account| bob.follow!(account) }
+
+ # eve follows eugen, john, and jerk
+ [jerk, eugen, john].each { |account| eve.follow!(account) }
+
+ # mallory follows eugen, john, and neil
+ [neil, eugen, john].each { |account| mallory.follow!(account) }
+
+ john.follow!(eugen)
+ john.follow!(neil)
+ end
+
+ it 'returns eligible accounts in the expected order' do
+ expect(subject.get(bob)).to eq [
+ [eugen.id, :friends_of_friends], # followed by 2 friends, 3 followers total
+ [john.id, :friends_of_friends], # followed by 2 friends, 2 followers total
+ [neil.id, :friends_of_friends], # followed by 1 friend, 2 followers total
+ [jerk.id, :friends_of_friends], # followed by 1 friend, 1 follower total
+ ]
+ end
+ end
+ end
+end
diff --git a/spec/models/account_suggestions/source_spec.rb b/spec/models/account_suggestions/source_spec.rb
index d8227e01bc..1666094082 100644
--- a/spec/models/account_suggestions/source_spec.rb
+++ b/spec/models/account_suggestions/source_spec.rb
@@ -11,14 +11,16 @@ RSpec.describe AccountSuggestions::Source do
end
context 'with follows and follow requests' do
- let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host') }
- let!(:account) { Fabricate(:account) }
- let!(:blocked_account) { Fabricate(:account) }
- let!(:eligible_account) { Fabricate(:account) }
- let!(:follow_recommendation_muted_account) { Fabricate(:account) }
- let!(:follow_requested_account) { Fabricate(:account) }
- let!(:following_account) { Fabricate(:account) }
- let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account)) }
+ let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host', discoverable: true) }
+ let!(:account) { Fabricate(:account, discoverable: true) }
+ let!(:blocked_account) { Fabricate(:account, discoverable: true) }
+ let!(:eligible_account) { Fabricate(:account, discoverable: true) }
+ let!(:follow_recommendation_muted_account) { Fabricate(:account, discoverable: true) }
+ let!(:follow_requested_account) { Fabricate(:account, discoverable: true) }
+ let!(:following_account) { Fabricate(:account, discoverable: true) }
+ let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account), discoverable: true) }
+ let!(:silenced_account) { Fabricate(:account, silenced: true, discoverable: true) }
+ let!(:undiscoverable_account) { Fabricate(:account, discoverable: false) }
before do
Fabricate :account_domain_block, account: account, domain: account_domain_blocked_account.domain
@@ -40,6 +42,8 @@ RSpec.describe AccountSuggestions::Source do
.and not_include(follow_requested_account)
.and not_include(following_account)
.and not_include(moved_account)
+ .and not_include(silenced_account)
+ .and not_include(undiscoverable_account)
end
end
end
diff --git a/spec/models/concerns/account/counters_spec.rb b/spec/models/concerns/account/counters_spec.rb
index 2e1cd700bc..3c063a2fa2 100644
--- a/spec/models/concerns/account/counters_spec.rb
+++ b/spec/models/concerns/account/counters_spec.rb
@@ -6,6 +6,8 @@ describe Account::Counters do
let!(:account) { Fabricate(:account) }
describe '#increment_count!' do
+ let(:increment_by) { 15 }
+
it 'increments the count' do
expect(account.followers_count).to eq 0
account.increment_count!(:followers_count)
@@ -13,24 +15,17 @@ describe Account::Counters do
end
it 'increments the count in multi-threaded an environment' do
- increment_by = 15
- wait_for_start = true
-
- threads = Array.new(increment_by) do
- Thread.new do
- true while wait_for_start
- account.increment_count!(:statuses_count)
- end
+ multi_threaded_execution(increment_by) do
+ account.increment_count!(:statuses_count)
end
- wait_for_start = false
- threads.each(&:join)
-
expect(account.statuses_count).to eq increment_by
end
end
describe '#decrement_count!' do
+ let(:decrement_by) { 10 }
+
it 'decrements the count' do
account.followers_count = 15
account.save!
@@ -40,22 +35,13 @@ describe Account::Counters do
end
it 'decrements the count in multi-threaded an environment' do
- decrement_by = 10
- wait_for_start = true
-
account.statuses_count = 15
account.save!
- threads = Array.new(decrement_by) do
- Thread.new do
- true while wait_for_start
- account.decrement_count!(:statuses_count)
- end
+ multi_threaded_execution(decrement_by) do
+ account.decrement_count!(:statuses_count)
end
- wait_for_start = false
- threads.each(&:join)
-
expect(account.statuses_count).to eq 5
end
end
diff --git a/spec/models/identity_spec.rb b/spec/models/identity_spec.rb
index 7022454443..d5a2ffbc86 100644
--- a/spec/models/identity_spec.rb
+++ b/spec/models/identity_spec.rb
@@ -3,19 +3,19 @@
require 'rails_helper'
RSpec.describe Identity do
- describe '.find_for_oauth' do
+ describe '.find_for_omniauth' do
let(:auth) { Fabricate(:identity, user: Fabricate(:user)) }
it 'calls .find_or_create_by' do
allow(described_class).to receive(:find_or_create_by)
- described_class.find_for_oauth(auth)
+ described_class.find_for_omniauth(auth)
expect(described_class).to have_received(:find_or_create_by).with(uid: auth.uid, provider: auth.provider)
end
it 'returns an instance of Identity' do
- expect(described_class.find_for_oauth(auth)).to be_instance_of described_class
+ expect(described_class.find_for_omniauth(auth)).to be_instance_of described_class
end
end
end
diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb
index ed58826672..290b99b288 100644
--- a/spec/models/ip_block_spec.rb
+++ b/spec/models/ip_block_spec.rb
@@ -3,7 +3,32 @@
require 'rails_helper'
describe IpBlock do
- describe 'to_log_human_identifier' do
+ describe 'validations' do
+ it 'validates ip presence', :aggregate_failures do
+ ip_block = described_class.new(ip: nil, severity: :no_access)
+
+ expect(ip_block).to_not be_valid
+ expect(ip_block).to model_have_error_on_field(:ip)
+ end
+
+ it 'validates severity presence', :aggregate_failures do
+ ip_block = described_class.new(ip: '127.0.0.1', severity: nil)
+
+ expect(ip_block).to_not be_valid
+ expect(ip_block).to model_have_error_on_field(:severity)
+ end
+
+ it 'validates ip uniqueness', :aggregate_failures do
+ described_class.create!(ip: '127.0.0.1', severity: :no_access)
+
+ ip_block = described_class.new(ip: '127.0.0.1', severity: :no_access)
+
+ expect(ip_block).to_not be_valid
+ expect(ip_block).to model_have_error_on_field(:ip)
+ end
+ end
+
+ describe '#to_log_human_identifier' do
let(:ip_block) { described_class.new(ip: '192.168.0.1') }
it 'combines the IP and prefix into a string' do
@@ -12,4 +37,30 @@ describe IpBlock do
expect(result).to eq('192.168.0.1/32')
end
end
+
+ describe '.blocked?' do
+ context 'when the IP is blocked' do
+ it 'returns true' do
+ described_class.create!(ip: '127.0.0.1', severity: :no_access)
+
+ expect(described_class.blocked?('127.0.0.1')).to be true
+ end
+ end
+
+ context 'when the IP is not blocked' do
+ it 'returns false' do
+ expect(described_class.blocked?('127.0.0.1')).to be false
+ end
+ end
+ end
+
+ describe 'after_commit' do
+ it 'resets the cache' do
+ allow(Rails.cache).to receive(:delete)
+
+ described_class.create!(ip: '127.0.0.1', severity: :no_access)
+
+ expect(Rails.cache).to have_received(:delete).with(described_class::CACHE_KEY)
+ end
+ end
end
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index 89916f9f50..1b9a13c38c 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -91,20 +91,15 @@ RSpec.describe MediaAttachment, :paperclip_processing do
end
it 'saves media attachment with correct file metadata' do
- expect(media.persisted?).to be true
- expect(media.file).to_not be_nil
-
- # completes processing
- expect(media.processing_complete?).to be true
-
- # sets type
- expect(media.type).to eq 'image'
-
- # sets content type
- expect(media.file_content_type).to eq content_type
-
- # sets file extension
- expect(media.file_file_name).to end_with extension
+ expect(media)
+ .to be_persisted
+ .and be_processing_complete
+ .and have_attributes(
+ file: be_present,
+ type: eq('image'),
+ file_content_type: eq(content_type),
+ file_file_name: end_with(extension)
+ )
# Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension
expect(Rack::Mime.mime_type(extension, nil)).to eq content_type
@@ -112,17 +107,23 @@ RSpec.describe MediaAttachment, :paperclip_processing do
it 'saves media attachment with correct size metadata' do
# strips original file name
- expect(media.file_file_name).to_not start_with '600x400'
+ expect(media.file_file_name)
+ .to_not start_with '600x400'
- # sets meta for original
- expect(media.file.meta['original']['width']).to eq 600
- expect(media.file.meta['original']['height']).to eq 400
- expect(media.file.meta['original']['aspect']).to eq 1.5
-
- # sets meta for thumbnail
- expect(media.file.meta['small']['width']).to eq 588
- expect(media.file.meta['small']['height']).to eq 392
- expect(media.file.meta['small']['aspect']).to eq 1.5
+ # sets meta for original and thumbnail
+ expect(media.file.meta.deep_symbolize_keys)
+ .to include(
+ original: include(
+ width: eq(600),
+ height: eq(400),
+ aspect: eq(1.5)
+ ),
+ small: include(
+ width: eq(588),
+ height: eq(392),
+ aspect: eq(1.5)
+ )
+ )
end
end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index c514c63b39..0168268bcb 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -133,5 +133,18 @@ describe Report do
report = Fabricate.build(:report, account: remote_account, comment: Faker::Lorem.characters(number: 1001))
expect(report.valid?).to be true
end
+
+ it 'is invalid if it references invalid rules' do
+ report = Fabricate.build(:report, category: :violation, rule_ids: [-1])
+ expect(report.valid?).to be false
+ expect(report).to model_have_error_on_field(:rule_ids)
+ end
+
+ it 'is invalid if it references rules but category is not "violation"' do
+ rule = Fabricate(:rule)
+ report = Fabricate.build(:report, category: :spam, rule_ids: rule.id)
+ expect(report.valid?).to be false
+ expect(report).to model_have_error_on_field(:rule_ids)
+ end
end
end
diff --git a/spec/models/tag_feed_spec.rb b/spec/models/tag_feed_spec.rb
index 6f5e1eb307..61b8d8d824 100644
--- a/spec/models/tag_feed_spec.rb
+++ b/spec/models/tag_feed_spec.rb
@@ -2,7 +2,7 @@
require 'rails_helper'
-describe TagFeed, type: :service do
+describe TagFeed do
describe '#get' do
let(:account) { Fabricate(:account) }
let(:tag_cats) { Fabricate(:tag, name: 'cats') }
diff --git a/spec/models/user_role_spec.rb b/spec/models/user_role_spec.rb
index d5234ebe8d..96d12263ae 100644
--- a/spec/models/user_role_spec.rb
+++ b/spec/models/user_role_spec.rb
@@ -139,7 +139,7 @@ RSpec.describe UserRole do
end
it 'has negative position' do
- expect(subject.position).to eq(-1)
+ expect(subject.position).to eq(described_class::NOBODY_POSITION)
end
end
@@ -159,17 +159,17 @@ RSpec.describe UserRole do
end
it 'has negative position' do
- expect(subject.position).to eq(-1)
+ expect(subject.position).to eq(described_class::NOBODY_POSITION)
end
end
describe '#everyone?' do
- it 'returns true when id is -99' do
- subject.id = -99
+ it 'returns true when id matches the everyone id' do
+ subject.id = described_class::EVERYONE_ROLE_ID
expect(subject.everyone?).to be true
end
- it 'returns false when id is not -99' do
+ it 'returns false when id does not match the everyone id' do
subject.id = 123
expect(subject.everyone?).to be false
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 5ac41c0ff1..39986f476c 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -420,7 +420,10 @@ RSpec.describe User do
let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) }
let!(:web_push_subscription) { Fabricate(:web_push_subscription, access_token: access_token) }
+ let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) }
+
before do
+ allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub)
user.reset_password!
end
@@ -437,6 +440,10 @@ RSpec.describe User do
expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0
end
+ it 'revokes streaming access for all access tokens' do
+ expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", Oj.dump(event: :kill)).once
+ end
+
it 'removes push subscriptions' do
expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0
expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound)
@@ -444,36 +451,35 @@ RSpec.describe User do
end
describe '#mark_email_as_confirmed!' do
- subject(:user) { Fabricate(:user, confirmed_at: confirmed_at) }
+ subject { user.mark_email_as_confirmed! }
- before do
- ActionMailer::Base.deliveries.clear
- user.mark_email_as_confirmed!
- end
-
- after { ActionMailer::Base.deliveries.clear }
+ let!(:user) { Fabricate(:user, confirmed_at: confirmed_at) }
context 'when user is new' do
let(:confirmed_at) { nil }
- it 'confirms user' do
- expect(user.confirmed_at).to be_present
- end
+ it 'confirms user and delivers welcome email', :sidekiq_inline do
+ emails = capture_emails { subject }
- it 'delivers mails', :sidekiq_inline do
- expect(ActionMailer::Base.deliveries.count).to eq 2
+ expect(user.confirmed_at).to be_present
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(user.email),
+ subject: eq(I18n.t('user_mailer.welcome.subject'))
+ )
end
end
context 'when user is not new' do
let(:confirmed_at) { Time.zone.now }
- it 'confirms user' do
- expect(user.confirmed_at).to be_present
- end
+ it 'confirms user but does not deliver welcome email' do
+ emails = capture_emails { subject }
- it 'does not deliver mail' do
- expect(ActionMailer::Base.deliveries.count).to eq 0
+ expect(user.confirmed_at).to be_present
+ expect(emails).to be_empty
end
end
end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index aaf587f49b..3e84d68738 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -82,10 +82,12 @@ RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :view
config.include Devise::Test::IntegrationHelpers, type: :feature
config.include Devise::Test::IntegrationHelpers, type: :request
+ config.include ActionMailer::TestHelper
config.include Paperclip::Shoulda::Matchers
config.include ActiveSupport::Testing::TimeHelpers
config.include Chewy::Rspec::Helpers
config.include Redisable
+ config.include ThreadingHelpers
config.include SignedRequestHelpers, type: :request
config.include CommandLineHelpers, type: :cli
@@ -95,8 +97,13 @@ RSpec.configure do |config|
self.use_transactional_tests = true
end
- config.around(:each, :sidekiq_inline) do |example|
- Sidekiq::Testing.inline!(&example)
+ config.around do |example|
+ if example.metadata[:sidekiq_inline] == true
+ Sidekiq::Testing.inline!
+ else
+ Sidekiq::Testing.fake!
+ end
+ example.run
end
config.before :each, type: :cli do
diff --git a/spec/requests/api/v1/accounts/statuses_spec.rb b/spec/requests/api/v1/accounts/statuses_spec.rb
new file mode 100644
index 0000000000..371867b215
--- /dev/null
+++ b/spec/requests/api/v1/accounts/statuses_spec.rb
@@ -0,0 +1,149 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'API V1 Accounts Statuses' do
+ let(:user) { Fabricate(:user) }
+ let(:scopes) { 'read:statuses' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
+
+ describe 'GET /api/v1/accounts/:account_id/statuses' do
+ it 'returns expected headers', :aggregate_failures do
+ Fabricate(:status, account: user.account)
+ get "/api/v1/accounts/#{user.account.id}/statuses", params: { limit: 1 }, headers: headers
+
+ expect(response).to have_http_status(200)
+ expect(links_from_header.size)
+ .to eq(2)
+ end
+
+ context 'with only media' do
+ it 'returns http success' do
+ get "/api/v1/accounts/#{user.account.id}/statuses", params: { only_media: true }, headers: headers
+
+ expect(response).to have_http_status(200)
+ end
+ end
+
+ context 'with exclude replies' do
+ let!(:status) { Fabricate(:status, account: user.account) }
+ let!(:status_self_reply) { Fabricate(:status, account: user.account, thread: status) }
+
+ before do
+ Fabricate(:status, account: user.account, thread: Fabricate(:status)) # Reply to another user
+ get "/api/v1/accounts/#{user.account.id}/statuses", params: { exclude_replies: true }, headers: headers
+ end
+
+ it 'returns posts along with self replies', :aggregate_failures do
+ expect(response)
+ .to have_http_status(200)
+ expect(body_as_json)
+ .to have_attributes(size: 2)
+ .and contain_exactly(
+ include(id: status.id.to_s),
+ include(id: status_self_reply.id.to_s)
+ )
+ end
+ end
+
+ context 'with only own pinned' do
+ before do
+ Fabricate(:status_pin, account: user.account, status: Fabricate(:status, account: user.account))
+ end
+
+ it 'returns http success and includes a header link' do
+ get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers
+
+ expect(response).to have_http_status(200)
+ expect(links_from_header.size)
+ .to eq(1)
+ expect(links_from_header)
+ .to contain_exactly(
+ have_attributes(
+ href: /pinned=true/,
+ attr_pairs: contain_exactly(['rel', 'prev'])
+ )
+ )
+ end
+ end
+
+ context 'with enough pinned statuses to paginate' do
+ before do
+ stub_const 'Api::BaseController::DEFAULT_STATUSES_LIMIT', 1
+ 2.times { Fabricate(:status_pin, account: user.account) }
+ end
+
+ it 'returns http success and header pagination links to prev and next' do
+ get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers
+
+ expect(response).to have_http_status(200)
+ expect(links_from_header.size)
+ .to eq(2)
+ expect(links_from_header)
+ .to contain_exactly(
+ have_attributes(
+ href: /pinned=true/,
+ attr_pairs: contain_exactly(['rel', 'next'])
+ ),
+ have_attributes(
+ href: /pinned=true/,
+ attr_pairs: contain_exactly(['rel', 'prev'])
+ )
+ )
+ end
+ end
+
+ context "with someone else's pinned statuses" do
+ let(:account) { Fabricate(:account, username: 'bob', domain: 'example.com') }
+ let(:status) { Fabricate(:status, account: account) }
+ let(:private_status) { Fabricate(:status, account: account, visibility: :private) }
+
+ before do
+ Fabricate(:status_pin, account: account, status: status)
+ Fabricate(:status_pin, account: account, status: private_status)
+ end
+
+ it 'returns http success' do
+ get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers
+
+ expect(response).to have_http_status(200)
+ end
+
+ context 'when user does not follow account' do
+ it 'lists the public status only' do
+ get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers
+
+ expect(body_as_json)
+ .to contain_exactly(
+ a_hash_including(id: status.id.to_s)
+ )
+ end
+ end
+
+ context 'when user follows account' do
+ before do
+ user.account.follow!(account)
+ end
+
+ it 'lists both the public and the private statuses' do
+ get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers
+
+ expect(body_as_json)
+ .to contain_exactly(
+ a_hash_including(id: status.id.to_s),
+ a_hash_including(id: private_status.id.to_s)
+ )
+ end
+ end
+ end
+ end
+
+ private
+
+ def links_from_header
+ response
+ .headers['Link']
+ .links
+ end
+end
diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb
index 1fb6fc8228..47aaf44d80 100644
--- a/spec/requests/api/v1/admin/domain_blocks_spec.rb
+++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb
@@ -49,6 +49,7 @@ RSpec.describe 'Domain Blocks' do
{
id: domain_block.id.to_s,
domain: domain_block.domain,
+ digest: domain_block.domain_digest,
created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'),
severity: domain_block.severity.to_s,
reject_media: domain_block.reject_media,
@@ -97,6 +98,7 @@ RSpec.describe 'Domain Blocks' do
{
id: domain_block.id.to_s,
domain: domain_block.domain,
+ digest: domain_block.domain_digest,
created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'),
severity: domain_block.severity.to_s,
reject_media: domain_block.reject_media,
@@ -188,6 +190,7 @@ RSpec.describe 'Domain Blocks' do
{
id: domain_block.id.to_s,
domain: domain_block.domain,
+ digest: domain_block.domain_digest,
severity: 'suspend',
}
)
diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb
index 5403457db0..4b0b7e1713 100644
--- a/spec/requests/api/v1/admin/reports_spec.rb
+++ b/spec/requests/api/v1/admin/reports_spec.rb
@@ -151,7 +151,9 @@ RSpec.describe 'Reports' do
let(:params) { { category: 'spam' } }
it 'updates the report category', :aggregate_failures do
- expect { subject }.to change { report.reload.category }.from('other').to('spam')
+ expect { subject }
+ .to change { report.reload.category }.from('other').to('spam')
+ .and create_an_action_log
expect(response).to have_http_status(200)
@@ -184,7 +186,9 @@ RSpec.describe 'Reports' do
it_behaves_like 'forbidden for wrong role', ''
it 'marks report as resolved', :aggregate_failures do
- expect { subject }.to change { report.reload.unresolved? }.from(true).to(false)
+ expect { subject }
+ .to change { report.reload.unresolved? }.from(true).to(false)
+ .and create_an_action_log
expect(response).to have_http_status(200)
end
end
@@ -200,7 +204,9 @@ RSpec.describe 'Reports' do
it_behaves_like 'forbidden for wrong role', ''
it 'marks report as unresolved', :aggregate_failures do
- expect { subject }.to change { report.reload.unresolved? }.from(false).to(true)
+ expect { subject }
+ .to change { report.reload.unresolved? }.from(false).to(true)
+ .and create_an_action_log
expect(response).to have_http_status(200)
end
end
@@ -216,7 +222,9 @@ RSpec.describe 'Reports' do
it_behaves_like 'forbidden for wrong role', ''
it 'assigns report to the requesting user', :aggregate_failures do
- expect { subject }.to change { report.reload.assigned_account_id }.from(nil).to(user.account.id)
+ expect { subject }
+ .to change { report.reload.assigned_account_id }.from(nil).to(user.account.id)
+ .and create_an_action_log
expect(response).to have_http_status(200)
end
end
@@ -232,8 +240,16 @@ RSpec.describe 'Reports' do
it_behaves_like 'forbidden for wrong role', ''
it 'unassigns report from assignee', :aggregate_failures do
- expect { subject }.to change { report.reload.assigned_account_id }.from(user.account.id).to(nil)
+ expect { subject }
+ .to change { report.reload.assigned_account_id }.from(user.account.id).to(nil)
+ .and create_an_action_log
expect(response).to have_http_status(200)
end
end
+
+ private
+
+ def create_an_action_log
+ change(Admin::ActionLog, :count).by(1)
+ end
end
diff --git a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb b/spec/requests/api/v1/admin/trends/statuses_spec.rb
similarity index 63%
rename from spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb
rename to spec/requests/api/v1/admin/trends/statuses_spec.rb
index 4d80055ac0..04aa0465f2 100644
--- a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb
+++ b/spec/requests/api/v1/admin/trends/statuses_spec.rb
@@ -2,31 +2,26 @@
require 'rails_helper'
-describe Api::V1::Admin::Trends::StatusesController do
- render_views
-
+describe 'API V1 Admin Trends Statuses' do
let(:role) { UserRole.find_by(name: 'Admin') }
let(:user) { Fabricate(:user, role: role) }
let(:scopes) { 'admin:read admin:write' }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:account) { Fabricate(:account) }
let(:status) { Fabricate(:status) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'GET #index' do
+ describe 'GET /api/v1/admin/trends/statuses' do
it 'returns http success' do
- get :index, params: { account_id: account.id, limit: 2 }
+ get '/api/v1/admin/trends/statuses', params: { account_id: account.id, limit: 2 }, headers: headers
expect(response).to have_http_status(200)
end
end
- describe 'POST #approve' do
+ describe 'POST /api/v1/admin/trends/statuses/:id/approve' do
before do
- post :approve, params: { id: status.id }
+ post "/api/v1/admin/trends/statuses/#{status.id}/approve", headers: headers
end
it_behaves_like 'forbidden for wrong scope', 'write:statuses'
@@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::StatusesController do
end
end
- describe 'POST #reject' do
+ describe 'POST /api/v1/admin/trends/statuses/:id/unapprove' do
before do
- post :reject, params: { id: status.id }
+ post "/api/v1/admin/trends/statuses/#{status.id}/reject", headers: headers
end
it_behaves_like 'forbidden for wrong scope', 'write:statuses'
diff --git a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb b/spec/requests/api/v1/admin/trends/tags_spec.rb
similarity index 64%
rename from spec/controllers/api/v1/admin/trends/tags_controller_spec.rb
rename to spec/requests/api/v1/admin/trends/tags_spec.rb
index 0b8eb8c3b8..b1437dad8d 100644
--- a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb
+++ b/spec/requests/api/v1/admin/trends/tags_spec.rb
@@ -2,31 +2,26 @@
require 'rails_helper'
-describe Api::V1::Admin::Trends::TagsController do
- render_views
-
+describe 'API V1 Admin Trends Tags' do
let(:role) { UserRole.find_by(name: 'Admin') }
let(:user) { Fabricate(:user, role: role) }
let(:scopes) { 'admin:read admin:write' }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:account) { Fabricate(:account) }
let(:tag) { Fabricate(:tag) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'GET #index' do
+ describe 'GET /api/v1/admin/trends/tags' do
it 'returns http success' do
- get :index, params: { account_id: account.id, limit: 2 }
+ get '/api/v1/admin/trends/tags', params: { account_id: account.id, limit: 2 }, headers: headers
expect(response).to have_http_status(200)
end
end
- describe 'POST #approve' do
+ describe 'POST /api/v1/admin/trends/tags/:id/approve' do
before do
- post :approve, params: { id: tag.id }
+ post "/api/v1/admin/trends/tags/#{tag.id}/approve", headers: headers
end
it_behaves_like 'forbidden for wrong scope', 'write:statuses'
@@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::TagsController do
end
end
- describe 'POST #reject' do
+ describe 'POST /api/v1/admin/trends/tags/:id/reject' do
before do
- post :reject, params: { id: tag.id }
+ post "/api/v1/admin/trends/tags/#{tag.id}/reject", headers: headers
end
it_behaves_like 'forbidden for wrong scope', 'write:statuses'
diff --git a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb b/spec/requests/api/v1/announcements/reactions_spec.rb
similarity index 64%
rename from spec/controllers/api/v1/announcements/reactions_controller_spec.rb
rename to spec/requests/api/v1/announcements/reactions_spec.rb
index c1debc33fe..ffacb2b0af 100644
--- a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb
+++ b/spec/requests/api/v1/announcements/reactions_spec.rb
@@ -2,27 +2,26 @@
require 'rails_helper'
-RSpec.describe Api::V1::Announcements::ReactionsController do
- render_views
-
+RSpec.describe 'API V1 Announcements Reactions' do
let(:user) { Fabricate(:user) }
let(:scopes) { 'write:favourites' }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
let!(:announcement) { Fabricate(:announcement) }
- describe 'PUT #update' do
+ describe 'PUT /api/v1/announcements/:announcement_id/reactions/:id' do
context 'without token' do
it 'returns http unauthorized' do
- put :update, params: { announcement_id: announcement.id, id: '😂' }
+ put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}"
+
expect(response).to have_http_status 401
end
end
context 'with token' do
before do
- allow(controller).to receive(:doorkeeper_token) { token }
- put :update, params: { announcement_id: announcement.id, id: '😂' }
+ put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers
end
it 'creates reaction', :aggregate_failures do
@@ -32,22 +31,21 @@ RSpec.describe Api::V1::Announcements::ReactionsController do
end
end
- describe 'DELETE #destroy' do
+ describe 'DELETE /api/v1/announcements/:announcement_id/reactions/:id' do
before do
announcement.announcement_reactions.create!(account: user.account, name: '😂')
end
context 'without token' do
it 'returns http unauthorized' do
- delete :destroy, params: { announcement_id: announcement.id, id: '😂' }
+ delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}"
expect(response).to have_http_status 401
end
end
context 'with token' do
before do
- allow(controller).to receive(:doorkeeper_token) { token }
- delete :destroy, params: { announcement_id: announcement.id, id: '😂' }
+ delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers
end
it 'creates reaction', :aggregate_failures do
@@ -56,4 +54,8 @@ RSpec.describe Api::V1::Announcements::ReactionsController do
end
end
end
+
+ def escaped_emoji
+ CGI.escape('😂')
+ end
end
diff --git a/spec/controllers/api/v1/announcements_controller_spec.rb b/spec/requests/api/v1/announcements_spec.rb
similarity index 59%
rename from spec/controllers/api/v1/announcements_controller_spec.rb
rename to spec/requests/api/v1/announcements_spec.rb
index 95ce8fd9fc..1624b76012 100644
--- a/spec/controllers/api/v1/announcements_controller_spec.rb
+++ b/spec/requests/api/v1/announcements_spec.rb
@@ -2,27 +2,26 @@
require 'rails_helper'
-RSpec.describe Api::V1::AnnouncementsController do
- render_views
-
- let(:user) { Fabricate(:user) }
- let(:scopes) { 'read' }
- let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+RSpec.describe 'API V1 Announcements' do
+ let(:user) { Fabricate(:user) }
+ let(:scopes) { 'read' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
let!(:announcement) { Fabricate(:announcement) }
- describe 'GET #index' do
+ describe 'GET /api/v1/announcements' do
context 'without token' do
it 'returns http unprocessable entity' do
- get :index
+ get '/api/v1/announcements'
+
expect(response).to have_http_status 422
end
end
context 'with token' do
before do
- allow(controller).to receive(:doorkeeper_token) { token }
- get :index
+ get '/api/v1/announcements', headers: headers
end
it 'returns http success' do
@@ -31,10 +30,11 @@ RSpec.describe Api::V1::AnnouncementsController do
end
end
- describe 'POST #dismiss' do
+ describe 'POST /api/v1/announcements/:id/dismiss' do
context 'without token' do
it 'returns http unauthorized' do
- post :dismiss, params: { id: announcement.id }
+ post "/api/v1/announcements/#{announcement.id}/dismiss"
+
expect(response).to have_http_status 401
end
end
@@ -43,8 +43,7 @@ RSpec.describe Api::V1::AnnouncementsController do
let(:scopes) { 'write:accounts' }
before do
- allow(controller).to receive(:doorkeeper_token) { token }
- post :dismiss, params: { id: announcement.id }
+ post "/api/v1/announcements/#{announcement.id}/dismiss", headers: headers
end
it 'dismisses announcement', :aggregate_failures do
diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/requests/api/v1/conversations_spec.rb
similarity index 50%
rename from spec/controllers/api/v1/conversations_controller_spec.rb
rename to spec/requests/api/v1/conversations_spec.rb
index 2734e4a07b..e2327d9a93 100644
--- a/spec/controllers/api/v1/conversations_controller_spec.rb
+++ b/spec/requests/api/v1/conversations_spec.rb
@@ -2,53 +2,48 @@
require 'rails_helper'
-RSpec.describe Api::V1::ConversationsController do
- render_views
-
+RSpec.describe 'API V1 Conversations' do
let!(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) }
- let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:scopes) { 'read:statuses' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
+
let(:other) { Fabricate(:user) }
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'GET #index', :sidekiq_inline do
- let(:scopes) { 'read:statuses' }
-
+ describe 'GET /api/v1/conversations', :sidekiq_inline do
before do
PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct')
PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct')
end
it 'returns pagination headers', :aggregate_failures do
- get :index, params: { limit: 1 }
+ get '/api/v1/conversations', params: { limit: 1 }, headers: headers
expect(response).to have_http_status(200)
expect(response.headers['Link'].links.size).to eq(2)
end
it 'returns conversations', :aggregate_failures do
- get :index
- json = body_as_json
- expect(json.size).to eq 2
- expect(json[0][:accounts].size).to eq 1
+ get '/api/v1/conversations', headers: headers
+
+ expect(body_as_json.size).to eq 2
+ expect(body_as_json[0][:accounts].size).to eq 1
end
context 'with since_id' do
context 'when requesting old posts' do
it 'returns conversations' do
- get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) }
- json = body_as_json
- expect(json.size).to eq 2
+ get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) }, headers: headers
+
+ expect(body_as_json.size).to eq 2
end
end
context 'when requesting posts in the future' do
it 'returns no conversation' do
- get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) }
- json = body_as_json
- expect(json.size).to eq 0
+ get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) }, headers: headers
+
+ expect(body_as_json.size).to eq 0
end
end
end
diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/requests/api/v1/filters_spec.rb
similarity index 75%
rename from spec/controllers/api/v1/filters_controller_spec.rb
rename to spec/requests/api/v1/filters_spec.rb
index b0f64ccf41..deb6e74217 100644
--- a/spec/controllers/api/v1/filters_controller_spec.rb
+++ b/spec/requests/api/v1/filters_spec.rb
@@ -2,23 +2,18 @@
require 'rails_helper'
-RSpec.describe Api::V1::FiltersController do
- render_views
+RSpec.describe 'API V1 Filters' do
+ let(:user) { Fabricate(:user) }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
- let(:user) { Fabricate(:user) }
- let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
-
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'GET #index' do
+ describe 'GET /api/v1/filters' do
let(:scopes) { 'read:filters' }
let!(:filter) { Fabricate(:custom_filter, account: user.account) }
let!(:custom_filter_keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
it 'returns http success' do
- get :index
+ get '/api/v1/filters', headers: headers
expect(response).to have_http_status(200)
expect(body_as_json)
.to contain_exactly(
@@ -27,13 +22,13 @@ RSpec.describe Api::V1::FiltersController do
end
end
- describe 'POST #create' do
+ describe 'POST /api/v1/filters' do
let(:scopes) { 'write:filters' }
let(:irreversible) { true }
let(:whole_word) { false }
before do
- post :create, params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word }
+ post '/api/v1/filters', params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word }, headers: headers
end
it 'creates a filter', :aggregate_failures do
@@ -64,24 +59,25 @@ RSpec.describe Api::V1::FiltersController do
end
end
- describe 'GET #show' do
+ describe 'GET /api/v1/filters/:id' do
let(:scopes) { 'read:filters' }
let(:filter) { Fabricate(:custom_filter, account: user.account) }
let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
it 'returns http success' do
- get :show, params: { id: keyword.id }
+ get "/api/v1/filters/#{keyword.id}", headers: headers
+
expect(response).to have_http_status(200)
end
end
- describe 'PUT #update' do
+ describe 'PUT /api/v1/filters/:id' do
let(:scopes) { 'write:filters' }
let(:filter) { Fabricate(:custom_filter, account: user.account) }
let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
before do
- put :update, params: { id: keyword.id, phrase: 'updated' }
+ put "/api/v1/filters/#{keyword.id}", headers: headers, params: { phrase: 'updated' }
end
it 'updates the filter', :aggregate_failures do
@@ -90,13 +86,13 @@ RSpec.describe Api::V1::FiltersController do
end
end
- describe 'DELETE #destroy' do
+ describe 'DELETE /api/v1/filters/:id' do
let(:scopes) { 'write:filters' }
let(:filter) { Fabricate(:custom_filter, account: user.account) }
let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
before do
- delete :destroy, params: { id: keyword.id }
+ delete "/api/v1/filters/#{keyword.id}", headers: headers
end
it 'removes the filter', :aggregate_failures do
diff --git a/spec/requests/api/v1/markers_spec.rb b/spec/requests/api/v1/markers_spec.rb
index a1ca4ba754..b04adf2594 100644
--- a/spec/requests/api/v1/markers_spec.rb
+++ b/spec/requests/api/v1/markers_spec.rb
@@ -52,5 +52,19 @@ RSpec.describe 'API Markers' do
expect(user.markers.first.last_read_id).to eq 70_120
end
end
+
+ context 'when database object becomes stale' do
+ before do
+ allow(Marker).to receive(:transaction).and_raise(ActiveRecord::StaleObjectError)
+ post '/api/v1/markers', headers: headers, params: { home: { last_read_id: '69420' } }
+ end
+
+ it 'returns error json' do
+ expect(response)
+ .to have_http_status(409)
+ expect(body_as_json)
+ .to include(error: /Conflict during update/)
+ end
+ end
end
end
diff --git a/spec/controllers/api/v1/polls/votes_controller_spec.rb b/spec/requests/api/v1/polls/votes_spec.rb
similarity index 61%
rename from spec/controllers/api/v1/polls/votes_controller_spec.rb
rename to spec/requests/api/v1/polls/votes_spec.rb
index 5de225a487..e2b22708be 100644
--- a/spec/controllers/api/v1/polls/votes_controller_spec.rb
+++ b/spec/requests/api/v1/polls/votes_spec.rb
@@ -2,30 +2,32 @@
require 'rails_helper'
-RSpec.describe Api::V1::Polls::VotesController do
- render_views
-
+RSpec.describe 'API V1 Polls Votes' do
let(:user) { Fabricate(:user) }
let(:scopes) { 'write:statuses' }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
- before { allow(controller).to receive(:doorkeeper_token) { token } }
-
- describe 'POST #create' do
+ describe 'POST /api/v1/polls/:poll_id/votes' do
let(:poll) { Fabricate(:poll) }
before do
- post :create, params: { poll_id: poll.id, choices: %w(1) }
+ post "/api/v1/polls/#{poll.id}/votes", params: { choices: %w(1) }, headers: headers
end
it 'creates a vote', :aggregate_failures do
expect(response).to have_http_status(200)
- vote = poll.votes.where(account: user.account).first
expect(vote).to_not be_nil
expect(vote.choice).to eq 1
expect(poll.reload.cached_tallies).to eq [0, 1]
end
+
+ private
+
+ def vote
+ poll.votes.where(account: user.account).first
+ end
end
end
diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb
similarity index 67%
rename from spec/controllers/api/v1/push/subscriptions_controller_spec.rb
rename to spec/requests/api/v1/push/subscriptions_spec.rb
index 1681914680..d699fd1e08 100644
--- a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb
+++ b/spec/requests/api/v1/push/subscriptions_spec.rb
@@ -2,9 +2,7 @@
require 'rails_helper'
-describe Api::V1::Push::SubscriptionsController do
- render_views
-
+describe 'API V1 Push Subscriptions' do
let(:user) { Fabricate(:user) }
let(:create_payload) do
{
@@ -34,15 +32,13 @@ describe Api::V1::Push::SubscriptionsController do
},
}.with_indifferent_access
end
- let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'push') }
+ let(:scopes) { 'push' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
- before do
- allow(controller).to receive(:doorkeeper_token) { token }
- end
-
- describe 'POST #create' do
+ describe 'POST /api/v1/push/subscription' do
before do
- post :create, params: create_payload
+ post '/api/v1/push/subscription', params: create_payload, headers: headers
end
it 'saves push subscriptions' do
@@ -56,19 +52,23 @@ describe Api::V1::Push::SubscriptionsController do
end
it 'replaces old subscription on repeat calls' do
- post :create, params: create_payload
+ post '/api/v1/push/subscription', params: create_payload, headers: headers
+
expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1
end
it 'returns the expected JSON' do
- expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' })
+ expect(body_as_json.with_indifferent_access)
+ .to include(
+ { endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' }
+ )
end
end
- describe 'PUT #update' do
+ describe 'PUT /api/v1/push/subscription' do
before do
- post :create, params: create_payload
- put :update, params: alerts_payload
+ post '/api/v1/push/subscription', params: create_payload, headers: headers
+ put '/api/v1/push/subscription', params: alerts_payload, headers: headers
end
it 'changes alert settings' do
@@ -82,14 +82,17 @@ describe Api::V1::Push::SubscriptionsController do
end
it 'returns the expected JSON' do
- expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] })
+ expect(body_as_json.with_indifferent_access)
+ .to include(
+ { endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] }
+ )
end
end
- describe 'DELETE #destroy' do
+ describe 'DELETE /api/v1/push/subscription' do
before do
- post :create, params: create_payload
- delete :destroy
+ post '/api/v1/push/subscription', params: create_payload, headers: headers
+ delete '/api/v1/push/subscription', headers: headers
end
it 'removes the subscription' do
diff --git a/spec/requests/api/v1/reports_spec.rb b/spec/requests/api/v1/reports_spec.rb
index ba3d2b3060..94baf8cb98 100644
--- a/spec/requests/api/v1/reports_spec.rb
+++ b/spec/requests/api/v1/reports_spec.rb
@@ -35,7 +35,7 @@ RSpec.describe 'Reports' do
it 'creates a report', :aggregate_failures do
perform_enqueued_jobs do
- subject
+ emails = capture_emails { subject }
expect(response).to have_http_status(200)
expect(body_as_json).to match(
@@ -49,7 +49,13 @@ RSpec.describe 'Reports' do
expect(target_account.targeted_reports).to_not be_empty
expect(target_account.targeted_reports.first.comment).to eq 'reasons'
- expect(ActionMailer::Base.deliveries.first.to).to eq([admin.email])
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(admin.email),
+ subject: eq(I18n.t('admin_mailer.new_report.subject', instance: Rails.configuration.x.local_domain, id: target_account.targeted_reports.first.id))
+ )
end
end
diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb
index 201674fccd..a3b84afa26 100644
--- a/spec/requests/api/v1/statuses_spec.rb
+++ b/spec/requests/api/v1/statuses_spec.rb
@@ -167,6 +167,16 @@ describe '/api/v1/statuses' do
expect(response.headers['X-RateLimit-Remaining']).to eq '0'
end
end
+
+ context 'with missing thread' do
+ let(:params) { { status: 'Hello world', in_reply_to_id: 0 } }
+
+ it 'returns http not found' do
+ subject
+
+ expect(response).to have_http_status(404)
+ end
+ end
end
describe 'DELETE /api/v1/statuses/:id' do
diff --git a/spec/controllers/api/v1/streaming_controller_spec.rb b/spec/requests/api/v1/streaming_spec.rb
similarity index 51%
rename from spec/controllers/api/v1/streaming_controller_spec.rb
rename to spec/requests/api/v1/streaming_spec.rb
index 099f68a74e..6b550dfa60 100644
--- a/spec/controllers/api/v1/streaming_controller_spec.rb
+++ b/spec/requests/api/v1/streaming_spec.rb
@@ -2,7 +2,7 @@
require 'rails_helper'
-describe Api::V1::StreamingController do
+describe 'API V1 Streaming' do
around do |example|
before = Rails.configuration.x.streaming_api_base_url
Rails.configuration.x.streaming_api_base_url = "wss://#{Rails.configuration.x.web_domain}"
@@ -10,14 +10,13 @@ describe Api::V1::StreamingController do
Rails.configuration.x.streaming_api_base_url = before
end
- before do
- request.headers.merge! Host: Rails.configuration.x.web_domain
- end
+ let(:headers) { { 'Host' => Rails.configuration.x.web_domain } }
context 'with streaming api on same host' do
- describe 'GET #index' do
+ describe 'GET /api/v1/streaming' do
it 'raises ActiveRecord::RecordNotFound' do
- get :index
+ get '/api/v1/streaming', headers: headers
+
expect(response).to have_http_status(404)
end
end
@@ -28,20 +27,33 @@ describe Api::V1::StreamingController do
Rails.configuration.x.streaming_api_base_url = "wss://streaming-#{Rails.configuration.x.web_domain}"
end
- describe 'GET #index' do
+ describe 'GET /api/v1/streaming' do
it 'redirects to streaming host' do
- get :index, params: { access_token: 'deadbeef', stream: 'public' }
- expect(response).to have_http_status(301)
- request_uri = URI.parse(request.url)
- redirect_to_uri = URI.parse(response.location)
- [:scheme, :path, :query, :fragment].each do |part|
- expect(redirect_to_uri.send(part)).to eq(request_uri.send(part)), "redirect target #{part}"
- end
- expect(redirect_to_uri.host).to eq(streaming_host), 'redirect target host'
+ get '/api/v1/streaming', headers: headers, params: { access_token: 'deadbeef', stream: 'public' }
+
+ expect(response)
+ .to have_http_status(301)
+
+ expect(redirect_to_uri)
+ .to have_attributes(
+ fragment: request_uri.fragment,
+ host: eq(streaming_host),
+ path: request_uri.path,
+ query: request_uri.query,
+ scheme: request_uri.scheme
+ )
end
private
+ def request_uri
+ URI.parse(request.url)
+ end
+
+ def redirect_to_uri
+ URI.parse(response.location)
+ end
+
def streaming_host
URI.parse(Rails.configuration.x.streaming_api_base_url).host
end
diff --git a/spec/requests/api/v2/suggestions_spec.rb b/spec/requests/api/v2/suggestions_spec.rb
index 5f1c97b8ae..a7d6a0864f 100644
--- a/spec/requests/api/v2/suggestions_spec.rb
+++ b/spec/requests/api/v2/suggestions_spec.rb
@@ -9,10 +9,28 @@ describe 'Suggestions API' do
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
describe 'GET /api/v2/suggestions' do
- it 'returns http success' do
+ let(:bob) { Fabricate(:account) }
+ let(:jeff) { Fabricate(:account) }
+ let(:params) { {} }
+
+ before do
+ Setting.bootstrap_timeline_accounts = [bob, jeff].map(&:acct).join(',')
+ end
+
+ it 'returns the expected suggestions' do
get '/api/v2/suggestions', headers: headers
expect(response).to have_http_status(200)
+
+ expect(body_as_json).to match_array(
+ [bob, jeff].map do |account|
+ hash_including({
+ source: 'staff',
+ sources: ['featured'],
+ account: hash_including({ id: account.id.to_s }),
+ })
+ end
+ )
end
end
end
diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb
index dbba228740..c56eec16c5 100644
--- a/spec/requests/cache_spec.rb
+++ b/spec/requests/cache_spec.rb
@@ -184,7 +184,7 @@ describe 'Caching behavior' do
get '/users/alice'
expect(response).to redirect_to('/@alice')
- expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('accept')
+ expect(response_vary_headers).to include('accept')
end
end
diff --git a/spec/requests/disabled_oauth_endpoints_spec.rb b/spec/requests/disabled_oauth_endpoints_spec.rb
new file mode 100644
index 0000000000..7c2c09f380
--- /dev/null
+++ b/spec/requests/disabled_oauth_endpoints_spec.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'Disabled OAuth routes' do
+ # These routes are disabled via the doorkeeper configuration for
+ # `admin_authenticator`, as these routes should only be accessible by server
+ # administrators. For now, these routes are not properly designed and
+ # integrated into Mastodon, so we're disabling them completely
+ describe 'GET /oauth/applications' do
+ it 'returns 403 forbidden' do
+ get oauth_applications_path
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'POST /oauth/applications' do
+ it 'returns 403 forbidden' do
+ post oauth_applications_path
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'GET /oauth/applications/new' do
+ it 'returns 403 forbidden' do
+ get new_oauth_application_path
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'GET /oauth/applications/:id' do
+ let(:application) { Fabricate(:application, scopes: 'read') }
+
+ it 'returns 403 forbidden' do
+ get oauth_application_path(application)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'PATCH /oauth/applications/:id' do
+ let(:application) { Fabricate(:application, scopes: 'read') }
+
+ it 'returns 403 forbidden' do
+ patch oauth_application_path(application)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'PUT /oauth/applications/:id' do
+ let(:application) { Fabricate(:application, scopes: 'read') }
+
+ it 'returns 403 forbidden' do
+ put oauth_application_path(application)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'DELETE /oauth/applications/:id' do
+ let(:application) { Fabricate(:application, scopes: 'read') }
+
+ it 'returns 403 forbidden' do
+ delete oauth_application_path(application)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ describe 'GET /oauth/applications/:id/edit' do
+ let(:application) { Fabricate(:application, scopes: 'read') }
+
+ it 'returns 403 forbidden' do
+ get edit_oauth_application_path(application)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+end
diff --git a/spec/requests/omniauth_callbacks_spec.rb b/spec/requests/omniauth_callbacks_spec.rb
index 0d37c41140..095535e485 100644
--- a/spec/requests/omniauth_callbacks_spec.rb
+++ b/spec/requests/omniauth_callbacks_spec.rb
@@ -39,16 +39,35 @@ describe 'OmniAuth callbacks' do
Fabricate(:user, email: 'user@host.example')
end
- it 'matches the existing user, creates an identity, and redirects to root path' do
- expect { subject }
- .to not_change(User, :count)
- .and change(Identity, :count)
- .by(1)
- .and change(LoginActivity, :count)
- .by(1)
+ context 'when ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH is set to true' do
+ around do |example|
+ ClimateControl.modify ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH: 'true' do
+ example.run
+ end
+ end
- expect(Identity.find_by(user: User.last).uid).to eq('123')
- expect(response).to redirect_to(root_path)
+ it 'matches the existing user, creates an identity, and redirects to root path' do
+ expect { subject }
+ .to not_change(User, :count)
+ .and change(Identity, :count)
+ .by(1)
+ .and change(LoginActivity, :count)
+ .by(1)
+
+ expect(Identity.find_by(user: User.last).uid).to eq('123')
+ expect(response).to redirect_to(root_path)
+ end
+ end
+
+ context 'when ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH is not set to true' do
+ it 'does not match the existing user or create an identity, and redirects to login page' do
+ expect { subject }
+ .to not_change(User, :count)
+ .and not_change(Identity, :count)
+ .and not_change(LoginActivity, :count)
+
+ expect(response).to redirect_to(new_user_session_url)
+ end
end
end
@@ -96,7 +115,7 @@ describe 'OmniAuth callbacks' do
context 'when a user cannot be built' do
before do
- allow(User).to receive(:find_for_oauth).and_return(User.new)
+ allow(User).to receive(:find_for_omniauth).and_return(User.new)
end
it 'redirects to the new user signup page' do
diff --git a/spec/serializers/rest/suggestion_serializer_spec.rb b/spec/serializers/rest/suggestion_serializer_spec.rb
index 60420d8023..b5efba082d 100644
--- a/spec/serializers/rest/suggestion_serializer_spec.rb
+++ b/spec/serializers/rest/suggestion_serializer_spec.rb
@@ -7,7 +7,7 @@ describe REST::SuggestionSerializer do
let(:record) do
AccountSuggestions::Suggestion.new(
account: account,
- source: 'SuggestionSource'
+ sources: ['SuggestionSource']
)
end
let(:account) { Fabricate(:account) }
diff --git a/spec/services/activitypub/fetch_featured_collection_service_spec.rb b/spec/services/activitypub/fetch_featured_collection_service_spec.rb
index b9e95b825f..dab204406b 100644
--- a/spec/services/activitypub/fetch_featured_collection_service_spec.rb
+++ b/spec/services/activitypub/fetch_featured_collection_service_spec.rb
@@ -72,11 +72,11 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
shared_examples 'sets pinned posts' do
before do
- stub_request(:get, 'https://example.com/account/pinned/known').to_return(status: 200, body: Oj.dump(status_json_pinned_known))
- stub_request(:get, 'https://example.com/account/pinned/unknown-inlined').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_inlined))
+ stub_request(:get, 'https://example.com/account/pinned/known').to_return(status: 200, body: Oj.dump(status_json_pinned_known), headers: { 'Content-Type': 'application/activity+json' })
+ stub_request(:get, 'https://example.com/account/pinned/unknown-inlined').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_inlined), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/account/pinned/unknown-unreachable').to_return(status: 404)
- stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable))
- stub_request(:get, 'https://example.com/account/collections/featured').to_return(status: 200, body: Oj.dump(featured_with_null))
+ stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable), headers: { 'Content-Type': 'application/activity+json' })
+ stub_request(:get, 'https://example.com/account/collections/featured').to_return(status: 200, body: Oj.dump(featured_with_null), headers: { 'Content-Type': 'application/activity+json' })
subject.call(actor, note: true, hashtag: false)
end
@@ -94,7 +94,7 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
describe '#call' do
context 'when the endpoint is a Collection' do
before do
- stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets pinned posts'
@@ -111,7 +111,7 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
end
before do
- stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets pinned posts'
@@ -120,7 +120,7 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
let(:items) { 'https://example.com/account/pinned/unknown-reachable' }
before do
- stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable))
+ stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable), headers: { 'Content-Type': 'application/activity+json' })
subject.call(actor, note: true, hashtag: false)
end
@@ -147,7 +147,7 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
end
before do
- stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, actor.featured_collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets pinned posts'
@@ -156,7 +156,7 @@ RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do
let(:items) { 'https://example.com/account/pinned/unknown-reachable' }
before do
- stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable))
+ stub_request(:get, 'https://example.com/account/pinned/unknown-reachable').to_return(status: 200, body: Oj.dump(status_json_pinned_unknown_reachable), headers: { 'Content-Type': 'application/activity+json' })
subject.call(actor, note: true, hashtag: false)
end
diff --git a/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb b/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb
index 071e4d92d5..638278a10e 100644
--- a/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb
+++ b/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service d
describe '#call' do
context 'when the endpoint is a Collection' do
before do
- stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets featured tags'
@@ -46,7 +46,7 @@ RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service d
context 'when the account already has featured tags' do
before do
- stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
actor.featured_tags.create!(name: 'FoO')
actor.featured_tags.create!(name: 'baz')
@@ -67,7 +67,7 @@ RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service d
end
before do
- stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets featured tags'
@@ -88,7 +88,7 @@ RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service d
end
before do
- stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'sets featured tags'
diff --git a/spec/services/activitypub/fetch_remote_account_service_spec.rb b/spec/services/activitypub/fetch_remote_account_service_spec.rb
index e7f6bb8dd8..799a70d091 100644
--- a/spec/services/activitypub/fetch_remote_account_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_account_service_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
before do
actor[:inbox] = nil
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -54,7 +54,7 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -75,7 +75,7 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -98,7 +98,7 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/bob' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -114,7 +114,7 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/bob' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
diff --git a/spec/services/activitypub/fetch_remote_actor_service_spec.rb b/spec/services/activitypub/fetch_remote_actor_service_spec.rb
index e622c7d4c3..4ce42ea560 100644
--- a/spec/services/activitypub/fetch_remote_actor_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_actor_service_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do
before do
actor[:inbox] = nil
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -54,7 +54,7 @@ RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -75,7 +75,7 @@ RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -98,7 +98,7 @@ RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/bob' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -114,7 +114,7 @@ RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do
let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/bob' }] } }
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
diff --git a/spec/services/activitypub/fetch_remote_key_service_spec.rb b/spec/services/activitypub/fetch_remote_key_service_spec.rb
index 0b14da4f44..478778cc9f 100644
--- a/spec/services/activitypub/fetch_remote_key_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_key_service_spec.rb
@@ -50,7 +50,7 @@ RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do
end
before do
- stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor))
+ stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
end
@@ -59,7 +59,7 @@ RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do
context 'when the key is a sub-object from the actor' do
before do
- stub_request(:get, public_key_id).to_return(body: Oj.dump(actor))
+ stub_request(:get, public_key_id).to_return(body: Oj.dump(actor), headers: { 'Content-Type': 'application/activity+json' })
end
it 'returns the expected account' do
@@ -71,7 +71,7 @@ RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do
let(:public_key_id) { 'https://example.com/alice-public-key.json' }
before do
- stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] })))
+ stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] })), headers: { 'Content-Type': 'application/activity+json' })
end
it 'returns the expected account' do
@@ -84,7 +84,7 @@ RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do
let(:actor_public_key) { 'https://example.com/alice-public-key.json' }
before do
- stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] })))
+ stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] })), headers: { 'Content-Type': 'application/activity+json' })
end
it 'returns the nil' do
diff --git a/spec/services/activitypub/fetch_replies_service_spec.rb b/spec/services/activitypub/fetch_replies_service_spec.rb
index a76b996c20..8e1f606e26 100644
--- a/spec/services/activitypub/fetch_replies_service_spec.rb
+++ b/spec/services/activitypub/fetch_replies_service_spec.rb
@@ -58,7 +58,7 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when passing the URL to the collection' do
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it 'spawns workers for up to 5 replies on the same server' do
@@ -93,7 +93,7 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when passing the URL to the collection' do
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it 'spawns workers for up to 5 replies on the same server' do
@@ -132,7 +132,7 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when passing the URL to the collection' do
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it 'spawns workers for up to 5 replies on the same server' do
diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb
index 9abe03181e..b13869f357 100644
--- a/spec/services/activitypub/process_account_service_spec.rb
+++ b/spec/services/activitypub/process_account_service_spec.rb
@@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe ActivityPub::ProcessAccountService, type: :service do
subject { described_class.new }
- context 'with property values' do
+ context 'with property values, an avatar, and a profile header' do
let(:payload) do
{
id: 'https://foo.test',
@@ -16,19 +16,50 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
{ type: 'PropertyValue', name: 'Occupation', value: 'Unit test' },
{ type: 'PropertyValue', name: 'non-string', value: %w(foo bar) },
],
+ image: {
+ type: 'Image',
+ mediaType: 'image/png',
+ url: 'https://foo.test/image.png',
+ },
+ icon: {
+ type: 'Image',
+ url: [
+ {
+ mediaType: 'image/png',
+ href: 'https://foo.test/icon.png',
+ },
+ ],
+ },
}.with_indifferent_access
end
- it 'parses out of attachment' do
+ before do
+ stub_request(:get, 'https://foo.test/image.png').to_return(request_fixture('avatar.txt'))
+ stub_request(:get, 'https://foo.test/icon.png').to_return(request_fixture('avatar.txt'))
+ end
+
+ it 'parses property values, avatar and profile header as expected' do
account = subject.call('alice', 'example.com', payload)
- expect(account.fields).to be_a Array
- expect(account.fields.size).to eq 2
- expect(account.fields[0]).to be_a Account::Field
- expect(account.fields[0].name).to eq 'Pronouns'
- expect(account.fields[0].value).to eq 'They/them'
- expect(account.fields[1]).to be_a Account::Field
- expect(account.fields[1].name).to eq 'Occupation'
- expect(account.fields[1].value).to eq 'Unit test'
+
+ expect(account.fields)
+ .to be_an(Array)
+ .and have_attributes(size: 2)
+ expect(account.fields.first)
+ .to be_an(Account::Field)
+ .and have_attributes(
+ name: eq('Pronouns'),
+ value: eq('They/them')
+ )
+ expect(account.fields.last)
+ .to be_an(Account::Field)
+ .and have_attributes(
+ name: eq('Occupation'),
+ value: eq('Unit test')
+ )
+ expect(account).to have_attributes(
+ avatar_remote_url: 'https://foo.test/icon.png',
+ header_remote_url: 'https://foo.test/image.png'
+ )
end
end
diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb
index 53cbaf4cc1..67f2f27276 100644
--- a/spec/services/activitypub/process_status_update_service_spec.rb
+++ b/spec/services/activitypub/process_status_update_service_spec.rb
@@ -218,7 +218,8 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
end
it 'does not update the text, spoiler_text or edited_at' do
- expect { subject.call(status, json, json) }.to_not(change { s = status.reload; [s.text, s.spoiler_text, s.edited_at] })
+ expect { subject.call(status, json, json) }
+ .to_not(change { status.reload.attributes.slice('text', 'spoiler_text', 'edited_at').values })
end
end
diff --git a/spec/services/activitypub/synchronize_followers_service_spec.rb b/spec/services/activitypub/synchronize_followers_service_spec.rb
index c9a513e24b..f62376ab95 100644
--- a/spec/services/activitypub/synchronize_followers_service_spec.rb
+++ b/spec/services/activitypub/synchronize_followers_service_spec.rb
@@ -60,7 +60,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService, type: :service do
describe '#call' do
context 'when the endpoint is a Collection of actor URIs' do
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'synchronizes followers'
@@ -77,7 +77,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService, type: :service do
end
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'synchronizes followers'
@@ -98,7 +98,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService, type: :service do
end
before do
- stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload))
+ stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' })
end
it_behaves_like 'synchronizes followers'
diff --git a/spec/services/after_unallow_domain_service_spec.rb b/spec/services/after_unallow_domain_service_spec.rb
new file mode 100644
index 0000000000..717c42b931
--- /dev/null
+++ b/spec/services/after_unallow_domain_service_spec.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe AfterUnallowDomainService do
+ describe '#call' do
+ context 'with accounts for a domain' do
+ let!(:account) { Fabricate(:account, domain: 'host.example') }
+ let!(:test_account) { Fabricate(:account, domain: 'test.example') }
+ let(:service_double) { instance_double(DeleteAccountService, call: true) }
+
+ before { allow(DeleteAccountService).to receive(:new).and_return(service_double) }
+
+ it 'calls the delete service for accounts from the relevant domain' do
+ subject.call 'test.example'
+
+ expect(service_double)
+ .to_not have_received(:call).with(account, reserve_username: false)
+ expect(service_double)
+ .to have_received(:call).with(test_account, reserve_username: false)
+ end
+ end
+ end
+end
diff --git a/spec/services/appeal_service_spec.rb b/spec/services/appeal_service_spec.rb
new file mode 100644
index 0000000000..10c0f148dc
--- /dev/null
+++ b/spec/services/appeal_service_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe AppealService do
+ describe '#call' do
+ let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ context 'with an existing strike' do
+ let(:strike) { Fabricate(:account_warning) }
+ let(:text) { 'Appeal text' }
+
+ it 'creates an appeal and notifies staff' do
+ emails = capture_emails { subject.call(strike, text) }
+
+ expect(Appeal.last)
+ .to have_attributes(
+ strike: strike,
+ text: text,
+ account: strike.target_account
+ )
+
+ expect(emails.size)
+ .to eq(1)
+
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(admin.email),
+ subject: eq(
+ I18n.t(
+ 'admin_mailer.new_appeal.subject',
+ username: strike.target_account.acct,
+ instance: Rails.configuration.x.local_domain
+ )
+ )
+ )
+ end
+ end
+ end
+end
diff --git a/spec/services/approve_appeal_service_spec.rb b/spec/services/approve_appeal_service_spec.rb
new file mode 100644
index 0000000000..5707c5d7f4
--- /dev/null
+++ b/spec/services/approve_appeal_service_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ApproveAppealService do
+ describe '#call' do
+ context 'with an existing appeal' do
+ let(:appeal) { Fabricate(:appeal) }
+ let(:account) { Fabricate(:account) }
+
+ it 'processes the appeal approval' do
+ expect { subject.call(appeal, account) }
+ .to mark_overruled
+ .and record_approver
+ end
+
+ def mark_overruled
+ change(appeal.strike, :overruled_at)
+ .from(nil)
+ .to(be > 1.minute.ago)
+ end
+
+ def record_approver
+ change(appeal, :approved_by_account)
+ .from(nil)
+ .to(account)
+ end
+ end
+ end
+end
diff --git a/spec/services/create_featured_tag_service_spec.rb b/spec/services/create_featured_tag_service_spec.rb
new file mode 100644
index 0000000000..29a7c5b309
--- /dev/null
+++ b/spec/services/create_featured_tag_service_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe CreateFeaturedTagService do
+ describe '#call' do
+ let(:tag) { 'test' }
+
+ context 'with a local account' do
+ let(:account) { Fabricate(:account, domain: nil) }
+
+ it 'creates a new featured tag and distributes' do
+ expect { subject.call(account, tag) }
+ .to change(FeaturedTag, :count).by(1)
+ expect(ActivityPub::AccountRawDistributionWorker)
+ .to have_enqueued_sidekiq_job(anything, account.id)
+ end
+ end
+
+ context 'with a remote account' do
+ let(:account) { Fabricate(:account, domain: 'host.example') }
+
+ it 'creates a new featured tag and does not distributes' do
+ expect { subject.call(account, tag) }
+ .to change(FeaturedTag, :count).by(1)
+ expect(ActivityPub::AccountRawDistributionWorker)
+ .to_not have_enqueued_sidekiq_job
+ end
+ end
+ end
+end
diff --git a/spec/services/move_service_spec.rb b/spec/services/move_service_spec.rb
new file mode 100644
index 0000000000..e63818f67e
--- /dev/null
+++ b/spec/services/move_service_spec.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe MoveService do
+ subject { described_class.new.call(migration) }
+
+ context 'with a valid migration record' do
+ let(:migration) { Fabricate(:account_migration, account: source_account, target_account: target_account) }
+ let(:source_account) { Fabricate(:account) }
+ let(:target_account) { Fabricate(:account, also_known_as: [source_account_uri]) }
+
+ it 'migrates the account to a new account' do
+ expect { subject }
+ .to change_source_moved_value
+ .and process_local_updates
+ .and distribute_updates
+ .and distribute_move
+ end
+ end
+
+ def source_account_uri
+ ActivityPub::TagManager
+ .instance
+ .uri_for(source_account)
+ end
+
+ def change_source_moved_value
+ change(source_account.reload, :moved_to_account)
+ .from(nil)
+ .to(target_account)
+ end
+
+ def process_local_updates
+ enqueue_sidekiq_job(MoveWorker)
+ .with(source_account.id, target_account.id)
+ end
+
+ def distribute_updates
+ enqueue_sidekiq_job(ActivityPub::UpdateDistributionWorker)
+ .with(source_account.id)
+ end
+
+ def distribute_move
+ enqueue_sidekiq_job(ActivityPub::MoveDistributionWorker)
+ .with(migration.id)
+ end
+end
diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb
index 38a33c522d..e818fadcbe 100644
--- a/spec/services/notify_service_spec.rb
+++ b/spec/services/notify_service_spec.rb
@@ -157,8 +157,6 @@ RSpec.describe NotifyService, type: :service do
describe 'email' do
before do
- ActionMailer::Base.deliveries.clear
-
user.settings.update('notification_emails.follow': enabled)
user.save
end
@@ -167,7 +165,15 @@ RSpec.describe NotifyService, type: :service do
let(:enabled) { true }
it 'sends email', :sidekiq_inline do
- expect { subject }.to change(ActionMailer::Base.deliveries, :count).by(1)
+ emails = capture_emails { subject }
+
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(user.email),
+ subject: eq(I18n.t('notification_mailer.follow.subject', name: sender.acct))
+ )
end
end
@@ -175,7 +181,9 @@ RSpec.describe NotifyService, type: :service do
let(:enabled) { false }
it "doesn't send email" do
- expect { subject }.to_not change(ActionMailer::Base.deliveries, :count).from(0)
+ emails = capture_emails { subject }
+
+ expect(emails).to be_empty
end
end
end
diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb
index 1e5c420a63..acbebc5056 100644
--- a/spec/services/post_status_service_spec.rb
+++ b/spec/services/post_status_service_spec.rb
@@ -32,27 +32,27 @@ RSpec.describe PostStatusService, type: :service do
let!(:future) { Time.now.utc + 2.hours }
let!(:previous_status) { Fabricate(:status, account: account) }
- it 'schedules a status' do
- status = subject.call(account, text: 'Hi future!', scheduled_at: future)
- expect(status).to be_a ScheduledStatus
- expect(status.scheduled_at).to eq future
- expect(status.params['text']).to eq 'Hi future!'
- end
-
- it 'does not immediately create a status' do
+ it 'schedules a status for future creation and does not create one immediately' do
media = Fabricate(:media_attachment, account: account)
status = subject.call(account, text: 'Hi future!', media_ids: [media.id], scheduled_at: future)
- expect(status).to be_a ScheduledStatus
- expect(status.scheduled_at).to eq future
- expect(status.params['text']).to eq 'Hi future!'
- expect(status.params['media_ids']).to eq [media.id]
+ expect(status)
+ .to be_a(ScheduledStatus)
+ .and have_attributes(
+ scheduled_at: eq(future),
+ params: include(
+ 'text' => eq('Hi future!'),
+ 'media_ids' => contain_exactly(media.id)
+ )
+ )
expect(media.reload.status).to be_nil
expect(Status.where(text: 'Hi future!')).to_not exist
end
- it 'does not change statuses count' do
- expect { subject.call(account, text: 'Hi future!', scheduled_at: future, thread: previous_status) }.to_not(change { [account.statuses_count, previous_status.replies_count] })
+ it 'does not change statuses_count of account or replies_count of thread previous status' do
+ expect { subject.call(account, text: 'Hi future!', scheduled_at: future, thread: previous_status) }
+ .to not_change { account.statuses_count }
+ .and(not_change { previous_status.replies_count })
end
end
@@ -228,13 +228,7 @@ RSpec.describe PostStatusService, type: :service do
subject.call(
account,
text: 'test status update',
- media_ids: [
- Fabricate(:media_attachment, account: account),
- Fabricate(:media_attachment, account: account),
- Fabricate(:media_attachment, account: account),
- Fabricate(:media_attachment, account: account),
- Fabricate(:media_attachment, account: account),
- ].map(&:id)
+ media_ids: Array.new(5) { Fabricate(:media_attachment, account: account) }.map(&:id)
)
end.to raise_error(
Mastodon::ValidationError,
diff --git a/spec/services/process_hashtags_service_spec.rb b/spec/services/process_hashtags_service_spec.rb
new file mode 100644
index 0000000000..a0d5ef3464
--- /dev/null
+++ b/spec/services/process_hashtags_service_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ProcessHashtagsService do
+ describe '#call' do
+ let(:status) { Fabricate(:status, visibility: :public, text: 'With tags #one #two') }
+
+ it 'applies the tags from the status text' do
+ expect { subject.call(status) }
+ .to change(Tag, :count).by(2)
+ expect(status.reload.tags.map(&:name))
+ .to contain_exactly('one', 'two')
+ end
+ end
+end
diff --git a/spec/services/remove_domains_from_followers_service_spec.rb b/spec/services/remove_domains_from_followers_service_spec.rb
new file mode 100644
index 0000000000..9e9d6cef2d
--- /dev/null
+++ b/spec/services/remove_domains_from_followers_service_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe RemoveDomainsFromFollowersService do
+ describe '#call' do
+ context 'with account followers' do
+ let(:account) { Fabricate(:account, domain: nil) }
+ let(:good_domain_account) { Fabricate(:account, domain: 'good.example', protocol: :activitypub) }
+ let(:bad_domain_account) { Fabricate(:account, domain: 'bad.example', protocol: :activitypub) }
+
+ before do
+ Fabricate :follow, target_account: account, account: good_domain_account
+ Fabricate :follow, target_account: account, account: bad_domain_account
+ end
+
+ it 'removes followers from supplied domains and sends a notification' do
+ subject.call(account, ['bad.example'])
+
+ expect(account.followers)
+ .to include(good_domain_account)
+ .and not_include(bad_domain_account)
+ expect(ActivityPub::DeliveryWorker)
+ .to have_enqueued_sidekiq_job(anything, account.id, bad_domain_account.inbox_url)
+ end
+ end
+ end
+end
diff --git a/spec/services/remove_featured_tag_service_spec.rb b/spec/services/remove_featured_tag_service_spec.rb
new file mode 100644
index 0000000000..6cf5388c7f
--- /dev/null
+++ b/spec/services/remove_featured_tag_service_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe RemoveFeaturedTagService do
+ describe '#call' do
+ context 'with a featured tag' do
+ let(:featured_tag) { Fabricate(:featured_tag) }
+
+ context 'when called by a local account' do
+ let(:account) { Fabricate(:account, domain: nil) }
+
+ it 'destroys the featured tag and sends a distribution' do
+ subject.call(account, featured_tag)
+
+ expect { featured_tag.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ expect(ActivityPub::AccountRawDistributionWorker)
+ .to have_enqueued_sidekiq_job(anything, account.id)
+ end
+ end
+
+ context 'when called by a non local account' do
+ let(:account) { Fabricate(:account, domain: 'host.example') }
+
+ it 'destroys the featured tag and does not send a distribution' do
+ subject.call(account, featured_tag)
+
+ expect { featured_tag.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ expect(ActivityPub::AccountRawDistributionWorker)
+ .to_not have_enqueued_sidekiq_job
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb
index 39e14a6a1c..2caeb189d9 100644
--- a/spec/services/report_service_spec.rb
+++ b/spec/services/report_service_spec.rb
@@ -158,13 +158,14 @@ RSpec.describe ReportService, type: :service do
before do
Fabricate(:report, target_account: target_account)
- ActionMailer::Base.deliveries.clear
source_account.user.settings['notification_emails.report'] = true
source_account.user.save
end
it 'does not send an e-mail' do
- expect { subject.call }.to_not change(ActionMailer::Base.deliveries, :count).from(0)
+ emails = capture_emails { subject.call }
+
+ expect(emails).to be_empty
end
end
end
diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb
index 1c4c3b4016..b82e5b3865 100644
--- a/spec/services/resolve_account_service_spec.rb
+++ b/spec/services/resolve_account_service_spec.rb
@@ -219,27 +219,19 @@ RSpec.describe ResolveAccountService, type: :service do
end
it 'processes one remote account at a time using locks' do
- wait_for_start = true
fail_occurred = false
return_values = Concurrent::Array.new
- threads = Array.new(5) do
- Thread.new do
- true while wait_for_start
-
- begin
- return_values << described_class.new.call('foo@ap.example.com')
- rescue ActiveRecord::RecordNotUnique
- fail_occurred = true
- ensure
- RedisConfiguration.pool.checkin if Thread.current[:redis]
- end
+ multi_threaded_execution(5) do
+ begin
+ return_values << described_class.new.call('foo@ap.example.com')
+ rescue ActiveRecord::RecordNotUnique
+ fail_occurred = true
+ ensure
+ RedisConfiguration.pool.checkin if Thread.current[:redis]
end
end
- wait_for_start = false
- threads.each(&:join)
-
expect(fail_occurred).to be false
expect(return_values).to_not include(nil)
end
diff --git a/spec/services/unfavourite_service_spec.rb b/spec/services/unfavourite_service_spec.rb
new file mode 100644
index 0000000000..a714cc0675
--- /dev/null
+++ b/spec/services/unfavourite_service_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe UnfavouriteService do
+ describe '#call' do
+ context 'with a favourited status' do
+ let(:status) { Fabricate(:status, account: account) }
+ let!(:favourite) { Fabricate(:favourite, status: status) }
+
+ context 'when the status account is local' do
+ let(:account) { Fabricate(:account, domain: nil) }
+
+ it 'destroys the favourite' do
+ subject.call(favourite.account, status)
+
+ expect { favourite.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
+ context 'when the status account is a remote activitypub account' do
+ let(:account) { Fabricate(:account, domain: 'host.example', protocol: :activitypub) }
+
+ it 'destroys the favourite and sends a notification' do
+ subject.call(favourite.account, status)
+
+ expect { favourite.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ expect(ActivityPub::DeliveryWorker)
+ .to have_enqueued_sidekiq_job(anything, favourite.account.id, status.account.inbox_url)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/unmute_service_spec.rb b/spec/services/unmute_service_spec.rb
new file mode 100644
index 0000000000..00135b5ac0
--- /dev/null
+++ b/spec/services/unmute_service_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe UnmuteService do
+ describe '#call' do
+ let!(:account) { Fabricate(:account) }
+ let!(:target_account) { Fabricate(:account) }
+
+ context 'when account is muting target account' do
+ before { Fabricate :mute, account: account, target_account: target_account }
+
+ context 'when account follows target_account' do
+ before { Fabricate :follow, account: account, target_account: target_account }
+
+ it 'removes the account mute and sets up a merge' do
+ expect { subject.call(account, target_account) }
+ .to remove_account_mute
+ expect(MergeWorker).to have_enqueued_sidekiq_job(target_account.id, account.id)
+ end
+ end
+
+ context 'when account does not follow target_account' do
+ it 'removes the account mute and does not create a merge' do
+ expect { subject.call(account, target_account) }
+ .to remove_account_mute
+ expect(MergeWorker).to_not have_enqueued_sidekiq_job
+ end
+ end
+
+ def remove_account_mute
+ change { account.reload.muting?(target_account) }
+ .from(true)
+ .to(false)
+ end
+ end
+
+ context 'when account is not muting target account' do
+ it 'does nothing and returns' do
+ expect { subject.call(account, target_account) }
+ .to_not(change { account.reload.muting?(target_account) })
+ expect(MergeWorker).to_not have_enqueued_sidekiq_job
+ end
+ end
+ end
+end
diff --git a/spec/services/verify_link_service_spec.rb b/spec/services/verify_link_service_spec.rb
index 415788cb58..2895072420 100644
--- a/spec/services/verify_link_service_spec.rb
+++ b/spec/services/verify_link_service_spec.rb
@@ -77,27 +77,28 @@ RSpec.describe VerifyLinkService, type: :service do
context 'when a document is truncated but the link back is valid' do
let(:html) do
- "
+ <<-HTML
-
+ HTML
end
- it 'marks the field as not verified' do
- expect(field.verified?).to be false
+ it 'marks the field as verified' do
+ expect(field.verified?).to be true
end
end
- context 'when a link back might be truncated' do
+ context 'when a link tag might be truncated' do
let(:html) do
- "
+ <<-HTML_TRUNCATED
- Hello' }
+ let(:html) do
+ <<-HTML
+ Hello
+ HTML
+ end
it 'does not crash' do
# We could probably put more effort into perhaps auto-correcting the
diff --git a/spec/services/vote_service_spec.rb b/spec/services/vote_service_spec.rb
new file mode 100644
index 0000000000..88207b001c
--- /dev/null
+++ b/spec/services/vote_service_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe VoteService do
+ describe '#call' do
+ subject { described_class.new.call(voter, poll, [0]) }
+
+ context 'with a poll and poll options' do
+ let(:poll) { Fabricate(:poll, account: account, options: %w(Fun UnFun)) }
+ let(:fun_vote) { Fabricate(:poll_vote, poll: poll) }
+ let(:not_fun_vote) { Fabricate(:poll_vote, poll: poll) }
+ let(:voter) { Fabricate(:account, domain: nil) }
+
+ context 'when the poll was created by a local account' do
+ let(:account) { Fabricate(:account, domain: nil) }
+
+ it 'stores the votes and distributes the poll' do
+ expect { subject }
+ .to change(PollVote, :count).by(1)
+
+ expect(ActivityPub::DistributePollUpdateWorker)
+ .to have_enqueued_sidekiq_job(poll.status.id)
+ end
+ end
+
+ context 'when the poll was created by a remote account' do
+ let(:account) { Fabricate(:account, domain: 'host.example') }
+
+ it 'stores the votes and processes delivery' do
+ expect { subject }
+ .to change(PollVote, :count).by(1)
+
+ expect(ActivityPub::DeliveryWorker)
+ .to have_enqueued_sidekiq_job(anything, voter.id, poll.account.inbox_url)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/webhook_service_spec.rb b/spec/services/webhook_service_spec.rb
new file mode 100644
index 0000000000..22a60db9f5
--- /dev/null
+++ b/spec/services/webhook_service_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe WebhookService do
+ describe '#call' do
+ context 'with a relevant event webhook' do
+ let!(:report) { Fabricate(:report) }
+ let!(:webhook) { Fabricate(:webhook, events: ['report.created']) }
+
+ it 'finds and delivers webhook payloads' do
+ expect { subject.call('report.created', report) }
+ .to enqueue_sidekiq_job(Webhooks::DeliveryWorker)
+ .with(
+ webhook.id,
+ anything
+ )
+ end
+ end
+
+ context 'without any relevant event webhooks' do
+ let!(:report) { Fabricate(:report) }
+
+ it 'does not deliver webhook payloads' do
+ expect { subject.call('report.created', report) }
+ .to_not enqueue_sidekiq_job(Webhooks::DeliveryWorker)
+ end
+ end
+ end
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index dc60976d05..8a01792a19 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -23,6 +23,12 @@ RSpec.configure do |config|
config.before :suite do
Rails.application.load_seed
Chewy.strategy(:bypass)
+
+ # NOTE: we switched registrations mode to closed by default, but the specs
+ # very heavily rely on having it enabled by default, as it relies on users
+ # being approved by default except in select cases where explicitly testing
+ # other registration modes
+ Setting.registrations_mode = 'open'
end
config.after :suite do
diff --git a/spec/support/examples/cache.rb b/spec/support/examples/cache.rb
index afbee66b2d..60e522f426 100644
--- a/spec/support/examples/cache.rb
+++ b/spec/support/examples/cache.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
shared_examples 'cacheable response' do |expects_vary: false|
- it 'sets correct cache and vary headers and does not set cookies or session' do
+ it 'sets correct cache and vary headers and does not set cookies or session', :aggregate_failures do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be_nil
diff --git a/spec/support/stories/profile_stories.rb b/spec/support/stories/profile_stories.rb
index 74342c337d..f5fc9a441f 100644
--- a/spec/support/stories/profile_stories.rb
+++ b/spec/support/stories/profile_stories.rb
@@ -21,6 +21,12 @@ module ProfileStories
click_on I18n.t('auth.login')
end
+ def as_a_logged_in_admin
+ # This is a bit awkward, but this avoids code duplication.
+ as_a_logged_in_user
+ bob.update!(role: UserRole.find_by!(name: 'Admin'))
+ end
+
def with_alice_as_local_user
@alice_bio = '@alice and @bob are fictional characters commonly used as' \
'placeholder names in #cryptology, as well as #science and' \
diff --git a/spec/support/streaming_server_manager.rb b/spec/support/streaming_server_manager.rb
index 39657586f2..b702fc77ce 100644
--- a/spec/support/streaming_server_manager.rb
+++ b/spec/support/streaming_server_manager.rb
@@ -102,6 +102,16 @@ RSpec.configure do |config|
self.use_transactional_tests = false
DatabaseCleaner.cleaning do
+ # NOTE: we switched registrations mode to closed by default, but the specs
+ # very heavily rely on having it enabled by default, as it relies on users
+ # being approved by default except in select cases where explicitly testing
+ # other registration modes
+ # Also needs to be set per-example here because of the database cleaner.
+ Setting.registrations_mode = 'open'
+
+ # Load seeds so we have the default roles otherwise cleared by `DatabaseCleaner`
+ Rails.application.load_seed
+
example.run
end
diff --git a/spec/support/threading_helpers.rb b/spec/support/threading_helpers.rb
new file mode 100644
index 0000000000..edf45822ca
--- /dev/null
+++ b/spec/support/threading_helpers.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module ThreadingHelpers
+ def multi_threaded_execution(thread_count)
+ wait_for_start = true
+
+ threads = Array.new(thread_count) do
+ Thread.new do
+ true while wait_for_start
+ yield
+ end
+ end
+
+ wait_for_start = false
+ threads.each(&:join)
+ end
+end
diff --git a/spec/system/ocr_spec.rb b/spec/system/ocr_spec.rb
new file mode 100644
index 0000000000..254efa7137
--- /dev/null
+++ b/spec/system/ocr_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'OCR', :paperclip_processing, :sidekiq_inline do
+ include ProfileStories
+
+ let(:email) { 'test@example.com' }
+ let(:password) { 'password' }
+ let(:confirmed_at) { Time.zone.now }
+ let(:finished_onboarding) { true }
+
+ before do
+ as_a_logged_in_user
+ visit root_path
+ end
+
+ it 'can recognize text in a media attachment' do
+ expect(page).to have_css('div.app-holder')
+
+ within('.compose-form') do
+ attach_file('file-upload-input', file_fixture('text.png'), make_visible: true)
+
+ within('.compose-form__upload') do
+ click_on('Edit')
+ end
+ end
+
+ click_on('Detect text from picture')
+
+ expect(page).to have_css('#upload-modal__description', text: /Hello Mastodon\s*/, wait: 10)
+ end
+end
diff --git a/spec/system/report_interface_spec.rb b/spec/system/report_interface_spec.rb
new file mode 100644
index 0000000000..6eba552559
--- /dev/null
+++ b/spec/system/report_interface_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'report interface', :paperclip_processing do
+ include ProfileStories
+
+ let(:email) { 'admin@example.com' }
+ let(:password) { 'password' }
+ let(:confirmed_at) { Time.zone.now }
+ let(:finished_onboarding) { true }
+
+ let(:reported_account) { Fabricate(:account) }
+ let(:reported_status) { Fabricate(:status, account: reported_account) }
+ let(:media_attachment) { Fabricate(:media_attachment, account: reported_account, status: reported_status, file: attachment_fixture('attachment.jpg')) }
+ let!(:report) { Fabricate(:report, target_account: reported_account, status_ids: [media_attachment.status.id]) }
+
+ before do
+ as_a_logged_in_admin
+ visit admin_report_path(report)
+ end
+
+ it 'displays the report interface, including the javascript bits' do
+ # The report category selector React component is properly rendered
+ expect(page).to have_css('.report-reason-selector')
+
+ # The media React component is properly rendered
+ page.scroll_to(page.find('.batch-table__row'))
+ expect(page).to have_css('.spoiler-button__overlay__label')
+ end
+end
diff --git a/spec/validators/blacklisted_email_validator_spec.rb b/spec/validators/blacklisted_email_validator_spec.rb
index 6292f0737e..86760df2e7 100644
--- a/spec/validators/blacklisted_email_validator_spec.rb
+++ b/spec/validators/blacklisted_email_validator_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe BlacklistedEmailValidator do
describe '#validate' do
- subject { described_class.new.validate(user); errors }
+ subject { described_class.new.validate(user) }
let(:user) { instance_double(User, email: 'info@mail.com', sign_up_ip: '1.2.3.4', errors: errors) }
let(:errors) { instance_double(ActiveModel::Errors, add: nil) }
@@ -18,7 +18,8 @@ RSpec.describe BlacklistedEmailValidator do
let(:blocked_email) { true }
it 'adds error' do
- described_class.new.validate(user)
+ subject
+
expect(errors).to have_received(:add).with(:email, :blocked).once
end
end
@@ -27,7 +28,8 @@ RSpec.describe BlacklistedEmailValidator do
let(:blocked_email) { false }
it 'does not add errors' do
- described_class.new.validate(user)
+ subject
+
expect(errors).to_not have_received(:add)
end
@@ -39,7 +41,8 @@ RSpec.describe BlacklistedEmailValidator do
end
it 'adds error' do
- described_class.new.validate(user)
+ subject
+
expect(errors).to have_received(:add).with(:email, :taken).once
end
end
diff --git a/spec/validators/email_mx_validator_spec.rb b/spec/validators/email_mx_validator_spec.rb
index 21b1ad0a11..bc26be8729 100644
--- a/spec/validators/email_mx_validator_spec.rb
+++ b/spec/validators/email_mx_validator_spec.rb
@@ -5,6 +5,7 @@ require 'rails_helper'
describe EmailMxValidator do
describe '#validate' do
let(:user) { instance_double(User, email: 'foo@example.com', sign_up_ip: '1.2.3.4', errors: instance_double(ActiveModel::Errors, add: nil)) }
+ let(:resolv_dns_double) { instance_double(Resolv::DNS) }
context 'with an e-mail domain that is explicitly allowed' do
around do |block|
@@ -15,13 +16,7 @@ describe EmailMxValidator do
end
it 'does not add errors if there are no DNS records' do
- resolver = instance_double(Resolv::DNS)
-
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver('example.com')
subject.validate(user)
expect(user.errors).to_not have_received(:add)
@@ -29,13 +24,7 @@ describe EmailMxValidator do
end
it 'adds no error if there are DNS records for the e-mail domain' do
- resolver = instance_double(Resolv::DNS)
-
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([Resolv::DNS::Resource::IN::A.new('192.0.2.42')])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver('example.com', a: resolv_double_a('192.0.2.42'))
subject.validate(user)
expect(user.errors).to_not have_received(:add)
@@ -58,13 +47,7 @@ describe EmailMxValidator do
end
it 'adds an error if the email domain name contains empty labels' do
- resolver = instance_double(Resolv::DNS)
-
- allow(resolver).to receive(:getresources).with('example..com', Resolv::DNS::Resource::IN::MX).and_return([])
- allow(resolver).to receive(:getresources).with('example..com', Resolv::DNS::Resource::IN::A).and_return([Resolv::DNS::Resource::IN::A.new('192.0.2.42')])
- allow(resolver).to receive(:getresources).with('example..com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver('example..com', a: resolv_double_a('192.0.2.42'))
user = instance_double(User, email: 'foo@example..com', sign_up_ip: '1.2.3.4', errors: instance_double(ActiveModel::Errors, add: nil))
subject.validate(user)
@@ -72,30 +55,15 @@ describe EmailMxValidator do
end
it 'adds an error if there are no DNS records for the e-mail domain' do
- resolver = instance_double(Resolv::DNS)
-
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver('example.com')
subject.validate(user)
expect(user.errors).to have_received(:add)
end
it 'adds an error if a MX record does not lead to an IP' do
- resolver = instance_double(Resolv::DNS)
-
- allow(resolver).to receive(:getresources)
- .with('example.com', Resolv::DNS::Resource::IN::MX)
- .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver('example.com', mx: resolv_double_mx('mail.example.com'))
+ configure_resolver('mail.example.com')
subject.validate(user)
expect(user.errors).to have_received(:add)
@@ -103,20 +71,48 @@ describe EmailMxValidator do
it 'adds an error if the MX record is blacklisted' do
EmailDomainBlock.create!(domain: 'mail.example.com')
- resolver = instance_double(Resolv::DNS)
- allow(resolver).to receive(:getresources)
- .with('example.com', Resolv::DNS::Resource::IN::MX)
- .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')])
- allow(resolver).to receive(:timeouts=).and_return(nil)
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_resolver(
+ 'example.com',
+ mx: resolv_double_mx('mail.example.com')
+ )
+ configure_resolver(
+ 'mail.example.com',
+ a: instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5'),
+ aaaa: instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')
+ )
subject.validate(user)
expect(user.errors).to have_received(:add)
end
end
+
+ def configure_resolver(domain, options = {})
+ allow(resolv_dns_double)
+ .to receive(:getresources)
+ .with(domain, Resolv::DNS::Resource::IN::MX)
+ .and_return(Array(options[:mx]))
+ allow(resolv_dns_double)
+ .to receive(:getresources)
+ .with(domain, Resolv::DNS::Resource::IN::A)
+ .and_return(Array(options[:a]))
+ allow(resolv_dns_double)
+ .to receive(:getresources)
+ .with(domain, Resolv::DNS::Resource::IN::AAAA)
+ .and_return(Array(options[:aaaa]))
+ allow(resolv_dns_double)
+ .to receive(:timeouts=)
+ .and_return(nil)
+ allow(Resolv::DNS)
+ .to receive(:open)
+ .and_yield(resolv_dns_double)
+ end
+
+ def resolv_double_mx(domain)
+ instance_double(Resolv::DNS::Resource::MX, exchange: domain)
+ end
+
+ def resolv_double_a(domain)
+ Resolv::DNS::Resource::IN::A.new(domain)
+ end
end
diff --git a/spec/workers/activitypub/fetch_replies_worker_spec.rb b/spec/workers/activitypub/fetch_replies_worker_spec.rb
index ff4d049a26..2d080e286e 100644
--- a/spec/workers/activitypub/fetch_replies_worker_spec.rb
+++ b/spec/workers/activitypub/fetch_replies_worker_spec.rb
@@ -21,7 +21,7 @@ describe ActivityPub::FetchRepliesWorker do
describe 'perform' do
it 'performs a request if the collection URI is from the same host' do
- stub_request(:get, 'https://example.com/statuses_replies/1').to_return(status: 200, body: json)
+ stub_request(:get, 'https://example.com/statuses_replies/1').to_return(status: 200, body: json, headers: { 'Content-Type': 'application/activity+json' })
subject.perform(status.id, 'https://example.com/statuses_replies/1')
expect(a_request(:get, 'https://example.com/statuses_replies/1')).to have_been_made.once
end
diff --git a/spec/workers/backup_worker_spec.rb b/spec/workers/backup_worker_spec.rb
index 987cbc7d60..74928c7ca6 100644
--- a/spec/workers/backup_worker_spec.rb
+++ b/spec/workers/backup_worker_spec.rb
@@ -15,12 +15,17 @@ describe BackupWorker do
let!(:other_backup) { Fabricate(:backup, user: backup.user) }
it 'sends the backup to the service and removes other backups', :sidekiq_inline do
- expect do
- worker.perform(backup.id)
- end.to change(UserMailer.deliveries, :size).by(1)
+ emails = capture_emails { worker.perform(backup.id) }
expect(service).to have_received(:call).with(backup)
expect { other_backup.reload }.to raise_error(ActiveRecord::RecordNotFound)
+ expect(emails.size)
+ .to eq(1)
+ expect(emails.first)
+ .to have_attributes(
+ to: contain_exactly(backup.user.email),
+ subject: I18n.t('user_mailer.backup_ready.subject')
+ )
end
context 'when sidekiq retries are exhausted' do
diff --git a/spec/workers/scheduler/auto_close_registrations_scheduler_spec.rb b/spec/workers/scheduler/auto_close_registrations_scheduler_spec.rb
new file mode 100644
index 0000000000..c0c50b128d
--- /dev/null
+++ b/spec/workers/scheduler/auto_close_registrations_scheduler_spec.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Scheduler::AutoCloseRegistrationsScheduler do
+ subject { described_class.new }
+
+ describe '#perform' do
+ let(:moderator_activity_date) { Time.now.utc }
+
+ before do
+ Fabricate(:user, role: UserRole.find_by(name: 'Owner'), current_sign_in_at: 10.years.ago)
+ Fabricate(:user, role: UserRole.find_by(name: 'Moderator'), current_sign_in_at: moderator_activity_date)
+ end
+
+ context 'when registrations are open' do
+ before do
+ Setting.registrations_mode = 'open'
+ end
+
+ context 'when a moderator has logged in recently' do
+ let(:moderator_activity_date) { Time.now.utc }
+
+ it 'does not change registrations mode' do
+ expect { subject.perform }.to_not change(Setting, :registrations_mode)
+ end
+ end
+
+ context 'when a moderator has not recently signed in' do
+ let(:moderator_activity_date) { 1.year.ago }
+
+ it 'changes registrations mode from open to approved' do
+ expect { subject.perform }.to change(Setting, :registrations_mode).from('open').to('approved')
+ end
+ end
+ end
+
+ context 'when registrations are closed' do
+ before do
+ Setting.registrations_mode = 'none'
+ end
+
+ context 'when a moderator has logged in recently' do
+ let(:moderator_activity_date) { Time.now.utc }
+
+ it 'does not change registrations mode' do
+ expect { subject.perform }.to_not change(Setting, :registrations_mode)
+ end
+ end
+
+ context 'when a moderator has not recently signed in' do
+ let(:moderator_activity_date) { 1.year.ago }
+
+ it 'does not change registrations mode' do
+ expect { subject.perform }.to_not change(Setting, :registrations_mode)
+ end
+ end
+ end
+ end
+end
diff --git a/streaming/.eslintrc.js b/streaming/.eslintrc.cjs
similarity index 79%
rename from streaming/.eslintrc.js
rename to streaming/.eslintrc.cjs
index 188ebb512d..e25cff7df0 100644
--- a/streaming/.eslintrc.js
+++ b/streaming/.eslintrc.cjs
@@ -1,4 +1,8 @@
+/* eslint-disable import/no-commonjs */
+
// @ts-check
+
+// @ts-ignore - This needs to be a CJS file (eslint does not yet support ESM configs), and TS is complaining we use require
const { defineConfig } = require('eslint-define-config');
module.exports = defineConfig({
@@ -22,22 +26,18 @@ module.exports = defineConfig({
// to maintain.
'no-delete-var': 'off',
- // The streaming server is written in commonjs, not ESM for now:
- 'import/no-commonjs': 'off',
-
// This overrides the base configuration for this rule to pick up
// dependencies for the streaming server from the correct package.json file.
'import/no-extraneous-dependencies': [
'error',
{
- devDependencies: [
- 'streaming/.eslintrc.js',
- ],
+ devDependencies: ['streaming/.eslintrc.cjs'],
optionalDependencies: false,
peerDependencies: false,
includeTypes: true,
packageDir: __dirname,
},
],
+ 'import/extensions': ['error', 'always'],
},
});
diff --git a/streaming/errors.js b/streaming/errors.js
new file mode 100644
index 0000000000..6c44d2cb8f
--- /dev/null
+++ b/streaming/errors.js
@@ -0,0 +1,46 @@
+// @ts-check
+
+/**
+ * Typed as a string because otherwise it's a const string, which means we can't
+ * override it in let statements.
+ * @type {string}
+ */
+export const UNEXPECTED_ERROR_MESSAGE = 'An unexpected error occurred';
+
+/**
+ * Extracts the status and message properties from the error object, if
+ * available for public use. The `unknown` is for catch statements
+ * @param {Error | AuthenticationError | RequestError | unknown} err
+ */
+export function extractStatusAndMessage(err) {
+ let statusCode = 500;
+ let errorMessage = UNEXPECTED_ERROR_MESSAGE;
+ if (err instanceof AuthenticationError || err instanceof RequestError) {
+ statusCode = err.status;
+ errorMessage = err.message;
+ }
+
+ return { statusCode, errorMessage };
+}
+
+export class RequestError extends Error {
+ /**
+ * @param {string} message
+ */
+ constructor(message) {
+ super(message);
+ this.name = "RequestError";
+ this.status = 400;
+ }
+}
+
+export class AuthenticationError extends Error {
+ /**
+ * @param {string} message
+ */
+ constructor(message) {
+ super(message);
+ this.name = "AuthenticationError";
+ this.status = 401;
+ }
+}
diff --git a/streaming/index.js b/streaming/index.js
index 6945a9ae7d..154ecbc02c 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -1,30 +1,36 @@
// @ts-check
-const fs = require('fs');
-const http = require('http');
-const path = require('path');
-const url = require('url');
+import fs from 'node:fs';
+import http from 'node:http';
+import path from 'node:path';
+import url from 'node:url';
-const cors = require('cors');
-const dotenv = require('dotenv');
-const express = require('express');
-const { Redis } = require('ioredis');
-const { JSDOM } = require('jsdom');
-const pg = require('pg');
-const dbUrlToConfig = require('pg-connection-string').parse;
-const WebSocket = require('ws');
+import cors from 'cors';
+import dotenv from 'dotenv';
+import express from 'express';
+import { Redis } from 'ioredis';
+import { JSDOM } from 'jsdom';
+import pg from 'pg';
+import pgConnectionString from 'pg-connection-string';
+import WebSocket from 'ws';
-const { logger, httpLogger, initializeLogLevel, attachWebsocketHttpLogger, createWebsocketLogger } = require('./logging');
-const { setupMetrics } = require('./metrics');
-const { isTruthy, normalizeHashtag, firstParam } = require("./utils");
+import { AuthenticationError, RequestError, extractStatusAndMessage as extractErrorStatusAndMessage } from './errors.js';
+import { logger, httpLogger, initializeLogLevel, attachWebsocketHttpLogger, createWebsocketLogger } from './logging.js';
+import { setupMetrics } from './metrics.js';
+import { isTruthy, normalizeHashtag, firstParam } from './utils.js';
const environment = process.env.NODE_ENV || 'development';
// Correctly detect and load .env or .env.production file based on environment:
const dotenvFile = environment === 'production' ? '.env.production' : '.env';
+const dotenvFilePath = path.resolve(
+ url.fileURLToPath(
+ new URL(path.join('..', dotenvFile), import.meta.url)
+ )
+);
dotenv.config({
- path: path.resolve(__dirname, path.join('..', dotenvFile))
+ path: dotenvFilePath
});
initializeLogLevel(process.env, environment);
@@ -141,7 +147,7 @@ const pgConfigFromEnv = (env) => {
let baseConfig = {};
if (env.DATABASE_URL) {
- const parsedUrl = dbUrlToConfig(env.DATABASE_URL);
+ const parsedUrl = pgConnectionString.parse(env.DATABASE_URL);
// The result of dbUrlToConfig from pg-connection-string is not type
// compatible with pg.PoolConfig, since parts of the connection URL may be
@@ -186,7 +192,7 @@ const pgConfigFromEnv = (env) => {
if (!baseConfig.password && env.DB_PASS) {
baseConfig.password = env.DB_PASS;
}
- } else if (Object.hasOwnProperty.call(pgConfigs, environment)) {
+ } else if (Object.hasOwn(pgConfigs, environment)) {
baseConfig = pgConfigs[environment];
if (env.DB_SSLMODE) {
@@ -324,7 +330,7 @@ const startServer = async () => {
// Unfortunately for using the on('upgrade') setup, we need to manually
// write a HTTP Response to the Socket to close the connection upgrade
// attempt, so the following code is to handle all of that.
- const statusCode = err.status ?? 401;
+ const {statusCode, errorMessage } = extractErrorStatusAndMessage(err);
/** @type {Record