diff --git a/.github/stylelint-matcher.json b/.github/stylelint-matcher.json deleted file mode 100644 index cdfd4086bd4200..00000000000000 --- a/.github/stylelint-matcher.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "problemMatcher": [ - { - "owner": "stylelint", - "pattern": [ - { - "regexp": "^([^\\s].*)$", - "file": 1 - }, - { - "regexp": "^\\s+((\\d+):(\\d+))?\\s+(✖|×)\\s+(.*)\\s{2,}(.*)$", - "line": 2, - "column": 3, - "message": 5, - "code": 6, - "loop": true - } - ] - } - ] -} diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml index e5f487487719f1..d3b8035cd86521 100644 --- a/.github/workflows/lint-css.yml +++ b/.github/workflows/lint-css.yml @@ -38,9 +38,5 @@ jobs: - name: Set up Javascript environment uses: ./.github/actions/setup-javascript - - uses: xt0rted/stylelint-problem-matcher@v1 - - - run: echo "::add-matcher::.github/stylelint-matcher.json" - - name: Stylelint - run: yarn lint:css + run: yarn lint:css -f github diff --git a/Gemfile.lock b/Gemfile.lock index a231785402e1ab..190888ddb81ba7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) @@ -651,8 +651,8 @@ GEM rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.2) - parser (>= 3.3.0.4) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) rubocop-capybara (2.20.0) rubocop (~> 1.41) rubocop-factory_bot (2.25.1) @@ -665,7 +665,7 @@ GEM rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (2.29.1) + rubocop-rspec (2.29.2) rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) diff --git a/app/controllers/admin/site_uploads_controller.rb b/app/controllers/admin/site_uploads_controller.rb index a5d2cf41cf121d..96e61cf6bbc194 100644 --- a/app/controllers/admin/site_uploads_controller.rb +++ b/app/controllers/admin/site_uploads_controller.rb @@ -9,7 +9,7 @@ def destroy @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 diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index c4e678a024cb26..881aec13e26d2f 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -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 @@ -84,6 +90,10 @@ def set_account @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 @@ -92,10 +102,22 @@ def check_account_confirmation 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 diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 3634acf95662db..e1ad89ee3e02e2 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -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 @@ def show 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 @@ def update 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 diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index e2c01635f63ee2..94c53fccc4271c 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -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 @@ -125,6 +132,10 @@ def destroy 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? @@ -139,6 +150,18 @@ def set_thread 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, diff --git a/app/controllers/well_known/oauth_metadata_controller.rb b/app/controllers/well_known/oauth_metadata_controller.rb new file mode 100644 index 00000000000000..c80be2d65258c5 --- /dev/null +++ b/app/controllers/well_known/oauth_metadata_controller.rb @@ -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 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ad4ec449709a46..0d6feb934c6717 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -251,9 +251,14 @@ def prerender_custom_emojis(html, custom_emojis, other_options = {}) end def prerender_custom_emojis_from_hash(html, custom_emojis_hash) - # rubocop:disable Style/OpenStructUse - prerender_custom_emojis(html, JSON.parse([custom_emojis_hash].to_json, object_class: OpenStruct)) - # rubocop:enable Style/OpenStructUse + prerender_custom_emojis(html, JSON.parse([custom_emojis_hash].to_json, object_class: OpenStruct)) # rubocop:disable Style/OpenStructUse + end + + def site_icon_path(type, size = '48') + icon = SiteUpload.find_by(var: type) + return nil unless icon + + icon.file.url(size) end private diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index dd13f10aa3467f..68e32dd2aab6e7 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -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 t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i 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": "احذفه مِن الفواصل المرجعية", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 59d3d0965afd2a..577664107946a5 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -331,7 +331,7 @@ "footer.source_code": "Quellcode anzeigen", "footer.status": "Status", "generic.saved": "Gespeichert", - "getting_started.heading": "Auf geht’s!", + "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 geht’s!“ ö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", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 83d2532e2c7fa4..798a16ebc089ba 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -578,6 +578,15 @@ "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.list_status": "{name}さんの投稿が{listName}に追加されました", "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}さんがあなたの投稿をブーストしました", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index ed4fa8dfaf7317..7806abc6b55fbb 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -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", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index da35b3d43ba57a..a25eab9cbfe66e 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -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 t’ju ndjekë", "notification.follow_request": "{name} ka kërkuar t’ju 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 t’u 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", diff --git a/app/lib/access_token_extension.rb b/app/lib/access_token_extension.rb index f51bde492736ef..4e9585dd1e6583 100644 --- a/app/lib/access_token_extension.rb +++ b/app/lib/access_token_extension.rb @@ -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 diff --git a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb index 1d2dbbe4146a86..65f444624e493b 100644 --- a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb +++ b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb @@ -50,7 +50,7 @@ def sql_query_string 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 diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb index bec7d3a4550df4..07776c36991b56 100644 --- a/app/lib/link_details_extractor.rb +++ b/app/lib/link_details_extractor.rb @@ -282,6 +282,6 @@ def detector end def html_entities - @html_entities ||= HTMLEntities.new + @html_entities ||= HTMLEntities.new(:expanded) end end diff --git a/app/models/account.rb b/app/models/account.rb index a41dab4c152247..dd85767bc4e3a1 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -17,11 +17,9 @@ # url :string # avatar_file_name :string # avatar_content_type :string -# avatar_file_size :integer # avatar_updated_at :datetime # header_file_name :string # header_content_type :string -# header_file_size :integer # header_updated_at :datetime # avatar_remote_url :string # locked :boolean default(FALSE), not null @@ -55,6 +53,8 @@ # indexable :boolean default(FALSE), not null # master_settings :jsonb # remote_pending :boolean default(FALSE), not null +# avatar_file_size :bigint(8) +# header_file_size :bigint(8) # class Account < ApplicationRecord diff --git a/app/models/concerns/status/threading_concern.rb b/app/models/concerns/status/threading_concern.rb index b33ea88893387d..9424d66f5e7f2b 100644 --- a/app/models/concerns/status/threading_concern.rb +++ b/app/models/concerns/status/threading_concern.rb @@ -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 @@ -85,15 +102,7 @@ def descendant_ids(limit, depth) 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 diff --git a/app/models/concerns/user/ldap_authenticable.rb b/app/models/concerns/user/ldap_authenticable.rb index 180df9d3101ebb..c8e9fa93484917 100644 --- a/app/models/concerns/user/ldap_authenticable.rb +++ b/app/models/concerns/user/ldap_authenticable.rb @@ -22,7 +22,7 @@ def ldap_get_user(attributes = {}) safe_username = safe_username.gsub(keys, replacement) end - resource = joins(:account).find_by(accounts: { username: safe_username }) + resource = joins(:account).merge(Account.where(Account.arel_table[:username].lower.eq safe_username.downcase)).take if resource.blank? resource = new( diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index ffa48b777d85ed..bef804106fdef6 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -9,7 +9,6 @@ # domain :string # image_file_name :string # image_content_type :string -# image_file_size :integer # image_updated_at :datetime # created_at :datetime not null # updated_at :datetime not null @@ -24,6 +23,7 @@ # aliases :jsonb # is_sensitive :boolean default(FALSE), not null # license :string +# image_file_size :bigint(8) # class CustomEmoji < ApplicationRecord diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index c47bdc71e3228e..cbdd37654c313a 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -65,6 +65,8 @@ class Form::AdminSettings hold_remote_new_accounts stop_fetch_activity_domains stop_link_preview_domains + app_icon + favicon ).freeze INTEGER_KEYS = %i( @@ -114,6 +116,8 @@ class Form::AdminSettings UPLOAD_KEYS = %i( thumbnail mascot + app_icon + favicon ).freeze OVERRIDEN_SETTINGS = { diff --git a/app/models/import.rb b/app/models/import.rb index 4bdb392014b70d..281b25a36e9d5f 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -11,10 +11,10 @@ # updated_at :datetime not null # data_file_name :string # data_content_type :string -# data_file_size :integer # data_updated_at :datetime # account_id :bigint(8) not null # overwrite :boolean default(FALSE), not null +# data_file_size :bigint(8) # # NOTE: This is a deprecated model, only kept to not break ongoing imports diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 54dece0e7a5f50..668349389f279d 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -8,7 +8,6 @@ # status_id :bigint(8) # file_file_name :string # file_content_type :string -# file_file_size :integer # file_updated_at :datetime # remote_url :string default(""), not null # created_at :datetime not null @@ -24,9 +23,10 @@ # file_storage_schema_version :integer # thumbnail_file_name :string # thumbnail_content_type :string -# thumbnail_file_size :integer # thumbnail_updated_at :datetime # thumbnail_remote_url :string +# file_file_size :bigint(8) +# thumbnail_file_size :bigint(8) # class MediaAttachment < ApplicationRecord diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 9fe02bd1681014..56b72b5e6fe87f 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -10,7 +10,6 @@ # description :string default(""), not null # image_file_name :string # image_content_type :string -# image_file_size :integer # image_updated_at :datetime # type :integer default("link"), not null # html :text default(""), not null @@ -32,6 +31,7 @@ # link_type :integer # published_at :datetime # image_description :string default(""), not null +# image_file_size :bigint(8) # class PreviewCard < ApplicationRecord diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 03d472cdb2e737..2b22e13e400cdf 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -8,18 +8,26 @@ # var :string default(""), not null # file_file_name :string # file_content_type :string -# file_file_size :integer # file_updated_at :datetime # meta :json # created_at :datetime not null # updated_at :datetime not null # blurhash :string +# file_file_size :bigint(8) # 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', diff --git a/app/models/status.rb b/app/models/status.rb index d56e80eca30a79..d9f436c1bf4dfd 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -336,7 +336,7 @@ def non_sensitive_with_media? 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 dtl? diff --git a/app/models/tag.rb b/app/models/tag.rb index 64a75fe1116627..9ea710f3b814b9 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -39,7 +39,7 @@ class Tag < ApplicationRecord HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)' HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}" - HASHTAG_RE = %r{(?قد يؤدي ذلك إلى جعل عملية التسجيل أقل سهولة بالنسبة لبعض الأشخاص (وخاصة المعاقين). لهذه الأسباب، يرجى النظر في تدابير بديلة مثل التسجيل على أساس الموافقة أو على أساس الدعوة. title: مطالبة المستخدمين الجدد بحل اختبار CAPTCHA لتأكيد حساباتهم content_retention: + danger_zone: منطقة خطرة preamble: التحكم في كيفية تخزين المحتوى الذي ينشئه المستخدم في ماستدون. title: الاحتفاظ بالمحتوى default_noindex: diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml index 6c89f4c6d4f189..56875078188301 100644 --- a/config/locales/devise.ia.yml +++ b/config/locales/devise.ia.yml @@ -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: diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml index fd7d7a08367fbf..86bd1ad9853ca2 100644 --- a/config/locales/doorkeeper.ia.yml +++ b/config/locales/doorkeeper.ia.yml @@ -17,6 +17,7 @@ ia: authorize: Autorisar cancel: Cancellar edit: Modificar + submit: Submitter confirmations: destroy: Es tu secur? edit: diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 308a5429a6da88..793819c597419e 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -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 diff --git a/config/locales/ia.yml b/config/locales/ia.yml index ff7b47c1febd59..85d7c0ed859592 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -106,6 +106,9 @@ ia: pending: Attende revision perform_full_suspension: Suspender previous_strikes: Previe admonitiones + previous_strikes_description_html: + one: Iste conto ha un admonition. + other: Iste conto ha %{count} admonitiones. promote: Promover protocol: Protocollo public: Public @@ -159,70 +162,187 @@ ia: undo_suspension: Disfacer le suspension unsilenced_msg: Le limite del conto de %{username} ha essite cancellate unsubscribe: Desubscriber + 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: action_types: + approve_appeal: Approbar appello + approve_user: Approbar usator + assigned_to_self_report: Assignar reporto change_email_user: Cambiar e-mail pro le usator change_role_user: Cambiar le rolo del usator confirm_user: Confirmar le usator create_account_warning: Crear un advertimento create_announcement: Crear annuncio + create_canonical_email_block: Crear blocada de email + create_custom_emoji: Crear emoticone personalisate + create_domain_allow: Crear permisso de dominio + create_domain_block: Crear blocada de dominio + create_email_domain_block: Crear blocada de dominio email create_ip_block: Crear un regula IP + create_unavailable_domain: Crear dominio indisponibile create_user_role: Crear un rolo + demote_user: Degradar usator destroy_announcement: Deler annuncio + destroy_canonical_email_block: Deler blocada de email + destroy_custom_emoji: Deler emoticone personalisate + destroy_domain_allow: Deler permisso de dominio + destroy_domain_block: Deler blocada de dominio + destroy_email_domain_block: Crear blocada de dominio email + destroy_instance: Purgar dominio destroy_ip_block: Deler le regula IP destroy_status: Deler le message destroy_unavailable_domain: Deler le dominio non disponibile + destroy_user_role: Destruer rolo disable_2fa_user: Disactivar 2FA disable_custom_emoji: Disactivar emoji personalisate + disable_sign_in_token_auth_user: Disactivar le authentication per testimonio via email pro usator disable_user: Disactivar le usator enable_custom_emoji: Activar emoji personalisate + enable_sign_in_token_auth_user: Activar le authentication per testimonio via email pro usator enable_user: Activar le usator + memorialize_account: Commemorar conto promote_user: Promover usator + reject_appeal: Rejectar appello + reject_user: Rejectar usator + remove_avatar_user: Remover avatar + reopen_report: Reaperir reporto resend_user: Reinviar message de confirmation reset_password_user: Reinitialisar contrasigno + resolve_report: Resolver reporto + sensitive_account: Marcar como sensibile le medios del conto silence_account: Limitar conto + suspend_account: Suspender conto + unassigned_report: Disassignar reporto unblock_email_account: Disblocar adresse de e-mail + unsensitive_account: Dismarcar como sensibile le medios del conto unsilence_account: Disfacer le limite de conto + unsuspend_account: Annullar suspension de conto update_announcement: Actualisar annuncio update_custom_emoji: Actualisar emoji personalisate + update_domain_block: Actualisar blocada de dominio update_ip_block: Actualisar le regula IP update_status: Actualisar le message update_user_role: Actualisar rolo actions: + approve_appeal_html: "%{name} approbava appello del decision de moderation de %{target}" + approve_user_html: "%{name} approbava inscription de %{target}" + assigned_to_self_report_html: "%{name} assignava reporto %{target} a se mesme" change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}" + change_role_user_html: "%{name} cambiava rolo de %{target}" + confirm_user_html: "%{name} confirmava le adresse email del usator %{target}" + create_account_warning_html: "%{name} inviava un advertimento a %{target}" create_announcement_html: "%{name} creava un nove annuncio %{target}" + create_canonical_email_block_html: "%{name} blocava email con le hash %{target}" + create_custom_emoji_html: "%{name} cargava nove emoticone %{target}" + create_domain_allow_html: "%{name} permitteva federation con dominio %{target}" + create_domain_block_html: "%{name} blocava dominio %{target}" + create_email_domain_block_html: "%{name} blocava dominio email %{target}" + create_ip_block_html: "%{name} creava regula pro IP %{target}" + create_unavailable_domain_html: "%{name} stoppava consignation a dominio %{target}" + 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 @@ -230,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 %{domain} 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 disblocar lo 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: "Limitar rendera le messages del contos de iste dominio invisibile pro tote persona que non los seque. Suspender removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio. Usa Necun 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. Presta attention a evitar de blocar le grande fornitores de e-mail. + 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: %{comment}' + 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: "Le recommendationes de sequimento adjuta le nove usatores a trovar rapidemente contento interessante. 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 %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio. + other: Si le livration al dominio falle durante %{count} dies differente sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab 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: @@ -305,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 @@ -315,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 repetitor de federation es un servitor intermediari que excambia grande volumines de messages public inter le servitores que se inscribe e publica a illo. Illo pote adjutar le servitores micre e medie a discoperir le contento del fediverso, sin requirer que le usatores local seque manualmente altere personas sur servitores distante. disable: Disactivar @@ -324,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 Spam es seligite. + actions_description_remote_html: Decide qual action prender pro resolver iste signalation. Isto affectara solmente le maniera in que tu 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 remover parte de messages de @%{acct}. Isto ira:' + mark_as_sensitive_html: 'Tu va marcar parte de messages de @%{acct} como sensibile. Isto ira:' + silence_html: 'Tu va limitar le conto de @%{acct}. Isto ira:' + suspend_html: 'Tu va limitar le conto de @%{acct}. 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 @%{acct} rendente le profilo e contento visibile solmente a qui ja lo seque o lo cerca manualmente + suspend_html: Suspender @%{acct}, rendente le profilo e contento inaccessibile e le interaction con illo impossibile + close_report: Marcar le signalation №%{id} como resolvite + close_reports_html: Marcar tote le signalationes contra @%{acct} como resolvite + delete_data_html: Deler le profilo e contento de @%{acct} in 30 dies excepte si le suspension es disfacite intertanto + preview_preamble_html: "@%{acct} recipera un advertimento con le sequente contento:" + record_strike_html: Registrar un admonition contra @%{acct} pro adjutar te a imponer sanctiones in caso de futur violationes de iste conto + send_email_html: Inviar un e-mail de advertimento a @%{acct} + 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 rolos de usator 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 rolo de base que affecta tote le usatores, 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. Facilita le visibilitate del regulas de tu servitor in un colpo de oculo forniente los in un lista a punctos. 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, isto pote render le processo de inscription multo minus accessibile a certe personas (particularmente personas con discapacitates). 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: @@ -391,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 cambiar tu adresse de e-mail 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: @@ -426,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: @@ -444,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 @@ -457,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 reimplaciar tu lista de blocadas per usque a %{total_items} contos proveniente de %{filename}. + domain_blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas de dominio per usque a %{total_items} dominios proveniente de %{filename}. + preambles: + blocking_html: Tu es sur le puncto de blocar usque a %{total_items} contos a partir de %{filename}. + domain_blocking_html: Tu es sur le puncto de blocar usque a %{total_items} dominios a partir de %{filename}. + 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 @@ -492,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 @@ -511,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) @@ -522,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 @@ -530,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: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9753ecd374be78..a4143be060bbae 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -990,6 +990,7 @@ ja: desc_html: この機能は hCaptcha による外部スクリプトを使用しますが、hCaptcha にはセキュリティとプライバシーの懸念が考えられます。また、CAPTCHAにより新規登録のアクセシビリティが大幅に損なわれる可能性があり、身体および精神障害者においては特に顕著です。以上の理由から、承認制や招待制を基本とするなど、代わりの登録手順を提供することを検討してください。 title: 新規ユーザーのアカウント確認にCHAPCHAを要求する content_retention: + danger_zone: 危険な操作 preamble: ユーザーが生成したコンテンツがどのように Mastodon に保存されるかを管理します。 title: コンテンツの保持 default_noindex: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 82fbde6ce1a211..3449f1d5d72399 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -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: "Federacijos perjungėjas tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius." + description_html: "Federacijos perdavimas – tai tarpinis serveris, kuris keičiasi dideliais viešų įrašų kiekiais tarp jį prenumeruojančių ir skelbiančių serverių. Jis gali padėti mažiems ir vidutiniams serveriams atrasti fediverse esantį turinį, 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, dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją. 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: "Tikrink, kaip nori, kad tavo profilis ir įrašai būtų randami. Į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: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 8e30a27b8b116b..0c2e6cfd6d782d 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -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, isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas). 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: diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 29e525b2c857cc..a1406b1ad9d2f9 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -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: مدة الاحتفاظ بالتخزين المؤقت للوسائط diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index f4668ccada1c38..9aedac15f3dbdd 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -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. diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index f72da822584770..73cb9ee36e8eb0 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -96,6 +96,7 @@ 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 @@ -105,6 +106,7 @@ en: enable_local_timeline: While enabling this feature will allow for interaction between like-minded users, it may also strengthen the internal atmosphere; since Mastodon is supposed to have a local timeline, we recommend annotating it in the server introduction if it is to be disabled. enable_public_unlisted_visibility: If true, your community maybe closed-minded. If turn it false, strongly recommend that you disclose that you have disabled this setting! enable_public_visibility: If disabled, public posts will be forcibly replaced with "Local public" or "Unlisted" posts. + 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. diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index b07ed8b8b5f6e6..841745dbc0e294 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -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: כאשר הרשמות דורשות אישור ידני, הפיכת טקסט ה"מדוע את/ה רוצה להצטרף" להכרחי במקום אופציונלי diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index 05a5fa5013d07a..c796cb5fac51e3 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -48,15 +48,96 @@ ia: email: Te sera inviate un email de confirmation header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar + irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite + locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate password: Usa al minus 8 characteres + phrase: Sera concordate ignorante majuscule/minuscule in le texto o avisos de contento de un message + scopes: A que APIs sera permittite acceder al application. Si tu selige un ambito de maxime nivello, tu non besonia de seliger los singulemente. + setting_aggregate_reblogs: Non monstra nove stimulos pro messages que ha essite recentemente stimulate (stimulos solo affice los novemente recipite) + setting_always_send_emails: Normalmente le avisos de email non sera inviate quando tu activemente usa Mastodon + setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic + setting_display_media_default: Celar le medios marcate como sensibile setting_display_media_hide_all: Sempre celar le medios setting_display_media_show_all: Sempre monstrar le medios + setting_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios + setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo username: Tu pote usar litteras, numeros e tractos de sublineamento + whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola + domain_allow: + domain: Iste dominio potera reportar datos ab iste servitor e le datos in ingresso ab illo sera processate e immagazinate + email_domain_block: + domain: Isto pote esser le nomine de dominio que apparera in le adresse email o le registration MX que illo usa. Illos sera verificate durante le inscription. + with_dns_records: Un tentativa sera facite pro resolver le registrationes de DNS del dominio date e le resultatos sera alsi blocate + featured_tag: + name: 'Ecce alcun del hashtags que tu usava le plus recentemente:' + filters: + action: Selige que action exequer quando un message concorda con le filtro + actions: + hide: Completemente celar le contento filtrate, comportar se como si illo non existerea + warn: Celar le contento filtrate detra un aviso citante le titulo del filtro + form_admin_settings: + activity_api_enabled: Numeros de messages localmente publicate, usatores active, e nove registrationes in gruppos septimanal + backups_retention_period: Le usatores pote generar archivos de lor messages pro discargar los plus tarde. Quando predefinite a un valor positive, iste archivos sera automaticamente delite de tu immagazinage post le specificate numero de dies. + bootstrap_timeline_accounts: Iste contos sera appunctate al summitate del recommendationes a sequer del nove usatores. + closed_registrations_message: Monstrate quando le inscriptiones es claudite + content_cache_retention_period: Tote messages de altere servitores (includite stimulos e responsas) sera delite post le specificate numero de dies, sin considerar alcun interaction de usator local con ille messages. Isto include messages ubi un usator local los ha marcate como marcapaginas o favoritos. Mentiones private inter usatores de differente instantias sera alsi perdite e impossibile a restaurar. Le uso de iste parametros es intendite pro specific instantias e infringe multe expectationes de usator quando implementate pro uso general. + custom_css: Tu pote applicar stilos personalisate sur le version de web de Mastodon. + mascot: Illo substitue le illustration in le interfacie web avantiate. + media_cache_retention_period: Le files multimedial de messages producite per usatores remote es in cache sur tu servitor. Quando predefinite a un valor positive, le medios sera delite post le numero de dies specificate. Le datos multimedial requirite post que illo es delite, sera re-discargate, si le contento original sera ancora disponibile. Per limitationes sur le frequentia con que le schedas de pre-visualisation de ligamine scruta le sitos de tertie partes, il es recommendate de predefinir iste valor a al minus 14 dies, o le schedas de pre-visualisation de ligamine non sera actualisate sur demanda ante ille tempore. + peers_api_enabled: Un lista de nomines de dominio que iste servitor ha incontrate in le fediverso. Nulle datos es includite ci re tu federation con un date servitor, justo que tu servitor lo cognosce. Isto es usate per servicios que collige statistica re le federation in senso general. + profile_directory: Le directorio de profilo lista tote le usatores qui ha optate pro esser detectabile. + require_invite_text: Quando le inscriptiones require approbation manual, rende obligatori, plus tosto que optional, le entrata de texto “Perque vole tu junger te?” + 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: @@ -67,9 +148,17 @@ 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 types: disable: Gelar @@ -77,35 +166,72 @@ 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 + context: Contextos del filtro current_password: Contrasigno actual + data: Datos display_name: Nomine a monstrar email: Adresse de e-mail + expires_in: Expira post + fields: Campos extra + 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 + note: Bio + otp_attempt: Codice a duo factores 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 title: Titulo + type: Importar le typo 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: @@ -113,51 +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 diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index dde97e2475a5cc..1aa88e631694b2 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -103,14 +103,17 @@ ja: warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します form_admin_settings: activity_api_enabled: 週単位でローカルで公開された投稿数、アクティブユーザー数、新規登録者数を表示します + backups_retention_period: ユーザーには、後でダウンロードするために投稿のアーカイブを生成する機能があります。正の値に設定すると、これらのアーカイブは指定された日数後に自動的にストレージから削除されます。 bootstrap_timeline_accounts: これらのアカウントは、新しいユーザー向けのおすすめユーザーの一番上にピン留めされます。 closed_registrations_message: アカウント作成を停止している時に表示されます + content_cache_retention_period: 他のサーバーからのすべての投稿(ブーストや返信を含む)は、指定された日数が経過すると、ローカルユーザーとのやりとりに関係なく削除されます。これには、ローカルユーザーがブックマークやお気に入りとして登録した投稿も含まれます。異なるサーバーのユーザー間の非公開な変身も失われ、復元することは不可能です。この設定の使用は特別な目的のインスタンスのためのものであり、一般的な目的のサーバーで使用するした場合、多くのユーザーの期待を裏切ることになります。 custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。 delete_content_cache_without_reaction: この機能は現在、負荷に関する懸念があります。すべての投稿をブックマークするユーザーbotの出現も想定されます。特に大規模サーバーでは慎重に検討してください。 enable_local_timeline: 有効にすると気の合ったユーザー同士の交流が捗る反面、内輪の雰囲気が強くなるかもしれません。Mastodonはローカルタイムラインがあるものだと思われているので、無効にする場合はサーバー紹介での注記をおすすめします。 enable_public_unlisted_visibility: 有効にするとあなたのコミュニティは閉鎖的になるかもしれません。この設定はkmyblueの主要機能の1つであり、無効にする場合は概要などに記載することを強くおすすめします。 enable_public_visibility: 無効にすると公開投稿は強制的に「ローカル公開」または「非収載」に置き換えられます。 mascot: 上級者向けWebインターフェースのイラストを上書きします。 + media_cache_retention_period: リモートユーザーが投稿したメディアファイルは、あなたのサーバーにキャッシュされます。正の値を設定すると、メディアは指定した日数後に削除されます。削除後にメディアデータが要求された場合、ソースコンテンツがまだ利用可能であれば、再ダウンロードされます。リンクプレビューカードがサードパーティのサイトを更新する頻度に制限があるため、この値を少なくとも14日に設定することをお勧めします。 peers_api_enabled: このサーバーが Fediverse で遭遇したドメイン名のリストです。このサーバーが知っているだけで、特定のサーバーと連合しているかのデータは含まれません。これは一般的に Fediverse に関する統計情報を収集するサービスによって使用されます。 profile_directory: ディレクトリには、掲載する設定をしたすべてのユーザーが一覧表示されます。 receive_other_servers_emoji_reaction: 負荷の原因になります。人が少ない場合にのみ有効にすることをおすすめします。 @@ -360,6 +363,7 @@ ja: bootstrap_timeline_accounts: おすすめユーザーに常に表示するアカウント check_lts_version_only: 更新チェックの時、LTSバージョンのみ確認する closed_registrations_message: アカウント作成を停止している時のカスタムメッセージ + content_cache_retention_period: リモートコンテンツの保存期間 custom_css: カスタムCSS delete_content_cache_without_reaction: お気に入り・ブックマークされた投稿を削除対象から除外する enable_emoji_reaction: 絵文字リアクション機能を有効にする diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 3292c48289aca1..a26468894b9a33 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -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 diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index a6c93033801eb2..d545f2cd341cba 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -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 t’i 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 s’do 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 s’do 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 s’jepen 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 diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 3ab16bf69be35c..5e5c6f95491507 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -77,10 +77,13 @@ sv: warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik form_admin_settings: activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka + backups_retention_period: Användare har möjlighet att generera arkiv av sina inlägg för att ladda ned senare. När det sätts till ett positivt värde raderas dessa arkiv automatiskt från din lagring efter det angivna antalet dagar. bootstrap_timeline_accounts: Dessa konton kommer fästas högst upp i nya användares följrekommendationer. closed_registrations_message: Visas när nyregistreringar är avstängda + content_cache_retention_period: Alla inlägg från andra servrar (inklusive booster och svar) kommer att raderas efter det angivna antalet dagar, utan hänsyn till någon lokal användarinteraktion med dessa inlägg. Detta inkluderar inlägg där en lokal användare har markerat det som bokmärke eller favoriter. Privata omnämnanden mellan användare från olika instanser kommer också att gå förlorade och blir omöjliga att återställa. Användningen av denna inställning är avsedd för specialfall och bryter många användarförväntningar när de implementeras för allmänt bruk. custom_css: Du kan använda anpassade stilar på webbversionen av Mastodon. mascot: Åsidosätter illustrationen i det avancerade webbgränssnittet. + media_cache_retention_period: Mediafiler från inlägg som gjorts av fjärranvändare cachas på din server. När inställd på ett positivt värde kommer media att raderas efter det angivna antalet dagar. Om mediadatat begärs efter att det har raderats, kommer det att laddas ned igen om källinnehållet fortfarande är tillgängligt. På grund av begränsningar för hur ofta förhandsgranskningskort för länkar hämtas från tredjepartswebbplatser, rekommenderas det att ange detta värde till minst 14 dagar, annars kommer förhandsgranskningskorten inte att uppdateras på begäran före den tiden. peers_api_enabled: En lista över domänen den här servern har stött på i fediversum. Ingen data inkluderas om du har federerat med servern, bara att din server känner till den. Detta används av tjänster som samlar statistik om federering i allmänhet. profile_directory: Profilkatalogen visar alla användare som har samtyckt till att bli upptäckbara. require_invite_text: Gör fältet "Varför vill du gå med?" obligatoriskt när nyregistreringar kräver manuellt godkännande @@ -240,6 +243,7 @@ sv: backups_retention_period: Lagringsperiod för användararkivet bootstrap_timeline_accounts: Rekommendera alltid dessa konton till nya användare closed_registrations_message: Anpassat meddelande när nyregistreringar inte är tillgängliga + content_cache_retention_period: Förvaringsperiod för fjärrinnehåll custom_css: Anpassad CSS mascot: Anpassad maskot (tekniskt arv) media_cache_retention_period: Tid för bibehållande av mediecache diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index bfc2d2e6b6289d..e68642c2f636dc 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -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: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 400059770b76c6..78e7bdb25eafc1 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -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. diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ff23e648414095..6c26511ad6968a 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -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 to lahko nekaterim ljudem (posebno invalidom) občutno oteži dostopnost registracijskega postopka. 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: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index dcacb46bf99819..8319cfcaecac48 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -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, 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). 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: diff --git a/config/locales/th.yml b/config/locales/th.yml index 0d7483d79ae9b7..8a001d875581c5 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1837,6 +1837,7 @@ th: explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน feature_action: เรียนรู้เพิ่มเติม feature_audience: Mastodon มีความพิเศษที่ให้คุณจัดการผู้รับสารของคุณได้โดยไม่มีตัวกลาง นอกจากนี้ การติดตั้ง Mastodon บนโครงสร้างพื้นฐานของคุณจะทำให้คุณสามารถติดตาม (และติดตามโดย) เซิร์ฟเวอร์ Mastodon แห่งไหนก็ได้ที่ทำงานอยู่ โดยไม่มีใครสามารถควบคุมได้นอกจากคุณ + feature_audience_title: สร้างผู้ชมของคุณด้วยความมั่นใจ follow_action: ติดตาม follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ follow_title: ปรับแต่งฟีดหน้าแรกของคุณ diff --git a/config/routes.rb b/config/routes.rb index 410899c011093d..c86fcc82ba1ba0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,6 +69,7 @@ def redirect_with_vary(path) 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 diff --git a/config/routes/api.rb b/config/routes/api.rb index 85021f75988466..07332a44983850 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -6,7 +6,7 @@ # 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 @@ -194,7 +194,7 @@ 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 diff --git a/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb new file mode 100644 index 00000000000000..f8223f9c9321d0 --- /dev/null +++ b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index b070ac1eee2acc..b5d2f9c977cc98 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -168,11 +168,9 @@ t.string "url" t.string "avatar_file_name" t.string "avatar_content_type" - t.integer "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.datetime "header_updated_at", precision: nil t.string "avatar_remote_url" t.boolean "locked", default: false, null: false @@ -206,6 +204,8 @@ t.boolean "indexable", default: false, null: false t.jsonb "master_settings" t.boolean "remote_pending", default: false, null: false + t.bigint "avatar_file_size" + t.bigint "header_file_size" t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["domain", "id"], name: "index_accounts_on_domain_and_id" @@ -491,7 +491,6 @@ t.string "domain" t.string "image_file_name" t.string "image_content_type" - t.integer "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 @@ -506,6 +505,7 @@ t.jsonb "aliases" t.boolean "is_sensitive", default: false, null: false t.string "license" + t.bigint "image_file_size" t.index ["shortcode", "domain"], name: "index_custom_emojis_on_shortcode_and_domain", unique: true end @@ -732,10 +732,10 @@ t.datetime "updated_at", precision: nil, null: false t.string "data_file_name" t.string "data_content_type" - t.integer "data_file_size" t.datetime "data_updated_at", precision: nil t.bigint "account_id", null: false t.boolean "overwrite", default: false, null: false + t.bigint "data_file_size" end create_table "instance_infos", force: :cascade do |t| @@ -829,7 +829,6 @@ t.bigint "status_id" t.string "file_file_name" t.string "file_content_type" - t.integer "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 @@ -845,9 +844,10 @@ t.integer "file_storage_schema_version" t.string "thumbnail_file_name" t.string "thumbnail_content_type" - t.integer "thumbnail_file_size" t.datetime "thumbnail_updated_at", precision: nil t.string "thumbnail_remote_url" + t.bigint "file_file_size" + t.bigint "thumbnail_file_size" t.index ["account_id", "status_id"], name: "index_media_attachments_on_account_id_and_status_id", order: { status_id: :desc } t.index ["id"], name: "index_media_attachments_vacuum", where: "((file_file_name IS NOT NULL) AND ((remote_url)::text <> ''::text))" t.index ["scheduled_status_id"], name: "index_media_attachments_on_scheduled_status_id", where: "(scheduled_status_id IS NOT NULL)" @@ -1153,7 +1153,6 @@ t.string "description", default: "", null: false t.string "image_file_name" t.string "image_content_type" - t.integer "image_file_size" t.datetime "image_updated_at", precision: nil t.integer "type", default: 0, null: false t.text "html", default: "", null: false @@ -1175,6 +1174,7 @@ t.integer "link_type" t.datetime "published_at" t.string "image_description", default: "", null: false + t.bigint "image_file_size" t.index ["id"], name: "index_preview_cards_vacuum", where: "((image_file_name IS NOT NULL) AND ((image_file_name)::text <> ''::text))" t.index ["url"], name: "index_preview_cards_on_url", unique: true end @@ -1312,12 +1312,12 @@ t.string "var", default: "", null: false t.string "file_file_name" t.string "file_content_type" - t.integer "file_file_size" t.datetime "file_updated_at", precision: nil t.json "meta" t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.string "blurhash" + t.bigint "file_file_size" t.index ["var"], name: "index_site_uploads_on_var", unique: true end diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index 4208c2ae4b5bca..07de087766d8eb 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -1,6 +1,22 @@ # frozen_string_literal: true +# We are providing our own task with our own format +Rake::Task['db:encryption:init'].clear + namespace :db do + namespace :encryption do + desc 'Generate a set of keys for configuring Active Record encryption in a given environment' + task init: :environment do + puts <<~MSG + Add these environment variables to your Mastodon environment:#{' '} + + ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=#{SecureRandom.alphanumeric(32)} + ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=#{SecureRandom.alphanumeric(32)} + ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=#{SecureRandom.alphanumeric(32)} + MSG + end + end + namespace :migrate do desc 'Setup the db or migrate depending on state of db' task setup: :environment do diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 35d72c867d82f9..616ef5e7e8fadf 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -289,4 +289,28 @@ def current_theme = 'default' 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 diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb index a885640ce0c603..8f210579d000ac 100644 --- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -127,7 +127,7 @@ 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 diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index e855bb7ce547d2..18a62e451cc98f 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -380,6 +380,48 @@ 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) } diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 4c2bdd52f4b579..7799afe44b2708 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -36,6 +36,10 @@ 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 diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb index f7131e232bdf71..9cd6e8abfb5980 100644 --- a/spec/requests/api/v1/accounts_spec.rb +++ b/spec/requests/api/v1/accounts_spec.rb @@ -8,6 +8,22 @@ 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) } diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index aa94d79f510e9d..1bf0ecaab96868 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -9,6 +9,22 @@ 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 diff --git a/spec/requests/well_known/oauth_metadata_spec.rb b/spec/requests/well_known/oauth_metadata_spec.rb new file mode 100644 index 00000000000000..deef189ac909f3 --- /dev/null +++ b/spec/requests/well_known/oauth_metadata_spec.rb @@ -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 diff --git a/streaming/package.json b/streaming/package.json index c4dcccf1f57acc..f08d2a4c2d1e86 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -25,7 +25,7 @@ "pg": "^8.5.0", "pg-connection-string": "^2.6.0", "pino": "^9.0.0", - "pino-http": "^9.0.0", + "pino-http": "^10.0.0", "prom-client": "^15.0.0", "uuid": "^9.0.0", "ws": "^8.12.1" diff --git a/yarn.lock b/yarn.lock index cb63888ca7733e..cfbe3500db8f82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1551,13 +1551,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^1.0.9": - version: 1.0.9 - resolution: "@csstools/cascade-layer-name-parser@npm:1.0.9" +"@csstools/cascade-layer-name-parser@npm:^1.0.11": + version: 1.0.11 + resolution: "@csstools/cascade-layer-name-parser@npm:1.0.11" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/f6e28c7cdeca44711288400cf20de9ebc4db71eafa39ca9a6b3e9f5d3295ba636dd986aac9fcb9e6171c84d436712d68ced923504d78d5fda0601c880eb352fe + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/52ac8369877c8072ff5c111f656bd87e9a2a4b9e44e48fe005c26faeb6cffd83bfe2f463f4f385a2ae5cfe1f82bbf95d26ddaabca18b66c6b657c4fe1520fb43 languageName: node linkType: hard @@ -1568,52 +1568,52 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^1.2.0": - version: 1.2.0 - resolution: "@csstools/css-calc@npm:1.2.0" +"@csstools/css-calc@npm:^1.2.2": + version: 1.2.2 + resolution: "@csstools/css-calc@npm:1.2.2" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/ef12dc08ccdb9903e5cb24d81b469080b94c79123415f62f707196a85c53420b7729be608930314c7a9404f50c832fe5256f647c0567d1c825079cb77f6a8719 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/6032b482764a11c1b882d7502928950ab11760044fa7a2c23ecee802002902f6ea8fca045ee2919302af5a5c399e7baa9f68dff001ac6246ac7fef48fb3f6df7 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/css-color-parser@npm:2.0.0" +"@csstools/css-color-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/css-color-parser@npm:2.0.2" dependencies: "@csstools/color-helpers": "npm:^4.2.0" - "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-calc": "npm:^1.2.2" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/295f844a194dec4f51439e8760dbb4a142901b8b60cd9d676a62c15c0e8408eb7bcdcbb40be52cdd5f67d020e655a1c3267a28923cfc4f6bae2b74aa48fce426 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/c5ae4ad78745e425dce56da9f1ab053fb4f7963399735df3303305b32123bed0b2237689c2e7e99da2c62387e3226c12ea85e70e275c4027c7507e4ac929bffa languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.6.1": - version: 2.6.1 - resolution: "@csstools/css-parser-algorithms@npm:2.6.1" +"@csstools/css-parser-algorithms@npm:^2.6.1, @csstools/css-parser-algorithms@npm:^2.6.3": + version: 2.6.3 + resolution: "@csstools/css-parser-algorithms@npm:2.6.3" peerDependencies: - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/2c60377c4ffc96bbeb962cab19c09fccbcc834785928747219ed3bd916a34e52977393935d1d36501403f3f95ff59d358dd741d1dddcdaf9564ab36d73926aa6 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/6648fda75a1c08096320fb5c04fd13656a0168de13584d2795547fecfb26c2c7d8b3b1fb79ba7aa758714851e98bfbec20d89e28697f999f41f91133eafe4207 languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.4": - version: 2.2.4 - resolution: "@csstools/css-tokenizer@npm:2.2.4" - checksum: 10c0/23997db5874514f4b951ebd215e1e6cc8baf03adf9a35fc6fd028b84cb52aa2dc053860722108c09859a9b37b455f62b84181fe15539cd37797ea699b9ff85f0 +"@csstools/css-tokenizer@npm:^2.2.4, @csstools/css-tokenizer@npm:^2.3.1": + version: 2.3.1 + resolution: "@csstools/css-tokenizer@npm:2.3.1" + checksum: 10c0/fed6619fb5108e109d4dd10b0e967035a92793bae8fb84544e1342058b6df4e306d9d075623e2201fe88831b1ada797aea3546a8d12229d2d81cd7a5dfee4444 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.9": - version: 2.1.9 - resolution: "@csstools/media-query-list-parser@npm:2.1.9" +"@csstools/media-query-list-parser@npm:^2.1.11, @csstools/media-query-list-parser@npm:^2.1.9": + version: 2.1.11 + resolution: "@csstools/media-query-list-parser@npm:2.1.11" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/602e9b5631928c078e670018df20b959bfb8e42ea11024d5218f1604e5ef94e070a74934a919ccbff3713e506d99096057947fa0c2e4768939f7b22479553534 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/9bcd99f7d28ae3cdaba73fbbfef571b0393dd4e841f522cc796fe5161744f17e327ba1713dad3c481626fade1357c55890e3d365177abed50e857b69130a9be5 languageName: node linkType: hard @@ -1629,46 +1629,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^3.0.14": - version: 3.0.14 - resolution: "@csstools/postcss-color-function@npm:3.0.14" +"@csstools/postcss-color-function@npm:^3.0.16": + version: 3.0.16 + resolution: "@csstools/postcss-color-function@npm:3.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/81592b0eb3ad7022313ecafd028908b167de42acc6765f708c9b10631f86123c2b803aca27378f021c2b3dab8cc47770c0364fe5a3c1e18ec006deaf72e17c38 + checksum: 10c0/41756a4601a3f1086290dab6ca92b54e201bd94637b54b439c66a04fd628a14e2a0bd1452ad294d2981e2f4bb306758fa5f44639b1c4332320435050749aa487 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^2.0.14": - version: 2.0.14 - resolution: "@csstools/postcss-color-mix-function@npm:2.0.14" +"@csstools/postcss-color-mix-function@npm:^2.0.16": + version: 2.0.16 + resolution: "@csstools/postcss-color-mix-function@npm:2.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1dd3c63bbbbb9d3094699f169bbb9d26e86a49accb5f9abaa2441b54cb8a6f4cd332409666684a275eca867e3ef0ea3f6eafdf9fb87f2cbfa17c6296fb1ed4d7 + checksum: 10c0/70cd5b291dd615e20e4475517bf0027c90c433241397a66866f89acedb12cb91f45552a162bdd1000636ec56f7d6a099b65e44fe100fd03228fc65f17cfae285 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^1.0.5": - version: 1.0.5 - resolution: "@csstools/postcss-exponential-functions@npm:1.0.5" +"@csstools/postcss-exponential-functions@npm:^1.0.7": + version: 1.0.7 + resolution: "@csstools/postcss-exponential-functions@npm:1.0.7" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/45e18ca9025597da29cbef214cef39fcabef1e169bbb1f5c015de5f677e2927a1c3b8ae18558d815701e8d3e64db1043412a222af35036c92c25011a0e1e027d + checksum: 10c0/2079c81c3437686ef432d88502fa3a13bf8a27b7af105b4c6c2eb8e779f14adc8967a5a3ed03271ab919eeaf999fc4489fe4b37d32a8f61ab3212439517bddcc languageName: node linkType: hard @@ -1684,46 +1684,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^1.0.7": - version: 1.0.7 - resolution: "@csstools/postcss-gamut-mapping@npm:1.0.7" +"@csstools/postcss-gamut-mapping@npm:^1.0.9": + version: 1.0.9 + resolution: "@csstools/postcss-gamut-mapping@npm:1.0.9" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/7b349db44fcd697d57172ab63b7a02a56c0b49bce17e48cb72aa0fa246bd2be83fe693c507fd400a9ed83597a711d18ece9319ee3af8000c8fd3a2761e228a11 + checksum: 10c0/412ae1410f3fce240401576441637c2c4e71d1a54153ac9b7a991b3de7519c253d03e10db78b09872eb10b0776d7f960b442779efabc11332b5be6672163c836 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^4.0.15": - version: 4.0.15 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.15" +"@csstools/postcss-gradients-interpolation-method@npm:^4.0.17": + version: 4.0.17 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.17" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/dc0bbf6a4787d5ad3f9fe268dfa9776ecdc25b6cc0a49486bf53238341a339647f1e475240ead3cec1f4af9a237f6518ace015103e90ce8afe4d44539a566e04 + checksum: 10c0/465ac42856ca1a57aa2b9ea41ede31d9e2bcf2fe84345dbc182ae41f463069a0cfd41041b834b5133108c702cd85ecb8636b51b0b88fff8a221628639b59f386 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^3.0.13": - version: 3.0.13 - resolution: "@csstools/postcss-hwb-function@npm:3.0.13" +"@csstools/postcss-hwb-function@npm:^3.0.15": + version: 3.0.15 + resolution: "@csstools/postcss-hwb-function@npm:3.0.15" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/684c3d408ceb027e7276c4f25c9a17ef9bd52f0948268cf58b5184097e9b71f5364a41b42bab44691938c6fadffcba0c8e66f809a339a8b282f4a432d32d00ef + checksum: 10c0/fdfaeefbab1008ab1e4a98a2b45cc3db002b2724c404fa0600954b411a68b1fa4028286250bf9898eed10fa80c44e4d6b4e55f1aca073c3dfce8198a0aaedf3f languageName: node linkType: hard @@ -1761,17 +1761,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^1.0.3": - version: 1.0.3 - resolution: "@csstools/postcss-light-dark-function@npm:1.0.3" +"@csstools/postcss-light-dark-function@npm:^1.0.5": + version: 1.0.5 + resolution: "@csstools/postcss-light-dark-function@npm:1.0.5" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/99a1b72aba08a6fa5c7271d42f4459d86f001fe83f533c0ed3d21556f53ee227f65f94cda1feee1aa910890fc42482f15a4dfb3edbc7afdad828ce8897d0c52b + checksum: 10c0/4fbeda98372d0da25d3ed87da09903c9a0a5d0b8c13cc9de82a98acce4a8f8367e5ba33bfc25c2534d10f2b1db9d5b4278df4ebab755e27ef2b03a95e0ebe264 languageName: node linkType: hard @@ -1813,42 +1813,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.7" +"@csstools/postcss-logical-viewport-units@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.9" dependencies: - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/9493f5395ccfe88d0d0740e54f77f0c844afc79b164068fdd907aed75004b4252ba9423dea22194ad98114dd1a2e77c14e307604305d926425251d4ab3013949 + checksum: 10c0/25b01e36b08c571806d09046be63582dbebf97a4612df59be405fa8a92e6eebcd4e768ad7fbe53b0b8739d6ab04d56957964fb04d6a3ea129fc5f72e6d0adf95 languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^1.1.4": - version: 1.1.4 - resolution: "@csstools/postcss-media-minmax@npm:1.1.4" +"@csstools/postcss-media-minmax@npm:^1.1.6": + version: 1.1.6 + resolution: "@csstools/postcss-media-minmax@npm:1.1.6" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/620bb85065195c72cf9c0abe9af822f9feeaf919b53bfd47ec09f75b644cb544bd967b09278c48f829348808b34c552718c1aa3eb5342e2dec983e22eb63b0a0 + checksum: 10c0/2cbfb3728a232c655d82f63d5ac7da36876d14e5fee5d62a0738efed40c58f20ef11f600395ade24d5063d750e8e093251dd93cc361f782b5a6c0e0f80288f51 languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.7" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.9" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/d5d52a744f9a9466d86a506aab430811778dfa681d3f52f5486ee9b686390919eaae9ad356b84bc782d263227f35913ef68d9a6c3eefcfc38d8ffaccc9b94de0 + checksum: 10c0/d431d2900a7177c938d9dc2d5bdf3c1930758adc214cc72f94b34e6bbd02fd917c200dc81482db515519c97d4f1e766ba3200f3ec9b55081887f2f8111f68e20 languageName: node linkType: hard @@ -1875,18 +1875,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^3.0.14": - version: 3.0.14 - resolution: "@csstools/postcss-oklab-function@npm:3.0.14" +"@csstools/postcss-oklab-function@npm:^3.0.16": + version: 3.0.16 + resolution: "@csstools/postcss-oklab-function@npm:3.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/dfe0b12c2256dded995c64825fac9507be9c747d776cfa09eeefff6dee0efa5eed6a92a1ecba39069a751a7fc3cefa8891c34209a7a3c7ea33d356c95d01a02d + checksum: 10c0/9c67ee5f51116df16ab6baffa1b3c6c7aa93d53b836f421125ae8824075bd3cfaa1a93594466de0ac935c89c4fc8171e80974e1a15bafa23ea864e4cf1f1c1f2 languageName: node linkType: hard @@ -1901,18 +1901,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^2.0.14": - version: 2.0.14 - resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.14" +"@csstools/postcss-relative-color-syntax@npm:^2.0.16": + version: 2.0.16 + resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/64cd5f8054e4403f4e25ed11a5b9d157098af639dbc30ac25b94660b3af489c0bacc49fc439cba1ccceefa4caa5831a913e3d1d889a9796cc6fbf3902c7c31c1 + checksum: 10c0/cdc965706212dcbc03394f55c79a0ad043d1e0174059c4d0d90e4267fe8e6fd9eef7cfed4f5bbc1f8e89c225c1c042ae792e115bba198eb2daae763d65f44679 languageName: node linkType: hard @@ -1927,16 +1927,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^3.0.6": - version: 3.0.6 - resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.6" +"@csstools/postcss-stepped-value-functions@npm:^3.0.8": + version: 3.0.8 + resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.8" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/a198aedc4fffe88909c92bfaa36031e6803e739a2578ba4a81c01b9f1525e6a6876d6ffacbbe21701298598dcade8b2ac8423d8ab0fc5d9f4ba86ed60f53cbca + checksum: 10c0/2be66aa769808245137be8ff14308aa17c3a0d75433f6fd6789114966a78c365dbf173d087e7ff5bc80118c75be2ff740baab83ed39fc0671980f6217779956b languageName: node linkType: hard @@ -1952,16 +1952,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^3.0.6": - version: 3.0.6 - resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.6" +"@csstools/postcss-trigonometric-functions@npm:^3.0.8": + version: 3.0.8 + resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.8" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/4b484af853d9eb59a4a4b1c063fcf48e2658bb2d6930dfab1d79e676986534687e6440b8cdcd2731ddcb7726537f4ed484208a2b80ef2c9359053762ba35e5e7 + checksum: 10c0/aeed8d1026f4a5cb7afafbadd739af84291d5bfcbcdef2f79b77174f003d0cd0c7f9deb3fe0b9377efab37ce9bb17a2499efd4af8211f5ff9eb01b878b0b62b3 languageName: node linkType: hard @@ -2212,16 +2212,37 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.9 - resolution: "@formatjs/cli@npm:6.2.9" - peerDependencies: + version: 6.2.10 + resolution: "@formatjs/cli@npm:6.2.10" + peerDependencies: + "@glimmer/env": ^0.1.7 + "@glimmer/reference": ^0.91.1 + "@glimmer/syntax": ^0.91.1 + "@glimmer/validator": ^0.91.1 + "@vue/compiler-core": ^3.4.0 + content-tag: ^2.0.1 + ember-template-recast: ^6.1.4 vue: ^3.4.0 peerDependenciesMeta: + "@glimmer/env": + optional: true + "@glimmer/reference": + optional: true + "@glimmer/syntax": + optional: true + "@glimmer/validator": + optional: true + "@vue/compiler-core": + optional: true + content-tag: + optional: true + ember-template-recast: + optional: true vue: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/498383bcdca7f8f8a748c1151be17392f71eb1861f6a23bc714280533167cba7cdc35a470a380113f6111236e721ff43cbee7b084939dac67b6a5d9b04c0587c + checksum: 10c0/34b1b0b3be25d945111c1f57913f50da7308ecd05501a27eaca210a774eb50c616b5706ba796d37ffa223ac4c5cddd5f36fe0ca8d31ad8c8ade79cdd497ccfb9 languageName: node linkType: hard @@ -2307,23 +2328,23 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.10.1": - version: 2.10.1 - resolution: "@formatjs/intl@npm:2.10.1" +"@formatjs/intl@npm:2.10.2": + version: 2.10.2 + resolution: "@formatjs/intl@npm:2.10.2" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" "@formatjs/icu-messageformat-parser": "npm:2.7.6" "@formatjs/intl-displaynames": "npm:6.6.6" "@formatjs/intl-listformat": "npm:7.5.5" - intl-messageformat: "npm:10.5.11" + intl-messageformat: "npm:10.5.12" tslib: "npm:^2.4.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/24eee77382d1efd226aee7590228d3ae80f66a8547a65295f8028986b15b6abbfea3e380f4a338ece0e841e1db6f36554ca48124d84c0830382e3a9d395b5d75 + checksum: 10c0/20df407e141055e8c7b2605c06e952b643be7ea01d992862e13fc623ca2db034069744eae2be16655bf7888b3add1bfc2653fd0a08bcfdb67fb9b72a306f7718 languageName: node linkType: hard @@ -2925,7 +2946,7 @@ __metadata: pg: "npm:^8.5.0" pg-connection-string: "npm:^2.6.0" pino: "npm:^9.0.0" - pino-http: "npm:^9.0.0" + pino-http: "npm:^10.0.0" pino-pretty: "npm:^11.0.0" prom-client: "npm:^15.0.0" typescript: "npm:^5.0.4" @@ -3353,8 +3374,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.4.2 - resolution: "@testing-library/jest-dom@npm:6.4.2" + version: 6.4.5 + resolution: "@testing-library/jest-dom@npm:6.4.5" dependencies: "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" @@ -3362,7 +3383,7 @@ __metadata: chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" dom-accessibility-api: "npm:^0.6.3" - lodash: "npm:^4.17.15" + lodash: "npm:^4.17.21" redent: "npm:^3.0.0" peerDependencies: "@jest/globals": ">= 28" @@ -3381,21 +3402,25 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc + checksum: 10c0/4cfdd44e2abab2b9d399c47cbfe686729bb65160d7df0f9e2329aaaea7702f6e852a9eefb29b468f00c1e5a5274b684f8cac76959d33299dfa909ba007ea191d languageName: node linkType: hard "@testing-library/react@npm:^15.0.0": - version: 15.0.5 - resolution: "@testing-library/react@npm:15.0.5" + version: 15.0.6 + resolution: "@testing-library/react@npm:15.0.6" dependencies: "@babel/runtime": "npm:^7.12.5" "@testing-library/dom": "npm:^10.0.0" "@types/react-dom": "npm:^18.0.0" peerDependencies: + "@types/react": ^18.0.0 react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/8759cc8e7e6b4d8964f151d8872ea3c91b6ef6d8fb3b9116fae53350b9a6b29e5ad45b18408c22525924d050263f7ea77cd17ca803918759f22a760f68a42227 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/3705a2272f929f2f848f5d7e6ac9829bf7ecc1725a35733ffae7e7a261d4bdab470b080558e8544edb1f9ba25db9fbc4232527df9b4ec6ab6ae4462a902a7f95 languageName: node linkType: hard @@ -3696,9 +3721,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.0 - resolution: "@types/lodash@npm:4.17.0" - checksum: 10c0/4c5b41c9a6c41e2c05d08499e96f7940bcf194dcfa84356235b630da920c2a5e05f193618cea76006719bec61c76617dff02defa9d29934f9f6a76a49291bd8f + version: 4.17.1 + resolution: "@types/lodash@npm:4.17.1" + checksum: 10c0/af2ad8a3c8d7deb170a7ec6e18afc5ae8980576e5f7fe798d8a95a1df7222c15bdf967a25a35879f575a3b64743de00145710ee461a0051e055e94e4fe253f45 languageName: node linkType: hard @@ -3754,13 +3779,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.5 - resolution: "@types/pg@npm:8.11.5" + version: 8.11.6 + resolution: "@types/pg@npm:8.11.6" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/d64d183bee2df96cd0558231190ff629558e8c0fd3203b880f48a7d34b1eaea528d20c09b57b19c0939f369136e6c6941533592eadd71174be78d1ec0ca5e60e + checksum: 10c0/e68e057d9500b25cd776f4fcc547b4880c4f3b0c7b6e03c8a0e5e262b6189dd7a00f4edc8937ffc55a9f6a136a78d7e4a9b6bbe6a46122a95c134f7be66f6842 languageName: node linkType: hard @@ -3814,11 +3839,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.4": - version: 18.2.25 - resolution: "@types/react-dom@npm:18.2.25" + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" dependencies: "@types/react": "npm:*" - checksum: 10c0/87604407eca6884c5b4d4657cb511dc5ba28ea1cfa5d0ce1fc2d659a7ad1b64ae85dcda60e3f010641f9a52a6a60dfcaa6be3b0d0de9d624475052a13dae01f4 + checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b languageName: node linkType: hard @@ -3890,11 +3915,11 @@ __metadata: linkType: hard "@types/react-test-renderer@npm:^18.0.0": - version: 18.0.7 - resolution: "@types/react-test-renderer@npm:18.0.7" + version: 18.3.0 + resolution: "@types/react-test-renderer@npm:18.3.0" dependencies: "@types/react": "npm:*" - checksum: 10c0/45cbe963354acee2ab090979d856763c84f59ef7b63477d1fef5d0fd52760b69aa67bbd205fbd3bd36264620fce72c8e407735a9f2009c40ca50da59b0058c34 + checksum: 10c0/3c9748be52e8e659e7adf91dea6939486463264e6f633bf21c4cb116de18af7bef0595568a1e588160420b2f65289473075dda1cb417c2875df8cf7a09f5d913 languageName: node linkType: hard @@ -3917,12 +3942,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.2.79 - resolution: "@types/react@npm:18.2.79" + version: 18.3.1 + resolution: "@types/react@npm:18.3.1" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a + checksum: 10c0/18d856c12a4ec93f3cda2d58ef3d77a9480818afd3af895f812896fb82cfca1f35a692ab1add4ce826a4eb58a071624c7d1c8c6c4ccfb81c100d2916dc607614 languageName: node linkType: hard @@ -4101,14 +4126,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.7.1 - resolution: "@typescript-eslint/eslint-plugin@npm:7.7.1" + version: 7.8.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.8.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/type-utils": "npm:7.7.1" - "@typescript-eslint/utils": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/type-utils": "npm:7.8.0" + "@typescript-eslint/utils": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" @@ -4121,25 +4146,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/11a085240e7daf4bdeb011aa53ac7cfeea6263c60d53607823f5c314eb5c9d559b28fce0d6686acb9702ee3d0cb0406534fafae61163e5a903eaf818c48194ad + checksum: 10c0/37ca22620d1834ff0baa28fa4b8fd92039a3903cb95748353de32d56bae2a81ce50d1bbaed27487eebc884e0a0f9387fcb0f1647593e4e6df5111ef674afa9f0 languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.7.1 - resolution: "@typescript-eslint/parser@npm:7.7.1" + version: 7.8.0 + resolution: "@typescript-eslint/parser@npm:7.8.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/typescript-estree": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/typescript-estree": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ace43eeb8123bbee61e936650e1d57a2cf70f2030870c6dcad8602fce3f7cdf2cce350121dbbc66cffd60bac36652f426a1c5293c45ed28998b90cd95673b5c9 + checksum: 10c0/0dd994c1b31b810c25e1b755b8d352debb7bf21a31f9a91acaec34acf4e471320bcceaa67cf64c110c0b8f5fac10a037dbabac6ec423e17adf037e59a7bce9c1 languageName: node linkType: hard @@ -4153,22 +4178,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/scope-manager@npm:7.7.1" +"@typescript-eslint/scope-manager@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/scope-manager@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" - checksum: 10c0/4032da8fce8922044a6b659c8435ba203377778d5b7de6a5572c1172f2e3cf8ddd890a0f9e083c5d5315a9c2dba323707528ee4ad3cc1be2bd334de2527ef5cb + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" + checksum: 10c0/c253b98e96d4bf0375f473ca2c4d081726f1fd926cdfa65ee14c9ee99cca8eddb763b2d238ac365daa7246bef21b0af38180d04e56e9df7443c0e6f8474d097c languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/type-utils@npm:7.7.1" +"@typescript-eslint/type-utils@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/type-utils@npm:7.8.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.7.1" - "@typescript-eslint/utils": "npm:7.7.1" + "@typescript-eslint/typescript-estree": "npm:7.8.0" + "@typescript-eslint/utils": "npm:7.8.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: @@ -4176,7 +4201,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/bd083c4106e207aa8c2a71251eca52d23c7ea905399b8c62004f3bb1e85b9c88d601db9dcecae88beef0f8362d53450bb2721aab353ee731c1665496fea3fbda + checksum: 10c0/00f6315626b64f7dbc1f7fba6f365321bb8d34141ed77545b2a07970e59a81dbdf768c1e024225ea00953750d74409ddd8a16782fc4a39261e507c04192dacab languageName: node linkType: hard @@ -4187,10 +4212,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/types@npm:7.7.1" - checksum: 10c0/7d240503d9d0b12d68c8204167690609f02ededb77dcb035c1c8b932da08cf43553829c29a5f7889824a7337463c300343bc5abe532479726d4c83443a7e2704 +"@typescript-eslint/types@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/types@npm:7.8.0" + checksum: 10c0/b2fdbfc21957bfa46f7d8809b607ad8c8b67c51821d899064d09392edc12f28b2318a044f0cd5d523d782e84e8f0558778877944964cf38e139f88790cf9d466 languageName: node linkType: hard @@ -4213,12 +4238,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/typescript-estree@npm:7.7.1" +"@typescript-eslint/typescript-estree@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -4228,24 +4253,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/c6b32bd96fd13b9da0a30de01935066f7505f6214f5759e3cd019f7d1852f7bf19358765f62e51de72be47647656aa0e8f07ac0ab316c4149a4e6bd1dd12cbb6 + checksum: 10c0/1690b62679685073dcb0f62499f0b52b445b37ae6e12d02aa4acbafe3fb023cf999b01f714b6282e88f84fd934fe3e2eefb21a64455d19c348d22bbc68ca8e47 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/utils@npm:7.7.1" +"@typescript-eslint/utils@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/utils@npm:7.8.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.15" "@types/semver": "npm:^7.5.8" - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/typescript-estree": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/typescript-estree": "npm:7.8.0" semver: "npm:^7.6.0" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/0986b8c297d6bfdbd2ac8cd3bcf447ef9b934e2dae536771d3368a5c284a0b16c0ea041f82aa100c48d05acc33198e1a3d9d721d3319ae80abba0f5e69c21633 + checksum: 10c0/31fb58388d15b082eb7bd5bce889cc11617aa1131dfc6950471541b3df64c82d1c052e2cccc230ca4ae80456d4f63a3e5dccb79899a8f3211ce36c089b7d7640 languageName: node linkType: hard @@ -4276,13 +4301,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/visitor-keys@npm:7.7.1" +"@typescript-eslint/visitor-keys@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" + "@typescript-eslint/types": "npm:7.8.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/19cbd14ac9a234d847f457cbd880cbd98b83c331a46d2dc2d8c0e6cb54ce6159552f6dd2f7236035be1a71f13f48df4a2aa09e70ad1f1e2ff3da7c3622927bd3 + checksum: 10c0/5892fb5d9c58efaf89adb225f7dbbb77f9363961f2ff420b6b130bdd102dddd7aa8a16c46a5a71c19889d27b781e966119a89270555ea2cb5653a04d8994123d languageName: node linkType: hard @@ -7775,8 +7800,8 @@ __metadata: linkType: hard "eslint-plugin-formatjs@npm:^4.10.1": - version: 4.13.0 - resolution: "eslint-plugin-formatjs@npm:4.13.0" + version: 4.13.1 + resolution: "eslint-plugin-formatjs@npm:4.13.1" dependencies: "@formatjs/icu-messageformat-parser": "npm:2.7.6" "@formatjs/ts-transformer": "npm:3.13.12" @@ -7791,7 +7816,7 @@ __metadata: unicode-emoji-utils: "npm:^1.2.0" peerDependencies: eslint: 7 || 8 - checksum: 10c0/3dbe4ffd3e72d4ce5b14afdcf6dd5db889dd09cb15bc875f29bcc5b49295e0ae4a3eb672ed89ed33f22aacbfe655151398ca4307fd0610508e568a6e4db50aa8 + checksum: 10c0/ce18141dff84e8fe026127085c1a63279acb3a1bc0b70dc1ddce2fc65bb37d68ccf6d097231428745eda2caea42080e1c80a01a1895803155c15123a01bfeee3 languageName: node linkType: hard @@ -9643,15 +9668,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.11, intl-messageformat@npm:^10.3.5": - version: 10.5.11 - resolution: "intl-messageformat@npm:10.5.11" +"intl-messageformat@npm:10.5.12, intl-messageformat@npm:^10.3.5": + version: 10.5.12 + resolution: "intl-messageformat@npm:10.5.12" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" "@formatjs/icu-messageformat-parser": "npm:2.7.6" tslib: "npm:^2.4.0" - checksum: 10c0/423f1c879ce2d0e7b9e0b4c1787a81ead7fe4d1734e0366a20fef56b06c09146e7ca3618e2e78b4f8b8f2b59cafe6237ceed21530fe0c16cfb47d915fc80222d + checksum: 10c0/f95734e98a05ef7f51de0c27904d3a994528e3a174963bd1b3a6db9416b5fd84bbd8f7d26d84fc547d51af69ccf46dd3f73a3f4f20a2ccef5c9cd90e946ad82c languageName: node linkType: hard @@ -11431,7 +11456,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -12996,7 +13021,7 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0, pino-abstract-transport@npm:^1.2.0": +"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": version: 1.2.0 resolution: "pino-abstract-transport@npm:1.2.0" dependencies: @@ -13006,15 +13031,15 @@ __metadata: languageName: node linkType: hard -"pino-http@npm:^9.0.0": - version: 9.0.0 - resolution: "pino-http@npm:9.0.0" +"pino-http@npm:^10.0.0": + version: 10.0.0 + resolution: "pino-http@npm:10.0.0" dependencies: get-caller-file: "npm:^2.0.5" - pino: "npm:^8.17.1" - pino-std-serializers: "npm:^6.2.2" + pino: "npm:^9.0.0" + pino-std-serializers: "npm:^7.0.0" process-warning: "npm:^3.0.0" - checksum: 10c0/05496cb76cc9908658e50c4620fbdf7b0b5d99fb529493d601c3e4635b0bf7ce12b8a8eed7b5b520089f643b099233d61dd71f7cdfad8b66e59b9b81d79b6512 + checksum: 10c0/40d2dcb2bc0c51f1ce45d3d7144c54f087fe1a122d82d0f497d65656151a1603a64f82f62d7fc6a3c172754c5a5cf6105b3096620eece31cefbc8cf95b26c062 languageName: node linkType: hard @@ -13042,31 +13067,17 @@ __metadata: languageName: node linkType: hard -"pino-std-serializers@npm:^6.0.0, pino-std-serializers@npm:^6.2.2": +"pino-std-serializers@npm:^6.0.0": version: 6.2.2 resolution: "pino-std-serializers@npm:6.2.2" checksum: 10c0/8f1c7f0f0d8f91e6c6b5b2a6bfb48f06441abeb85f1c2288319f736f9c6d814fbeebe928d2314efc2ba6018fa7db9357a105eca9fc99fc1f28945a8a8b28d3d5 languageName: node linkType: hard -"pino@npm:^8.17.1": - version: 8.20.0 - resolution: "pino@npm:8.20.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - fast-redact: "npm:^3.1.1" - on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.1.0" - pino-std-serializers: "npm:^6.0.0" - process-warning: "npm:^3.0.0" - quick-format-unescaped: "npm:^4.0.3" - real-require: "npm:^0.2.0" - safe-stable-stringify: "npm:^2.3.1" - sonic-boom: "npm:^3.7.0" - thread-stream: "npm:^2.0.0" - bin: - pino: bin.js - checksum: 10c0/6b973474160e1fa01fa150de0f69b7db9c6c06ae15f992d369669751825c8f2af3bb5600348eaf9be65b4952326bbdfa226f51e425820eb511f0f594fbddbaa7 +"pino-std-serializers@npm:^7.0.0": + version: 7.0.0 + resolution: "pino-std-serializers@npm:7.0.0" + checksum: 10c0/73e694d542e8de94445a03a98396cf383306de41fd75ecc07085d57ed7a57896198508a0dec6eefad8d701044af21eb27253ccc352586a03cf0d4a0bd25b4133 languageName: node linkType: hard @@ -13175,18 +13186,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^6.0.9": - version: 6.0.9 - resolution: "postcss-color-functional-notation@npm:6.0.9" +"postcss-color-functional-notation@npm:^6.0.11": + version: 6.0.11 + resolution: "postcss-color-functional-notation@npm:6.0.11" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/120f7bc23bf46dd1c008b3aa806fb02dd988ae180f9c0c10dca9f5ea3473bf20d7743aafae1441df5b4a3945a63ebb0dae1d4d55f7c8bcd34540529b627c4e3e + checksum: 10c0/7fd75e6881cf62f536f79dfc0ae1b709ea0b8b84833cce1671372711f6019ab4360c6a17089b654b2d376b87e7f9455b94f0d13b45ab0ab767e547b604709b3d languageName: node linkType: hard @@ -13240,46 +13251,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^10.0.4": - version: 10.0.4 - resolution: "postcss-custom-media@npm:10.0.4" +"postcss-custom-media@npm:^10.0.6": + version: 10.0.6 + resolution: "postcss-custom-media@npm:10.0.6" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/2384a40f0e38abe92fbfc707000b264e4bdfe65bd0086ab18c6aab71049198f9dd1431bc4f9bbf68f7cca86b4ff0da352bac4a6ecd04e3671b7ddf6ed6ec3d04 + checksum: 10c0/98a524bc46b780a86094bbe8007f1e577137da5490823631a683d4b3df4a13e40c5e1ab52380275a54f7011abfd98bb597c6293d964c14f9f22ec6cf9d75c550 languageName: node linkType: hard -"postcss-custom-properties@npm:^13.3.8": - version: 13.3.8 - resolution: "postcss-custom-properties@npm:13.3.8" +"postcss-custom-properties@npm:^13.3.10": + version: 13.3.10 + resolution: "postcss-custom-properties@npm:13.3.10" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/utilities": "npm:^1.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/03dd1918f897005b23d09615ebb2c3faf4a01cac67462069c9cfa87c024b2a878f64948b0cf668971bc0ca00cfc349080879b3864deb3808a32d52ff2b473319 + checksum: 10c0/52688fd0aaadccfdf4a3d86d3a2ab988163e8108088c5e33fc9145d261f75b92b8321c044a8161345abda10df5715d674330309dcc0c17f2980db5515f6a76d6 languageName: node linkType: hard -"postcss-custom-selectors@npm:^7.1.8": - version: 7.1.8 - resolution: "postcss-custom-selectors@npm:7.1.8" +"postcss-custom-selectors@npm:^7.1.10": + version: 7.1.10 + resolution: "postcss-custom-selectors@npm:7.1.10" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" postcss-selector-parser: "npm:^6.0.13" peerDependencies: postcss: ^8.4 - checksum: 10c0/6a7d8248342177a222821531ea3b4008764362e4f7e8f7f2d5767e5880c37ffa39ac5adced2c686baeb9c1f4ed4c283fcc8a8d30ef3b4fc5f63d4ef9a691285e + checksum: 10c0/11311ae6f306420223c6bf926fb1798738f3aa525a267de204de8e8ee9de467bf63b580d9ad5dbb0fff4bd9266770a3fa7e27a24af08a2e0a4115d0727d1d043 languageName: node linkType: hard @@ -13395,18 +13406,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^6.0.14": - version: 6.0.14 - resolution: "postcss-lab-function@npm:6.0.14" +"postcss-lab-function@npm:^6.0.16": + version: 6.0.16 + resolution: "postcss-lab-function@npm:6.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0b5d998ddb98ec6243448f1eca216f6e23872431885b152843feef1e844fc5b6b3ebe16ea8940f3d6abea732aa0c51b2ec0e57437e4326e5b2cb2bcb949e6d9f + checksum: 10c0/ba8717cd8a197ec17acaac1b61631cd4403f07bd406b0c92f2e430a55e3f786cd6c338b626c3326e9178a0f3e58ff838ebaded19f480f39197a9cb17349ecdcd languageName: node linkType: hard @@ -13726,37 +13737,37 @@ __metadata: linkType: hard "postcss-preset-env@npm:^9.5.2": - version: 9.5.9 - resolution: "postcss-preset-env@npm:9.5.9" + version: 9.5.11 + resolution: "postcss-preset-env@npm:9.5.11" dependencies: "@csstools/postcss-cascade-layers": "npm:^4.0.4" - "@csstools/postcss-color-function": "npm:^3.0.14" - "@csstools/postcss-color-mix-function": "npm:^2.0.14" - "@csstools/postcss-exponential-functions": "npm:^1.0.5" + "@csstools/postcss-color-function": "npm:^3.0.16" + "@csstools/postcss-color-mix-function": "npm:^2.0.16" + "@csstools/postcss-exponential-functions": "npm:^1.0.7" "@csstools/postcss-font-format-keywords": "npm:^3.0.2" - "@csstools/postcss-gamut-mapping": "npm:^1.0.7" - "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.15" - "@csstools/postcss-hwb-function": "npm:^3.0.13" + "@csstools/postcss-gamut-mapping": "npm:^1.0.9" + "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.17" + "@csstools/postcss-hwb-function": "npm:^3.0.15" "@csstools/postcss-ic-unit": "npm:^3.0.6" "@csstools/postcss-initial": "npm:^1.0.1" "@csstools/postcss-is-pseudo-class": "npm:^4.0.6" - "@csstools/postcss-light-dark-function": "npm:^1.0.3" + "@csstools/postcss-light-dark-function": "npm:^1.0.5" "@csstools/postcss-logical-float-and-clear": "npm:^2.0.1" "@csstools/postcss-logical-overflow": "npm:^1.0.1" "@csstools/postcss-logical-overscroll-behavior": "npm:^1.0.1" "@csstools/postcss-logical-resize": "npm:^2.0.1" - "@csstools/postcss-logical-viewport-units": "npm:^2.0.7" - "@csstools/postcss-media-minmax": "npm:^1.1.4" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7" + "@csstools/postcss-logical-viewport-units": "npm:^2.0.9" + "@csstools/postcss-media-minmax": "npm:^1.1.6" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.9" "@csstools/postcss-nested-calc": "npm:^3.0.2" "@csstools/postcss-normalize-display-values": "npm:^3.0.2" - "@csstools/postcss-oklab-function": "npm:^3.0.14" + "@csstools/postcss-oklab-function": "npm:^3.0.16" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" - "@csstools/postcss-relative-color-syntax": "npm:^2.0.14" + "@csstools/postcss-relative-color-syntax": "npm:^2.0.16" "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1" - "@csstools/postcss-stepped-value-functions": "npm:^3.0.6" + "@csstools/postcss-stepped-value-functions": "npm:^3.0.8" "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.6" - "@csstools/postcss-trigonometric-functions": "npm:^3.0.6" + "@csstools/postcss-trigonometric-functions": "npm:^3.0.8" "@csstools/postcss-unset-value": "npm:^3.0.1" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.22.3" @@ -13766,12 +13777,12 @@ __metadata: cssdb: "npm:^8.0.0" postcss-attribute-case-insensitive: "npm:^6.0.3" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^6.0.9" + postcss-color-functional-notation: "npm:^6.0.11" postcss-color-hex-alpha: "npm:^9.0.4" postcss-color-rebeccapurple: "npm:^9.0.3" - postcss-custom-media: "npm:^10.0.4" - postcss-custom-properties: "npm:^13.3.8" - postcss-custom-selectors: "npm:^7.1.8" + postcss-custom-media: "npm:^10.0.6" + postcss-custom-properties: "npm:^13.3.10" + postcss-custom-selectors: "npm:^7.1.10" postcss-dir-pseudo-class: "npm:^8.0.1" postcss-double-position-gradients: "npm:^5.0.6" postcss-focus-visible: "npm:^9.0.1" @@ -13779,7 +13790,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^5.0.1" postcss-image-set-function: "npm:^6.0.3" - postcss-lab-function: "npm:^6.0.14" + postcss-lab-function: "npm:^6.0.16" postcss-logical: "npm:^7.0.1" postcss-nesting: "npm:^12.1.2" postcss-opacity-percentage: "npm:^2.0.0" @@ -13791,7 +13802,7 @@ __metadata: postcss-selector-not: "npm:^7.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/dbe020e3fc08f0b71a3ee9d3c8a66a93bb6ba62281ac89fa59c82b8632ca58d6a911ddd9c65f15355c36aad63477633fc101cc0f3ce494dbc757193ba42eb61c + checksum: 10c0/9460f4ce18cf1af7582d0a1f366151f59b6e9b0c7cbb62e59081dc91da14760a749f59fa52bc190e5e2c8fd531952c647719d19c4740aa1a0ebcb93f075ad931 languageName: node linkType: hard @@ -14381,18 +14392,18 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.6.5 - resolution: "react-intl@npm:6.6.5" + version: 6.6.6 + resolution: "react-intl@npm:6.6.6" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/icu-messageformat-parser": "npm:2.7.6" - "@formatjs/intl": "npm:2.10.1" + "@formatjs/intl": "npm:2.10.2" "@formatjs/intl-displaynames": "npm:6.6.6" "@formatjs/intl-listformat": "npm:7.5.5" "@types/hoist-non-react-statics": "npm:^3.3.1" "@types/react": "npm:16 || 17 || 18" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.11" + intl-messageformat: "npm:10.5.12" tslib: "npm:^2.4.0" peerDependencies: react: ^16.6.0 || 17 || 18 @@ -14400,7 +14411,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/31f231701af080bc923fdf25ff22ae7ad56bd7892602879fe6fa3de0c6ab95aab10ff86595372be155e0be45a7130a2cca91dbab73e558359cebc1785711ded2 + checksum: 10c0/04c1d1ca783f2a5e605544290c93e57629500be6811d7c2c3342903bf9f9a720d2e4c9cf3924133bf84e510ee879bf3d870a3ff269f5b197f894a49047bd089d languageName: node linkType: hard @@ -16505,8 +16516,8 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.4.0 - resolution: "stylelint@npm:16.4.0" + version: 16.5.0 + resolution: "stylelint@npm:16.5.0" dependencies: "@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-tokenizer": "npm:^2.2.4" @@ -16549,7 +16560,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/7e603a0d88732180b60528c9f2edfca7fdf8c966f42c260af16131854c3acb5acfa30403b1f4fd72cd1470eb9ba625ca4de84e8cb379942df54127c55afc1288 + checksum: 10c0/9281693ff6c1918e07fdcf7a950531f79678a28261a0d5bd36ca2fcf524e53d7305158d20ba890f5dd01c0ff90c09a13453dce2fe6887f4c157d8c2c0acf3666 languageName: node linkType: hard @@ -16829,7 +16840,7 @@ __metadata: languageName: node linkType: hard -"thread-stream@npm:^2.0.0, thread-stream@npm:^2.6.0": +"thread-stream@npm:^2.6.0": version: 2.6.0 resolution: "thread-stream@npm:2.6.0" dependencies: