Merge commit '2fe1b8d1695d8faa452a69872fde94ccc4611576' into glitch-soc/merge-upstream

Conflicts:
- `app/helpers/application_helper.rb`:
  Not a real conflict, upstream added helpers right next to glitch-soc only
  helpers.
  Added upstream's helpers.
- `spec/models/status_spec.rb`:
  Not a real conflict, upstream added specs right next to glitch-soc only
  specs.
  Added upstream's tests.
main
Claire 2024-05-06 17:53:51 +02:00
commit 016d194274
58 changed files with 1577 additions and 374 deletions

View File

@ -167,9 +167,9 @@ GEM
activesupport
cbor (0.5.9.8)
charlock_holmes (0.7.7)
chewy (7.5.1)
chewy (7.6.0)
activesupport (>= 5.2)
elasticsearch (>= 7.12.0, < 7.14.0)
elasticsearch (>= 7.14.0, < 8)
elasticsearch-dsl
chunky_png (1.4.0)
climate_control (1.2.0)
@ -220,14 +220,14 @@ GEM
dotenv (3.1.1)
drb (2.2.1)
ed25519 (1.3.0)
elasticsearch (7.13.3)
elasticsearch-api (= 7.13.3)
elasticsearch-transport (= 7.13.3)
elasticsearch-api (7.13.3)
elasticsearch (7.17.10)
elasticsearch-api (= 7.17.10)
elasticsearch-transport (= 7.17.10)
elasticsearch-api (7.17.10)
multi_json
elasticsearch-dsl (0.1.10)
elasticsearch-transport (7.13.3)
faraday (~> 1)
elasticsearch-transport (7.17.10)
faraday (>= 1, < 3)
multi_json
email_spec (2.2.2)
htmlentities (~> 4.3.3)
@ -346,7 +346,7 @@ GEM
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.7.2)
irb (1.13.0)
irb (1.13.1)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jmespath (1.6.2)
@ -601,7 +601,7 @@ GEM
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.0)
reline (0.5.4)
reline (0.5.5)
io-console (~> 0.5)
request_store (1.6.0)
rack (>= 1.4)

View File

@ -9,7 +9,7 @@ module Admin
@site_upload.destroy!
redirect_to admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
redirect_back fallback_location: admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
end
private

View File

@ -9,16 +9,22 @@ class Api::V1::AccountsController < Api::BaseController
before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' }, only: [:block, :unblock]
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create]
before_action :require_user!, except: [:show, :create]
before_action :set_account, except: [:create]
before_action :check_account_approval, except: [:create]
before_action :check_account_confirmation, except: [:create]
before_action :require_user!, except: [:index, :show, :create]
before_action :set_account, except: [:index, :create]
before_action :set_accounts, only: [:index]
before_action :check_account_approval, except: [:index, :create]
before_action :check_account_confirmation, except: [:index, :create]
before_action :check_enabled_registrations, only: [:create]
before_action :check_accounts_limit, only: [:index]
skip_before_action :require_authenticated_user!, only: :create
override_rate_limit_headers :follow, family: :follows
def index
render json: @accounts, each_serializer: REST::AccountSerializer
end
def show
cache_if_unauthenticated!
render json: @account, serializer: REST::AccountSerializer
@ -79,6 +85,10 @@ class Api::V1::AccountsController < Api::BaseController
@account = Account.find(params[:id])
end
def set_accounts
@accounts = Account.where(id: account_ids).without_unapproved
end
def check_account_approval
raise(ActiveRecord::RecordNotFound) if @account.local? && @account.user_pending?
end
@ -87,10 +97,22 @@ class Api::V1::AccountsController < Api::BaseController
raise(ActiveRecord::RecordNotFound) if @account.local? && !@account.user_confirmed?
end
def check_accounts_limit
raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT
end
def relationships(**options)
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
end
def account_ids
Array(accounts_params[:ids]).uniq.map(&:to_i)
end
def accounts_params
params.permit(ids: [])
end
def account_params
params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone, :invite_code)
end

View File

@ -1,9 +1,12 @@
# frozen_string_literal: true
class Api::V1::Push::SubscriptionsController < Api::BaseController
include Redisable
include Lockable
before_action -> { doorkeeper_authorize! :push }
before_action :require_user!
before_action :set_push_subscription
before_action :set_push_subscription, only: [:show, :update]
before_action :check_push_subscription, only: [:show, :update]
def show
@ -11,16 +14,18 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
end
def create
@push_subscription&.destroy!
with_redis_lock("push_subscription:#{current_user.id}") do
destroy_web_push_subscriptions!
@push_subscription = Web::PushSubscription.create!(
endpoint: subscription_params[:endpoint],
key_p256dh: subscription_params[:keys][:p256dh],
key_auth: subscription_params[:keys][:auth],
data: data_params,
user_id: current_user.id,
access_token_id: doorkeeper_token.id
)
@push_subscription = Web::PushSubscription.create!(
endpoint: subscription_params[:endpoint],
key_p256dh: subscription_params[:keys][:p256dh],
key_auth: subscription_params[:keys][:auth],
data: data_params,
user_id: current_user.id,
access_token_id: doorkeeper_token.id
)
end
render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
end
@ -31,14 +36,18 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
end
def destroy
@push_subscription&.destroy!
destroy_web_push_subscriptions!
render_empty
end
private
def destroy_web_push_subscriptions!
doorkeeper_token.web_push_subscriptions.destroy_all
end
def set_push_subscription
@push_subscription = Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id)
@push_subscription = doorkeeper_token.web_push_subscriptions.first
end
def check_push_subscription

View File

@ -5,9 +5,11 @@ class Api::V1::StatusesController < Api::BaseController
before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy]
before_action :require_user!, except: [:show, :context]
before_action :set_status, only: [:show, :context]
before_action :set_thread, only: [:create]
before_action :require_user!, except: [:index, :show, :context]
before_action :set_statuses, only: [:index]
before_action :set_status, only: [:show, :context]
before_action :set_thread, only: [:create]
before_action :check_statuses_limit, only: [:index]
override_rate_limit_headers :create, family: :statuses
override_rate_limit_headers :update, family: :statuses
@ -23,6 +25,11 @@ class Api::V1::StatusesController < Api::BaseController
DESCENDANTS_LIMIT = 60
DESCENDANTS_DEPTH_LIMIT = 20
def index
@statuses = cache_collection(@statuses, Status)
render json: @statuses, each_serializer: REST::StatusSerializer
end
def show
cache_if_unauthenticated!
@status = cache_collection([@status], Status).first
@ -113,6 +120,10 @@ class Api::V1::StatusesController < Api::BaseController
private
def set_statuses
@statuses = Status.permitted_statuses_from_ids(status_ids, current_account)
end
def set_status
@status = Status.find(params[:id])
authorize @status, :show?
@ -127,6 +138,18 @@ class Api::V1::StatusesController < Api::BaseController
render json: { error: I18n.t('statuses.errors.in_reply_not_found') }, status: 404
end
def check_statuses_limit
raise(Mastodon::ValidationError) if status_ids.size > DEFAULT_STATUSES_LIMIT
end
def status_ids
Array(statuses_params[:ids]).uniq.map(&:to_i)
end
def statuses_params
params.permit(ids: [])
end
def status_params
params.permit(
:status,

View File

@ -0,0 +1,23 @@
# frozen_string_literal: true
module WellKnown
class OauthMetadataController < ActionController::Base # rubocop:disable Rails/ApplicationController
include CacheConcern
# Prevent `active_model_serializer`'s `ActionController::Serialization` from calling `current_user`
# and thus re-issuing session cookies
serialization_scope nil
def show
# Due to this document potentially changing between Mastodon versions (as
# new OAuth scopes are added), we don't use expires_in to cache upstream,
# instead just caching in the rails cache:
render_with_cache(
json: ::OauthMetadataPresenter.new,
serializer: ::OauthMetadataSerializer,
content_type: 'application/json',
expires_in: 15.minutes
)
end
end
end

View File

@ -241,6 +241,13 @@ module ApplicationHelper
EmojiFormatter.new(html, custom_emojis, other_options.merge(animate: prefers_autoplay?)).to_s
end
def site_icon_path(type, size = '48')
icon = SiteUpload.find_by(var: type)
return nil unless icon
icon.file.url(size)
end
# glitch-soc addition to handle the multiple flavors
def preload_locale_pack
supported_locales = Themes.instance.flavour(current_flavour)['locales']

View File

@ -5,7 +5,7 @@
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
"about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.",
"about.domain_blocks.silenced.explanation": "عموماً، لن ترى ملفات التعريف والمحتوى من هذا الخادم، إلا إذا كنت تبحث عنه بشكل صريح أو تختار أن تتابعه.",
"about.domain_blocks.silenced.title": "تم كتمه",
"about.domain_blocks.silenced.title": "محدود",
"about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
"about.domain_blocks.suspended.title": "مُعلّق",
"about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
@ -21,7 +21,7 @@
"account.blocked": "محظور",
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
"account.cancel_follow_request": "إلغاء طلب المتابعة",
"account.copy": "نسخ الرابط إلى الملف الشخصي",
"account.copy": "نسخ الرابط إلى الحساب",
"account.direct": "إشارة خاصة لـ @{name}",
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
"account.domain_blocked": "اسم النِّطاق محظور",
@ -32,7 +32,7 @@
"account.featured_tags.last_status_never": "لا توجد رسائل",
"account.featured_tags.title": "وسوم {name} المميَّزة",
"account.follow": "متابعة",
"account.follow_back": "تابعه بدورك",
"account.follow_back": "رد المتابعة",
"account.followers": "مُتابِعون",
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
"account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}",
@ -89,12 +89,12 @@
"announcement.announcement": "إعلان",
"attachments_list.unprocessed": "(غير معالَج)",
"audio.hide": "إخفاء المقطع الصوتي",
"block_modal.remote_users_caveat": "Do ti kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi sështë i garantuar, ngaqë disa shërbyes mund ti trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.",
"block_modal.show_less": "اعرض أقلّ",
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
"block_modal.show_less": "أظهر الأقل",
"block_modal.show_more": "أظهر المزيد",
"block_modal.they_cant_mention": "لن يستطيع ذِكرك أو متابعتك.",
"block_modal.they_cant_see_posts": "لن يستطيع رؤية منشوراتك ولن ترى منشوراته.",
"block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حجبه.",
"block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حظره.",
"block_modal.title": "أتريد حظر المستخدم؟",
"block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
"boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
@ -220,7 +220,7 @@
"domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.",
"domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.",
"domain_pill.server": "الخادِم",
"domain_pill.their_handle": "مُعرِّفُه:",
"domain_pill.their_handle": "مُعرفه:",
"domain_pill.their_server": "بيتهم الرقمي، حيث تُستضاف كافة منشوراتهم.",
"domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.",
"domain_pill.username": "اسم المستخدم",
@ -308,6 +308,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "هذا الملف الشخصي مشابه للملفات الشخصية التي تابعتها مؤخرا.",
"follow_suggestions.personalized_suggestion": "توصية مخصصة",
"follow_suggestions.popular_suggestion": "توصية رائجة",
"follow_suggestions.popular_suggestion_longer": "رائج على {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "مشابهة لمواصفات الملفات الشخصية التي تابعتَها حديثًا",
"follow_suggestions.view_all": "عرض الكل",
"follow_suggestions.who_to_follow": "حسابات للمُتابَعة",
"followed_tags": "الوسوم المتابَعة",
@ -360,8 +362,8 @@
"interaction_modal.title.reply": "الرد على منشور {name}",
"intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
"intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
"intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
"keyboard_shortcuts.back": "للعودة",
"intervals.full.minutes": "{number, plural, one {دقيقة واحدة}two {دقيقتان} other {# دقائق}}",
"keyboard_shortcuts.back": "للرجوع",
"keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين",
"keyboard_shortcuts.boost": "لإعادة النشر",
"keyboard_shortcuts.column": "للتركيز على منشور على أحد الأعمدة",
@ -421,7 +423,9 @@
"loading_indicator.label": "جاري التحميل…",
"media_gallery.toggle_visible": "{number, plural, zero {} one {اخف الصورة} two {اخف الصورتين} few {اخف الصور} many {اخف الصور} other {اخف الصور}}",
"moved_to_account_banner.text": "حسابك {disabledAccount} معطل حاليًا لأنك انتقلت إلى {movedToAccount}.",
"mute_modal.hide_from_notifications": "إخفاء من قائمة الإشعارات",
"mute_modal.hide_options": "إخفاء الخيارات",
"mute_modal.indefinite": "إلى أن أفسخ كتمها",
"mute_modal.show_options": "إظهار الخيارات",
"mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.",
"mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.",
@ -460,10 +464,20 @@
"notification.follow": "يتابعك {name}",
"notification.follow_request": "لقد طلب {name} متابعتك",
"notification.mention": "{name} ذكرك",
"notification.moderation-warning.learn_more": "اعرف المزيد",
"notification.moderation_warning.action_disable": "تم تعطيل حسابك.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.",
"notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.",
"notification.moderation_warning.action_sensitive": "سيتم وضع علامة على منشوراتك على أنها حساسة من الآن فصاعدا.",
"notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.",
"notification.own_poll": "انتهى استطلاعك للرأي",
"notification.poll": "لقد انتهى استطلاع رأي شاركتَ فيه",
"notification.reblog": "قام {name} بمشاركة منشورك",
"notification.relationships_severance_event": "فقدت الاتصالات مع {name}",
"notification.relationships_severance_event.account_suspension": "قام مشرف من {from} بتعليق {target}، مما يعني أنك لم يعد بإمكانك تلقي التحديثات منهم أو التفاعل معهم.",
"notification.relationships_severance_event.domain_block": "قام مشرف من {from} بحظر {target}، بما في ذلك {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.",
"notification.relationships_severance_event.learn_more": "اعرف المزيد",
"notification.relationships_severance_event.user_domain_block": "لقد قمت بحظر {target}، مما أدى إلى إزالة {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.",
"notification.status": "{name} نشر للتو",
"notification.update": "عدّلَ {name} منشورًا",
"notification_requests.accept": "موافقة",
@ -503,10 +517,15 @@
"notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً",
"notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً",
"notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.",
"notifications.policy.filter_new_accounts.hint": "تم إنشاؤها منذ {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
"notifications.policy.filter_new_accounts_title": "حسابات جديدة",
"notifications.policy.filter_not_followers_hint": "بما في ذلك الأشخاص الذين يتابعونك أقل من {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
"notifications.policy.filter_not_followers_title": "أشخاص لا يتابعونك",
"notifications.policy.filter_not_following_hint": "حتى توافق عليهم يدويا",
"notifications.policy.filter_not_following_title": "أشخاص لا تتابعهم",
"notifications.policy.filter_private_mentions_hint": "تمت تصفيته إلا إذا أن يكون ردًا على ذكرك أو إذا كنت تتابع الحساب",
"notifications.policy.filter_private_mentions_title": "إشارات خاصة غير مرغوب فيها",
"notifications.policy.title": "تصفية الإشعارات من…",
"notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
"notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
"notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
@ -687,6 +706,7 @@
"status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}",
"status.embed": "إدماج",
"status.favourite": "فضّل",
"status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}",
"status.filter": "تصفية هذه الرسالة",
"status.filtered": "مُصفّى",
"status.hide": "إخفاء المنشور",
@ -707,6 +727,7 @@
"status.reblog": "إعادة النشر",
"status.reblog_private": "إعادة النشر إلى الجمهور الأصلي",
"status.reblogged_by": "شارَكَه {name}",
"status.reblogs": "{count, plural, one {تعزيز واحد} two {تعزيزتان} few {# تعزيزات} many {# تعزيزات} other {# تعزيزات}}",
"status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
"status.redraft": "إزالة وإعادة الصياغة",
"status.remove_bookmark": "احذفه مِن الفواصل المرجعية",

View File

@ -331,7 +331,7 @@
"footer.source_code": "Quellcode anzeigen",
"footer.status": "Status",
"generic.saved": "Gespeichert",
"getting_started.heading": "Auf gehts!",
"getting_started.heading": "Auf gehts!",
"hashtag.column_header.tag_mode.all": "und {additional}",
"hashtag.column_header.tag_mode.any": "oder {additional}",
"hashtag.column_header.tag_mode.none": "ohne {additional}",
@ -400,7 +400,7 @@
"keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen",
"keyboard_shortcuts.search": "Suchleiste fokussieren",
"keyboard_shortcuts.spoilers": "Feld für Inhaltswarnung anzeigen/ausblenden",
"keyboard_shortcuts.start": "„Auf gehts!“ öffnen",
"keyboard_shortcuts.start": "„Auf gehts!“ öffnen",
"keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden",
"keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden",
"keyboard_shortcuts.toot": "Neuen Beitrag erstellen",

View File

@ -473,6 +473,15 @@
"notification.follow": "{name}さんにフォローされました",
"notification.follow_request": "{name}さんがあなたにフォローリクエストしました",
"notification.mention": "{name}さんがあなたに返信しました",
"notification.moderation-warning.learn_more": "さらに詳しく",
"notification.moderation_warning": "あなたは管理者からの警告を受けています。",
"notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。",
"notification.moderation_warning.action_disable": "あなたのアカウントは無効になりました。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "あなたの投稿のいくつかは閲覧注意として判定されています。",
"notification.moderation_warning.action_none": "あなたのアカウントは管理者からの警告を受けています。",
"notification.moderation_warning.action_sensitive": "あなたの投稿はこれから閲覧注意としてマークされます。",
"notification.moderation_warning.action_silence": "あなたのアカウントは制限されています。",
"notification.moderation_warning.action_suspend": "あなたのアカウントは停止されました。",
"notification.own_poll": "アンケートが終了しました",
"notification.poll": "アンケートが終了しました",
"notification.reblog": "{name}さんがあなたの投稿をブーストしました",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Čeprav vaš račun ni zaklenjen, zaposleni pri {domain} menijo, da bi morda želeli pregledati zahteve za sledenje teh računov ročno.",
"follow_suggestions.curated_suggestion": "Izbor osebja",
"follow_suggestions.dismiss": "Ne pokaži več",
"follow_suggestions.featured_longer": "Osebno izbrala ekipa {domain}",
"follow_suggestions.friends_of_friends_longer": "Priljubljeno med osebami, ki jim sledite",
"follow_suggestions.hints.featured": "Ta profil so izbrali skrbniki strežnika {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ta profil je priljubljen med osebami, ki jim sledite.",
"follow_suggestions.hints.most_followed": "Ta profil na strežniku {domain} je en izmed najbolj sledenih.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Ta profil je podoben profilom, ki ste jim nedavno začeli slediti.",
"follow_suggestions.personalized_suggestion": "Osebno prilagojen predlog",
"follow_suggestions.popular_suggestion": "Priljubljen predlog",
"follow_suggestions.popular_suggestion_longer": "Priljubljeno na {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Podobno profilom, ki ste jim pred kratkim sledili",
"follow_suggestions.view_all": "Pokaži vse",
"follow_suggestions.who_to_follow": "Komu slediti",
"followed_tags": "Sledeni ključniki",
@ -469,6 +473,15 @@
"notification.follow": "{name} vam sledi",
"notification.follow_request": "{name} vam želi slediti",
"notification.mention": "{name} vas je omenil/a",
"notification.moderation-warning.learn_more": "Več o tem",
"notification.moderation_warning": "Prejeli ste opozorilo moderatorjev",
"notification.moderation_warning.action_delete_statuses": "Nekatere vaše objave so odstranjene.",
"notification.moderation_warning.action_disable": "Vaš račun je bil onemogočen.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nekatere vaše objave so bile označene kot občutljive.",
"notification.moderation_warning.action_none": "Vaš račun je prejel opozorilo moderatorjev.",
"notification.moderation_warning.action_sensitive": "Vaše objave bodo odslej označene kot občutljive.",
"notification.moderation_warning.action_silence": "Vaš račun je bil omejen.",
"notification.moderation_warning.action_suspend": "Vaš račun je bil suspendiran.",
"notification.own_poll": "Vaša anketa je zaključena",
"notification.poll": "Anketa, v kateri ste sodelovali, je zaključena",
"notification.reblog": "{name} je izpostavila/a vašo objavo",

View File

@ -297,6 +297,7 @@
"filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re",
"filter_modal.select_filter.title": "Filtroje këtë postim",
"filter_modal.title.status": "Filtroni një postim",
"filtered_notifications_banner.mentions": "{count, plural, one {përmendje} other {përmendje}}",
"filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
"filtered_notifications_banner.title": "Njoftime të filtruar",
"firehose.all": "Krejt",
@ -307,6 +308,8 @@
"follow_requests.unlocked_explanation": "Edhe pse llogaria juaj sështë e kyçur, ekipi i {domain} mendoi se mund të donit të shqyrtonit dorazi kërkesa ndjekjeje prej këtyre llogarive.",
"follow_suggestions.curated_suggestion": "Zgjedhur nga ekipi",
"follow_suggestions.dismiss": "Mos shfaq më",
"follow_suggestions.featured_longer": "Zgjedhur enkas nga ekipi {domain}",
"follow_suggestions.friends_of_friends_longer": "Popullore mes personash që ndiqni",
"follow_suggestions.hints.featured": "Ky profil është zgjedhur nga ekipi {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ky profil është popullor mes personave që ndiqni.",
"follow_suggestions.hints.most_followed": "Ky profil është një nga më të ndjekur në {domain}.",
@ -314,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Ky profil është i ngjashëm me profile që keni ndjekur tani afër.",
"follow_suggestions.personalized_suggestion": "Sugjerim i personalizuar",
"follow_suggestions.popular_suggestion": "Sugjerim popullor",
"follow_suggestions.popular_suggestion_longer": "Popullore në {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "I ngjashëm me profile që keni zënë të ndiqni së fundi",
"follow_suggestions.view_all": "Shihni krejt",
"follow_suggestions.who_to_follow": "Cilët të ndiqen",
"followed_tags": "Hashtag-ë të ndjekur",
@ -468,6 +473,15 @@
"notification.follow": "{name} zuri tju ndjekë",
"notification.follow_request": "{name} ka kërkuar tju ndjekë",
"notification.mention": "{name} ju ka përmendur",
"notification.moderation-warning.learn_more": "Mësoni më tepër",
"notification.moderation_warning": "Keni marrë një sinjalizim moderimi",
"notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
"notification.moderation_warning.action_disable": "Llogaria juaj është çaktivizuar.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Disa prej postimeve tuaja u është vënë shenjë si me spec.",
"notification.moderation_warning.action_none": "Llogaria juaj ka marrë një sinjalizim moderimi.",
"notification.moderation_warning.action_sensitive": "Postimeve tuaja do tu vihet shenjë si me spec, nga tani e tutje.",
"notification.moderation_warning.action_silence": "Llogaria juaj është kufizuar.",
"notification.moderation_warning.action_suspend": "Llogaria juaj është pezulluar.",
"notification.own_poll": "Pyetësori juaj ka përfunduar",
"notification.poll": "Ka përfunduar një pyetësor ku keni votuar",
"notification.reblog": "{name} përforcoi mesazhin tuaj",

View File

@ -6,6 +6,8 @@ module AccessTokenExtension
included do
include Redisable
has_many :web_push_subscriptions, class_name: 'Web::PushSubscription', inverse_of: :access_token
after_commit :push_to_streaming_api
end

View File

@ -50,7 +50,7 @@ class Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure < Admin::Metrics:
WHERE date_trunc('day', media_attachments.created_at)::date = axis.period
AND #{account_domain_sql(params[:include_subdomains])}
)
SELECT COALESCE(SUM(size), 0) FROM new_media_attachments
SELECT COALESCE(SUM(size), 0)::bigint FROM new_media_attachments
) AS value
FROM (
SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period

View File

@ -282,6 +282,6 @@ class LinkDetailsExtractor
end
def html_entities
@html_entities ||= HTMLEntities.new
@html_entities ||= HTMLEntities.new(:expanded)
end
end

View File

@ -3,6 +3,23 @@
module Status::ThreadingConcern
extend ActiveSupport::Concern
class_methods do
def permitted_statuses_from_ids(ids, account, stable: false)
statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq
relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
if stable
statuses.sort_by! { |status| ids.index(status.id) }
else
statuses
end
end
end
def ancestors(limit, account = nil)
find_statuses_from_tree_path(ancestor_ids(limit), account)
end
@ -76,15 +93,7 @@ module Status::ThreadingConcern
end
def find_statuses_from_tree_path(ids, account, promote: false)
statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq
relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
# Order ancestors/descendants by tree path
statuses.sort_by! { |status| ids.index(status.id) }
statuses = Status.permitted_statuses_from_ids(ids, account, stable: true)
# Bring self-replies to the top
if promote

View File

@ -44,6 +44,8 @@ class Form::AdminSettings
status_page_url
captcha_enabled
authorized_fetch
app_icon
favicon
).freeze
INTEGER_KEYS = %i(
@ -74,6 +76,8 @@ class Form::AdminSettings
UPLOAD_KEYS = %i(
thumbnail
mascot
app_icon
favicon
).freeze
PSEUDO_KEYS = %i(

View File

@ -19,7 +19,15 @@
class SiteUpload < ApplicationRecord
include Attachmentable
FAVICON_SIZES = [16, 32, 48].freeze
APPLE_ICON_SIZES = [57, 60, 72, 76, 114, 120, 144, 152, 167, 180, 1024].freeze
ANDROID_ICON_SIZES = [36, 48, 72, 96, 144, 192, 256, 384, 512].freeze
APP_ICON_SIZES = (APPLE_ICON_SIZES + ANDROID_ICON_SIZES).uniq.freeze
STYLES = {
app_icon: APP_ICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze,
favicon: FAVICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze,
thumbnail: {
'@1x': {
format: 'png',

View File

@ -273,7 +273,7 @@ class Status < ApplicationRecord
end
def reported?
@reported ||= Report.where(target_account: account).unresolved.exists?(['? = ANY(status_ids)', id])
@reported ||= account.targeted_reports.unresolved.exists?(['? = ANY(status_ids)', id]) || account.strikes.exists?(['? = ANY(status_ids)', id.to_s])
end
def emojis

View File

@ -37,7 +37,7 @@ class Tag < ApplicationRecord
HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}"
HASHTAG_RE = %r{(?<![=/)\w])#(#{HASHTAG_NAME_PAT})}i
HASHTAG_RE = %r{(?<![=/)\p{Alnum}])#(#{HASHTAG_NAME_PAT})}i
HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]\u0E47-\u0E4E#{HASHTAG_SEPARATORS}]/

View File

@ -0,0 +1,67 @@
# frozen_string_literal: true
class OauthMetadataPresenter < ActiveModelSerializers::Model
include RoutingHelper
attributes :issuer, :authorization_endpoint, :token_endpoint,
:revocation_endpoint, :scopes_supported,
:response_types_supported, :response_modes_supported,
:grant_types_supported, :token_endpoint_auth_methods_supported,
:service_documentation, :app_registration_endpoint
def issuer
root_url
end
def service_documentation
'https://docs.joinmastodon.org/'
end
def authorization_endpoint
oauth_authorization_url
end
def token_endpoint
oauth_token_url
end
# As the api_v1_apps route doesn't technically conform to the specification
# for OAuth 2.0 Dynamic Client Registration defined in RFC 7591 we use a
# non-standard property for now to indicate the mastodon specific registration
# endpoint. See: https://datatracker.ietf.org/doc/html/rfc7591
def app_registration_endpoint
api_v1_apps_url
end
def revocation_endpoint
oauth_revoke_url
end
def scopes_supported
doorkeeper.scopes
end
def response_types_supported
doorkeeper.authorization_response_types
end
def response_modes_supported
doorkeeper.authorization_response_flows.flat_map(&:response_mode_matches).uniq
end
def grant_types_supported
grant_types_supported = doorkeeper.grant_flows.dup
grant_types_supported << 'refresh_token' if doorkeeper.refresh_token_enabled?
grant_types_supported
end
def token_endpoint_auth_methods_supported
%w(client_secret_basic client_secret_post)
end
private
def doorkeeper
@doorkeeper ||= Doorkeeper.configuration
end
end

View File

@ -1,21 +1,10 @@
# frozen_string_literal: true
class ManifestSerializer < ActiveModel::Serializer
include ApplicationHelper
include RoutingHelper
include ActionView::Helpers::TextHelper
ICON_SIZES = %w(
36
48
72
96
144
192
256
384
512
).freeze
attributes :id, :name, :short_name,
:icons, :theme_color, :background_color,
:display, :start_url, :scope,
@ -37,9 +26,12 @@ class ManifestSerializer < ActiveModel::Serializer
end
def icons
ICON_SIZES.map do |size|
SiteUpload::ANDROID_ICON_SIZES.map do |size|
src = site_icon_path('app_icon', size.to_i)
src = URI.join(root_url, src).to_s if src.present?
{
src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
src: src || frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
sizes: "#{size}x#{size}",
type: 'image/png',
purpose: 'any maskable',

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class OauthMetadataSerializer < ActiveModel::Serializer
attributes :issuer, :authorization_endpoint, :token_endpoint,
:revocation_endpoint, :scopes_supported,
:response_types_supported, :response_modes_supported,
:grant_types_supported, :token_endpoint_auth_methods_supported,
:service_documentation, :app_registration_endpoint
end

View File

@ -40,5 +40,33 @@
= fa_icon 'trash fw'
= t('admin.site_uploads.delete')
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :favicon,
as: :file,
input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') },
wrapper: :with_block_label
.fields-row__column.fields-row__column-6.fields-group
- if @admin_settings.favicon.persisted?
= image_tag @admin_settings.favicon.file.url('48'), class: 'fields-group__thumbnail'
= link_to admin_site_upload_path(@admin_settings.favicon), data: { method: :delete }, class: 'link-button link-button--destructive' do
= fa_icon 'trash fw'
= t('admin.site_uploads.delete')
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :app_icon,
as: :file,
input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') },
wrapper: :with_block_label
.fields-row__column.fields-row__column-6.fields-group
- if @admin_settings.app_icon.persisted?
= image_tag @admin_settings.app_icon.file.url('48'), class: 'fields-group__thumbnail'
= link_to admin_site_upload_path(@admin_settings.app_icon), data: { method: :delete }, class: 'link-button link-button--destructive' do
= fa_icon 'trash fw'
= t('admin.site_uploads.delete')
.actions
= f.button :button, t('generic.save_changes'), type: :submit

View File

@ -11,13 +11,13 @@
- if storage_host?
%link{ rel: 'dns-prefetch', href: storage_host }/
%link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/
%link{ rel: 'icon', href: site_icon_path('favicon') || '/favicon.ico', type: 'image/x-icon' }/
- %w(16 32 48).each do |size|
%link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
- SiteUpload::FAVICON_SIZES.each do |size|
%link{ rel: 'icon', sizes: "#{size}x#{size}", href: site_icon_path('favicon', size.to_i) || frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
- %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size|
%link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
- SiteUpload::APPLE_ICON_SIZES.each do |size|
%link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: site_icon_path('app_icon', size.to_i) || frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
%link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/
%link{ rel: 'manifest', href: manifest_path(format: :json) }/

View File

@ -804,6 +804,7 @@ ar:
desc_html: ويعتمد هذا على نصوص برمجية خارجية من hCaptcha، والتي قد تكون مصدر قلق يتعلق بالأمان والخصوصية. بالإضافة إلى ذلك، <strong>قد يؤدي ذلك إلى جعل عملية التسجيل أقل سهولة بالنسبة لبعض الأشخاص (وخاصة المعاقين)</strong>. لهذه الأسباب، يرجى النظر في تدابير بديلة مثل التسجيل على أساس الموافقة أو على أساس الدعوة.
title: مطالبة المستخدمين الجدد بحل اختبار CAPTCHA لتأكيد حساباتهم
content_retention:
danger_zone: منطقة خطرة
preamble: التحكم في كيفية تخزين المحتوى الذي ينشئه المستخدم في ماستدون.
title: الاحتفاظ بالمحتوى
default_noindex:

View File

@ -23,8 +23,11 @@ ia:
action_with_app: Confirmar e retornar a %{app}
title: Verificar adresse de e-mail
email_changed:
explanation: 'Le adresse de e-mail pro tu conto essera cambiate a:'
subject: 'Mastodon: E-mail cambiate'
title: Nove adresse de e-mail
password_change:
explanation: Le contrasigno de tu conto ha essite cambiate.
subject: 'Mastodon: Contrasigno cambiate'
title: Contrasigno cambiate
reconfirmation_instructions:

View File

@ -17,6 +17,7 @@ ia:
authorize: Autorisar
cancel: Cancellar
edit: Modificar
submit: Submitter
confirmations:
destroy: Es tu secur?
edit:

View File

@ -174,6 +174,7 @@ sq:
read:filters: të shohë filtrat tuaj
read:follows: të shohë ndjekësit tuaj
read:lists: të shohë listat tuaja
read:me: të shohë vetëm hollësi elementare të llogarisë tuaj
read:mutes: të shohë çkeni heshtuar
read:notifications: të shohë njoftimet tuaja
read:reports: të shohë raportimet tuaja

View File

@ -106,6 +106,9 @@ ia:
pending: Attende revision
perform_full_suspension: Suspender
previous_strikes: Previe admonitiones
previous_strikes_description_html:
one: Iste conto ha <strong>un</strong> admonition.
other: Iste conto ha <strong>%{count}</strong> admonitiones.
promote: Promover
protocol: Protocollo
public: Public
@ -159,10 +162,10 @@ ia:
undo_suspension: Disfacer le suspension
unsilenced_msg: Le limite del conto de %{username} ha essite cancellate
unsubscribe: Desubscriber
unsuspended_msg: Annullate suspension del conto %{username} con successo
unsuspended_msg: Le suspension del conto %{username} ha essite annullate
username: Nomine de usator
view_domain: Vider summario de dominio
warn: Avisar
warn: Advertir
web: Web
whitelisted: Permittite pro federation
action_logs:
@ -244,37 +247,102 @@ ia:
create_user_role_html: "%{name} creava rolo de %{target}"
demote_user_html: "%{name} degradava usator %{target}"
destroy_announcement_html: "%{name} deleva annuncio %{target}"
destroy_canonical_email_block_html: "%{name} disblocava email con le hash %{target}"
destroy_custom_emoji_html: "%{name} deleva emoji %{target}"
destroy_domain_allow_html: "%{name} impediva le federation con dominio %{target}"
destroy_domain_block_html: "%{name} disblocava dominio %{target}"
destroy_email_domain_block_html: "%{name} disblocava le dominio email %{target}"
destroy_instance_html: "%{name} purgava le dominio %{target}"
destroy_ip_block_html: "%{name} deleva le regula pro IP %{target}"
destroy_status_html: "%{name} removeva le message de %{target}"
destroy_unavailable_domain_html: "%{name} resumeva le consignation al dominio %{target}"
destroy_user_role_html: "%{name} deleva le rolo de %{target}"
disable_2fa_user_html: "%{name} disactivava le authentication a duo factores pro le usator %{target}"
disable_custom_emoji_html: "%{name} disactivava le emoticone %{target}"
disable_sign_in_token_auth_user_html: "%{name} disactivava authentication per testimonio via email pro %{target}"
disable_user_html: "%{name} disactivava le accesso pro le usator %{target}"
enable_custom_emoji_html: "%{name} activava le emoticone %{target}"
enable_sign_in_token_auth_user_html: "%{name} activava le authentication per testimonio via email pro %{target}"
enable_user_html: "%{name} activava le accesso pro le usator %{target}"
memorialize_account_html: "%{name} mutava le conto de %{target} in un pagina commemorative"
promote_user_html: "%{name} promoveva le usator %{target}"
reject_appeal_html: "%{name} refusava le appello del decision de moderation de %{target}"
reject_user_html: "%{name} refusava le inscription de %{target}"
remove_avatar_user_html: "%{name} removeva le avatar de %{target}"
reopen_report_html: "%{name} reaperiva le reporto %{target}"
resend_user_html: "%{name} reinviava le email de confirmation pro %{target}"
reset_password_user_html: "%{name} reinitialisava le contrasigno del usator %{target}"
resolve_report_html: "%{name} resolveva le reporto %{target}"
sensitive_account_html: "%{name} marcava como sensibile le medios de %{target}"
silence_account_html: "%{name} limitava le conto de %{target}"
suspend_account_html: "%{name} suspendeva le conto de %{target}"
unassigned_report_html: "%{name} de-assignava le reporto %{target}"
unblock_email_account_html: "%{name} disblocava le adresse email de %{target}"
unsensitive_account_html: "%{name} dismarcava como sensibile le medios de %{target}"
unsilence_account_html: "%{name} removeva le limite del conto de %{target}"
unsuspend_account_html: "%{name} removeva le suspension del conto de %{target}"
update_announcement_html: "%{name} actualisava le annuncio %{target}"
update_custom_emoji_html: "%{name} actualisava le emoticone %{target}"
update_domain_block_html: "%{name} actualisava le blocada de dominio pro %{target}"
update_ip_block_html: "%{name} cambiava le regula pro IP %{target}"
update_status_html: "%{name} actualisava le message per %{target}"
update_user_role_html: "%{name} cambiava le rolo de %{target}"
deleted_account: conto delite
empty: Nulle registrationes trovate.
filter_by_action: Filtrar per action
filter_by_user: Filtrar per usator
title: Registro de inspection
announcements:
destroyed_msg: Annuncio delite con successo!
edit:
title: Modificar annuncio
empty: Necun annuncios trovate.
live: Al vivo
new:
create: Crear annuncio
title: Nove annuncio
publish: Publicar
published_msg: Annuncio publicate con successo!
scheduled_for: Programmate pro %{time}
scheduled_msg: Annuncio programmate pro le publication!
title: Annuncios
unpublish: Depublicar
unpublished_msg: Le publication del annuncio ha essite disfacite!
updated_msg: Annuncio actualisate con successo!
critical_update_pending: Actualisation critic pendente
custom_emojis:
assign_category: Assignar categoria
by_domain: Dominio
copied_msg: Copia local del emoji create con successo
copy: Copiar
copy_failed_msg: Impossibile crear un copia local de ille emoticone
create_new_category: Crear nove categoria
created_msg: Emoji create con successo!
delete: Deler
destroyed_msg: Emoticone destruite con successo destroyed!
disable: Disactivar
disabled: Disactivate
disabled_msg: Emoji disactivate con successo
emoji: Emoticone
enable: Activar
enabled: Activate
enabled_msg: Emoji activate con successo
image_hint: PNG o GIF usque %{size}
list: Listar
listed: Listate
new:
title: Adder nove emoji personalisate
no_emoji_selected: Nulle emoticones ha essite cambiate perque nulle ha essite seligite
not_permitted: Tu non es autorisate a exequer iste action
overwrite: Superscriber
shortcode: Via breve
shortcode_hint: Al minus 2 characteres, solo characteres alphanumeric e lineettas basse
title: Emojis personalisate
uncategorized: Sin categoria
unlist: Non listar
unlisted: Non listate
update_failed_msg: Impossibile actualisar ille emoticone
updated_msg: Emoticone actualisate con successo!
upload: Incargar
dashboard:
active_users: usatores active
@ -282,71 +350,180 @@ ia:
media_storage: Immagazinage de medios
new_users: nove usatores
opened_reports: reportos aperte
resolved_reports: reportos resolvite
software: Software
sources: Fontes de inscription
space: Uso de spatio
title: Pannello de controlo
top_languages: Linguas le plus active
top_servers: Servitores le plus active
website: Sito web
disputes:
appeals:
empty: Nulle appellos trovate.
title: Appellos
domain_allows:
add_new: Permitter federation con dominio
created_msg: Le dominio ha essite permittite con successo pro federation
destroyed_msg: Le dominio ha essite prohibite pro federation
export: Exportar
import: Importar
undo: Prohiber federation con dominio
domain_blocks:
add_new: Adder nove blocada de dominio
confirm_suspension:
cancel: Cancellar
confirm: Suspender
permanent_action: Disfacer le suspension non restaurara alcun datos o relation.
preamble_html: Tu es sur le puncto de suspender <strong>%{domain}</strong> e su subdominios.
remove_all_data: Isto removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio.
stop_communication: Tu servitor stoppara le communication con iste servitores.
title: Confirmar le blocada del dominio %{domain}
undo_relationships: Isto disfacera omne relation de sequimento inter le contos de iste servitores e illos del tue.
created_msg: Le blocada del dominio es ora in tractamento
destroyed_msg: Le blocada del dominio ha essite disfacite
domain: Dominio
edit: Modificar un bloco de dominio
edit: Modificar un blocada de dominio
existing_domain_block: Tu ha ja imponite limites plus stricte sur %{name}.
existing_domain_block_html: Tu ha ja imponite limites plus stricte sur %{name}; ora es necessari <a href="%{unblock_url}">disblocar lo</a> primo.
export: Exportar
import: Importar
new:
create: Crear blocada
hint: Le blocada del dominio non impedira le creation de entratas de conto in le base de datos, ma applicara retroactive- e automaticamente le methodos specific de moderation a iste contos.
severity:
desc_html: "<strong>Limitar</strong> rendera le messages del contos de iste dominio invisibile pro tote persona que non los seque. <strong>Suspender</strong> removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio. Usa <strong>Necun</strong> si tu solmente vole rejectar le files multimedial."
noop: Nemo
silence: Limitar
suspend: Suspender
title: Nove blocada de dominio
no_domain_block_selected: Necun blocada de dominio ha essite cambiate perque necun ha essite seligite
not_permitted: Tu non es autorisate a exequer iste action
obfuscate: Offuscar le nomine de dominio
obfuscate_hint: Offuscar partialmente le nomine de dominio in le lista si le diffusion del lista de limitationes del dominio es activate
private_comment: Commento private
private_comment_hint: Commentar iste limitation de dominio pro uso interne per le moderatores.
public_comment: Commento public
public_comment_hint: Commentar iste limitation de dominio pro le publico general, si le diffusion del lista de limitationes del dominio es activate.
reject_media: Refusar files multimedial
reject_media_hint: Remove le files multimedial immagazinate localmente e refusa de discargar tales in futuro. Irrelevante pro le suspensiones
reject_reports: Refusar reportos
reject_reports_hint: Ignorar tote le reportos proveniente de iste dominio. Irrelevante pro le suspensiones
undo: Disfacer blocada de dominio
view: Examinar blocada de dominio
email_domain_blocks:
add_new: Adder nove
allow_registrations_with_approval: Permitter inscriptiones con approbation
attempts_over_week:
one: "%{count} tentativa de inscription in le ultime septimana"
other: "%{count} tentativas de inscription in le ultime septimana"
created_msg: Le dominio de e-mail ha essite blocate
delete: Deler
dns:
types:
mx: Registro MX
domain: Dominio
new:
create: Adder un dominio
resolve: Resolver dominio
title: Blocar un nove dominio de e-mail
no_email_domain_block_selected: Necun blocadas de dominio de e-mail ha essite cambiate perque necun ha essite seligite
not_permitted: Non permittite
resolved_dns_records_hint_html: Le nomine de dominio se resolve al sequente dominios MX, le quales ha le ultime responsibilitate pro le reception de e-mail. Blocar un dominio MX blocara le inscriptiones de qualcunque adresse de e-mail que usa le mesme dominio MX, mesmo si le nomine de dominio visibile es differente. <strong>Presta attention a evitar de blocar le grande fornitores de e-mail.</strong>
resolved_through_html: Resolvite per %{domain}
title: Dominios de e-mail blocate
export_domain_allows:
new:
title: Importar permissiones de dominio
no_file: Necun file seligite
export_domain_blocks:
import:
description_html: Tu es sur le puncto de importar un lista de blocadas de dominio. Per favor revide con grande cura iste lista, particularmente si tu non lo ha scribite tu mesme.
existing_relationships_warning: Relationes existente de sequimento
private_comment_description_html: 'Pro adjutar te a traciar de ubi proveni le blocadas importate, le blocadas importate essera create con le sequente commento private: <q>%{comment}</q>'
private_comment_template: Importate de %{source} le %{date}
title: Importar blocadas de dominio
invalid_domain_block: 'Un o plus blocadas de dominio ha essite saltate a causa del sequente error(es): %{error}'
new:
title: Importar blocadas de dominio
no_file: Necun file seligite
follow_recommendations:
description_html: "<strong>Le recommendationes de sequimento adjuta le nove usatores a trovar rapidemente contento interessante.</strong> Quando un usator non ha un historia sufficiente de interactiones con alteres pro formar recommendationes personalisate de sequimento, iste contos es recommendate. Illos se recalcula cata die a partir de un mixtura de contos con le plus grande numero de ingagiamentos recente e le numero de sequitores local le plus alte pro un lingua date."
language: Per lingua
status: Stato
suppress: Supprimer recommendation de sequimento
suppressed: Supprimite
title: Sequer le recommendationes
unsuppress: Restaurar recommendation de sequimento
instances:
availability:
description_html:
one: Si le livration al dominio falle <strong>%{count} die</strong> sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration <em>ab</em> le dominio.
other: Si le livration al dominio falle durante <strong>%{count} dies differente</strong> sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration <em>ab</em> le dominio.
failure_threshold_reached: Limine de fallimentos attingite le %{date}.
failures_recorded:
one: Tentativa fallite durante %{count} die.
other: Tentativa fallite durante %{count} dies differente.
no_failures_recorded: Necun fallimento cognoscite.
title: Disponibilitate
warning: Le ultime tentativa de connexion a iste servitor non ha succedite
back_to_all: Toto
back_to_limited: Limitate
back_to_warning: Advertimento
by_domain: Dominio
confirm_purge: Es tu secur que tu vole deler permanentemente le datos de iste dominio?
content_policies:
comment: Nota interne
description_html: Tu pote definir politicas de contento que se applicara a tote le contos de iste dominio e a qualcunque de su subdominios.
limited_federation_mode_description_html: Tu pote decider si permitter le federation con iste dominio.
policies:
reject_media: Rejectar multimedia
reject_reports: Rejectar reportos
silence: Limitar
suspend: Suspender
policy: Politica
reason: Ration public
title: Politicas de contento
dashboard:
instance_accounts_dimension: Contos le plus sequite
instance_accounts_measure: contos immagazinate
instance_followers_measure: nostre sequitores illac
instance_follows_measure: lor sequitores hic
instance_languages_dimension: Linguas principal
instance_media_attachments_measure: annexos multimedial immagazinate
instance_reports_measure: signalationes sur illos
instance_statuses_measure: messages immagazinate
delivery:
all: Totes
clear: Rader errores de livration
failing: Fallente
restart: Recomenciar livration
stop: Cessar livration
unavailable: Non disponibile
delivery_available: Livration es disponibile
delivery_error_days: Dies de errores de livration
delivery_error_hint: Si le livration non es possibile durante %{count} dies, illo essera automaticamente marcate como non livrabile.
destroyed_msg: Le datos de %{domain} es ora in cauda pro deletion imminente.
empty: Necun dominios trovate.
known_accounts:
one: "%{count} conto cognoscite"
other: "%{count} contos cognoscite"
moderation:
all: Toto
limited: Limitate
title: Moderation
private_comment: Commento private
public_comment: Commento public
purge: Purgar
purge_description_html: Si tu crede que iste dominio es foras de linea pro sempre, tu pote deler de tu immagazinage tote le registros del conto e le datos associate de iste dominio. Isto pote prender un tempore.
title: Federation
total_blocked_by_us: Blocate per nos
total_followed_by_them: Sequite per illes
total_followed_by_us: Sequite per nos
total_reported: Signalationes sur illes
total_storage: Annexos multimedial
totals_time_period_hint_html: Le totales monstrate hic infra include le datos de tote le tempore.
unknown_instance: Iste dominio non es actualmente cognoscite sur iste servitor.
invites:
deactivate_all: Disactivar toto
filter:
@ -357,6 +534,7 @@ ia:
title: Invitationes
ip_blocks:
add_new: Crear regula
created_msg: Le nove regula IP ha essite addite
delete: Deler
expires_in:
'1209600': 2 septimanas
@ -367,8 +545,12 @@ ia:
'94670856': 3 annos
new:
title: Crear un nove regula IP
no_ip_block_selected: Necun regula IP ha essite cambiate perque necun ha essite seligite
title: Regulas IP
relationships:
title: Relationes de %{acct}
relays:
add_new: Adder nove repetitor
delete: Deler
description_html: Un <strong>repetitor de federation</strong> es un servitor intermediari que excambia grande volumines de messages public inter le servitores que se inscribe e publica a illo. <strong>Illo pote adjutar le servitores micre e medie a discoperir le contento del fediverso</strong>, sin requirer que le usatores local seque manualmente altere personas sur servitores distante.
disable: Disactivar
@ -376,59 +558,212 @@ ia:
enable: Activar
enable_hint: Un vice activate, tu servitor se inscribera a tote le messages public de iste repetitor, e comenciara a inviar le messages public de iste servitor a illo.
enabled: Activate
inbox_url: URL del repetitor
pending: Attende le approbation del repetitor
save_and_enable: Salveguardar e activar
setup: Crear un connexion con un repetitor
signatures_not_enabled: Le repetitores pote non functionar correctemente durante que le modo secur o le modo de federation limitate es activate
status: Stato
title: Repetitores
report_notes:
created_msg: Nota de signalation create con successo!
destroyed_msg: Nota de signalation delite con successo!
reports:
account:
notes:
one: "%{count} nota"
other: "%{count} notas"
action_log: Registro de inspection
action_taken_by: Action prendite per
actions:
delete_description_html: Le messages signalate essera delite e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto.
mark_as_sensitive_description_html: Le files multimedial in le messages reportate essera marcate como sensibile e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto.
other_description_html: Vider plus optiones pro controlar le comportamento del conto e personalisar le communication al conto signalate.
resolve_description_html: Necun action essera prendite contra le conto signalate, necun admonition registrate, e le signalation essera claudite.
silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le signalationes contra iste conto.
suspend_description_html: Le conto e tote su contento essera inaccessible e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le signalationes contra iste conto.
actions_description_html: Decide qual action prender pro resolver iste signalation. Si tu prende un action punitive contra le conto signalate, le persona recipera un notification in e-mail, excepte si le categoria <strong>Spam</strong> es seligite.
actions_description_remote_html: Decide qual action prender pro resolver iste signalation. Isto affectara solmente le maniera in que <strong>tu</strong> servitor communica con iste conto remote e gere su contento.
add_to_report: Adder plus al reporto
already_suspended_badges:
local: Ja suspendite sur iste servitor
remote: Ja suspendite sur su servitor
are_you_sure: Es tu secur?
assign_to_self: Assignar a me
assigned: Moderator assignate
by_target_domain: Dominio del conto signalate
cancel: Cancellar
category: Categoria
category_description_html: Le motivo pro le qual iste conto e/o contento ha essite signalate essera citate in le communication con le conto signalate
comment:
none: Necun
comment_description_html: 'Pro fornir plus information, %{name} ha scribite:'
confirm: Confirmar
confirm_action: Confirmar le action de moderation contra %{acct}
created_at: Signalate
delete_and_resolve: Deler le messages
forwarded: Reexpedite
forwarded_replies_explanation: Iste signalation proveni de un usator remote e concerne contento remote. Illo te ha essite reexpedite perque le contento signalate es in responsa a un usator tue.
forwarded_to: Reexpedite a %{domain}
mark_as_resolved: Marcar como resolvite
mark_as_sensitive: Marcar como sensibile
mark_as_unresolved: Marcar como non resolvite
no_one_assigned: Nemo
notes:
create: Adder un nota
create_and_resolve: Resolver con nota
create_and_unresolve: Reaperir con nota
delete: Deler
placeholder: Describe le actiones prendite, o insere altere information pertinente...
title: Notas
notes_description_html: Vider e lassar notas pro altere moderatores e pro tu proprie futuro
processed_msg: 'Reporto #%{id} elaborate con successo'
quick_actions_description_html: 'Face un rapide action o rola a basso pro vider le contento reportate:'
remote_user_placeholder: le usator remote ab %{instance}
reopen: Reaperir reporto
report: 'Reporto #%{id}'
reported_account: Conto signalate
reported_by: Signalate per
resolved: Resolvite
resolved_msg: Reporto resolvite con successo!
skip_to_actions: Saltar al actiones
status: Stato
statuses: Contento signalate
statuses_description_html: Le contento offensive sera citate in communication con le conto reportate
summary:
action_preambles:
delete_html: 'Tu va <strong>remover</strong> parte de messages de <strong>@%{acct}</strong>. Isto ira:'
mark_as_sensitive_html: 'Tu va <strong>marcar</strong> parte de messages de <strong>@%{acct}</strong> como <strong>sensibile</strong>. Isto ira:'
silence_html: 'Tu va <strong>limitar</strong> le conto de <strong>@%{acct}</strong>. Isto ira:'
suspend_html: 'Tu va <strong>limitar</strong> le conto de <strong>@%{acct}</strong>. Isto ira:'
actions:
delete_html: Remover le messages offensive
mark_as_sensitive_html: Marcar le medios de messages offensive como sensibile
silence_html: Limitar gravemente le portata de <strong>@%{acct}</strong> rendente le profilo e contento visibile solmente a qui ja lo seque o lo cerca manualmente
suspend_html: Suspender <strong>@%{acct}</strong>, rendente le profilo e contento inaccessibile e le interaction con illo impossibile
close_report: Marcar le signalation №%{id} como resolvite
close_reports_html: Marcar <strong>tote</strong> le signalationes contra <strong>@%{acct}</strong> como resolvite
delete_data_html: Deler le profilo e contento de <strong>@%{acct}</strong> in 30 dies excepte si le suspension es disfacite intertanto
preview_preamble_html: "<strong>@%{acct}</strong> recipera un advertimento con le sequente contento:"
record_strike_html: Registrar un admonition contra <strong>@%{acct}</strong> pro adjutar te a imponer sanctiones in caso de futur violationes de iste conto
send_email_html: Inviar un e-mail de advertimento a <strong>@%{acct}</strong>
warning_placeholder: Motivation supplementari facultative pro le action de moderation.
target_origin: Origine del conto signalate
title: Reportos
unassign: Disassignar
unknown_action_msg: 'Action incognite: %{action}'
unresolved: Non resolvite
updated_at: Actualisate
view_profile: Vider profilo
roles:
add_new: Adder rolo
assigned_users:
one: "%{count} usator"
other: "%{count} usatores"
categories:
administration: Administration
devops: DevOps
invites: Invitationes
moderation: Moderation
special: Special
delete: Deler
description_html: Le <strong>rolos de usator</strong> permitte personalisar le functiones e areas de Mastodon al quales le usator pote acceder.
edit: Modificar le rolo '%{name}'
everyone: Permissiones predefinite
everyone_full_description_html: Iste es le <strong>rolo de base</strong> que affecta <strong>tote le usatores</strong>, mesmo illes sin rolo assignate. Tote le altere rolos heredita le permissiones de illo.
permissions_count:
one: "%{count} permission"
other: "%{count} permissiones"
privileges:
administrator: Administrator
administrator_description: Le usatores con iste permission pote contornar tote permission
delete_user_data: Deler le datos de usator
delete_user_data_description: Permitte que usatores dele immediatemente le datos de altere usatores
invite_users: Invitar usatores
invite_users_description: Permitte que usatores invita nove personas al servitor
manage_announcements: Gerer le annuncios
manage_announcements_description: Permitte que usatores genere annuncios sur le servitor
manage_appeals: Gerer appellos
manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation
manage_blocks: Gerer blocadas
manage_blocks_description: Permitter que usatores bloca le fornitores de e-mail e le adresses IP
manage_custom_emojis: Gerer emojis personalisate
manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor
manage_federation: Gerer federation
manage_federation_description: Permitte que le usatores bloca o permitte le federation con altere dominios, e controla le livration
manage_invites: Gerer le invitationes
manage_invites_description: Permitte que usatores examina e deactiva ligamines de invitation
manage_reports: Gerer le reportos
manage_reports_description: Permitte que usatores revide signalationes e exeque actiones de moderation a base de illos
manage_roles: Gerer le rolos
manage_roles_description: Permitte que usatores gere e assigna rolos inferior a lor privilegios actual
manage_rules: Gerer le regulas
manage_rules_description: Permitte que usatores cambia le regulas del servitor
manage_settings: Gerer le parametros
manage_settings_description: Permitte que usatores cambia le parametros del sito
manage_taxonomies: Gerer taxonomias
manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag
manage_user_access: Gerer le accessos de usator
manage_user_access_description: Permitte que usatores disactiva le authentication bifactorial de altere usatores, cambia lor adresses de e-mail, e reinitialisa lor contrasigno
manage_users: Gerer usatores
manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes
manage_webhooks: Gerer Webhooks
manage_webhooks_description: Permitte que usatores installa “webhooks” pro eventos administrative
view_audit_log: Vider le registro de inspection
view_audit_log_description: Permitte que usatores vide un historia de actiones administrative sur le servitor
view_dashboard: Vider le tabuliero de instrumentos
view_dashboard_description: Permitte que usatores accede al tabuliero de instrumentos e a varie statisticas
view_devops: DevOps
view_devops_description: Permitte que usatores accede al tabulieros de instrumentos de Sidekiq e pgHero
title: Rolos
rules:
add_new: Adder regula
delete: Deler
description_html: Ben que multes affirma de haber legite e acceptate le conditiones de servicio, generalmente le gente non los lege completemente usque un problema surge. <strong>Facilita le visibilitate del regulas de tu servitor in un colpo de oculo forniente los in un lista a punctos.</strong> Tenta mantener le regulas individual curte e simple, ma sin divider los in multe punctos separate.
edit: Modificar regula
empty: Necun regula del servitor ha essite definite ancora.
title: Regulas del servitor
settings:
about:
manage_rules: Gerer le regulas del servitor
preamble: Fornir information detaliate sur le functionamento, moderation e financiamento del servitor.
rules_hint: Il ha un area dedicate al regulas que tu usatores debe acceptar.
title: A proposito de
appearance:
preamble: Personalisar le interfacie web de Mastodon.
title: Apparentia
branding:
preamble: Le marca de tu servitor lo differentia de altere servitores in le rete. Iste information pote esser monstrate in diverse ambientes, como le interfacie web de Mastodon, applicationes native, in previsualisationes de ligamines sur altere sitos web, in applicationes de messageria, etc. Pro iste ration, il es melior mantener iste information clar, breve e concise.
title: Marca
captcha_enabled:
desc_html: Iste depende de scripts externe de hCaptcha, que pote esser un problema de securitate e vita private. De plus, <strong>isto pote render le processo de inscription multo minus accessibile a certe personas (particularmente personas con discapacitates)</strong>. Pro iste rationes, considera altere mesuras como le inscription basate sur approbation o invitation.
title: Require que nove usatores solve un CAPTCHA pro confirmar lor conto
content_retention:
danger_zone: Zona periculose
discovery:
profile_directory: Directorio de profilos
public_timelines: Chronologias public
title: Discoperi
trends: Tendentias
domain_blocks:
all: A omnes
disabled: A necuno
users: A usators local in session
registrations:
title: Registrationes
registrations_mode:
modes:
none: Nemo pote inscriber se
open: Quicunque pote inscriber se
security:
authorized_fetch_hint: Requirer authentication de servitores federate permitte un application plus stricte de blocadas a nivello de usator e de servitor. Nonobstante, isto diminue le prestationes del servitor, reduce le portata de tu responsas e pote introducer problemas de compatibilitate con certe servicios federate. In plus, isto non impedira le actores dedicate a recuperar tu messages public e tu contos.
title: Parametros de servitor
site_uploads:
delete: Deler file incargate
destroyed_msg: Incarga de sito delite con successo!
software_updates:
documentation_link: Pro saper plus
release_notes: Notas de version
title: Actualisationes disponibile
type: Typo
types:
@ -443,31 +778,136 @@ ia:
deleted: Delite
favourites: Favoritos
history: Chronologia del versiones
in_reply_to: Replicante a
language: Lingua
media:
title: Medios
metadata: Metadatos
open: Aperir message
original_status: Message original
status_changed: Messages cambiate
title: Messages del conto
trending: Tendentias
visibility: Visibilitate
with_media: Con medios
strikes:
actions:
delete_statuses: "%{name} ha delite le messages de %{target}"
disable: "%{name} ha gelate le conto de %{target}"
mark_statuses_as_sensitive: "%{name} ha marcate le messages de %{target} como sensibile"
none: "%{name} ha inviate un advertimento a %{target}"
sensitive: "%{name} ha marcate le conto de %{target} como sensibile"
silence: "%{name} ha limitate le conto de %{target}"
suspend: "%{name} ha suspendite le conto de %{target}"
appeal_approved: Appello facite
appeal_pending: Appello pendente
appeal_rejected: Appello rejectate
system_checks:
elasticsearch_preset:
action: Vide documentation
elasticsearch_preset_single_node:
action: Vide documentation
rules_check:
action: Gerer le regulas del servitor
software_version_critical_check:
action: Vider le actualisationes disponibile
message_html: Un actualisation critic de Mastodon es disponibile, actualisa lo le plus rapide possibile.
software_version_patch_check:
action: Vider le actualisationes disponibile
upload_check_privacy_error:
action: Verifica hic pro plus de information
upload_check_privacy_error_object_storage:
action: Verifica hic pro plus de information
trends:
approved: Approbate
rejected: Rejectate
tags:
not_usable: Non pote esser usate
title: Tendentias
warning_presets:
add_new: Adder nove
delete: Deler
webhooks:
delete: Deler
disable: Disactivar
disabled: Disactivate
enable: Activar
events: Eventos
status: Stato
admin_mailer:
new_critical_software_updates:
subject: Actualisationes critic de Mastodon es disponibile pro %{instance}!
new_software_updates:
subject: Nove versiones de Mastodon es disponibile pro %{instance}!
appearance:
advanced_web_interface: Interfacie web avantiate
sensitive_content: Contento sensibile
application_mailer:
notification_preferences: Cambiar preferentias de e-mail
settings: 'Cambiar preferentias de e-mail: %{link}'
unsubscribe: Desubscriber
view: 'Vider:'
view_profile: Vider profilo
view_status: Vider message
applications:
created: Application create con successo
destroyed: Application delite con successo
logout: Clauder le session
auth:
confirmations:
welcome_title: Benvenite, %{name}!
delete_account: Deler le conto
logout: Clauder le session
progress:
details: Tu detalios
set_new_password: Definir un nove contrasigno
status:
account_status: Stato del conto
view_strikes: Examinar le admonitiones passate contra tu conto
challenge:
invalid_password: Contrasigno non valide
deletes:
proceed: Deler le conto
success_msg: Tu conto esseva delite con successo
warning:
data_removal: Tu messages e altere datos essera removite permanentemente
email_change_html: Tu pote <a href="%{path}">cambiar tu adresse de e-mail</a> sin deler tu conto
disputes:
strikes:
action_taken: Action prendite
appeal: Facer appello
appeal_approved: Iste admonition ha essite annullate in appello e non es plus valide
appeal_rejected: Le appello ha essite rejectate
appeal_submitted_at: Appello submittite
appealed_msg: Tu appello ha essite submittite. Si es approbate, tu recipera notification.
appeals:
submit: Submitter appello
approve_appeal: Approbar apello
associated_report: Signalation associate
created_at: Del data
description_html: Istes es le actiones prendite contra tu conto e le advertimentos que te ha essite inviate per le personal de %{instance}.
recipient: Adressate a
reject_appeal: Rejectar appello
status: Message №%{id}
status_removed: Le message ha ja essite removite del systema
title: "%{action} del %{date}"
title_actions:
delete_statuses: Elimination de messages
disable: Gelamento del conto
mark_statuses_as_sensitive: Marcation de messages como sensibile
none: Advertimento
sensitive: Marcation del conto como sensibile
silence: Limitation del conto
suspend: Suspension del conto
your_appeal_approved: Tu appello ha essite approbate
your_appeal_pending: Tu ha submittite un appello
your_appeal_rejected: Tu appello ha essite rejectate
edit_profile:
basic_information: Information basic
other: Alteres
errors:
'422':
content: Le verification de securitate ha fallite. Bloca tu le cookies?
existing_username_validator:
not_found_multiple: non poteva trovar %{usernames}
exports:
@ -478,6 +918,7 @@ ia:
blocks: Tu ha blocate
bookmarks: Marcapaginas
csv: CSV
domain_blocks: Blocadas de dominio
mutes: Tu ha silentiate
storage: Immagazinage de medios
featured_tags:
@ -496,6 +937,10 @@ ia:
title: Modificar filtro
index:
delete: Deler
title: Filtros
new:
save: Salveguardar nove filtro
title: Adder nove filtro
generic:
all: Toto
cancel: Cancellar
@ -509,12 +954,37 @@ ia:
imports:
errors:
empty: File CSV vacue
invalid_csv_file: 'File CSV non valide. Error: %{error}'
too_large: Le file es troppo longe
failures: Fallimentos
overwrite_preambles:
blocking_html: Tu es sur le puncto de <strong>reimplaciar tu lista de blocadas</strong> per usque a <strong>%{total_items} contos</strong> proveniente de <strong>%{filename}</strong>.
domain_blocking_html: Tu es sur le puncto de <strong>reimplaciar tu lista de blocadas de dominio</strong> per usque a <strong>%{total_items} dominios</strong> proveniente de <strong>%{filename}</strong>.
preambles:
blocking_html: Tu es sur le puncto de <strong>blocar</strong> usque a <strong>%{total_items} contos</strong> a partir de <strong>%{filename}</strong>.
domain_blocking_html: Tu es sur le puncto de <strong>blocar</strong> usque a <strong>%{total_items} dominios</strong> a partir de <strong>%{filename}</strong>.
preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
recent_imports: Importationes recente
status: Stato
titles:
blocking: Importation de contos blocate
bookmarks: Importation de marcapaginas
domain_blocking: Importation de dominios blocate
lists: Importation de listas
muting: Importation de contos silentiate
type: Typo de importation
type_groups:
constructive: Sequites e marcapaginas
destructive: Blocadas e silentiamentos
types:
blocking: Lista de blocadas
bookmarks: Marcapaginas
domain_blocking: Lista de dominios blocate
lists: Listas
upload: Incargar
invites:
delete: Disactivar
expired: Expirate
expires_in:
'1800': 30 minutas
'21600': 6 horas
@ -544,9 +1014,90 @@ ia:
migrations:
errors:
not_found: non poterea esser trovate
move_handler:
carry_blocks_over_text: Iste usator ha cambiate de conto desde %{acct}, que tu habeva blocate.
notification_mailer:
follow:
title: Nove sequitor
follow_request:
title: Nove requesta de sequimento
mention:
action: Responder
poll:
subject: Un inquesta de %{name} ha finite
pagination:
next: Sequente
preferences:
other: Altere
public_timelines: Chronologias public
privacy_policy:
title: Politica de confidentialitate
relationships:
activity: Activitate del conto
most_recent: Plus recente
status: Stato del conto
sessions:
activity: Ultime activitate
browser: Navigator
browsers:
alipay: Alipay
blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
firefox: Firefox
generic: Navigator incognite
huawei_browser: Huawei Browser
ie: Internet Explorer
micro_messenger: MicroMessenger
nokia: Navigator de Nokia S40 Ovi
opera: Opera
otter: Otter
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
uc_browser: UC Browser
unknown_browser: Navigator Incognite
weibo: Weibo
current_session: Session actual
date: Data
description: "%{browser} sur %{platform}"
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
unknown_platform: Platteforma incognite
windows: Windows
windows_mobile: Windows Mobile
windows_phone: Windows Phone
settings:
account: Conto
account_settings: Parametros de conto
appearance: Apparentia
delete: Deletion de conto
development: Disveloppamento
edit_profile: Modificar profilo
import: Importar
migrate: Migration de conto
notifications: Notificationes de e-mail
preferences: Preferentias
profile: Profilo public
relationships: Sequites e sequitores
strikes: Admonitiones de moderation
severed_relationships:
event_type:
domain_block: Suspension del servitor (%{target_name})
user_domain_block: Tu ha blocate %{target_name}
preamble: Tu pote perder sequites e sequitores quando tu bloca un dominio o quando tu moderatores decide suspender un servitor remote. Quando isto occurre, tu potera discargar listas de relationes rumpite, a inspectar e eventualmente importar in un altere servitor.
type: Evento
statuses:
open_in_web: Aperir in le web
poll:
vote: Votar
show_more: Monstrar plus
@ -563,7 +1114,13 @@ ia:
'604800': 1 septimana
'63113904': 2 annos
'7889238': 3 menses
stream_entries:
sensitive_content: Contento sensibile
strikes:
errors:
too_late: Es troppo tarde pro facer appello contra iste admonition
themes:
contrast: Mastodon (Alte contrasto)
default: Mastodon (Obscur)
mastodon-light: Mastodon (Clar)
system: Automatic (usar thema del systema)
@ -574,6 +1131,24 @@ ia:
user_mailer:
appeal_approved:
action: Parametros de conto
explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite approbate. Tu conto ha de novo un bon reputation.
appeal_rejected:
explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite rejectate.
warning:
appeal: Submitter un appello
subject:
none: Advertimento pro %{acct}
sensitive: Tu messages sur %{acct} essera marcate como sensibile a partir de ora
silence: Tu conto %{acct} ha essite limitate
suspend: Tu conto %{acct} ha essite suspendite
title:
delete_statuses: Messages removite
disable: Conto gelate
mark_statuses_as_sensitive: Messages marcate como sensibile
none: Advertimento
sensitive: Conto marcate como sensibile
silence: Conto limitate
suspend: Conto suspendite
welcome:
apps_android_action: Obtene lo sur Google Play
apps_ios_action: Discargar sur le App Store
@ -582,6 +1157,9 @@ ia:
edit_profile_action: Personalisar
edit_profile_title: Personalisar tu profilo
feature_action: Apprender plus
follow_action: Sequer
post_title: Face tu prime message
share_action: Compartir
share_title: Compartir tu profilo de Mastodon
subject: Benvenite in Mastodon
verification:

View File

@ -737,6 +737,7 @@ ja:
desc_html: この機能は hCaptcha による外部スクリプトを使用しますが、hCaptcha にはセキュリティとプライバシーの懸念が考えられます。また、<strong>CAPTCHAにより新規登録のアクセシビリティが大幅に損なわれる可能性があり、身体および精神障害者においては特に顕著です。</strong>以上の理由から、承認制や招待制を基本とするなど、代わりの登録手順を提供することを検討してください。
title: 新規ユーザーのアカウント確認にCHAPCHAを要求する
content_retention:
danger_zone: 危険な操作
preamble: ユーザーが生成したコンテンツがどのように Mastodon に保存されるかを管理します。
title: コンテンツの保持
default_noindex:

View File

@ -410,6 +410,8 @@ lt:
silence: Riboti
suspend: Pristabdyti
title: Naujos domeno blokas
public_comment: Viešas komentaras
public_comment_hint: Komentaras apie šį domeno apribojimą plačiajai visuomenei, jei įjungtas domenų apribojimų sąrašo reklamavimas.
reject_media: Atmesti medijos failus
reject_media_hint: Panaikina lokaliai saugomus medijos failus bei atsisako jų parsisiuntimo ateityje. Neliečia užblokavimu
reject_reports: Atmesti ataskaitas
@ -427,11 +429,14 @@ lt:
title: El pašto juodasis sąrašas
instances:
by_domain: Domenas
content_policies:
reason: Viešoji priežastis
delivery_available: Pristatymas galimas
moderation:
all: Visi
limited: Limituotas
title: Moderacija
public_comment: Viešas komentaras
title: Federacija
total_blocked_by_us: Mes užblokavome
total_followed_by_them: Jų sekami
@ -449,11 +454,11 @@ lt:
relays:
add_new: Pridėti naują pamainą
delete: Ištrinti
description_html: "<strong>Federacijos perjungėjas</strong> tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. <strong> Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos</strong>, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius."
description_html: "<strong>Federacijos perdavimas</strong> tai tarpinis serveris, kuris keičiasi dideliais viešų įrašų kiekiais tarp jį prenumeruojančių ir skelbiančių serverių. <strong>Jis gali padėti mažiems ir vidutiniams serveriams atrasti fediverse esantį turinį</strong>, nes priešingu atveju vietiniams naudotojams reikėtų rankiniu būdu sekti kitus žmones iš nutolusių serverių."
disable: Išjungti
disabled: Išjungtas
enable: Įjungti
enable_hint: Kai įjungta, Jūsų serveris prenumeruos visas viešas žinutes iš šio tinklo, ir pradės siųsti šio serverio viešas žinutes į tinklą.
enable_hint: Kai bus įjungtas, tavo serveris užsiprenumeruos visus šio perdavimo viešus įrašus ir pradės į jį siųsti šio serverio viešus įrašus.
enabled: Įjungtas
inbox_url: Perdavimo URL
pending: Laukiama perdavimo patvirtinimo
@ -504,6 +509,8 @@ lt:
desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, <strong>dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami</strong>. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją.
content_retention:
danger_zone: Pavojinga zona
discovery:
public_timelines: Viešieji laiko skalės
domain_blocks:
all: Visiems
registrations:
@ -543,7 +550,7 @@ lt:
body: Mastodon verčia savanoriai.
guide_link_text: Visi gali prisidėti.
application_mailer:
notification_preferences: Keisti el pašto parinktis
notification_preferences: Keisti el. pašto nuostatas
settings: 'Keisti el. pašto nuostatas: %{link}'
view: 'Peržiūra:'
view_profile: Peržiurėti profilį
@ -635,7 +642,7 @@ lt:
contexts:
home: Namų laiko juosta
notifications: Priminimai
public: Viešos laiko juostos
public: Viešieji laiko skalės
thread: Pokalbiai
edit:
title: Keisti filtrą
@ -727,6 +734,8 @@ lt:
prev: Ankstesnis
preferences:
other: Kita
posting_defaults: Skelbimo numatytosios nuostatos
public_timelines: Viešieji laiko skalės
privacy:
hint_html: "<strong>Tikrink, kaip nori, kad tavo profilis ir įrašai būtų randami.</strong> Įjungus įvairias Mastodon funkcijas, jos gali padėti pasiekti platesnę auditoriją. Akimirką peržiūrėk šiuos nustatymus, kad įsitikintum, jog jie atitinka tavo naudojimo būdą."
redirects:
@ -769,7 +778,8 @@ lt:
import: Importuoti
migrate: Paskyros migracija
notifications: El. laiško pranešimai
preferences: Preferencijos
preferences: Nuostatos
profile: Viešas profilis
two_factor_authentication: Dviejų veiksnių autentikacija
statuses:
attached:

View File

@ -751,6 +751,7 @@ pt-PT:
desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, <strong>isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas)</strong>. Por isso, considere medidas alternativas tais como registo mediante aprovação ou sob convite.
title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a sua conta
content_retention:
danger_zone: Zona de perigo
preamble: Controle como o conteúdo gerado pelos utilizadores é armazenado no Mastodon.
title: Retenção de conteúdo
default_noindex:

View File

@ -240,6 +240,7 @@ ar:
backups_retention_period: فترة الاحتفاظ بأرشيف المستخدم
bootstrap_timeline_accounts: أوصي دائما بهذه الحسابات للمستخدمين الجدد
closed_registrations_message: رسالة مخصصة عندما يكون التسجيل غير متاح
content_cache_retention_period: مدة الاحتفاظ بالمحتوى البعيد
custom_css: سي أس أس CSS مخصص
mascot: جالب حظ مخصص (قديم)
media_cache_retention_period: مدة الاحتفاظ بالتخزين المؤقت للوسائط

View File

@ -77,9 +77,12 @@ en-GB:
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon.
backups_retention_period: Keep generated user archives for the specified number of days.
bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
closed_registrations_message: Displayed when sign-ups are closed
custom_css: You can apply custom styles on the web version of Mastodon.
favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
mascot: Overrides the illustration in the advanced web interface.
peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
profile_directory: The profile directory lists all users who have opted-in to be discoverable.

View File

@ -77,11 +77,13 @@ en:
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon.
backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days.
bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
closed_registrations_message: Displayed when sign-ups are closed
content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use.
custom_css: You can apply custom styles on the web version of Mastodon.
favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
mascot: Overrides the illustration in the advanced web interface.
media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time.
peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.

View File

@ -77,10 +77,13 @@ he:
warn: הסתר את התוכן המסונן מאחורי אזהרה עם כותרת המסנן
form_admin_settings:
activity_api_enabled: מספר ההודעות שפורסמו מקומית, משתמשים פעילים, והרשמות חדשות בדליים שבועיים
backups_retention_period: למשתמשים יש יכולת לבקש ארכיון של הודעותיהם להורדה מאוחר יותר. כאשר נבחר ערך חיובי, הארכיונים הללו ימחקו מאחסון לאחר מספר הימים שצוינו.
bootstrap_timeline_accounts: חשבונות אלו יוצמדו לראש רשימת המלצות המעקב של משתמשים חדשים.
closed_registrations_message: להציג כאשר הרשמות חדשות אינן מאופשרות
content_cache_retention_period: כל ההודעות משרתים אחרים (לרבות הדהודים ותגובות) ימחקו אחרי מספר ימים, ללא קשר לאינטראקציה של משתמשים מקומיים איתם. בכלל זה הודעות שהמתשתמשים המקומיים סימנו בסימניה או חיבוב. איזכורים פרטיים ("דיאם") בין משתמשים בין שרתים שונים יאבדו גם הם ולא תהיה אפשרות לשחזרם. השימוש באפשרות הזו מיועד לשרתים עם ייעוד מיוחד ושובר את ציפיותיהם של רב המשתמשים כאשר האפשרות מופעלת בשרת לשימוש כללי.
custom_css: ניתן לבחור ערכות סגנון אישיות בגרסת הדפדפן של מסטודון.
mascot: בחירת ציור למנשק הווב המתקדם.
media_cache_retention_period: קבצי מדיה מהודעות שהגיעו משרתים רחוקים נשמרות על השרת שלך. כאשר יבחר פה מספר חיובי, המדיה תמחק לאחר מספר ימים כמצוין. אם המידע יבוקש שוב לאחר שנמחק, הוא יורד מחדש, אם המידע עדיין זמין בצד הרחוק. עקב מגבלות על תכיפות שליפת כרטיסי קדימון מאתרים מרוחקים, מומלץ לכוון את הערך ל־14 יום לפחות, או שכרטיסי קדימונים לא יעודכנו לפי דרישה לפני חלוף חלון הזמן הזה.
peers_api_enabled: רשימת השרתים ששרת זה פגש בפדיוורס. לא כולל מידע לגבי קשר ישיר עם שרת נתון, אלא רק שידוע לשרת זה על קיומו. מידע זה משמש שירותים האוספים סטטיסטיקות כלליות על הפדרציה.
profile_directory: ספריית הפרופילים מציגה ברשימה את כל המשתמשים שביקשו להיות ניתנים לגילוי.
require_invite_text: כאשר הרשמות דורשות אישור ידני, הפיכת טקסט ה"מדוע את/ה רוצה להצטרף" להכרחי במקום אופציונלי

View File

@ -90,11 +90,54 @@ ia:
site_contact_email: Como pote contactar te le personas pro questiones legal o de supporto.
site_contact_username: Como pote contactar te le personas re Mastodon.
site_extended_description: Qualcunque information additional que pote esser utile al visitatores e a tu usatores. Pote esser structurate con syntaxe de markdown.
site_short_description: Un breve description pro adjutar a univocamente identificar tu servitor. Qui ha exequite illo, proque es illo?
site_terms: Usa tu proprie politica de confidentialitate o lassa blanc pro usar le predefinite. Pote esser structurate con syntaxe de markdown.
site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio.
status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption
theme: Thema que le visitatores disconnexe e le nove usatores vide.
thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor.
timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor.
trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto.
trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor.
trends_as_landing_page: Monstrar contento de tendentia a usatores disconnexe e visitatores in vice que un description de iste servitor. Require tendentias esser activate.
form_challenge:
current_password: Tu entra in un area secur
imports:
data: File CSV exportate ab un altere servitor de Mastodon
invite_request:
text: Isto nos adjutara a revider tu application
ip_block:
comment: Optional. Memorar perque tu ha addite iste regula.
expires_in: Le adresses IP es un ressource finite, illos es aliquando compartite e sovente cambia manos. Pro iste ration, blocadas de IP indefinite non es recommendate.
ip: Inserer un adresse IPv4 o IPv6. Tu pote blocar campos integre per le syntaxe CIDR. Sia attente pro non disconnecter te!
severities:
no_access: Blocar accesso a tote le ressources
sign_up_block: Nove inscriptiones non sera possibile
sign_up_requires_approval: Nove inscriptiones requirera tu approbation
severity: Seliger que evenira con requestas ab iste IP
rule:
hint: Optional. Forni altere detalios re le regula
text: Describe un regula o requisito pro usatores sur iste servitor. Tenta de mantener lo breve e simple
sessions:
otp: 'Insere le codice a duo factores generate per le app de tu telephono o usa un de tu codices de recuperation:'
webauthn: Si illo es un clave USB cura de inserer lo e, si necessari, tocca lo.
settings:
indexable: Tu pagina del profilo pote apparer in resultatos del recerca sur Google, Bing, e alteros.
show_application: Tu sempre sera capace totevia de vider que app publicava tu message.
tag:
name: Tu pote solo cambiar le inveloppe del litteras, per exemplo, pro render lo plus legibile
user:
chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public
role: Le rolo controla que permissos ha le usator
user_role:
color: Color a esser usate pro le rolo in omne parte del UI, como RGB in formato hexadecimal
highlighted: Iste rende le rolo publicamente visibile
name: Nomine public del rolo, si rolo es definite a esser monstrate como insignia
permissions_as_keys: Usatores con iste rolo habera accesso a...
position: Rolo superior decide resolution de conflicto in certe situationes. Certe actiones pote solo esser exequite sur rolos con un prioritate inferior
webhook:
events: Selige le eventos a inviar
template: Compone tu proprie carga utile JSON per interpolation de variabile. Lassar blanc pro JSON predefinite.
url: Ubi le eventos essera inviate
labels:
account:
@ -105,10 +148,15 @@ ia:
indexable: Includer messages public in le resultatos de recerca
show_collections: Monstrar sequites e sequitores in le profilo
unlocked: Acceptar automaticamente nove sequitores
account_alias:
acct: Pseudonymo del vetere conto
account_migration:
acct: Pseudonymo del nove conto
account_warning_preset:
text: Texto predefinite
title: Titulo
admin_account_action:
include_statuses: Includer messages reportate in le email
send_email_notification: Notificar le usator per e-mail
text: Advertimento personalisate
type: Action
@ -118,12 +166,19 @@ ia:
sensitive: Sensibile
silence: Limitar
suspend: Suspender
warning_preset_id: Usar un aviso predefinite
announcement:
all_day: Evento quotidian
ends_at: Fin del evento
scheduled_at: Planificar publication
starts_at: Initio del evento
text: Annuncio
appeal:
text: Explicar perque iste decision deberea esser revertite
defaults:
autofollow: Invitar a sequer tu conto
avatar: Pictura de profilo
bot: Isto es un conto automatisate
chosen_languages: Filtrar linguas
confirm_new_password: Confirmar nove contrasigno
confirm_password: Confirmar contrasigno
@ -137,6 +192,7 @@ ia:
header: Imagine titulo
honeypot: "%{label} (non compilar)"
inbox_url: URL del cassa de ingresso de repetitor
irreversible: Declinar in vice que celar
locale: Lingua de interfacie
max_uses: Numero max de usos
new_password: Nove contrasigno
@ -145,15 +201,27 @@ ia:
password: Contrasigno
phrase: Parola o phrase clave
setting_advanced_layout: Activar le interfacie web avantiate
setting_aggregate_reblogs: Gruppa promotiones in classificationes temporal
setting_always_send_emails: Sempre inviar notificationes per e-mail
setting_auto_play_gif: Auto-reproduce GIFs animate
setting_boost_modal: Monstrar dialogo de confirmation ante promover
setting_default_language: Lingua de publication
setting_default_privacy: Confidentialitate del messages
setting_default_sensitive: Sempre marcar le medios cmo sensbile
setting_delete_modal: Monstrar le dialogo de confirmation ante deler un message
setting_disable_swiping: Disactivar le movimentos per glissamento
setting_display_media: Visualisation de medios
setting_display_media_default: Predefinite
setting_display_media_hide_all: Celar toto
setting_display_media_show_all: Monstrar toto
setting_expand_spoilers: Sempre expander messages marcate con avisos de contento
setting_hide_network: Cela tu rete social
setting_reduce_motion: Reducer movimento in animationes
setting_system_font_ui: Usar typo de litteras predefinite del systema
setting_theme: Thema de sito
setting_trends: Monstrar le tendentias de hodie
setting_unfollow_modal: Monstrar dialogo de confirmation ante cessar de sequer alcuno
setting_use_blurhash: Monstrar imagines degradate multicolor pro medios celate
setting_use_pending_items: Modo lente
severity: Severitate
sign_in_token_attempt: Codice de securitate
@ -162,6 +230,8 @@ ia:
username: Nomine de usator
username_or_email: Nomine de usator o e-mail
whole_word: Parola integre
email_domain_block:
with_dns_records: Includer registrationes MX e IPs del dominio
featured_tag:
name: Hashtag
filters:
@ -169,55 +239,98 @@ ia:
hide: Celar completemente
warn: Celar con un advertimento
form_admin_settings:
activity_api_enabled: Publicar statisticas aggregate re le activitate de usator in le API
backups_retention_period: Periodo de retention del archivo de usator
bootstrap_timeline_accounts: Recommenda sempre iste contos a nove usatores
closed_registrations_message: Message personalisate quando le inscriptiones non es disponibile
content_cache_retention_period: Periodo de retention del contento remote
custom_css: CSS personalisate
mascot: Personalisar le mascotte (hereditage)
media_cache_retention_period: Periodo de retention del cache multimedial
peers_api_enabled: Publicar le lista de servitores discoperite in le API
profile_directory: Activar directorio de profilos
registrations_mode: Qui pote inscriber se
require_invite_text: Requirer un ration pro junger se
show_domain_blocks: Monstrar le blocadas de dominio
show_domain_blocks_rationale: Monstrar perque le dominios era blocate
site_contact_email: Adresse de e-mail de contacto
site_contact_username: Nomine de usator de contacto
site_extended_description: Description extense
site_short_description: Description de servitor
site_terms: Politica de confidentialitate
site_title: Nomine de servitor
status_page_url: URL del pagina de stato
theme: Thema predefinite
thumbnail: Miniatura de servitor
timeline_preview: Permitter accesso non authenticate a chronologias public
trendable_by_default: Permitter tendentias sin revision previe
trends: Activar tendentias
trends_as_landing_page: Usar tendentias como pagina de destination
interactions:
must_be_follower: Blocar notificationes de non-sequaces
must_be_following: Blocar notificationes de gente que tu non sequer
must_be_following_dm: Blocar messages directe de gente que tu non seque
invite:
comment: Commento
invite_request:
text: Perque vole tu junger te?
ip_block:
comment: Commento
ip: IP
severities:
no_access: Blocar le accesso
sign_up_block: Blocar inscriptiones
sign_up_requires_approval: Limitar inscriptiones
severity: Regula
notification_emails:
appeal: Alcuno appella un decision de moderator
digest: Inviar emails compendio
favourite: Alcuno appreciava tu message
follow: Alcuno te sequeva
follow_request: Alcuno requireva de sequer te
mention: Alcuno te mentionava
pending_account: Nove conto besonia de revision
reblog: Alcuno promoveva tu message
report: Un nove reporto es inviate
software_updates:
all: Notificar sur tote le actualisationes
critical: Notificar solmente sur actualisationes critic
label: Un nove version de Mastodon es disponibile
none: Nunquam notificar sur actualisationes (non recommendate)
patch: Notificar re actualisationes de correction de bug
trending_tag: Un nove tendentia require revision
rule:
hint: Information additional
text: Regula
settings:
indexable: Includer pagina de profilo in le motores de recerca
show_application: Monstrar ab que app tu ha inviate un message
tag:
listable: Permitter a iste hashtag apparer in le recercas e suggestiones
name: Hashtag
trendable: Permitter a iste hashtag de sub tendentias
usable: Permitter al messages usar iste hashtag
user:
role: Rolo
time_zone: Fuso horari
user_role:
color: Color de insignia
highlighted: Monstrar le rolo como insignia sur le profilos de usator
name: Nomine
permissions_as_keys: Permissiones
position: Prioritate
webhook:
events: Eventos activate
template: Modello de carga utile
url: URL de extremo
'no': 'No'
not_recommended: Non recommendate
overridden: Supplantate
recommended: Recommendate
required:
mark: "*"
text: requirite
title:
sessions:
webauthn: Usa un de tu claves de securitate pro acceder
'yes': Si

View File

@ -77,10 +77,13 @@ ja:
warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します
form_admin_settings:
activity_api_enabled: 週単位でローカルで公開された投稿数、アクティブユーザー数、新規登録者数を表示します
backups_retention_period: ユーザーには、後でダウンロードするために投稿のアーカイブを生成する機能があります。正の値に設定すると、これらのアーカイブは指定された日数後に自動的にストレージから削除されます。
bootstrap_timeline_accounts: これらのアカウントは、新しいユーザー向けのおすすめユーザーの一番上にピン留めされます。
closed_registrations_message: アカウント作成を停止している時に表示されます
content_cache_retention_period: 他のサーバーからのすべての投稿(ブーストや返信を含む)は、指定された日数が経過すると、ローカルユーザーとのやりとりに関係なく削除されます。これには、ローカルユーザーがブックマークやお気に入りとして登録した投稿も含まれます。異なるサーバーのユーザー間の非公開な変身も失われ、復元することは不可能です。この設定の使用は特別な目的のインスタンスのためのものであり、一般的な目的のサーバーで使用するした場合、多くのユーザーの期待を裏切ることになります。
custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。
mascot: 上級者向けWebインターフェースのイラストを上書きします。
media_cache_retention_period: リモートユーザーが投稿したメディアファイルは、あなたのサーバーにキャッシュされます。正の値を設定すると、メディアは指定した日数後に削除されます。削除後にメディアデータが要求された場合、ソースコンテンツがまだ利用可能であれば、再ダウンロードされます。リンクプレビューカードがサードパーティのサイトを更新する頻度に制限があるため、この値を少なくとも14日に設定することをお勧めします。
peers_api_enabled: このサーバーが Fediverse で遭遇したドメイン名のリストです。このサーバーが知っているだけで、特定のサーバーと連合しているかのデータは含まれません。これは一般的に Fediverse に関する統計情報を収集するサービスによって使用されます。
profile_directory: ディレクトリには、掲載する設定をしたすべてのユーザーが一覧表示されます。
require_invite_text: アカウント登録が承認制の場合、登録の際の申請事由の入力を必須にします
@ -240,6 +243,7 @@ ja:
backups_retention_period: ユーザーアーカイブの保持期間
bootstrap_timeline_accounts: おすすめユーザーに常に表示するアカウント
closed_registrations_message: アカウント作成を停止している時のカスタムメッセージ
content_cache_retention_period: リモートコンテンツの保存期間
custom_css: カスタムCSS
mascot: カスタムマスコット(レガシー)
media_cache_retention_period: メディアキャッシュの保持期間

View File

@ -77,10 +77,13 @@ pt-PT:
warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro
form_admin_settings:
activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos
backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado como favoritas ou adicionado aos items salvos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
mascot: Sobrepõe-se à ilustração na interface web avançada.
media_cache_retention_period: Os ficheiros multimédia de publicações feitas por utilizadores remotos são armazenados em cache no seu servidor. Quando definido para um valor positivo, os ficheiros multimédia serão eliminados após o número de dias especificado. Se os ficheiros multimédia forem solicitados depois de terem sido eliminados, serão transferidos novamente, se o conteúdo de origem ainda estiver disponível. Devido a restrições sobre a frequência com que os cartões de pré-visualização de links pesquisam sites de terceiros, recomenda-se que este valor seja definido para, pelo menos, 14 dias, ou os cartões de pré-visualização de links não serão atualizados a pedido antes desse período.
peers_api_enabled: Uma lista de nomes de domínio que este servidor encontrou no fediverso. Nenhum dado é incluído aqui sobre se você federa com um determinado servidor, apenas que o seu servidor o conhece. Este serviço é utilizado por serviços que recolhem estatísticas na federação, em termos gerais.
profile_directory: O diretório de perfis lista todos os utilizadores que optaram por ter a sua conta a ser sugerida a outros.
require_invite_text: Quando as incrições exigirem aprovação manual, faça o texto "Por que se quer juntar a nós?" da solicitação de convite ser obrigatório, em vez de opcional
@ -240,6 +243,7 @@ pt-PT:
backups_retention_period: Período de retenção de arquivos de utilizador
bootstrap_timeline_accounts: Recomendar sempre estas contas para novos utilizadores
closed_registrations_message: Mensagem personalizada quando as inscrições não estiverem disponíveis
content_cache_retention_period: Período de retenção de conteúdos remotos
custom_css: CSS personalizado
mascot: Mascote personalizada (legado)
media_cache_retention_period: Período de retenção de ficheiros de media em cache

View File

@ -77,10 +77,13 @@ sq:
warn: Fshihe lëndën e filtruar pas një sinjalizimi që përmend titullin e filtrit
form_admin_settings:
activity_api_enabled: Numër postimesh të botuar lokalisht, përdoruesish aktiv dhe regjistrimesh të reja sipas matjesh javore
backups_retention_period: Përdorues kanë aftësinë të prodhojnë arkiva të postimeve të tyre për ti shkarkuar më vonë. Kur i jepet një vlerë pozitive, këto arkiva do të fshihen automatikisht prej depozitës tuaj pas numrit të dhënë të ditëve.
bootstrap_timeline_accounts: Këto llogari do të fiksohen në krye të rekomandimeve për ndjekje nga përdorues të rinj.
closed_registrations_message: Shfaqur kur mbyllen dritare regjistrimesh
content_cache_retention_period: Krejt postimet prej shërbyesve të tjerë (përfshi përforcime dhe përgjigje) do të fshihen pas numrit të caktuar të ditëve, pa marrë parasysh çfarëdo ndërveprimi përdoruesi me këto postime. Kjo përfshin postime kur një përdorues vendor u ka vënë shenjë si faqerojtës, ose të parapëlqyer. Do të humbin gjithashtu dhe përmendje private mes përdoruesish nga instanca të ndryshme dhe sdo të jetë e mundshme të rikthehen. Përdorimi i këtij rregullimi është menduar për instanca me qëllim të caktuar dhe ndërhyn në çka presin mjaft përdorues, kur sendërtohet për përdorim të përgjithshëm.
custom_css: Stile vetjakë mund të aplikoni në versionin web të Mastodon-it.
mascot: Anashkalon ilustrimin te ndërfaqja web e thelluar.
media_cache_retention_period: Kartela media nga postime të bëra nga përdorues të largët ruhen në një fshehtinë në shërbyesin tuaj. Kur i jepet një vlerë pozitive, media do të fshihet pas numrit të dhënë të ditëve. Nëse të dhënat e medias duhen pas fshirjes, do të rishkarkohen, nëse lënda burim mund të kihet ende. Për shkak kufizimesh mbi sa shpesh skeda paraparjesh lidhjesh ndërveprojnë me sajte palësh të treta, rekomandohet të vihet kjo vlerë të paktën 14 ditë, ose skedat e paraparjes së lidhje sdo të përditësohen duke e kërkuar para asaj kohe.
peers_api_enabled: Një listë emrash përkatësish që ky shërbyes ka hasur në fedivers. Këtu sjepen të dhëna nëse jeni i federuar me shërbyesin e dhënë, thjesht tregohet se shërbyesi juaj e njeh. Kjo përdoret nga shërbime që mbledhin statistika mbi federimin në kuptimin e përgjithshëm.
profile_directory: Drejtoria e profileve paraqet krejt përdoruesit që kanë zgjedhur të jenë të zbulueshëm.
require_invite_text: Kur regjistrimet lypin miratim dorazi, bëje tekstin “Përse doni të bëheni pjesë?” të detyrueshëm, në vend se opsional
@ -240,6 +243,7 @@ sq:
backups_retention_period: Periudhë mbajtjeje arkivash përdoruesish
bootstrap_timeline_accounts: Rekomandoju përherë këto llogari përdoruesve të rinj
closed_registrations_message: Mesazh vetjak për pamundësi regjistrimesh të reja
content_cache_retention_period: Periudhë mbajtjeje lënde të largët
custom_css: CSS Vetjake
mascot: Simbol vetjak (e dikurshme)
media_cache_retention_period: Periudhë mbajtjeje lënde media

View File

@ -77,8 +77,10 @@ th:
warn: ซ่อนเนื้อหาที่กรองอยู่หลังคำเตือนที่กล่าวถึงชื่อเรื่องของตัวกรอง
form_admin_settings:
activity_api_enabled: จำนวนโพสต์ที่เผยแพร่ในเซิร์ฟเวอร์, ผู้ใช้ที่ใช้งานอยู่ และการลงทะเบียนใหม่ในบักเก็ตรายสัปดาห์
backups_retention_period: ผู้ใช้มีความสามารถในการสร้างการเก็บถาวรของโพสต์ของเขาเพื่อดาวน์โหลดในภายหลัง เมื่อตั้งเป็นค่าบวก จะลบการเก็บถาวรเหล่านี้ออกจากที่เก็บข้อมูลของคุณโดยอัตโนมัติหลังจากจำนวนวันที่ระบุ
bootstrap_timeline_accounts: จะปักหมุดบัญชีเหล่านี้ไว้ด้านบนสุดของคำแนะนำการติดตามของผู้ใช้ใหม่
closed_registrations_message: แสดงเมื่อมีการปิดการลงทะเบียน
content_cache_retention_period: จะลบโพสต์ทั้งหมดจากเซิร์ฟเวอร์อื่น ๆ (รวมถึงการดันและการตอบกลับ) หลังจากจำนวนวันที่ระบุ โดยไม่คำนึงถึงการโต้ตอบใด ๆ ของผู้ใช้ในเซิร์ฟเวอร์กับโพสต์เหล่านั้น สิ่งนี้รวมถึงโพสต์ที่ผู้ใช้ในเซิร์ฟเวอร์ได้ทำเครื่องหมายโพสต์ว่าเป็นที่คั่นหน้าหรือรายการโปรด การกล่าวถึงแบบส่วนตัวระหว่างผู้ใช้จากอินสแตนซ์ที่แตกต่างกันจะหายไปและไม่สามารถคืนค่าได้เช่นกัน การใช้การตั้งค่านี้มีไว้สำหรับอินสแตนซ์ที่มีวัตถุประสงค์พิเศษและทำลายความคาดหวังของผู้ใช้จำนวนมากเมื่อนำไปใช้สำหรับการใช้งานที่มีวัตถุประสงค์ทั่วไป
custom_css: คุณสามารถนำไปใช้ลักษณะที่กำหนดเองใน Mastodon รุ่นเว็บ
mascot: เขียนทับภาพประกอบในส่วนติดต่อเว็บขั้นสูง
peers_api_enabled: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป

View File

@ -524,6 +524,7 @@ sk:
many: "%{count} poznámok"
one: "%{count} poznámka"
other: "%{count} poznámky"
action_log: Denník auditu
action_taken_by: Zákrok vykonal/a
actions:
suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu.

View File

@ -779,6 +779,7 @@ sl:
desc_html: To se zanaša na zunanje skripte hCaptcha in lahko predstavlja tveganje za varnost in zasebnost. Poleg tega <strong>to lahko nekaterim ljudem (posebno invalidom) občutno oteži dostopnost registracijskega postopka</strong>. Zato svetujemo, da razmislite o drugih ukrepih, kot je na primer registracija na podlagi odobritve ali povabila.
title: Od novih uporabnikov zahtevaj reševanje CAPTCHA za potrditev računov
content_retention:
danger_zone: Območje nevarnosti
preamble: Nazdor nad hrambo vsebine uporabnikov v Mastodonu.
title: Hramba vsebin
default_noindex:

View File

@ -748,6 +748,7 @@ sq:
desc_html: Kjo bazohet në programthe të jashtëm prej hCaptcha, çka mund të përbëjë një shqetësim për sigurinë dhe privatësinë. Veç kësaj, <strong>kjo mund ta bëjë procesin e regjistrimit në shkallë të madhe më pak të përdorshëm për disa persona (veçanërisht ata me paaftësi)</strong>. Për këto arsye, ju lutemi, shihni mundësinë e masave alternative, fjala vjen, bazuar në miratim, ose regjistrim vetëm me ftesa.
title: Kërko prej përdoruesve të rinj të zgjidhin një CAPTCHA, si ripohim të llogarisë të tyre
content_retention:
danger_zone: Zonë rreziku
preamble: Kontrolloni se si depozitohen në Mastodon lënda e prodhuar nga përdoruesit.
title: Mbajtje lënde
default_noindex:

View File

@ -1837,6 +1837,7 @@ th:
explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน
feature_action: เรียนรู้เพิ่มเติม
feature_audience: Mastodon มีความพิเศษที่ให้คุณจัดการผู้รับสารของคุณได้โดยไม่มีตัวกลาง นอกจากนี้ การติดตั้ง Mastodon บนโครงสร้างพื้นฐานของคุณจะทำให้คุณสามารถติดตาม (และติดตามโดย) เซิร์ฟเวอร์ Mastodon แห่งไหนก็ได้ที่ทำงานอยู่ โดยไม่มีใครสามารถควบคุมได้นอกจากคุณ
feature_audience_title: สร้างผู้ชมของคุณด้วยความมั่นใจ
follow_action: ติดตาม
follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ
follow_title: ปรับแต่งฟีดหน้าแรกของคุณ

View File

@ -63,6 +63,7 @@ Rails.application.routes.draw do
tokens: 'oauth/tokens'
end
get '.well-known/oauth-authorization-server', to: 'well_known/oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' }
get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' }
get '.well-known/nodeinfo', to: 'well_known/node_info#index', as: :nodeinfo, defaults: { format: 'json' }
get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger

View File

@ -6,7 +6,7 @@ namespace :api, format: false do
# JSON / REST API
namespace :v1 do
resources :statuses, only: [:create, :show, :update, :destroy] do
resources :statuses, only: [:index, :create, :show, :update, :destroy] do
scope module: :statuses do
resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
resources :favourited_by, controller: :favourited_by_accounts, only: :index
@ -184,7 +184,7 @@ namespace :api, format: false do
resources :familiar_followers, only: :index
end
resources :accounts, only: [:create, :show] do
resources :accounts, only: [:index, :create, :show] do
scope module: :accounts do
resources :statuses, only: :index
resources :followers, only: :index, controller: :follower_accounts

View File

@ -0,0 +1,42 @@
# frozen_string_literal: true
require_relative '../../lib/mastodon/migration_helpers'
class ConvertFileSizeColumnsToBigInt < ActiveRecord::Migration[7.1]
include Mastodon::MigrationHelpers
TABLE_COLUMN_MAPPING = [
[:accounts, :avatar_file_size],
[:accounts, :header_file_size],
[:custom_emojis, :image_file_size],
[:imports, :data_file_size],
[:media_attachments, :file_file_size],
[:media_attachments, :thumbnail_file_size],
[:preview_cards, :image_file_size],
[:site_uploads, :file_file_size],
].freeze
disable_ddl_transaction!
def migrate_columns(to_type)
TABLE_COLUMN_MAPPING.each do |column_parts|
table, column = column_parts
# Skip this if we're resuming and already did this one.
next if column_for(table, column).sql_type == to_type.to_s
safety_assured do
change_column_type_concurrently table, column, to_type
cleanup_concurrent_column_type_change table, column
end
end
end
def up
migrate_columns(:bigint)
end
def down
migrate_columns(:integer)
end
end

View File

@ -166,11 +166,11 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.string "url"
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.bigint "avatar_file_size"
t.datetime "avatar_updated_at", precision: nil
t.string "header_file_name"
t.string "header_content_type"
t.integer "header_file_size"
t.bigint "header_file_size"
t.datetime "header_updated_at", precision: nil
t.string "avatar_remote_url"
t.boolean "locked", default: false, null: false
@ -368,7 +368,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.string "domain"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.bigint "image_file_size"
t.datetime "image_updated_at", precision: nil
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@ -558,7 +558,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.datetime "updated_at", precision: nil, null: false
t.string "data_file_name"
t.string "data_content_type"
t.integer "data_file_size"
t.bigint "data_file_size"
t.datetime "data_updated_at", precision: nil
t.bigint "account_id", null: false
t.boolean "overwrite", default: false, null: false
@ -635,7 +635,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.bigint "status_id"
t.string "file_file_name"
t.string "file_content_type"
t.integer "file_file_size"
t.bigint "file_file_size"
t.datetime "file_updated_at", precision: nil
t.string "remote_url", default: "", null: false
t.datetime "created_at", precision: nil, null: false
@ -651,7 +651,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.integer "file_storage_schema_version"
t.string "thumbnail_file_name"
t.string "thumbnail_content_type"
t.integer "thumbnail_file_size"
t.bigint "thumbnail_file_size"
t.datetime "thumbnail_updated_at", precision: nil
t.string "thumbnail_remote_url"
t.index ["account_id", "status_id"], name: "index_media_attachments_on_account_id_and_status_id", order: { status_id: :desc }
@ -855,7 +855,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.string "description", default: "", null: false
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.bigint "image_file_size"
t.datetime "image_updated_at", precision: nil
t.integer "type", default: 0, null: false
t.text "html", default: "", null: false
@ -993,7 +993,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.string "var", default: "", null: false
t.string "file_file_name"
t.string "file_content_type"
t.integer "file_file_size"
t.bigint "file_file_size"
t.datetime "file_updated_at", precision: nil
t.json "meta"
t.datetime "created_at", precision: nil, null: false

View File

@ -287,4 +287,28 @@ describe ApplicationHelper do
end
end
end
describe '#site_icon_path' do
context 'when an icon exists' do
let!(:favicon) { Fabricate(:site_upload, var: 'favicon') }
it 'returns the URL of the icon' do
expect(helper.site_icon_path('favicon')).to eq(favicon.file.url('48'))
end
it 'returns the URL of the icon with size parameter' do
expect(helper.site_icon_path('favicon', 16)).to eq(favicon.file.url('16'))
end
end
context 'when an icon does not exist' do
it 'returns nil' do
expect(helper.site_icon_path('favicon')).to be_nil
end
it 'returns nil with size parameter' do
expect(helper.site_icon_path('favicon', 16)).to be_nil
end
end
end
end

View File

@ -127,7 +127,7 @@ describe Admin::SystemCheck::ElasticsearchCheck do
end
def stub_elasticsearch_error
client = instance_double(Elasticsearch::Transport::Client)
client = instance_double(Elasticsearch::Client)
allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error)
allow(Chewy).to receive(:client).and_return(client)
end

View File

@ -242,6 +242,48 @@ RSpec.describe Status do
end
end
describe '#reported?' do
context 'when the status is not reported' do
it 'returns false' do
expect(subject.reported?).to be false
end
end
context 'when the status is part of an open report' do
before do
Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
end
it 'returns true' do
expect(subject.reported?).to be true
end
end
context 'when the status is part of a closed report with an account warning mentioning the account' do
before do
report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
report.resolve!(Fabricate(:account))
Fabricate(:account_warning, target_account: subject.account, status_ids: [subject.id], report: report)
end
it 'returns true' do
expect(subject.reported?).to be true
end
end
context 'when the status is part of a closed report with an account warning not mentioning the account' do
before do
report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
report.resolve!(Fabricate(:account))
Fabricate(:account_warning, target_account: subject.account, report: report)
end
it 'returns false' do
expect(subject.reported?).to be false
end
end
end
describe '.mutes_map' do
subject { described_class.mutes_map([status.conversation.id], account) }

View File

@ -36,6 +36,10 @@ RSpec.describe Tag do
expect(subject.match('https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111895#c4')).to be_nil
end
it 'does not match URLs with hashtag-like anchors after a non-ascii character' do
expect(subject.match('https://example.org/testé#foo')).to be_nil
end
it 'does not match URLs with hashtag-like anchors after an empty query parameter' do
expect(subject.match('https://en.wikipedia.org/wiki/Ghostbusters_(song)?foo=#Lawsuit')).to be_nil
end

View File

@ -8,6 +8,22 @@ describe '/api/v1/accounts' do
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
describe 'GET /api/v1/accounts?ids[]=:id' do
let(:account) { Fabricate(:account) }
let(:other_account) { Fabricate(:account) }
let(:scopes) { 'read:accounts' }
it 'returns expected response' do
get '/api/v1/accounts', headers: headers, params: { ids: [account.id, other_account.id, 123_123] }
expect(response).to have_http_status(200)
expect(body_as_json).to contain_exactly(
hash_including(id: account.id.to_s),
hash_including(id: other_account.id.to_s)
)
end
end
describe 'GET /api/v1/accounts/:id' do
context 'when logged out' do
let(:account) { Fabricate(:account) }

View File

@ -9,6 +9,22 @@ describe '/api/v1/statuses' do
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: client_app, scopes: scopes) }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
describe 'GET /api/v1/statuses?ids[]=:id' do
let(:status) { Fabricate(:status) }
let(:other_status) { Fabricate(:status) }
let(:scopes) { 'read:statuses' }
it 'returns expected response' do
get '/api/v1/statuses', headers: headers, params: { ids: [status.id, other_status.id, 123_123] }
expect(response).to have_http_status(200)
expect(body_as_json).to contain_exactly(
hash_including(id: status.id.to_s),
hash_including(id: other_status.id.to_s)
)
end
end
describe 'GET /api/v1/statuses/:id' do
subject do
get "/api/v1/statuses/#{status.id}", headers: headers

View File

@ -0,0 +1,37 @@
# frozen_string_literal: true
require 'rails_helper'
describe 'The /.well-known/oauth-authorization-server request' do
let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http }
before do
host! ENV.fetch('LOCAL_DOMAIN')
end
it 'returns http success with valid JSON response' do
get '/.well-known/oauth-authorization-server'
expect(response)
.to have_http_status(200)
.and have_attributes(
media_type: 'application/json'
)
grant_types_supported = Doorkeeper.configuration.grant_flows.dup
grant_types_supported << 'refresh_token' if Doorkeeper.configuration.refresh_token_enabled?
expect(body_as_json).to include(
issuer: root_url(protocol: protocol),
service_documentation: 'https://docs.joinmastodon.org/',
authorization_endpoint: oauth_authorization_url(protocol: protocol),
token_endpoint: oauth_token_url(protocol: protocol),
revocation_endpoint: oauth_revoke_url(protocol: protocol),
scopes_supported: Doorkeeper.configuration.scopes.map(&:to_s),
response_types_supported: Doorkeeper.configuration.authorization_response_types,
grant_types_supported: grant_types_supported,
# non-standard extension:
app_registration_endpoint: api_v1_apps_url(protocol: protocol)
)
end
end

589
yarn.lock

File diff suppressed because it is too large Load Diff