diff --git a/.github/renovate.json5 b/.github/renovate.json5 index a7998ddfdc..dab99829a1 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -99,6 +99,16 @@ matchUpdateTypes: ['patch', 'minor'], groupName: 'eslint (non-major)', }, + { + // Group actions/*-artifact in the same PR + matchManagers: ['github-actions'], + matchPackageNames: [ + 'actions/download-artifact', + 'actions/upload-artifact', + ], + matchUpdateTypes: ['major'], + groupName: 'artifact actions (major)', + }, { // Update @types/* packages every week, with one grouped PR matchPackagePrefixes: '@types/', diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 3be2a3d490..29646f28e8 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,33 +1,21 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-10-26 09:32:34 -0400 using Haml-Lint version 0.51.0. +# on 2023-12-15 11:02:19 -0500 using Haml-Lint version 0.52.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 16 + # Offense count: 11 LineLength: exclude: - - 'app/views/admin/account_actions/new.html.haml' - - 'app/views/admin/accounts/index.html.haml' - - 'app/views/admin/ip_blocks/new.html.haml' - 'app/views/admin/roles/_form.html.haml' - - 'app/views/admin/settings/discovery/show.html.haml' - 'app/views/auth/registrations/edit.html.haml' - 'app/views/auth/registrations/new.html.haml' - - 'app/views/filters/_filter_fields.html.haml' - 'app/views/media/player.html.haml' - 'app/views/settings/applications/_fields.html.haml' - 'app/views/settings/imports/index.html.haml' - 'app/views/settings/preferences/appearance/show.html.haml' - 'app/views/settings/preferences/notifications/show.html.haml' - 'app/views/settings/preferences/other/show.html.haml' - - # Offense count: 9 - RuboCop: - exclude: - - 'app/views/admin/accounts/_buttons.html.haml' - - 'app/views/admin/accounts/_local_account.html.haml' - - 'app/views/admin/roles/_form.html.haml' diff --git a/.rubocop.yml b/.rubocop.yml index 68352e3198..61cb1164b4 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -105,6 +105,21 @@ Rails/Exit: - 'config/boot.rb' - 'lib/mastodon/cli/*.rb' +Rails/SkipsModelValidations: + Exclude: + - 'db/*migrate/**/*' + +# Reason: We want to preserve the ability to migrate from arbitrary old versions, +# and cannot guarantee that every installation has run every migration as they upgrade. +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunusedignoredcolumns +Rails/UnusedIgnoredColumns: + Enabled: false + +# Reason: Prevailing style choice +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsnegateinclude +Rails/NegateInclude: + Enabled: false + # Reason: Some single letter camel case files shouldn't be split # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath RSpec/FilePath: diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index d74940ec7f..030f311101 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -26,7 +26,7 @@ Lint/NonLocalExitFromIterator: # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: - Max: 130 + Max: 100 # Configuration parameters: CountBlocks, Max. Metrics/BlockNesting: @@ -119,23 +119,6 @@ Rails/LexicallyScopedActionFilter: - 'app/controllers/auth/passwords_controller.rb' - 'app/controllers/auth/registrations_controller.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/NegateInclude: - Exclude: - - 'app/controllers/concerns/signature_verification.rb' - - 'app/helpers/jsonld_helper.rb' - - 'app/lib/activitypub/activity/create.rb' - - 'app/lib/activitypub/activity/move.rb' - - 'app/lib/feed_manager.rb' - - 'app/lib/link_details_extractor.rb' - - 'app/models/concerns/attachmentable.rb' - - 'app/models/concerns/remotable.rb' - - 'app/models/custom_filter.rb' - - 'app/services/activitypub/process_status_update_service.rb' - - 'app/services/fetch_link_card_service.rb' - - 'app/workers/web/push_notification_worker.rb' - - 'lib/paperclip/color_extractor.rb' - Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' @@ -181,22 +164,6 @@ Rails/SkipsModelValidations: - 'app/workers/move_worker.rb' - 'app/workers/scheduler/ip_cleanup_scheduler.rb' - 'app/workers/scheduler/scheduled_statuses_scheduler.rb' - - 'db/migrate/20161203164520_add_from_account_id_to_notifications.rb' - - 'db/migrate/20170105224407_add_shortcode_to_media_attachments.rb' - - 'db/migrate/20170209184350_add_reply_to_statuses.rb' - - 'db/migrate/20170304202101_add_type_to_media_attachments.rb' - - 'db/migrate/20180528141303_fix_accounts_unique_index.rb' - - 'db/migrate/20180609104432_migrate_web_push_subscriptions2.rb' - - 'db/migrate/20181207011115_downcase_custom_emoji_domains.rb' - - 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb' - - 'db/migrate/20191007013357_update_pt_locales.rb' - - 'db/migrate/20220316233212_update_kurdish_locales.rb' - - 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb' - - 'db/post_migrate/20200917193528_migrate_notifications_type.rb' - - 'db/post_migrate/20201017234926_fill_account_suspension_origin.rb' - - 'db/post_migrate/20220617202502_migrate_roles.rb' - - 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb' - - 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb' - 'lib/mastodon/cli/accounts.rb' - 'lib/mastodon/cli/maintenance.rb' - 'spec/lib/activitypub/activity/follow_spec.rb' @@ -212,19 +179,6 @@ Rails/UniqueValidationWithoutIndex: - 'app/models/identity.rb' - 'app/models/webauthn_credential.rb' -# Configuration parameters: Include. -# Include: app/models/**/*.rb -Rails/UnusedIgnoredColumns: - Exclude: - - 'app/models/account.rb' - - 'app/models/account_stat.rb' - - 'app/models/admin/action_log.rb' - - 'app/models/custom_filter.rb' - - 'app/models/email_domain_block.rb' - - 'app/models/report.rb' - - 'app/models/status_edit.rb' - - 'app/models/user.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: exists, where @@ -378,22 +332,6 @@ Style/IfUnlessModifier: - 'config/initializers/devise.rb' - 'config/initializers/ffmpeg.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: InverseMethods, InverseBlocks. -Style/InverseMethods: - Exclude: - - 'app/models/custom_filter.rb' - - 'app/services/update_account_service.rb' - - 'spec/controllers/activitypub/replies_controller_spec.rb' - -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: line_count_dependent, lambda, literal -Style/Lambda: - Exclude: - - 'config/initializers/simple_form.rb' - - 'config/routes.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Style/MapToHash: Exclude: @@ -458,15 +396,6 @@ Style/RedundantFetchBlock: - 'config/initializers/paperclip.rb' - 'config/puma.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowMultipleReturnValues. -Style/RedundantReturn: - Exclude: - - 'app/controllers/api/v1/directories_controller.rb' - - 'app/controllers/auth/confirmations_controller.rb' - - 'app/lib/ostatus/tag_manager.rb' - - 'app/models/form/import.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. # AllowedMethods: present?, blank?, presence, try, try! @@ -487,11 +416,6 @@ Style/SingleArgumentDig: Exclude: - 'lib/webpacker/manifest_extensions.rb' -# This cop supports safe autocorrection (--autocorrect). -Style/StderrPuts: - Exclude: - - 'config/boot.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Mode. Style/StringConcatenation: @@ -510,13 +434,6 @@ Style/StringLiterals: - 'config/initializers/webauthn.rb' - 'config/routes.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments. -# AllowedMethods: define_method, mail, respond_to -Style/SymbolProc: - Exclude: - - 'config/initializers/3_omniauth.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, AllowSafeAssignment. # SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex diff --git a/Gemfile.lock b/Gemfile.lock index 405c31ae1a..3b33402b22 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.4) + bigdecimal (3.1.5) bindata (2.4.15) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) @@ -197,7 +197,7 @@ GEM activesupport cbor (0.5.9.6) charlock_holmes (0.7.7) - chewy (7.3.5) + chewy (7.4.0) activesupport (>= 5.2) elasticsearch (>= 7.12.0, < 7.14.0) elasticsearch-dsl @@ -326,7 +326,7 @@ GEM ruby-progressbar (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) - haml (6.2.0) + haml (6.3.0) temple (>= 0.8.2) thor tilt @@ -335,7 +335,7 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.51.0) + haml_lint (0.52.0) haml (>= 4.0) parallel (~> 1.10) rainbow @@ -381,7 +381,7 @@ GEM rdoc reline (>= 0.3.8) jmespath (1.6.2) - json (2.7.0) + json (2.7.1) json-canonicalization (1.0.0) json-jwt (1.15.3) activesupport (>= 4.2) @@ -515,7 +515,7 @@ GEM openssl (> 2.0) orm_adapter (0.5.0) ox (2.14.17) - parallel (1.23.0) + parallel (1.24.0) parser (3.2.2.4) ast (~> 2.4.1) racc @@ -622,7 +622,7 @@ GEM redis (>= 4) redlock (1.3.2) redis (>= 3.0.0, < 6.0) - regexp_parser (2.8.2) + regexp_parser (2.8.3) reline (0.4.1) io-console (~> 0.5) request_store (1.5.1) @@ -662,7 +662,7 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.12.1) - rubocop (1.58.0) + rubocop (1.59.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -679,10 +679,10 @@ GEM rubocop (~> 1.41) rubocop-factory_bot (2.24.0) rubocop (~> 1.33) - rubocop-performance (1.19.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-ast (>= 0.4.0) - rubocop-rails (2.22.2) + rubocop-performance (1.20.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rails (2.23.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) @@ -759,7 +759,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) - test-prof (1.3.0) + test-prof (1.3.1) thor (1.3.0) tilt (2.3.0) timeout (0.4.1) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index b3c60fcaf4..98fa1897ef 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -108,6 +108,10 @@ class Api::BaseController < ApplicationController render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable? end + def require_valid_pagination_options! + render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid? + end + def require_user! if !current_user render json: { error: 'This method requires an authenticated user' }, status: 422 @@ -136,6 +140,10 @@ class Api::BaseController < ApplicationController private + def pagination_options_invalid? + params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?) + end + def respond_with_error(code) render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code end diff --git a/app/controllers/api/v1/accounts/notes_controller.rb b/app/controllers/api/v1/accounts/notes_controller.rb index 032e807d11..6d115631a2 100644 --- a/app/controllers/api/v1/accounts/notes_controller.rb +++ b/app/controllers/api/v1/accounts/notes_controller.rb @@ -25,6 +25,6 @@ class Api::V1::Accounts::NotesController < Api::BaseController end def relationships_presenter - AccountRelationshipsPresenter.new([@account.id], current_user.account_id) + AccountRelationshipsPresenter.new([@account], current_user.account_id) end end diff --git a/app/controllers/api/v1/accounts/pins_controller.rb b/app/controllers/api/v1/accounts/pins_controller.rb index 73f845c614..0eb13c048c 100644 --- a/app/controllers/api/v1/accounts/pins_controller.rb +++ b/app/controllers/api/v1/accounts/pins_controller.rb @@ -25,6 +25,6 @@ class Api::V1::Accounts::PinsController < Api::BaseController end def relationships_presenter - AccountRelationshipsPresenter.new([@account.id], current_user.account_id) + AccountRelationshipsPresenter.new([@account], current_user.account_id) end end diff --git a/app/controllers/api/v1/accounts/relationships_controller.rb b/app/controllers/api/v1/accounts/relationships_controller.rb index e5ae5b007b..d43832177a 100644 --- a/app/controllers/api/v1/accounts/relationships_controller.rb +++ b/app/controllers/api/v1/accounts/relationships_controller.rb @@ -5,7 +5,7 @@ class Api::V1::Accounts::RelationshipsController < Api::BaseController before_action :require_user! def index - @accounts = Account.where(id: account_ids).select('id') + @accounts = Account.where(id: account_ids).select(:id, :domain) @accounts.merge!(Account.without_suspended) unless truthy_param?(:with_suspended) render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index be251b4259..23fc85b475 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -88,7 +88,7 @@ class Api::V1::AccountsController < Api::BaseController end def relationships(**options) - AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options) + AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) end def account_params diff --git a/app/controllers/api/v1/directories_controller.rb b/app/controllers/api/v1/directories_controller.rb index 35c504a7ff..e79b20ce42 100644 --- a/app/controllers/api/v1/directories_controller.rb +++ b/app/controllers/api/v1/directories_controller.rb @@ -12,7 +12,7 @@ class Api::V1::DirectoriesController < Api::BaseController private def require_enabled! - return not_found unless Setting.profile_directory + not_found unless Setting.profile_directory end def set_accounts diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index 7c197ce6ba..ee717ebbcc 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -25,11 +25,11 @@ class Api::V1::FollowRequestsController < Api::BaseController private def account - Account.find(params[:id]) + @account ||= Account.find(params[:id]) end def relationships(**options) - AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options) + AccountRelationshipsPresenter.new([account], current_user.account_id, **options) end def load_accounts diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb index abedf61f28..0cc0f1f990 100644 --- a/app/controllers/api/v2/search_controller.rb +++ b/app/controllers/api/v2/search_controller.rb @@ -12,6 +12,7 @@ class Api::V2::SearchController < Api::BaseController before_action :query_pagination_error, if: :pagination_requested? before_action :remote_resolve_error, if: :remote_resolve_requested? end + before_action :require_valid_pagination_options! def index @search = Search.new(search_results) diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb index 5e6589ad48..5d476d0440 100644 --- a/app/controllers/auth/confirmations_controller.rb +++ b/app/controllers/auth/confirmations_controller.rb @@ -63,7 +63,7 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController end def captcha_user_bypass? - return true if @confirmation_user.nil? || @confirmation_user.confirmed? + @confirmation_user.nil? || @confirmation_user.confirmed? end def set_pack diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index f83098f731..e6e7c24752 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -34,7 +34,7 @@ class RelationshipsController < ApplicationController end def set_relationships - @relationships = AccountRelationshipsPresenter.new(@accounts.pluck(:id), current_user.account_id) + @relationships = AccountRelationshipsPresenter.new(@accounts, current_user.account_id) end def form_account_batch_params diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2b22f2f75b..daa27195e9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -110,7 +110,7 @@ module ApplicationHelper def can?(action, record) return false if record.nil? - policy(record).public_send("#{action}?") + policy(record).public_send(:"#{action}?") end def fa_icon(icon, attributes = {}) diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index b134d45dbb..79bd51a995 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -658,10 +658,6 @@ $ui-header-height: 55px; flex: 1 1 auto; align-items: center; justify-content: center; - @supports (display: grid) { - // hack to fix Chrome <57 - contain: strict; - } & > span { max-width: 500px; diff --git a/app/javascript/mastodon/actions/accounts_typed.ts b/app/javascript/mastodon/actions/accounts_typed.ts index b908e7528e..058a68a099 100644 --- a/app/javascript/mastodon/actions/accounts_typed.ts +++ b/app/javascript/mastodon/actions/accounts_typed.ts @@ -21,7 +21,7 @@ function actionWithSkipLoadingTrue(args: Args) { } export const followAccountSuccess = createAction( - 'accounts/followAccountSuccess', + 'accounts/followAccount/SUCCESS', actionWithSkipLoadingTrue<{ relationship: ApiRelationshipJSON; alreadyFollowing: boolean; @@ -29,7 +29,7 @@ export const followAccountSuccess = createAction( ); export const unfollowAccountSuccess = createAction( - 'accounts/unfollowAccountSuccess', + 'accounts/unfollowAccount/SUCCESS', actionWithSkipLoadingTrue<{ relationship: ApiRelationshipJSON; statuses: unknown; @@ -38,60 +38,60 @@ export const unfollowAccountSuccess = createAction( ); export const authorizeFollowRequestSuccess = createAction<{ id: string }>( - 'accounts/followRequestAuthorizeSuccess', + 'accounts/followRequestAuthorize/SUCCESS', ); export const rejectFollowRequestSuccess = createAction<{ id: string }>( - 'accounts/followRequestRejectSuccess', + 'accounts/followRequestReject/SUCCESS', ); export const followAccountRequest = createAction( - 'accounts/followRequest', + 'accounts/follow/REQUEST', actionWithSkipLoadingTrue<{ id: string; locked: boolean }>, ); export const followAccountFail = createAction( - 'accounts/followFail', + 'accounts/follow/FAIL', actionWithSkipLoadingTrue<{ id: string; error: string; locked: boolean }>, ); export const unfollowAccountRequest = createAction( - 'accounts/unfollowRequest', + 'accounts/unfollow/REQUEST', actionWithSkipLoadingTrue<{ id: string }>, ); export const unfollowAccountFail = createAction( - 'accounts/unfollowFail', + 'accounts/unfollow/FAIL', actionWithSkipLoadingTrue<{ id: string; error: string }>, ); export const blockAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; statuses: unknown; -}>('accounts/blockSuccess'); +}>('accounts/block/SUCCESS'); export const unblockAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unblockSuccess'); +}>('accounts/unblock/SUCCESS'); export const muteAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; statuses: unknown; -}>('accounts/muteSuccess'); +}>('accounts/mute/SUCCESS'); export const unmuteAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unmuteSuccess'); +}>('accounts/unmute/SUCCESS'); export const pinAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/pinSuccess'); +}>('accounts/pin/SUCCESS'); export const unpinAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unpinSuccess'); +}>('accounts/unpin/SUCCESS'); export const fetchRelationshipsSuccess = createAction( - 'relationships/fetchSuccess', + 'relationships/fetch/SUCCESS', actionWithSkipLoadingTrue<{ relationships: ApiRelationshipJSON[] }>, ); diff --git a/app/javascript/mastodon/actions/domain_blocks_typed.ts b/app/javascript/mastodon/actions/domain_blocks_typed.ts index 08e0b4a178..6a4cace0de 100644 --- a/app/javascript/mastodon/actions/domain_blocks_typed.ts +++ b/app/javascript/mastodon/actions/domain_blocks_typed.ts @@ -5,9 +5,9 @@ import type { Account } from 'mastodon/models/account'; export const blockDomainSuccess = createAction<{ domain: string; accounts: Account[]; -}>('domain_blocks/blockSuccess'); +}>('domain_blocks/block/SUCCESS'); export const unblockDomainSuccess = createAction<{ domain: string; accounts: Account[]; -}>('domain_blocks/unblockSuccess'); +}>('domain_blocks/unblock/SUCCESS'); diff --git a/app/javascript/mastodon/components/dropdown_menu.jsx b/app/javascript/mastodon/components/dropdown_menu.jsx index de540b392b..d9cbcc32e5 100644 --- a/app/javascript/mastodon/components/dropdown_menu.jsx +++ b/app/javascript/mastodon/components/dropdown_menu.jsx @@ -257,7 +257,7 @@ class Dropdown extends PureComponent { }; findTarget = () => { - return this.target?.buttonRef?.current; + return this.target?.buttonRef?.current ?? this.target; }; componentWillUnmount = () => { diff --git a/app/javascript/mastodon/features/__tests__/toggle-play.jsx b/app/javascript/mastodon/features/__tests__/toggle-play.jsx deleted file mode 100644 index 9c999db867..0000000000 --- a/app/javascript/mastodon/features/__tests__/toggle-play.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; - -import { render, fireEvent } from '@testing-library/react'; - -class Media extends Component { - - constructor(props) { - super(props); - - this.state = { - paused: props.paused || false, - }; - } - - handleMediaClick = () => { - const { onClick } = this.props; - - this.setState(prevState => ({ - paused: !prevState.paused, - })); - - if (typeof onClick === 'function') { - onClick(); - } - - const { title } = this.props; - const mediaElements = document.querySelectorAll(`div[title="${title}"]`); - - setTimeout(() => { - mediaElements.forEach(element => { - if (element !== this && !element.classList.contains('paused')) { - element.click(); - } - }); - }, 0); - }; - - render() { - const { title } = this.props; - const { paused } = this.state; - - return ( - - ); - } - -} - -Media.propTypes = { - title: PropTypes.string.isRequired, - onClick: PropTypes.func, - paused: PropTypes.bool, -}; - -describe('Media attachments test', () => { - let currentMedia = null; - const togglePlayMock = jest.fn(); - - it('plays a new media file and pauses others that were playing', () => { - const container = render( -
- - -
, - ); - - fireEvent.click(container.getByTitle('firstMedia')); - expect(togglePlayMock).toHaveBeenCalledTimes(1); - currentMedia = container.getByTitle('firstMedia'); - expect(currentMedia.textContent).toMatch(/Playing/); - - fireEvent.click(container.getByTitle('secondMedia')); - expect(togglePlayMock).toHaveBeenCalledTimes(2); - currentMedia = container.getByTitle('secondMedia'); - expect(currentMedia.textContent).toMatch(/Playing/); - }); -}); diff --git a/app/javascript/mastodon/features/audio/index.jsx b/app/javascript/mastodon/features/audio/index.jsx index fac43416c9..7a7d0910fa 100644 --- a/app/javascript/mastodon/features/audio/index.jsx +++ b/app/javascript/mastodon/features/audio/index.jsx @@ -20,7 +20,6 @@ import { formatTime, getPointerPosition, fileNameFromURL } from 'mastodon/featur import { Blurhash } from '../../components/blurhash'; import { displayMedia, useBlurhash } from '../../initial_state'; -import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments'; import Visualizer from './visualizer'; @@ -166,32 +165,15 @@ class Audio extends PureComponent { } togglePlay = () => { - const audios = document.querySelectorAll('audio'); - - audios.forEach((audio) => { - const button = audio.previousElementSibling; - button.addEventListener('click', () => { - if(audio.paused) { - audios.forEach((e) => { - if (e !== audio) { - e.pause(); - } - }); - audio.play(); - this.setState({ paused: false }); - } else { - audio.pause(); - this.setState({ paused: true }); - } - }); - }); - - if (currentMedia !== null) { - currentMedia.pause(); + if (!this.audioContext) { + this._initAudioContext(); } - this.audio.play(); - setCurrentMedia(this.audio); + if (this.state.paused) { + this.setState({ paused: false }, () => this.audio.play()); + } else { + this.setState({ paused: true }, () => this.audio.pause()); + } }; handleResize = debounce(() => { @@ -213,7 +195,6 @@ class Audio extends PureComponent { }; handlePause = () => { - this.audio.pause(); this.setState({ paused: true }); if (this.audioContext) { diff --git a/app/javascript/mastodon/features/video/index.jsx b/app/javascript/mastodon/features/video/index.jsx index 9ff6d3589e..e908715e91 100644 --- a/app/javascript/mastodon/features/video/index.jsx +++ b/app/javascript/mastodon/features/video/index.jsx @@ -22,7 +22,6 @@ import { Icon } from 'mastodon/components/icon'; import { playerSettings } from 'mastodon/settings'; import { displayMedia, useBlurhash } from '../../initial_state'; -import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; const messages = defineMessages({ @@ -182,7 +181,6 @@ class Video extends PureComponent { }; handlePause = () => { - this.video.pause(); this.setState({ paused: true }); }; @@ -346,32 +344,11 @@ class Video extends PureComponent { }; togglePlay = () => { - const videos = document.querySelectorAll('video'); - - videos.forEach((video) => { - const button = video.nextElementSibling; - button.addEventListener('click', () => { - if (video.paused) { - videos.forEach((e) => { - if (e !== video) { - e.pause(); - } - }); - video.play(); - this.setState({ paused: false }); - } else { - video.pause(); - this.setState({ paused: true }); - } - }); - }); - - if (currentMedia !== null) { - currentMedia.pause(); + if (this.state.paused) { + this.setState({ paused: false }, () => this.video.play()); + } else { + this.setState({ paused: true }, () => this.video.pause()); } - - this.video.play(); - setCurrentMedia(this.video); }; toggleFullscreen = () => { diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index a67aa6feed..a41aa02f80 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -606,6 +606,7 @@ "search.quick_action.status_search": "Sobivad postitused {x}", "search.search_or_paste": "Otsi või kleebi URL", "search_popout.full_text_search_disabled_message": "Pole saadaval kohas {domain}.", + "search_popout.full_text_search_logged_out_message": "Saadaval vaid kui sisse logitud.", "search_popout.language_code": "Keele ISO-kood", "search_popout.options": "Otsimisvalikud", "search_popout.quick_actions": "Kiirtegevused", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 0967ef424b..bc76358875 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -1 +1,145 @@ -{} +{ + "about.blocks": "Mga pinatimping server", + "about.contact": "Kontak:", + "about.disclaimer": "Ang Mastodon ay software na malaya at bukas-na-pinagmulan, at isang tatak-pangkalakal ng Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Hindi makuha ang dahilan", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.title": "Suspendido", + "about.rules": "Mga alituntunin ng server", + "account.account_note_header": "Tala", + "account.add_or_remove_from_list": "I-dagdag o tanggalin mula sa mga listahan", + "account.badges.bot": "Pakusa", + "account.badges.group": "Pangkat", + "account.block": "Hadlangan si @{name}", + "account.block_domain": "Hadlangan ang domain na {domain}", + "account.block_short": "Hadlangan", + "account.blocked": "Hinadlangan", + "account.browse_more_on_origin_server": "Tingnan pa sa pangunahing profile", + "account.cancel_follow_request": "I-kansela ang pagsunod", + "account.copy": "I-sipi ang kawing sa profile", + "account.direct": "Palihim banggitin si @{name}", + "account.disable_notifications": "I-tigil ang pagpapaalam sa akin tuwing nagpopost si @{name}", + "account.domain_blocked": "Hinadlangan ang domain", + "account.edit_profile": "Baguhin ang profile", + "account.enable_notifications": "Ipaalam sa akin kapag nag-post si @{name}", + "account.endorse": "I-tampok sa profile", + "account.featured_tags.last_status_at": "Huling post noong {date}", + "account.featured_tags.last_status_never": "Walang mga post", + "account.featured_tags.title": "Nakatampok na hashtag ni {name}", + "account.follow": "Sundan", + "account.followers": "Mga tagasunod", + "account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.", + "account.following": "Sinusundan", + "account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.", + "account.follows_you": "Sinusunod ka", + "account.go_to_profile": "Pumunta sa profile", + "account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}", + "account.in_memoriam": "Sa Alaala Ni.", + "account.joined_short": "Sumali", + "account.languages": "Palitan ang mga nakasumuscribing wika", + "account.link_verified_on": "Sinuri ang pagmamay-ari ng kawing ito sa {date}", + "account.locked_info": "Nakakandado ang pagsasariling kalagayan ng account na ito. Manomano sinusuri ng may-ari kung sino ang maaaring sumunod sa kanya.", + "account.media": "Medya", + "account.mention": "Banggitin si @{name}", + "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "bundle_column_error.error.title": "Naku!", + "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", + "bundle_column_error.network.title": "Kamaliang network", + "bundle_column_error.retry": "Subukang muli", + "bundle_column_error.return": "Bumalik sa tahanan", + "bundle_column_error.routing.body": "Hindi mahanap ang hiniling na pahina. Sigurado ka ba na ang URL sa address bar ay tama?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "I-sara", + "bundle_modal_error.message": "May nangyaring mali habang kinakarga ang bahaging ito.", + "bundle_modal_error.retry": "Subukang muli", + "closed_registrations.other_server_instructions": "Dahil desentralisado ang Mastodon, pwede kang gumawa ng account sa iba pang server at makipag-ugnayan pa rin dito.", + "closed_registrations_modal.description": "Hindi pa pwedeng gumawa ng account sa {domain}, pero tandaan na hindi mo kailangan ng account partikular sa {domain} para gamitin ang Mastodon.", + "closed_registrations_modal.find_another_server": "Maghanap ng iba pang server", + "closed_registrations_modal.preamble": "Dahil desentralisado ang Mastodon, kahit saan ka pa gumawa ng account, maaari ka pa ring sumunod at makipag-ugnayan sa kahit-sino rito sa server na ito. Pwede mo pang i-host nang pasarili!", + "closed_registrations_modal.title": "Pagrerehistro sa Mastodon", + "column.about": "Tungkol dito", + "column.blocks": "Nakahadlang na mga tagagamit", + "column.bookmarks": "Mga bookmark", + "column.community": "Lokal na timeline", + "column.direct": "Mga palihim na banggit", + "column.directory": "Tingnan ang mga profile", + "column.domain_blocks": "Nakahadlang na mga domain", + "column.favourites": "Mga paborito", + "column.firehose": "Mga live feed", + "column.follow_requests": "Mga hiling para sundan", + "column.home": "Tahanan", + "column.lists": "Mga listahan", + "column.mutes": "Mga pinatahimik na tagagamit", + "column.notifications": "Mga abiso", + "column.pins": "Mga nakapaskil na post", + "column.public": "Pinagsamang timeline", + "column_back_button.label": "Bumalik", + "column_header.hide_settings": "I-tago ang mga setting", + "column_header.moveLeft_settings": "I-lipat ang hanay pakaliwa", + "column_header.moveRight_settings": "I-lipat ang hanay pakanan", + "column_header.pin": "I-paskil", + "column_header.show_settings": "Ipakita ang mga setting", + "column_header.unpin": "Tanggalin sa pagkapaskil", + "column_subheading.settings": "Mga setting", + "community.column_settings.local_only": "Lokal lamang", + "community.column_settings.media_only": "Medya Lamang", + "community.column_settings.remote_only": "Liblib lamang", + "compose.language.change": "Magpalit ng wika", + "compose.language.search": "Maghanap ng mga wika...", + "compose.published.body": "Nailathala ang post.", + "compose.published.open": "Buksan", + "compose.saved.body": "Nai-save ang post.", + "compose_form.direct_message_warning_learn_more": "Matuto pa", + "compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.", + "compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.", + "copy_icon_button.copied": "Sinipi sa clipboard", + "copypaste.copied": "Sinipi", + "copypaste.copy_to_clipboard": "I-sipi sa clipboard", + "directory.federated": "Mula sa kilalang fediverse", + "directory.local": "Mula sa {domain} lamang", + "directory.new_arrivals": "Mga bagong dating", + "directory.recently_active": "Kamakailang aktibo", + "disabled_account_banner.account_settings": "Mga setting ng account", + "disabled_account_banner.text": "Ang iyong account na {disabledAccount} ay hindi pinapagana ngayon.", + "dismissable_banner.community_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong ang mga account hinohost ng {domain}.", + "dismissable_banner.dismiss": "Alisin", + "dismissable_banner.explore_links": "Ito ang mga balitang kwento na pinaka-binabahagi sa social web ngayon. Ang mga mas bagong balitang kwento na pinost ng mas marami pang mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.", + "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", + "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", + "embed.preview": "Ito ang magiging itsura:", + "emoji_button.activity": "Aktibidad", + "emoji_button.clear": "Linisin", + "emoji_button.custom": "Pasadya", + "emoji_button.flags": "Mga watawat", + "emoji_button.food": "Pagkain at Inumin", + "emoji_button.label": "Maglagay ng emoji", + "emoji_button.nature": "Kalikasan", + "emoji_button.not_found": "Walang mahanap na mga tugmang emoji", + "emoji_button.objects": "Mga bagay", + "emoji_button.people": "Mga tao", + "emoji_button.recent": "Madalas na ginagamit", + "emoji_button.search": "Maghanap...", + "emoji_button.search_results": "Resulta ng paghahanap", + "emoji_button.symbols": "Mga tanda", + "emoji_button.travel": "Paglakbay at Mga Lugar", + "empty_column.account_hides_collections": "Pinili ng tagagamit na ito na hindi makuha ang impormasyong ito", + "empty_column.account_suspended": "Sinuspinde ang account", + "empty_column.account_timeline": "Walang mga post dito!", + "empty_column.account_unavailable": "Hindi makuha ang profile", + "empty_column.blocks": "Hindi ka pa naghahadlang ng sinumang tagagamit.", + "empty_column.bookmarked_statuses": "Wala ka pang naka-bookmark na post. Kapag nag-bookmark ka ng isa, makikita yun dito.", + "empty_column.community": "Walang laman ang lokal na timeline. Magsulat ng anuman papubliko para makaandar tayo!", + "empty_column.direct": "Wala ka pang mga palihim na banggit. Kapag nagpadala o tumanggap ka ng isa, makikita yun dito.", + "empty_column.domain_blocks": "Wala pang nakahadlang na domain.", + "empty_column.explore_statuses": "Wala pang sumisikat sa ngayon. Balik na lang sa muli!", + "empty_column.favourited_statuses": "Wala ka pang mga paboritong post. Kapag nag-paborito ka ng isa, makikita yun dito.", + "empty_column.favourites": "Wala pang may paborito ng post na ito. Kung may sinumang nagpaborito, makikita sila rito.", + "empty_column.follow_requests": "Wala ka pang mga hiling para sundan ka. Kapag nakatanggap ka ng isa, makikita yun dito.", + "empty_column.followed_tags": "Wala ka pang sinusunod na hashtag. Kapag may sinundan ka na, makikita sila rito.", + "empty_column.hashtag": "Wala pang laman ang hashtag na ito.", + "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", + "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", + "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito." +} diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json new file mode 100644 index 0000000000..917a034667 --- /dev/null +++ b/app/javascript/mastodon/locales/ia.json @@ -0,0 +1,23 @@ +{ + "account.add_or_remove_from_list": "Adder o remover ab listas", + "account.copy": "Copiar ligamine a profilo", + "bundle_column_error.network.title": "Error de rete", + "bundle_modal_error.close": "Clauder", + "column.home": "Initio", + "column_subheading.settings": "Parametros", + "compose.language.search": "Cercar linguas...", + "compose.published.open": "Aperir", + "confirmation_modal.cancel": "Cancellar", + "confirmations.logout.confirm": "Clauder le session", + "copypaste.copy_to_clipboard": "Copiar al area de transferentia", + "dismissable_banner.dismiss": "Dimitter", + "firehose.local": "Iste servitor", + "footer.about": "A proposito de", + "home.pending_critical_update.link": "Vider actualisationes", + "keyboard_shortcuts.my_profile": "Aperir tu profilo", + "lightbox.close": "Clauder", + "lightbox.next": "Sequente", + "link_preview.author": "Per {name}", + "lists.account.add": "Adder al lista", + "navigation_bar.about": "A proposito de" +} diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json new file mode 100644 index 0000000000..966b272720 --- /dev/null +++ b/app/javascript/mastodon/locales/ie.json @@ -0,0 +1,700 @@ +{ + "about.blocks": "Moderat servitores", + "about.contact": "Contacter:", + "about.disclaimer": "Mastodon es programmatura líber e con fonte apert, e un marca de fabrica de Mastodon dGmbH.", + "about.domain_blocks.no_reason_available": "Rason ne disponibil", + "about.domain_blocks.preamble": "Mastodon generalmen possibilisa regardar li contenete de, e li interaction con usatores de quelcunc altri servitor in li fediverse. Ci trova se li exceptiones fat de ti-ci particulari servitor.", + "about.domain_blocks.silenced.explanation": "Generalmen, li profiles e contenete de ti-ci servitor ne va aparir, except si on sercha les explicitmen o optionalisa it per sequer.", + "about.domain_blocks.silenced.title": "Limitat", + "about.domain_blocks.suspended.explanation": "Necun data de ti-ci servitor va esser tractat, inmagasinat o exchangeat, quel inpossibilisa li interaction o comunication de usatores de ti-ci servitor.", + "about.domain_blocks.suspended.title": "Suspendet", + "about.not_available": "On ne ha disponibilisat ti-ci information sur ti-ci servitor.", + "about.powered_by": "Decentralisat social medie disponibilisat de {mastodon}", + "about.rules": "Regules del servitor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjunter o remover de listes", + "account.badges.bot": "Automatisat", + "account.badges.group": "Gruppe", + "account.block": "Bloccar @{name}", + "account.block_domain": "Bloccar dominia {domain}", + "account.block_short": "Bloccar", + "account.blocked": "Bloccat", + "account.browse_more_on_origin_server": "Navigar plu sur li profil original", + "account.cancel_follow_request": "Anullar sequer", + "account.copy": "Copiar ligament al profil", + "account.direct": "Privatmen mentionar @{name}", + "account.disable_notifications": "Cessa notificar me quande @{name} posta", + "account.domain_blocked": "Dominia bloccat", + "account.edit_profile": "Redacter profil", + "account.enable_notifications": "Notificar me quande @{name} posta", + "account.endorse": "Recomandar sur profil", + "account.featured_tags.last_status_at": "Ultim posta ye {date}", + "account.featured_tags.last_status_never": "Null postas", + "account.featured_tags.title": "Recomandat hashtags de {name}", + "account.follow": "Sequer", + "account.followers": "Sequitores", + "account.followers.empty": "Ancor nequi seque ti-ci usator.", + "account.followers_counter": "{count, plural, one {{counter} Sequitor} other {{counter} Sequitor}}", + "account.following": "Sequent", + "account.following_counter": "{count, plural, one {{counter} Sequent} other {{counter} Sequent}}", + "account.follows.empty": "Ti-ci usator ancor ne seque quemcunc.", + "account.follows_you": "Seque te", + "account.go_to_profile": "Ear a profil", + "account.hide_reblogs": "Celar boosts de @{name}", + "account.in_memoriam": "In Memoriam.", + "account.joined_short": "Adheret", + "account.languages": "Changear lingues de subscrition", + "account.link_verified_on": "Proprietá de ti-ci ligament esset verificat ye {date}", + "account.locked_info": "Li statu de confidentialitá de ti-ci conto es configurat quam cludet. Li proprietario decide manualmen qui posse sequer.", + "account.media": "Medie", + "account.mention": "Mentionar @{name}", + "account.moved_to": "{name} ha indicat que su nov conto es ja:", + "account.mute": "Silentiar @{name}", + "account.mute_notifications_short": "Silentiar notificationes", + "account.mute_short": "Silentiar", + "account.muted": "Silentiat", + "account.no_bio": "Null descrition providet.", + "account.open_original_page": "Aperter li págine original", + "account.posts": "Postas", + "account.posts_with_replies": "Postas e replicas", + "account.report": "Raportar @{name}", + "account.requested": "Atendent aprobation. Cliccar por anullar li petition de sequer", + "account.requested_follow": "{name} ha petit sequer te", + "account.share": "Distribuer li profil de @{name}", + "account.show_reblogs": "Monstrar boosts de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Posta} other {{counter} Postas}}", + "account.unblock": "Desbloccar @{name}", + "account.unblock_domain": "Desbloccar dominia {domain}", + "account.unblock_short": "Desbloccar", + "account.unendorse": "Ne recomandar sur profil", + "account.unfollow": "Dessequer", + "account.unmute": "Dessilentiar @{name}", + "account.unmute_notifications_short": "Dessilentiar notificationes", + "account.unmute_short": "Dessilentiar", + "account_note.placeholder": "Clicca por adjunter un nota", + "admin.dashboard.daily_retention": "Usator-retention per die pos registration", + "admin.dashboard.monthly_retention": "Usator-retention per mensu pos registration", + "admin.dashboard.retention.average": "Medial", + "admin.dashboard.retention.cohort": "Mensu de registration", + "admin.dashboard.retention.cohort_size": "Nov usatores", + "admin.impact_report.instance_accounts": "Conto-profiles to-ci vell deleter", + "admin.impact_report.instance_followers": "Sequitores queles nor usatores vell perdir", + "admin.impact_report.instance_follows": "Sequitores queles lor usatores vell perdir", + "admin.impact_report.title": "Resumate de impact", + "alert.rate_limited.message": "Ples reprovar pos {retry_time, time, medium}.", + "alert.rate_limited.title": "Frequentie limitat", + "alert.unexpected.message": "Un ínexpectat erra ha evenit.", + "alert.unexpected.title": "Ups!", + "announcement.announcement": "Proclamation", + "attachments_list.unprocessed": "(íntractat)", + "audio.hide": "Celar audio", + "autosuggest_hashtag.per_week": "{count} per semane", + "boost_modal.combo": "Li proxim vez tu posse pressar {combo} por passar to-ci", + "bundle_column_error.copy_stacktrace": "Copiar erra-raporte", + "bundle_column_error.error.body": "Li demandat págine ne posset esser rendit. Fórsan it es un problema in nor code, o un problema de compatibilitá con li navigator.", + "bundle_column_error.error.title": "O ve!", + "bundle_column_error.network.body": "Un erra evenit durant li cargation de ti-ci págine, possibilmen pro un temporari problema de tui conexion del internet o de ti-ci servitor.", + "bundle_column_error.network.title": "Erra de retage", + "bundle_column_error.retry": "Provar denov", + "bundle_column_error.return": "Retornar al comense", + "bundle_column_error.routing.body": "Li demandat págine ne trovat se. Esque tu es cert que li URL in li adresse-barre es corect?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Cluder", + "bundle_modal_error.message": "Alquo errat durant li cargation de ti-ci componente.", + "bundle_modal_error.retry": "Provar denov", + "closed_registrations.other_server_instructions": "Pro que Mastodon es decentralisat, on posse crear un conto che un altri servitor e ancor interacter con ti-ci.", + "closed_registrations_modal.description": "Crear un conto che {domain} ne es possibil actualmen, ma ples memorar que on ne besona un conto specificmen che {domain} por usar Mastodon.", + "closed_registrations_modal.find_another_server": "Serchar altri servitor", + "closed_registrations_modal.preamble": "Mastodon es descentralisat, do on posse ser e interacter con quicunc che ti-ci servitor, sin egarda de u on crea su conto. On mem posse self-albergar it!", + "closed_registrations_modal.title": "Registrar sur Mastodon", + "column.about": "Information", + "column.blocks": "Bloccat usatores", + "column.bookmarks": "Marcatores", + "column.community": "Local témpor-linea", + "column.direct": "Privat mentiones", + "column.directory": "Navigar profiles", + "column.domain_blocks": "Bloccat dominia", + "column.favourites": "Favorites", + "column.firehose": "Témpor-lineas", + "column.follow_requests": "Petitiones de sequer", + "column.home": "Comense", + "column.lists": "Listes", + "column.mutes": "Silentiat usatores", + "column.notifications": "Notificationes", + "column.pins": "Pinglat postas", + "column.public": "Federat témpor-linea", + "column_back_button.label": "Retornar", + "column_header.hide_settings": "Celar parametres", + "column_header.moveLeft_settings": "Mover columne al levul", + "column_header.moveRight_settings": "Mover columne al dextri", + "column_header.pin": "Pinglar", + "column_header.show_settings": "Monstrar parametres", + "column_header.unpin": "Despinglar", + "column_subheading.settings": "Parametres", + "community.column_settings.local_only": "Solmen local", + "community.column_settings.media_only": "Solmen medie", + "community.column_settings.remote_only": "Solmen external", + "compose.language.change": "Changear lingue", + "compose.language.search": "Serchar lingues...", + "compose.published.body": "Posta publicat.", + "compose.published.open": "Aperter", + "compose.saved.body": "Posta conservat.", + "compose_form.direct_message_warning_learn_more": "Aprender plu", + "compose_form.hashtag_warning": "Ti-ci posta ne va esser listat sur quelcunc hashtag pro que it ne es public. Solmen public postas posse esser serchat per hashtag.", + "compose_form.lock_disclaimer": "Tui conto ne es {locked}. Quicunc posse sequer te por vider tui postas solmen por sequitores.", + "compose_form.lock_disclaimer.lock": "cludet", + "compose_form.placeholder": "Quo es in tui spiritu?", + "compose_form.poll.add_option": "Adjunter un option", + "compose_form.poll.duration": "Duration del balotation", + "compose_form.poll.option_placeholder": "Option {number}", + "compose_form.poll.remove_option": "Remover ti-ci option", + "compose_form.poll.switch_to_multiple": "Changea li balotation por permisser multiplic selectiones", + "compose_form.poll.switch_to_single": "Changea li balotation por permisser un singul selection", + "compose_form.publish": "Publicar", + "compose_form.publish_form": "Nov posta", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Conservar changes", + "compose_form.sensitive.hide": "{count, plural, one {Marcar medie quam sensitiv} other {Marcar medie quam sensitiv}}", + "compose_form.sensitive.marked": "{count, plural, one {Medie es marcat quam sensitiv} other {Medie es marcat quam sensitiv}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medie ne es marcat quam sensitiv} other {Medie ne es marcat quam sensitiv}}", + "compose_form.spoiler.marked": "Remover avise pri li contenete", + "compose_form.spoiler.unmarked": "Adjunter avise pri li contenete", + "compose_form.spoiler_placeholder": "Scri tui avise ci", + "confirmation_modal.cancel": "Anullar", + "confirmations.block.block_and_report": "Bloccar & Raportar", + "confirmations.block.confirm": "Bloccar", + "confirmations.block.message": "Esque tu vermen vole bloccar {name}?", + "confirmations.cancel_follow_request.confirm": "Retraer petition", + "confirmations.cancel_follow_request.message": "Esque tu vermen vole retraer tui petition sequer {name}?", + "confirmations.delete.confirm": "Deleter", + "confirmations.delete.message": "Esque tu vermen vole deleter ti-ci posta?", + "confirmations.delete_list.confirm": "Deleter", + "confirmations.delete_list.message": "Esque tu vermen vole permanentmen deleter ti-ci liste?", + "confirmations.discard_edit_media.confirm": "Forjettar", + "confirmations.discard_edit_media.message": "Tu have ínconservat changes al descrition de medie o al previse, forjettar les sin egarda?", + "confirmations.domain_block.confirm": "Bloccar li tot dominia", + "confirmations.domain_block.message": "Esque tu es certissim que tu vole bloccar li tot {domain}? In mult casus, bloccar o silentiar quelc specific contos es suficent e preferibil. Tu ne va vider contenete de ti dominia in quelcunc public témpor-linea o in tui notificationes. Tui sequitores de ti dominia va esser removet.", + "confirmations.edit.confirm": "Redacter", + "confirmations.edit.message": "Redacter nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?", + "confirmations.logout.confirm": "Exear", + "confirmations.logout.message": "Esque tu vermen vole exear?", + "confirmations.mute.confirm": "Silentiar", + "confirmations.mute.explanation": "To-ci va celar postas de ilu e postas mentionant ilu, ma it ancor va permisser ilu vider tui postas e sequer te.", + "confirmations.mute.message": "Esque tu vermen vole silentiar {name}?", + "confirmations.redraft.confirm": "Deleter & redacter", + "confirmations.redraft.message": "Esque tu vermen vole deleter ti-ci posta e redacter it? Favorites e boosts va esser perdit, e responses al posta original va esser orfanat.", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?", + "confirmations.unfollow.confirm": "Dessequer", + "confirmations.unfollow.message": "Esque tu vermen vole dessequer {name}?", + "conversation.delete": "Deleter conversation", + "conversation.mark_as_read": "Marcar quam leet", + "conversation.open": "Vider conversation", + "conversation.with": "Con {names}", + "copypaste.copied": "Copiat", + "directory.federated": "Del conosset fediverse", + "directory.local": "De solmen {domain}", + "directory.new_arrivals": "Nov arivantes", + "directory.recently_active": "Recentmen activ", + "disabled_account_banner.account_settings": "Parametres del conto", + "dismissable_banner.community_timeline": "Tis-ci es li postas max recent de gente con contos che {domain}.", + "dismissable_banner.dismiss": "Demisser", + "dismissable_banner.explore_links": "Tis-ci es li novas max distribuet che li social retage hodie. Novas plu nov, postat de plu diferent persones, es monstrat plu alt.", + "dismissable_banner.explore_statuses": "Tis-ci es postas del social retage queles es popular hodie. Nov postas con plu mult boosts e favorites es monstrat plu alt.", + "dismissable_banner.explore_tags": "Tis-ci es hashtags queles es popular che li social retage hodie. Hashtags usat de plu mult persones diferent es monstrat plu alt.", + "dismissable_banner.public_timeline": "Tis-ci es li max recent public postas de persones che li social retage quem gente che {domain} seque.", + "embed.instructions": "Inbedar ti-ci posta per copiar li code in infra.", + "embed.preview": "Vi qualmen it va aspecter:", + "emoji_button.activity": "Activitá", + "emoji_button.clear": "Efaciar", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flaggas", + "emoji_button.food": "Manjage & Trincage", + "emoji_button.label": "Inserter emoji", + "emoji_button.nature": "Natura", + "emoji_button.not_found": "Null acordant emoji trovat", + "emoji_button.objects": "Objectes", + "emoji_button.people": "Gente", + "emoji_button.recent": "Frequentmen usat", + "emoji_button.search": "Sercha...", + "emoji_button.search_results": "Resultates de sercha", + "emoji_button.symbols": "Simboles", + "emoji_button.travel": "Viageation & Locos", + "empty_column.account_hides_collections": "Ti-ci usator ha selectet ne publicar ti-ci information", + "empty_column.account_suspended": "Conto suspendet", + "empty_column.account_timeline": "Null postas ci!", + "empty_column.account_unavailable": "Profil índisponibil", + "empty_column.blocks": "Tu ancor ha bloccat null usatores.", + "empty_column.bookmarked_statuses": "Tu ancor have null marcat postas. Quande tu marca un, it va aparir ci.", + "empty_column.community": "Li local témpor-linea es vacui. Scri alquo publicmen por initiar la festa!", + "empty_column.direct": "Tu ancor have null privat mentiones. Quande tu misse o recive un, it va aparir ci.", + "empty_column.domain_blocks": "Ancor hay null bloccat dominias.", + "empty_column.explore_statuses": "Nequo es popular actualmen. Retorna plu tarde!", + "empty_column.favourited_statuses": "Tu ancor have null favorit postas. Quande tu favoritisa un, it va aparir ci.", + "empty_column.favourites": "Ancor nequi ha favoritisat ti-ci posta. Quande alqui fa it, ilu va aparir ci.", + "empty_column.follow_requests": "Tu ancor have null petitiones de sequer. Quande tu recive un, it va aparir ci.", + "empty_column.followed_tags": "Tu ancor ha sequet null hashtags. Quande tu seque un, it va aparir ci.", + "empty_column.hashtag": "Hay nullcos en ti-ci hashtag ancor.", + "empty_column.home": "Tui hemal témpor-linea es vacui! Sequer plu gente por plenar it.", + "empty_column.list": "Ancor ne hay quocunc in ti-ci liste. Quande membres de ti-ci liste publica nov postas, ili va aparir ci.", + "empty_column.lists": "Tu ancor have null listes. Quande tu crea un, it va aparir ci.", + "empty_column.mutes": "Tu ancor ha silentiat null usatores.", + "empty_column.notifications": "Tu have null notificationes. Quande altri persones interacte con te, tu va vider it ci.", + "empty_column.public": "Hay nullcos ci! Scri alquo publicmen, o manualmen seque usatores de altri servitores por plenar to-ci", + "error.unexpected_crash.explanation": "Pro un error in nor code o un problema de compatibilitá in li navigator, ti-ci págine ne posset esser monstrat correctmen.", + "error.unexpected_crash.explanation_addons": "Ti-ci págine ne posset esser monstrat correctmen. Li error es probabilmen causat de un extension al navigator o instrumentes por automatic traduction.", + "error.unexpected_crash.next_steps": "Prova recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", + "error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", + "errors.unexpected_crash.report_issue": "Raportar un problema", + "explore.search_results": "Resultates de sercha", + "explore.suggested_follows": "Gente", + "explore.title": "Explorar", + "explore.trending_links": "Novas", + "explore.trending_statuses": "Postas", + "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "Ti-ci filtre-categorie ne aplica al contextu in quel tu ha accessat ti-ci posta. Si tu vole que li posta es filtrat anc in ti-ci contextu, tu deve redacter li filtre.", + "filter_modal.added.context_mismatch_title": "Contextu íncompatibil!", + "filter_modal.added.expired_explanation": "Ti-ci filtre-categorie ha expirat, tu deve changear li date de expiration por far it aplicar.", + "filter_modal.added.expired_title": "Expirat filtre!", + "filter_modal.added.review_and_configure": "Por reviser e configurar ti-ci filtre-categorie, ea a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Parametres pri filtres", + "filter_modal.added.settings_link": "págine por parametres", + "filter_modal.added.short_explanation": "Ti-ci post ha esset adjuntet al sequente filtre-categorie: {title}.", + "filter_modal.added.title": "Filtre adjuntet!", + "filter_modal.select_filter.context_mismatch": "ne aplica a ti-ci contextu", + "filter_modal.select_filter.expired": "expirat", + "filter_modal.select_filter.prompt_new": "Nov categorie: {name}", + "filter_modal.select_filter.search": "Serchar o crear", + "filter_modal.select_filter.subtitle": "Usar un existent categorie o crear nov", + "filter_modal.select_filter.title": "Filtrar ti-ci posta", + "filter_modal.title.status": "Filtrar un posta", + "firehose.all": "Omno", + "firehose.local": "Ti-ci servitor", + "firehose.remote": "Altri servitores", + "follow_request.authorize": "Autorisar", + "follow_request.reject": "Rejecter", + "follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.", + "followed_tags": "Sequet hashtags", + "footer.about": "Information", + "footer.directory": "Profilarium", + "footer.get_app": "Obtener li aplication", + "footer.invite": "Invitar gente", + "footer.privacy_policy": "Politica pri privatie", + "footer.source_code": "Vider li fonte-code", + "footer.status": "Statu", + "generic.saved": "Conservat", + "getting_started.heading": "Qualmen comensar", + "hashtag.column_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "Null suggestiones trovat", + "hashtag.column_settings.select.placeholder": "Inscrir hashtags…", + "hashtag.column_settings.tag_mode.all": "Omni tis", + "hashtag.column_settings.tag_mode.any": "Quelcunc de tis", + "hashtag.column_settings.tag_mode.none": "Necun de tis", + "hashtag.column_settings.tag_toggle": "Include additional hashtags in ti-ci columne", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} posta} other {{counter} postas}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posta} other {{counter} postas}} hodie", + "hashtag.follow": "Sequer hashtag", + "hashtag.unfollow": "Dessequer hashtag", + "hashtags.and_other": "…e {count, plural, other {# in plu}}", + "home.actions.go_to_explore": "Vider lu populari", + "home.actions.go_to_suggestions": "Trovar gente por sequer", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Monstrar boosts", + "home.column_settings.show_replies": "Monstrar responses", + "home.explore_prompt.body": "Tui hemal témpor-linea have un mixtura del hashtags queles tu selectet sequer, li gente quem tu selectet sequer, e li postas queles ili boosta. Si to sembla tro quiet, tu fórsan vole:", + "home.explore_prompt.title": "To-ci es tui hemal págine in Mastodon.", + "home.hide_announcements": "Celar proclamationes", + "home.pending_critical_update.body": "Ples actualisar tui Mastodon-servitor tam rapid quam es possibil!", + "home.pending_critical_update.link": "Vider actualisationes", + "home.pending_critical_update.title": "Urgent actualisation de securitá disponibil!", + "home.show_announcements": "Monstrar proclamationes", + "interaction_modal.description.favourite": "Con un conto de Mastodon, tu posse favoritisar ti-ci posta por informar li autor pri quant mult tu aprecia it e conservar it por plu tard.", + "interaction_modal.description.follow": "Con un conto de Mastodon, tu posse sequer {name} por reciver su postas in tui hemal témpor-linea.", + "interaction_modal.description.reblog": "Con un conto de Mastodon, tu posse boostar ti-ci posta por distribuer it a tui propri sequitores.", + "interaction_modal.description.reply": "Con un conto de Mastodon, tu posse responder a ti-ci posta.", + "interaction_modal.login.action": "Retorna a hem", + "interaction_modal.login.prompt": "Dominia de tui hemal servitor, p.ex. mastodon.social", + "interaction_modal.no_account_yet": "Ne sur Mastodon?", + "interaction_modal.on_another_server": "Sur un servitor diferent", + "interaction_modal.on_this_server": "Sur ti-ci servitor", + "interaction_modal.sign_in": "Tu ne ha initiat session che ti-ci servitor. U logia tui conto?", + "interaction_modal.title.favourite": "Favoritisar li posta de {name}", + "interaction_modal.title.follow": "Sequer {name}", + "interaction_modal.title.reblog": "Boostar li posta de {name}", + "interaction_modal.title.reply": "Responder al posta de {name}", + "intervals.full.days": "{number, plural, one {# die} other {# dies}}", + "intervals.full.hours": "{number, plural, one {# hor} other {# hores}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "Retroear", + "keyboard_shortcuts.blocked": "Aperter li lista de bloccat usatores", + "keyboard_shortcuts.boost": "Boostar posta", + "keyboard_shortcuts.column": "Infocar columne", + "keyboard_shortcuts.compose": "Infocar li text-area de composition", + "keyboard_shortcuts.description": "Descrition", + "keyboard_shortcuts.direct": "por aperter li columne de privat mentiones", + "keyboard_shortcuts.down": "Mover ad-infra in li liste", + "keyboard_shortcuts.enter": "Aperter posta", + "keyboard_shortcuts.favourite": "Favoritisar posta", + "keyboard_shortcuts.favourites": "Aperter li liste de favorites", + "keyboard_shortcuts.federated": "Aperter li federat témpor-linea", + "keyboard_shortcuts.home": "Aperter li hemal témpor-linea", + "keyboard_shortcuts.local": "Aperter li local témpor-linea", + "keyboard_shortcuts.mention": "Mentionar li autor", + "keyboard_shortcuts.muted": "Aperter li lista de silentiat usatores", + "keyboard_shortcuts.my_profile": "Aperter tui profil", + "keyboard_shortcuts.notifications": "Aperter li columne de notificationes", + "keyboard_shortcuts.open_media": "Aperter medie", + "keyboard_shortcuts.pinned": "Aperter li liste de pinglat postas", + "keyboard_shortcuts.profile": "Aperter profil del autor", + "keyboard_shortcuts.reply": "Responder al posta", + "keyboard_shortcuts.requests": "Aperter liste de seque-petitiones", + "keyboard_shortcuts.toggle_sensitivity": "Monstrar/celar medie", + "keyboard_shortcuts.toot": "Crear un nov posta", + "keyboard_shortcuts.up": "Mover ad-supra in li liste", + "lightbox.close": "Cluder", + "lightbox.next": "Sequent", + "lightbox.previous": "Precedent", + "limited_account_hint.action": "Monstrar profil totvez", + "limited_account_hint.title": "Ti-ci profil ha esset celat del moderatores de {domain}.", + "link_preview.author": "De {name}", + "lists.account.add": "Adjunter a liste", + "lists.account.remove": "Remover de liste", + "lists.delete": "Deleter liste", + "lists.edit": "Redacter liste", + "lists.edit.submit": "Changear titul", + "lists.exclusive": "Celar ti-ci postas del hemal témpor-linea", + "lists.new.create": "Adjunter liste", + "lists.new.title_placeholder": "Titul del nov liste", + "lists.replies_policy.followed": "Quelcunc sequet usator", + "lists.replies_policy.list": "Membres del liste", + "lists.replies_policy.none": "Nequi", + "lists.replies_policy.title": "Monstrar responses a:", + "lists.search": "Serchar inter li persones quem tu seque", + "lists.subheading": "Tui listes", + "load_pending": "{count, plural, one {# nov element} other {# nov elementes}}", + "loading_indicator.label": "Cargant…", + "media_gallery.toggle_visible": "{number, plural, one {Celar image} other {Celar images}}", + "moved_to_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat pro que tu movet te a {movedToAccount}.", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Celar notificationes de ti-ci usator?", + "mute_modal.indefinite": "Índefinit", + "navigation_bar.about": "Information", + "navigation_bar.blocks": "Bloccat usatores", + "navigation_bar.bookmarks": "Marcatores", + "navigation_bar.community_timeline": "Local témpor-linea", + "navigation_bar.compose": "Composir un nov posta", + "navigation_bar.direct": "Privat mentiones", + "navigation_bar.discover": "Decovrir", + "navigation_bar.domain_blocks": "Bloccat dominias", + "navigation_bar.edit_profile": "Redacter profil", + "navigation_bar.explore": "Explorar", + "navigation_bar.favourites": "Favorites", + "navigation_bar.filters": "Silentiat paroles", + "navigation_bar.follow_requests": "Petitiones de sequer", + "navigation_bar.followed_tags": "Sequet hashtags", + "navigation_bar.follows_and_followers": "Sequetes e sequitores", + "navigation_bar.lists": "Listes", + "navigation_bar.logout": "Exear", + "navigation_bar.mutes": "Silentiat usatores", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinglat postas", + "navigation_bar.preferences": "Preferenties", + "navigation_bar.public_timeline": "Federat témpor-linea", + "navigation_bar.search": "Sercha", + "navigation_bar.security": "Securitá", + "not_signed_in_indicator.not_signed_in": "On deve aperter session por accesser ti-ci ressurse.", + "notification.admin.report": "{name} raportat {target}", + "notification.admin.sign_up": "{name} adheret", + "notification.favourite": "{name} favoritisat tui posta", + "notification.follow": "{name} sequet te", + "notification.follow_request": "{name} ha petit sequer te", + "notification.mention": "{name} mentionat te", + "notification.own_poll": "Tui balotation ha finit", + "notification.poll": "Un balotation in quel tu votat ha finit", + "notification.reblog": "{name} boostat tui posta", + "notification.status": "{name} just postat", + "notification.update": "{name} modificat un posta", + "notifications.clear": "Aclarar notificationes", + "notifications.clear_confirmation": "Vole tu vermen permanentmen aclarar omni tui notificationes?", + "notifications.column_settings.admin.report": "Nov raportas:", + "notifications.column_settings.admin.sign_up": "Nov registrationes:", + "notifications.column_settings.favourite": "Favorites:", + "notifications.column_settings.filter_bar.advanced": "Monstrar omni categories", + "notifications.column_settings.follow": "Nov sequitores:", + "notifications.column_settings.follow_request": "Nov petitiones de sequer:", + "notifications.column_settings.mention": "Mentiones:", + "notifications.column_settings.poll": "Resultates del balotation:", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Monstrar in columne", + "notifications.column_settings.sound": "Far son", + "notifications.column_settings.status": "Nov postas:", + "notifications.column_settings.unread_notifications.category": "Ínleet notificationes", + "notifications.column_settings.unread_notifications.highlight": "Marcar ínleet notificationes", + "notifications.column_settings.update": "Redactiones:", + "notifications.filter.all": "Omni", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favorites", + "notifications.filter.follows": "Seques", + "notifications.filter.mentions": "Mentiones", + "notifications.filter.polls": "Resultates del balotation", + "notifications.filter.statuses": "Actualisationes de gente quem tu seque", + "notifications.grant_permission": "Dar permission.", + "notifications.group": "{count} notificationes", + "notifications.mark_as_read": "Marcar omni notificationes quam leet", + "onboarding.action.back": "Retroear", + "onboarding.actions.back": "Retroear", + "onboarding.actions.go_to_explore": "Ear a vider lu populari", + "onboarding.actions.go_to_home": "Ear al hemal témpor-linea", + "onboarding.compose.template": "Salute #Mastodon!", + "onboarding.follows.empty": "Ínfortunatmen, null resultates posse esser monstrat actualmen. Tu posse provar serchar o usar li \"Explorar\" págine por trovar gente por sequer, o prova denov plu tard.", + "onboarding.follows.lead": "Tui hemal témpor-linea es li primari maniere de experir Mastodon. Plu persones quem tu seque, plu activ e interessant it va esser. Por auxiliar te comensar, vi quelc suggestiones:", + "onboarding.follows.title": "Personalisar tui hemal témpor-linea", + "onboarding.profile.discoverable": "Fa mi profil decovribil", + "onboarding.profile.discoverable_hint": "Quande tu opta esser decovribil in Mastodon, tui postas posse aparir in resultates de sercha e tendenties, e tui profil posse esser suggestet a persones con interesses simil a tui.", + "onboarding.profile.display_name": "Nómine a monstrar", + "onboarding.profile.display_name_hint": "Tui complet nómine o tui amusant nómine…", + "onboarding.profile.lead": "Tu sempre posse completar ti-ci plu tard in li parametres, u mem plu optiones de customisation es disponibil.", + "onboarding.profile.note": "Biografie", + "onboarding.profile.note_hint": "Tu posse @mentionar altri persones o #hashtags…", + "onboarding.profile.save_and_continue": "Conservar e avansar", + "onboarding.profile.title": "Popular tu profil", + "onboarding.profile.upload_avatar": "Cargar profil-portrete", + "onboarding.profile.upload_header": "Cargar cap-image", + "onboarding.share.lead": "Di gente qualmen ili posse trovar te che Mastodon!", + "onboarding.share.message": "Yo es {username} che #Mastodon! Veni e seque me a {url}", + "onboarding.share.next_steps": "Possibil sequent passus:", + "onboarding.share.title": "Partir tui profil", + "onboarding.start.lead": "Tu es ja un parte de Mastodon, un unic, decentralisat platform de medie social in quel tu—ne un algoritme—selectiona tui propri experientie. Lass nos departer sur un nov frontiera social:", + "onboarding.start.skip": "Auxilie por comensar ne besonat?", + "onboarding.start.title": "Tu ha successat!", + "onboarding.steps.follow_people.body": "Sequer interessant gente es to quo importa in Mastodon.", + "onboarding.steps.follow_people.title": "Personalisar tui hemal témpor-linea", + "onboarding.steps.publish_status.body": "Saluta li munde con text, images, videos o balotationes {emoji}", + "onboarding.steps.publish_status.title": "Crear tui unesim posta", + "onboarding.steps.setup_profile.title": "Personalisar tui profil", + "onboarding.steps.share_profile.body": "Di tui amics qualmen trovar te che Mastodon", + "onboarding.steps.share_profile.title": "Partir tui profil Mastodon", + "password_confirmation.exceeds_maxlength": "Confirmation de passa-parol transpassa li maxim longore de passa-paroles", + "password_confirmation.mismatching": "Confirmation de passa-parol ne egala", + "picture_in_picture.restore": "Restaurar", + "poll.closed": "Finit", + "poll.refresh": "Recargar", + "poll.reveal": "Vider resultates", + "poll.total_people": "{count, plural, one {# person} other {# persones}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Votar", + "poll.voted": "Tu votat por ti-ci option", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll_button.add_poll": "Adjunter un balotation", + "poll_button.remove_poll": "Remover balotation", + "privacy.change": "Changear li privatie del posta", + "privacy.direct.long": "Visibil solmen a mentionat usatores", + "privacy.direct.short": "Solmen persones mentionat", + "privacy.private.long": "Visibil solmen por sequitores", + "privacy.private.short": "Solmen sequitores", + "privacy.public.long": "Visibil a omnes", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visibil por omnes, ma excludet de functiones de decovrition", + "privacy.unlisted.short": "Delistat", + "privacy_policy.last_updated": "Ultimmen actualisat ye {date}", + "privacy_policy.title": "Politica pri Privatie", + "recommended": "Recomandat", + "refresh": "Recargar", + "regeneration_indicator.label": "Cargant…", + "regeneration_indicator.sublabel": "On es preparant tui hemal témpor-linea!", + "relative_time.days": "{number}d", + "relative_time.full.days": "Ante {number, plural, one {# die} other {# dies}}", + "relative_time.full.hours": "Ante {number, plural, one {# hor} other {# hores}}", + "relative_time.full.just_now": "just nu", + "relative_time.full.minutes": "Ante {number, plural, one {# minute} other {# minutes}}", + "relative_time.full.seconds": "Ante {number, plural, one {# second} other {# secondes}}", + "relative_time.hours": "{number}h", + "relative_time.just_now": "nu", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "hodie", + "reply_indicator.cancel": "Anullar", + "report.block": "Bloccar", + "report.block_explanation": "Tu ne va vider su postas. Li usator ni va posser vider tui postas, ni sequer te, ni va posser saver pri li statu de esser bloccat.", + "report.categories.legal": "Legal", + "report.categories.other": "Altricos", + "report.categories.spam": "Spam", + "report.categories.violation": "Contenete violant un o pluri regules del servitor", + "report.category.subtitle": "Selecte li max bon option", + "report.category.title": "Di nos quo passa con ti-ci {type}", + "report.category.title_account": "profil", + "report.category.title_status": "posta", + "report.close": "Finit", + "report.comment.title": "Hay alquo plu quel tu pensa que noi deve saver?", + "report.forward": "Misser anc a {target}", + "report.forward_hint": "Ti-ci conto es de un altri servitor. Misser un anonimisat copie del raporte anc a ta?", + "report.mute": "Silentiar", + "report.mute_explanation": "Tu ne va vider su postas. Ilu ancor posse sequer te e vider tui postas e ne va saver que ilu es silentiat.", + "report.next": "Sequent", + "report.placeholder": "Additional comentas", + "report.reasons.dislike": "It ne plese me", + "report.reasons.dislike_description": "It es alquo quel displese te", + "report.reasons.legal": "It es ínlegal", + "report.reasons.legal_description": "Tu crede que it viola un lege del land de te o de tui servitor", + "report.reasons.other": "It es altricos", + "report.reasons.other_description": "Li problema ne apartene in li altri categories", + "report.reasons.spam": "It es spam", + "report.reasons.spam_description": "Maliciosi ligamentes, fals activitá, o repetitiv responses", + "report.reasons.violation": "It viola li regules del servitor", + "report.reasons.violation_description": "Tu save que it viola specific regules", + "report.rules.subtitle": "Selecte omnes queles aplica", + "report.rules.title": "Quel regules es violat?", + "report.statuses.subtitle": "Selecte omnes queles aplica", + "report.statuses.title": "Hay postas queles posse subtener ti-ci raporte?", + "report.submit": "Misser", + "report.target": "Raportant {target}", + "report.thanks.take_action": "Tis-ci es tui optiones por controlar ti quel tu vide che Mastodon:", + "report.thanks.take_action_actionable": "Durante que noi tracta ti-ci, tu posse far lu sequent contra @{name}:", + "report.thanks.title": "Vole tu ne vider to?", + "report.thanks.title_actionable": "Mersí pro raportar, noi va investigar to.", + "report.unfollow": "Dessequer @{name}", + "report.unfollow_explanation": "Tu seque ti-ci conto. Por ne vider su postas en tui hemal témpor-linea, dessequer it.", + "report_notification.attached_statuses": "{count, plural, one {{count} posta} other {{count} postas}} atachat", + "report_notification.categories.legal": "Legal", + "report_notification.categories.other": "Altricos", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violation de regul", + "report_notification.open": "Aperter raporta", + "search.no_recent_searches": "Null recent serchas", + "search.placeholder": "Serchar", + "search.quick_action.account_search": "Profiles acordant con {x}", + "search.quick_action.go_to_account": "Ear al profil {x}", + "search.quick_action.go_to_hashtag": "Ear al hashtag {x}", + "search.quick_action.open_url": "Aperter URL in Mastodon", + "search.quick_action.status_search": "Postas acordant con {x}", + "search.search_or_paste": "Serchar o glutinar URL", + "search_popout.full_text_search_disabled_message": "Ne disponibil che {domain}.", + "search_popout.full_text_search_logged_out_message": "Solmen disponibil con session initiat.", + "search_popout.options": "Sercha-parametres", + "search_popout.quick_actions": "Rapid actiones", + "search_popout.recent": "Recent serchas", + "search_popout.specific_date": "specific date", + "search_popout.user": "usator", + "search_results.accounts": "Profiles", + "search_results.all": "Omni", + "search_results.hashtags": "Hashtags", + "search_results.nothing_found": "Trovat se nullcos por ti término de sercha", + "search_results.see_all": "Vider omni", + "search_results.statuses": "Postas", + "search_results.title": "Sercha por {q}", + "server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)", + "server_banner.active_users": "activ usatores", + "server_banner.administered_by": "Administrat de:", + "server_banner.introduction": "{domain} es un part del decentralisat social retage constructet sur {mastodon}.", + "server_banner.learn_more": "Aprender plu", + "server_banner.server_stats": "Statisticas pri li servitor:", + "sign_in_banner.create_account": "Crear un conto", + "sign_in_banner.sign_in": "Intrar", + "sign_in_banner.sso_redirect": "Intrar o registrar se", + "sign_in_banner.text": "Intrar por sequer profiles o hashtags, favoritisar, partir e responder a postas. Tu posse anc interacter per tui conto che un diferent servitor.", + "status.admin_account": "Aperter interfacie de moderation por @{name}", + "status.admin_domain": "Aperter interfacie de moderation por {domain}", + "status.admin_status": "Aperter ti-ci posta in li interfacie de moderation", + "status.block": "Bloccar @{name}", + "status.bookmark": "Marcar", + "status.copy": "Copiar ligament al posta", + "status.delete": "Deleter", + "status.detailed_status": "Detalliat vise de conversation", + "status.direct": "Privatmen mentionar @{name}", + "status.direct_indicator": "Privat mention", + "status.edit": "Modificar", + "status.edited": "Modificat ye {date}", + "status.edited_x_times": "Modificat {count, plural, one {{count} vez} other {{count} vezes}}", + "status.embed": "Inbedar", + "status.favourite": "Favoritisar", + "status.filter": "Filtrar ti-ci posta", + "status.filtered": "Filtrat", + "status.hide": "Celar posta", + "status.history.created": "creat de {name} ye {date}", + "status.history.edited": "modificat de {name} ye {date}", + "status.load_more": "Cargar plu", + "status.media.open": "Cliccar por aperter", + "status.media.show": "Cliccar por monstrar", + "status.media_hidden": "Medie celat", + "status.mention": "Mentionar @{name}", + "status.more": "Plu", + "status.mute": "Silentiar @{name}", + "status.mute_conversation": "Silentiar conversation", + "status.open": "Expander ti-ci posta", + "status.pin": "Pinglar sur profil", + "status.pinned": "Pinglat posta", + "status.read_more": "Leer plu", + "status.redraft": "Deleter & redacter", + "status.remove_bookmark": "Remover marcator", + "status.replied_to": "Respondet a {name}", + "status.reply": "Responder", + "status.replyAll": "Responder al fil", + "status.report": "Raportar @{name}", + "status.sensitive_warning": "Sensitiv contenete", + "status.share": "Partir", + "status.show_filter_reason": "Monstrar totvez", + "status.show_less": "Monstrar minu", + "status.show_less_all": "Monstrar minu por omno", + "status.show_more": "Monstrar plu", + "status.show_more_all": "Monstrar plu por omno", + "status.show_original": "Monstrar li original", + "status.title.with_attachments": "{user} postat {attachmentCount, plural, one {un atachament} other {{attachmentCount} atachamentes}}", + "status.translate": "Traducter", + "status.translated_from_with": "Traductet de {lang} per {provider}", + "status.uncached_media_warning": "Previse ne disponibil", + "status.unmute_conversation": "Dessilentiar conversation", + "status.unpin": "Despinglar de profil", + "subscribed_languages.lead": "Solmen postas in selectet lingues va aparir in tui hemal e listal témpor-lineas pos li change. Selecte null por reciver postas in omni lingues.", + "subscribed_languages.save": "Conservar changes", + "subscribed_languages.target": "Changear abonnat lingues por {target}", + "tabs_bar.home": "Hem", + "tabs_bar.notifications": "Notificationes", + "time_remaining.days": "{number, plural, one {# die} other {# dies}} resta", + "time_remaining.hours": "{number, plural, one {# hor} other {# hores}} resta", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} resta", + "time_remaining.moments": "Momentes resta", + "time_remaining.seconds": "{number, plural, one {# second} other {# secondes}} resta", + "timeline_hint.remote_resource_not_displayed": "{resource} de altri servitores ne es monstrat.", + "timeline_hint.resources.followers": "Sequitores", + "timeline_hint.resources.follows": "Sequetes", + "timeline_hint.resources.statuses": "Plu old postas", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} persones}} durant li ultim {days, plural, one {die} other {{days} dies}}", + "trends.trending_now": "Actualmen populari", + "ui.beforeunload": "Tui íncomplet posta va esser perdit si tu lassa Mastodon.", + "upload_area.title": "Trenar & lassar cader por cargar", + "upload_button.label": "Adjunter images, un video o un audio-file", + "upload_error.limit": "Límite de medie-cargationes transpassat.", + "upload_error.poll": "On ne es permisset cargar medie con balotationes.", + "upload_form.audio_description": "Descrir por persones qui es surd o ne audi bon", + "upload_form.description": "Descrir por persones qui es ciec o have mal vision", + "upload_form.description_missing": "Null descrition adjuntet", + "upload_form.edit": "Redacter", + "upload_form.thumbnail": "Changear previsual image", + "upload_form.undo": "Deleter", + "upload_form.video_description": "Descrir por persones qui es surd, ciec, ne audi bon, o have mal vision", + "upload_modal.analyzing_picture": "Analisant image…", + "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Aplicant…", + "upload_modal.choose_image": "Selecter image", + "upload_modal.detect_text": "Detecter text del image", + "upload_modal.edit_media": "Redacter medie", + "upload_modal.hint": "Clicca o trena li circul por selecter li focal punctu quel va esser sempre visibil in omni previse-images.", + "upload_modal.preparing_ocr": "Preparant OCR…", + "upload_modal.preview_label": "Previse ({ratio})", + "upload_progress.label": "Cargant...", + "upload_progress.processing": "Tractant…", + "username.taken": "Ti usator-nómine es ja prendet. Trova altri", + "video.close": "Cluder video", + "video.download": "Descargar file", + "video.exit_fullscreen": "Exear plen-ecran", + "video.expand": "Expander video", + "video.fullscreen": "Plen-ecran", + "video.hide": "Celar video", + "video.mute": "Silentiar li son", + "video.pause": "Pausar", + "video.play": "Reproducter", + "video.unmute": "Dessilentiar li son" +} diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 552debdb50..ba44408935 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -20,6 +20,7 @@ "account.blocked": "Blokusita", "account.browse_more_on_origin_server": "Videz pluse che la originala profilo", "account.cancel_follow_request": "Desendez sequodemando", + "account.copy": "Kopiez ligilo al profilo", "account.direct": "Private mencionez @{name}", "account.disable_notifications": "Cesez avizar me kande @{name} postas", "account.domain_blocked": "Domain hidden", @@ -38,7 +39,8 @@ "account.follows.empty": "Ca uzanto ne sequa irgu til nun.", "account.follows_you": "Sequas tu", "account.go_to_profile": "Irez al profilo", - "account.hide_reblogs": "Celez busti de @{name}", + "account.hide_reblogs": "Celez repeti de @{name}", + "account.in_memoriam": "Memorige.", "account.joined_short": "Juntita", "account.languages": "Chanjez abonita lingui", "account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}", @@ -58,7 +60,7 @@ "account.requested": "Vartante aprobo", "account.requested_follow": "{name} demandis sequar tu", "account.share": "Partigez profilo di @{name}", - "account.show_reblogs": "Montrez busti de @{name}", + "account.show_reblogs": "Montrez repeti de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Posto} other {{counter} Posti}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Desblokusar {domain}", @@ -86,7 +88,7 @@ "attachments_list.unprocessed": "(neprocedita)", "audio.hide": "Celez audio", "autosuggest_hashtag.per_week": "{count} dum singla semano", - "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", + "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -180,7 +182,7 @@ "confirmations.mute.explanation": "Co celigos posti de oli e posti quo mencionas oli, ma ol ankore permisas oli vidar vua posti e sequar vu.", "confirmations.mute.message": "Ka vu certe volas silencigar {name}?", "confirmations.redraft.confirm": "Efacez e riskisez", - "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e busti esos perdita, e respondi al posto originala esos orfanigita.", + "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.", "confirmations.reply.confirm": "Respondez", "confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?", "confirmations.unfollow.confirm": "Desequez", @@ -189,6 +191,7 @@ "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", "conversation.with": "Kun {names}", + "copy_icon_button.copied": "Kopiita", "copypaste.copied": "Kopiesis", "copypaste.copy_to_clipboard": "Kopiez", "directory.federated": "De savita fediverso", @@ -200,7 +203,7 @@ "dismissable_banner.community_timeline": "Co esas maxim recenta publika posti de personi quo havas konto quo hostigesas da {domain}.", "dismissable_banner.dismiss": "Ignorez", "dismissable_banner.explore_links": "Ca nova rakonti parolesas da personi che ca e altra servili di necentraligita situo nun.", - "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu busti e favoriziti esas rangizita plu alte.", + "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.", "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.", "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.", "embed.instructions": "Embed this status on your website by copying the code below.", @@ -220,6 +223,7 @@ "emoji_button.search_results": "Trovuri", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Vizito & Plasi", + "empty_column.account_hides_collections": "Ca uzanto selektis ne publikigar ca informo", "empty_column.account_suspended": "Konto restriktesis", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profilo esas nedisponebla", @@ -294,14 +298,18 @@ "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} partoprenanto} other {{counter} partoprenanti}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} posto} other {{counter} posti}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posto} other {{counter} posti}} hodie", "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", + "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", "home.actions.go_to_explore": "Videz quo es populara nun", "home.actions.go_to_suggestions": "Trovez personi por sequar", "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", - "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili bustis. Se to semblas tro tacanta, vu darfas volar:", + "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili repetis. Se to semblas tro tacanta, vu darfas volar:", "home.explore_prompt.title": "Co es vua hemo en Mastodon.", "home.hide_announcements": "Celez anunci", "home.pending_critical_update.body": "Voluntez aktualigar vua Mastodon-servilo tam balde kam es posibla!", @@ -310,7 +318,7 @@ "home.show_announcements": "Montrez anunci", "interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.", "interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.", - "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas bustizar ca posti por partigar kun sua sequanti.", + "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.", "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.", "interaction_modal.login.action": "Irar a hemo", "interaction_modal.login.prompt": "Domeno di vua hemala servilo, ex. mastodon.social", @@ -321,14 +329,14 @@ "interaction_modal.sign_in_hint": "Averto: To es la retsituo ube vu kreis konto. Se vu ne rimemoras, serchez vua bonvenanta e-posto. Vu anke povas enpozar vua kompleta uzantnomo! (ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favorizez ca posto da {name}", "interaction_modal.title.follow": "Sequez {name}", - "interaction_modal.title.reblog": "Bustizez posto di {name}", + "interaction_modal.title.reblog": "Repetez posto di {name}", "interaction_modal.title.reply": "Respondez posto di {name}", "intervals.full.days": "{number, plural, one {# dio} other {# dii}}", "intervals.full.hours": "{number, plural, one {# horo} other {# hori}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "Repetez posto", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "Deskripto", @@ -383,6 +391,7 @@ "lists.search": "Trovez inter personi quon vu sequas", "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", + "loading_indicator.label": "Kargante…", "media_gallery.toggle_visible": "Chanjar videbleso", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", "mute_modal.duration": "Durado", @@ -448,7 +457,7 @@ "notifications.column_settings.unread_notifications.highlight": "Briligez nelektita avizi", "notifications.column_settings.update": "Modifikati:", "notifications.filter.all": "Omna", - "notifications.filter.boosts": "Busti", + "notifications.filter.boosts": "Repeti", "notifications.filter.favourites": "Favoriziti", "notifications.filter.follows": "Sequati", "notifications.filter.mentions": "Mencioni", @@ -471,6 +480,17 @@ "onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.profile.discoverable": "Trovebligez mea profilo", + "onboarding.profile.discoverable_hint": "Se vu selektas deskovrebleso che Mastodon, vua posti povas aparar en sercho-rezultaji e populari, e vua profilo forsan sugestesos a personi kun interesi simila a vua.", + "onboarding.profile.display_name": "Publika nomo", + "onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomo…", + "onboarding.profile.lead": "Vu sempre povas kompletigar co plu tarde en la opcioni, ube mem plua personalizanta opcioni es disponebla.", + "onboarding.profile.note": "Biografio", + "onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagi…", + "onboarding.profile.save_and_continue": "Preservez e avancez", + "onboarding.profile.title": "Kompletigez la profilo", + "onboarding.profile.upload_avatar": "Kargez profiloportreto", + "onboarding.profile.upload_header": "Kargez profilokapimajo", "onboarding.share.lead": "Savigez personi quale ili povas trovar vu che Mastodon!", "onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}", "onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:", @@ -482,7 +502,7 @@ "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Facar vua unesma posto", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", @@ -510,6 +530,7 @@ "privacy.unlisted.short": "Ne enlistigota", "privacy_policy.last_updated": "Antea novajo ye {date}", "privacy_policy.title": "Privatesguidilo", + "recommended": "Rekomendata", "refresh": "Rifreshez", "regeneration_indicator.label": "Chargas…", "regeneration_indicator.sublabel": "Vua hemniuzeto preparesas!", @@ -580,6 +601,8 @@ "search.quick_action.status_search": "Posti qui asortas {x}", "search.search_or_paste": "Serchar o pozar URL", "search_popout.full_text_search_disabled_message": "Nedisponebla che {domain}.", + "search_popout.full_text_search_logged_out_message": "Nur disponebla enirite.", + "search_popout.language_code": "ISO linguokodexo", "search_popout.options": "Opcioni serchala", "search_popout.quick_actions": "Agi rapida", "search_popout.recent": "Lasta serchi", @@ -607,8 +630,8 @@ "status.admin_status": "Open this status in the moderation interface", "status.block": "Restriktez @{name}", "status.bookmark": "Libromarko", - "status.cancel_reblog_private": "Debustez", - "status.cannot_reblog": "Ca posto ne povas bustesas", + "status.cancel_reblog_private": "Desrepetez", + "status.cannot_reblog": "Ca posto ne povas repetesar", "status.copy": "Copy link to status", "status.delete": "Efacar", "status.detailed_status": "Detala konversvido", @@ -636,10 +659,10 @@ "status.pin": "Pinglagez che profilo", "status.pinned": "Pinned toot", "status.read_more": "Lektez pluse", - "status.reblog": "Repetar", - "status.reblog_private": "Bustez kun originala videbleso", - "status.reblogged_by": "{name} repetita", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblog": "Repetez", + "status.reblog_private": "Repetez kun originala videbleso", + "status.reblogged_by": "{name} repetis", + "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", "status.remove_bookmark": "Efacez libromarko", "status.replied_to": "Respondis a {name}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 3cb0565d0e..5ad9d6dc94 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -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": "ドメインブロック中", @@ -192,7 +192,7 @@ "conversation.mark_as_read": "既読にする", "conversation.open": "会話を表示", "conversation.with": "{names}", - "copy_icon_button.copied": "クリップボードにコピーされた", + "copy_icon_button.copied": "コピーしました", "copypaste.copied": "コピーしました", "copypaste.copy_to_clipboard": "クリップボードにコピー", "directory.federated": "既知の連合より", @@ -392,7 +392,7 @@ "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", "load_pending": "{count}件の新着", - "loading_indicator.label": "", + "loading_indicator.label": "読み込み中…", "media_gallery.toggle_visible": "{number, plural, one {画像を閉じる} other {画像を閉じる}}", "moved_to_account_banner.text": "あなたのアカウント『{disabledAccount}』は『{movedToAccount}』に移動したため現在無効になっています。", "mute_modal.duration": "ミュートする期間", @@ -481,17 +481,17 @@ "onboarding.follows.empty": "表示できる結果はありません。検索やエクスプローラーを使ったり、ほかのアカウントをフォローしたり、後でもう一度試しください。", "onboarding.follows.lead": "ホームタイムラインはMastodonの軸足となる場所です。たくさんのユーザーをフォローすることで、ホームタイムラインはよりにぎやかでおもしろいものになります。手はじめに、おすすめのアカウントから何人かフォローしてみましょう:", "onboarding.follows.title": "ホームタイムラインを埋める", - "onboarding.profile.discoverable": "自分のプロフィールが発見できないようにする", - "onboarding.profile.discoverable_hint": "マストドンの見つけやすくする機能が個人情報を利用することに承諾すると、あなたの投稿が検索結果やトレンドに表示されることがあります。また、あなたのプロフィールがあなたと似た興味関心を持つ人に提案されることがあります。", + "onboarding.profile.discoverable": "自分のプロフィールが見つけられるようにする", + "onboarding.profile.discoverable_hint": "Mastodonの「見つける」機能にオプトインすると、あなたの投稿が検索結果やトレンドに表示されることがあります。また、あなたに似た関心を持つ人にプロフィールがおすすめされることがあります。", "onboarding.profile.display_name": "表示名", - "onboarding.profile.display_name_hint": "あなたのフルネーム、または楽しい名前…", - "onboarding.profile.lead": "このことは後でいつでも設定から完了させることが出来ますし、設定では更に多くのカスタマイズが利用可能になっています。", + "onboarding.profile.display_name_hint": "フルネーム、あるいは面白い名前など", + "onboarding.profile.lead": "あとでいつでも修正できますし、設定画面にはこれ以外のカスタマイズ項目もあります。", "onboarding.profile.note": "自己紹介", - "onboarding.profile.note_hint": "@を使用して他の人々にメンションをすることができます。また#でハッシュタグが使用できます", - "onboarding.profile.save_and_continue": "保存してから続行して下さい", + "onboarding.profile.note_hint": "ほかの人に @言及 したり、#ハッシュタグ を付けたりできます", + "onboarding.profile.save_and_continue": "保存して続ける", "onboarding.profile.title": "プロフィールの設定", - "onboarding.profile.upload_avatar": "プロフィール画像をアップロードしてください", - "onboarding.profile.upload_header": "プロフィールのヘッダー画像をアップロードして下さい", + "onboarding.profile.upload_avatar": "プロフィール画像をアップロード", + "onboarding.profile.upload_header": "プロフィールのヘッダー画像をアップロード", "onboarding.share.lead": "新しいMastodonのアカウントをみんなに紹介しましょう。", "onboarding.share.message": "「{username}」で #Mastodon はじめました! {url}", "onboarding.share.next_steps": "次のステップに進む:", @@ -606,6 +606,7 @@ "search.quick_action.status_search": "{x}に該当する投稿", "search.search_or_paste": "検索またはURLを入力", "search_popout.full_text_search_disabled_message": "{domain}では利用できません。", + "search_popout.full_text_search_logged_out_message": "ログイン時のみ利用できます。", "search_popout.language_code": "ISO言語コード", "search_popout.options": "検索オプション", "search_popout.quick_actions": "クイック操作", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json new file mode 100644 index 0000000000..ffdc044412 --- /dev/null +++ b/app/javascript/mastodon/locales/lad.json @@ -0,0 +1,649 @@ +{ + "about.blocks": "Sirvidores moderados", + "about.contact": "Kontakto:", + "about.disclaimer": "Mastodon es un programario libero, kon kodiche avierto i una marka komersiala de Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Razon no desponivle", + "about.domain_blocks.preamble": "Mastodon djeneralmente te permete ver kontenido de i enteraktuar kon utilizadores de kualseker otro sirvidor en el fediverso. Estas son las eksepsiones en este sirvidor en partikolar.", + "about.domain_blocks.silenced.explanation": "\"Djeneralmente no veras profiles i kontenido de este sirvidor, salvo ke eksplisitamente lo bushkes o sigas algun kuento de el.", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.explanation": "Dingunos datos de este sirvidor sera prosesado, magazinado o enterkambiado kon este sirvidor. Enteraksyon o komunikasyon kon sus utilizadores sera imposivle.", + "about.domain_blocks.suspended.title": "Suspendido", + "about.not_available": "Esta enformasyon no esta desponivle en este sirvidor.", + "about.powered_by": "Redes sosyalas desentralizadas kon uzo de {mastodon}", + "about.rules": "Reglas del sirvidor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjusta a o kita de listas", + "account.badges.bot": "Bot", + "account.badges.group": "Grupo", + "account.block": "Bloka @{name}", + "account.block_domain": "Bloka el domeno {domain}", + "account.block_short": "Bloka", + "account.blocked": "Blokado", + "account.browse_more_on_origin_server": "Ve mas en el profil orijinal", + "account.cancel_follow_request": "Anula solisitud de segir", + "account.copy": "Kopia atadijo de profil", + "account.direct": "Enmenta a @{name} en privado", + "account.disable_notifications": "No me avizes mas sovre publikasyones de @{name}", + "account.domain_blocked": "Domeno blokado", + "account.edit_profile": "Edita profil", + "account.enable_notifications": "Avizame kuando @{name} publike", + "account.endorse": "Avalia en profil", + "account.featured_tags.last_status_at": "Ultima publikasyon de {date}", + "account.featured_tags.last_status_never": "\"No ay publikasyones", + "account.featured_tags.title": "Etiketas avaliadas de {name}", + "account.follow": "Sige", + "account.followers": "Suivantes", + "account.followers.empty": "Por agora dingun no sige a este utilizador.", + "account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}", + "account.following": "Sigiendo", + "account.following_counter": "{count, plural, other {Sigiendo a {counter}}}", + "account.follows.empty": "Este utilizador ainda no sige a ningun.", + "account.follows_you": "Te sige", + "account.go_to_profile": "Va al profil", + "account.hide_reblogs": "Eskonde repartajasyones de @{name}", + "account.in_memoriam": "De bendicha memoria.", + "account.joined_short": "Adjunto", + "account.languages": "Troka linguas suskrividas", + "account.link_verified_on": "La propriedad de este atadijo fue verifikada el {date}", + "account.locked_info": "El estado de privasita de este konto esta konfigurado komo serado. El proprietario reviza manualmente kien le puede segir.", + "account.media": "Multimedia", + "account.mention": "Enmenta a @{name}", + "account.moved_to": "{name} tiene endikado ke su muevo kuento agora es:", + "account.mute": "Silensia a @{name}", + "account.mute_notifications_short": "Silensia avizos de @{name}", + "account.mute_short": "Silensia", + "account.muted": "Silensiado", + "account.no_bio": "No ay deskripsion.", + "account.open_original_page": "Avre pajina orijnala", + "account.posts": "Publikasyones", + "account.posts_with_replies": "Kon repuestas", + "account.report": "Raporta @{name}", + "account.requested": "Asperando achetasion. Klika para anular la solisitud de segimiento", + "account.requested_follow": "{name} tiene solisitado segirte", + "account.share": "Partaja el profil de @{name}", + "account.show_reblogs": "Amostra repartajasyones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", + "account.unblock": "Dezbloka @{name}", + "account.unblock_domain": "Dezbloka domeno {domain}", + "account.unblock_short": "Dezbloka", + "account.unendorse": "No avalia en profil", + "account.unfollow": "Desige", + "account.unmute": "Desilensia a @{name}", + "account.unmute_notifications_short": "Desilensia avizos", + "account.unmute_short": "Desilensia", + "account_note.placeholder": "Klika para adjustar nota", + "admin.dashboard.daily_retention": "Proporsyon de retensyon de utilizadores por diya dempues de enrejistrasyon", + "admin.dashboard.monthly_retention": "Proporsyon de retensyon de utilizadores por mez dempues de enrejistrasyon", + "admin.dashboard.retention.average": "Media", + "admin.dashboard.retention.cohort": "Mez de enrejistrasyon", + "admin.dashboard.retention.cohort_size": "Muevos utilizadores", + "alert.rate_limited.message": "Por favor aprova dempues de {retry_time, time, medium}.", + "alert.rate_limited.title": "Trafiko limitado", + "alert.unexpected.message": "Afito un yerro no asperado.", + "alert.unexpected.title": "Atyo!", + "announcement.announcement": "Pregon", + "attachments_list.unprocessed": "(no prosesado)", + "audio.hide": "Eskonder audio", + "autosuggest_hashtag.per_week": "{count} por semana", + "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", + "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", + "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", + "bundle_column_error.error.title": "Atyo, no!", + "bundle_column_error.network.body": "Uvo un yerro kon la prova de eskargar esta pajina. Esto puede ser por un problem temporal kon tu koneksyon a la internet o a este sirvidor.", + "bundle_column_error.network.title": "Yerro de red", + "bundle_column_error.retry": "Aprova de muevo", + "bundle_column_error.return": "Volta a la linya prinsipala", + "bundle_column_error.routing.body": "No se pudo trokar la pajina solisitada. Estas siguro ke el adreso URL en la vara de adreso es djusto?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Serra", + "bundle_modal_error.message": "Algo negro afito al eskargar este komponente.", + "bundle_modal_error.retry": "Aprova de muevo", + "closed_registrations.other_server_instructions": "Deke Mastodon es desentralizado, puedes kriyar un kuento en otro sirvidor i ainda enteraktuar kon este.", + "closed_registrations_modal.description": "Aktualmente no es posivle kriyar un kuento en {domain}, ama por favor akodrate de ke no ay menester de tener un kuento espesifikamente en {domain} para kulanear Mastodon.", + "closed_registrations_modal.find_another_server": "Bushka otro sirvidor", + "closed_registrations_modal.preamble": "Mastodon es desentralizado, estonses sin emportansya ande kriyas tu kuento, podras segir i enteraktuar kon kualseker persona en este sirvidor. Tamyen puedes balabayarlo tu mezmo!", + "closed_registrations_modal.title": "Enrerjistrate en Mastodon", + "column.about": "Sovre mozotros", + "column.blocks": "Utilizadores blokados", + "column.bookmarks": "Markadores", + "column.community": "Linya de tiempo lokala", + "column.direct": "Enmentaduras privadas", + "column.directory": "Eksplora profiles", + "column.domain_blocks": "Domenos blokados", + "column.favourites": "Te plazen", + "column.firehose": "Linyas en bivo", + "column.follow_requests": "Solisitudes de segimiento", + "column.home": "Linya prinsipala", + "column.lists": "Listas", + "column.mutes": "Utilizadores silensiados", + "column.notifications": "Avizos", + "column.pins": "Publikasyones fiksadas", + "column.public": "Linya de tiempo federada", + "column_back_button.label": "Atras", + "column_header.hide_settings": "Eskonde opsyones", + "column_header.moveLeft_settings": "Move kolumna a la siedra", + "column_header.moveRight_settings": "Move kolumna a la derecha", + "column_header.pin": "Fiksa", + "column_header.show_settings": "Amostra opsyones", + "column_header.unpin": "Defiksar", + "column_subheading.settings": "Opsyones", + "community.column_settings.local_only": "Solo lokalas", + "community.column_settings.media_only": "Solo multimedia", + "community.column_settings.remote_only": "Solo remotas", + "compose.language.change": "Troka lingua", + "compose.language.search": "Bushka linguas...", + "compose.published.body": "Publikasyon publikada.", + "compose.published.open": "Avre", + "compose.saved.body": "Publikasyon guadrada.", + "compose_form.direct_message_warning_learn_more": "Ambezate mas", + "compose_form.encryption_warning": "Publikasyones en Mastodon no son shifradas de lado a lado. No partajes dinguna enformasyon sensivle por Mastodon.", + "compose_form.hashtag_warning": "Esta publikasyon no sera amostrada debasho de dinguna etiketa si no es publika. Solo publikasyones publikas se pueden bushkar por la etiketa.", + "compose_form.lock_disclaimer": "Tu kuento no esta {locked}. Todos pueden segirte para ver tus publikasyones solo para suivantes.", + "compose_form.lock_disclaimer.lock": "serrado", + "compose_form.placeholder": "Ke haber?", + "compose_form.poll.add_option": "Adjusta opsyon", + "compose_form.poll.duration": "Durasion de anketa", + "compose_form.poll.option_placeholder": "Opsyon {number}", + "compose_form.poll.remove_option": "Kita esta opsyon", + "compose_form.poll.switch_to_multiple": "Trokar anketa para permeter a eskojer mas ke una opsyon", + "compose_form.poll.switch_to_single": "Trokar anketa para permeter a eskojer solo una opsyon", + "compose_form.publish": "Publika", + "compose_form.publish_form": "Mueva publikasyon", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Guadra trokamientos", + "compose_form.sensitive.hide": "{count, plural, one {Marka material komo sensivle} other {Marka material komo sensivle}}", + "compose_form.sensitive.marked": "{count, plural, one {Material markado komo sensivle} other {Material markado komo sensivle}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Material no markado komo sensivle} other {Material no markado komo sensivle}}", + "compose_form.spoiler.marked": "Kita avertensya de kontenido", + "compose_form.spoiler.unmarked": "Adjusta avertensya de kontenido", + "compose_form.spoiler_placeholder": "Eskrive tu avertensya aki", + "confirmation_modal.cancel": "Anula", + "confirmations.block.block_and_report": "Bloka i raporta", + "confirmations.block.confirm": "Bloka", + "confirmations.block.message": "Estas siguro ke keres blokar a {name}?", + "confirmations.cancel_follow_request.confirm": "Anula solisitud", + "confirmations.cancel_follow_request.message": "Estas siguro ke keres anular tu solisitud de segir a {name}?", + "confirmations.delete.confirm": "Efasa", + "confirmations.delete.message": "Estas siguro ke keres efasar esta publikasyon?", + "confirmations.delete_list.confirm": "Efasa", + "confirmations.delete_list.message": "Estas siguro ke keres permanentemente efasar esta lista?", + "confirmations.discard_edit_media.confirm": "Anula", + "confirmations.discard_edit_media.message": "Tienes trokamientos no guadrados en la deskripsion o vista previa. Keres efasarlos entanto?", + "confirmations.domain_block.confirm": "Bloka domeno entero", + "confirmations.domain_block.message": "Estas totalmente siguro ke keres blokar todo el domeno {domain}? En djeneral unos kuantos blokos o silensiamientos son sufisientes i preferavles. No veras kontenido de akel domeno en dinguna linya de tiempo publika ni ent tus avizos. Tus suivantes de akel domeno seran kitados.", + "confirmations.edit.confirm": "Edita", + "confirmations.edit.message": "Editar agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?", + "confirmations.logout.confirm": "Sal", + "confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?", + "confirmations.mute.confirm": "Silensia", + "confirmations.mute.explanation": "Esto eskondera las publikasyones de este kuento i publikasyones ke lo enmentan, pero ainda les permetera segirte.", + "confirmations.mute.message": "Estas siguro ke keres silensiar a {name}?", + "confirmations.redraft.confirm": "Efasar i reeskrivir", + "confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.", + "confirmations.reply.confirm": "Arisponde", + "confirmations.reply.message": "Arispondir agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?", + "confirmations.unfollow.confirm": "Desige", + "confirmations.unfollow.message": "Estas siguro ke keres deshar de segir a {name}?", + "conversation.delete": "Efasa konversasyon", + "conversation.mark_as_read": "Marka komo meldado", + "conversation.open": "Ve konversasyon", + "conversation.with": "Kon {names}", + "copy_icon_button.copied": "Kopiado al portapapeles", + "copypaste.copied": "Kopiado", + "copypaste.copy_to_clipboard": "Kopia al portapapeles", + "directory.federated": "Dizde el fediverso konesido", + "directory.local": "Solo de {domain}", + "directory.new_arrivals": "Arivados resientemente", + "directory.recently_active": "Aktivos resientemente", + "disabled_account_banner.account_settings": "Preferensyas de kuento", + "disabled_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado.", + "dismissable_banner.community_timeline": "Estas son las publikasyones publikas mas resientes de las personas kualos kuentos estan balabayados en {domain}.", + "dismissable_banner.dismiss": "Kita", + "dismissable_banner.explore_links": "Estos haberes estan diskutidos agora por djente en este sirvidor i otros de la red desentralizada.", + "dismissable_banner.explore_statuses": "Estas publikasyones de este sirvidor i otros de la red desentralizada estan agora popularas. Publikasyones mas muevas, kon mas repartajasiones i favoritadas por mas djente aparesen primero.", + "dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.", + "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.", + "embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.", + "embed.preview": "Ansi paresera:", + "emoji_button.activity": "Aktivita", + "emoji_button.clear": "Alimpia", + "emoji_button.custom": "Personalizado", + "emoji_button.flags": "Bandieras", + "emoji_button.food": "Kumidas i beverajes", + "emoji_button.label": "Adjustar emoji", + "emoji_button.nature": "Natura", + "emoji_button.not_found": "Emojis no topados", + "emoji_button.objects": "Objektos", + "emoji_button.people": "Djente", + "emoji_button.recent": "Uzados frekuentemente", + "emoji_button.search": "Bushka...", + "emoji_button.search_results": "Rizultados de bushkeda", + "emoji_button.symbols": "Simbolos", + "emoji_button.travel": "Viajes i lugares", + "empty_column.account_suspended": "Kuento suspendido", + "empty_column.account_timeline": "No ay publikasyones aki!", + "empty_column.account_unavailable": "Profil no desponivle", + "empty_column.blocks": "Ainda no tienes blokado a dingun utilizador.", + "empty_column.bookmarked_statuses": "Ainda no tienes dinguna publikasyon kon markador. Kuando adjustes un markador a una, se amostrara aki.", + "empty_column.community": "La linya de tiempo lokala esta vaziya. Eskrive algo publikamente para ampesar la fiesta!", + "empty_column.direct": "Ainda no tienes enmentaduras privadas. Kuando embies o risives una, se amostra aki.", + "empty_column.domain_blocks": "Ainda no ay domenos blokados.", + "empty_column.explore_statuses": "No ay dingunos trendes agora. Mira mas tadre!", + "empty_column.favourited_statuses": "Ainda no tienes publikasyones favoritas. Kuando indikes ke una te plaze, se amostrara aki.", + "empty_column.favourites": "Nadie tiene indikado ke le plaze una de tus publikasyones. Kuando algun lo aga, se amostrara aki.", + "empty_column.follow_requests": "No tienes dinguna solisitud de suivante. Kuando risivas una, se amostrara aki.", + "empty_column.followed_tags": "Ainda no tienes segido dinguna etiketa. Kuando lo agas, se amostraran aki.", + "empty_column.hashtag": "Ainda no ay niente en esta etiketa.", + "empty_column.home": "Tu linya de tiempo esta vaziya! Sige a mas personas para inchirla.", + "empty_column.list": "Ainda no ay niente en esta lista. Kuando miembros de esta lista publiken muevas publikasyones, se amostraran aki.", + "empty_column.lists": "Ainda no tienes dinguna lista. Kuando kriyes una, aperesera aki.", + "empty_column.mutes": "Ainda no tienes silensiado a dingun utilizador.", + "empty_column.notifications": "Ainda no tienes dingun avizo. Kuando otras personas enteraktuen kontigo, se amostraran aki.", + "empty_column.public": "No ay niente aki! Eskrive algo publikamente o manualmente sige utilizadores de otros sirvidores para inchirlo", + "error.unexpected_crash.explanation": "Por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador, no se puede amostrar esta pajina djustamente.", + "error.unexpected_crash.explanation_addons": "No se puede amostrar esta pajina djustamente. Este yerro probavlemente fue kauzado por un komplimento del navigador o por un enstrumento de traduksion.", + "error.unexpected_crash.next_steps": "Aprova arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulaenar Mastodon kon otro navigador u otra aplikasyon nativa.", + "error.unexpected_crash.next_steps_addons": "Aprova inkapasitarlos i arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulanear Mastodon kon otro navigador u otra aplikasyon nativa.", + "errors.unexpected_crash.copy_stacktrace": "Kopiar stacktrace al portapapeles", + "errors.unexpected_crash.report_issue": "Raportar problema", + "explore.search_results": "Rizultados de bushkeda", + "explore.suggested_follows": "Djente", + "explore.title": "Eksplorar", + "explore.trending_links": "Haberes", + "explore.trending_statuses": "Publikasyones", + "explore.trending_tags": "Etiketas", + "filter_modal.added.context_mismatch_explanation": "Esta kategoria del filtro no se aplika al konteksto en ke tienes aksesido esta publikasyon. Si keres ke la publikasyon sea filtrada en este konteksto tamyen, kale editar el filtro.", + "filter_modal.added.context_mismatch_title": "El konteksto no koensida!", + "filter_modal.added.expired_explanation": "Esta kategoria de filtros tiene kadukado. Kale ke trokar la data de kadukasion para aplikarla.", + "filter_modal.added.expired_title": "Filtro kadukado!", + "filter_modal.added.review_and_configure": "Para revizar i konfigurar esta kategoria de filtros, va a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Konfigurasyon de filtro", + "filter_modal.added.settings_link": "pajina de konfigurasyon", + "filter_modal.added.short_explanation": "Esta publikasyon fue adjustada a la sigiente kategoria de filtros: {title}.", + "filter_modal.added.title": "Filtro adjustado!", + "filter_modal.select_filter.context_mismatch": "no se aplika a este konteksto", + "filter_modal.select_filter.expired": "kadukado", + "filter_modal.select_filter.prompt_new": "Mueva kategoria: {name}", + "filter_modal.select_filter.search": "Bushkar o kriyar", + "filter_modal.select_filter.subtitle": "Kulanear una kategoria egzistente o kriya mueva", + "filter_modal.select_filter.title": "Filtrar esta publikasyon", + "filter_modal.title.status": "Filtrar una publikasyon", + "firehose.all": "Todo", + "firehose.local": "Este sirvidor", + "firehose.remote": "Otros sirvidores", + "follow_request.authorize": "Autoriza", + "follow_request.reject": "Refuza", + "follow_requests.unlocked_explanation": "Aunke tu kuento no esta serrado, la taifa de {domain} kreye ke talvez keres revizar manualmente las solisitudes de segimento de estos kuentos.", + "followed_tags": "Etiketas segidas", + "footer.about": "Sovre mozotros", + "footer.directory": "Katalogo de profiles", + "footer.get_app": "Abasha aplikasyon", + "footer.invite": "Envitar a djente", + "footer.keyboard_shortcuts": "Akortamientos de klavye", + "footer.privacy_policy": "Politika de privasita", + "footer.source_code": "Ve kodiche fuente", + "footer.status": "Estado", + "generic.saved": "Guadrado", + "getting_started.heading": "Primos pasos", + "hashtag.column_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "Rekomendasyones no topadas", + "hashtag.column_settings.select.placeholder": "Meter etiketas…", + "hashtag.column_settings.tag_mode.all": "Todos estos", + "hashtag.column_settings.tag_mode.any": "Kualsekera de estos", + "hashtag.column_settings.tag_mode.none": "Dinguno de estos", + "hashtag.column_settings.tag_toggle": "Inkluir etiketas adisionalas en esta kolumna", + "hashtag.follow": "Segir etiketa", + "hashtag.unfollow": "Desegir etiketa", + "home.column_settings.basic": "Opsyones bazikas", + "home.column_settings.show_reblogs": "Amostrar repartajasyones", + "home.column_settings.show_replies": "Amostrar repuestas", + "home.hide_announcements": "Eskonde pregones", + "home.pending_critical_update.link": "Ve aktualizasyones", + "home.show_announcements": "Amostra pregones", + "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", + "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", + "interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.", + "interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.", + "interaction_modal.on_another_server": "En otro sirvidor", + "interaction_modal.on_this_server": "En este sirvidor", + "interaction_modal.title.favourite": "Endika ke te plaze publikasyon de {name}", + "interaction_modal.title.follow": "Sige a {name}", + "interaction_modal.title.reblog": "Repartaja publikasyon de {name}", + "interaction_modal.title.reply": "Arisponde a publikasyon de {name}", + "intervals.full.days": "{number, plural, one {# diya} other {# diyas}}", + "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", + "keyboard_shortcuts.back": "Volta atras", + "keyboard_shortcuts.blocked": "Avre lista de utilizadores blokados", + "keyboard_shortcuts.boost": "Repartaja publikasyon", + "keyboard_shortcuts.column": "Enfoka en una kolumna", + "keyboard_shortcuts.compose": "Enfoka en el area de eskrivir publikasyon", + "keyboard_shortcuts.description": "Deskripsyon", + "keyboard_shortcuts.direct": "Avre la kolumna de enmentaduras privadas", + "keyboard_shortcuts.down": "Move verso abasho en la lista", + "keyboard_shortcuts.enter": "Avre publikasyon", + "keyboard_shortcuts.favourite": "Endika ke te plaze una publikasyon", + "keyboard_shortcuts.favourites": "Avre lista de favoritos", + "keyboard_shortcuts.federated": "Avre linya federada", + "keyboard_shortcuts.heading": "Akortamientos de klavye", + "keyboard_shortcuts.home": "Avre linya prinsipala", + "keyboard_shortcuts.hotkey": "Klave rapido", + "keyboard_shortcuts.legend": "Amostra esta lejenda", + "keyboard_shortcuts.local": "Avre linya lokala", + "keyboard_shortcuts.mention": "Enmenta al autor", + "keyboard_shortcuts.muted": "Avre lista de utilizadores silensiados", + "keyboard_shortcuts.my_profile": "Avre tu profil", + "keyboard_shortcuts.notifications": "Avre kolumna de avizos", + "keyboard_shortcuts.open_media": "Avre multimedia", + "keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas", + "keyboard_shortcuts.profile": "Avre profil del autor", + "keyboard_shortcuts.reply": "Arisponde a publikasyon", + "keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes", + "keyboard_shortcuts.search": "Enfoka en la vara de bushkeda", + "keyboard_shortcuts.spoilers": "Amostra/eskonde el kampo de avertensya de kontenido (CW)", + "keyboard_shortcuts.start": "Avre la kolumna \"para ampesar\"", + "keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia", + "keyboard_shortcuts.toot": "Eskrive mueva publikasyon", + "keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda", + "keyboard_shortcuts.up": "Move verso arriva en la lista", + "lightbox.close": "Serra", + "lightbox.compress": "Kompresa kuadro de imaje", + "lightbox.expand": "Espande kuadro de imaje", + "lightbox.next": "Sigiente", + "lightbox.previous": "Anterior", + "limited_account_hint.action": "Amostra el profil entanto", + "limited_account_hint.title": "Este profil fue eskondido por los moderadores de {domain}.", + "lists.account.add": "Adjusta a lista", + "lists.account.remove": "Kita de lista", + "lists.delete": "Efasa lista", + "lists.edit": "Edita lista", + "lists.edit.submit": "Troka titolo", + "lists.new.create": "Adjusta lista", + "lists.new.title_placeholder": "Titolo de mueva lista", + "lists.replies_policy.followed": "Kualseker utilizardo segido", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Dinguno", + "lists.replies_policy.title": "Amostra repuestas a:", + "lists.search": "Bushka entre personas a las kualas siges", + "lists.subheading": "Tus listas", + "load_pending": "{count, plural, one {# muevo elemento} other {# muevos elementos}}", + "loading_indicator.label": "Eskargando…", + "media_gallery.toggle_visible": "{number, plural, one {Eskonde imaje} other {Eskonde imajes}}", + "moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.", + "mute_modal.duration": "Durasyon", + "mute_modal.hide_notifications": "Eskonder avizos de este utilizador?", + "mute_modal.indefinite": "Indefinida", + "navigation_bar.about": "Sovre mozotros", + "navigation_bar.blocks": "Utilizadores blokados", + "navigation_bar.bookmarks": "Markadores", + "navigation_bar.community_timeline": "Linya de tiempo lokala", + "navigation_bar.compose": "Eskrivir mueva publikasyon", + "navigation_bar.direct": "Enmentaduras privadas", + "navigation_bar.discover": "Diskuvre", + "navigation_bar.domain_blocks": "Domenos blokados", + "navigation_bar.edit_profile": "Edita profil", + "navigation_bar.explore": "Eksplorar", + "navigation_bar.favourites": "Te plazen", + "navigation_bar.filters": "Biervos silensiados", + "navigation_bar.follow_requests": "Solisitudes de segimiento", + "navigation_bar.followed_tags": "Etiketas segidas", + "navigation_bar.follows_and_followers": "Segidos i suivantes", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Salir", + "navigation_bar.mutes": "Utilizadores silensiados", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Publikasyones fiksadas", + "navigation_bar.preferences": "Preferensyas", + "navigation_bar.public_timeline": "Linya de tiempo federada", + "navigation_bar.search": "Bushka", + "navigation_bar.security": "Segurita", + "not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.", + "notification.admin.report": "{name} raporto {target}", + "notification.admin.sign_up": "{name} kriyo un konto", + "notification.favourite": "A {name} le plaze tu publikasyon", + "notification.follow": "{name} te ampeso a segir", + "notification.follow_request": "{name} tiene solisitado segirte", + "notification.mention": "{name} te enmento", + "notification.own_poll": "Tu anketa eskapo", + "notification.poll": "Anketa en ke votates eskapo", + "notification.reblog": "{name} repartajo tu publikasyon", + "notification.status": "{name} publiko algo", + "notification.update": "{name} edito una publikasyon", + "notifications.clear": "Efasar avizos", + "notifications.clear_confirmation": "Estas siguro ke keres permanentemente efasar todos tus avizos?", + "notifications.column_settings.admin.report": "Muveos raportos:", + "notifications.column_settings.admin.sign_up": "Muevas enrejistrasyones:", + "notifications.column_settings.alert": "Avizos de ensimameza", + "notifications.column_settings.favourite": "Te plazen:", + "notifications.column_settings.filter_bar.advanced": "Amostra todas las kategorias", + "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", + "notifications.column_settings.filter_bar.show_bar": "Amostra vara de filtros", + "notifications.column_settings.follow": "Muevos suivantes:", + "notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:", + "notifications.column_settings.mention": "Enmentaduras:", + "notifications.column_settings.poll": "Rizultados de anketas:", + "notifications.column_settings.push": "Avizos arrepushados", + "notifications.column_settings.reblog": "Repartajasyones:", + "notifications.column_settings.show": "Amostra en kolumna", + "notifications.column_settings.sound": "Reproduzir son", + "notifications.column_settings.status": "Publikasyones muevas:", + "notifications.column_settings.unread_notifications.category": "Avizos no meldados", + "notifications.column_settings.unread_notifications.highlight": "Avaliar avizos no meldados", + "notifications.column_settings.update": "Edisyones:", + "notifications.filter.all": "Todos", + "notifications.filter.boosts": "Repartajasyones", + "notifications.filter.favourites": "Te plazen", + "notifications.filter.follows": "Segidos", + "notifications.filter.mentions": "Enmentaduras", + "notifications.filter.polls": "Rizultados de anketa", + "notifications.filter.statuses": "Aktualizasyones de personas a las kualas siges", + "notifications.grant_permission": "Da permiso.", + "notifications.group": "{count} avizos", + "notifications.mark_as_read": "Marka todos avizos komo meldados", + "notifications.permission_denied": "Avizos de ensimameza no estan desponivles porke ya se tiene refuzado el permiso", + "notifications.permission_denied_alert": "\"No se pueden kapasitar los avizos de ensimameza, porke ya se tiene refuzado el permiso de navigador", + "notifications.permission_required": "Avizos de ensimameza no estan desponivles porke los nesesarios permisos no tienen sido risividos.", + "notifications_permission_banner.enable": "Kapasitar avizos de ensimameza", + "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.", + "notifications_permission_banner.title": "Nunka te piedres niente", + "onboarding.action.back": "Va atras", + "onboarding.actions.back": "Va atras", + "onboarding.profile.display_name": "Nombre amostrado", + "picture_in_picture.restore": "Restora", + "poll.closed": "Serrado", + "poll.refresh": "Arefreska", + "poll.total_people": "{count, plural, one {# persona} other {# personas}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", + "poll.vote": "Vota", + "poll.voted": "Votates por esta repuesta", + "poll.votes": "{votes, plural, one {# voto} other {# votos}}", + "poll_button.add_poll": "Adjusta anketa", + "poll_button.remove_poll": "Kita anketa", + "privacy.change": "Troka privasita de publikasyon", + "privacy.direct.long": "Vizivle solo para utilizadores enmentados", + "privacy.direct.short": "Solo personas enmentadas", + "privacy.private.long": "Vizivle solo para suivantes", + "privacy.private.short": "Solo suivantes", + "privacy.public.long": "Vizivle para todos", + "privacy.public.short": "Publiko", + "privacy.unlisted.long": "Vizivle para todos, ama eskluido de las fonksiones de diskuvrimyento", + "privacy.unlisted.short": "No listado", + "privacy_policy.last_updated": "Ultima aktualizasyon: {date}", + "privacy_policy.title": "Politika de privasita", + "refresh": "Arefreska", + "regeneration_indicator.label": "Eskargando…", + "regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!", + "relative_time.days": "{number} d", + "relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}", + "relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}", + "relative_time.full.just_now": "agora", + "relative_time.full.minutes": "antes {number, plural, one {# minuto} other {# minutos}}", + "relative_time.full.seconds": "antes {number, plural, one {# sigundo} other {# sigundos}}", + "relative_time.hours": "{number} o", + "relative_time.just_now": "agora", + "relative_time.minutes": "{number} m", + "relative_time.seconds": "{number} s", + "relative_time.today": "oy", + "reply_indicator.cancel": "Anula", + "report.block": "Bloka", + "report.block_explanation": "No veras sus publikasyones. No podra ver tus publikasyones ni segirte. Podra saver ke le blokates.", + "report.categories.other": "Otros", + "report.categories.spam": "Spam", + "report.categories.violation": "El kontenido viola una o mas reglas del sirvidor", + "report.category.subtitle": "Eskoje la mijor koensidensya", + "report.category.title": "Deskrive el problem kon {type}", + "report.category.title_account": "profil", + "report.category.title_status": "publikasyon", + "report.close": "Fecho", + "report.comment.title": "Ay algo mas ke deveriamos saver?", + "report.forward": "Reembiar a {target}", + "report.forward_hint": "Este kuento es de otro sirvidor. Embiar una kopia anonimizada del raporto ayi tamyen?", + "report.mute": "Silensia", + "report.mute_explanation": "No veras sus publikasyones. Ainda pueden segirte i no va saver ke le silensiates.", + "report.placeholder": "Otros komentos", + "report.reasons.dislike": "No me plaze", + "report.reasons.dislike_description": "\"No es algo ke kero ver", + "report.reasons.other": "Es otra koza", + "report.reasons.other_description": "El problem no es de las otras kategorias", + "report.reasons.spam": "Es spam", + "report.reasons.spam_description": "Atadijos malisiozos, enteraksyones falsas o repuestas repetitivas", + "report.reasons.violation": "Viola las reglas del sirvidor", + "report.reasons.violation_description": "Saves ke viola reglas espesifikas", + "report.rules.subtitle": "Eskoje todas ke korespondan", + "report.rules.title": "Kualas reglas estan violadas?", + "report.statuses.subtitle": "Eskoje todas ke korespondan", + "report.statuses.title": "Ay alguna publikasyon ke suporta este raporto?", + "report.submit": "Embiar", + "report.target": "Raportando a {target}", + "report.thanks.take_action": "Aki estan tus opsyones para kontrolar lo ke ves en Mastodon:", + "report.thanks.take_action_actionable": "Mientres revizamos esto, puedes tomar aksyones kontra @{name}:", + "report.thanks.title": "No keres ver esto?", + "report.thanks.title_actionable": "Mersi por raportarlo, vamos revizarlo.", + "report.unfollow": "Desegir a @{name}", + "report.unfollow_explanation": "Estas sigiendo este kuento. Para no ver sus publikasyones en tu linya de tiempo, puedes deshar de segirlo.", + "report_notification.attached_statuses": "{count, plural, one {{count} publikasyon} other {{count} publikasyones}} atadas", + "report_notification.categories.other": "Otros", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violasion de reglas", + "report_notification.open": "Avre raporto", + "search.no_recent_searches": "No ay bushkedas resientes", + "search.placeholder": "Bushka", + "search.quick_action.account_search": "Profiles ke koresponden kon {x}", + "search.quick_action.go_to_account": "Va al profil {x}", + "search.quick_action.go_to_hashtag": "Va a la etiketa {x}", + "search.quick_action.open_url": "Avre URL en Mastodon", + "search.quick_action.status_search": "Publikasyones ke koresponden kon {x}", + "search.search_or_paste": "Bushka o apega URL", + "search_popout.quick_actions": "Aksiones rapidas", + "search_popout.recent": "Bushkedas resientes", + "search_results.accounts": "Profiles", + "search_results.all": "Todos", + "search_results.hashtags": "Etiketas", + "search_results.nothing_found": "No se pudo topar niente para estos terminos de bushkeda", + "search_results.see_all": "Ve todo", + "search_results.statuses": "Publikasyones", + "search_results.title": "Bushka por {q}", + "server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)", + "server_banner.active_users": "utilizadores aktivos", + "server_banner.administered_by": "Administrado por:", + "server_banner.introduction": "{domain} es parte de la red sosyala desentralizada liderada por {mastodon}.", + "server_banner.learn_more": "Ambezate mas", + "server_banner.server_stats": "Estatistikas del sirvidor:", + "sign_in_banner.create_account": "Kriya kuento", + "sign_in_banner.sign_in": "Konektate", + "sign_in_banner.sso_redirect": "Konektate o enrejistrate", + "status.filter": "Filtra esta publikasyon", + "status.filtered": "Filtrado", + "status.hide": "Eskonde publikasyon", + "status.history.created": "{name} kriyo {date}", + "status.history.edited": "{name} edito {date}", + "status.load_more": "Eskarga mas", + "status.media_hidden": "Multimedia eskondidos", + "status.mention": "Enmenta a @{name}", + "status.more": "Mas", + "status.mute": "Silensia a @{name}", + "status.mute_conversation": "Silensia konversasyon", + "status.open": "Espande publikasyon", + "status.pin": "Fiksa en profil", + "status.pinned": "Publikasyon fiksada", + "status.read_more": "Melda mas", + "status.reblog": "Repartaja", + "status.reblog_private": "Repartaja kon vizibilita orijinala", + "status.reblogged_by": "{name} repartajo", + "status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.", + "status.redraft": "Efasa i eskrive de muevo", + "status.remove_bookmark": "Kita markador", + "status.replied_to": "Arispondio a {name}", + "status.reply": "Arisponde", + "status.replyAll": "Arisponde al filo", + "status.report": "Raporta @{name}", + "status.sensitive_warning": "Kontenido sensivle", + "status.share": "Partaja", + "status.show_filter_reason": "Amostra entanto", + "status.show_less": "Amostra manko", + "status.show_less_all": "Amostra manko para todo", + "status.show_more": "Amostra mas", + "status.show_more_all": "Amostra mas para todo", + "status.show_original": "Amostra orijinal", + "status.translate": "Trezlada", + "status.translated_from_with": "Trezladado dizde {lang} kon {provider}", + "status.uncached_media_warning": "Vista previa no desponivle", + "status.unmute_conversation": "Desilensiar konversasyon", + "status.unpin": "Defiksar del profil", + "subscribed_languages.lead": "Solo publikasyones en linguas eskojidas se amostraran en tus linya de tiempo prinsipala i listas dempues del trokamiento. Eskoje dinguna para risivir publikasyones en todas las linguas.", + "subscribed_languages.save": "Guadra trokamientos", + "subscribed_languages.target": "Troka linguas abonadas para {target}", + "tabs_bar.home": "Linya prinsipala", + "tabs_bar.notifications": "Avizos", + "time_remaining.days": "{number, plural, one {# diya restante} other {# diyas restantes}}", + "time_remaining.hours": "{number, plural, one {# ora restante} other {# oras restantes}}", + "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", + "time_remaining.moments": "Momentos restantes", + "time_remaining.seconds": "{number, plural, one {# sigundo restante} other {# sigundos restantes}}", + "timeline_hint.remote_resource_not_displayed": "{resource} de otros sirvidores no se amostran.", + "timeline_hint.resources.followers": "Suivantes", + "timeline_hint.resources.follows": "Segidos", + "timeline_hint.resources.statuses": "Publikasyones mas viejas", + "trends.counter_by_accounts": "{count, plural, one {{counter} kuento} other {{counter} kuentos}} en los ultimos {days, plural, one {diyas} other {{days} diyas}}", + "trends.trending_now": "Trendes", + "ui.beforeunload": "La publikasyon ke estas eskriviendo se pedrera si sales de Mastodon.", + "units.short.billion": "{count} MM", + "units.short.million": "{count} M", + "units.short.thousand": "{count} K", + "upload_area.title": "Arastra i mete para kargar", + "upload_button.label": "Adjusta imajes, un video or una dosya audio", + "upload_error.limit": "Limito de dosyas kargadas eksedido.", + "upload_error.poll": "No se permite kargar dosyas kon anketas.", + "upload_form.audio_description": "Deskrive para personas sodras o kon problemes auditivos", + "upload_form.description": "Deskrive para personas siegas o kon problemes vizuales", + "upload_form.description_missing": "No adjustates deskripsion", + "upload_form.edit": "Edita", + "upload_form.thumbnail": "Troka minyatura", + "upload_form.undo": "Efasa", + "upload_form.video_description": "Deskrive para personas sodras, kon problemes auditivos, siegas o kon problemes vizuales", + "upload_modal.analyzing_picture": "Analizando imaje…", + "upload_modal.apply": "Aplika", + "upload_modal.applying": "Aplikando…", + "upload_modal.choose_image": "Eskoje imaje", + "upload_modal.description_placeholder": "Lorem ipsum dolor sit amet", + "upload_modal.detect_text": "Detektar teksto de la imaje", + "upload_modal.edit_media": "Edita multimedia", + "upload_modal.hint": "Klika o arrastra el sirkolo en la vista previa para eskojer el punto fokal ke siempre estara en vista en todas las minyaturas.", + "upload_modal.preparing_ocr": "Preparando OCR…", + "upload_modal.preview_label": "Vista previa ({ratio})", + "upload_progress.label": "Kargando...", + "upload_progress.processing": "Prosesando…", + "video.close": "Serra video", + "video.download": "Abasha dosya", + "video.exit_fullscreen": "Sal de ekran kompleto", + "video.expand": "Espande video", + "video.fullscreen": "Ekran kompleto", + "video.hide": "Eskonde video", + "video.mute": "Silensia son", + "video.pause": "Pauza", + "video.play": "Reproduze", + "video.unmute": "Desilensia son" +} diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 95f8e703c9..229d4f4718 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -49,5 +49,32 @@ "admin.dashboard.retention.average": "औसत", "admin.dashboard.retention.cohort_size": "नयाँ प्रयोगकर्ताहरू", "alert.rate_limited.message": "कृपया {retry_time, time, medium} पछि पुन: प्रयास गर्नुहोस्।", - "alert.unexpected.message": "एउटा अनपेक्षित त्रुटि भयो।" + "alert.unexpected.message": "एउटा अनपेक्षित त्रुटि भयो।", + "bundle_column_error.retry": "पुन: प्रयास गर्नुहोस्", + "bundle_modal_error.close": "बन्द गर्नुहोस्", + "bundle_modal_error.message": "यो कम्पोनेन्ट लोड गर्दा केही गडबड भयो।", + "bundle_modal_error.retry": "Try again", + "closed_registrations.other_server_instructions": "Mastodon विकेन्द्रीकृत भएकोले, तपाइँ अर्को सर्भरमा खाता खोल्न सक्नुहुन्छ र पनि यो सर्भरसँग अन्तरक्रिया गर्न सक्नुहुन्छ।", + "closed_registrations_modal.description": "हाल {domain} मा खाता सिर्जना गर्न सम्भव छैन, तर कृपया ध्यान राख्नुहोस् कि तपाईंले Mastodon प्रयोग गर्नको लागि {domain} मा नै खाता खोल्न आवश्यक छैन।", + "closed_registrations_modal.find_another_server": "अर्को सर्भर खोज्नुहोस्", + "closed_registrations_modal.title": "Mastodon मा साइन अप गर्दै", + "column.blocks": "ब्लक गरिएको प्रयोगकर्ताहरु", + "column.directory": "प्रोफाइल ब्राउज गर्नुहोस्", + "column.domain_blocks": "ब्लक गरिएको डोमेन", + "column.follow_requests": "फलो अनुरोधहरू", + "column.lists": "सूचीहरू", + "column.notifications": "सूचनाहरू", + "column_header.hide_settings": "सेटिङ्हरू लुकाउनुहोस्", + "column_subheading.settings": "सेटिङहरू", + "compose.language.change": "भाषा परिवर्तन गर्नुहोस्", + "compose.language.search": "भाषाहरू खोज्नुहोस्...", + "compose_form.direct_message_warning_learn_more": "थप जान्नुहोस्", + "compose_form.poll.add_option": "विकल्प थप्नुहोस्", + "compose_form.poll.remove_option": "यो विकल्प हटाउनुहोस्", + "compose_form.publish_form": "नयाँ पोस्ट", + "compose_form.save_changes": "परिवर्तनहरू सेभ गर्नुहोस", + "compose_form.sensitive.hide": "{count, plural, one {संवेदनशील मिडियाको रूपमा चिन्ह लगाउनुहोस्} other {संवेदनशील मिडियाहरूको रूपमा चिन्ह लगाउनुहोस्}}", + "compose_form.sensitive.marked": "{count, plural, one {मिडियालाई संवेदनशील रूपमा चिन्ह लगाइएको छ} other {मिडियाहरूलाई संवेदनशील रूपमा चिन्ह लगाइएको छ}}", + "compose_form.sensitive.unmarked": "{count, plural, one {मिडियालाई संवेदनशील रूपमा चिन्ह लगाइएको छैन} other {मिडियाहरूलाई संवेदनशील रूपमा चिन्ह लगाइएको छैन}}", + "compose_form.spoiler_placeholder": "यहाँ आफ्नो चेतावनी लेख्नुहोस्" } diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 7faf279719..708d8c3e98 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -1,25 +1,39 @@ { "about.contact": "ਸੰਪਰਕ:", + "about.domain_blocks.silenced.title": "ਸੀਮਿਤ", "about.domain_blocks.suspended.title": "ਮੁਅੱਤਲ ਕੀਤੀ", + "about.rules": "ਸਰਵਰ ਨਿਯਮ", "account.account_note_header": "ਨੋਟ", - "account.badges.bot": "Bot", + "account.add_or_remove_from_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ ਜਾਂ ਹਟਾਓ", + "account.badges.bot": "ਆਟੋਮੇਟ ਕੀਤਾ", "account.badges.group": "ਗਰੁੱਪ", + "account.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "account.block_domain": "{domain} ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "account.block_short": "ਪਾਬੰਦੀ", "account.blocked": "ਪਾਬੰਦੀਸ਼ੁਦਾ", - "account.cancel_follow_request": "Withdraw follow request", - "account.follow": "ਪ੍ਰਸ਼ੰਸਕ ਬਣੋ", - "account.followers": "ਪ੍ਰਸ਼ੰਸਕ", - "account.following": "ਪ੍ਰਸ਼ੰਸਕ ਹਾਂ", + "account.cancel_follow_request": "ਫ਼ਾਲੋ ਕਰਨ ਨੂੰ ਰੱਦ ਕਰੋ", + "account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ", + "account.follow": "ਫ਼ਾਲੋ", + "account.followers": "ਫ਼ਾਲੋਅਰ", + "account.followers.empty": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਾਲੇ ਕੋਈ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।", + "account.following": "ਫ਼ਾਲੋ ਕੀਤਾ", + "account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।", + "account.follows_you": "ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", "account.media": "ਮੀਡੀਆ", "account.muted": "ਮੌਨ ਕੀਤੀਆਂ", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.requested": "Awaiting approval", + "account.posts": "ਪੋਸਟਾਂ", + "account.posts_with_replies": "ਪੋਸਤਾਂ ਅਤੇ ਜਵਾਬ", + "account.requested": "ਮਨਜ਼ੂਰੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", + "account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", "account.unblock_short": "ਪਾਬੰਦੀ ਹਟਾਓ", - "account.unfollow": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ", + "account.unfollow": "ਅਣ-ਫ਼ਾਲੋ", "account.unmute_short": "ਮੌਨ-ਰਹਿਤ ਕਰੋ", "account_note.placeholder": "Click to add a note", "admin.dashboard.retention.average": "ਔਸਤ", + "admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ", "alert.unexpected.title": "ਓਹੋ!", "announcement.announcement": "ਹੋਕਾ", "bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ", @@ -27,35 +41,50 @@ "bundle_modal_error.close": "ਬੰਦ ਕਰੋ", "bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ", "column.about": "ਸਾਡੇ ਬਾਰੇ", + "column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "column.bookmarks": "ਬੁੱਕਮਾਰਕ", - "column.home": "ਮੁੱਖ ਪੰਨਾ", + "column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ", + "column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ", + "column.favourites": "ਮਨਪਸੰਦ", + "column.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ", + "column.home": "ਮੁੱਖ ਸਫ਼ਾ", "column.lists": "ਸੂਚੀਆਂ", "column.notifications": "ਸੂਚਨਾਵਾਂ", - "column.pins": "Pinned toot", + "column.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ", "column_back_button.label": "ਪਿੱਛੇ", + "column_header.pin": "ਟੰਗੋ", + "column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ", + "column_header.unpin": "ਲਾਹੋ", "column_subheading.settings": "ਸੈਟਿੰਗਾਂ", - "community.column_settings.media_only": "Media only", + "community.column_settings.local_only": "ਸਿਰਫ ਲੋਕਲ ਹੀ", + "community.column_settings.media_only": "ਸਿਰਫ ਮੀਡੀਆ ਹੀ", + "community.column_settings.remote_only": "ਸਿਰਫ਼ ਰਿਮੋਟ ਹੀ", + "compose.language.change": "ਭਾਸ਼ਾ ਬਦਲੋ", + "compose.language.search": "ਭਾਸ਼ਾਵਾਂ ਦੀ ਖੋਜ...", + "compose.published.open": "ਖੋਲ੍ਹੋ", + "compose.saved.body": "ਪੋਸਟ ਸੰਭਾਲੀ ਗਈ।", "compose_form.direct_message_warning_learn_more": "ਹੋਰ ਜਾਣੋ", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", + "compose_form.lock_disclaimer.lock": "ਲਾਕ ਹੈ", "compose_form.placeholder": "What is on your mind?", "compose_form.publish": "ਪ੍ਰਕਾਸ਼ਨ ਕਰੋ", "compose_form.publish_form": "Publish", "compose_form.save_changes": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler.marked": "ਸਮੱਗਰੀ ਚੇਤਾਵਨੀ ਨੂੰ ਹਟਾਓ", + "compose_form.spoiler.unmarked": "ਸਮੱਗਰੀ ਬਾਰੇ ਚੇਤਾਵਨੀ ਜੋੜੋ", "confirmation_modal.cancel": "ਰੱਦ ਕਰੋ", - "confirmations.block.confirm": "ਬਲਾਕ", - "confirmations.delete.confirm": "ਮਿਟਾਓ", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "ਮਿਟਾਓ", + "confirmations.block.confirm": "ਪਾਬੰਦੀ", + "confirmations.delete.confirm": "ਹਟਾਓ", + "confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.delete_list.confirm": "ਹਟਾਓ", "confirmations.discard_edit_media.confirm": "ਰੱਦ ਕਰੋ", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "ਪੂਰੀ ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", "confirmations.edit.confirm": "ਸੋਧ", "confirmations.logout.confirm": "ਬਾਹਰ ਹੋਵੋ", "confirmations.mute.confirm": "ਮੌਨ ਕਰੋ", "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ", - "confirmations.unfollow.confirm": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ", + "confirmations.unfollow.confirm": "ਅਣ-ਫ਼ਾਲੋ", "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ", "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ", "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ", @@ -63,165 +92,252 @@ "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "embed.instructions": "Embed this status on your website by copying the code below.", - "emoji_button.activity": "ਗਤੀਵਿਧੀਆਂ", - "emoji_button.clear": "ਸਾਫ਼ ਕਰੋ", + "emoji_button.activity": "ਗਤੀਵਿਧੀ", + "emoji_button.clear": "ਮਿਟਾਓ", "emoji_button.custom": "ਕਸਟਮ", "emoji_button.flags": "ਝੰਡੀਆਂ", "emoji_button.food": "ਖਾਣਾ-ਪੀਣਾ", "emoji_button.nature": "ਕੁਦਰਤ", "emoji_button.objects": "ਇਕਾਈ", "emoji_button.people": "ਲੋਕ", - "empty_column.account_timeline": "No toots here!", + "emoji_button.search": "ਖੋਜ ਕਰੋ...", + "emoji_button.search_results": "ਖੋਜ ਨਤੀਜੇ", + "emoji_button.symbols": "ਚਿੰਨ੍ਹ", + "emoji_button.travel": "ਸੈਰ ਸਪਾਟਾ ਤੇ ਥਾਵਾਂ", + "empty_column.account_timeline": "ਇੱਥੇ ਕੋਈ ਪੋਸਟ ਨਹੀਂ ਹੈ!", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ", "explore.suggested_follows": "ਲੋਕ", "explore.title": "ਪੜਚੋਲ ਕਰੋ", "explore.trending_links": "ਖ਼ਬਰਾਂ", - "explore.trending_statuses": "ਸੰਪਾਦਨਾਵਾਂ", - "follow_request.reject": "ਅਸਵੀਕਾਰ ਕਰੋ", + "explore.trending_statuses": "ਪੋਸਟਾਂ", + "explore.trending_tags": "ਹੈਸ਼ਟੈਗ", + "filter_modal.added.settings_link": "ਸੈਟਿੰਗਾਂ ਸਫ਼ਾ", + "firehose.all": "ਸਭ", + "firehose.local": "ਇਹ ਸਰਵਰ", + "firehose.remote": "ਹੋਰ ਸਰਵਰ", + "follow_request.reject": "ਰੱਦ ਕਰੋ", "footer.about": "ਸਾਡੇ ਬਾਰੇ", + "footer.get_app": "ਐਪ ਲਵੋ", + "footer.invite": "ਲੋਕਾਂ ਨੂੰ ਸੱਦਾ ਭੇਜੋ", "footer.keyboard_shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", + "footer.privacy_policy": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", + "footer.source_code": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ", "footer.status": "ਹਾਲਤ", "generic.saved": "ਸਾਂਭੀ ਗਈ", + "getting_started.heading": "ਸ਼ੁਰੂ ਕਰੀਏ", + "hashtag.column_header.tag_mode.all": "ਅਤੇ {additional}", + "hashtag.column_header.tag_mode.any": "ਜਾਂ {additional}", + "hashtag.column_header.tag_mode.none": "{additional} ਬਿਨਾਂ", + "hashtag.column_settings.tag_mode.any": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ", + "hashtag.column_settings.tag_mode.none": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", + "hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", "home.column_settings.basic": "ਆਮ", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", + "interaction_modal.title.follow": "{name} ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", + "keyboard_shortcuts.back": "ਪਿੱਛੇ ਜਾਓ", + "keyboard_shortcuts.blocked": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਸੂਚੀ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.boost": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ", + "keyboard_shortcuts.column": "ਫੋਕਸ ਕਾਲਮ", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "ਵਰਣਨ", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.heading": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", "keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.notifications": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਕਾਲਮ ਖੋਲ੍ਹੋ", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.profile": "ਲੇਖਕ ਦਾ ਪਰੋਫਾਈਲ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.reply": "ਪੋਸਟ ਨੂੰ ਜਵਾਬ ਦਿਓ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ", + "keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "ਬੰਦ ਕਰੋ", "lightbox.next": "ਅਗਲੀ", "lightbox.previous": "ਪਿਛਲੀ", - "lists.delete": "ਸੂਚੀ ਮਿਟਾਓ", + "link_preview.author": "{name} ਵਲੋਂ", + "lists.account.add": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ", + "lists.account.remove": "ਸੂਚੀ ਵਿਚੋਂ ਹਟਾਓ", + "lists.delete": "ਸੂਚੀ ਹਟਾਓ", + "lists.replies_policy.followed": "ਕੋਈ ਵੀ ਫ਼ਾਲੋ ਕੀਤਾ ਵਰਤੋਂਕਾਰ", + "lists.replies_policy.none": "ਕੋਈ ਨਹੀਂ", + "loading_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ…", "mute_modal.duration": "ਮਿਆਦ", - "navigation_bar.about": "ਸਾਡੇ ਬਾਰੇ", + "navigation_bar.about": "ਇਸ ਬਾਰੇ", + "navigation_bar.advanced_interface": "ਤਕਨੀਕੀ ਵੈੱਬ ਇੰਟਰਫੇਸ ਵਿੱਚ ਖੋਲ੍ਹੋ", + "navigation_bar.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "navigation_bar.bookmarks": "ਬੁੱਕਮਾਰਕ", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.community_timeline": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ", + "navigation_bar.compose": "ਨਵੀਂ ਪੋਸਟ ਲਿਖੋ", + "navigation_bar.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ", "navigation_bar.discover": "ਖੋਜ", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ", + "navigation_bar.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ", "navigation_bar.explore": "ਪੜਚੋਲ ਕਰੋ", + "navigation_bar.favourites": "ਮਨਪਸੰਦ", + "navigation_bar.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ", + "navigation_bar.followed_tags": "ਫ਼ਾਲੋ ਕੀਤੇ ਹੈਸ਼ਟੈਗ", + "navigation_bar.follows_and_followers": "ਫ਼ਾਲੋ ਅਤੇ ਫ਼ਾਲੋ ਕਰਨ ਵਾਲੇ", "navigation_bar.lists": "ਸੂਚੀਆਂ", - "navigation_bar.logout": "ਲਾੱਗ ਆਊਟ, ਬਾਹਰ ਆਉਣਾ", + "navigation_bar.logout": "ਲਾਗ ਆਉਟ", "navigation_bar.personal": "ਨਿੱਜੀ", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "ਤਰਜੀਹਾਂ", + "navigation_bar.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ", + "navigation_bar.preferences": "ਪਸੰਦਾਂ", "navigation_bar.search": "ਖੋਜੋ", "navigation_bar.security": "ਸੁਰੱਖਿਆ", - "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", + "not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।", + "notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ", + "notification.follow_request": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", "notification.reblog": "{name} boosted your status", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.follow": "ਨਵੇਂ ਫ਼ਾਲੋਅਰ:", + "notifications.column_settings.follow_request": "ਨਵੀਆਂ ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ:", + "notifications.column_settings.status": "ਨਵੀਆਂ ਪੋਸਟਾਂ:", + "notifications.column_settings.update": "ਸੋਧ:", "notifications.filter.all": "ਸਭ", - "notifications.filter.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "notifications.filter.boosts": "ਬੂਸਟ", + "notifications.filter.favourites": "ਮਨਪਸੰਦ", + "notifications.filter.follows": "ਫ਼ਾਲੋ", + "notifications.filter.mentions": "ਜ਼ਿਕਰ", + "onboarding.actions.go_to_explore": "ਮੈਨੂੰ ਰੁਝਾਨ ਵੇਖਾਓ", + "onboarding.actions.go_to_home": "ਮੇਰੀ ਮੁੱਖ ਫੀਡ ਉੱਤੇ ਲੈ ਜਾਓ", + "onboarding.follows.lead": "", + "onboarding.follows.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ", + "onboarding.profile.note": "ਜਾਣਕਾਰੀ", + "onboarding.profile.save_and_continue": "ਸੰਭਾਲੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ", + "onboarding.profile.title": "ਪਰੋਫਾਈਲ ਸੈਟਅੱਪ", + "onboarding.profile.upload_avatar": "ਪਰੋਫਾਈਲ ਤਸਵੀਰ ਅੱਪਲੋਡ ਕਰੋ", + "onboarding.share.title": "ਆਪਣਾ ਪਰੋਫਾਈਲ ਸਾਂਝਾ ਕਰੋ", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", + "onboarding.start.skip": "ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਦਦ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ?", + "onboarding.start.title": "ਤੁਸੀਂ ਪੂਰਾ ਕਰਨ ਲਿਆ!", + "onboarding.steps.follow_people.body": "ਦਿਲਚਸਪ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ, ਇਹ ਤਾਂ ਮਸਟਾਡੋਨ ਹੈ।", + "onboarding.steps.follow_people.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "ਆਪਣੀ ਪਹਿਲੀ ਪੋਸਟ ਕਰੋ", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "poll.closed": "ਬੰਦ ਹੋਇਆ", + "onboarding.steps.setup_profile.title": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਆਪਣਾ ਬਣਾਓ", + "onboarding.steps.share_profile.body": "ਆਪਣੇ ਮਿੱਤਰਾਂ ਨੂੰ ਦੱਸੋ ਤੁਹਾਨੂੰ ਮਸਟਾਡੋਨ ਕਿਵੇਂ ਲੱਗਿਆ", + "onboarding.steps.share_profile.title": "ਆਪਣੇ ਮਸਟਾਡੋਨ ਪਰੋਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰੋ", + "poll.closed": "ਬੰਦ ਹੈ", "poll.refresh": "ਤਾਜ਼ਾ ਕਰੋ", "poll.vote": "ਵੋਟ ਪਾਓ", - "privacy.change": "Adjust status privacy", - "privacy.direct.short": "Direct", - "privacy.private.short": "Followers-only", + "privacy.change": "ਪੋਸਟ ਦੀ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਦਲੋ", + "privacy.direct.short": "ਸਿੱਧਾ ਲੋਕਾਂ ਦਾ ਜ਼ਿਕਰ ਕਰੋ", + "privacy.private.short": "ਸਿਰਫ਼ ਫ਼ਾਲੋਅਰ", "privacy.public.short": "ਜਨਤਕ", "privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", "refresh": "ਤਾਜ਼ਾ ਕਰੋ", "regeneration_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...", "relative_time.full.just_now": "ਹੁਣੇ ਹੀ", + "relative_time.just_now": "ਹੁਣੇ", + "relative_time.minutes": "{number}ਮਿੰ", + "relative_time.seconds": "{number}ਸ", "relative_time.today": "ਅੱਜ", "reply_indicator.cancel": "ਰੱਦ ਕਰੋ", "report.block": "ਬਲਾਕ", + "report.categories.legal": "ਕਨੂੰਨੀ", "report.categories.other": "ਬਾਕੀ", - "report.categories.spam": "ਸਪਾਮ", - "report.category.title_status": "ਸੰਪਾਦਨਾ", + "report.categories.spam": "ਸਪੈਮ", + "report.category.title_account": "ਪਰੋਫਾਈਲ", + "report.category.title_status": "ਪੋਸਟ", "report.close": "ਮੁਕੰਮਲ", "report.mute": "ਮੌਨ ਕਰੋ", "report.next": "ਅਗਲੀ", - "report.placeholder": "Type or paste additional comments", - "report.submit": "Submit report", - "report.target": "Report {target}", + "report.placeholder": "ਵਧੀਕ ਟਿੱਪਣੀਆਂ", + "report.reasons.dislike": "ਮੈਨੂੰ ਇਹ ਪਸੰਦ ਨਹੀਂ ਹੈ", + "report.reasons.spam": "ਇਹ ਸਪੈਮ ਹੈ", + "report.submit": "ਭੇਜੋ", + "report.target": "{target} ਰਿਪੋਰਟ", + "report.unfollow": "@{name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "ਬਾਕੀ", - "report_notification.categories.spam": "ਸਪਾਮ", + "report_notification.categories.spam": "ਸਪੈਮ", + "report_notification.categories.violation": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ", "search.placeholder": "ਖੋਜੋ", + "search_popout.quick_actions": "ਫੌਰੀ ਕਾਰਵਾਈਆਂ", + "search_popout.specific_date": "ਖਾਸ ਤਾਰੀਖ", + "search_popout.user": "ਵਰਤੋਂਕਾਰ", + "search_results.accounts": "ਪਰੋਫਾਈਲ", "search_results.all": "ਸਭ", - "search_results.statuses": "Toots", + "search_results.hashtags": "ਹੈਸ਼ਟੈਗ", + "search_results.statuses": "ਪੋਸਟਾਂ", "server_banner.learn_more": "ਹੋਰ ਜਾਣੋ", "sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ", - "sign_in_banner.sign_in": "Sign in", - "status.admin_status": "Open this status in the moderation interface", - "status.copy": "Copy link to status", - "status.delete": "ਮਿਟਾਓ", + "sign_in_banner.sign_in": "ਲਾਗਇਨ", + "status.admin_status": "", + "status.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "status.bookmark": "ਬੁੱਕਮਾਰਕ", + "status.copy": "ਪੋਸਟ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", + "status.delete": "ਹਟਾਓ", "status.edit": "ਸੋਧ", + "status.edited": "{date} ਨੂੰ ਸੋਧਿਆ", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", "status.embed": "ਮੜ੍ਹੋ", + "status.favourite": "ਪਸੰਦ", + "status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ", + "status.history.edited": "{name} ਨੇ {date} ਨੂੰ ਸੋਧਿਆ", "status.load_more": "ਹੋਰ ਦਿਖਾਓ", + "status.media.open": "ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "status.media.show": "ਵੇਖਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "status.mention": "@{name} ਦਾ ਜ਼ਿਕਰ", "status.more": "ਹੋਰ", - "status.open": "Expand this status", - "status.pinned": "Pinned toot", + "status.open": "ਇਹ ਪੋਸਟ ਨੂੰ ਫੈਲਾਓ", + "status.pin": "ਪਰੋਫਾਈਲ ਉੱਤੇ ਟੰਗੋ", + "status.pinned": "ਟੰਗੀ ਹੋਈ ਪੋਸਟ", "status.read_more": "ਹੋਰ ਪੜ੍ਹੋ", "status.reblog": "ਵਧਾਓ", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.replied_to": "{name} ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ", "status.reply": "ਜਵਾਬ ਦੇਵੋ", + "status.replyAll": "ਮਾਮਲੇ ਨੂੰ ਜਵਾਬ ਦਿਓ", + "status.report": "@{name} ਦੀ ਰਿਪੋਰਟ ਕਰੋ", + "status.sensitive_warning": "ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ", "status.share": "ਸਾਂਝਾ ਕਰੋ", + "status.show_filter_reason": "ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ", "status.show_less": "ਘੱਟ ਦਿਖਾਓ", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", - "subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ", - "tabs_bar.home": "ਮੁੱਖ ਪੰਨਾ", + "status.show_more": "ਹੋਰ ਦਿਖਾਓ", + "status.title.with_attachments": "{user} ਨੇ {attachmentCount, plural,one {ਅਟੈਚਮੈਂਟ} other {{attachmentCount}ਅਟੈਚਮੈਂਟਾਂ}} ਪੋਸਟ ਕੀਤੀਆਂ", + "status.translate": "ਉਲੱਥਾ ਕਰੋ", + "subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੋ", + "tabs_bar.home": "ਘਰ", "tabs_bar.notifications": "ਸੂਚਨਾਵਾਂ", - "timeline_hint.resources.followers": "ਪ੍ਰਸ਼ੰਸਕ", - "timeline_hint.resources.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "ਫ਼ਾਲੋਅਰ", + "timeline_hint.resources.follows": "ਫ਼ਾਲੋ", + "timeline_hint.resources.statuses": "ਪੂਰਾਣੀਆਂ ਪੋਸਟਾਂ", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "units.short.billion": "{count}ਿਬ", + "units.short.million": "{count}ਮਿ", + "units.short.thousand": "{count}ਹਜ਼ਾਰ", + "upload_form.audio_description": "ਬੋਲ਼ੇ ਜਾਂ ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", + "upload_form.description": "ਅੰਨ੍ਹੇ ਜਾਂ ਦੇਖਣ ਲਈ ਮੁਸ਼ਕਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", "upload_form.edit": "ਸੋਧ", - "upload_form.undo": "ਮਿਟਾਓ", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.undo": "ਹਟਾਓ", + "upload_form.video_description": "ਬੋਲ਼ੇ, ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ, ਅੰਨ੍ਹੇ ਜਾਂ ਘੱਟ ਨਿਗ੍ਹਾ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵਾ", "upload_modal.apply": "ਲਾਗੂ ਕਰੋ", + "upload_modal.applying": "ਲਾਗੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…", "upload_modal.choose_image": "ਤਸਵੀਰ ਚੁਣੋ", "upload_modal.edit_media": "ਮੀਡੀਆ ਸੋਧੋ", - "upload_progress.label": "Uploading…", - "upload_progress.processing": "ਕਾਰਜ ਅਧੀਨ ਹੈ…", + "upload_progress.label": "ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...", + "upload_progress.processing": "ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ…", "video.exit_fullscreen": "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚੋਂ ਬਾਹਰ ਨਿਕਲੋ", "video.fullscreen": "ਪੂਰੀ ਸਕਰੀਨ", - "video.pause": "ਰਹਾਉ", + "video.pause": "ਠਹਿਰੋ", "video.play": "ਚਲਾਓ" } diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 46fcc01160..0eb4041988 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -488,6 +488,7 @@ "onboarding.profile.note": "O tebe", "onboarding.profile.note_hint": "Môžeš @spomenúť iných ľudí, alebo #haštagy…", "onboarding.profile.save_and_continue": "Ulož a pokračuj", + "onboarding.profile.title": "Nastavenie profilu", "onboarding.profile.upload_avatar": "Nahraj profilový obrázok", "onboarding.profile.upload_header": "Nahraj profilové záhlavie", "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0be9bf6d7a..67b920393a 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -496,7 +496,7 @@ "onboarding.share.message": "ฉันคือ {username} ใน #Mastodon! มาติดตามฉันที่ {url}", "onboarding.share.next_steps": "ขั้นตอนถัดไปที่เป็นไปได้:", "onboarding.share.title": "แชร์โปรไฟล์ของคุณ", - "onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมที่มีเอกลักษณ์เฉพาะตัว กระจายศูนย์ ที่ซึ่งคุณ—ไม่ใช่อัลกอริทึม—เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:", + "onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมแบบกระจายศูนย์ที่มีเอกลักษณ์เฉพาะตัว ที่ซึ่งคุณ ไม่ใช่อัลกอริทึม เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:", "onboarding.start.skip": "ไม่ต้องการความช่วยเหลือในการเริ่มต้นใช้งาน?", "onboarding.start.title": "คุณทำสำเร็จแล้ว!", "onboarding.steps.follow_people.body": "การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 4d2452e12d..6bb5ba0ebf 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -1,4 +1,6 @@ { + "about.blocks": "ئوتتۇراھال مۇلازىمېتىر", + "about.contact": "ئالاقىلاشقۇچى:", "account.badges.bot": "Bot", "account.cancel_follow_request": "Withdraw follow request", "account.posts": "Toots", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 4fb5a12de3..8484e00c83 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -8,7 +8,7 @@ "about.domain_blocks.silenced.title": "已受限", "about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法與此伺服器上的使用者互動或交流。", "about.domain_blocks.suspended.title": "已停權", - "about.not_available": "無法於此伺服器上使用此資訊。", + "about.not_available": "無法於本伺服器上使用此資訊。", "about.powered_by": "由 {mastodon} 提供的去中心化社群媒體", "about.rules": "伺服器規則", "account.account_note_header": "備註", @@ -207,14 +207,14 @@ "dismissable_banner.explore_statuses": "這些於此伺服器以及去中心化網路中其他伺服器發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。", "dismissable_banner.explore_tags": "這些主題標籤正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。", "dismissable_banner.public_timeline": "這些是來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。", - "embed.instructions": "如要將此嘟文嵌入您的網站,請複製以下程式碼。", + "embed.instructions": "若您欲於您的網站嵌入此嘟文,請複製以下程式碼。", "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", "emoji_button.clear": "清除", "emoji_button.custom": "自訂", "emoji_button.flags": "旗幟", "emoji_button.food": "食物 & 飲料", - "emoji_button.label": "插入表情圖案", + "emoji_button.label": "插入表情符號", "emoji_button.nature": "自然", "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", @@ -353,11 +353,11 @@ "keyboard_shortcuts.legend": "顯示此說明選單", "keyboard_shortcuts.local": "開啟本站時間軸", "keyboard_shortcuts.mention": "提及作者", - "keyboard_shortcuts.muted": "開啟靜音使用者清單", + "keyboard_shortcuts.muted": "開啟靜音使用者列表", "keyboard_shortcuts.my_profile": "開啟個人檔案頁面", "keyboard_shortcuts.notifications": "開啟通知欄", "keyboard_shortcuts.open_media": "開啟媒體", - "keyboard_shortcuts.pinned": "開啟釘選的嘟文清單", + "keyboard_shortcuts.pinned": "開啟釘選的嘟文列表", "keyboard_shortcuts.profile": "開啟作者的個人檔案頁面", "keyboard_shortcuts.reply": "回應嘟文", "keyboard_shortcuts.requests": "開啟跟隨請求列表", @@ -386,7 +386,7 @@ "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", "lists.replies_policy.followed": "任何跟隨的使用者", - "lists.replies_policy.list": "成員清單", + "lists.replies_policy.list": "列表成員", "lists.replies_policy.none": "沒有人", "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您跟隨的使用者", @@ -477,7 +477,7 @@ "onboarding.actions.back": "返回", "onboarding.actions.go_to_explore": "看看發生什麼新鮮事", "onboarding.actions.go_to_home": "前往您的首頁時間軸", - "onboarding.compose.template": "你好 #Mastodon!", + "onboarding.compose.template": "哈囉 #Mastodon!", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "客製化您的首頁時間軸", @@ -687,7 +687,7 @@ "status.translated_from_with": "透過 {provider} 翻譯 {lang}", "status.uncached_media_warning": "無法預覽", "status.unmute_conversation": "解除此對話的靜音", - "status.unpin": "從個人檔案頁面取消釘選", + "status.unpin": "自個人檔案頁面取消釘選", "subscribed_languages.lead": "僅選定語言的嘟文才會出現於您的首頁上,並於變更後列出時間軸。選取「無」以接收所有語言的嘟文。", "subscribed_languages.save": "儲存變更", "subscribed_languages.target": "變更 {target} 的訂閱語言", diff --git a/app/javascript/mastodon/reducers/media_attachments.js b/app/javascript/mastodon/reducers/media_attachments.js index f145e1dcaa..cbb4933bc7 100644 --- a/app/javascript/mastodon/reducers/media_attachments.js +++ b/app/javascript/mastodon/reducers/media_attachments.js @@ -2,13 +2,6 @@ import { Map as ImmutableMap } from 'immutable'; import { STORE_HYDRATE } from '../actions/store'; -export let currentMedia = null; - -export function setCurrentMedia(value) { - currentMedia = value; -} - - const initialState = ImmutableMap({ accept_content_types: [], }); diff --git a/app/javascript/mastodon/store/middlewares/loading_bar.ts b/app/javascript/mastodon/store/middlewares/loading_bar.ts index 5fe8000731..83056ee49f 100644 --- a/app/javascript/mastodon/store/middlewares/loading_bar.ts +++ b/app/javascript/mastodon/store/middlewares/loading_bar.ts @@ -1,3 +1,9 @@ +import { + isAsyncThunkAction, + isPending as isThunkActionPending, + isFulfilled as isThunkActionFulfilled, + isRejected as isThunkActionRejected, +} from '@reduxjs/toolkit'; import { showLoading, hideLoading } from 'react-redux-loading-bar'; import type { AnyAction, Middleware } from 'redux'; @@ -21,25 +27,43 @@ export const loadingBarMiddleware = ( return ({ dispatch }) => (next) => (action: AnyAction) => { - if (action.type && !action.skipLoading) { + let isPending = false; + let isFulfilled = false; + let isRejected = false; + + if ( + isAsyncThunkAction(action) + // TODO: once we get the first use-case for it, add a check for skipLoading + ) { + if (isThunkActionPending(action)) isPending = true; + else if (isThunkActionFulfilled(action)) isFulfilled = true; + else if (isThunkActionRejected(action)) isRejected = true; + } else if ( + action.type && + !action.skipLoading && + typeof action.type === 'string' + ) { const [PENDING, FULFILLED, REJECTED] = promiseTypeSuffixes; - const isPending = new RegExp(`${PENDING}$`, 'g'); - const isFulfilled = new RegExp(`${FULFILLED}$`, 'g'); - const isRejected = new RegExp(`${REJECTED}$`, 'g'); + const isPendingRegexp = new RegExp(`${PENDING}$`, 'g'); + const isFulfilledRegexp = new RegExp(`${FULFILLED}$`, 'g'); + const isRejectedRegexp = new RegExp(`${REJECTED}$`, 'g'); - if (typeof action.type === 'string') { - if (action.type.match(isPending)) { - dispatch(showLoading()); - } else if ( - action.type.match(isFulfilled) ?? - action.type.match(isRejected) - ) { - dispatch(hideLoading()); - } + if (action.type.match(isPendingRegexp)) { + isPending = true; + } else if (action.type.match(isFulfilledRegexp)) { + isFulfilled = true; + } else if (action.type.match(isRejectedRegexp)) { + isRejected = true; } } + if (isPending) { + dispatch(showLoading()); + } else if (isFulfilled || isRejected) { + dispatch(hideLoading()); + } + return next(action); }; }; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index ea3a43563a..47433c289f 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4398,11 +4398,6 @@ a.status-card { align-items: center; justify-content: center; - @supports (display: grid) { - // hack to fix Chrome <57 - contain: strict; - } - & > span { max-width: 500px; } diff --git a/app/lib/inline_renderer.rb b/app/lib/inline_renderer.rb index eda3da2c29..0aebb13fce 100644 --- a/app/lib/inline_renderer.rb +++ b/app/lib/inline_renderer.rb @@ -37,13 +37,13 @@ class InlineRenderer private def preload_associations_for_status - ActiveRecord::Associations::Preloader.new(records: @object, associations: { + ActiveRecord::Associations::Preloader.new(records: [@object], associations: { active_mentions: :account, reblog: { active_mentions: :account, }, - }) + }).call end def current_user diff --git a/app/lib/ostatus/tag_manager.rb b/app/lib/ostatus/tag_manager.rb index 7d81316227..21b3d3aa58 100644 --- a/app/lib/ostatus/tag_manager.rb +++ b/app/lib/ostatus/tag_manager.rb @@ -52,7 +52,7 @@ class OStatus::TagManager ActivityPub::TagManager.instance.uri_to_local_id(tag) else matches = Regexp.new("objectId=([\\d]+):objectType=#{expected_type}").match(tag) - return matches[1] unless matches.nil? + matches[1] unless matches.nil? end end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 35f0b5fee1..3312183d47 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -12,7 +12,7 @@ class ApplicationMailer < ActionMailer::Base protected def locale_for_account(account, &block) - I18n.with_locale(account.user_locale || I18n.default_locale, &block) + I18n.with_locale(account.user_locale || I18n.locale || I18n.default_locale, &block) end def set_autoreply_headers! diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 2af2a3a41d..432b851b5e 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -202,6 +202,6 @@ class UserMailer < Devise::Mailer end def locale - @resource.locale.presence || I18n.default_locale + @resource.locale.presence || I18n.locale || I18n.default_locale end end diff --git a/app/models/account.rb b/app/models/account.rb index 5b23eb9cbb..9408d84ad4 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -455,8 +455,8 @@ class Account < ApplicationRecord end def inverse_alias(key, original_key) - define_method("#{key}=") do |value| - public_send("#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value)) + define_method(:"#{key}=") do |value| + public_send(:"#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value)) end define_method(key) do diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb index af1e6a68dc..db2e37184f 100644 --- a/app/models/account_domain_block.rb +++ b/app/models/account_domain_block.rb @@ -18,16 +18,12 @@ class AccountDomainBlock < ApplicationRecord belongs_to :account validates :domain, presence: true, uniqueness: { scope: :account_id }, domain: true - after_commit :remove_blocking_cache - after_commit :remove_relationship_cache + after_commit :invalidate_domain_blocking_cache private - def remove_blocking_cache + def invalidate_domain_blocking_cache Rails.cache.delete("exclude_domains_for:#{account_id}") - end - - def remove_relationship_cache - Rails.cache.delete_matched("relationship:#{account_id}:*") + Rails.cache.delete(['exclude_domains', account_id, domain]) end end diff --git a/app/models/announcement.rb b/app/models/announcement.rb index c5d6dd62e1..2cd7c1d5ed 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -78,9 +78,9 @@ class Announcement < ApplicationRecord else scope.select("name, custom_emoji_id, count(*) as count, exists(select 1 from announcement_reactions r where r.account_id = #{account.id} and r.announcement_id = announcement_reactions.announcement_id and r.name = announcement_reactions.name) as me") end - end + end.to_a - ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji) + ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call records end diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb index 0ea26e628d..4ddec9bf49 100644 --- a/app/models/concerns/account/interactions.rb +++ b/app/models/concerns/account/interactions.rb @@ -60,12 +60,6 @@ module Account::Interactions end end - def domain_blocking_map(target_account_ids, account_id) - accounts_map = Account.where(id: target_account_ids).select('id, domain').each_with_object({}) { |a, h| h[a.id] = a.domain } - blocked_domains = domain_blocking_map_by_domain(accounts_map.values.compact, account_id) - accounts_map.reduce({}) { |h, (id, domain)| h.merge(id => blocked_domains[domain]) } - end - def domain_blocking_map_by_domain(target_domains, account_id) follow_mapping(AccountDomainBlock.where(account_id: account_id, domain: target_domains), :domain) end diff --git a/app/models/concerns/account/search.rb b/app/models/concerns/account/search.rb index b02b9bd461..40d87aaaa1 100644 --- a/app/models/concerns/account/search.rb +++ b/app/models/concerns/account/search.rb @@ -124,7 +124,7 @@ module Account::Search tsquery = generate_query_for_search(terms) find_by_sql([BASIC_SEARCH_SQL, { limit: limit, offset: offset, tsquery: tsquery }]).tap do |records| - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call end end @@ -133,7 +133,7 @@ module Account::Search sql_template = following ? ADVANCED_SEARCH_WITH_FOLLOWING : ADVANCED_SEARCH_WITHOUT_FOLLOWING find_by_sql([sql_template, { id: account.id, limit: limit, offset: offset, tsquery: tsquery }]).tap do |records| - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call end end diff --git a/app/models/concerns/relationship_cacheable.rb b/app/models/concerns/relationship_cacheable.rb index 0d9359f7e7..c32a8d62c6 100644 --- a/app/models/concerns/relationship_cacheable.rb +++ b/app/models/concerns/relationship_cacheable.rb @@ -10,7 +10,7 @@ module RelationshipCacheable private def remove_relationship_cache - Rails.cache.delete("relationship:#{account_id}:#{target_account_id}") - Rails.cache.delete("relationship:#{target_account_id}:#{account_id}") + Rails.cache.delete(['relationship', account_id, target_account_id]) + Rails.cache.delete(['relationship', target_account_id, account_id]) end end diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index bd8b6f4eb9..6118e204a1 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -7,7 +7,7 @@ module Remotable def remotable_attachment(attachment_name, limit, suppress_errors: true, download_on_assign: true, attribute_name: nil) attribute_name ||= :"#{attachment_name}_remote_url" - define_method("download_#{attachment_name}!") do |url = nil| + define_method(:"download_#{attachment_name}!") do |url = nil| url ||= self[attribute_name] return if url.blank? @@ -24,29 +24,29 @@ module Remotable Request.new(:get, url).perform do |response| raise Mastodon::UnexpectedResponseError, response unless (200...300).cover?(response.code) - public_send("#{attachment_name}=", ResponseWithLimit.new(response, limit)) + public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit)) end rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } - public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present? + public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? raise e unless suppress_errors rescue Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Paperclip::Error, Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } - public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present? + public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? end nil end - define_method("#{attribute_name}=") do |url| - return if self[attribute_name] == url && public_send("#{attachment_name}_file_name").present? + define_method(:"#{attribute_name}=") do |url| + return if self[attribute_name] == url && public_send(:"#{attachment_name}_file_name").present? self[attribute_name] = url if has_attribute?(attribute_name) - public_send("download_#{attachment_name}!", url) if download_on_assign + public_send(:"download_#{attachment_name}!", url) if download_on_assign end - alias_method("reset_#{attachment_name}!", "download_#{attachment_name}!") + alias_method(:"reset_#{attachment_name}!", "download_#{attachment_name}!") end end end diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 0f4fd78cbf..5a53e73ba8 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -91,7 +91,7 @@ class CustomFilter < ApplicationRecord filters_hash.values.map { |cache| [cache.delete(:filter), cache] } end.to_a - active_filters.select { |custom_filter, _| !custom_filter.expired? } + active_filters.reject { |custom_filter, _| custom_filter.expired? } end def self.apply_cached_filters(cached_filters, status) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 41014fb418..095733673e 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -100,7 +100,7 @@ class Form::AdminSettings KEYS.each do |key| define_method(key) do - return instance_variable_get("@#{key}") if instance_variable_defined?("@#{key}") + return instance_variable_get(:"@#{key}") if instance_variable_defined?(:"@#{key}") stored_value = if UPLOAD_KEYS.include?(key) SiteUpload.where(var: key).first_or_initialize(var: key) @@ -110,12 +110,12 @@ class Form::AdminSettings Setting.public_send(key) end - instance_variable_set("@#{key}", stored_value) + instance_variable_set(:"@#{key}", stored_value) end end UPLOAD_KEYS.each do |key| - define_method("#{key}=") do |file| + define_method(:"#{key}=") do |file| value = public_send(key) value.file = file rescue Mastodon::DimensionsValidationError => e @@ -130,13 +130,13 @@ class Form::AdminSettings return false unless errors.empty? && valid? KEYS.each do |key| - next if PSEUDO_KEYS.include?(key) || !instance_variable_defined?("@#{key}") + next if PSEUDO_KEYS.include?(key) || !instance_variable_defined?(:"@#{key}") if UPLOAD_KEYS.include?(key) public_send(key).save else setting = Setting.where(var: key).first_or_initialize(var: key) - setting.update(value: typecast_value(key, instance_variable_get("@#{key}"))) + setting.update(value: typecast_value(key, instance_variable_get(:"@#{key}"))) end end end @@ -163,9 +163,9 @@ class Form::AdminSettings def validate_site_uploads UPLOAD_KEYS.each do |key| - next unless instance_variable_defined?("@#{key}") + next unless instance_variable_defined?(:"@#{key}") - upload = instance_variable_get("@#{key}") + upload = instance_variable_get(:"@#{key}") next if upload.valid? upload.errors.each do |error| diff --git a/app/models/form/import.rb b/app/models/form/import.rb index 29a2975c7b..712acf3706 100644 --- a/app/models/form/import.rb +++ b/app/models/form/import.rb @@ -43,14 +43,19 @@ class Form::Import validate :validate_data def guessed_type - return :muting if csv_headers_match?('Hide notifications') - return :following if csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') - return :following if file_name_matches?('follows') || file_name_matches?('following_accounts') - return :blocking if file_name_matches?('blocks') || file_name_matches?('blocked_accounts') - return :muting if file_name_matches?('mutes') || file_name_matches?('muted_accounts') - return :domain_blocking if file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains') - return :bookmarks if file_name_matches?('bookmarks') - return :lists if file_name_matches?('lists') + if csv_headers_match?('Hide notifications') || file_name_matches?('mutes') || file_name_matches?('muted_accounts') + :muting + elsif csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') || file_name_matches?('follows') || file_name_matches?('following_accounts') + :following + elsif file_name_matches?('blocks') || file_name_matches?('blocked_accounts') + :blocking + elsif file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains') + :domain_blocking + elsif file_name_matches?('bookmarks') + :bookmarks + elsif file_name_matches?('lists') + :lists + end end # Whether the uploaded CSV file seems to correspond to a different import type than the one selected diff --git a/app/models/notification.rb b/app/models/notification.rb index 60f834a633..54212d675f 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -111,7 +111,7 @@ class Notification < ApplicationRecord # Instead of using the usual `includes`, manually preload each type. # If polymorphic associations are loaded with the usual `includes`, other types of associations will be loaded more. - ActiveRecord::Associations::Preloader.new(records: grouped_notifications, associations: associations) + ActiveRecord::Associations::Preloader.new(records: grouped_notifications, associations: associations).call end unique_target_statuses = notifications.filter_map(&:target_status).uniq diff --git a/app/presenters/account_relationships_presenter.rb b/app/presenters/account_relationships_presenter.rb index 5d2b5435dd..8482ef54da 100644 --- a/app/presenters/account_relationships_presenter.rb +++ b/app/presenters/account_relationships_presenter.rb @@ -5,8 +5,9 @@ class AccountRelationshipsPresenter :muting, :requested, :requested_by, :domain_blocking, :endorsed, :account_note - def initialize(account_ids, current_account_id, **options) - @account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a.to_i } + def initialize(accounts, current_account_id, **options) + @accounts = accounts.to_a + @account_ids = @accounts.pluck(:id) @current_account_id = current_account_id @following = cached[:following].merge(Account.following_map(@uncached_account_ids, @current_account_id)) @@ -16,10 +17,11 @@ class AccountRelationshipsPresenter @muting = cached[:muting].merge(Account.muting_map(@uncached_account_ids, @current_account_id)) @requested = cached[:requested].merge(Account.requested_map(@uncached_account_ids, @current_account_id)) @requested_by = cached[:requested_by].merge(Account.requested_by_map(@uncached_account_ids, @current_account_id)) - @domain_blocking = cached[:domain_blocking].merge(Account.domain_blocking_map(@uncached_account_ids, @current_account_id)) @endorsed = cached[:endorsed].merge(Account.endorsed_map(@uncached_account_ids, @current_account_id)) @account_note = cached[:account_note].merge(Account.account_note_map(@uncached_account_ids, @current_account_id)) + @domain_blocking = domain_blocking_map + cache_uncached! @following.merge!(options[:following_map] || {}) @@ -36,6 +38,31 @@ class AccountRelationshipsPresenter private + def domain_blocking_map + target_domains = @accounts.pluck(:domain).compact.uniq + blocks_by_domain = {} + + # Fetch from cache + cache_keys = target_domains.map { |domain| domain_cache_key(domain) } + Rails.cache.read_multi(*cache_keys).each do |key, blocking| + blocks_by_domain[key.last] = blocking + end + + uncached_domains = target_domains - blocks_by_domain.keys + + # Read uncached values from database + AccountDomainBlock.where(account_id: @current_account_id, domain: uncached_domains).pluck(:domain).each do |domain| + blocks_by_domain[domain] = true + end + + # Write database reads to cache + to_cache = uncached_domains.to_h { |domain| [domain_cache_key(domain), blocks_by_domain[domain]] } + Rails.cache.write_multi(to_cache, expires_in: 1.day) + + # Return formatted value + @accounts.each_with_object({}) { |account, h| h[account.id] = blocks_by_domain[account.domain] } + end + def cached return @cached if defined?(@cached) @@ -47,28 +74,23 @@ class AccountRelationshipsPresenter muting: {}, requested: {}, requested_by: {}, - domain_blocking: {}, endorsed: {}, account_note: {}, } - @uncached_account_ids = [] + @uncached_account_ids = @account_ids.uniq - @account_ids.each do |account_id| - maps_for_account = Rails.cache.read("relationship:#{@current_account_id}:#{account_id}") - - if maps_for_account.is_a?(Hash) - @cached.deep_merge!(maps_for_account) - else - @uncached_account_ids << account_id - end + cache_ids = @account_ids.map { |account_id| relationship_cache_key(account_id) } + Rails.cache.read_multi(*cache_ids).each do |key, maps_for_account| + @cached.deep_merge!(maps_for_account) + @uncached_account_ids.delete(key.last) end @cached end def cache_uncached! - @uncached_account_ids.each do |account_id| + to_cache = @uncached_account_ids.to_h do |account_id| maps_for_account = { following: { account_id => following[account_id] }, followed_by: { account_id => followed_by[account_id] }, @@ -77,12 +99,21 @@ class AccountRelationshipsPresenter muting: { account_id => muting[account_id] }, requested: { account_id => requested[account_id] }, requested_by: { account_id => requested_by[account_id] }, - domain_blocking: { account_id => domain_blocking[account_id] }, endorsed: { account_id => endorsed[account_id] }, account_note: { account_id => account_note[account_id] }, } - Rails.cache.write("relationship:#{@current_account_id}:#{account_id}", maps_for_account, expires_in: 1.day) + [relationship_cache_key(account_id), maps_for_account] end + + Rails.cache.write_multi(to_cache, expires_in: 1.day) + end + + def domain_cache_key(domain) + ['exclude_domains', @current_account_id, domain] + end + + def relationship_cache_key(account_id) + ['relationship', @current_account_id, account_id] end end diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 844c84f410..ee79c38195 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -27,29 +27,7 @@ class InitialStateSerializer < ActiveModel::Serializer end def meta - store = { - streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, - access_token: object.token, - locale: I18n.locale, - domain: Addressable::IDNA.to_unicode(instance_presenter.domain), - title: instance_presenter.title, - admin: object.admin&.id&.to_s, - search_enabled: Chewy.enabled?, - repository: Mastodon::Version.repository, - source_url: instance_presenter.source_url, - version: instance_presenter.version, - limited_federation_mode: Rails.configuration.x.limited_federation_mode, - mascot: instance_presenter.mascot&.file&.url, - profile_directory: Setting.profile_directory, - trends_enabled: Setting.trends, - registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, - timeline_preview: Setting.timeline_preview, - activity_api_enabled: Setting.activity_api_enabled, - single_user_mode: Rails.configuration.x.single_user_mode, - trends_as_landing_page: Setting.trends_as_landing_page, - status_page_url: Setting.status_page_url, - sso_redirect: sso_redirect, - } + store = default_meta_store if object.current_account store[:me] = object.current_account.id.to_s @@ -103,8 +81,8 @@ class InitialStateSerializer < ActiveModel::Serializer ActiveRecord::Associations::Preloader.new( records: [object.current_account, object.admin, object.owner, object.disabled_account, object.moved_to_account].compact, - associations: [:account_stat, :user, { moved_to_account: [:account_stat, :user] }] - ) + associations: [:account_stat, { user: :role, moved_to_account: [:account_stat, { user: :role }] }] + ).call store[object.current_account.id.to_s] = serialized_account(object.current_account) if object.current_account store[object.admin.id.to_s] = serialized_account(object.admin) if object.admin @@ -125,6 +103,32 @@ class InitialStateSerializer < ActiveModel::Serializer private + def default_meta_store + { + access_token: object.token, + activity_api_enabled: Setting.activity_api_enabled, + admin: object.admin&.id&.to_s, + domain: Addressable::IDNA.to_unicode(instance_presenter.domain), + limited_federation_mode: Rails.configuration.x.limited_federation_mode, + locale: I18n.locale, + mascot: instance_presenter.mascot&.file&.url, + profile_directory: Setting.profile_directory, + registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, + repository: Mastodon::Version.repository, + search_enabled: Chewy.enabled?, + single_user_mode: Rails.configuration.x.single_user_mode, + source_url: instance_presenter.source_url, + sso_redirect: sso_redirect, + status_page_url: Setting.status_page_url, + streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, + timeline_preview: Setting.timeline_preview, + title: instance_presenter.title, + trends_as_landing_page: Setting.trends_as_landing_page, + trends_enabled: Setting.trends, + version: instance_presenter.version, + } + end + def object_account_user object.current_account.user end diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index b437ff4759..7b85b09d8f 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -218,7 +218,7 @@ class AccountSearchService < BaseService records = query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call records rescue Faraday::ConnectionFailed, Parslet::ParseFailed diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index b74ae1a412..6ce29d7b8b 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -11,7 +11,7 @@ class BatchedRemoveStatusService < BaseService ActiveRecord::Associations::Preloader.new( records: statuses, associations: options[:skip_side_effects] ? :reblogs : [:account, :tags, reblogs: :account] - ) + ).call statuses_and_reblogs = statuses.flat_map { |status| [status] + status.reblogs } @@ -23,7 +23,7 @@ class BatchedRemoveStatusService < BaseService ActiveRecord::Associations::Preloader.new( records: statuses_with_account_conversations, associations: [mentions: :account] - ) + ).call statuses_with_account_conversations.each do |status| status.unlink_from_conversations! diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 1bbcfce3ea..78a846e03e 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -21,7 +21,7 @@ class UpdateAccountService < BaseService def authorize_all_follow_requests(account) follow_requests = FollowRequest.where(target_account: account) - follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? } + follow_requests = follow_requests.preload(:account).reject { |req| req.account.silenced? } AuthorizeFollowWorker.push_bulk(follow_requests, limit: 1_000) do |req| [req.account_id, req.target_account_id] end diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml index 6eb141abc9..2aaca8962c 100644 --- a/app/views/admin/accounts/_buttons.html.haml +++ b/app/views/admin/accounts/_buttons.html.haml @@ -6,8 +6,8 @@ %p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account) = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote? - - if deletion_request.present? - = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, account) + - if deletion_request.present? && can?(:destroy, account) + = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } - else .action-buttons %div @@ -15,8 +15,8 @@ = link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account) - if account.user_disabled? = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) - - else - = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' if can?(:disable, account.user) + - elsif can?(:disable, account.user) + = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' - if account.sensitized? = link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account) - elsif !account.local? || account.user_approved? @@ -29,13 +29,13 @@ - if account.user_pending? = link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user) = link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) - - unless account.user_confirmed? - = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' if can?(:confirm, account.user) - - if !account.local? || account.user_approved? - = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' if can?(:suspend, account) + - if !account.user_confirmed? && can?(:confirm, account.user) + = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' + - if (!account.local? || account.user_approved?) && can?(:suspend, account) + = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' %div - if account.local? - - if !account.memorial? && account.user_approved? - = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, account) - - else - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) + - if !account.memorial? && account.user_approved? && can?(:memorialize, account) + = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + - elsif can?(:redownload, account) + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' diff --git a/app/views/admin/accounts/_local_account.html.haml b/app/views/admin/accounts/_local_account.html.haml index 4b361fc8d1..82197cda43 100644 --- a/app/views/admin/accounts/_local_account.html.haml +++ b/app/views/admin/accounts/_local_account.html.haml @@ -47,8 +47,8 @@ - else = t 'admin.accounts.security_measures.only_password' %td - - if account.user&.two_factor_enabled? - = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete if can?(:disable_2fa, account.user) + - if account.user&.two_factor_enabled? && can?(:disable_2fa, account.user) + = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete - if can?(:reset_password, account.user) %tr %td diff --git a/config/application.rb b/config/application.rb index b6426516ee..990a89383e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -63,13 +63,6 @@ module Mastodon # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.0 - # TODO: Release a version which uses the 7.0 defaults as specified above, - # but preserves the 6.1 cache format as set below. In a subsequent change, - # remove this line setting to 6.1 cache format, and then release another version. - # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#new-activesupport-cache-serialization-format - # https://github.com/mastodon/mastodon/pull/24241#discussion_r1162890242 - config.active_support.cache_format_version = 6.1 - # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. diff --git a/config/boot.rb b/config/boot.rb index 3e44cbe581..717de85f20 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true unless ENV.key?('RAILS_ENV') - STDERR.puts 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".' + warn 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".' exit 1 end diff --git a/config/initializers/3_omniauth.rb b/config/initializers/3_omniauth.rb index d316c3b73a..aa8ba1a056 100644 --- a/config/initializers/3_omniauth.rb +++ b/config/initializers/3_omniauth.rb @@ -79,7 +79,7 @@ Devise.setup do |config| oidc_options[:client_auth_method] = ENV['OIDC_CLIENT_AUTH_METHOD'] if ENV['OIDC_CLIENT_AUTH_METHOD'] # OPTIONAL (default: basic) scope_string = ENV['OIDC_SCOPE'] if ENV['OIDC_SCOPE'] # NEED scopes = scope_string.split(',') - oidc_options[:scope] = scopes.map { |x| x.to_sym } + oidc_options[:scope] = scopes.map(&:to_sym) oidc_options[:response_type] = ENV['OIDC_RESPONSE_TYPE'] if ENV['OIDC_RESPONSE_TYPE'] # OPTIONAL (default: code) oidc_options[:response_mode] = ENV['OIDC_RESPONSE_MODE'] if ENV['OIDC_RESPONSE_MODE'] # OPTIONAL (default: query) oidc_options[:display] = ENV['OIDC_DISPLAY'] if ENV['OIDC_DISPLAY'] # OPTIONAL (default: page) diff --git a/config/initializers/cookie_rotator.rb b/config/initializers/cookie_rotator.rb index b829b1a90b..ccc2c6b21f 100644 --- a/config/initializers/cookie_rotator.rb +++ b/config/initializers/cookie_rotator.rb @@ -1,9 +1,6 @@ # frozen_string_literal: true -# TODO: Remove after 4.2.0 -Rails.application.configure do - config.active_support.key_generator_hash_digest_class = OpenSSL::Digest::SHA1 -end +# TODO: remove this file some time after 4.3.0 Rails.application.config.after_initialize do Rails.application.config.action_dispatch.cookies_rotations.tap do |cookies| @@ -12,9 +9,8 @@ Rails.application.config.after_initialize do secret_key_base = Rails.application.secret_key_base - # TODO: Switch to SHA1 after 4.2.0 key_generator = ActiveSupport::KeyGenerator.new( - secret_key_base, iterations: 1000, hash_digest_class: OpenSSL::Digest::SHA256 + secret_key_base, iterations: 1000, hash_digest_class: OpenSSL::Digest::SHA1 ) key_len = ActiveSupport::MessageEncryptor.key_len diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index b0951814e3..2fd87acc8a 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -175,7 +175,7 @@ SimpleForm.setup do |config| # config.item_wrapper_class = nil # How the label text should be generated altogether with the required text. - config.label_text = lambda { |label, required, _explicit_label| "#{label} #{required}" } + config.label_text = ->(label, required, _explicit_label) { "#{label} #{required}" } # You can define the class to use on all labels. Default is nil. # config.label_class = nil diff --git a/config/initializers/trusted_proxies.rb b/config/initializers/trusted_proxies.rb index aa2f4510c2..33bfddbdf1 100644 --- a/config/initializers/trusted_proxies.rb +++ b/config/initializers/trusted_proxies.rb @@ -1,13 +1,8 @@ # frozen_string_literal: true -module Rack - class Request - def trusted_proxy?(ip) - if Rails.application.config.action_dispatch.trusted_proxies.nil? - super - else - Rails.application.config.action_dispatch.trusted_proxies.any? { |proxy| proxy === ip } - end - end - end +unless Rails.application.config.action_dispatch.trusted_proxies.nil? + # Rack is configured with a default collection of trusted proxies + # If Rails has been configured to use a specific list, configure + # Rack to use this Proc, which enforces the Rails-configured list. + Rack::Request.ip_filter = ->(ip) { Rails.application.config.action_dispatch.trusted_proxies.include?(ip) } end diff --git a/config/locales/activerecord.ia.yml b/config/locales/activerecord.ia.yml new file mode 100644 index 0000000000..480fd56f63 --- /dev/null +++ b/config/locales/activerecord.ia.yml @@ -0,0 +1,8 @@ +--- +ia: + activerecord: + attributes: + user: + password: Contrasigno + user/account: + username: Nomine de usator diff --git a/config/locales/activerecord.ie.yml b/config/locales/activerecord.ie.yml new file mode 100644 index 0000000000..0c63299e04 --- /dev/null +++ b/config/locales/activerecord.ie.yml @@ -0,0 +1,9 @@ +--- +ie: + activerecord: + attributes: + poll: + expires_at: Cludent date + options: Optiones + user: + password: Passa-parol diff --git a/config/locales/activerecord.lad.yml b/config/locales/activerecord.lad.yml new file mode 100644 index 0000000000..625d897d0b --- /dev/null +++ b/config/locales/activerecord.lad.yml @@ -0,0 +1,51 @@ +--- +lad: + activerecord: + attributes: + poll: + expires_at: Limito temporal + options: Opsyones + user: + agreement: Akodro de servisyo + email: Adreso de posta elektronika + locale: Lingua + password: Kod + user/account: + username: Nombre de uzador + user/invite_request: + text: Razon + errors: + models: + account: + attributes: + username: + invalid: solo puede kontener letras, shifras i sulinyados + reserved: esta rezervado + admin/webhook: + attributes: + url: + invalid: no es adreso URL valido + doorkeeper/application: + attributes: + website: + invalid: no es adreso URL valido + import: + attributes: + data: + malformed: tiene formato yerrado + user: + attributes: + email: + blocked: uza un prokurador de posta no autorizado + unreachable: no parese existir + role_id: + elevated: no puede ser mas alto ke tu rolo aktual + user_role: + attributes: + permissions_as_keys: + dangerous: inkluir permisos ke no son siguros para el rolo de baza + elevated: no se puede inkluir permisos kualos no tiene tu rolo aktual + own_role: no se puede trokar kon tu rolo aktual + position: + elevated: no puede ser mas alto ke tu rolo aktual + own_role: no se puede trokar kon tu rolo aktual diff --git a/config/locales/activerecord.pa.yml b/config/locales/activerecord.pa.yml index bb8a6c834d..ea95c89477 100644 --- a/config/locales/activerecord.pa.yml +++ b/config/locales/activerecord.pa.yml @@ -1 +1,23 @@ +--- pa: + activerecord: + attributes: + poll: + expires_at: ਆਖਰੀ ਤਾਰੀਖ + options: ਚੋਣਾਂ + user: + agreement: ਸੇਵਾ ਸਮਝੌਤਾ + email: ਈਮੇਲ ਪਤਾ + locale: ਲੋਕੇਲ + password: ਪਾਸਵਰਡ + user/account: + username: ਵਰਤੋਂਕਾਰ-ਨਾਂ + user/invite_request: + text: ਕਾਰਨ + errors: + models: + account: + attributes: + username: + invalid: ਸਿਰਫ਼ ਅੱਖਰ, ਅੰਕ ਅਤੇ ਹੇਠਾਂ-ਰੇਖਾ ਹੀ ਹੋੋਣੀ ਚਾਹੀਦੀ ਹੈ + reserved: ਰਾਖਵਾਂ ਹੈ diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/devise.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml new file mode 100644 index 0000000000..16d51dba16 --- /dev/null +++ b/config/locales/devise.ie.yml @@ -0,0 +1,28 @@ +--- +ie: + devise: + failure: + invalid: Ínvalid %{authentication_keys} o passa-parol. + not_found_in_database: Ínvalid %{authentication_keys} o passa-parol. + mailer: + email_changed: + extra: Si tu ne changeat tui email-adresse, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto. + password_change: + explanation: Li passa-parol de tui conto ha esset changeat. + extra: Si tu ne changeat tui passa-parol, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto. + subject: 'Mastodon: Passa-parol changeat' + title: Passa-parol changeat + reset_password_instructions: + action: Changear passa-parol + explanation: Tu demandat un nov passa-parol por tui conto. + extra: Si tu ne demandat to-ci, ples ignorar ti-ci email. Tui passa-parol ne va changear til que tu accessaye li ligament supra e crear un nov. + subject: 'Mastodon: Instructiones por reiniciar li passa-parol' + title: Reiniciar passa-parol + two_factor_disabled: + explanation: 2-factor autentication por tui conto ha esset desactivisat. Aperter session nu es possibil solmen per email-adresse e passa-parol. + passwords: + no_token: Tu ne posse accessar ti-ci págine sin venir de un email pri reiniciar li passa-parol. Si tu ha venit de un email pri reiniciar li passa-parol, ples far cert que tu usat li complet URL providet. + send_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email. + send_paranoid_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email. + updated: Tui passa-parol ha esset changeat successosimen. Tu nu ha apertet session. + updated_not_active: Tui passa-parol ha esset changeat successosimen. diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 7d5668c920..fb90c08c7f 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -13,7 +13,7 @@ io: locked: Tua konto esas extingita. not_found_in_database: Nejusta %{authentication_keys}. pending: Vua konti ankore kontrolesas. - timeout: Tua kunsido expiris. Voluntez rienirar por durar. + timeout: Vua kunsido expiris. Voluntez rienirar por avancar. unauthenticated: Tu devas enirar o membreskar por durar. unconfirmed: Tu devas konfirmar tua konto por durar. mailer: @@ -102,7 +102,7 @@ io: unlocks: send_instructions: Tu recevos retpost-mesajo kun instrucioni por riacendar tua konto pos kelka minuti. send_paranoid_instructions: Se tua retpost-adreso existas en nia datumbazo, tu recevos ligilo por riacendar tua konto per retpost-meajo. - unlocked: Tua konto riacendesis senprobleme, tu nun esas enirinta. + unlocked: Vua konto desklefagesis senprobleme. Voluntez enirar por avancar. errors: messages: already_confirmed: ja konfirmesis, voluntez probar enirar diff --git a/config/locales/devise.lad.yml b/config/locales/devise.lad.yml new file mode 100644 index 0000000000..63933b80fc --- /dev/null +++ b/config/locales/devise.lad.yml @@ -0,0 +1,115 @@ +--- +lad: + devise: + confirmations: + confirmed: Tu adreso de posta elektronika tyene sido konfirmado korektamente. + send_instructions: Risiviras una posta elektronika kon instruksyones para konfirmar tu adreso de posta elektronika en unos minutos. Por favor, komprova tu kuti de spam si no risivites esta posta elektronika. + send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras una posta elektronika kon instruksyones sobre komo konfirmar tu adreso de posta elektronika en pokos minutos. + failure: + already_authenticated: Ya te konektates kon tu kuento. + inactive: Tu kuento ainda no tyene sido aktivado. + invalid: "%{authentication_keys} o kod invalido." + last_attempt: Aprova una vez mas antes de ke tu kuento sea blokado. + locked: Tu kuento esta blokado. + not_found_in_database: Inkorekto %{authentication_keys} o kod. + pending: Tu ainda esta basho revizyon. + timeout: Tu sesyon tiene kadukado. Por favor konektate kon tu kuento de muevo para kontinuar. + unauthenticated: Kale konektarte kon tu kuento o enregistrarte antes de kontinuar. + unconfirmed: Tyenes ke konfirmar tu adreso de posta elektronika antes de kontinuar. + mailer: + confirmation_instructions: + action: Verifika tu adreso de posta elektronika + action_with_app: Konfirma i volta a %{app} + explanation: Tyenes kriyado un kuento en %{host} kon este adreso de posta elektronika. Estas a un solo klik de aktivarlo. Si no fuites tu, por favor ignora esta posta elektronika. + explanation_when_pending: Tienes solisitado una envitasyon a %{host} kon este adreso de posta elektronika. Una vez ke konfirmes tu adreso de posta elektronika, revizaremos tu solisitud. Puedes konektarte kon tu kuento para trokar tus datos o supremir tu kuento, pero no puedes akseder a la majorita de las funciones hasta ke tu kuento sea achetado. Si tu solisitud es refuzada, tus datos seran supremidos, por lo ke no ay menester de dinguna aksyon adicional por tu parte. Si no fuites tu, por favor ignora esta posta elektronika. + extra_html: Por favor, reviza las reglas del sirvidor i muestros terminos de sirvisyo. + subject: 'Mastodon: Instruksyones de konfirmasyon para %{instance}''' + title: Verifika tu adreso de posta elektronika + email_changed: + explanation: 'La posta elektronika para tu kuento esta siendo trokado a:' + extra: Si no tienes trokado tu posta elektronika, es probavle ke algun aya konsigido akseso a tu kuento. Por favor troka tu kod inmediatamente o kontakta al administrador de la instansya si no puedes konektarte kon tu kuento. + subject: 'Mastodon: Posta elektronika trokada' + title: Muevo adreso de posta elektronika + password_change: + explanation: El kod de tu kuento tyene sido trokado. + extra: Si no tienes trokado tu kod. es probavle ke algun a konsigido akseso a tu kuento. Por favor troka tu kod inmediatamente o kontakta al administrador de la instansya si no puedes konektarte kon tu kuento. + subject: 'Mastodon: Kod trokado' + title: Kod trokado + reconfirmation_instructions: + explanation: Konfirma el muevo adreso para trokar tu posta elektronika. + extra: Si no inisyates este trokamiento, por favor ignora esta posta. Este adreso de posta elektronika para el kuento de Mastodon no trokara asta ke aksedas al atadijo arriva. + subject: 'Mastodon: Konfirma posta elektronika para %{instance}' + title: Verifika tu adreso de posta elektronika + reset_password_instructions: + action: Troka el kod + explanation: Solisitates un muevo kod para tu kuento. + extra: Si no solisitates esto, por favor ignora esta posta. Tu kod no trokara asta ke tu aksedas al atadijo arriva i kriyes un muevo. + subject: 'Mastodon: Instruksyones para reinisyar kod' + title: Reinisyar kod + two_factor_disabled: + explanation: La autentifikasyon de dos pasos para tu kuento a sido inkapasitada. Agora puedes konektarte solamente uzando el adreso de posta elektronika i el kod. + subject: 'Mastodon: La autentifikasyon de dos pasos esta inkapasitada' + title: Autentifikasyon 2FA inkapasitada + two_factor_enabled: + explanation: La autentifikasyon de dos pasos para tu kuento a sido kapasitada. Se rekiere un token djenerado por la aplikasyon TOTP konektada para entrar. + subject: 'Mastodon: La autentifikasyon de dos pasos esta kapasitada' + title: Autentifikasyon 2FA aktivada + two_factor_recovery_codes_changed: + explanation: Los kodiches de rekuperasyon previos tienen sido invalidados i se djeneraron kodiches muevos. + subject: 'Mastodon: Los kodiches de rekuperasyon de dos pasos fueron rejenerados' + title: Kodiches de rekuperasyon 2FA trokados + unlock_instructions: + subject: 'Mastodon: Instruksyones para dezblokar' + webauthn_credential: + added: + explanation: La sigiente yave de sigurita tiene sido adjustada a tu kuento + subject: 'Mastodon: Mueva yave de sigurita' + title: Se tiene adjustado una mueva yave de sigurita + deleted: + explanation: La sigiente yave de sigurita a sido supremida de tu kuento + subject: 'Mastodon: Yave de sigurita supremida' + title: Una de tus yaves de sigurita tiene sido supremida + webauthn_disabled: + explanation: La autentifikasyon kon yaves de sigurita a sido inkapasitada para tu kuento. Agora el inisyo de sesyon solo es posivle utilizando el token djeenerado por la aplikasyon TOTP konektada. + subject: 'Mastodon: autentifikasyon kon yaves de sigurita inkapasitada' + title: Yaves de sigurita inkapasitadas + webauthn_enabled: + explanation: La autentifikasyon kon yave de sigurita a sido kapasitada para tu kuento. Agora tu yave de sigurita puede ser utilizada para inisyar sesyon. + subject: 'Mastodon: Autentifikasyon de yave de sigurita aktivada' + title: Yaves de sigurita kapasitadas + omniauth_callbacks: + failure: No se te pudo autentifikar dizde %{kind} porke “%{reason}”. + success: Autentifikado djustamente dizde el kuento de %{kind}. + passwords: + no_token: No puedes akseder a esta pajina si no vienes dizde una posta elektronika de restablesimyento de kod. Si vienes dizde una posta elektronika de restablesimyento de kod, por favor asigurate de utilizar el URL kompleto embiado. + send_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. + send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta no deseado si no risives akeya posta elektronika. + updated: Tu kod a sido trokado kon reusho. Tinenes entrado en kuento. + updated_not_active: Tu kod se tiene trokado kon reusho. + registrations: + destroyed: Tu kuento a sido efasado kon reusho. Asperamos verte de muevo pronto. + signed_up: Bienvenido! Te tienes enrejistrado djustamente. + signed_up_but_inactive: Te tienes enrejistrado kon reusho. Entanto, no se pudio inisyar sesyon porke tu kuento ainda no esta aktivado. + signed_up_but_locked: Te tienes enrejistrado kon reusho. Entanto, no pudites konektarte kon tu kuento porke tu kuento esta blokado. + signed_up_but_pending: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Dempues de klikar en el atadijo, revizaremos tu solisitud. Seras avizado si se acheta. + signed_up_but_unconfirmed: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Por favor, sigue el atadijo para aktivar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. + update_needs_confirmation: Tienes aktualizado tu kuento kon reusho, pero kale verifikar tu muevo adreso de posta elektronika. Por favor, komprova tu posta elektronika i sige el atadijo de konfirmasyon para konfirmar tu muevo adreso de posta elektronika. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. + updated: Tu kuento se aktualizo kon reusho. + sessions: + already_signed_out: Salites del kuento kon reusho. + signed_in: Konektates kon tu kuento kon reusho. + signed_out: Salites del kuento kon reusho. + unlocks: + send_instructions: En unos minutos risiviras una posta elektronika kon instruksyones para dezblokar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. + send_paranoid_instructions: Si tu kuento existe, en unos minutos risiviras una posta elektronika kon instruksyones para dezblokarlo. Por favor, reviza tu kuti de posta spam si no risives akeya posta elektronika. + unlocked: Tu kuento fue dezblokado kon reusho. Por favor, konektate kon tu kuento para kontinuar. + errors: + messages: + already_confirmed: ya estaba konfirmado, por favor aprova konektarte kon tu kuento + confirmation_period_expired: nesesita konfirmarse dentro de %{period}, por favor, solisita una mueva + expired: tiene kadukado, por favor solisita una mueva + not_found: no topado + not_locked: no estava blokado + not_saved: + one: '1 yerro impidio ke este %{resource} se guadrase:' + other: "%{count} yerros impidieron ke este %{resource} se guadrase:" diff --git a/config/locales/devise.pa.yml b/config/locales/devise.pa.yml index bb8a6c834d..7d56361f63 100644 --- a/config/locales/devise.pa.yml +++ b/config/locales/devise.pa.yml @@ -1 +1,18 @@ +--- pa: + devise: + confirmations: + confirmed: ਤੁਹਾਡੇ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ ਹੈ। + failure: + inactive: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਸਰਗਰਮ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। + invalid: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ। + last_attempt: ਤੁਹਾਡੇ ਖਾਤੇ ਦੇ ਲਾਕ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਹੋਰ ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। + locked: ਤੁਹਾਡਾ ਖਾਤਾ ਲਾਕ ਹੋ ਗਿਆ ਹੈ। + not_found_in_database: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ। + pending: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਵੀ ਪੜਤਾਲ ਅਧੀਨ ਹੈ। + timeout: ਤੁਹਾਡੇ ਸ਼ੈਸ਼ਨ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਫੇਰ ਲਾਗਇਨ ਕਰੋ। + unauthenticated: ਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਜਾਂ ਸਾਈਨ ਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। + sessions: + already_signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ। + signed_in: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਇਨ ਕੀਤਾ। + signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ। diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/doorkeeper.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/doorkeeper.ie.yml b/config/locales/doorkeeper.ie.yml new file mode 100644 index 0000000000..83c9cc564f --- /dev/null +++ b/config/locales/doorkeeper.ie.yml @@ -0,0 +1,11 @@ +--- +ie: + doorkeeper: + grouped_scopes: + title: + follow: Seques, silentias e bloccas + mutes: Silentias + scopes: + read:mutes: vider tui silentias + write:conversations: silentiar e deleter conversationes + write:mutes: silentiar persones e conversationes diff --git a/config/locales/doorkeeper.io.yml b/config/locales/doorkeeper.io.yml index e2418e4c77..a71fa95841 100644 --- a/config/locales/doorkeeper.io.yml +++ b/config/locales/doorkeeper.io.yml @@ -122,12 +122,14 @@ io: admin/accounts: Administrar di konti admin/all: Omna administrofuncioni admin/reports: Administro di raporti + all: Kompleta aceso a vua Mastodon-konto blocks: Restriktita bookmarks: Libromarki conversations: Konversi crypto: Intersequanta chifro favourites: Favoriziti filters: Filtrili + follow: Sequati, silencigati e blokusati follows: Sequati lists: Listi media: Mediatachaji diff --git a/config/locales/doorkeeper.lad.yml b/config/locales/doorkeeper.lad.yml new file mode 100644 index 0000000000..f52bac39c2 --- /dev/null +++ b/config/locales/doorkeeper.lad.yml @@ -0,0 +1,195 @@ +--- +lad: + activerecord: + attributes: + doorkeeper/application: + name: Nombre de aplikasyon + redirect_uri: URI para readreso + scopes: Ambitos + website: Sitio internetiko + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: no puede kontener un fragmento. + invalid_uri: deve ser un URI valido. + relative_uri: deve ser un URI asoluto. + secured_uri: deve ser un URI de HTTPS/SSL. + doorkeeper: + applications: + buttons: + authorize: Autoriza + cancel: Anula + destroy: Destruye + edit: Edita + submit: Embia + confirmations: + destroy: Estas siguro? + edit: + title: Edita aplikasyon + form: + error: Atyo! Komprova tu formulario + help: + native_redirect_uri: Utiliza %{native_redirect_uri} para provas lokalas + redirect_uri: Uza una linya por URI + scopes: Separa los ambitos kon espasyos. Deshalo en blanko para kulanear los ambitos predeterminados. + index: + application: Aplikasyon + callback_url: URL de callback + delete: Efasa + empty: No tienes aplikasyones. + name: Nombre + new: Mueva aplikasyon + scopes: Ambitos + show: Amostra + title: Tus aplikasyones + new: + title: Mueva aplikasyon + show: + actions: Aksyones + application_id: Yave de mushteri + callback_urls: URLs de callback + scopes: Ambitos + secret: Mushteri sekreto + title: 'Aplikasyon: %{name}' + authorizations: + buttons: + authorize: Autoriza + deny: Dezautoriza + error: + title: Un yerro tiene afitado + new: + prompt_html: "%{client_name} kere permiso para akseder tu kuento. Es una aplikasyon de terseros. Si no konfias en eya, no deverias autorizarla." + review_permissions: Reviza permisos + title: Autorizasyon rekerida + show: + title: Kopia este kodiche de autorizasyon i apegalo en la aplikasyon. + authorized_applications: + buttons: + revoke: Revoka + confirmations: + revoke: Estas siguro? + index: + authorized_at: Autorizado el %{date} + description_html: Estas son las aplikasyones ke pueden akseder tu kuento uzando el API. Si ay aplikasyones aki las kualas no rekoneses, o unas ke no se komporten bien, puedes revokar sus akseso. + last_used_at: Ultimo uzo el %{date} + never_used: Nunkua uzado + scopes: Permisos + superapp: Interno + title: Tus aplikasyones autorizadas + errors: + messages: + access_denied: El patron del rekurso o el sirvidor de autorizasyon refuzo tu solisitud. + credential_flow_not_configured: Las kredensyalas de kod del patron del rekurso no funksyonan porke Doorkeeper.configure.resource_owner_from_credentials no esta konfigurado. + invalid_client: La autentifikasyon del mushteri no reushida porke el mushteri no es konesido, no ay autentifikasyon del mushteri inkluyida, o el metodo de autentifikasyon no es suportada. + invalid_grant: La konsesyon de autorizasyon ofresida es invalida, kadukada, revokada, no koensida kon el URI de readreso utilizado en la solisitud de autorizasyon, o fue emitida para otro mushteri. + invalid_redirect_uri: El URI de readreso inkluydo no es valido. + invalid_request: + missing_param: 'Parametro rekerido no topado: %{value}.' + request_not_authorized: Solisitud deve ser autorizada. Parametro rekerido para autorizar la solisitud no topado o no valido. + unknown: La solisitud no tiene un parametro rekerido, inkluye una valuta de parametro no suportada o es yerrado de otra forma. + invalid_resource_owner: Las kredensyalas de patron del rekurso no son validas o patron del rekurso no topado + invalid_scope: El ambito pedido es invalido, no konesido o yerrado. + invalid_token: + expired: El token de akseso tiene kadukado + revoked: El token de akseso fue revokado + unknown: El token de akseso no es valido + resource_owner_authenticator_not_configured: El patron del rekurso no topado porke Doorkeeper.configure.resource_owner_authenticator no esta konfigurado. + server_error: El sirvidor de autorizasyon topo una kondisyon no ekspektada ke no le permite kumplir kon la solisitud. + temporarily_unavailable: El sirvidor de autorizasyon agora no puede realizar la solisitud porke el sirvidor esta sobrekargado o basho mantenimiento. + unauthorized_client: El mushteri no esta autorizado para realizar esta solisitud uzando este metodo. + unsupported_grant_type: El tipo de konsesyon de autorizasyon no esta suportado por el sirvidor de autentifikasyon. + unsupported_response_type: El sirvidor de autorizasyon no suporta este tipo de repuesta. + flash: + applications: + create: + notice: Aplikasyon kriyada. + destroy: + notice: Aplikasyon efasada. + update: + notice: Aplikasyon aktualizada. + authorized_applications: + destroy: + notice: Aplikasyon revokada. + grouped_scopes: + access: + read: Akseso solo de meldar + read/write: Akseso de meldar i eskrivir + write: Akseso solo de eskrivir + title: + accounts: Kuentos + admin/accounts: Administrasyon de kuentos + admin/all: Todas las funksyones administrativas + admin/reports: Administrasyon de raportos + all: Akseso total a tu kuento de Mastodon + blocks: Blokos + bookmarks: Markadores + conversations: Konversasyones + crypto: Shifrasyon de lado a lado + favourites: Favoritos + filters: Filtros + follow: Segimientos, silensiasyones i blokos + follows: Segimientos + lists: Listas + media: Aneksos de multimedia + mutes: Silensiasyones + notifications: Avizos + push: Avizos arrepushados + reports: Raportos + search: Bushkeda + statuses: Publikasyones + layouts: + admin: + nav: + applications: Publikasyones + oauth2_provider: Prokurador de OAuth2 + application: + title: Autorizasyon OAuth rekerida + scopes: + admin:read: meldar todos los datos en el sirvidor + admin:read:accounts: meldar informasyon sensivle en todos los kuentos + admin:read:canonical_email_blocks: meldar informasyon sensivle de todos blokos kanonikos de posta + admin:read:domain_allows: meldar informasyon sensivle de todos los domenos permitidos + admin:read:domain_blocks: meldar informasyon sensivle de todos los blokos de domeno + admin:read:email_domain_blocks: meldar informasyon sensivle de todos los blokos de domenos de posta + admin:read:ip_blocks: meldar informasyon sensivle de todos los blokos de IP + admin:read:reports: meldar informasyon sensivle de todos los raportos i kuentos raportados + admin:write: modifikar todos los datos en el sirvidor + admin:write:accounts: fazer aksyones de moderasyon en kuentos + admin:write:canonical_email_blocks: fazer aksyones de moderasyon en blokos kanonikos de posta + admin:write:domain_allows: fazer aksyones de moderasyon en domenos permitidos + admin:write:domain_blocks: fazer aksyones de moderasyon en blokos de domeno + admin:write:email_domain_blocks: fazer aksyones de moderasyon en blokos de domenos de posta + admin:write:ip_blocks: fazer aksyones de moderasyon en blokos de IP + admin:write:reports: fazer aksyones de moderasyon en raportos + crypto: kulanear shifrasyon de lado a lado + follow: modifikar relasyones de kuentos + push: risivir tus avizos arrepushados + read: meldar todos tus datos de kuento + read:accounts: ver enformasyon de kuentos + read:blocks: ver tus blokos + read:bookmarks: ver tus markadores + read:favourites: ver ke te plaze + read:filters: ver tus filtros + read:follows: ver a ken siges + read:lists: ver tus listas + read:mutes: ver tus silensiasyones + read:notifications: ver tus avizos + read:reports: ver tus raportos + read:search: bushkar en tu nombre + read:statuses: ver todas las publikasyones + write: modifikar todos los datos de tu kuento + write:accounts: modifikar tu profil + write:blocks: blokar kuentos i domenos + write:bookmarks: markar publikasyones + write:conversations: silensyar i efasar konversasyones + write:favourites: indikar ke publikasyones te plazen + write:filters: kriyar filtros + write:follows: segir a djente + write:lists: kriyar listas + write:media: kargar dosyas multimedia + write:mutes: silensyar a djente i konversasyones + write:notifications: alimpiar tus avizos + write:reports: raportar a otras personas + write:statuses: publikar publikasyones diff --git a/config/locales/doorkeeper.pa.yml b/config/locales/doorkeeper.pa.yml index bb8a6c834d..4ed0c7db65 100644 --- a/config/locales/doorkeeper.pa.yml +++ b/config/locales/doorkeeper.pa.yml @@ -1 +1,85 @@ +--- pa: + activerecord: + attributes: + doorkeeper/application: + name: ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਨਾਂ + website: ਐਪਲੀਕੇਸ਼ਨ ਵੈੱਬਸਾਈਟ + doorkeeper: + applications: + buttons: + authorize: ਪਰਮਾਣਿਤ + cancel: ਰੱਦ ਕਰੋ + destroy: ਖਾਰਜ + edit: ਸੋਧੋ + submit: ਭੇਜੋ + confirmations: + destroy: ਪੱਕਾ? + edit: + title: ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸੋਧੋ + form: + error: ਓਹ ਹੋ! ਸੰਭਾਵਿਤ ਗਲਤੀਆਂ ਲਈ ਆਪਣੇ ਫਾਰਮ ਦੀ ਜਾਂਚ ਕਰੋ + index: + application: ਐਪਲੀਕੇਸ਼ਨ + callback_url: ਕਾਲਬੈਕ URL + delete: ਹਟਾਓ + empty: ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ। + name: ਨਾਂ + new: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ + scopes: ਸਕੋਪ + show: ਵੇਖਾਓ + title: ਤੁਹਾਡੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ + new: + title: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ + show: + actions: ਕਾਰਵਾਈਆਂ + application_id: ਕਲਾਈਂਟ ਕੁੰਜੀ + callback_urls: ਕਾਲਬੈਕ URL + scopes: ਸਕੋਪ + secret: ਕਲਾਈਂਟ ਭੇਤ + title: 'ਐਪਲੀਕੇਸ਼ਨ: %{name}' + authorizations: + buttons: + authorize: ਪਰਮਾਣਿਤ + deny: ਇਨਕਾਰ ਕਰੋ + error: + title: ਗਲਤੀ ਆਈ ਹੈ + new: + review_permissions: ਇਜਾਜ਼ਤਾਂ ਦੀ ਪੜਤਾਲ ਕਰੋ + title: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ + authorized_applications: + buttons: + revoke: ਮਨਸੂਖ ਕਰੋ + confirmations: + revoke: ਪੱਕਾ? + index: + authorized_at: "%{date} ਨੂੰ ਪਰਮਾਣਿਤ ਕੀਤਾ" + last_used_at: "%{date} ਨੂੰ ਆਖਰੀ ਵਾਰ ਵਰਤਿਆ" + never_used: ਕਦੀ ਨਹੀਂ ਵਰਤਿਆ + scopes: ਇਜਾਜ਼ਤਾਂ + superapp: ਅੰਦਰੂਨੀ + grouped_scopes: + title: + accounts: ਖਾਤੇ + blocks: ਪਾਬੰਦੀਸ਼ੁਦਾ + bookmarks: ਬੁੱਕਮਾਰਕ + crypto: ਸਿਰੇ-ਤੋਂ-ਸਿਰੇ ਤੱਕ ਇੰਕ੍ਰਿਪਸ਼ਨ + favourites: ਮਨਪਸੰਦ + filters: ਫਿਲਟਰ + follow: ਫ਼ਾਲੋ, ਮੌਨ ਅਤੇ ਪਾਬੰਦੀ ਲਾਏ + follows: ਫ਼ਾਲੋ + lists: ਸੂਚੀਆਂ + media: ਨੱਥੀ ਕੀਤਾ ਮੀਡੀਆ + mutes: ਮੌਨ + notifications: ਨੋਟੀਫਿਕੇਸ਼ਨ + reports: ਰਿਪੋਰਟਾਂ + search: ਖੋਜੋ + statuses: ਪੋਸਟਾਂ + layouts: + admin: + nav: + applications: ਐਪਲੀਕੇਸ਼ਨਾਂ + scopes: + write:follows: ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ + write:lists: ਸੂਚੀਆਂ ਬਣਾਓ + write:media: ਮੀਡੀਆ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ diff --git a/config/locales/et.yml b/config/locales/et.yml index fb0fdc3a3e..2d48edc295 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -534,6 +534,7 @@ et: total_reported: Nende kohta teateid total_storage: Lisatud meedia totals_time_period_hint_html: Allpool kuvatud summad sisaldavad andmed kogu aja kohta. + unknown_instance: Hetkel pole selle domeeni jaoks siin serveris kirjet. invites: deactivate_all: Peata kõik filter: @@ -610,6 +611,7 @@ et: created_at: Teavitatud delete_and_resolve: Kustuta postitused forwarded: Edastatud + forwarded_replies_explanation: See aruanne pärineb kaugkasutajalt ja käsitleb kaugsisu. See on edastatud sulle, sest raporteeritud sisu on vastus ühele sinu kasutajale. forwarded_to: Edastatud %{domain} domeeni mark_as_resolved: Märgi lahendatuks mark_as_sensitive: Märgi kui tundlik sisu @@ -832,6 +834,20 @@ et: system_checks: database_schema_check: message_html: On ootel andmebaasi migreerimisi. Rakenduse ootuspäraseks toimimiseks palun käivita need + elasticsearch_health_red: + message_html: Elasticsearch klaster on ebaterve (punane staatus), otsingufunktsioonid ei ole saadaval + elasticsearch_health_yellow: + message_html: Elasticsearch klaster on ebaterve (kollane staatus), võiksid uurida põhjust + elasticsearch_index_mismatch: + message_html: Elasticsearchi indeksite kaardistused on vananenud. Palun käivita tootctl search deploy --only=%{value} + elasticsearch_preset: + action: Vaata dokumentatsiooni + message_html: Elasticsearchi klastris on rohkem kui üks sõlme, kuid Mastodon ei ole nende kasutamiseks konfigureeritud. + elasticsearch_preset_single_node: + action: Vaata dokumentatsiooni + message_html: Elasticsearchi klastris on ainult üks sõlm ES_PRESET peaks olema seatud väärtusele single_node_cluster. + elasticsearch_reset_chewy: + message_html: Elasticsearchi süsteemiindeks on seadistuse muutumise tõttu vananenud. Palun käivita tootctl search deploy --reset-chewy selle uuendamiseks. elasticsearch_running_check: message_html: Elasticsearch ei vasta. Kontrolli, kas see töötab või keela täistekstiotsing elasticsearch_version_check: @@ -1024,6 +1040,14 @@ et: hint_html: Üks asi veel! Me peame veenduma, et oled inimene (et me saaksime spämmi väljaspoole jätta!). Lahenda allpool olev CAPTCHA ja klõpsa "Jätka". title: Turvalisuse kontroll confirmations: + awaiting_review: E-posti aadress on kinnitatud! %{domain} töötajad vaatavad praegu registreeringut läbi. Saad e-kirja, kui nad kiidavad konto heaks! + awaiting_review_title: Su registreeringut vaadatakse läbi + clicking_this_link: klõpsates seda linki + login_link: logi sisse + proceed_to_login_html: Saad nüüd jätkata valikuga %{login_link}. + redirect_to_app_html: Sind oleks pidanud suunatama rakendusse %{app_name}. Kui seda ei juhtunud, proovi %{clicking_this_link} või naase käsitsi rakendusse. + registration_complete: Sinu registreering domeenil %{domain} on nüüd valmis! + welcome_title: Tere tulemast, %{name}! wrong_email_hint: Kui see e-postiaadress pole korrektne, saad seda kontosätetes muuta. delete_account: Konto kustutamine delete_account_html: Kui soovid oma konto kustutada, siis jätka siit. Pead kustutamise eraldi kinnitama. @@ -1085,6 +1109,7 @@ et: functional: Konto on täies mahus kasutatav. pending: Taotlus ootab ülevaatamist meie personali poolt. See võib võtta mõne aja. Kui taotlus on vastu võetud, saadetakse sulle e-kiri. redirecting_to: See konto pole aktiivne, sest on suunatud aadressile %{acct}. + self_destruct: Kuna %{domain} on sulgemisel, saad oma kontole vaid piiratud ligipääsu. view_strikes: Vaata enda eelnevaid juhtumeid too_fast: Vorm esitatud liiga kiirelt, proovi uuesti. use_security_key: Kasuta turvavõtit @@ -1342,6 +1367,7 @@ et: '86400': 1 päev expires_in_prompt: Mitte kunagi generate: Loo + invalid: See kutse pole kehtiv invited_by: 'Sind kutsus:' max_uses: one: 1 kasutus @@ -1554,6 +1580,9 @@ et: over_daily_limit: Lubatud ajastatud postituste arv %{limit} päevas on tänaseks ületatud over_total_limit: Oled jõudnud ajastatud postituste lubatud maksimumarvuni %{limit} too_soon: Ajastatud kuupäev peab olema tukevikus + self_destruct: + lead_html: Kahjuks suletakse %{domain} lõplikult. Kui sul oli seal konto, ei saa sa seda enam kasutada, kuid siiski võid taotleda oma andmete varukoopiat. + title: See server suletakse sessions: activity: Viimane aktiivsus browser: Veebilehitseja diff --git a/config/locales/eu.yml b/config/locales/eu.yml index e3062d9dff..bcf8540e74 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -777,6 +777,8 @@ eu: open: Edonork eman dezake izena security: authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik + authorized_fetch_hint: Zerbitzari federatuen autentifikazioa eskatzeak erabiltzaile-mailako zein zerbitzari-mailako blokeak zorrotzago betearaztea ahalbidetzen du. Hala ere, horrek errendimendu galera dakar, zure erantzunen irismena murrizten du eta baliteke federatutako zerbitzu batzuekin bateragarritasun-arazoak sortu ahal izatea. Horrez gain, horrek ez du eragotziko aktore dedikatuek zure mezu eta kontu publikoak eskuratzea. + authorized_fetch_overridden_hint: Une honetan ezin duzu ezarpen hau aldatu ingurune-aldagai batek gainidazten duelako. federation_authentication: Federazio autentifikazioaren betearaztea title: Zerbitzariko ezarpenak site_uploads: @@ -784,6 +786,7 @@ eu: destroyed_msg: Guneko igoera ongi ezabatu da! software_updates: critical_update: Kritikoa — mesedez, eguneratu azkar + description: Zure Mastodon instalazioa eguneratuta mantentzea gomendatzen da azken konponketa eta hobekuntzak edukitzeko. Gainera, batzuetan funtsezkoa da Mastodon garaiz eguneratzea segurtasun-arazoak saihesteko. Arrazoi horiengatik, Mastodonek eguneratzeak egiaztatzen ditu 30 minuturo, eta zure posta elektronikoko jakinarazpen-hobespenen arabera jakinaraziko dizu. documentation_link: Informazio gehiago release_notes: Bertsio oharrak title: Eguneraketak eskuragarri @@ -791,6 +794,7 @@ eu: types: major: Argitalpen handia minor: Argitalpen txikia + patch: Partxe eguneraketa — akatsen konponketa eta aplikatzeko aldaketa errazak version: Bertsioa statuses: account: Egilea @@ -976,6 +980,7 @@ eu: next_steps: Apelazioa onartu dezakezu moderazio erabakia desegiteko, edo ez ikusia egin. subject: "%{username} erabiltzailea %{instance} instantziako moderazio erabaki bat apelatzen ari da" new_critical_software_updates: + body: Mastodon-en bertsio kritiko berriak kaleratu dira, agian lehenbailehen eguneratu nahi duzu! subject: "%{instance} ek eguneraketa kritikoak eskuragarri ditu!" new_pending_account: body: Kontu berriaren xehetasunak azpian daude. Eskaera hau onartu edo ukatu dezakezu. @@ -1037,10 +1042,12 @@ eu: hint_html: Azken kontu bat! Gizakia zarela berretsi behar dugu (zabor-kontuak kanpoan mantentzeko baino ez da!) Ebatzi azpiko CAPTCHA eta sakatu "Jarraitu". title: Segurtasun txekeoa confirmations: + awaiting_review: Zure helbide elektronikoa baieztatu da! %{domain} lan taldea zure erregistroa berrikusten ari da. Mezu elektroniko bat jasoko duzu zure kontua onartzen badute! awaiting_review_title: Zure izen-ematea berrikusten ari da clicking_this_link: lotura hau klikatzen login_link: hasi saioa proceed_to_login_html: Orain jarraitu dezakezu %{login_link} -era. + redirect_to_app_html: "%{app_name} aplikaziora berbideratua izan beharko zenuke. Hori gertatu ez bada, saiatu %{clicking_this_link} edo eskuz itzuli." registration_complete: Osatuta dago orain zure izen-ematea %{domain} -en! welcome_title: Ongi etorri, %{name}! wrong_email_hint: Helbide-elektroniko hori zuzena ez bada, kontuaren ezarpenetan alda dezakezu. diff --git a/config/locales/ia.yml b/config/locales/ia.yml new file mode 100644 index 0000000000..64315d177f --- /dev/null +++ b/config/locales/ia.yml @@ -0,0 +1,52 @@ +--- +ia: + admin: + accounts: + delete: Deler datos + deleted: Delite + display_name: Nomine visibile + enabled: Activate + location: + all: Toto + title: Location + moderation: + disabled: Disactivate + reset: Reinitialisar + reset_password: Reinitialisar contrasigno + search: Cercar + security: Securitate + username: Nomine de usator + custom_emojis: + copy: Copiar + create_new_category: Crear nove categoria + delete: Deler + domain_blocks: + confirm_suspension: + cancel: Cancellar + export: Exportar + import: Importar + email_domain_blocks: + add_new: Adder nove + delete: Deler + export_domain_allows: + no_file: Necun file seligite + follow_recommendations: + language: Per lingua + status: Stato + instances: + dashboard: + instance_languages_dimension: Linguas principal + delivery: + unavailable: Non disponibile + private_comment: Commento private + public_comment: Commento public + invites: + filter: + available: Disponibile + ip_blocks: + delete: Deler + expires_in: + '1209600': 2 septimanas + '15778476': 6 menses + '2629746': 1 mense + '86400': 1 die diff --git a/config/locales/ie.yml b/config/locales/ie.yml new file mode 100644 index 0000000000..3a85602ba5 --- /dev/null +++ b/config/locales/ie.yml @@ -0,0 +1,863 @@ +--- +ie: + about: + about_mastodon_html: 'Li social rete del futur: sin reclams, sin supervision de corporationes, con un dessine etical e decentralisation! Repossede vor data med Mastodon!' + contact_missing: Ne assignat + contact_unavailable: Ne disponibil + hosted_on: Mastodon logiat che %{domain} + title: Pri + accounts: + follow: Sequer + followers: + one: Sequitor + other: Sequitores + following: Sequent + instance_actor_flash: Ti-ci conto es un virtual actor usat por representer li servitor self e null individual usator. It es usat por federational rasones e deve ne esser suspendet. + last_active: ultim activitá + link_verified_on: Proprietá de ti-ci ligament esset verificat ye %{date} + nothing_here: Hay nullcos ci! + pin_errors: + following: Tu deve ja sequer li person quem tu vole indossar + posts: + one: Posta + other: Postas + posts_tab_heading: Postas + admin: + account_actions: + action: Acter + title: Far un moderatori action a %{acct} + account_moderation_notes: + create: Scrir un note + created_msg: Moderatori nota creat successosimen! + destroyed_msg: Moderatori nota destructet successosimen! + accounts: + add_email_domain_block: Bloccar email-dominia {domain} + approve: Aprobar + approved_msg: Successosimen aprobat li aplication de registration de %{username} + are_you_sure: Es tu cert? + avatar: Avatar + by_domain: Dominia + change_email: + changed_msg: Email-adresse changeat successosimen! + current_email: Actual e-post + label: Cambiar li e-post + new_email: Nov e-post + submit: Cambiar li e-post + title: Changear li email-adresse de %{username} + change_role: + changed_msg: Rol changeat successosimen! + label: Cambiar li rol + no_role: Sin rol + title: Changear li rol de %{username} + confirm: Confirmar + confirmed: Confirmat + confirming: Atende confirmation + custom: Personalisat + delete: Deleter data + deleted: Deletet + demote: Demoer + destroyed_msg: Li data de %{username} es nu in li linea por esser deletet iminentmen + disable: Gelar + disable_sign_in_token_auth: Desactivisar autentication per email-claves + disable_two_factor_authentication: Desactivisar 2FA + disabled: Gelat + display_name: Visibil nómine + domain: Dominia + edit: Modificar + email: E-post + email_status: Statu del e-post + enable: Desgelar + enable_sign_in_token_auth: Activisar autentication per email-claves + enabled: Activ + enabled_msg: Successosimen desgelat li conto de %{username} + followers: Sequitores + follows: Seque + inbox_url: Inbuxe URL + invite_request_text: Rason por adhesion + invited_by: Invitat de + ip: IP + joined: Adheret + location: + all: Omni + local: Local + remote: Lontan + title: Localisation + login_status: Statu de intration + media_attachments: Medie-atachamentes + memorialize: Converter al memoriale + memorialized: Memorialisat + memorialized_msg: Successosimen convertet %{username} a un conto de memoriale + moderation: + active: Activ + all: Omni + disabled: Desactivat + pending: Atendent + silenced: Limitat + suspended: Suspendet + title: Moderation + moderation_notes: Notes de moderator + most_recent_activity: Ultim activitá + most_recent_ip: Ultim IP + no_account_selected: Null contos esset changeat pro que null contos esset selectet + no_limits_imposed: Null límites imposit + no_role_assigned: Null rol assignat + not_subscribed: Ne abonnat + pending: Atende li revision + perform_full_suspension: Suspender + previous_strikes: Precedent violationes + previous_strikes_description_html: + one: Ti conto have un violation. + other: Ti conto have %{count} violationes. + promote: Promoer + protocol: Protocol + public: Public + redownload: Recargar li profil + redownloaded_msg: Successosimen recargat li profil de %{username} del original fonte + reject: Rejecter + rejected_msg: Successosimen rejectet li aplication de registration de %{username} + remote_suspension_irreversible: Li data de ti-ci conto ha esset deletet ínreversibilmen. + remote_suspension_reversible_hint_html: Li conto ha esset suspendet che su servitor, e li data va esser completmen removet ye %{date}. Til tande, li lontan servitor posse restaurar ti conto sin quelcunc mal efectes. Si tu vole remover omni data del conto ínmediatmen, tu posse far it in infra. + remove_avatar: Remover li avatar + removed_avatar_msg: Successosimen removet li avatar-image de %{username} + resend_confirmation: + already_confirmed: Ti usator ja esset confirmat + send: Inviar li confirmation denov + success: Ligament de confirmation successosimen misset! + reset: Reiniciar + reset_password: Reiniciar passa-parol + resubscribe: Reabonnar + role: Rol + search: Serchar + search_same_email_domain: Altri usatores con li sam email-dominia + search_same_ip: Altri usatores con li sam IP + security: Securitá + security_measures: + only_password: Solmen un passa-parol + password_and_2fa: Passa-parol e 2FA + sensitive: Marcar sensitiv + sensitized: Marcat quam sensitiv + shared_inbox_url: Partit URL de inbuxe + show: + created_reports: Raportes fat + targeted_reports: Raportat de altres + silence: Limitar + silenced: Limitat + statuses: Postas + strikes: Precedent violationes + subscribe: Abonnar + suspend: Suspender + suspended: Suspendet + suspension_irreversible: Li data de ti-ci conto ha esset deletet ínreversibilmen. Tu posse dessuspender li conto por far it usabil ma it ne va reganiar quelcunc data quel it anteriorimen havet. + suspension_reversible_hint_html: Li conto ha esset suspendet, e li data va esser completmen removet ye %{date}. Til tande, li conto posse esser restaurat sin quelcunc mal efectes. Si tu vole remover omni data del conto ínmediatmen, tu posse far it in infra. + title: Contos + unblock_email: Desbloccar email-adresse + unblocked_email_msg: Successosimen desbloccat li email-adresse de %{username} + unconfirmed_email: Ínconfirmat email-adresse + undo_sensitized: Desmarcar quam sensitiv + undo_silenced: Deslimitar + undo_suspension: Desfar li suspension + unsilenced_msg: Successosimen deslimitat li conto de %{username} + unsubscribe: Desabonnar + unsuspended_msg: Successosimen dessuspendet li conto de %{username} + username: Nómine de usator + view_domain: Vider summarium pri li dominia + warn: Admonir + web: Web + whitelisted: Permisset por federation + action_logs: + action_types: + approve_appeal: Aprobar Apelle + approve_user: Aprobar usator + assigned_to_self_report: Assignar Raporte + change_email_user: Changear li email-adresse del usator + change_role_user: Changear li rol del usator + confirm_user: Confirmar usator + create_account_warning: Crear admonimentes + create_announcement: Crear un proclamation + create_canonical_email_block: Crear Email-Blocca + create_custom_emoji: Crear Customisat Emoji + create_domain_allow: Crear Dominia-Permisse + create_domain_block: Crear Dominia-Blocca + create_email_domain_block: Crear Email-Dominia-Blocca + create_ip_block: Crear regules por IP + create_unavailable_domain: Crear Dominia Índisponibil + create_user_role: Crear roles + demote_user: Demoer Usator + destroy_announcement: Deleter proclamation + destroy_canonical_email_block: Deleter Email-Blocca + destroy_custom_emoji: Deleter Customisat Emoji + destroy_domain_allow: Deleter Dominia-Permisse + destroy_domain_block: Deleter Dominia-Blocca + destroy_email_domain_block: Deleter Email-Dominia-Blocca + destroy_instance: Purgar Dominia + destroy_ip_block: Deleter regul por IP + destroy_status: Deleter Posta + destroy_unavailable_domain: Deleter Dominia Índisponibil + destroy_user_role: Destructer Rol + disable_2fa_user: Desactivisar 2FA + disable_custom_emoji: Desactivisar Customisat Emoji + disable_sign_in_token_auth_user: Desactivisar autentication per email-claves por usator + disable_user: Desactivisar Usator + enable_custom_emoji: Activisar Customisat Emoji + enable_sign_in_token_auth_user: Activisar autentication per email-claves por usator + enable_user: Activisar Usator + memorialize_account: Memorialisar Conto + promote_user: Promoer Usator + reject_appeal: Rejecter Apelle + reject_user: Rejecter Usator + remove_avatar_user: Remover Avatar + reopen_report: Reaperter Raporte + resend_user: Reinviar Confirmation + reset_password_user: Reiniciar Passa-parol + resolve_report: Resoluer Raporte + sensitive_account: Fortiar que medie de ti conto es marcat quam sensitiv + silence_account: Limitar Conto + suspend_account: Suspender Conto + unassigned_report: Deassignar Raporte + unblock_email_account: Desbloccar email-adresse + unsensitive_account: Desfar li fortiation que medie de ti conto es marcat quam sensitiv + unsilence_account: Deslimitar Conto + unsuspend_account: Dessuspender Conto + update_announcement: Actualisar un proclamation + update_custom_emoji: Actualisar Customisat Emoji + update_domain_block: Actualisar Dominia-Blocca + update_ip_block: Actualisar regul por IP + update_status: Actualisar Posta + update_user_role: Actualisar Rol + actions: + approve_appeal_html: "%{name} aprobat li apelle de %{target} contra un decision de moderation" + approve_user_html: "%{name} aprobat li registration de %{target}" + assigned_to_self_report_html: "%{name} assignat raporte %{target} a su self" + change_email_user_html: "%{name} changeat li email-adresse de usator %{target}" + change_role_user_html: "%{name} changeat li rol de %{target}" + confirm_user_html: "%{name} confirmat li email-adresse de usator %{target}" + create_account_warning_html: "%{name} dat un admoniment a %{target}" + create_announcement_html: "%{name} creat li nov proclamation %{target}" + create_canonical_email_block_html: "%{name} bloccat email con li hash %{target}" + create_custom_emoji_html: "%{name} cargat nov emoji %{target}" + create_domain_allow_html: "%{name} permisset federation con dominia %{target}" + create_domain_block_html: "%{name} bloccat dominia %{target}" + create_email_domain_block_html: "%{name} bloccat email-dominia %{target}" + create_ip_block_html: "%{name} creat regul por IP %{target}" + create_unavailable_domain_html: "%{name} haltat liveration a dominia %{target}" + create_user_role_html: "%{name} creat li rol %{target}" + demote_user_html: "%{name} demoet li usator %{target}" + destroy_announcement_html: "%{name} deletet li proclamation %{target}" + destroy_canonical_email_block_html: "%{name} desbloccat email con li hash %{target}" + destroy_custom_emoji_html: "%{name} deletet emoji %{target}" + destroy_domain_allow_html: "%{name} interdictet federation con dominia %{target}" + destroy_domain_block_html: "%{name} desbloccat dominia %{target}" + destroy_email_domain_block_html: "%{name} desbloccat email-dominia %{target}" + destroy_instance_html: "%{name} purgat dominia %{target}" + destroy_ip_block_html: "%{name} deletet regul por IP %{target}" + destroy_status_html: "%{name} removet posta de %{target}" + destroy_unavailable_domain_html: "%{name} recomensat liveration a dominia %{target}" + destroy_user_role_html: "%{name} deletet li rol %{target}" + disable_2fa_user_html: "%{name} desactivisat 2-factor postulation por li usator %{target}" + disable_custom_emoji_html: "%{name} desactivisat emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} desactivisat autentication per email-clave por %{target}" + disable_user_html: "%{name} desactivisat li abilitá de %{target} a intrar" + enable_custom_emoji_html: "%{name} activisat emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} activisat autentication per email-clave por %{target}" + enable_user_html: "%{name} activisat li abilitá de %{target} a intrar" + memorialize_account_html: "%{name} fat li conto de %{target} un págine de memorial" + promote_user_html: "%{name} promoet li usator %{target}" + reject_appeal_html: "%{name} rejectet li apelle de %{target} contra un decision de moderation" + reject_user_html: "%{name} rejectet li registration de %{target}" + remove_avatar_user_html: "%{name} removet li avatar de %{target}" + reopen_report_html: "%{name} reapertet raporte %{target}" + resend_user_html: "%{name} remisset un confirmation-email a %{target}" + reset_password_user_html: "%{name} reiniciat li passa-parol del usator %{target}" + resolve_report_html: "%{name} soluet raporte %{target}" + sensitive_account_html: "%{name} marcat li medie de %{target} quam sensitiv" + silence_account_html: "%{name} limitat li conto de %{target}" + suspend_account_html: "%{name} suspendet li conto de %{target}" + unassigned_report_html: "%{name} deassignat raporte %{target}" + unblock_email_account_html: "%{name} desbloccat li email-adresse de %{target}" + unsensitive_account_html: "%{name} desmarcat li medie de %{target} quam sensitiv" + unsilence_account_html: "%{name} deslimitat li conto de %{target}" + unsuspend_account_html: "%{name} dessuspendet li conto de %{target}" + update_announcement_html: "%{name} actualisat li proclamation %{target}" + update_custom_emoji_html: "%{name} actualisat emoji %{target}" + update_domain_block_html: "%{name} actualisat li dominia-blocca de %{target}" + update_status_html: "%{name} actualisat posta de %{target}" + update_user_role_html: "%{name} changeat li rol %{target}" + deleted_account: deletet conto + filter_by_action: Filtrar per action + filter_by_user: Filtrar per usator + announcements: + destroyed_msg: Proclamation deletet successosimen! + edit: + title: Redacter proclamation + empty: Null proclamationes trovat. + live: Activ + new: + create: Crear un proclamation + title: Nov proclamation + publish: Publicar + published_msg: Proclamation publicat successosimen! + scheduled_for: Planat por %{time} + scheduled_msg: Proclamation planat por publication! + title: Proclamationes + unpublish: Despublicar + unpublished_msg: Proclamation despublicat successosimen! + updated_msg: Proclamation actualisat successosimen! + critical_update_pending: Urgente actualisation atendent + custom_emojis: + assign_category: Assignar categorie + by_domain: Dominia + copied_msg: Successosimen creat un local copie del emoji + copy: Copiar + copy_failed_msg: Ne posset crear un local copie de ti-ta emoji + create_new_category: Crear nov categorie + created_msg: Emoji successosimen creat! + delete: Deleter + destroyed_msg: Emoji successosimen deletet! + disable: Desactivisar + disabled: Desactivisat + disabled_msg: Successosimen desactivisat ti emoji + emoji: Emoji + enable: Activar + enabled: Activ + enabled_msg: Successosimen activisat ti emoji + image_hint: PNG o GIF minu quam %{size} + list: Inlistar + listed: Inlistat + new: + title: Adjunter nov customisat emoji + no_emoji_selected: Null emoji esset changeat pro que null esset selectet + not_permitted: Tu ne es permisset far ti action + shortcode_hint: Adminim 2 carácteres, solmen lítteres, ciffres e sublineas + title: Customisat emoji + uncategorized: Íncategorisat + unlist: Delistar + unlisted: Delistat + update_failed_msg: Ne posset actualisar ti emoji + updated_msg: Emoji successosimen actualisat! + upload: Cargar + dashboard: + active_users: activ usatores + interactions: interactiones + media_storage: Inmagasination de medie + new_users: nov usatores + opened_reports: raportes apertet + pending_appeals_html: + one: "%{count} pendent apelle" + other: "%{count} pendent apelles" + pending_reports_html: + one: "%{count} pendent raporte" + other: "%{count} pendent raportes" + pending_tags_html: + one: "%{count} pendent hashtag" + other: "%{count} pendent hashtags" + pending_users_html: + one: "%{count} pendent usator" + other: "%{count} pendent usatores" + resolved_reports: raportes soluet + software: Programmas + sources: Fontes de adhesiones + space: Usation de spacie + title: Panel de control + top_languages: Max activ lingues + top_servers: Max activ servitores + website: Websitu + disputes: + appeals: + empty: Null apelles trovat. + title: Apelles + domain_allows: + add_new: Permisse federation con dominia + created_msg: Dominia ha esset successosimen permisset por federation + destroyed_msg: Dominia ha esset interdictet por federation + export: Exportar + import: Importar + undo: Interdicter federation con dominia + domain_blocks: + add_new: Adjunte nov dominia-blocca + confirm_suspension: + cancel: Anullar + confirm: Suspender + permanent_action: Desfar li suspension ne va restaurar quelcunc data o relation. + preamble_html: Tu va suspender %{domain} e su subdominias. + remove_all_data: Ti va remover omni contenete, medie e profil-data por li contos de ti-ci dominia de tui servitor. + stop_communication: Tui servitor va haltar comunication con ti servitores. + title: Confirmar dominia-blocca por %{domain} + undo_relationships: Ti va desfar quelcunc seque-relation inter contos de ti servitores e tis de tui. + created_msg: On tracta li dominia-blocca nu + destroyed_msg: Dominia-blocca ha esset desfat + domain: Dominia + edit: Modificar dominia-blocca + existing_domain_block: Tu ja ha imposit plu strict límites sur %{name}. + existing_domain_block_html: Tu ja ha imposit plu strict límites sur %{name}, tu besona desbloccar it erst. + export: Exportar + import: Importar + new: + create: Crear blocca + hint: Li dominia-blocca ne va prevenir li creation de intradas por contos in li database, ma it va retroactivmen e automaticmen aplica specific metodes de moderation a ti contos. + severity: + desc_html: "Limitar va far que postas de contos che ti dominia es ínvisibil a quicunc ne ja seque les. Suspender va remover omni contenete, medie e profil-data por li contos de ti dominia de tui servitor. Usa Null si tu vole simplicmen rejecter medie-files." + noop: 'Null' + silence: Limitar + suspend: Suspender + title: Nov dominia-blocca + no_domain_block_selected: Null dominia-bloccas esset changeat pro que null esset selectet + not_permitted: Tu ne es permisset far ti action + obfuscate: Obscurar dominia-nómine + obfuscate_hint: Partialmen obscurar li dominia-nómine in li liste si li publication de dominia-limitationes es activisat + private_comment: Privat comenta + private_comment_hint: Comenta pri ti dominia-limitation por usation internal del moderatores. + public_comment: Public comenta + public_comment_hint: Comenta pri ti dominia-limitation por li general public, si li publication del liste de dominia-limitationes es activisat. + reject_media: Rejecter medie-files + reject_media_hint: Remove medie-files inmagasinat localmen e refusa descargar quelcunc plu in li futur. Ínpertinent por suspensiones + reject_reports: Rejecter raportes + reject_reports_hint: Ignorar omni raportes venient de ti dominia. Ínpertinent por suspensiones + undo: Desfar dominia-blocca + view: Vider dominia-blocca + email_domain_blocks: + add_new: Adjunter un nov + attempts_over_week: + one: "%{count} registration-prova durant li ultim semane" + other: "%{count} registration-prova durant li ultim semane" + created_msg: Successosimen bloccat email-dominia + delete: Deleter + dns: + types: + mx: Registre MX + domain: Dominia + new: + create: Adjunter dominia + resolve: Resolver un dominia + title: Bloccar nov email-dominia + no_email_domain_block_selected: Null email-dominia-bloccas esset changeat pro que null esset selectet + not_permitted: Ne permisset + title: Bloccat email-dominias + export_domain_allows: + new: + title: Importar permisset dominias + no_file: Null file selectet + export_domain_blocks: + import: + description_html: Tu va importar un liste de dominia-bloccas. Ples controlar ti liste tre cuidosimen, precipue si tu ne creat li liste personalmen. + existing_relationships_warning: Existent seque-relationes + private_comment_description_html: 'Por auxiliar te saver de u veni importat bloccas, importat bloccas va esser creat con li sequent privat comenta: %{comment}' + private_comment_template: Importat de %{source} ye %{date} + title: Importar dominia-bloccas + invalid_domain_block: 'Un o plu dominia-bloccas esset omisset pro li sequent errore(s): %{error}' + new: + title: Importar dominia-bloccas + no_file: Null file selectet + follow_recommendations: + language: Por li lingue + status: Statu + suppress: Supresser seque-recomandation + suppressed: Supresset + title: Seque-recomandationes + unsuppress: Restaurar seque-recomandation + instances: + availability: + title: Disponibilitá + warning: Li ultim prova conexer a ti servitor ha esset ínsuccessosi + back_to_all: Omni + back_to_limited: Limitat + back_to_warning: Admonit + by_domain: Dominia + confirm_purge: Vole tu vermen permanentmen deleter data de ti dominia? + content_policies: + comment: Internal nota + policy: Politica + reason: Visibil rason + title: Politicas pri contenete + delivery: + unavailable: Índisponibil + delivery_error_hint: Si liveration ne es possibil durant %{count} dies, it va esser marcat automaticmen quam ínliverabil. + destroyed_msg: Data de %{domain} es nu in li linea por iminent deletion. + empty: Null dominias trovat. + known_accounts: + one: "%{count} conosset conto" + other: "%{count} conosset contos" + moderation: + all: Omni + limited: Limitat + title: Moderation + private_comment: Privat comenta + public_comment: Public comenta + purge: Purgar + title: Federation + total_blocked_by_us: Bloccat de nos + total_followed_by_them: Sequet de les + total_followed_by_us: Sequet de nos + total_reported: Raportes pri les + total_storage: Medie-atachamentes + totals_time_period_hint_html: Li totales monstrat in infra include data por omni témpor. + unknown_instance: Actualmen hay null registre de ti dominia che ti-ci servitor. + invites: + deactivate_all: Desactivisar omni + filter: + all: Omni + available: Disponibil + expired: Expirat + title: Filtre + title: Invitationes + ip_blocks: + add_new: Crear regul + created_msg: Successosimen adjuntet nov IP-regul + delete: Deleter + expires_in: + '1209600': 2 semanes + '15778476': 6 mensus + '2629746': 1 mensu + '31556952': 1 annu + '86400': 1 die + '94670856': 3 annus + new: + title: Crear nov IP-regul + no_ip_block_selected: Null IP-regules esset changeat pro que null esset selectet + title: Regules por IPs + relationships: + title: Li relationes de %{acct} + relays: + add_new: Adjunter un nov relé + delete: Deleter + description_html: Un federational relé es un intermediari servitor quel exchangea grandissim quantitás de public postas inter li servitores queles abonna e publicar a it. It posse auxiliar micri e medial servitores decovrir contenete del fediverse, quel altrimen vell besonar que local usatores seque altri persones che lontan servitores manualmen. + disable: Desactivisar + disabled: Desactivisat + enable: Activisar + enable_hint: Pos activisation, tui servitor va abonnar al omni public postas de ti relé, e va comensar misser li public postas de ti-ci servitor a it. + enabled: Activisat + inbox_url: URL del relé + pending: Atendent li aprobation del relé + save_and_enable: Conservar e activisar + setup: Etablisser un conexion a un relé + signatures_not_enabled: Relés fórsan ne va functionar corectmen si secur mode o mode de limitat federation es activisat + status: Statu + title: Relés + report_notes: + created_msg: Raportal nota creat successosimen! + destroyed_msg: Raportal nota deletet successosimen! + reports: + account: + notes: + one: "%{count} nota" + other: "%{count} notas" + action_taken_by: Action fat de + actions: + delete_description_html: Li raportat postas va esser deletet e un admoniment va esser registrat por auxiliar te escalar si hay futuri infractiones del sam conto. + mark_as_sensitive_description_html: Li medie in li raportat postas va esser marcat quam sensitiv e un admoniment va esser registrat por auxiliar te escalar si hay futuri infractiones del sam conto. + other_description_html: Vider plu optiones por controlar li conduida del conto e customisar comunication al raportat conto. + resolve_description_html: Null action va esser fat contra li raportat conto, null admoniment registrat, e li raporte va esser cludet. + silence_description_html: Li conto va esser visibil nur a tis qui ja seque it o qui sercha it manualmen, limitante severimen su atingement. Ti sempre posse esser revertet. Ti clude omni raportes contra ti conto. + add_to_report: Adjunter plu al raporte + are_you_sure: Es tu cert? + assign_to_self: Assignar it a me + assigned: Assignat moderator + by_target_domain: Dominia del conto raportat + cancel: Anullar + category: Categorie + category_description_html: Li rason pro quel ti conto e/o contenete esset raportat va esser citat in comunication con li conto raportat + comment: + none: 'Null' + comment_description_html: 'Por provider plu mult information, %{name} scrit:' + confirm: Confirmar + confirm_action: Confirmar moderatori action contra @%{acct} + created_at: Raportat + delete_and_resolve: Deleter postas + mark_as_resolved: Marcar quam soluet + mark_as_sensitive: Marcar quam sensitiv + mark_as_unresolved: Marcar quam ínsoluet + no_one_assigned: Nequi + notes: + create: Adjunter nota + create_and_resolve: Soluer med nota + create_and_unresolve: Reaperter med nota + delete: Deleter + placeholder: Descrir li actiones queles ha esset fat, o quelcunc altri relatent actualisationes... + title: Notas + notes_description_html: Vider e lassar notas a altri moderatores e a tui futuri self + processed_msg: 'Raporte #%{id} successosimen tractat' + quick_actions_description_html: 'Fa un rapid action o ear ad-infra por vider li contenete raportat:' + remote_user_placeholder: li lontan usator de %{instance} + reopen: Reaperter raporte + report: 'Raporte #%{id}' + reported_account: Raportat conto + reported_by: Raportat de + resolved: Soluet + resolved_msg: Raporte successosimen soluet! + skip_to_actions: Ear rect al actiones + status: Statu + statuses: Contenete raportat + title: Raportes + roles: + categories: + moderation: Moderation + privileges: + administrator: Administrator + manage_announcements: Tractar proclamationes + manage_announcements_description: Permisse usatores tractar proclamationes sur li servitor + manage_user_access_description: Permisse usatores desactivisar li 2-factor autentication de altri usatores, changear lor email-adresses, e reiniciar lor passa-paroles + manage_users: Gerer usatores + title: Roles + rules: + add_new: Adjunter un regule + settings: + about: + title: Pri + appearance: + title: Aspecte + domain_blocks: + users: A local usatores qui ha initiat session + site_uploads: + delete: Deleter cargat file + destroyed_msg: Cargat file successosimen deletet! + software_updates: + type: Tip + version: Version + statuses: + account: Autor + language: Lingue + metadata: Metadata + visibility: Visibilitá + title: Administration + trends: + approved: Aprobat + statuses: + shared_by: + one: Partit o favoritisat un vez + other: Partit e favoritisat %{friendly_count} vezes + tags: + listable: Suggestibil + not_listable: Ne suggestibil + not_usable: Prohibit + usable: Permisset + usage_comparison: 'Usat hodie: %{today} vez(es), yer: %{yesterday}' + webhooks: + events: Evenimentes + status: Statu + application_mailer: + salutation: "%{name}," + auth: + confirmations: + welcome_title: Benevenit, %{name}! + delete_account: Deleter li conto + forgot_password: Obliviat tu tui passa-parol? + invalid_reset_password_token: Li clave por reiniciar li passa-parol es ínvalid o expirat. Ples demandar un nov. + reset_password: Reiniciar passa-parol + rules: + accept: Acceptar + back: Retro + security: Securitá + set_new_password: Establisser nov passa-parol + challenge: + confirm: Continuar + hint_html: "Nota: On ne va petir tui passa-parol denov por li venient hor." + invalid_password: Ínvalid passa-parol + prompt: Confirmar passa-parol por avansar + date: + formats: + default: "%d.%m.%Y" + with_month_name: "%d. %B %Y" + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_years: "%{count}a" + almost_x_years: "%{count}a" + x_seconds: "%{count}s" + deletes: + confirm_password: Introducte tui actual passa-parol por verificar tui identitá + proceed: Deleter li conto + disputes: + strikes: + appeal: Apellar + exports: + archive_takeout: + date: Date + size: Grandore + blocks: Tu ha bloccat + bookmarks: Marcatores + csv: CSV + lists: Listes + mutes: Tu silentia + featured_tags: + add_new: Adjunter un nov + hint_html: "Pinglar tui max important hashtags sur tui profil. Un bonissim maniere de mantener un registre de tui ovres e projectes, pinglat hashtags es monstrat prominentmen sur tui profil e permisse rapid accesse a tui propri postas." + filters: + contexts: + account: Profiles + thread: Conversationes + index: + title: Filtres + new: + save: Conservar nov filtre + generic: + all: Omni + cancel: Anullar + changes_saved_msg: Modificationes conservat successosimen! + confirm: Confirmar + copy: Copiar + none: 'Null' + save_changes: Conservar changes + today: hodie + imports: + errors: + empty: li file es vacui + invalid_csv_file: 'Ínvalid file CSV. Errore: %{error}' + over_rows_processing_limit: contene plu quam %{count} lineas + too_large: li file es tro grand + imported: Importat + modes: + merge: Coalescer + overwrite_preambles: + muting_html: Tu va remplazzar tui liste de silentiat contos per til %{total_items} contos de %{filename}. + preambles: + muting_html: Tu va silentiar til %{total_items} contos de %{filename}. + states: + finished: Finit + titles: + lists: Importar listes + muting: Importation de silentiat contos + type: Tip de importation + type_groups: + constructive: Seques e marcatores + destructive: Bloccas & silentias + types: + blocking: Liste de bloccas + bookmarks: Marcatores + following: Liste de sequetes + lists: Listes + upload: Cargar + invites: + expired: Expirat + expires_in: + '1800': 30 minutes + '21600': 6 hores + '3600': 1 hor + '43200': 12 hores + '604800': 1 semane + '86400': 1 die + expires_in_prompt: Nequande + login_activities: + authentication_methods: + password: passa-parol + description_html: Si tu vide activitá quel tu ne conosse, considera changear tui passa-parol e activisar 2-factor autentication. + mail_subscriptions: + unsubscribe: + title: Desabonnar + migrations: + set_redirect: Configurar un redirection + move_handler: + carry_mutes_over_text: Ti-ci usator movet se de %{acct}, quel tu hat silentiat. + notification_mailer: + follow_request: + action: Tractar petitiones de sequer + body: "%{name} ha petit sequer te" + subject: 'Pendent sequitor: %{name}' + title: Nov petition de sequer + mention: + action: Responder + poll: + subject: Un balotation de %{name} ha finit + otp_authentication: + enable: Activar + setup: Configurar + pagination: + next: Seq + prev: Prec + truncate: "…" + polls: + errors: + already_voted: Tu ja votat in ti-ci balotation + duplicate_options: contene duplicat elementes + duration_too_long: es tro distant in li futur + duration_too_short: es tro tost + expired: Li balotation ja finit + invalid_choice: Li option por quel tu votat ne existe + over_character_limit: ne posse esser plu long quam %{max} carácteres chascun + self_vote: On ne posse votar en su propri balotationes + too_few_options: deve haver plu quam un option + too_many_options: ne posse contener plu quam %{max} optiones + preferences: + other: Altri + privacy: + search: Sercha + relationships: + activity: Activitá de conto + dormant: Dormient + mutual: Reciproc + status: Statu del conto + sessions: + activity: Ultim activitá + browser: Navigator + browsers: + chrome: Chrome + electron: Electron + generic: Ínconosset navigator + unknown_browser: Ínconosset navigator + description: "%{browser} in %{platform}" + explanation: Tis-ci es li navigatores queles actualmen ha initiat sessiones a tui Mastodon-conto. + ip: IP + platforms: + unknown_platform: Ínconosset platform + windows: Windows + revoke: Revocar + settings: + account: Conto + appearance: Aspecte + statuses: + attached: + description: 'Atachat: %{attached}' + image: + one: "%{count} image" + other: "%{count} images" + video: + one: "%{count} video" + other: "%{count} videos" + default_language: Sam quam li lingue del interfacie + edited_at_html: Modificat ye %{date} + pin_errors: + direct: On ne posse pinglar postas queles es visibil solmen a mentionat usatores + limit: Tu ja ha pinglat li maxim númere de postas + ownership: On ne posse pinglar li posta de un altri person + reblog: On ne posse pinglar un boost + poll: + total_people: + one: "%{count} person" + other: "%{count} persones" + total_votes: + one: "%{count} vote" + other: "%{count} votes" + vote: Votar + title: "%{name}: «%{quote}»" + visibilities: + public: Public + unlisted: Delistat + statuses_cleanup: + exceptions: Exceptiones + keep_pinned: Conservar pinglat postas + keep_pinned_hint: Delete null de tui pinglat postas + keep_polls: Conservar balotationes + keep_polls_hint: Delete null de tui balotationes + min_age: + '1209600': 2 semanes + '31556952': 1 annu + time: + formats: + default: "%d.%m.%Y ye %H:%M" + month: "%b %Y" + time: "%H:%M" + two_factor_authentication: + add: Adjunter + user_mailer: + suspicious_sign_in: + change_password: changear tui passa-parol + warning: + categories: + spam: Spam + reason: 'Rason:' + subject: + none: Admoniment por %{acct} + welcome: + subject: Benevenit a Mastodon + users: + seamless_external_login: Tu ha intrat per un servicie external, dunc parametres pri tui passa-parol e email-adresse ne es disponibil. + verification: + verification: Verification diff --git a/config/locales/io.yml b/config/locales/io.yml index c9a0dcd736..eb5fcc709d 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -91,6 +91,7 @@ io: moderation: active: Aktiva all: Omna + disabled: Desaktivigita pending: Vartanta silenced: Limitizita suspended: Restriktita @@ -116,12 +117,16 @@ io: redownloaded_msg: Sucesoze rifreshis profilo di %{username} de origino reject: Refuzez rejected_msg: Sucesoze refuzis registroapliko di %{username} + remote_suspension_irreversible: La datumi di ca konto esas nerenversebla efacita. + remote_suspension_reversible_hint_html: Ca konto restriktesis che lua servilo, e la datumi tota efacesos ye %{date}. Ante ta tempo, la fora servilo povos restaurar ca konto sen irga mala efecti. Se vu volas efacar omna datumi dil konto quik, vu povas facar lo sube. remove_avatar: Efacez profilimajo remove_header: Efacez kapimajo removed_avatar_msg: Sucesoze efacis profilimajo di %{username} removed_header_msg: Sucesoze efacis kapimajo di %{username} resend_confirmation: already_confirmed: Ca uzanto ja konfirmesis + send: Risendez konfirmligilo + success: Konfirmligilo sucesoze sendesas! reset: Richanjez reset_password: Richanjez pasvorto resubscribe: Riabonez @@ -129,6 +134,7 @@ io: search: Trovez search_same_email_domain: Altra uzanti kun sama retpostodomeno search_same_ip: Altra uzanti kun sama IP + security: Sekureso security_measures: only_password: Nur pasvorto password_and_2fa: Pasvorto e 2FA @@ -205,6 +211,7 @@ io: reject_user: Refuzez uzanto remove_avatar_user: Efacez profilimajo reopen_report: Riapertez raporto + resend_user: Risendez konfirmretposto reset_password_user: Richanjez pasvorto resolve_report: Rezolvez raporto sensitive_account: Forcsentoza konto @@ -263,6 +270,7 @@ io: reject_user_html: "%{name} refuzis registro de %{target}" remove_avatar_user_html: "%{name} efacis profilimajo de %{target}" reopen_report_html: "%{name} riapertis raporto %{target}" + resend_user_html: "%{name} risendis konfirmretposto por %{target}" reset_password_user_html: "%{name} richanjis pasvorto de uzanto %{target}" resolve_report_html: "%{name} rezolvis raporto %{target}" sensitive_account_html: "%{name} markizis medii di %{target} quale sentoza" @@ -279,6 +287,7 @@ io: update_ip_block_html: "%{name} kreis regulo por IP %{target}" update_status_html: "%{name} novigis posto da %{target}" update_user_role_html: "%{name} chanjis rolo di %{target}" + deleted_account: konto efacita empty: Nula logi. filter_by_action: Filtrez segun ago filter_by_user: Filtrez segun uzanto @@ -300,6 +309,7 @@ io: unpublish: Depublikigez unpublished_msg: Anunco sucesoze depublikigesas! updated_msg: Anunco sucesoza novigesas! + critical_update_pending: Urjanta aktualigo vartesas custom_emojis: assign_category: Insertez kategorio by_domain: Domeno @@ -373,6 +383,15 @@ io: undo: Despermisez federato kun domeno domain_blocks: add_new: Add new + confirm_suspension: + cancel: Anulez + confirm: Restriktez + permanent_action: Desrestriktar la servilo ne restaurar irga datumi o relati. + preamble_html: Vu restriktos %{domain} e lua subdomeni. + remove_all_data: Co efacos omna kontenaji, imaji, videi e profildatumi por la konti di ca domeno de vua servilo. + stop_communication: Vua servilo haltos komunikar kun ca servili. + title: Konfirmez domenoblokuso por %{domain} + undo_relationships: Co desfacos irga sequorelato inter konti di ca servili e vua. created_msg: Domenobstrukto nun procedesas destroyed_msg: Domenobstrukto desagesis domain: Domeno @@ -385,6 +404,7 @@ io: create: Kreez obstrukto hint: Domenobstrukto ne preventos kreo di kontrekordaji en datumaturo, ma retroaktive e automate aplikos partikulara jermetodi a ta konti. severity: + desc_html: "Limitizez facos la posti dil konti di ca domeno nevidebla da irgu qua ne sequas li. Restriktez efacos omna kontenaji, imaji, videi e profildatumi dil konti di ca domeno de vua servilo. Uzez Nulo se vu volas nur refuzar imaji e videi." noop: Nulo silence: Limito suspend: Restriktez @@ -419,9 +439,23 @@ io: resolve: Rezolvez domeno title: Obstruktez nova retpostodomeno no_email_domain_block_selected: Retpostodomenobstrukti ne chanjesis por ke nulo selektesis + not_permitted: Ne permisata resolved_dns_records_hint_html: Ca domennomo rezolvesas a ca MX-domeni, quale esas ultime responsanta por ganar retposto. Obstruktar MX-domeno obstruktos registri de irga retpostoadreso quo uzas sama MX-domeni, mem se la videbla domennomo esas diferanta. Sorgemez e ne obstruktez majora retpostositi. resolved_through_html: Rezolvesis tra %{domain} title: Obstruktita retpostodomeni + export_domain_allows: + no_file: Nula dosiero selektesas + export_domain_blocks: + import: + description_html: Vu importacos listo de domenoblokusi. Voluntez kontrolar la listo sorgoze, partikulare se vu ne kreis la listo personale. + existing_relationships_warning: Existanta sequo-relati + private_comment_description_html: 'Por helpar vu savar de ube importacita blokusi venis, importacita blokusi kreesos kun la sequanta komento privata: %{comment}' + private_comment_template: Importacita de %{source} ye %{date} + title: Importacar domenoblokusi + invalid_domain_block: 'Un o plu kam un domenoblokuso omisesis pro la sequanta eroro(-i): %{error}' + new: + title: Importacar domenoblokusi + no_file: Nula dosiero selektesas follow_recommendations: description_html: "Sequorekomendi helpas nova uzanti rapide trovar interesanta kontenajo. Se uzanto ne interagas kun altra personi sate por igar personaligita sequorekomendi, ca konti rekomendas. Oli rikalkulesas die de mixo di konti kun maxim alta recenta interagi e maxim altra lokala sequantoquanto segun selektita linguo." language: Por linguo @@ -450,6 +484,7 @@ io: content_policies: comment: Interna noto description_html: Vu povas fixar kontenajguidili quo aplikesos a omna konti de ca domeno e irga oli subdomeni. + limited_federation_mode_description_html: Vu povas selektar ka vu permisos federar kun ca domeno. policies: reject_media: Refusez medii reject_reports: Refusez raporti @@ -497,6 +532,7 @@ io: total_reported: Raporti pri oli total_storage: Mediiatachaji totals_time_period_hint_html: Sumi quo montresas sube inkluzas informi de pos la komenco. + unknown_instance: Prezente ne esas registrago pri ta domeno che ca servilo. invites: deactivate_all: Deaktivigez omno filter: @@ -553,20 +589,27 @@ io: mark_as_sensitive_description_html: Medii en raportizita posti markizesos quale sentoza e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto. other_description_html: Videz plu multa opcioni por dominacar konduto di konto e kustumizar komuniko a raportizita konto. resolve_description_html: Nulo agesos kontre raportizita konto, streko ne rekordizesos e raporto klozesos. + silence_description_html: Konto esos videbla nur por personi qui ja sequas lo o manuale serchas lo, severe limitizante lua atingo. On sempre povas desfacar co. Klozas omna raporti kontra ca konto. + suspend_description_html: Ca konto e omna kontenaji esos neacesebla e efacota, e interagar kun ol esos neposibla. Desfacebla dum 30 dii. Klozas omna raporti kontra ca konto. actions_description_html: Decidez ago por rezolvar ca raporto. Se vu decidar puniso kontre raportizesis konto, retpostoavizo sendesos a ol, ecepte kande Spam kategorio selektesis. + actions_description_remote_html: Selektez quo vu agos por solvar ca raporto. Co nur efektigos quale vua servilo komunikas kun ca fora konto e traktas lua kontenaji. add_to_report: Insertez pluse a raporto are_you_sure: Ka vu esas certa? assign_to_self: Taskigez me assigned: Taskigita jerero by_target_domain: Domeno di raportizita konto + cancel: Anulez category: Kategorio category_description_html: La motivo ke ca konto e kontenajo raportizesis citesos por komuniko kun raportizita konto comment: none: Nulo comment_description_html: 'Por donar plu multa informo, %{name} skribis:' + confirm: Konfirmez + confirm_action: Konfirmez jero-ago kontra @%{acct} created_at: Raportizesis delete_and_resolve: Efacez posti forwarded: Sendesis + forwarded_replies_explanation: Ca raporto esas de fora uzanto e pri fora kontenajo. Esis dissemata a vu pro ke la raportita kontenajo es respondo a un ek vua uzanti. forwarded_to: Sendesis a %{domain} mark_as_resolved: Markizez quale rezolvita mark_as_sensitive: Markizez quale sentoza @@ -580,6 +623,7 @@ io: placeholder: Deskriptez quo agesis o irga relatita novaji... title: Noti notes_description_html: Videz e pozez noti a altra jereri e vua su en futuro + processed_msg: 'Raporto #%{id} sucesoze traktita' quick_actions_description_html: 'Agetez o volvez base por vidar raportizita kontenajo:' remote_user_placeholder: nelokala uzanti de %{instance} reopen: Riapertez raporto @@ -592,9 +636,28 @@ io: status: Stando statuses: Raportizita kontenajo statuses_description_html: Ofensanta kontenajo citesos en komuniko kun raportizita konto + summary: + action_preambles: + delete_html: 'Vu efacos kelka posti di @%{acct}. Co facos lo sequanta:' + mark_as_sensitive_html: 'Vu markizos kelka posti di @%{acct} quale provokema. Co facos lo sequanta:' + silence_html: 'Vu limitizos la konto di @%{acct}. Co facos lo sequanta:' + suspend_html: 'Vu restriktos la konto di @%{acct}. Co facos lo sequanta:' + actions: + delete_html: Efacar la ofensiva posti + mark_as_sensitive_html: Markizar la atachuri dil posti quale provokema + silence_html: Severe limitizar la atingo dil konto di @%{acct} per facar ke lua profilo e posti es videbla nur a personi qui ja sequas lu o qui manuale serchas lua profilo + suspend_html: Restriktar @%{acct}, facante ke lua profilo e kontenaji neacesibla e neposibla por interagado + close_report: 'Markizar raporto #%{id} quale solvita' + close_reports_html: Markizar omna raporti contra @%{acct} quale solvita + delete_data_html: Efacor la profilo e kontenaji di @%{acct} ye 30 dii de nun ecepte ke lu esus desrestrikita ante ta tempe + preview_preamble_html: "@%{acct} recevos averto kun la sequanta kontenajo:" + record_strike_html: Registrar punto kontra @%{acct} por helpar vu traktar futura reguloviolaci di ca konto + send_email_html: Sendez a @%{acct} avertala retposto + warning_placeholder: Neobligata plusa expliko por la jero-ago. target_origin: Fonto di raportizita konto title: Raporti unassign: Detaskigez + unknown_action_msg: 'Nekonocata ago: %{action}' unresolved: Nerezolvita updated_at: Novigesis view_profile: Videz profilo @@ -676,14 +739,21 @@ io: branding: preamble: Fabrikmarko di ca servilo diferentigas lu de altra servili en la reto. Ca informi forsan montresas che diversa loki. Do, ca informi debas esar klara. title: Fabrikmarkeso + captcha_enabled: + title: Postular ke nova uzanti solvos CAPTCHA por konfirmar lia konti content_retention: preamble: Dominacez quale uzantigita kontenajo retenesar en Mastodon. title: Kontenajreteneso + default_noindex: + desc_html: Efektigas omna uzanti qui ne personale chanjis ca opciono + title: Despartoprenigez uzanti de serchilo-indexi quale originala stando discovery: follow_recommendations: Sequez rekomendaji preamble: Montrar interesanta kontenajo esas importanta ye voligar nova uzanti quo forsan ne savas irgu. Dominacez quale ca deskovrotraiti funcionar en ca servilo. profile_directory: Profilcheflisto public_timelines: Publika tempolinei + publish_discovered_servers: Publikar deskovrita servili + publish_statistics: Publikar statistiki title: Deskovro trends: Tendenci domain_blocks: @@ -698,20 +768,51 @@ io: approved: Aprobo bezonesas por registro none: Nulu povas registrar open: Irgu povas registrar + security: + authorized_fetch: Postular autentikigo de federata servili + authorized_fetch_hint: Postular autentikigo de federata servili kapabligar plu strikta enforcigo dil blokusi di uzanti e dil servilo. Tamen, co enduktos exekutado-lentigo, diminutos la atingebleso di via respondi, e forsan enduktos koncilieblesoproblemi kun kelka softwari federata. Pluse, co ne preventos aganti dedikita de acesar vua publika posti e konti. + authorized_fetch_overridden_hint: Vu prezente ne povas chanjar ca opciono pro ke ol es remplasata da environmentala varieblo. + federation_authentication: Enforcigo di federado-autentikigo + title: Servilopcioni site_uploads: delete: Efacez adchargita failo destroyed_msg: Sitadchargito sucesoze efacesis! + software_updates: + critical_update: Urjanta — voluntez aktualigar rapide + description: On rekomendas ke vu sempre aktualigas vua Mastodon-instaluro por profitar la maxim nova solvuri e novaji. Pluse, kelkafoye es importantega aktualigar Mastodon rapide por evitar sekuresoproblemi. Pro ca motivi, Mastodon serchas aktualigi mihorale, e notifikos vu segun vua opcioni pri retposto-notifiki. + documentation_link: Lernez pluse + release_notes: Emiso-noti + title: Aktualigi disponebla + type: Tipo + types: + major: Majora emiso + minor: Minora emiso + patch: Mikra emiso — problemosolvuri e chanji facila a facar + version: Versiono statuses: + account: Skribinto + application: Apliko back_to_account: Retrovenez a kontopagino back_to_report: Retrovenez a raportpagino batch: remove_from_report: Efacez de raporto report: Raportizez deleted: Efacesis + favourites: Favoriziti + history: Historio di versioni + in_reply_to: Respondante a + language: Linguo media: title: Medii + metadata: Metadatumi no_status_selected: Nula posti chanjesis pro ke nulo selektesis + open: Apertez posto + original_status: Originala posto + reblogs: Dissemi + status_changed: Posto chanjita title: Kontoposti + trending: Populara + visibility: Videbleso with_media: Kun medii strikes: actions: @@ -724,9 +825,14 @@ io: suspend: "%{name} restriktis konto di %{target}" appeal_approved: Apelis appeal_pending: Vartata apelo + appeal_rejected: Apelo refuzita system_checks: database_schema_check: message_html: Existas vartanta datamaturmigri. Startez por certigar ke la softwaro kondutar quale expektita + elasticsearch_preset: + action: Videz la dokumentajo + elasticsearch_preset_single_node: + action: Videz la dokumentajo elasticsearch_running_check: message_html: Ne povas konektas a Elasticsearch. Kontrolez ke ol functionas o desaktivigez textokompleta trovo elasticsearch_version_check: @@ -737,6 +843,18 @@ io: message_html: Vu ne fixis irga servilreguli. sidekiq_process_check: message_html: Sidekiq procedo ne funcionas ye %{value} fask(o). Kontrolez vua opciono di Sidekiq + software_version_critical_check: + action: Videz la aktualigi disponebla + message_html: Urjanta Mastodon-aktualigo es disponebla, voluntez aktualigar la servilo tam rapide kam es posibla. + software_version_patch_check: + action: Videz la aktualigi disponebla + message_html: Problemosolvanta Mastodon-aktualigo es disponebla. + upload_check_privacy_error: + action: Konsultez hike por plu multa informo + message_html: "Vua retservilo es misfigurizita. La privateso di vua uzanti es domajebla." + upload_check_privacy_error_object_storage: + action: Konsultez hike por plu multa informo + message_html: "Vua dosierokonservo es misfigurizita. La privateso di vua uzanti es domajebla." tags: review: Kontrolez stando updated_msg: Hashtagopcioni novigesis sucesoze @@ -759,6 +877,7 @@ io: other: Partigesis da %{count} personi de pos antea semano title: Tendencoza ligili usage_comparison: Partigesis %{today} foyi hodie, la nombro esas %{yesterday} hiere + not_allowed_to_trend: Ne permisita quale popularo only_allowed: Nur permisato pending_review: Vartas kontrolo preview_card_providers: @@ -843,6 +962,9 @@ io: body: "%{target} apelas jerdecido da %{action_taken_by} de %{date}, quale esis %{type}. Oli skribis:" next_steps: Vu povas aprobar apelo por deagar jerdecido o ignorar. subject: "%{username} apela jerdecido che %{instance}" + new_critical_software_updates: + body: Nova urjanta versioni di Mastodon emisesis, vu forsan volas aktualigar tam balde kam es posibla! + subject: Urjanta Mastodon-aktualigi es disponebla por %{instance}! new_pending_account: body: Detali de nova konto esas la subo. Vu povas aprobar o refuzar ca apliko. subject: Nova konto bezonas kontrolesar che %{instance} (%{username}) @@ -850,6 +972,9 @@ io: body: "%{reporter} raportizis %{target}" body_remote: Ulu de %{domain} raportizis %{target} subject: Nova raporto por %{instance} (#%{id}) + new_software_updates: + body: Nova Mastodon-versioni emisesis, vu forsan volas aktualigar! + subject: Nova Mastodon-versioni es disponebla por %{instance}! new_trends: body: 'Ca kozi bezonas kontrol ante ol povas montresar publike:' new_trending_links: @@ -881,23 +1006,41 @@ io: notification_preferences: Chanjez retpostopreferaji salutation: "%{name}," settings: 'Chanjar la retpost-mesajala preferi: %{link}' + unsubscribe: Desabonez view: 'Vidar:' view_profile: Videz profilo view_status: Videz posto applications: created: Apliko sucesoze kreesas destroyed: Apliko sucesoze efacesas + logout: Ekirez regenerate_token: Rifacez acesficho token_regenerated: Acesficho sucesoze riganesas warning: Sorgemez per ca informi. Ne partigez kun irgu! your_token: Vua acesficho auth: + apply_for_account: Demandar konto + captcha_confirmation: + help_html: Se vu ne povas solvar la CAPTCHA, vu povas kontaktar ni per %{email} e ni povas helpar vu. + hint_html: Nur un plusa kozo! Ni postulas ke vu konfirmez ke vu esas homo (co es por ke ni povas preventar mesajachi!). Solvez la suba CAPTCHA e pulsez "Avancez". + title: Sekuresokontrolo + confirmations: + awaiting_review: Vua retpostadreso es konfirmita! La jeraro che %{domain} revuos vua apliko. Vu recevos retposto se li aprobas vua konto! + awaiting_review_title: Vua apliko vartas revuo + clicking_this_link: pulsante ca ligilo + login_link: enirar + proceed_to_login_html: Nun vu povas avancar a %{login_link}. + redirect_to_app_html: Vu devas sendesir al apliko %{app_name}. Se to ne evenis, probez %{clicking_this_link} o retroirez manuale al apliko. + registration_complete: Vua registrago che %{domain} nun es kompleta! + welcome_title: Bonvenez, %{name}! + wrong_email_hint: Se ta retpostadreso ne es korekta, vu povas chanjar lo en la konto-opcioni. delete_account: Efacez konto delete_account_html: Se vu volas efacar vua konto, vu povas irar hike. Vu demandesos konfirmar. description: prefix_invited_by_user: "@%{name} invitas vu juntar ca servilo di Mastodon!" prefix_sign_up: Registrez che Mastodon hodie! suffix: Per konto, vu povos sequar personi, postigar novaji e interchanjar mesaji kun uzanti de irga servilo di Mastodon e pluse! + didnt_get_confirmation: Ka vu ne recevis konfirmoligilo? dont_have_your_security_key: Ka vu ne havas sekuresklefo? forgot_password: Pasvorto obliviita? invalid_reset_password_token: Pasvorto richanjoficho esas nevalida o expirita. Demandez novo. @@ -910,18 +1053,39 @@ io: migrate_account_html: Se vu volas ridirektar ca konto a diferanto, vu povas ajustar hike. or_log_in_with: O eniras per privacy_policy_agreement_html: Me lektis e konsentis privatesguidilo + progress: + confirm: Konfirmar retpostoadreso + details: Vua detali + review: Nia revuo + rules: Aceptar reguli providers: cas: CAS saml: SAML register: Membreskar registration_closed: "%{instance} ne aceptas nova membri" + resend_confirmation: Risendez konfirmligilo reset_password: Chanjar la pasvorto rules: + accept: Aceptar + back: Retro + invited_by: 'Vu darfas krear konto che %{domain} pro ke vu recevis invito de:' preamble: Co igesas e exekutesas da jereri di %{domain}. + preamble_invited: Ante ke vu avancos, voluntez konsiderar la reguli kreita dal jeraro di %{domain}. title: Kelka bazala reguli. + title_invited: Vu esas invitita. security: Chanjar pasvorto set_new_password: Selektar nova pasvorto + setup: + email_below_hint_html: Kontrolez vua spam-dosieruro, o demandez altra ligilo. Vu povas korektigar vua retpostadreso se esas nekorekta. + email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike. + link_not_received: Ka vu ne recevis ligilo? + new_confirmation_instructions_sent: Vu recevos nova retposto kun la konfirmligilo pos kelka minuti! + title: Kontrolez vua retposti + sign_in: + preamble_html: Enirez per vua %{domain} detali. Se vua konto esas che altra servilo, vu ne povos enirar hike. + title: Enirez a %{domain} sign_up: + manual_review: Registragi che %{domain} es revuata da nia personaro. Por helpar ni traktar vua aplikajo, skribez kelko pri vu e pro quo vu volas konto che %{domain}. preamble: Per konto en ca servilo di Mastodon, on povas sequar irga persono en ca reto, ne ye ube ona konto hostagisas. title: Ni komencigez vu en %{domain}. status: @@ -930,14 +1094,15 @@ io: functional: Vua konto esas tote funcionoza. pending: Vua apliko bezonas kontrolo da nia laborero. Co forsan esas nekurta. Vu ganos retposto se vua apliko aprobesas. redirecting_to: Vua konto esas neaktiva pro ke ol nun ridirektesos a %{acct}. + self_destruct: Pro ke %{domain} balde klozos, vu havas nur aceso limitizata a vua konto. view_strikes: Videz antea streki kontre vua konto too_fast: Formulario sendesis tro rapide, probez itere. use_security_key: Uzes sekuresklefo challenge: - confirm: Durez + confirm: Avancez hint_html: "Guidilo: Ni ne demandos vua pasvorto itere til 1 horo." invalid_password: Nevalida pasvorto - prompt: Konfirmez pasvorto por durar + prompt: Konfirmez pasvorto por avancar crypto: errors: invalid_key: ne esas valida klefo Ed25519 o Curve25519 @@ -1009,6 +1174,9 @@ io: your_appeal_rejected: Vua apelo refuzesis domain_validator: invalid_domain: ne esas valida domennomo + edit_profile: + basic_information: Fundamentala informo + other: Altra errors: '400': Demando quon vu sendis esas nevalida o malstrukturala. '403': Vu ne havas permiso por vidar ca pagino. @@ -1044,6 +1212,8 @@ io: storage: Konservado di kontenajo featured_tags: add_new: Insertez novo + errors: + limit: Vu ja pinglizis la maxima nombro de hastagi hint_html: "Quo esas estelita hashtagi? Ol montresas eminente che vua publika profilo e povigas personi vidar vua publika posti partikulare kun ta hashtagi. Oli esas bona utensilo por jeretar kreiva agaji e longa projetaji." filters: contexts: @@ -1095,7 +1265,9 @@ io: all_matching_items_selected_html: one: "%{count} kozo quo parigesas kun vua trovato selektesas." other: Omna %{count} kozi quo parigesas kun vua trovato selektesas. + cancel: Anulez changes_saved_msg: Chanji senprobleme konservita! + confirm: Konfirmez copy: Kopiez delete: Efacez deselect: Deselektez omno @@ -1111,19 +1283,59 @@ io: other: Ulo ne eventis senprobleme! Voluntez konsultar la suba %{count} eror-raporti imports: errors: + empty: CSV-dosiero vakua + invalid_csv_file: 'Nevalida CSV-dosiero. Eroro: %{error}' over_rows_processing_limit: kontenas plu kam %{count} horizontala lineo + too_large: Dosiero es tro granda + failures: Falii + imported: Importacita + mismatched_types_warning: Semblas ke vu forsan selektis la nekorekta tipo por ca importaco, voluntez kontrolar itere. modes: merge: Kombinez merge_long: Retenez displonebla rekordi e insertez novi overwrite: Remplasez overwrite_long: Remplasez nuna rekordi per novi + overwrite_preambles: + blocking_html: Vu substitucos vua blokusolisto per til %{total_items} konti de %{filename}. + bookmarks_html: Vu substitucos vua libromarki per til %{total_items} posti de %{filename}. + domain_blocking_html: Vu substitucos vua domenoblokusolisto per til %{total_items} domeni de %{filename}. + following_html: Vu sequos til %{total_items} konti de %{filename} e haltar sequar irga altra konto. + lists_html: Vu substitucos vua listi kun la kontenaji di %{filename}. Til %{total_items} konti adjuntesos a nova listi. + muting_html: Vu substitucos vua listo di konti silencigita per til %{total_items} konti de %{filename}. + preambles: + blocking_html: Vu blokusos til %{total_items} konti de %{filename}. + bookmarks_html: Vu adjuntos %{total_items} posti de %{filename} a vua libromarki. + domain_blocking_html: Vu blokusos til %{total_items} domeni de %{filename}. + following_html: Vu sequos til %{total_items} konti de %{filename}. + lists_html: Vu adjuntos til %{total_items} konti de %{filename} a vua listi. Nova listi kreesos se ne existas listo a quo adjuntar. + muting_html: Vu silencigos til %{total_items} konti en %{filename}. preface: Tu povas importacar kelka datumi, tal quala listi de omna homi quin tu sequas o blokusas, a tua konto di ca instaluro, per dosiero exportacita de altra instaluro. + recent_imports: Importacaji recenta + states: + finished: Finita + in_progress: Progresanta + scheduled: Projetita + unconfirmed: Nekonfirmata + status: Stando success: Tua datumi esis senprobleme importacita ed esos traktita quale projetita + time_started: Komencita ye + titles: + blocking: Importacante konti blokusata + bookmarks: Importacante libromarki + domain_blocking: Importacante domeni blokusata + following: Importacante konti sequata + lists: Importacante listi + muting: Importacante konti silencigata + type: Tipo di importaco + type_groups: + constructive: Sequati & libromarki + destructive: Blokusati e silencigati types: blocking: Listo de blokusiti bookmarks: Libromarki domain_blocking: Domenobstruktolisto following: Listo de sequati + lists: Listi muting: Silenciglisto upload: Kargar invites: @@ -1138,6 +1350,7 @@ io: '86400': 1 dio expires_in_prompt: Nulatempe generate: Facez invitligilo + invalid: Ca invito ne es valida invited_by: 'Vu invitesis da:' max_uses: one: 1 uzo @@ -1148,6 +1361,9 @@ io: expires_at: Expiros uses: Uzi title: Invitez personi + lists: + errors: + limit: Vu atingis la maxima nombro de listi login_activities: authentication_methods: otp: 2-faktoryurizessoftwaro @@ -1159,6 +1375,21 @@ io: failed_sign_in_html: Falita enirprob per %{method} de %{ip} (%{browser}) successful_sign_in_html: Sucesoza eniro per %{method} de %{ip} (%{browser}) title: Yurizeshistorio + mail_subscriptions: + unsubscribe: + action: Yes, desabonez + complete: Desabonita + confirmation_html: Ka vu esas certa ke vu volas desabonar de recevar %{type} por Mastodon che %{domain} a vua retpostoadreso %{email}? Vu sempre povas riabonar che vua opcioni pri restposto-notifiki. + emails: + notification_emails: + favourite: notifiko-retposti pri favoriziti + follow: retposti pri sequo-notifiki + follow_request: retposti pri sequo-demandi + mention: retposti pri menciono-notifiki + reblog: retposti pri repeto-notifiki + resubscribe_html: Se vu desabonis eroroze, vu povas riabonar en vua opcioni pri retposto-notifiki. + success_html: Vu ne plus recevos %{type} por Mastodon che %{domain} a vua retpostadreso %{email}. + title: Desabonez media_attachments: validations: images_and_video: Ne povas atachar video a posto quo ja kontenar imaji @@ -1230,14 +1461,15 @@ io: poll: subject: Votposto di %{name} finis reblog: - body: "%{name} diskonocigis tua mesajo:" - subject: "%{name} diskonocigis tua mesajo" - title: Nova busto + body: "%{name} repetis vua posto:" + subject: "%{name} repetis vua posto" + title: Nova repeto status: subject: "%{name} nove postigis" update: subject: "%{name} modifikis posto" notifications: + administration_emails: Jerala retpostonotifiki email_events: Eventi por retpostoavizi email_events_hint: 'Selektez eventi quon vu volas ganar avizi:' other_settings: Altra avizopcioni @@ -1274,12 +1506,18 @@ io: expired: Votposto ja finis invalid_choice: Selektita votselektajo ne existas over_character_limit: ne povas esar plu longa kam %{max} literi por sing + self_vote: On ne povas votar en sua propra inquesti too_few_options: mustas havar kozi too_many_options: ne povas havar plu kam %{max} kozi preferences: other: Altra posting_defaults: Originala postoopcioni public_timelines: Publika tempolinei + privacy: + privacy: Privateso + reach: Atingo + search: Sercho + title: Privateso e atingo privacy_policy: title: Privatesguidilo reactions: @@ -1288,7 +1526,11 @@ io: unrecognized_emoji: ne esas rikonocita emocimajo relationships: activity: Kontoaktiveso + confirm_follow_selected_followers: Ka vu es certa ke vu volas sequar la selektata sequati? + confirm_remove_selected_followers: Ka vu es certa ke vu volas revokar la selektata sequati? + confirm_remove_selected_follows: Ka vu es certa ke vu volas revokar la selektata sequanti? dormant: Neaktiva + follow_failure: Ne esis posibla sequar kelka ek la selektita konti. follow_selected_followers: Sequez kelka sequanti followers: Sequanti following: Sequati @@ -1317,6 +1559,9 @@ io: over_daily_limit: Vu ecesas limito quale esas %{limit} projetita posti por hodio over_total_limit: Vu ecesas limito quale esas %{limit} projetita posti too_soon: Projetita dato mustas esar en futuro + self_destruct: + lead_html: Desfortunoze, %{domain} balde klozos. Se vu havis konto ibe, vu ne plus povas uzar it, ma vu ankore povas demandar exportacajo de vua datumi. + title: Ca servilo balde klozos sessions: activity: Antea aktiveso browser: Vidilo @@ -1328,6 +1573,7 @@ io: electron: Electron firefox: Firefox generic: Nesavita vidilo + huawei_browser: Navigilo Huawei ie: Internet Explorer micro_messenger: MicroMessenger nokia: Vidilo Nokia S40 Ovi @@ -1337,6 +1583,7 @@ io: qq: Vidilo QQ safari: Safari uc_browser: UC Browser + unknown_browser: Nekonocata Navigilo weibo: Weibo current_session: Nuna sesiono description: "%{browser} che %{platform}" @@ -1349,8 +1596,10 @@ io: chrome_os: ChromeOS firefox_os: Firefox OS ios: iOS + kai_os: KaiOS linux: Linux mac: macOS + unknown_platform: Nekonocata Platformo windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone @@ -1393,7 +1642,7 @@ io: video: one: "%{count} video" other: "%{count} videi" - boosted_from_html: Bustesis de %{acct_link} + boosted_from_html: Repetis de %{acct_link} content_warning: 'Kontenajaverto: %{warning}' default_language: Sama quale intervizajlinguo disallowed_hashtags: @@ -1408,7 +1657,7 @@ io: direct: Posti quo povas videsar nur mencionita uzanti ne povas pinglagesar limit: Vu ja pinglagis maxima posti ownership: Posto di altra persono ne povas pinglagesar - reblog: Busto ne povas pinglagesar + reblog: Repeto ne povas pinglizesar poll: total_people: one: "%{count} persono" @@ -1436,9 +1685,9 @@ io: exceptions: Ecepti explanation: Pro ke efacar posti esas nechipa procedo, co agas lente progresive kande servilo ne esas okupata. Do, vua posti forsan efacesos kurte pos oli atingas oldeslimito. ignore_favs: Ignorez favorati - ignore_reblogs: Ignorez busti + ignore_reblogs: Ignorez repeti interaction_exceptions: Ecepti segun interagi - interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub favorato o bustlimito pos iras super ol. + interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub la favoratala o repetala solii pos iras super oli. keep_direct: Retenez direta mesaji keep_direct_hint: Ne efacas irga vua direta mesaji keep_media: Retenez posti kun mediiatachaji @@ -1462,8 +1711,9 @@ io: '7889238': 3 monati min_age_label: Oldeslimito min_favs: Retenez favorizita posti mine - min_reblogs: Retenez bustita posti mine - min_reblogs_hint: Ne efacas irga vua posti quo bustigesos mine ca foyoquanto. Restez quale vakua por efacar posti sen suciar olia foyoquanto + min_favs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de favoriziti. Restez vakua por efacar posti senegarde la nombro de favoriziti + min_reblogs: Retenez posti repetita adminime + min_reblogs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de repeti. Restez vakua por efacar posti senegarde la nombro de repeti stream_entries: sensitive_content: Titiliva kontenajo strikes: @@ -1564,7 +1814,10 @@ io: seamless_external_login: Vu enirar tra externa serveso, do pasvorto e retpostoopcioni ne esas disponebla. signed_in_as: 'Eniris quale:' verification: + here_is_how: Yen quale + instructions_html: Kopiez e glutinez la kodexo suba en la HTML di vua retsituo. Pose adjuntez la adreso di vua retsituo en un ek la textobuxi di vua profilo per la "Modifikar profilo" pagino e konservez chanji. verification: Verifikeso + verified_links: Vua ligili verifikata webauthn_credentials: add: Insertez nova sekuresklefo create: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f7a2c28179..8682f37eec 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -599,7 +599,7 @@ ja: created_at: 通報日時 delete_and_resolve: 投稿を削除 forwarded: 転送済み - forwarded_replies_explanation: この報告はリモートユーザーからのものであり、またリモートコンテンツに関するものです。報告されたコンテンツがあなたのユーザーの内の一人に対するリプライの中にあるため、あなたに転送されました。 + forwarded_replies_explanation: これはリモートユーザーによる、リモートコンテンツについての報告です。問題のコンテンツはあなたのサーバー利用者への返信なので、こちらにも転送されて来ました。 forwarded_to: "%{domain}に転送されました" mark_as_resolved: 解決済みとしてマーク mark_as_sensitive: 閲覧注意にする diff --git a/config/locales/lad.yml b/config/locales/lad.yml new file mode 100644 index 0000000000..626d2da7ec --- /dev/null +++ b/config/locales/lad.yml @@ -0,0 +1,622 @@ +--- +lad: + about: + about_mastodon_html: 'La red sosyala del avenir: Sin reklamas, sin vijilansia korporativa, kon desen etiko, i desentralizasyon! Seas patron de tu enformasyon kon Mastodon!' + contact_missing: No espesifikado + contact_unavailable: No desponivle + hosted_on: Mastodon balabayado en %{domain} + title: Sovre mozotros + accounts: + follow: Sige + followers: + one: Suivante + other: Suivantes + following: Sigiendo + instance_actor_flash: Este kuento es un aktor virtual utilizado para reprezentar al sirvidor en si mezmo i no a dingun utilizador individual. Se utiliza para butos de la federasyon i no se deve suspender. + last_active: ultima koneksyon + link_verified_on: La propiedad de este atadijo fue verifikada el %{date} + nothing_here: No ay niente aki! + pin_errors: + following: Deves estar sigiendo a la persona a la ke keres achetar + posts_tab_heading: Publikasyones + admin: + account_actions: + action: Realiza aksion + title: Modera %{acct} + account_moderation_notes: + create: Kriya nota + created_msg: Nota de moderasyon kriyada kon sukseso! + destroyed_msg: Nota de moderasyon destruida kon sukseso! + accounts: + add_email_domain_block: Bloka domeno de posta + approve: Achetar + approved_msg: La solisitasyon de enrejistrasyon de %{username} achetada djustamente + are_you_sure: Estas siguro? + avatar: Imaje de profil + by_domain: Domeno + change_email: + changed_msg: Adreso de posta trokado kon sukseso! + current_email: Posta elektronika aktuala + label: Troka la posta elektronika + new_email: Mueva posta elektronika + submit: Troka la posta elektronika + title: Troka la posta elektronika de %{username} + change_role: + changed_msg: Rolo trokado kon sukseso! + label: Troka rolo + no_role: Sin rolo + title: Troka rolo para %{username} + confirm: Konfirma + confirmed: Konfirmado + confirming: Konfirmando + custom: Personalizado + delete: Efasa datos + deleted: Kitado + demote: Degrada + destroyed_msg: Los datos de %{username} estan agora en kola para ser supremir pishin + disable: Inkapasita + disable_sign_in_token_auth: Inkapasita la autentifikasyon por token de posta elektronika + disable_two_factor_authentication: Inkapasita autentifikasyon en dos pasos + disabled: Inkapasitada + display_name: Nombre amostrado + domain: Domeno + edit: Edita + email: Posta elektronika + email_status: Estatus de posta + enable: Kapasita + enable_sign_in_token_auth: Kapasita la autentifikasyon por token de posta elektronika + enabled: Kapasitada + enabled_msg: El kuento de %{username} fue kapasitado djustamente + followers: Suivantes + follows: Segimientos + header: Kavesera + inbox_url: URL del kuti de arivo + invite_request_text: Razones para unirse + invited_by: Envitado por + ip: IP + joined: Unido + location: + all: Todos + local: Lokal + remote: Remoto + title: Lokalizasyon + login_status: Estado de koneksyon kon kuento + media_attachments: Aneksos de multimedia + memorialize: Konvirtir en memorial + memorialized: Kuento komemorativo + memorialized_msg: "%{username} se konvirtido kon sukseso en un kuento komemorativo" + moderation: + active: Aktivo + all: Todos + disabled: Inkapasitado + pending: Asperando + silenced: Limitado + suspended: Suspendido + title: Moderasyon + moderation_notes: Notas de moderasyon + most_recent_activity: Aktivita mas reziente + most_recent_ip: IP mas muevo + no_account_selected: Dinguno kuento fue trokado komo dinguno fue eskojido + no_limits_imposed: Sin limites forsados + no_role_assigned: Dingun rolo apropyado + not_subscribed: No se esta abonado + pending: Revizion esta asperando + perform_full_suspension: Suspende + previous_strikes: Amonestamientos previos + previous_strikes_description_html: + one: Este kuento tiene un amonestamiento. + other: Este kuento tiene %{count} amonestamientos. + promote: Promosyonar + protocol: Protokol + public: Publiko + push_subscription_expires: Ekspirasyon del abonamiento PuSH + redownload: Arefreskar profil + redownloaded_msg: Se aktualizo djustamente el profil de %{username} dizde el orijin + reject: Refuza + rejected_msg: La solisitasyon de enrejistrasyon de %{username} a sido refuzada kon sukseso + remote_suspension_irreversible: Los datos de este kuento fueron irreversivlemente supremidos. + remote_suspension_reversible_hint_html: El kuento fue suspendido en este sirvidor i los datos seran totalmente supremidos el %{date}. Asta estonses el sirvidor remoto puede restaurar este kuento sin dingun efekto negativo. Si keres supremir todos los datos del kuento pishin, puedes fazerlo a kontinuasyon. + remove_avatar: Efasa imaje de profil + remove_header: Efasa kavesera + removed_avatar_msg: Se tiene supremido kon sukseso la imaje de profil de %{username} + removed_header_msg: Se tiene supremido kon sukseso la imaje de kavesera de %{username} + resend_confirmation: + already_confirmed: Este utilizador ya esta konfirmado + send: Reembia la posta elektronika de konfirmasyon + success: Posta elektronika de konfirmasyon embiada kon sukseso! + reset: Reinisya + reset_password: Reinisya kod + resubscribe: Reabona + role: Rolo + search: Bushka + search_same_email_domain: Otros utilizadores kon el mezmo domeno de posta + search_same_ip: Otros utilizadores kon el mezmo adreso IP + security: Sigurita + security_measures: + only_password: Solo kod + password_and_2fa: Kod i A2P + sensitive: Sensivle + sensitized: Markado komo sensivle + shared_inbox_url: URL de kuti partajado + show: + created_reports: Raportos embiados por este kuento + targeted_reports: Raportos embiados sovre este kuento + silence: Limita + silenced: Limitado + statuses: Publikasyones + strikes: Amonestamientos previos + subscribe: Abona + suspend: Suspende + suspended: Suspendido + suspension_irreversible: Los datos de este kuento fueron irreversivlemente supremidos. Puedes dezazer la suspensyon del kuento para fazerlo utilizavle, ama no rekuperaras los datos los kualos tenias mas antes. + suspension_reversible_hint_html: El kuento fue suspendido i los datos se supremiran kompletamente el %{date}. Asta estonses, el kuento puede ser restaurado sin dingun efekto negativo. Si keres supremir todos los datos del kuento pishin, puedes fazerlo a kontinuasyon. + title: Kuentos + unblock_email: Dezbloka adreso de posta + unblocked_email_msg: Tienes dezblokado el adreso de posta de %{username} + unconfirmed_email: Posta elektronika sin konfirmasyon + undo_sensitized: Dezmarka komo sensivle + undo_silenced: No limita + undo_suspension: Desuspende + unsilenced_msg: Se kito kon sukseso el limito del kuento %{username} + unsubscribe: Deabona + unsuspended_msg: Se kito kon sukseso la suspensyon del kuento de %{username} + username: Nombre de utilizador + view_domain: Ve rezumen del domeno + warn: Averte + web: Web + whitelisted: Permitido para la federasyon + action_logs: + action_types: + approve_appeal: Acheta apelasyon + approve_user: Acheta utilizador + assigned_to_self_report: Asinya raporto + change_email_user: Troka posta elektronika del utilizador + change_role_user: Troka rolo de utilizador + confirm_user: Konfirma utilizador + create_account_warning: Kriya avertensya + create_announcement: Kriya pregon + create_canonical_email_block: Kriya bloko de posta elektronika + create_custom_emoji: Kriya emoji personalizado + create_domain_allow: Kriya permiso de domeno + create_domain_block: Kriya bloko de domeno + create_email_domain_block: Kriya bloko de domeno de posta + create_ip_block: Kriya regla de IP + create_unavailable_domain: Kriya domeno no desponivle + create_user_role: Kriya rolo + demote_user: Degrada utilizador + destroy_announcement: Efasa pregon + destroy_canonical_email_block: Efasa bloko de posta elektronika + destroy_custom_emoji: Efasa emoji personalizado + destroy_domain_allow: Efasa permiso de domeno + destroy_domain_block: Efasa bloko de domeno + destroy_email_domain_block: Efasa bloko de domeno de posta + destroy_instance: Efasa domeno + destroy_ip_block: Efasa regla de IP + destroy_status: Efasa publikasyon + destroy_unavailable_domain: Efasa domeno no desponivle + destroy_user_role: Efasa rolo + disable_2fa_user: Inkapasita autentifikasyon en dos pasos + disable_custom_emoji: Inkapasita emoji personalizados + disable_sign_in_token_auth_user: Inkapasita la autentifikasyon por token de posta elektronika para el utilizador + disable_user: Inkapasita utilizador + enable_custom_emoji: Kapasita emoji personalizados + enable_sign_in_token_auth_user: Kapasita la autentifikasyon por token de posta para el utilizador + enable_user: Kapasita utilizador + memorialize_account: Transforma en kuento komemorativo + promote_user: Promove utilizador + reject_appeal: Refuza apelasyon + reject_user: Refuza utilizador + remove_avatar_user: Efasa imaje de profil + reopen_report: Reavre raporto + resend_user: Reembia posta de konfirmasyon + reset_password_user: Reinisya kod + resolve_report: Rezolve raporto + sensitive_account: Marka multimedia en tu kuento komo sensivle + silence_account: Limita kuento + suspend_account: Suspende kuento + unassigned_report: Dezasinya raporto + unblock_email_account: Dezbloka adreso de posta + unsensitive_account: Dezmarka multimedia en tu kuento komo sensivle + unsilence_account: No limita kuento + unsuspend_account: Desuspende kuento + update_announcement: Aktualiza pregon + update_custom_emoji: Aktualiza emoji personalizado + update_domain_block: Aktualiza bloko de domeno + update_ip_block: Aktualiza regla de IP + update_status: Aktualiza publikasyon + update_user_role: Aktualiza rolo + actions: + unsilence_account_html: "%{name} kito el limite del kuento de %{target}" + unsuspend_account_html: "%{name} reaktivo el kuento de %{target}" + update_announcement_html: "%{name} aktualizo el pregon %{target}" + update_custom_emoji_html: "%{name} aktualizo el emoji %{target}" + update_domain_block_html: "%{name} aktualizo el bloko de domeno para %{target}" + update_ip_block_html: "\"%{name} troko la regla de IP %{target}" + update_status_html: "%{name} aktualizo la publikasyon de %{target}" + update_user_role_html: "%{name} troko el rolo %{target}" + deleted_account: kuento supremido + empty: No se toparon rejistros. + filter_by_action: Filtra por aksion + filter_by_user: Filtra por utilizador + title: Log de revizyon + announcements: + destroyed_msg: Pregon supremido kon sukseso! + edit: + title: Edita pregon + empty: No se toparon pregones. + live: En bivo + new: + create: Kriya pregon + title: Muevo pregon + publish: Publika + published_msg: Pregon publikado kon sukseso! + scheduled_for: Programado para %{time} + scheduled_msg: Pregon programado para su publikasyon! + title: Pregones + unpublish: Retirar publikasyon + unpublished_msg: Pregon retirado kon sukseso! + updated_msg: Pregon aktualizado kon sukseso! + custom_emojis: + assign_category: Asinyar kategoria + by_domain: Domeno + copied_msg: Kopia lokala del emoji kriyada kon sukseso + copy: Kopia + copy_failed_msg: No se pudo realizar una kopia lokala de akel emoji + create_new_category: Kriya una mueva kategoria + created_msg: Emoji kriyado kon sukseso! + delete: Efasa + destroyed_msg: Emoji destruyido kon sukseso! + disable: Inkapasita + disabled: Inkapasitado + disabled_msg: Se inkapasito akel emoji kon sukseso + emoji: Emoji + enable: Kapasita + enabled: Kapasitado + enabled_msg: Se kapasito akel emoji kon sukseso + image_hint: PNG o GIF asta %{size} + list: Lista + listed: Listados + new: + title: Adjustar muevo emoji personalizado + no_emoji_selected: No se troko dingun emoji porke no eskojites dinguno + not_permitted: No tienes permiso para realizar esta aksyon + domain_blocks: + existing_domain_block_html: Ya tienes forsado limitos mas estriktos a %{name}, kale dezblokarlo primero. + export: Eksporto + import: Importo + new: + create: Kriya bloko + hint: El bloko de domeno no prevendra la kriyasyon de entradas de kuento en la baza de datos, ama aplikara retroaktiva i otomatikamente metodos de moderasyon espesifika en dichos kuentos. + severity: + desc_html: "Limitar ara las publikasyones del kuento invizivles a kualkiera ke no lo este sigiendo. Suspender supremira todo el kontenido, media, i datos del profil. Uza Dinguno si solo keres refuzar dosyas multimedia." + noop: Dinguno + silence: Limita + suspend: Suspende + title: Muevo bloko de domeno + no_domain_block_selected: Dingun bloko de domeno tiene sido trokado deke dingun tiene sido eskojido + not_permitted: No tienes permiso para egzekutar esta aksyon + obfuscate: Eskonde nombre de domeno + obfuscate_hint: Eskonde una parte del nombre de domeno en la lista si amostrar la lista de limitasyones de domeno esta kapasitado + private_comment: Komento privado + private_comment_hint: Komento sovre esta limitasyon de domeno para el uzo interno por parte de los moderadores. + public_comment: Komento publiko + public_comment_hint: Komento sovre esta limitasyon de domeno para el publiko en djeneral, si la publisita de la lista de limitasyones de domeno esta kapasitada. + reject_media: Refuza dosyas de multimedia + reject_media_hint: Efasa dosyas multimedia magazinadas lokalmente para abashar kualkiera en el avenir. No relevante para suspensiones + reject_reports: Refuza raportos + reject_reports_hint: Ignora todos los raportos de este domeno. No relevante para suspensiones + undo: Dezaz bloko de domeno + view: Ve domeno blokado + email_domain_blocks: + add_new: Adjustar muevo + attempts_over_week: + one: "\"%{count} prova durante la ultima semana" + other: "%{count} provas de enrejistrarse durante la ultima semana" + created_msg: Domeno de posta blokado kon sukseso + delete: Efasa + dns: + types: + mx: Defter MX + domain: Domeno + new: + create: Adjusta domeno + resolve: Rezolve domeno + title: Bloka muevo domeno de posta + no_email_domain_block_selected: No se tienen trokado blokos de domeno porke dinguno a sido eskojido + not_permitted: Sin permiso + resolved_dns_records_hint_html: El nombre de domeno rezolve los sigientes domenos MX, los kualos son responsavles en ultima instansya de achetar la posta elektronika. Blokar un domeno MX blokara los rejistros de kualkier adreso de posta elektronika ke utilize el mezmo domeno MX, inkluzo si el nombre de domeno vizivle es desferente. Tenga kudiado de no blokar los prinsipales domenos de posta elektronika. + resolved_through_html: Rezolvido por %{domain} + title: Domenos de posta blokados + export_domain_allows: + new: + title: Importa permisos de domeno + no_file: Dinguna dosya tiene sido eskojida + export_domain_blocks: + import: + description_html: Vas importar una lista de blokos de domenos. Por favor reviza esta lista kon atansion, espesialmente si no eres el kriyador de la lista. + existing_relationships_warning: Relasiones de segimiento existientes + private_comment_description_html: 'Para ayudarte a averiguar de ande vienen los blokos importados, blokos importados seran kriyados kon este komento privado: %{comment}' + private_comment_template: Importado de %{source} el %{date} + title: Importa blokos de domeno + invalid_domain_block: 'Uno o mas blokos de domeno fueron omitidos por razon de yerro(s): %{error}' + new: + title: Importa blokos de domeno + no_file: Dinguna dosya tiene sido eskojida + follow_recommendations: + description_html: "Las rekomendasyones de kuentos ayudan a los muevos utilizadores a topar presto kontenido enteresante. Kuando un utilizador no tiene enteraktuado kon otros lo sufisiente komo para djenerar rekomendasyones personalizadas de kuentos a las ke segir, en sus lugar se le rekomiendan estes kuentos. Se rekalkulan diariamente a partir de una mikstura de kuentos kon el mayor numero de enteraksyones rezientes i kon el mayor numero de suivantes lokales kon una lingua determinada." + language: Para la lingua + instances: + public_comment: Komento publiko + purge: Purga + purge_description_html: Si kreyes ke este domeno esta deskonektado, puedes efasar todos los rejistros de kuentos i los datos asosyados de este domeno de tu magazinaje. Esto puede levar un tiempo. + title: Federasyon + total_blocked_by_us: Blokado por mozotros + total_followed_by_them: Segidos por eyos + total_followed_by_us: Segidos por mozotros + total_reported: Raportos sovre eyos + total_storage: Aneksos de multimedia + totals_time_period_hint_html: Los totales amostrados a kontinuasyon inkluyen datos para todo el tiempo. + invites: + deactivate_all: Dezaktiva todos + filter: + all: Todos + available: Desponivles + expired: Kadukados + title: Filtra + title: Envitasyones + ip_blocks: + add_new: Kriya regla + created_msg: Mueva regla de IP adjustada kon sukseso + delete: Efasa + expires_in: + '1209600': 2 semanas + '15778476': 6 mezes + '2629746': 1 mez + '31556952': 1 anyo + '86400': 1 diya + '94670856': 3 anyos + new: + title: Kriya mueva regla de IP + no_ip_block_selected: No se tienen trokado reglas IP deke niguna fue eskojida + title: Reglas de IP + relationships: + title: Relasyones de %{acct} + relays: + add_new: Adjusta un muevo relevo + delete: Efasa + description_html: Un relevo de federasyon es un sirvidor intermedio ke enterkambia mabules de publikasyones publikas entre sirvidores ke se abonan i publikan en el. Puede ayudar a sirvidores chikos i medianos a diskuvrir kontenido del fediverso, ke de otra manera rekeriria ke los utilizadores lokales sigiesen manualmente a personas de sirvidores remotos. + disable: Inkapasita + disabled: Inkapasitado + enable: Kapasita + enable_hint: Una vez konektado, tu sirvidor se abonara a todas las publikasyones publikas de este relevo, i ampesara a embiar las publikasyones publikas de este sirvidor verso el. + enabled: Kapasitado + inbox_url: URL del relevo + pending: Asperando la achetasion del relevo + save_and_enable: Guadra i konekta + setup: Apareja una koneksyon de relevos + signatures_not_enabled: Los relevos no fonksionaran djustamente mientres el modo siguro o el modo de federasyon limitada esten kapasitados + status: Estado + title: Relevos + report_notes: + created_msg: Tienes kriyado djustamente la nota de denunsia! + destroyed_msg: Tienes efasado djustamente la nota de denunsia! + reports: + account: + notes: + one: "%{count} nota" + other: "%{count} notas" + action_log: Defter de revizyon + action_taken_by: Aksyon tomada por + actions: + delete_description_html: Los mesajes denunsiados seran supremidos i se enrejistrara un amonestamiento para ayudarte kon las futuras infraksyones por el mezmo kuento. + mark_as_sensitive_description_html: Las dosyas de multimedia en los mesajes enformados se markaran komo sensivles i se aplikara un amonestamiento para ayudarte kon las futuras infraksyones del mezmo kuento. + other_description_html: Ve mas opsiones para kontrolar el komporto del kuento i personalizar la komunikasyon del kuento raportado. + resolve_description_html: No se tomaran aksyones kontra el kuento denunsiado, no se enrejistrara el amonestamiento, i se serrara el raporto. + silence_description_html: El profil sera vizivle solo para akeyos ke ya lo sigan o lo bushken manualmente, limitando seriamente su alkanse. Siempre puede ser revertido. + suspend_description_html: El profil i todos sus kontenidos seran inaksesivles asta ke sean enfin supremidos. La enteraksion kon el kuento sera emposivle. Reversivle durante un tiempo de 30 diyas. + actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam. + actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido. + add_to_report: Adjusta mas al raporto + are_you_sure: Estas siguro? + assign_to_self: Asinyamela a mi + assigned: Moderador asinyado + by_target_domain: Domeno del kuento raportado + cancel: Anula + category: Kategoria + category_description_html: La razon por la ke se raporto este kuento o kontenido sera mensyonada en las komuniksayones kon el kuento raportado + comment: + none: Dinguno + comment_description_html: 'Para dar mas enformasyon, %{name} eskrivio:' + confirm: Konfirma + confirm_action: Konfirma la aksyon de moderasyon kontra @%{acct} + created_at: Raportado + delete_and_resolve: Efasa publikasyones + forwarded: Reembiado + forwarded_to: Reembiado a %{domain} + mark_as_resolved: Marka komo rezolvido + mark_as_sensitive: Marka komo sensivle + mark_as_unresolved: Marka komo no rezolvido + no_one_assigned: Dinguno + notes: + create: Adjusta una nota + create_and_resolve: Rezolve kon una nota + create_and_unresolve: Reavre kon una nota + delete: Efasa + placeholder: Espesifika ke aksyones se tienen tomado o kualkier otro haber... + title: Notas + notes_description_html: Ve i desha notas a otros moderadores i a tu yo futuro + processed_msg: 'Raporto #%{id} prosesado kon sukseso' + quick_actions_description_html: 'Toma una aksion rapida o metete abasho para ver el kontenido denunsiado:' + remote_user_placeholder: el utilizador remoto de %{instance} + reopen: Reavre denunsia + report: 'Raporta #%{id}' + reported_account: Kuento raportado + reported_by: Raportado por + resolved: Rezolvido + resolved_msg: Tienes rezolvido la denunsia djustamente! + skip_to_actions: Ir direktamente a las aksyones + status: Estado + statuses: Kontenido raportado + statuses_description_html: El kontenido ofensivo se sitara en la komunikasyon kon el kuento raportado + summary: + action_preambles: + delete_html: 'Vas kitar algunas de las publikasyones de @%{acct}''''. Esto va:' + mark_as_sensitive_html: 'Vas markar algunas de las publikasyones de @%{acct} komo sensivles. Esto va:' + silence_html: 'Vas limitar el kuento de @%{acct}''''. Esto va:' + suspend_html: 'Vas suspender el kuento de @%{acct}''''. Esto va:' + actions: + delete_html: Kitar las publikasyones ofensivas + mark_as_sensitive_html: Markar los multimedios de la publikasyon komo sensivles + silence_html: Severamente limitar la vizivilita de @%{acct}, fazendo su profil i kontenido vizivles solo para las personas ke ya lo sigen o manualmente bushkan su profil + suspend_html: Suspender @%{acct}, faziendo su profil i kontenido inaksesivle i no disponivle para interaksiones + close_report: 'Markar raporto #%{id} komo rezolvido' + close_reports_html: Markar todos los raportos kontra @%{acct} komo rezolvidos + delete_data_html: Efasa el profil i kontenido de @%{acct} en 30 dias si no sea desuspendido en akel tiempo + preview_preamble_html: "@%{acct} resivira una avertensya komo esta:" + record_strike_html: Enrejistra un amonestamiento kontra @%{acct} para ke te ayude eskalar las violasyones de reglas de este kuento en el avenir + send_email_html: Embia un mesaj de avertensia a la posta elektronika de @%{acct} + warning_placeholder: Adisionalas, opsionalas razones la aksyon de moderasyon. + target_origin: Orijin del kuento raportado + title: Raportos + unassign: Dezasinyar + unknown_action_msg: 'Aksyon no konesida: %{action}' + unresolved: No rezolvido + updated_at: Aktualizado + view_profile: Ve profil + roles: + add_new: Adjusta rolo + assigned_users: + one: "%{count} utilizador" + other: "%{count} utilizadores" + categories: + administration: Administrasyon + devops: DevOps + invites: Envytasyones + moderation: Moderasyon + special: Espesial + delete: Efasa + description_html: Kon rolos de utilizador, puede personalizar las fonksiones i areas de Mastodon a las ke pueden akseder sus utilizadores. + edit: Edita rolo '%{name}' + everyone: Permisos predeterminados + everyone_full_description_html: Este es el rolo base ke afecta a todos los utilizadores, inkluzo akeyos sin un rolo asinyado. Todos los otros rolos eredan permisos de el. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisos" + privileges: + administrator: Administrador + administrator_description: Los utilizadores kon este permiso saltaran todos los permisos + delete_user_data: Efasar datos de utilizador + delete_user_data_description: Permete a los utilizadores supremir los datos de otros utilizadores sin demora + invite_users: Envita a djente + invite_users_description: Permete a los utilizadores envitar a muevas personas al sirvidor + manage_announcements: Administra pregones + manage_announcements_description: Permete a los utilizadores gestionar pregones en el sirvidor + manage_appeals: Administra apelasiones + manage_appeals_description: Permete a los utilizadores revizar apelasiones kontra aksyones de moderasyon + manage_blocks: Administra blokos + manage_blocks_description: Permete a los utilizadores blokar los prokuradores de posta elektronika i los adresos IP + manage_custom_emojis: Administra emojis personalizados + manage_custom_emojis_description: Permete a los utilizadores editar emojis personalizados en el sirvidor + manage_federation: Administra federasyon + manage_federation_description: Permete a los utilizadores blokar o permeter la federasyon kon otros domenos, i kontrolar la entregabilita + manage_invites: Administra envitasyones + manage_invites_description: Permete a los utilizadores navegar i dezaktivar los atadijos de envitasyon + manage_reports: Administra raportos + manage_reports_description: Permete a los utilizadores revizar raportos i realizar aksyones de moderasyon bazadas en eyos + manage_roles: Administra rolos + manage_roles_description: Permete a los utilizadores administrar i asinyar rolos por debasho de los suyos + manage_rules: Administra reglas + manage_rules_description: Permete a los utilizadores trokar las reglas del sirvidor + manage_settings: Administra konfigurasyon + settings: + registrations: + title: Enrejistramientos + registrations_mode: + modes: + approved: Se rekiere achetasion para enrejistrarse + none: Permete a los utilizadores trokar la konfigurasyon del sitio + open: Kualkiera puede enrejistrarse + title: Konfigurasyon del sirvidor + site_uploads: + delete: Efasa dosya kargada + destroyed_msg: Dosya supremida kon sukseso! + software_updates: + documentation_link: Ambezate mas + type: Tipo + version: Versyon + statuses: + account: Autor + application: Aplikasyon + back_to_account: Retorna al kuento + back_to_report: Retorna a la pajina del raporto + batch: + remove_from_report: Kita del raporto + report: Raporto + deleted: Efasado + favourites: Favoritos + history: Estoria de versiones + in_reply_to: En repuesta a + language: Lingua + media: + title: Multimedia + metadata: Metadatos + no_status_selected: No se troko dinguna publikasyon al no eskojer dinguna + open: Avre publikasyon + original_status: Publikasyon orijinala + reblogs: Repartajasyones + status_changed: Publikasyon trokada + title: Publikasyones del kuento + trending: Trendes + visibility: Vizivilita + with_media: Kon multimedia + strikes: + actions: + delete_statuses: "%{name} supremio las publikasyones de %{target}" + disable: "%{name} konjelo el kuento de %{target}" + mark_statuses_as_sensitive: "%{name} tiene markado las publikasyones de %{target} komo sensivles" + none: "%{name} embio una avertensya a %{target}" + sensitive: "%{name} marko el kuento de %{target} komo sensivle" + silence: "%{name} limito el kuento de %{target}" + suspend: "%{name} suspendio el kuento de %{target}" + appeal_approved: Apelado + appeal_pending: Apelasyon pendiente + appeal_rejected: Apelasyon refuzada + system_checks: + database_schema_check: + message_html: Ay migrasyones asperando de la baza de datos. Por favor, egzekutalas para asigurarte de ke la aplikasyon fonksiona komo deveria + elasticsearch_preset: + action: Ve dokumentasyon + elasticsearch_preset_single_node: + action: Ve dokumentasyon + elasticsearch_running_check: + message_html: No se pudo konektar a Elasticsearch. Por favor, averigua ke esta egzekutandose, o dezaktiva la bushkeda de teksto kompleto + elasticsearch_version_check: + message_html: 'Versyon inkompativle de Elasticsearch: %{value}' + version_comparison: Elasticsearch %{running_version} se esta egzekutando ama ay menester de Elasticsearch %{required_version} + rules_check: + action: Administra reglas del sirvidor + message_html: No tienes definido dinguna regla del sirvidor. + sidekiq_process_check: + message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq + upload_check_privacy_error: + message_html: "Tu sirvidor de web es mal konfigurado. La privasita de tus utilizadores esta en riziko." + upload_check_privacy_error_object_storage: + action: Ve aki para mas enformasyon + message_html: "Tu magazinaje de objektos es mal konfigurado. La privasita de tus utilizadores esta en riziko." + tags: + review: Estado de revizion + updated_msg: Konfigurasyon de etiketas aktualizada kon sukseso + title: Administrasyon + trends: + allow: Permete + approved: Achetadas + disallow: No permete + links: + allow: Permete atadijo + allow_provider: Permete publikador + description_html: Estos son atadijos ke aktualmente estan siendo partajados muncho por los kuentos dizde las ke tu sirvidor ve los mesajes. Pueden ayudar a tus utilizadores a averiguar ke esta pasando en el mundo. Ningun atadijo se amostren publikamente asta ke autorice al domeno. Tamyen puede permeter o refuzar atadijos individuales. + disallow: Refuza atadijo + disallow_provider: Refuza publikador + no_link_selected: No se troko dingun atadijo porke no eskojites dinguno + publishers: + no_publisher_selected: No se troko dingun publikador porke no eskojites dinguno diff --git a/config/locales/pa.yml b/config/locales/pa.yml index bb8a6c834d..7a34358ddb 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -1 +1,161 @@ +--- pa: + about: + about_mastodon_html: ਭਵਿੱਖ ਦਾ ਸ਼ੋਸ਼ਲ ਨੈੱਟਵਰਕ ਹੈ। ਕੋਈ ਇਸ਼ਤਿਹਾਰ ਨਹੀਂ, ਕੋਈ ਵਪਾਰਕ ਨਿਗਰਾਨੀ ਨਹੀਂ, ਨੈਤਿਕ ਡਿਜ਼ਾਇਨ ਅਤੇ ਖਿੰਡਿਆ ਹੋਇਆ ਨੈੱਟਵਰਕ! ਮਸਟੋਡੋਨ ਨਾਲ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਆਪਣਾ ਹੀ ਰੱਖੋ! + contact_missing: ਸੈੱਟ ਨਹੀਂ ਹੈ + contact_unavailable: ਲਾਗ ਨਹੀਂ + hosted_on: "%{domain} ਉੱਤੇ ਹੋਸਟ ਕੀਤਾ ਮਸਟਾਡੋਨ" + title: ਇਸ ਬਾਰੇ + accounts: + follow: ਫ਼ਾਲੋ + following: ਫ਼ਾਲੋ ਕੀਤੇ ਜਾ ਰਹੇ + posts_tab_heading: ਪੋਸਟਾਂ + admin: + account_moderation_notes: + create: ਨੋਟ ਭੇਜੋ + accounts: + approve: ਮਨਜ਼ੂਰ + are_you_sure: ਪੱਕਾ? + avatar: ਅਵਤਾਰ + by_domain: ਡੋਮੇਨ + change_email: + changed_msg: ਈਮੇਲ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਬਦਲਿਆ ਗਿਆ! + current_email: ਮੌਜੂਦਾ ਈਮੇਲ + label: ਈਮੇਲ ਬਦਲੋ + new_email: ਨਵੀਂ ਈਮੇਲ + submit: ਈਮੇਲ ਨੂੰ ਬਦਲੋ + title: "%{username} ਲਈ ਈਮੇਲ ਨੂੰ ਬਦਲੋ" + confirm: ਤਸਦੀਕ + confirmed: ਤਸਦੀਕ ਕੀਤਾ + confirming: ਤਸਦੀਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ + custom: ਕਸਟਮ + delete: ਡਾਟੇ ਨੂੰ ਹਟਾਓ + deleted: ਹਟਾਇਆ + display_name: ਦਿਖਾਇਆ ਜਾਣ ਵਾਲਾ ਨਾਂ + domain: ਡੋਮੇਨ + moderation: + all: ਸਭ + suspended: ਸਸਪੈਂਡ ਕੀਤਾ + title: ਖਾਤੇ + username: ਵਰਤੋਂਕਾਰ-ਨਾਂ + ip_blocks: + delete: ਹਟਾਓ + expires_in: + '1209600': 2 ਹਫ਼ਤੇ + '15778476': 6 ਮਹੀਨੇ + '2629746': 1 ਮਹੀਨਾ + '31556952': 1 ਸਾਲ + '86400': 1 ਦਿਨ + '94670856': 3 ਸਾਲ + relays: + enable: ਸਮਰੱਥ + enabled: ਸਮਰੱਥ ਹੈ + save_and_enable: ਸੰਭਾਲੋ ਅਤੇ ਸਮਰੱਥ ਕਰੋ + reports: + are_you_sure: ਪੱਕਾ? + cancel: ਰੱਦ ਕਰੋ + comment: + none: ਕੋਈ ਨਹੀਂ + notes: + delete: ਹਟਾਓ + settings: + about: + title: ਇਸ ਬਾਰੇ + statuses: + deleted: ਹਟਾਏ + favourites: ਮਨਪਸੰਦ + history: ਵਰਜ਼ਨ ਅਤੀਤ + in_reply_to: ਇਸ ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ + language: ਭਾਸ਼ਾ + media: + title: ਮੀਡੀਆ + metadata: ਮੇਟਾਡਾਟਾ + webhooks: + delete: ਹਟਾਓ + disable: ਅਸਮਰੱਥ + disabled: ਅਸਮਰੱਥ ਹੈ + enable: ਸਮਰੱਥ + application_mailer: + salutation: "%{name}," + applications: + logout: ਲਾਗ ਆਉਟ + your_token: ਤੁਹਾਡਾ ਪਹੁੰਚ ਟੋਕਨ + auth: + apply_for_account: ਖਾਤੇ ਲਈ ਬੇਨਤੀ + confirmations: + login_link: ਲਾਗ ਇਨ + welcome_title: "%{name}, ਜੀ ਆਇਆਂ ਨੂੰ!" + delete_account: ਖਾਤੇ ਨੂੰ ਹਟਾਓ + forgot_password: ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ? + log_in_with: ਇਸ ਨਾਲ ਲਾਗਇਨ ਕਰੋ + login: ਲਾਗ ਇਨ + logout: ਲਾਗ ਆਉਟ + rules: + accept: ਮਨਜ਼ੂਰ + back: ਪਿੱਛੇ + challenge: + confirm: ਜਾਰੀ ਰੱਖੋ + date: + formats: + default: "%d %b %Y" + with_month_name: "%d %B %Y" + datetime: + distance_in_words: + about_x_hours: "%{count}ਘੰ" + about_x_months: "%{count}ਮਹੀ" + about_x_years: "%{count}ਸਾ" + almost_x_years: "%{count}ਸ" + half_a_minute: ਹੁਣੇ ਹੀ + less_than_x_minutes: "%{count}ਮਿੰ" + less_than_x_seconds: ਹੁਣੇ ਹੀ + over_x_years: "%{count}ਸਾ" + x_days: "%{count}ਦਿ" + x_minutes: "%{count}ਮਿੰ" + deletes: + proceed: ਖਾਤੇ ਨੂੰ ਹਟਾਓ + disputes: + strikes: + title: "%{date} ਨੂੰ %{action}" + exports: + archive_takeout: + date: ਤਾਰੀਖ + filters: + contexts: + account: ਪਰੋਫਾਈਲ + home: ਹੋਮ ਅਤੇ ਸੂਚੀਆਂ + notifications: ਨੋਟੀਫਿਕੇਸ਼ਨ + thread: ਗੱਲਾਂਬਾਤਾਂ + index: + delete: ਹਟਾਓ + generic: + all: ਸਭ + copy: ਕਾਪੀ ਕਰੋ + delete: ਹਟਾਓ + today: ਅੱਜ + invites: + expires_in: + '43200': 12 ਘੰਟੇ + '604800': 1 ਹਫਤਾ + '86400': 1 ਦਿਨ + expires_in_prompt: ਕਦੇ ਨਹੀਂ + login_activities: + authentication_methods: + password: ਪਾਸਵਰਡ + notification_mailer: + follow: + subject: "%{name} ਹੁਣ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਦੇ ਹਨ" + title: ਨਵੇਂ ਫ਼ਾਲੋਅਰ + follow_request: + body: "%{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ" + mention: + action: ਜਵਾਬ ਦਿਓ + number: + human: + decimal_units: + format: "%n%u" + units: + billion: ਬਿ + million: ਮਿ + otp_authentication: + enable: ਸਮਰੱਥ + setup: ਸੈਟ ਅੱਪ diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/simple_form.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml new file mode 100644 index 0000000000..ada775b862 --- /dev/null +++ b/config/locales/simple_form.ie.yml @@ -0,0 +1,47 @@ +--- +ie: + simple_form: + hints: + account: + unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores. + announcement: + all_day: Si ti-ci es marcat, solmen li dates del periode de témpor va esser monstrat + ends_at: Ínobligatori. Li proclamation va esser despublicat automaticmen ye ti-ci témpor + scheduled_at: Lassar vacui por publicar li proclamation strax + starts_at: Ínobligatori. In li casu que tui proclamation es ligat a un specific periode de témpor + text: Tu posse usar posta-sintaxe. Ples considerar li spacie quel li proclamation va plenar sur li ecran del usator + defaults: + current_password: Por securital rasones, ples introducter li passa-parol del actual conto + password: Usa adminim 8 carácteres + form_admin_settings: + bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores. + theme: Li dessine quel ínregistrat visitantes e nov usatores vide. + timeline_preview: Ínregistrat visitantes va posser vider li max recent public postas disponibil che li servitor. + trends_as_landing_page: Monstrar populari contenete a ínregistrat visitantes vice un description del servitor. Besona que tendenties es activisat. + form_challenge: + current_password: Tu nu intra un area secur + labels: + account: + fields: + value: Contenete + account_warning_preset: + title: Titul + admin_account_action: + type: Action + announcement: + all_day: Eveniment del tot die + ends_at: Fine del eveniment + scheduled_at: Planar publication + starts_at: Comense del eveniment + text: Proclamation + defaults: + confirm_new_password: Confirmar nov passa-parol + confirm_password: Confirmar passa-parol + current_password: Actual passa-parol + honeypot: "%{label} (ne plenar)" + locale: Lingue del interfacie + new_password: Nov passa-parol + note: Biografie + password: Passa-parol + notification_emails: + follow_request: Alqui petit sequer te diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index b21b86723c..eef2014d19 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -2,6 +2,14 @@ io: simple_form: hints: + account: + discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. + display_name: Vua tota nomo o vua gaya nomo. + fields: Vua retsituo, pronomi, evo, irgo quan vu volas. + indexable: Vua posta publika povos aparar en rezultaji di serchi che Mastodon. Personi qui interagis kun vua posti povos serchar oli irgakaze. + note: 'Vu povas @mencionar altra personi o #hashtagi.' + show_collections: Personi povos navigar tra vua sequati e sequanti. Personi quin vu sequas, vidos ke vu sequas li irgakaze. + unlocked: Personi povos sequar vu sen demandar aprobo. Deselektez se vu volas revuar sequadodemandi e selektez aceptar o refuzar nova sequati. account_alias: acct: Partikulare pozez uzantonomo@domeno di konto quon vua volas ektransferesar account_migration: @@ -18,6 +26,8 @@ io: disable: Preventez uzanto de uzar olia konto ma ne efacez o celez olia kontenaji. none: Uzez co por sendar averto a la uzanto sen eventigar irga altra ago. sensitive: Koaktez omna mediiatachaji da ca uzanto markizesar quale sentoza. + silence: Preventez la uzanto de povar postar per publika videbleso, celez lua posti e avizi de personi qui ne sequas lu. Co klozas omna raporto kontra ca konto. + suspend: Preventez irga interago de o a ca konto e efacez lua kontenaji. Inversebla til 30 dii. Co klozas omna raporti kontra ca konto. warning_preset_id: Neobligata. Vu povas ankore insertar kustume texto a extremajo di fixito announcement: all_day: Kande kontrolesas, nur tempoporteodato montresos @@ -43,7 +53,7 @@ io: password: Uzes minime 8 litri phrase: Parigesos ne ye textosituaciono o konteneyoaverto di posto scopes: Quala API quon softwaro permisesas acesar. Se vu selektas alta skopo, vu ne mustas selektar individui. - setting_aggregate_reblogs: Ne montrez nova busti di posti quo recente bustesas (nova busti) + setting_aggregate_reblogs: Ne montrez nova repeti di posti qui ja repetesis recente (nur efektigas repeti recevata nove) setting_always_send_emails: Normale retpostoavizi ne sendesas kande vu aktiva uzas Mastodon setting_default_sensitive: Sentoza medii originala celesas e povas revelesar per klikto setting_display_media_default: Celez medii quo markizesis quale sentoza @@ -51,25 +61,30 @@ io: setting_display_media_show_all: Sempre montrez medii setting_use_blurhash: Inklini esas segun kolori di celesis vidaji ma kovras irga detali setting_use_pending_items: Celez tempolineonovi dop kliktar e ne automatike movigar niuzeto + username: Vu darfas uzar literi, nombri, e sublinei whole_word: Kande klefvorto o fraz esas nur litera e nombra, ol nur aplikesos se ol parigesas la tota vorto domain_allow: domain: Ca domeno povas ganar informi de ca servilo e venanta informo de ol procedagesos e sparesos email_domain_block: domain: Co povas esas domennomo quo montresas che retposto o registrajo MX quon ol uzas. Oli kontrolesos kande registro. with_dns_records: Probo di rezolvar registri DNS di la domeno agesos e rezulti anke preventesos + featured_tag: + name: 'Yen kelka hashtagi quin vu uzis maxim recente:' filters: action: Selektez ago kande posto parigas filtrilo actions: hide: Komplete celez filtrita kontenajo quale ol ne existas warn: Celez filtrita kontenajo dop avert quo montras titulo di filtrilo form_admin_settings: + activity_api_enabled: Quanto de lokale publikigita posti, aktiva uzanti e nova registri, donita semanope backups_retention_period: Retenez igita uzantoarkivi por la diiquanto. bootstrap_timeline_accounts: Ca konti pinglagesos a super sequorekomendi di nova uzanti. closed_registrations_message: Montresas kande registradi klozesas - content_cache_retention_period: Posti de altra servili efacesos pos la diiquanto kande fixesas a positiva nombro. Co darfas desagesar. + content_cache_retention_period: Omna posti e repeti de altra servili efacesos pos la specigita nombro de dii. Kelka posti forsan ne esos restaurebla. Omna relata libromarki, favoriziti e repeti anke esos perdita e neposible restaurota. custom_css: Vu povas pozar kustumizita staili en retverso di Mastodon. mascot: Remplas montreso en avanca retintervizajo. media_cache_retention_period: Deschargita mediifaili efacesos pos la diiquanto kande fixesas a positiva nombro, e rideschargesas irgatempe. + peers_api_enabled: Listo di domeni quin ca servilo trovis en la fediverso. Nula informo inkluzesas hike pri ka vu federas kun partikulara servilo, nur ke vua servilo savas pri lo. Co es uzata da enti qui kolektas statistiki pri federeso generale. profile_directory: La profilcheflisto montras omna uzanti quo voluntale volas esar deskovrebla. require_invite_text: Kande registradi bezonas manuala aprobo, ol kauzigas "Por quo vu volas juntas?" textoenpozo esar obliganta site_contact_email: Quale personi povas kontaktar vu por legala o suportquestioni. @@ -78,11 +93,13 @@ io: site_short_description: Kurta deskripto por helpar unala identifikar ca servilo. Qua funcionigar lu e por qua? site_terms: Uzez vua sua privatesguidilo o ignorez por uzar la originalo. Povas strukturigesar per sintaxo di Markdown. site_title: Quale personi vokas ca servilo se ne uzas domennomo. + status_page_url: URL di pagino ube personi povas vidar la stando di ca servilo kande la servilo ne funcionas theme: Temo quo videsas da ekirita vizitanti e nova uzanti. thumbnail: Cirkum 2:1 imajo montresar kun informo di ca servilo. timeline_preview: Ekirita vizitanti videsos maxim recenta publika posti quo esas displonebla en la servilo. trendable_by_default: Ignorez manuala kontrolar di tendencoza kontenajo. Singla kozi povas ankore efacesar de tendenci pose. trends: Tendenci montras quala posti, hashtagi e niuzrakonti famozeskas en ca servilo. + trends_as_landing_page: Montrez populara posti a uzanti neeniriti e vizitanti vice deskriptajo pri ca servilo. Bezonas ke populari es aktivita. form_challenge: current_password: Vu eniras sekura areo imports: @@ -103,6 +120,9 @@ io: sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. webauthn: Se ol esas klefo di USB, certigar ke vu insertas e se bezonesas, tushetez. + settings: + indexable: Vua profilpagino povas aparar en serchorezultaji che Google, Bing, e altri. + show_application: Vu sempre povos vidar qua apliko publikigis vua posto irgakaze. tag: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: @@ -119,9 +139,13 @@ io: url: Ibe eventi sendesos labels: account: + discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo value: Kontenajo + indexable: Inkluzar publika posti en serchorezultaji + show_collections: Montrar sequati e sequanti en la profilo + unlocked: Automate aceptar nova sequanti account_alias: acct: Nomo di olda konto account_migration: @@ -175,10 +199,10 @@ io: password: Pasvorto phrase: Klefvorto o frazo setting_advanced_layout: Aktivigez avancata retintervizajo - setting_aggregate_reblogs: Grupbusti en tempolinei + setting_aggregate_reblogs: Grupigar repeti en tempolinei setting_always_send_emails: Sempre sendez retpostoavizi setting_auto_play_gif: Automate pleez animigita GIFi - setting_boost_modal: Montrez konfirmdialogo ante bustar + setting_boost_modal: Montrez konfirmdialogo ante repetar setting_default_language: Postolinguo setting_default_privacy: Videbleso di la mesaji setting_default_sensitive: Sempre markizez medii quale sentoza @@ -213,6 +237,7 @@ io: hide: Tote celez warn: Celez kun averto form_admin_settings: + activity_api_enabled: Publikigez rezumstatistiko pri uzantoaktiveso en API backups_retention_period: Uzantoarkivretendurtempo bootstrap_timeline_accounts: Sempre rekomendez ca konti a nova uzanti closed_registrations_message: Kustumizita mesajo kande registradi ne esas disponebla @@ -220,6 +245,7 @@ io: custom_css: Kustumizita CSS mascot: Kustumizita reprezentimajo (oldo) media_cache_retention_period: Mediimemorajretendurtempo + peers_api_enabled: Publikigez listo di deskovrita servili en API profile_directory: Aktivigez profilcheflisto registrations_mode: Qua povas registragar require_invite_text: Mustez pozar motivo por juntar @@ -231,11 +257,13 @@ io: site_short_description: Servildeskripto site_terms: Privatesguidilo site_title: Servilnomo + status_page_url: URL dil stando-pagino theme: Originala temo thumbnail: Servilimajeto timeline_preview: Permisez neyurizita aceso a publika tempolineo trendable_by_default: Permisez tendenci sen bezonar kontrolo trends: Aktivigez tendenci + trends_as_landing_page: Uzar populari quale la iniciala pagino interactions: must_be_follower: Celar la savigi da homi, qui ne sequas tu must_be_following: Celar la savigi da homi, quin tu ne sequas @@ -260,11 +288,20 @@ io: follow_request: Sendar retpost-mesajo, kande ulu diskonocigas mesajo da tu mention: Sendar retpost-mesajo, kande ulu mencionas tu pending_account: Nova konto bezonas kontrolo - reblog: Sendar retpost-mesajo, kande ulu diskonocigas mesajo da tu + reblog: Ulu repetis vua posto report: Nova raport sendesas + software_updates: + all: Notifikar pri omna aktualigi + critical: Notifikar pri nur urjanta aktualigi + label: Nova Mastodon-versiono es disponebla + none: Nultempe notifikar pri aktualigi (ne rekomendata) + patch: Notifikar pri problemosolvanta aktualigi trending_tag: Nova tendenco bezonas kontrolo rule: text: Regulo + settings: + indexable: Inkluzar profilopagino en serchili + show_application: Montrar la apliko de qua vu sendis posto tag: listable: Permisez ca hashtago aparar en trovaji e sugestaji name: Hashtago @@ -272,6 +309,7 @@ io: usable: Permisez posti uzar ca hashtago user: role: Rolo + time_zone: Klokozono user_role: color: Insignokoloro highlighted: Montrez rolo quale insigno en uzantoprofili diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml new file mode 100644 index 0000000000..4247487607 --- /dev/null +++ b/config/locales/simple_form.lad.yml @@ -0,0 +1,230 @@ +--- +lad: + simple_form: + hints: + account: + display_name: Tu nombre para amostrar. + account_alias: + acct: Espesifika tu nombre de utilizador@domeno del kuento de ande keres migrar + account_migration: + acct: Espesifika el nombre de utilizador@domeno del kuento de kualo keres migrar + account_warning_preset: + text: Puedes kulanear sintaksa de publikasyones, komo adresos URL, etiketas i enmentaduras + title: Opsyonal. No es vizivle para el destinatario + admin_account_action: + include_statuses: El utilizador vera kualas publikasyones tienen kauzado la aksyon de moderasyon o avertensya + send_email_notification: El utilizador risivira una esplikasyon de lo kualo afito kon su kuento + text_html: Puedes kulanear sintaksa de publikasyones. Puede adjustar konfigurasyones predefinidas de avertensya para no pedrer tiempo + type_html: Eskoje lo ke vas fazer kon %{acct} + types: + disable: Evita ke el utilizador utilize su kuento, pero no supreme ni eskonde sus kontenidos. + none: Utiliza esto para embiar una avertensya al utilizador, sin ampesar ninguna otra aksyon. + sensitive: Forza ke todas las dosyas multimedia de este utilizador sean markados komo sensivles. + silence: Evita ke el utilizador pueda publikar kon vizivilita publika, i eskonde sus mesajes i avizos a personas ke no lo sigen. Serra todos los raportos kontra este kuento. + suspend: Evita kualseker interaksyon dizde o verso este kuento i supreme su kontenido. Reversivle en 30 diyas. Sierra todos los raportos kontra este kuento. + warning_preset_id: Opsyonal. Ainda puedes adjustar teksto personalizado al final de la konfigurasyon predefinida + announcement: + all_day: Kuando esta eskojido solo se amostraran las datas del rango de tiempo + ends_at: Opsyonal. El pregon dezaparesera otomatikamente en este momento + scheduled_at: Deshar en blanko para publikar el pregon pishin + starts_at: Opsyonal. En caso de ke tu pregon este atado a un intervalo de tiempo espesifiko + text: Puedes kulanear la sintaksa de publikasyones. Por favor nota el espasyo ke okupara el pregon en el ekran del utilizador + appeal: + text: Solo puedes apelar un amonestamiento una vez + defaults: + autofollow: Los utilizadores ke se enrejistren por la envitasyon te segiran otomatikamente + avatar: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px + bot: Indika ke este kuento egzekuta prinsipalmente aksyones otomatizadas i podria no ser monitorizada + context: Uno o multiples kontekstos en los ke deve aplikarse el filtro + current_password: Por razones de sigurita por favor ingresa el kod del kuento aktual + current_username: Para konfirmar, por favor ingresa el nombre de utilizador del kuento aktual + digest: Solo embiado dempues de un eluengo periodo de inaktivita i solo si tienes recibido mesajes personales durante tu ausensya + email: Se te embiara konfirmasyon por posta elektronika + header: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px + inbox_url: Kopia el URL de la pajina prinsipala del relevo ke keres utilizar + irreversible: Las publikasyones filtradas dezapareseran irreversivlemente, inkluzo si este filtro es supremido mas adelante + locale: La lingua de la enterfaz de utilizador, posta i avizos arrepushados + password: Utiliza al manko 8 karakteres + phrase: Se aplikara sin importar las mayuskulas o los avizos de kontenido de una publikasyon + scopes: A los kualos APIs la aplikasyon tendra akseso. Si eskojes el alkanse de nivel mas alto, no kale eskojer las individualas. + setting_aggregate_reblogs: No amostra muevas repartajasyones para las publikasyones ke an sido resientemente repartajadas (solo afekta a las repartajasyones risividas resientemente) + setting_always_send_emails: Normalmente los avizos por posta elektronika no se embiaran kuando estes uzando Mastodon aktivamente + setting_default_sensitive: Tu muevo kontenido multimedia esta eskondido i puede ser amostrado kon un klik + setting_display_media_default: Eskonde kontenido multimedia markado komo sensivle + setting_display_media_hide_all: Siempre eskonde todo el kontenido multimedia + setting_display_media_show_all: Amostra siempre el kontenido de multimedia + setting_use_blurhash: Los gradientes se bazan en los kolores de las imajes eskondidas pero faziendo velados los peratim + setting_use_pending_items: Eskonde muevas publikasyones detras de un klik en lugar de desplazar otomatikamente la linya + whole_word: Kuando el biervo yave o fraza es solo alfanumerika, solo sera aplikado si konkorda kon todo el biervo + domain_allow: + domain: Este domeno podra obtener datos de este sirvidor i los datos entrantes seran prosesados i archivados + email_domain_block: + domain: Este puede ser el nombre de domeno ke aparese en el adreso de posta elektronika o el rejistro MX ke utiliza. Se komprovaran al registrarse. + with_dns_records: Se ara un intento de rezolver los rejistros DNS del domeno dado i los rizultados seran tamyen puestos en lista preta + featured_tag: + name: 'Aki estan algunas de las etiketas ke mas tienes utilizado resientemente:' + filters: + action: Eskoje kuala aksyon realizar kuando una publikasyon koensida kon el filtro + actions: + hide: Eskonde kompletamente el kontenido filtrado komo si no existiera + warn: Eskonde el kontenido filtrado detras de una avertensya enmentando el titolo del filtro + form_admin_settings: + activity_api_enabled: Numero de publikasyones publikadas lokalmente, utilizadores activos i enrejistrasyones muevas kada semana + backups_retention_period: Manten las dosyas de utilizador djeneradas durante el numero de diyas espesifikado. + bootstrap_timeline_accounts: Estos kuentos apareseran en la parte superior de las rekomendasiones de los muevos utilizadores. + closed_registrations_message: Amostrado kuando las enrejistrasyones estan serrados + content_cache_retention_period: Las publikasyones de otros sirvidores se supremiran dempues del numero espesifikado de diyas kuando se establezka una valuta pozitiva. Esto puede ser irreversivle. + custom_css: Puedes aplikar estilos personalizados a la version web de Mastodon. + mascot: Reemplaza la ilustrasyon en la enterfaz web avanzada. + media_cache_retention_period: Las dosyas de multimedia abashadas se supremiran dempues del numero espesifikado de diyas kuando se establezka una valuta pozitiva, i se reabasharan basho demanda. + peers_api_enabled: Una lista de nombres de domeno ke este sirvidor tiene topado en el Fediverso. Aki no se inkluye dingun dato sovre si federas kon un sirvidor determinado, solo ke tu sirvidor lo konese. Esto es utilizado por los servisyos ke rekopilan estatistikas sovre la federasyon en un senso djeneral. + profile_directory: El katalogo de profiles lista a todos los utilizadores ke tienen optado por ke sus kuento pueda ser deskuvierto. + require_invite_text: Kuando las enrejistrasyones rekieren achetasyon manuala, faze obligatoria la entrada de teksto "Por ke keres unirte?" en lugar de ser opsyonal + site_contact_email: Komo la djente puede ponerse en kontakto kontigo para konsultas legales o de ayuda. + site_contact_username: Komo puede kontaktarte la djente en Mastodon. + site_extended_description: Kualseker enformasyon adisyonala ke pueda ser util para los vizitantes i tus utilizadores. Se puede estrukturar kon formato Markdown. + site_short_description: Una breve deskripsyon para ayudar a identifikar tu sirvidor de forma unika. Ken lo administra? + site_terms: Utiliza tu propia politika de privasita o deshala en blanko para kulanear la predeterminada Puede estrukturarse kon formato Markdown. + site_title: Komo puede referirse la djente a tu sirvidor ademas de por el nombre de domeno. + status_page_url: Adreso URL de la pajina ande la djente puede ver el estado de este sirvidor durante una insidensya + theme: El tema ke los vizitantes no enrejistrados i los muevos utilizadores ven. + thumbnail: Una imaje de aproksimadamente 2:1 se amostra djunto a la enformasyon de tu sirvidor. + timeline_preview: Los vizitantes no konektados podran navigar por los mesajes publikos mas resientes desponivles en el sirvidor. + trendable_by_default: Omite la revizyon manuala del kontenido en trend. Los elementos individuales ainda podran supremirse de los trendes. + trends: Los trendes amostran ke mesajes, etiketas i haberes estan ganando traksyon en tu sirvidor. + trends_as_landing_page: Amostra kontenido en trend para utilizadores i vizitantes en lugar de una deskripsyon de este sirvidor. Rekiere ke los trendes esten kapasitados. + form_challenge: + current_password: Estas entrando en un area siguro + imports: + data: Archivo CSV eksportado dizde otra instansya de Mastodon + invite_request: + text: Esto nos ayudara a revizar tu aplikasyon + ip_block: + comment: Opsyonal. Akodrate por ke tienes adjustado esta regla. + expires_in: Los adresos IP son un rekurso finito, a vezes se partajan i trokan. Por esta razon, no se rekomiendan blokos de IP indefinidos. + ip: Introduze un adreso IPv4 o IPv6. Puede blokar rangos kompletos uzando la sintaksa CIDR. Ten kuidado de no kedarte afuera! + severities: + no_access: Bloka akseso a todos los rekursos + sign_up_block: Las muevas enrejistrasyones se inkapasitaran + sign_up_requires_approval: Muevas enrejistrasyones rekeriran tu achetasyon + severity: Eskoje lo ke pasara kon las petisyones dizde este IP + rule: + text: Deskrive una norma o rekerensya para los utilizadores de este sirvidor. Aprova fazerla kurta i kolay + sessions: + otp: 'Introduse el kodiche de autentifikasyon de dos pasos djenerado por tu aplikasyon de telefon o uza uno de tus kodiches de recuperasyon:' + webauthn: Si es una yave USB, asigurete de insertarla y, si es necesario, pulsala. + tag: + name: Solo se puede trokar la kapitalizasyon de las letras, por enshemplo, para ke sea mas meldable + user: + chosen_languages: Kuando se marka, solo se amostraran las publikasyones en las linguas eskojidas en las linyas de tiempo publikas + role: El rolo kontrola kualos permisos tiene el utilizador + user_role: + color: Color ke se utilizara para el rolo a lo largo de la enterfaz de utilizador, komo RGB en formato heksadesimal + highlighted: Esto faze ke el rolo sea publikamente visible + name: Nombre publiko del rolo, si el rolo se establese para ke se amostre komo una insinya + permissions_as_keys: Los utilizadores kon este rolo tendran akseso a... + position: Un rolo mas alto deside la rezolusyon de konfliktos en algunas situasyones. Algunas aksyones solo pueden levarse por rolos kon menor priorita + webhook: + events: Eskoje evenimientos para embiar + url: Ande los evenimientos seran embiados + labels: + account: + fields: + name: Etiketa + value: Kontenido + account_alias: + acct: Alias del kuento viejo + account_migration: + acct: Alias del muevo kuento + account_warning_preset: + text: Teksto predefinido + title: Titolo + admin_account_action: + include_statuses: Inkluye en la posta elektronika las publikasyones raportadas + send_email_notification: Aviza al utilizador por posta elektronika + text: Avizo personalizado + type: Aksyon + types: + disable: Inkapasitar + none: Embia uma avertensya + sensitive: Sensivle + silence: Limita + suspend: Suspende + warning_preset_id: Kulanea un avizo predeterminado + announcement: + all_day: Evenimiento de todo el diya + ends_at: Fin del evenimiento + scheduled_at: Programar publikasyon + starts_at: Ampesijo del evenimiento + text: Pregon + appeal: + text: Esplika porke esta dechizyon deve ser revertida + defaults: + autofollow: Envita a segir tu kuento + avatar: Imaje de profil + bot: Este es un kuento otomatizado + chosen_languages: Filtra linguas + confirm_new_password: Konfirma muevo kod + confirm_password: Konfirma kod + context: Filtra kontekstos + current_password: Kod aktual + setting_use_blurhash: Amostra gradientes koloridos para kontenido multimedia eskondido + setting_use_pending_items: Modo lento + severity: Severita + sign_in_token_attempt: Kodiche de sigurita + title: Titolo + type: Tipo de importasyon + username: Nombre de uzador + username_or_email: Utilizador o posta + whole_word: Todo el biervo + email_domain_block: + with_dns_records: Inkluye los rejistros MX i los adresos IP del domeno + featured_tag: + name: Etiketa + filters: + actions: + hide: Eskonde kompletamente + warn: Eskonde kon una avertensya + form_admin_settings: + activity_api_enabled: Publika estatistikas adjustadas sovre la aktivita del utilizador kon la API + backups_retention_period: Periodo de retensyon de la dosya de utilizador + bootstrap_timeline_accounts: Rekomenda siempre estos kuentos a muevos utilizadores + closed_registrations_message: Mesaj personalizado kuando las enrejistrasyones no estan desponivles + content_cache_retention_period: Periodo de retensyon de kashe de kontenido + custom_css: CSS personalizado + mascot: Maskota personalizada (legado) + media_cache_retention_period: Periodo de retensyon de kashe multimedia + peers_api_enabled: Publika lista de sirvidores diskuviertos en la API + profile_directory: Kapasita katalogo de profiles + registrations_mode: Ken puede enrejistrarse + require_invite_text: Rekere una razon para unirse + show_domain_blocks: Amostra domenos blokados + show_domain_blocks_rationale: Amostra deke se blokaron los domenos + site_contact_email: Posta elektronika de kontakto + site_contact_username: Nombre de utilizador de kontakto + site_extended_description: Deskripsyon ekstendida + site_short_description: Deskripsyon del sirvidor + site_terms: Politika de privasita + site_title: Nombre del sirvidor + status_page_url: URL de pajina de estado + theme: Tema predeterminado + thumbnail: Minyatura del sirvidor + timeline_preview: Permite el akseso no autentifikado a las linyas de tiempo publikas + trendable_by_default: Permite trendes sin revizyon previa + trends: Kapasita trendes + trends_as_landing_page: Kulanea trendes komo la pajina prinsipala + interactions: + must_be_follower: Bloka avizos de personas ke no te sigen + must_be_following: Bloka avizos de personas a las kualas no siges + must_be_following_dm: Bloka mesajes direktos de personas a las kualas no siges + invite: + comment: Komento + invite_request: + text: Deke keres adjuntarte? + ip_block: + comment: Komento + ip: IP + severities: + no_access: Bloka akseso + sign_up_block: Bloka enrejistrasyones + sign_up_requires_approval: Limita enrejistrasyones diff --git a/config/locales/sk.yml b/config/locales/sk.yml index caf253c69c..ab2bc51553 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -119,6 +119,7 @@ sk: reject: Zamietni rejected_msg: Úspešne zamietnutá prihláška %{username} remote_suspension_irreversible: Údaje tohto účtu boli nenávratne zmazané. + remote_suspension_reversible_hint_html: Účet bol pozastavený na ich serveri a údaje budú úplne odstránené dňa %{date}. Dovtedy môže vzdialený server účet obnoviť bez akýchkoľvek nepriaznivých účinkov. Ak chceš odstrániť všetky údaje účtu ihneď, môžeš tak urobiť nižšie. remove_avatar: Vymaž avatar remove_header: Vymaž záhlavie removed_avatar_msg: Úspešne odstránený obrázok avatara %{username} diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index e17228da32..61650f8943 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1273,7 +1273,7 @@ zh-TW: other: 選取 %{count} 個符合您搜尋的項目。 today: 今天 validation_errors: - other: 恩...似乎發生了點錯誤?請檢查以下 %{count} 項錯誤 + other: 恩...似乎不太對勁耶?請檢查以下 %{count} 項錯誤 imports: errors: empty: 空的 CSV 檔案 @@ -1805,7 +1805,7 @@ zh-TW: title: "%{name} 誠摯歡迎您的加入!" users: follow_limit_reached: 您無法跟隨多於 %{limit} 個人 - go_to_sso_account_settings: 前往您的身分識別提供者(IdP)之帳號設定 + go_to_sso_account_settings: 前往您的身分提供商 (identity provider) 之帳號設定 invalid_otp_token: 兩階段認證碼不正確 otp_lost_help_html: 如果您無法存取這兩者,您可以透過 %{email} 與我們聯繫 seamless_external_login: 由於您是由外部系統登入,所以不能設定密碼與電子郵件。 diff --git a/config/routes.rb b/config/routes.rb index 6e5fce0c78..d4cd27a491 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -52,7 +52,7 @@ Rails.application.routes.draw do get 'health', to: 'health#show' - authenticate :user, lambda { |u| u.role&.can?(:view_devops) } do + authenticate :user, ->(user) { user.role&.can?(:view_devops) } do mount Sidekiq::Web, at: 'sidekiq', as: :sidekiq mount PgHero::Engine, at: 'pghero', as: :pghero end @@ -106,10 +106,10 @@ Rails.application.routes.draw do } # rubocop:disable Style/FormatStringToken - those do not go through the usual formatting functions and are not safe to correct - get '/users/:username', to: redirect_with_vary('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/following', to: redirect_with_vary('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/followers', to: redirect_with_vary('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/statuses/:id', to: redirect_with_vary('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username', to: redirect_with_vary('/@%{username}'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/following', to: redirect_with_vary('/@%{username}/following'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/followers', to: redirect_with_vary('/@%{username}/followers'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/statuses/:id', to: redirect_with_vary('/@%{username}/%{id}'), constraints: ->(req) { req.format.nil? || req.format.html? } # rubocop:enable Style/FormatStringToken get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" } diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index 27caac1011..86231e49e8 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -80,7 +80,7 @@ class MoveUserSettings < ActiveRecord::Migration[6.1] end end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) end end end diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb index 48bb6f97e0..2c432dc6a0 100644 --- a/db/migrate/20230215074424_move_glitch_user_settings.rb +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -53,7 +53,7 @@ class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] end end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) end end end diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index 43fd7fab33..2e5243468b 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -254,7 +254,7 @@ module Mastodon::CLI users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse ref_user = users.shift say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow - say "e-mail will be disabled for the following accounts: #{user.map { |user| user.account.acct }.join(', ')}", :yellow + say "e-mail will be disabled for the following accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow say 'Please reach out to them and set another address with `tootctl account modify` or delete them.', :yellow users.each_with_index do |user, index| diff --git a/lib/mastodon/cli/search.rb b/lib/mastodon/cli/search.rb index 25a595aadd..77c455f049 100644 --- a/lib/mastodon/cli/search.rb +++ b/lib/mastodon/cli/search.rb @@ -42,7 +42,13 @@ module Mastodon::CLI pool = Concurrent::FixedThreadPool.new(options[:concurrency], max_queue: options[:concurrency] * 10) importers = indices.index_with { |index| "Importer::#{index.name}Importer".constantize.new(batch_size: options[:batch_size], executor: pool) } - progress = ProgressBar.create(total: nil, format: '%t%c/%u |%b%i| %e (%r docs/s)', autofinish: false) + progress = ProgressBar.create( + { + total: nil, + format: '%t%c/%u |%b%i| %e (%r docs/s)', + autofinish: false, + }.merge(progress_output_options) + ) Chewy::Stash::Specification.reset! if options[:reset_chewy] @@ -116,5 +122,9 @@ module Mastodon::CLI say('Cannot run with this batch_size setting, must be at least 1', :red) exit(1) end + + def progress_output_options + Rails.env.test? ? { output: ProgressBar::Outputs::Null } : {} + end end end diff --git a/package.json b/package.json index 34e16b4809..39c7b9a342 100644 --- a/package.json +++ b/package.json @@ -204,7 +204,7 @@ "lint-staged": "^15.0.0", "prettier": "^3.0.0", "react-test-renderer": "^18.2.0", - "stylelint": "^15.10.1", + "stylelint": "^16.0.2", "stylelint-config-standard-scss": "^12.0.0", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3", diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index 7e6e0ffb0d..5fc9698a32 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -123,7 +123,7 @@ RSpec.describe ActivityPub::RepliesController do end it 'uses ids for remote toots' do - remote_replies = page_json[:items].select { |x| !x.is_a?(Hash) } + remote_replies = page_json[:items].reject { |x| x.is_a?(Hash) } expect(remote_replies.all? { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }).to be true end diff --git a/spec/controllers/emojis_controller_spec.rb b/spec/controllers/emojis_controller_spec.rb index 3fe19ee5ce..dd139de931 100644 --- a/spec/controllers/emojis_controller_spec.rb +++ b/spec/controllers/emojis_controller_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe EmojisController do render_views - let(:emoji) { Fabricate(:custom_emoji) } + let(:emoji) { Fabricate(:custom_emoji, shortcode: 'coolcat') } describe 'GET #show' do let(:response) { get :show, params: { id: emoji.id, format: :json } } diff --git a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb index 719ed2f886..41a3ba5eb5 100644 --- a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb @@ -194,60 +194,49 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do add_webauthn_credential(user) end - context 'when creation succeeds' do - it 'adds a new credential to user credentials and does not change webauthn_id', :aggregate_failures do - controller.session[:webauthn_challenge] = challenge - - expect do - post :create, params: { credential: new_webauthn_credential, nickname: nickname } - end.to change { user.webauthn_credentials.count }.by(1) - .and not_change(user, :webauthn_id) - - expect(response).to have_http_status(200) - end - end - - context 'when the nickname is already used' do - it 'fails' do - controller.session[:webauthn_challenge] = challenge - - post :create, params: { credential: new_webauthn_credential, nickname: 'USB Key' } - - expect(response).to have_http_status(422) - expect(flash[:error]).to be_present - end - end - - context 'when the credential already exists' do - before do - user2 = Fabricate(:user) - public_key_credential = WebAuthn::Credential.from_create(new_webauthn_credential) - Fabricate(:webauthn_credential, - user_id: user2.id, - external_id: public_key_credential.id, - public_key: public_key_credential.public_key) - end - - it 'fails' do - controller.session[:webauthn_challenge] = challenge + it 'adds a new credential to user credentials and does not change webauthn_id when creation succeeds', :aggregate_failures do + controller.session[:webauthn_challenge] = challenge + expect do post :create, params: { credential: new_webauthn_credential, nickname: nickname } + end.to change { user.webauthn_credentials.count }.by(1) + .and not_change(user, :webauthn_id) - expect(response).to have_http_status(422) - expect(flash[:error]).to be_present - end + expect(response).to have_http_status(200) + end + + it 'fails when the nickname is already used' do + controller.session[:webauthn_challenge] = challenge + + post :create, params: { credential: new_webauthn_credential, nickname: 'USB Key' } + + expect(response).to have_http_status(422) + expect(flash[:error]).to be_present + end + + it 'fails when the credential already exists' do + public_key_credential = WebAuthn::Credential.from_create(new_webauthn_credential) + Fabricate(:webauthn_credential, + user_id: Fabricate(:user).id, + external_id: public_key_credential.id, + public_key: public_key_credential.public_key) + + controller.session[:webauthn_challenge] = challenge + + post :create, params: { credential: new_webauthn_credential, nickname: nickname } + + expect(response).to have_http_status(422) + expect(flash[:error]).to be_present end end - context 'when user have not enabled webauthn' do - context 'when creation succeeds' do - it 'creates a webauthn credential' do - controller.session[:webauthn_challenge] = challenge + context 'when user have not enabled webauthn and creation succeeds' do + it 'creates a webauthn credential' do + controller.session[:webauthn_challenge] = challenge - expect do - post :create, params: { credential: new_webauthn_credential, nickname: nickname } - end.to change { user.webauthn_credentials.count }.by(1) - end + expect do + post :create, params: { credential: new_webauthn_credential, nickname: nickname } + end.to change { user.webauthn_credentials.count }.by(1) end end end @@ -292,15 +281,13 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do add_webauthn_credential(user) end - context 'when deletion succeeds' do - it 'redirects to 2FA methods list and shows flash success and deletes the credential', :aggregate_failures do - expect do - delete :destroy, params: { id: user.webauthn_credentials.take.id } - end.to change { user.webauthn_credentials.count }.by(-1) + it 'redirects to 2FA methods list and shows flash success and deletes the credential when deletion succeeds', :aggregate_failures do + expect do + delete :destroy, params: { id: user.webauthn_credentials.take.id } + end.to change { user.webauthn_credentials.count }.by(-1) - expect(response).to redirect_to settings_two_factor_authentication_methods_path - expect(flash[:success]).to be_present - end + expect(response).to redirect_to settings_two_factor_authentication_methods_path + expect(flash[:success]).to be_present end end diff --git a/spec/fabricators/announcement_mute_fabricator.rb b/spec/fabricators/announcement_mute_fabricator.rb new file mode 100644 index 0000000000..0adc1d60bb --- /dev/null +++ b/spec/fabricators/announcement_mute_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:announcement_mute) do + announcement { Fabricate.build(:announcement) } + account { Fabricate.build(:account) } +end diff --git a/spec/fabricators/announcement_reaction_fabricator.rb b/spec/fabricators/announcement_reaction_fabricator.rb new file mode 100644 index 0000000000..e845797291 --- /dev/null +++ b/spec/fabricators/announcement_reaction_fabricator.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Fabricator(:announcement_reaction) do + account { Fabricate.build(:account) } + announcement { Fabricate.build(:announcement) } + name { Fabricate(:custom_emoji).shortcode } +end diff --git a/spec/fabricators/custom_emoji_category_fabricator.rb b/spec/fabricators/custom_emoji_category_fabricator.rb new file mode 100644 index 0000000000..af41c97227 --- /dev/null +++ b/spec/fabricators/custom_emoji_category_fabricator.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Fabricator(:custom_emoji_category) do + name { sequence(:name) { |i| "name_#{i}" } } +end diff --git a/spec/fabricators/custom_emoji_fabricator.rb b/spec/fabricators/custom_emoji_fabricator.rb index fa570eec60..7ef875286f 100644 --- a/spec/fabricators/custom_emoji_fabricator.rb +++ b/spec/fabricators/custom_emoji_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator(:custom_emoji) do - shortcode 'coolcat' + shortcode { sequence(:shortcode) { |i| "code_#{i}" } } domain nil image { Rails.root.join('spec', 'fixtures', 'files', 'emojo.png').open } end diff --git a/spec/helpers/json_ld_helper_spec.rb b/spec/helpers/json_ld_helper_spec.rb index 5124bcf855..99857278a1 100644 --- a/spec/helpers/json_ld_helper_spec.rb +++ b/spec/helpers/json_ld_helper_spec.rb @@ -134,7 +134,7 @@ describe JsonLdHelper do expect(compact(json).dig('object', 'tag', 'href')).to eq 'foo' end - it 'compacts the activistreams Public collection' do + it 'compacts the activitystreams Public collection' do expect(compact(json)['to']).to eq 'as:Public' end diff --git a/spec/lib/mastodon/cli/accounts_spec.rb b/spec/lib/mastodon/cli/accounts_spec.rb index 563f6e877d..64df29ebb3 100644 --- a/spec/lib/mastodon/cli/accounts_spec.rb +++ b/spec/lib/mastodon/cli/accounts_spec.rb @@ -77,7 +77,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user with confirmed status' do - subject + expect { subject } + .to output_results('New password') user = User.find_by(email: options[:email]) @@ -95,7 +96,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user with approved status' do - subject + expect { subject } + .to output_results('New password') user = User.find_by(email: options[:email]) @@ -111,7 +113,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user and assigns the specified role' do - subject + expect { subject } + .to output_results('New password') role = User.find_by(email: options[:email])&.role @@ -148,7 +151,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'tootctl_new@example.com', reattach: true, force: true } } it 'reattaches the account to the new user and deletes the previous user' do - subject + expect { subject } + .to output_results('New password') user = Account.find_local('tootctl_username')&.user @@ -220,7 +224,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { role: default_role.name } } it "updates the user's role to the specified role" do - subject + expect { subject } + .to output_results('OK') role = user.reload.role @@ -235,7 +240,8 @@ describe Mastodon::CLI::Accounts do let(:user) { Fabricate(:user, role: role) } it "removes the user's role successfully" do - subject + expect { subject } + .to output_results('OK') role = user.reload.role @@ -248,13 +254,15 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'new_email@email.com' } } it "sets the user's unconfirmed email to the provided email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.unconfirmed_email).to eq(options[:email]) end it "does not update the user's original email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.email).to eq('old_email@email.com') end @@ -264,13 +272,15 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'new_email@email.com', confirm: true } } it "updates the user's email address to the provided email" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.email).to eq(options[:email]) end it "sets the user's email address as confirmed" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.confirmed?).to be(true) end @@ -282,7 +292,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { confirm: true } } it "confirms the user's email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.confirmed?).to be(true) end @@ -297,7 +308,9 @@ describe Mastodon::CLI::Accounts do end it 'approves the user' do - expect { subject }.to change { user.reload.approved }.from(false).to(true) + expect { subject } + .to output_results('OK') + .and change { user.reload.approved }.from(false).to(true) end end @@ -306,7 +319,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { disable: true } } it 'disables the user' do - expect { subject }.to change { user.reload.disabled }.from(false).to(true) + expect { subject } + .to output_results('OK') + .and change { user.reload.disabled }.from(false).to(true) end end @@ -315,7 +330,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { enable: true } } it 'enables the user' do - expect { subject }.to change { user.reload.disabled }.from(true).to(false) + expect { subject } + .to output_results('OK') + .and change { user.reload.disabled }.from(true).to(false) end end @@ -335,7 +352,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { disable_2fa: true } } it 'disables the two-factor authentication for the user' do - expect { subject }.to change { user.reload.otp_required_for_login }.from(true).to(false) + expect { subject } + .to output_results('OK') + .and change { user.reload.otp_required_for_login }.from(true).to(false) end end @@ -385,7 +404,8 @@ describe Mastodon::CLI::Accounts do let(:arguments) { [account.username] } it 'deletes the specified user successfully' do - subject + expect { subject } + .to output_results('Deleting') expect(delete_account_service).to have_received(:call).with(account, reserve_email: false).once end @@ -415,7 +435,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: account.user.email } } it 'deletes the specified user successfully' do - subject + expect { subject } + .to output_results('Deleting') expect(delete_account_service).to have_received(:call).with(account, reserve_email: false).once end @@ -457,7 +478,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { all: true } } it 'approves all pending registrations' do - subject + expect { subject } + .to output_results('OK') expect(User.pluck(:approved).all?(true)).to be(true) end @@ -468,7 +490,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { number: 2 } } it 'approves the earliest n pending registrations but not the remaining ones' do - subject + expect { subject } + .to output_results('OK') expect(n_earliest_pending_registrations.all?(&:approved?)).to be(true) expect(pending_registrations.all?(&:approved?)).to be(false) @@ -498,7 +521,7 @@ describe Mastodon::CLI::Accounts do it 'approves all users and does not raise any error' do expect { subject } - .to_not raise_error + .to output_results('OK') expect(User.pluck(:approved).all?(true)).to be(true) end end @@ -510,7 +533,8 @@ describe Mastodon::CLI::Accounts do let(:arguments) { [user.account.username] } it 'approves the specified user successfully' do - subject + expect { subject } + .to output_results('OK') expect(user.reload.approved?).to be(true) end @@ -655,7 +679,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_avatar!) allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(remote_account_example_com).to have_received(:reset_avatar!).once @@ -665,7 +690,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh avatar for local accounts' do allow(local_account).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_avatar!) @@ -675,7 +701,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_header!) allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(remote_account_example_com).to have_received(:reset_header!).once @@ -685,7 +712,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the header for local accounts' do allow(local_account).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_header!) @@ -706,7 +734,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_avatar!) allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_avatar!) @@ -719,7 +748,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_header!) allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_header!) @@ -752,7 +782,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_com_a).to have_received(:reset_avatar!).once expect(account_example_com_b).to have_received(:reset_avatar!).once @@ -761,7 +792,8 @@ describe Mastodon::CLI::Accounts do it 'does not reset the avatar for unspecified accounts' do allow(account_example_net).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_net).to_not have_received(:reset_avatar!) end @@ -770,7 +802,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_com_a).to have_received(:reset_header!).once expect(account_example_com_b).to have_received(:reset_header!).once @@ -779,7 +812,8 @@ describe Mastodon::CLI::Accounts do it 'does not reset the header for unspecified accounts' do allow(account_example_net).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_net).to_not have_received(:reset_header!) end @@ -812,7 +846,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_avatar!) expect(account_example_com_b).to_not have_received(:reset_avatar!) @@ -822,7 +857,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_header!) expect(account_example_com_b).to_not have_received(:reset_header!) @@ -848,7 +884,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_com_a).to have_received(:reset_avatar!).once @@ -858,7 +895,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the avatar for accounts outside specified domain' do allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_net).to_not have_received(:reset_avatar!) @@ -868,7 +906,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope) expect(account_example_com_a).to have_received(:reset_header!).once @@ -878,7 +917,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the header for accounts outside specified domain' do allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_net).to_not have_received(:reset_header!) @@ -913,7 +953,8 @@ describe Mastodon::CLI::Accounts do old_private_key = account.private_key old_public_key = account.public_key - subject + expect { subject } + .to output_results('OK') account.reload expect(account.private_key).to_not eq(old_private_key) @@ -923,7 +964,8 @@ describe Mastodon::CLI::Accounts do it 'broadcasts the new keys for the specified account' do allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) - subject + expect { subject } + .to output_results('OK') expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once end @@ -947,7 +989,8 @@ describe Mastodon::CLI::Accounts do old_private_keys = accounts.map(&:private_key) old_public_keys = accounts.map(&:public_key) - subject + expect { subject } + .to output_results('rotated') accounts.each(&:reload) expect(accounts.map(&:private_key)).to_not eq(old_private_keys) @@ -957,7 +1000,8 @@ describe Mastodon::CLI::Accounts do it 'broadcasts the new keys for each account' do allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) - subject + expect { subject } + .to output_results('rotated') accounts.each do |account| expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once @@ -1036,7 +1080,8 @@ describe Mastodon::CLI::Accounts do end it 'merges `from_account` into `to_account` and deletes `from_account`' do - subject + expect { subject } + .to output_results('OK') expect(to_account).to have_received(:merge_with!).with(from_account).once expect(from_account).to have_received(:destroy).once @@ -1059,7 +1104,8 @@ describe Mastodon::CLI::Accounts do end it 'merges "from_account" into "to_account" and deletes from_account' do - subject + expect { subject } + .to output_results('OK') expect(to_account).to have_received(:merge_with!).with(from_account).once expect(from_account).to have_received(:destroy) @@ -1339,7 +1385,8 @@ describe Mastodon::CLI::Accounts do shared_examples 'a successful migration' do it 'calls the MoveService for the last migration' do - subject + expect { subject } + .to output_results('OK') last_migration = source_account.migrations.last @@ -1449,7 +1496,8 @@ describe Mastodon::CLI::Accounts do end it 'creates a migration for the specified account with the target account' do - subject + expect { subject } + .to output_results('migrated') last_migration = source_account.migrations.last diff --git a/spec/lib/mastodon/cli/ip_blocks_spec.rb b/spec/lib/mastodon/cli/ip_blocks_spec.rb index 1d6c47268e..82be10813e 100644 --- a/spec/lib/mastodon/cli/ip_blocks_spec.rb +++ b/spec/lib/mastodon/cli/ip_blocks_spec.rb @@ -78,7 +78,8 @@ describe Mastodon::CLI::IpBlocks do it 'overwrites the existing IP block record' do expect { subject } - .to change { blocked_ip.reload.severity } + .to output_results('Added 11') + .and change { blocked_ip.reload.severity } .from('no_access') .to('sign_up_requires_approval') end @@ -189,7 +190,8 @@ describe Mastodon::CLI::IpBlocks do let(:options) { { force: true } } it 'removes blocks for IP ranges that cover given IP(s) and keeps other ranges' do - subject + expect { subject } + .to output_results('Removed 2') expect(covered_ranges).to_not exist expect(other_ranges).to exist diff --git a/spec/lib/mastodon/cli/settings_spec.rb b/spec/lib/mastodon/cli/settings_spec.rb index 568ee00393..e1b353eb90 100644 --- a/spec/lib/mastodon/cli/settings_spec.rb +++ b/spec/lib/mastodon/cli/settings_spec.rb @@ -41,7 +41,8 @@ describe Mastodon::CLI::Settings do it 'changes registrations_mode and require_invite_text' do expect { subject } - .to change(Setting, :registrations_mode).from(nil).to('approved') + .to output_results('OK') + .and change(Setting, :registrations_mode).from(nil).to('approved') .and change(Setting, :require_invite_text).from(false).to(true) end end diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb new file mode 100644 index 0000000000..e37b81a52e --- /dev/null +++ b/spec/models/announcement_spec.rb @@ -0,0 +1,210 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Announcement do + describe 'Scopes' do + context 'with published and unpublished records' do + let!(:published) { Fabricate(:announcement, published: true) } + let!(:unpublished) { Fabricate(:announcement, published: false, scheduled_at: 10.days.from_now) } + + describe '#unpublished' do + it 'returns records with published false' do + results = described_class.unpublished + + expect(results).to eq([unpublished]) + end + end + + describe '#published' do + it 'returns records with published true' do + results = described_class.published + + expect(results).to eq([published]) + end + end + end + + describe '#without_muted' do + let!(:announcement) { Fabricate(:announcement) } + let(:account) { Fabricate(:account) } + let(:muted_announcement) { Fabricate(:announcement) } + + before do + Fabricate(:announcement_mute, account: account, announcement: muted_announcement) + end + + it 'returns the announcements not muted by the account' do + results = described_class.without_muted(account) + expect(results).to include(announcement) + expect(results).to_not include(muted_announcement) + end + end + + context 'with timestamped announcements' do + let!(:adam_announcement) { Fabricate(:announcement, starts_at: 100.days.ago, scheduled_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) } + let!(:brenda_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 100.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) } + let!(:clara_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 10.days.ago, published_at: 100.days.ago, ends_at: 5.days.from_now) } + let!(:darnelle_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now, created_at: 100.days.ago) } + + describe '#chronological' do + it 'orders the records correctly' do + results = described_class.chronological + + expect(results).to eq( + [ + adam_announcement, + brenda_announcement, + clara_announcement, + darnelle_announcement, + ] + ) + end + end + + describe '#reverse_chronological' do + it 'orders the records correctly' do + results = described_class.reverse_chronological + + expect(results).to eq( + [ + darnelle_announcement, + clara_announcement, + brenda_announcement, + adam_announcement, + ] + ) + end + end + end + end + + describe 'Validations' do + describe 'text' do + it 'validates presence of attribute' do + record = Fabricate.build(:announcement, text: nil) + + expect(record).to_not be_valid + expect(record.errors[:text]).to be_present + end + end + + describe 'ends_at' do + it 'validates presence when starts_at is present' do + record = Fabricate.build(:announcement, starts_at: 1.day.ago) + + expect(record).to_not be_valid + expect(record.errors[:ends_at]).to be_present + end + + it 'does not validate presence when starts_at is missing' do + record = Fabricate.build(:announcement, starts_at: nil) + + expect(record).to be_valid + expect(record.errors[:ends_at]).to_not be_present + end + end + end + + describe '#publish!' do + it 'publishes an unpublished record' do + announcement = Fabricate(:announcement, published: false, scheduled_at: 10.days.from_now) + + announcement.publish! + + expect(announcement).to be_published + expect(announcement.published_at).to_not be_nil + expect(announcement.scheduled_at).to be_nil + end + end + + describe '#unpublish!' do + it 'unpublishes a published record' do + announcement = Fabricate(:announcement, published: true) + + announcement.unpublish! + + expect(announcement).to_not be_published + expect(announcement.scheduled_at).to be_nil + end + end + + describe '#time_range?' do + it 'returns false when starts_at and ends_at are missing' do + record = Fabricate.build(:announcement, starts_at: nil, ends_at: nil) + + expect(record.time_range?).to be(false) + end + + it 'returns false when starts_at is present and ends_at is missing' do + record = Fabricate.build(:announcement, starts_at: 5.days.from_now, ends_at: nil) + + expect(record.time_range?).to be(false) + end + + it 'returns false when starts_at is missing and ends_at is present' do + record = Fabricate.build(:announcement, starts_at: nil, ends_at: 5.days.from_now) + + expect(record.time_range?).to be(false) + end + + it 'returns true when starts_at and ends_at are present' do + record = Fabricate.build(:announcement, starts_at: 5.days.from_now, ends_at: 10.days.from_now) + + expect(record.time_range?).to be(true) + end + end + + describe '#reactions' do + context 'with announcement_reactions present' do + let!(:account) { Fabricate(:account) } + let!(:announcement) { Fabricate(:announcement) } + let!(:announcement_reaction) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 10.days.ago) } + let!(:announcement_reaction_account) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 5.days.ago, account: account) } + + before do + Fabricate(:announcement_reaction) + end + + it 'returns the announcement reactions for the announcement' do + results = announcement.reactions + + expect(results.first.name).to eq(announcement_reaction.name) + expect(results.last.name).to eq(announcement_reaction_account.name) + end + + it 'returns the announcement reactions for the announcement limited to account' do + results = announcement.reactions(account) + + expect(results.first.name).to eq(announcement_reaction.name) + end + end + end + + describe '#statuses' do + let(:announcement) { Fabricate(:announcement, status_ids: status_ids) } + + context 'with empty status_ids' do + let(:status_ids) { nil } + + it 'returns empty array' do + results = announcement.statuses + + expect(results).to eq([]) + end + end + + context 'with relevant status_ids' do + let(:status) { Fabricate(:status, visibility: :public) } + let(:direct_status) { Fabricate(:status, visibility: :direct) } + let(:status_ids) { [status.id, direct_status.id] } + + it 'returns public and unlisted statuses' do + results = announcement.statuses + + expect(results).to include(status) + expect(results).to_not include(direct_status) + end + end + end +end diff --git a/spec/models/concerns/remotable_spec.rb b/spec/models/concerns/remotable_spec.rb index 9f6aeb7fb4..097e6bf006 100644 --- a/spec/models/concerns/remotable_spec.rb +++ b/spec/models/concerns/remotable_spec.rb @@ -178,11 +178,11 @@ RSpec.describe Remotable do allow(foo).to receive(:public_send) foo.hoge_remote_url = url - expect(foo).to have_received(:public_send).with("download_#{hoge}!", url) + expect(foo).to have_received(:public_send).with(:"download_#{hoge}!", url) allow(foo).to receive(:public_send) foo.download_hoge!(url) - expect(foo).to have_received(:public_send).with("#{hoge}=", response_with_limit) + expect(foo).to have_received(:public_send).with(:"#{hoge}=", response_with_limit) end end end diff --git a/spec/models/custom_emoji_spec.rb b/spec/models/custom_emoji_spec.rb index 8a6487c321..06affd634a 100644 --- a/spec/models/custom_emoji_spec.rb +++ b/spec/models/custom_emoji_spec.rb @@ -59,7 +59,7 @@ RSpec.describe CustomEmoji do describe '.from_text' do subject { described_class.from_text(text, nil) } - let!(:emojo) { Fabricate(:custom_emoji) } + let!(:emojo) { Fabricate(:custom_emoji, shortcode: 'coolcat') } context 'with plain text' do let(:text) { 'Hello :coolcat:' } diff --git a/spec/models/form/custom_emoji_batch_spec.rb b/spec/models/form/custom_emoji_batch_spec.rb new file mode 100644 index 0000000000..abeada5d50 --- /dev/null +++ b/spec/models/form/custom_emoji_batch_spec.rb @@ -0,0 +1,118 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Form::CustomEmojiBatch do + describe '#save' do + subject { described_class.new({ current_account: account }.merge(options)) } + + let(:options) { {} } + let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + + context 'with empty custom_emoji_ids' do + let(:options) { { custom_emoji_ids: [] } } + + it 'does nothing if custom_emoji_ids is empty' do + expect(subject.save).to be_nil + end + end + + describe 'the update action' do + let(:custom_emoji) { Fabricate(:custom_emoji, category: Fabricate(:custom_emoji_category)) } + let(:custom_emoji_category) { Fabricate(:custom_emoji_category) } + + context 'without anything to change' do + let(:options) { { action: 'update' } } + + it 'silently exits without updating any custom emojis' do + expect { subject.save }.to_not change(Admin::ActionLog, :count) + end + end + + context 'with a category_id' do + let(:options) { { action: 'update', custom_emoji_ids: [custom_emoji.id], category_id: custom_emoji_category.id } } + + it 'updates the category of the emoji' do + subject.save + + expect(custom_emoji.reload.category).to eq(custom_emoji_category) + end + end + + context 'with a category_name' do + let(:options) { { action: 'update', custom_emoji_ids: [custom_emoji.id], category_name: custom_emoji_category.name } } + + it 'updates the category of the emoji' do + subject.save + + expect(custom_emoji.reload.category).to eq(custom_emoji_category) + end + end + end + + describe 'the list action' do + let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: false) } + let(:options) { { action: 'list', custom_emoji_ids: [custom_emoji.id] } } + + it 'updates the picker visibility of the emoji' do + subject.save + + expect(custom_emoji.reload.visible_in_picker).to be(true) + end + end + + describe 'the unlist action' do + let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: true) } + let(:options) { { action: 'unlist', custom_emoji_ids: [custom_emoji.id] } } + + it 'updates the picker visibility of the emoji' do + subject.save + + expect(custom_emoji.reload.visible_in_picker).to be(false) + end + end + + describe 'the enable action' do + let(:custom_emoji) { Fabricate(:custom_emoji, disabled: true) } + let(:options) { { action: 'enable', custom_emoji_ids: [custom_emoji.id] } } + + it 'updates the disabled value of the emoji' do + subject.save + + expect(custom_emoji.reload).to_not be_disabled + end + end + + describe 'the disable action' do + let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: false) } + let(:options) { { action: 'disable', custom_emoji_ids: [custom_emoji.id] } } + + it 'updates the disabled value of the emoji' do + subject.save + + expect(custom_emoji.reload).to be_disabled + end + end + + describe 'the copy action' do + let(:custom_emoji) { Fabricate(:custom_emoji) } + let(:options) { { action: 'copy', custom_emoji_ids: [custom_emoji.id] } } + + it 'makes a copy of the emoji' do + expect { subject.save } + .to change(CustomEmoji, :count).by(1) + end + end + + describe 'the delete action' do + let(:custom_emoji) { Fabricate(:custom_emoji) } + let(:options) { { action: 'delete', custom_emoji_ids: [custom_emoji.id] } } + + it 'destroys the emoji' do + subject.save + + expect { custom_emoji.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + end + end +end diff --git a/spec/presenters/account_relationships_presenter_spec.rb b/spec/presenters/account_relationships_presenter_spec.rb index 5b05ac8001..282cae4f06 100644 --- a/spec/presenters/account_relationships_presenter_spec.rb +++ b/spec/presenters/account_relationships_presenter_spec.rb @@ -5,19 +5,18 @@ require 'rails_helper' RSpec.describe AccountRelationshipsPresenter do describe '.initialize' do before do - allow(Account).to receive(:following_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:followed_by_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:blocking_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:muting_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:requested_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:requested_by_map).with(account_ids, current_account_id).and_return(default_map) - allow(Account).to receive(:domain_blocking_map).with(account_ids, current_account_id).and_return(default_map) + allow(Account).to receive(:following_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) + allow(Account).to receive(:followed_by_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) + allow(Account).to receive(:blocking_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) + allow(Account).to receive(:muting_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) + allow(Account).to receive(:requested_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) + allow(Account).to receive(:requested_by_map).with(accounts.pluck(:id), current_account_id).and_return(default_map) end - let(:presenter) { described_class.new(account_ids, current_account_id, **options) } + let(:presenter) { described_class.new(accounts, current_account_id, **options) } let(:current_account_id) { Fabricate(:account).id } - let(:account_ids) { [Fabricate(:account).id] } - let(:default_map) { { 1 => true } } + let(:accounts) { [Fabricate(:account)] } + let(:default_map) { { accounts[0].id => true } } context 'when options are not set' do let(:options) { {} } @@ -29,7 +28,33 @@ RSpec.describe AccountRelationshipsPresenter do blocking: default_map, muting: default_map, requested: default_map, - domain_blocking: default_map + domain_blocking: { accounts[0].id => nil } + ) + end + end + + context 'with a warm cache' do + let(:options) { {} } + + before do + described_class.new(accounts, current_account_id, **options) + + allow(Account).to receive(:following_map).with([], current_account_id).and_return({}) + allow(Account).to receive(:followed_by_map).with([], current_account_id).and_return({}) + allow(Account).to receive(:blocking_map).with([], current_account_id).and_return({}) + allow(Account).to receive(:muting_map).with([], current_account_id).and_return({}) + allow(Account).to receive(:requested_map).with([], current_account_id).and_return({}) + allow(Account).to receive(:requested_by_map).with([], current_account_id).and_return({}) + end + + it 'sets returns expected values' do + expect(presenter).to have_attributes( + following: default_map, + followed_by: default_map, + blocking: default_map, + muting: default_map, + requested: default_map, + domain_blocking: { accounts[0].id => nil } ) end end @@ -86,7 +111,7 @@ RSpec.describe AccountRelationshipsPresenter do let(:options) { { domain_blocking_map: { 7 => true } } } it 'sets @domain_blocking merged with default_map and options[:domain_blocking_map]' do - expect(presenter.domain_blocking).to eq default_map.merge(options[:domain_blocking_map]) + expect(presenter.domain_blocking).to eq({ accounts[0].id => nil }.merge(options[:domain_blocking_map])) end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 4394b470e6..0e68fbe121 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -104,7 +104,6 @@ RSpec.configure do |config| end config.before :each, type: :cli do - stub_stdout stub_reset_connection_pools end @@ -163,14 +162,6 @@ def attachment_fixture(name) Rails.root.join('spec', 'fixtures', 'files', name).open end -def stub_stdout - # TODO: Is there a bettery way to: - # - Avoid CLI command output being printed out - # - Allow rspec to assert things against STDOUT - # - Avoid disabling stdout for other desirable output (deprecation warnings, for example) - allow($stdout).to receive(:write) -end - def stub_reset_connection_pools # TODO: Is there a better way to correctly run specs without stubbing this? # (Avoids reset_connection_pools! in test env) diff --git a/spec/requests/api/v1/custom_emojis_spec.rb b/spec/requests/api/v1/custom_emojis_spec.rb index 5de0dda0be..2f0dc72944 100644 --- a/spec/requests/api/v1/custom_emojis_spec.rb +++ b/spec/requests/api/v1/custom_emojis_spec.rb @@ -9,7 +9,7 @@ describe 'Custom Emojis' do describe 'GET /api/v1/custom_emojis' do before do - Fabricate(:custom_emoji, domain: nil, disabled: false, visible_in_picker: true) + Fabricate(:custom_emoji, domain: nil, disabled: false, visible_in_picker: true, shortcode: 'coolcat') end context 'when logged out' do diff --git a/spec/controllers/api/v1/directories_controller_spec.rb b/spec/requests/api/v1/directories_spec.rb similarity index 82% rename from spec/controllers/api/v1/directories_controller_spec.rb rename to spec/requests/api/v1/directories_spec.rb index 308a8874c8..0a1864d136 100644 --- a/spec/controllers/api/v1/directories_controller_spec.rb +++ b/spec/requests/api/v1/directories_spec.rb @@ -2,17 +2,13 @@ require 'rails_helper' -describe Api::V1::DirectoriesController do - render_views - +describe 'Directories API' do let(:user) { Fabricate(:user, confirmed_at: nil) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:follows') } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:follows' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do + describe 'GET /api/v1/directories' do context 'with no params' do before do local_unconfirmed_account = Fabricate( @@ -58,27 +54,32 @@ describe Api::V1::DirectoriesController do ) domain_blocked_account.create_account_stat! Fabricate(:account_domain_block, account: user.account, domain: 'test.example') + + local_discoverable_account.create_account_stat! + eligible_remote_account.create_account_stat! end - it 'returns the local discoverable account and the remote discoverable account' do - local_discoverable_account = Fabricate( + let(:local_discoverable_account) do + Fabricate( :account, domain: nil, user: Fabricate(:user, confirmed_at: 10.days.ago, approved: true), discoverable: true, username: 'local_discoverable' ) - local_discoverable_account.create_account_stat! + end - eligible_remote_account = Fabricate( + let(:eligible_remote_account) do + Fabricate( :account, domain: 'host.example', discoverable: true, username: 'eligible_remote' ) - eligible_remote_account.create_account_stat! + end - get :show + it 'returns the local discoverable account and the remote discoverable account' do + get '/api/v1/directory', headers: headers expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) @@ -87,14 +88,17 @@ describe Api::V1::DirectoriesController do end context 'when asking for local accounts only' do - it 'returns only the local accounts' do - user = Fabricate(:user, confirmed_at: 10.days.ago, approved: true) - local_account = Fabricate(:account, domain: nil, user: user) - remote_account = Fabricate(:account, domain: 'host.example') + let(:user) { Fabricate(:user, confirmed_at: 10.days.ago, approved: true) } + let(:local_account) { Fabricate(:account, domain: nil, user: user) } + let(:remote_account) { Fabricate(:account, domain: 'host.example') } + + before do local_account.create_account_stat! remote_account.create_account_stat! + end - get :show, params: { local: '1' } + it 'returns only the local accounts' do + get '/api/v1/directory', headers: headers, params: { local: '1' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(1) @@ -108,7 +112,7 @@ describe Api::V1::DirectoriesController do old_stat = Fabricate(:account_stat, last_status_at: 1.day.ago) new_stat = Fabricate(:account_stat, last_status_at: 1.minute.ago) - get :show, params: { order: 'active' } + get '/api/v1/directory', headers: headers, params: { order: 'active' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) @@ -123,7 +127,7 @@ describe Api::V1::DirectoriesController do travel_to 10.seconds.from_now account_new = Fabricate(:account_stat).account - get :show, params: { order: 'new' } + get '/api/v1/directory', headers: headers, params: { order: 'new' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) diff --git a/spec/requests/api/v2/search_spec.rb b/spec/requests/api/v2/search_spec.rb index d0778cba4d..13bcf17984 100644 --- a/spec/requests/api/v2/search_spec.rb +++ b/spec/requests/api/v2/search_spec.rb @@ -40,7 +40,7 @@ describe 'Search API' do end end - context 'with `offset`' do + context 'with valid `offset` value' do let(:params) { { q: 'test1', offset: 1 } } it 'returns http unauthorized' do @@ -50,6 +50,26 @@ describe 'Search API' do end end + context 'with negative `offset` value' do + let(:params) { { q: 'test1', offset: '-100', type: 'accounts' } } + + it 'returns http bad_request' do + get '/api/v2/search', headers: headers, params: params + + expect(response).to have_http_status(400) + end + end + + context 'with negative `limit` value' do + let(:params) { { q: 'test1', limit: '-100', type: 'accounts' } } + + it 'returns http bad_request' do + get '/api/v2/search', headers: headers, params: params + + expect(response).to have_http_status(400) + end + end + context 'with following=true' do let(:params) { { q: 'test', type: 'accounts', following: 'true' } } diff --git a/spec/requests/omniauth_callbacks_spec.rb b/spec/requests/omniauth_callbacks_spec.rb index 27aa5ec506..0d37c41140 100644 --- a/spec/requests/omniauth_callbacks_spec.rb +++ b/spec/requests/omniauth_callbacks_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe 'OmniAuth callbacks' do shared_examples 'omniauth provider callbacks' do |provider| - subject { post send "user_#{provider}_omniauth_callback_path" } + subject { post send :"user_#{provider}_omniauth_callback_path" } context 'with full information in response' do before do diff --git a/spec/services/delete_account_service_spec.rb b/spec/services/delete_account_service_spec.rb index 8a19d3cf74..a2c57f1c1e 100644 --- a/spec/services/delete_account_service_spec.rb +++ b/spec/services/delete_account_service_spec.rb @@ -50,11 +50,11 @@ RSpec.describe DeleteAccountService, type: :service do end def delete_associated_target_records - change do - [ - AccountPin.where(target_account: account), - ].map(&:count) - end.from([1]).to([0]) + change(account_pins_for_account, :count).from(1).to(0) + end + + def account_pins_for_account + AccountPin.where(target_account: account) end def delete_associated_target_notifications @@ -100,28 +100,34 @@ RSpec.describe DeleteAccountService, type: :service do it 'sends expected activities to followed and follower inboxes' do subject - expect(a_request(:post, account.inbox_url).with( - body: - hash_including({ - 'type' => 'Reject', - 'object' => hash_including({ - 'type' => 'Follow', - 'actor' => account.uri, - 'object' => ActivityPub::TagManager.instance.uri_for(local_follower), - }), - }) - )).to have_been_made.once + expect(post_to_inbox_with_reject).to have_been_made.once + expect(post_to_inbox_with_undo).to have_been_made.once + end - expect(a_request(:post, account.inbox_url).with( - body: hash_including({ - 'type' => 'Undo', - 'object' => hash_including({ - 'type' => 'Follow', - 'actor' => ActivityPub::TagManager.instance.uri_for(local_follower), - 'object' => account.uri, - }), - }) - )).to have_been_made.once + def post_to_inbox_with_undo + a_request(:post, account.inbox_url).with( + body: hash_including({ + 'type' => 'Undo', + 'object' => hash_including({ + 'type' => 'Follow', + 'actor' => ActivityPub::TagManager.instance.uri_for(local_follower), + 'object' => account.uri, + }), + }) + ) + end + + def post_to_inbox_with_reject + a_request(:post, account.inbox_url).with( + body: hash_including({ + 'type' => 'Reject', + 'object' => hash_including({ + 'type' => 'Follow', + 'actor' => account.uri, + 'object' => ActivityPub::TagManager.instance.uri_for(local_follower), + }), + }) + ) end end end diff --git a/yarn.lock b/yarn.lock index 4f9fea29c1..a40bd34a02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1539,7 +1539,7 @@ __metadata: languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.3.1": +"@csstools/css-parser-algorithms@npm:^2.3.2": version: 2.3.2 resolution: "@csstools/css-parser-algorithms@npm:2.3.2" peerDependencies: @@ -1548,14 +1548,14 @@ __metadata: languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.0": +"@csstools/css-tokenizer@npm:^2.2.1": version: 2.2.1 resolution: "@csstools/css-tokenizer@npm:2.2.1" checksum: 0c6901d291e99c567893846a47068057c2a28b3edc4219b6da589a530f55f51ddd4675f906f707b393bfe7a508ab2604bf3f75708f064db857bb277636bd5a44 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.4": +"@csstools/media-query-list-parser@npm:^2.1.5": version: 2.1.5 resolution: "@csstools/media-query-list-parser@npm:2.1.5" peerDependencies: @@ -1744,10 +1744,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.55.0": - version: 8.55.0 - resolution: "@eslint/js@npm:8.55.0" - checksum: 88ab9fc57a651becd2b32ec40a3958db27fae133b1ae77bebd733aa5bbd00a92f325bb02f20ad680d31c731fa49b22f060a4777dd52eb3e27da013d940bd978d +"@eslint/js@npm:8.56.0": + version: 8.56.0 + resolution: "@eslint/js@npm:8.56.0" + checksum: 60b3a1cf240e2479cec9742424224465dc50e46d781da1b7f5ef240501b2d1202c225bd456207faac4b34a64f4765833345bc4ddffd00395e1db40fa8c426f5a languageName: node linkType: hard @@ -2435,7 +2435,7 @@ __metadata: sass-loader: "npm:^10.2.0" stacktrace-js: "npm:^2.0.2" stringz: "npm:^2.1.0" - stylelint: "npm:^15.10.1" + stylelint: "npm:^16.0.2" stylelint-config-standard-scss: "npm:^12.0.0" substring-trie: "npm:^1.0.2" terser-webpack-plugin: "npm:^4.2.3" @@ -2499,9 +2499,9 @@ __metadata: linkType: soft "@material-symbols/svg-600@npm:^0.14.0": - version: 0.14.1 - resolution: "@material-symbols/svg-600@npm:0.14.1" - checksum: fb5252285bbeccc45a4b131e8b165470b5b57e146bc7ea586eb82e580037d1218f6dad5fee4e6822c357041ff547f34c9c7432cce0a811b14f7e41d8ae23009b + version: 0.14.3 + resolution: "@material-symbols/svg-600@npm:0.14.3" + checksum: b9d1942790ee420d3464786fc7e748b3925d20c50aa34f2b289807badb85e49d52b4dcb36bed14c45e544a7d25fda81b33dd40d52aa134a6dea74b76805ea863 languageName: node linkType: hard @@ -3255,13 +3255,6 @@ __metadata: languageName: node linkType: hard -"@types/minimist@npm:^1.2.2": - version: 1.2.4 - resolution: "@types/minimist@npm:1.2.4" - checksum: 01403652c09de17b8c6d7d9959cb7a244deccf31e9e7a1a7011fba73fa2724c14fe935718e0fdc48dcd30403fd76a916cb991d4c0ddf229748ccc6c4920c3371 - languageName: node - linkType: hard - "@types/node@npm:*": version: 20.8.10 resolution: "@types/node@npm:20.8.10" @@ -3278,13 +3271,6 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.3 - resolution: "@types/normalize-package-data@npm:2.4.3" - checksum: 9ad94568b53f65d0c7fffed61c74e4a7b8625b1ebbc549f1de25287c2d20e6bca9d9cdc5826e508c9d95e02a48ac69d0282121c300667071661f37090224416b - languageName: node - linkType: hard - "@types/npmlog@npm:^7.0.0": version: 7.0.0 resolution: "@types/npmlog@npm:7.0.0" @@ -3369,11 +3355,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.4": - version: 18.2.17 - resolution: "@types/react-dom@npm:18.2.17" + version: 18.2.18 + resolution: "@types/react-dom@npm:18.2.18" dependencies: "@types/react": "npm:*" - checksum: 33b53078ed7e9e0cfc4dc691e938f7db1cc06353bc345947b41b581c3efe2b980c9e4eb6460dbf5ddc521dd91959194c970221a2bd4bfad9d23ebce338e12938 + checksum: 74dba11a1b8156f3a763f3fca1fb4ec1dcd349153279b8bf79210024a69f994bf2cf0728198c047f8130c5318420ea56281b0a4ef84c8ae943cd9a0cac705220 languageName: node linkType: hard @@ -3499,13 +3485,13 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.2.43 - resolution: "@types/react@npm:18.2.43" + version: 18.2.45 + resolution: "@types/react@npm:18.2.45" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10477a50fbd3c0cc5b8a2ade679f442717f68fb27c8460b2aa1d3256cd18c48f742bbe5b9ee37a8c4c5f832ffa37b3a23c09fd96dd880a8e3182d8929c05e803 + checksum: 4cc650c47ffb88baac29fb7a74e842e4af4a55f437086ef70250fdc75f0a5f2fcf8adc272d05ab2e00b1de6e14613296881271caee037dadf9130fdeb498c59e languageName: node linkType: hard @@ -3686,14 +3672,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^6.0.0": - version: 6.13.2 - resolution: "@typescript-eslint/eslint-plugin@npm:6.13.2" + version: 6.14.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.14.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.13.2" - "@typescript-eslint/type-utils": "npm:6.13.2" - "@typescript-eslint/utils": "npm:6.13.2" - "@typescript-eslint/visitor-keys": "npm:6.13.2" + "@typescript-eslint/scope-manager": "npm:6.14.0" + "@typescript-eslint/type-utils": "npm:6.14.0" + "@typescript-eslint/utils": "npm:6.14.0" + "@typescript-eslint/visitor-keys": "npm:6.14.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -3706,44 +3692,44 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 531a4406d872738d165c6a66cb26e976523c94053b022a8210dc9fd10e91b79b705bc0fcc77145e9744e4108b53bdba55e02a10dc17757b22be92aff57849384 + checksum: 6360efb0e142ed91de5e9bddcd041f769feeedd256332733be08f7a74c8ae637cbfb78c6b85d747c73231bbb95cef95ed2d2854ab7d43aebfbedb3a191f447f1 languageName: node linkType: hard "@typescript-eslint/parser@npm:^6.0.0": - version: 6.13.2 - resolution: "@typescript-eslint/parser@npm:6.13.2" + version: 6.14.0 + resolution: "@typescript-eslint/parser@npm:6.14.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.13.2" - "@typescript-eslint/types": "npm:6.13.2" - "@typescript-eslint/typescript-estree": "npm:6.13.2" - "@typescript-eslint/visitor-keys": "npm:6.13.2" + "@typescript-eslint/scope-manager": "npm:6.14.0" + "@typescript-eslint/types": "npm:6.14.0" + "@typescript-eslint/typescript-estree": "npm:6.14.0" + "@typescript-eslint/visitor-keys": "npm:6.14.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 2c62b8cd8a37eb2ea59cd00e559f51a9f57af746e2040e872af3c58ddd3f4071ad7b7009789bdeb0e0d4ee0343bfe96ee77288020f3ae22d08e1674203f5e156 + checksum: 0344f7f640374e7e5a5b50e9c90fbd161611b3f455132e541ef9116eef7bd3acf364db64bd38d4b6b4fe148414494620c9df660f8ddce036019c38ae8e146585 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.13.2": - version: 6.13.2 - resolution: "@typescript-eslint/scope-manager@npm:6.13.2" +"@typescript-eslint/scope-manager@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/scope-manager@npm:6.14.0" dependencies: - "@typescript-eslint/types": "npm:6.13.2" - "@typescript-eslint/visitor-keys": "npm:6.13.2" - checksum: 9b159e5bb10dfb5953e71488200b4126378fc7e987ce7d90946aea9ec40cd66c7ada92399657c5d9794189b764ca6f4eb38a8dcb9e4c5aa50ab6000a39636b9c + "@typescript-eslint/types": "npm:6.14.0" + "@typescript-eslint/visitor-keys": "npm:6.14.0" + checksum: 8c59a215af3d7d24d8d0b21c28a858263de471650829f288a941e0eb8af8a054798da5c7594b7f39370219718270c18464b5edb96f451457e5f080a33ba57c2c languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.13.2": - version: 6.13.2 - resolution: "@typescript-eslint/type-utils@npm:6.13.2" +"@typescript-eslint/type-utils@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/type-utils@npm:6.14.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.13.2" - "@typescript-eslint/utils": "npm:6.13.2" + "@typescript-eslint/typescript-estree": "npm:6.14.0" + "@typescript-eslint/utils": "npm:6.14.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -3751,23 +3737,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 1ca97c78abdf479aea0c54e869fda2ae2f69de1974cc063062ce7b5b16c7fdf497ea15c50a29dd5941ea1b6b77e8f1213a5c272a747e334ac69ede083f327468 + checksum: 836a6e84be5a245b07c76968c98e2f3bae064767dde720080fe8f33e226188510778dbca4199b7e42ef675ec3fd6d0ab522ec1c77d6e2a9b50e8e275fe7c72c9 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.13.2": - version: 6.13.2 - resolution: "@typescript-eslint/types@npm:6.13.2" - checksum: 029918ca5b1442bb4bc435773504ce32191e2c3e2fde8d4176bb6513f03e3dfa2aa9724b2d22b1640656d666b97f7a7ebfeaf67b881d5e07250828fa83e3ebe8 +"@typescript-eslint/types@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/types@npm:6.14.0" + checksum: d59306a7a441982a4dcee7d775928fd5086aba9331f7a238f915723a0dc785df0e43af562a30a7c2f1b056a1e49fd64863a8d2450d31706193add0ade87334a4 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.13.2": - version: 6.13.2 - resolution: "@typescript-eslint/typescript-estree@npm:6.13.2" +"@typescript-eslint/typescript-estree@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.14.0" dependencies: - "@typescript-eslint/types": "npm:6.13.2" - "@typescript-eslint/visitor-keys": "npm:6.13.2" + "@typescript-eslint/types": "npm:6.14.0" + "@typescript-eslint/visitor-keys": "npm:6.14.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -3776,34 +3762,34 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 1c4c59dce0c51fdfee34d9f418e64fe28e3ec1a97661efc8a3d2780bdff36aff38de9090d356a968f394fa6d4e9c058936ce9cd260d4c44a52761ecd74915bce + checksum: 767c3309987b8ad053a2403605a9bd7c4eb3283dece864a741a7531a1c28eea4d85acaa4613141b64e194f9f6c4cbc5bc762c9b9f3a67c6202aa8cbb18b180d2 languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.13.2, @typescript-eslint/utils@npm:^6.5.0": - version: 6.13.2 - resolution: "@typescript-eslint/utils@npm:6.13.2" +"@typescript-eslint/utils@npm:6.14.0, @typescript-eslint/utils@npm:^6.5.0": + version: 6.14.0 + resolution: "@typescript-eslint/utils@npm:6.14.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.13.2" - "@typescript-eslint/types": "npm:6.13.2" - "@typescript-eslint/typescript-estree": "npm:6.13.2" + "@typescript-eslint/scope-manager": "npm:6.14.0" + "@typescript-eslint/types": "npm:6.14.0" + "@typescript-eslint/typescript-estree": "npm:6.14.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 84969be91e7949868eaaa289288c9d71927f0e427b572501b0991d8d62b40a4234f7287c35b35d276ccbb53e9ea5457b8250fcf4941e60e6b9ba4065fbfba416 + checksum: 72689b2897b89e1bd1c71c1c2ae436d0ccfbcfffabf3be4378de74ad8138b2ecdbeeda7c1720e2f1754569e773f2fc7216f704335e1e56c38c7601ee1d190aeb languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.13.2": - version: 6.13.2 - resolution: "@typescript-eslint/visitor-keys@npm:6.13.2" +"@typescript-eslint/visitor-keys@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.14.0" dependencies: - "@typescript-eslint/types": "npm:6.13.2" + "@typescript-eslint/types": "npm:6.14.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: c173bc1fcc42c3075a5ee094e7f3bf0279d98315c25ff49e20d02d79022b1d0402accfa113b070afb4d52a6f6d180594b67baa8b6a784eabdf82b54dd1ff454c + checksum: 0e2363f9f1986ebdb41507c54a666fa1c336eb6beb383dc342a10844d3c42c89067b21c3f158851fa6f0825e1e451a5470b5454fde70a6fc33b4b0259462d954 languageName: node linkType: hard @@ -4494,13 +4480,6 @@ __metadata: languageName: node linkType: hard -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - "arrow-key-navigation@npm:^1.2.0": version: 1.2.0 resolution: "arrow-key-navigation@npm:1.2.0" @@ -5381,18 +5360,6 @@ __metadata: languageName: node linkType: hard -"camelcase-keys@npm:^7.0.0": - version: 7.0.2 - resolution: "camelcase-keys@npm:7.0.2" - dependencies: - camelcase: "npm:^6.3.0" - map-obj: "npm:^4.1.0" - quick-lru: "npm:^5.1.1" - type-fest: "npm:^1.2.1" - checksum: ae86a51168643e9e8a2f2c7bfa17850729979ec3dafc5253056a7d97931cbb0e3ef5b4185e59d54b7a56c54405dee2874b0c82033498d8626e512ff9034cb05c - languageName: node - linkType: hard - "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -5400,7 +5367,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": +"camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 @@ -5997,15 +5964,20 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.2.0": - version: 8.2.0 - resolution: "cosmiconfig@npm:8.2.0" +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" dependencies: - import-fresh: "npm:^3.2.1" + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - checksum: 4180aa6d1881b75ba591b2fc04b022741a3a4b67e9e243c0eb8d169b6e1efbd3cdf7e8ca19243c0f2e53a9d59ac3eccd5cad5f95f487fcbf4e740f9e86745747 + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee languageName: node linkType: hard @@ -6125,12 +6097,12 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.3.1": - version: 6.4.0 - resolution: "css-declaration-sorter@npm:6.4.0" +"css-declaration-sorter@npm:^7.0.0": + version: 7.1.1 + resolution: "css-declaration-sorter@npm:7.1.1" peerDependencies: postcss: ^8.0.9 - checksum: aef4d5927e576bae04349457be0607af44525cf5f4b28a91843c7b7f28fcbb302ba149385bb0e2172380556994e31680c5177b42d03502c417789b139e20cbc2 + checksum: bea446e441bafde21c3c7b3f7639559311da12eea140db7ee3c61e4f41df455b7b098df107f99bc0cca32a5020841cc94bf8a2d5efb1b383e51f9de478c4816e languageName: node linkType: hard @@ -6263,63 +6235,72 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^6.0.1": - version: 6.0.1 - resolution: "cssnano-preset-default@npm:6.0.1" +"cssnano-preset-default@npm:^6.0.2": + version: 6.0.2 + resolution: "cssnano-preset-default@npm:6.0.2" dependencies: - css-declaration-sorter: "npm:^6.3.1" - cssnano-utils: "npm:^4.0.0" - postcss-calc: "npm:^9.0.0" - postcss-colormin: "npm:^6.0.0" - postcss-convert-values: "npm:^6.0.0" - postcss-discard-comments: "npm:^6.0.0" - postcss-discard-duplicates: "npm:^6.0.0" - postcss-discard-empty: "npm:^6.0.0" - postcss-discard-overridden: "npm:^6.0.0" - postcss-merge-longhand: "npm:^6.0.0" - postcss-merge-rules: "npm:^6.0.1" - postcss-minify-font-values: "npm:^6.0.0" - postcss-minify-gradients: "npm:^6.0.0" - postcss-minify-params: "npm:^6.0.0" - postcss-minify-selectors: "npm:^6.0.0" - postcss-normalize-charset: "npm:^6.0.0" - postcss-normalize-display-values: "npm:^6.0.0" - postcss-normalize-positions: "npm:^6.0.0" - postcss-normalize-repeat-style: "npm:^6.0.0" - postcss-normalize-string: "npm:^6.0.0" - postcss-normalize-timing-functions: "npm:^6.0.0" - postcss-normalize-unicode: "npm:^6.0.0" - postcss-normalize-url: "npm:^6.0.0" - postcss-normalize-whitespace: "npm:^6.0.0" - postcss-ordered-values: "npm:^6.0.0" - postcss-reduce-initial: "npm:^6.0.0" - postcss-reduce-transforms: "npm:^6.0.0" - postcss-svgo: "npm:^6.0.0" - postcss-unique-selectors: "npm:^6.0.0" + css-declaration-sorter: "npm:^7.0.0" + cssnano-utils: "npm:^4.0.1" + postcss-calc: "npm:^9.0.1" + postcss-colormin: "npm:^6.0.1" + postcss-convert-values: "npm:^6.0.1" + postcss-discard-comments: "npm:^6.0.1" + postcss-discard-duplicates: "npm:^6.0.1" + postcss-discard-empty: "npm:^6.0.1" + postcss-discard-overridden: "npm:^6.0.1" + postcss-merge-longhand: "npm:^6.0.1" + postcss-merge-rules: "npm:^6.0.2" + postcss-minify-font-values: "npm:^6.0.1" + postcss-minify-gradients: "npm:^6.0.1" + postcss-minify-params: "npm:^6.0.1" + postcss-minify-selectors: "npm:^6.0.1" + postcss-normalize-charset: "npm:^6.0.1" + postcss-normalize-display-values: "npm:^6.0.1" + postcss-normalize-positions: "npm:^6.0.1" + postcss-normalize-repeat-style: "npm:^6.0.1" + postcss-normalize-string: "npm:^6.0.1" + postcss-normalize-timing-functions: "npm:^6.0.1" + postcss-normalize-unicode: "npm:^6.0.1" + postcss-normalize-url: "npm:^6.0.1" + postcss-normalize-whitespace: "npm:^6.0.1" + postcss-ordered-values: "npm:^6.0.1" + postcss-reduce-initial: "npm:^6.0.1" + postcss-reduce-transforms: "npm:^6.0.1" + postcss-svgo: "npm:^6.0.1" + postcss-unique-selectors: "npm:^6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 401a8d0712cca6577df52cf4aac234ff4a946f0f51c0d09e7c518fff389706cff54d702ff22762e834b23401a89b836aef113e69cc66fa5dfa1f361bdd932495 + postcss: ^8.4.31 + checksum: c6f97674704c3a2a2473440549eac38ac722feebabbd39f2d4d1b8fae7f137f8fd0dfb88929e1ff737d54008de583c39e96f9dc450f2d71f8be6fc3bac2840a3 languageName: node linkType: hard -"cssnano-utils@npm:^4.0.0": - version: 4.0.0 - resolution: "cssnano-utils@npm:4.0.0" +"cssnano-utils@npm:^4.0.1": + version: 4.0.1 + resolution: "cssnano-utils@npm:4.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: ca5cb2be5ec8ea624c28f5f54c00a440557afd3c2b25cb568517db44d230833743f3db30729126efe4d7fc616a42718dd76255bbefcb7d3cc7e3ff5989d907b3 + postcss: ^8.4.31 + checksum: 20513a393402f283c85c450ece43d1a6a06a9906b524481043ac203a86888a4ca5cbef878c615a58fdd82a9e870ce62c6f3fea9f51814034a084d8980e17cf96 languageName: node linkType: hard "cssnano@npm:^6.0.1": - version: 6.0.1 - resolution: "cssnano@npm:6.0.1" + version: 6.0.2 + resolution: "cssnano@npm:6.0.2" dependencies: - cssnano-preset-default: "npm:^6.0.1" - lilconfig: "npm:^2.1.0" + cssnano-preset-default: "npm:^6.0.2" + lilconfig: "npm:^3.0.0" peerDependencies: - postcss: ^8.2.15 - checksum: b73a3a257dd32201ce504cb34b08f1259c8a260b063f58d33e03283149d94ee2ba938d7f9beae1413f0f34e06828759575ade6ae95fa01d199f291e1d4f6d2c2 + postcss: ^8.4.31 + checksum: 5f4146a6c8937d24b0d1d33e3acd85db7913c7558cc80b23169f86c9a552d091a26e0af6adcc535f8355561872f797a917b9353e38fe935bbaf08ec2b66f5ff8 + languageName: node + linkType: hard + +"csso@npm:5.0.5": + version: 5.0.5 + resolution: "csso@npm:5.0.5" + dependencies: + css-tree: "npm:~2.2.0" + checksum: ab4beb1e97dd7e207c10e9925405b45f15a6cd1b4880a8686ad573aa6d476aed28b4121a666cffd26c37a26179f7b54741f7c257543003bfb244d06a62ad569b languageName: node linkType: hard @@ -6332,15 +6313,6 @@ __metadata: languageName: node linkType: hard -"csso@npm:^5.0.5": - version: 5.0.5 - resolution: "csso@npm:5.0.5" - dependencies: - css-tree: "npm:~2.2.0" - checksum: ab4beb1e97dd7e207c10e9925405b45f15a6cd1b4880a8686ad573aa6d476aed28b4121a666cffd26c37a26179f7b54741f7c257543003bfb244d06a62ad569b - languageName: node - linkType: hard - "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -6445,30 +6417,13 @@ __metadata: languageName: node linkType: hard -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": +"decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 languageName: node linkType: hard -"decamelize@npm:^5.0.0": - version: 5.0.1 - resolution: "decamelize@npm:5.0.1" - checksum: 3da71022bc1e85487810fa0833138effb599fa331ca21e179650e93a765d0c4dabeb1ecdd6ad1474fa0bacd2457953c63ea335afb6e53b35f2b4bf779514e2a3 - languageName: node - linkType: hard - "decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" @@ -7103,7 +7058,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 @@ -7404,8 +7359,8 @@ __metadata: linkType: hard "eslint-plugin-import@npm:~2.29.0": - version: 2.29.0 - resolution: "eslint-plugin-import@npm:2.29.0" + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" dependencies: array-includes: "npm:^3.1.7" array.prototype.findlastindex: "npm:^1.2.3" @@ -7423,16 +7378,16 @@ __metadata: object.groupby: "npm:^1.0.1" object.values: "npm:^1.1.7" semver: "npm:^6.3.1" - tsconfig-paths: "npm:^3.14.2" + tsconfig-paths: "npm:^3.15.0" peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 761a4e1fbc2cd318e62350bed4c448f8b11ed83091d6bb7776f096556363a09debd9922b39fd2714c895edc9aaea82e08e684eb632283f880c58a91e4bae6733 + checksum: 5f35dfbf4e8e67f741f396987de9504ad125c49f4144508a93282b4ea0127e052bde65ab6def1f31b6ace6d5d430be698333f75bdd7dca3bc14226c92a083196 languageName: node linkType: hard "eslint-plugin-jsdoc@npm:^46.1.0": - version: 46.9.0 - resolution: "eslint-plugin-jsdoc@npm:46.9.0" + version: 46.9.1 + resolution: "eslint-plugin-jsdoc@npm:46.9.1" dependencies: "@es-joy/jsdoccomment": "npm:~0.41.0" are-docs-informative: "npm:^0.0.2" @@ -7442,10 +7397,10 @@ __metadata: esquery: "npm:^1.5.0" is-builtin-module: "npm:^3.2.1" semver: "npm:^7.5.4" - spdx-expression-parse: "npm:^3.0.1" + spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 4566b0f9bda54b446c813cf5ea93ae6d5866cbc4d448cb957b9ce2563f934d3ed2ed4e665e5a870750860a57137a1714c38599c35c60be16dce0f8e5a75b6ff6 + checksum: d15d68797e85bb7b6fdcfc1170653683c16ab1d62c2e9c537101e774cb3231913e2bc4781f2bb808d074adce5699e5b545e450c6801b637c6434587d226ad6ac languageName: node linkType: hard @@ -7566,13 +7521,13 @@ __metadata: linkType: hard "eslint@npm:^8.41.0": - version: 8.55.0 - resolution: "eslint@npm:8.55.0" + version: 8.56.0 + resolution: "eslint@npm:8.56.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.55.0" + "@eslint/js": "npm:8.56.0" "@humanwhocodes/config-array": "npm:^0.11.13" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" @@ -7609,7 +7564,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: d28c0b60f19bb7d355cb8393e77b018c8f548dba3f820b799c89bb2e0c436ee26084e700c5e57e1e97e7972ec93065277849141b82e7b0c0d02c2dc1e553a2a1 + checksum: 2be598f7da1339d045ad933ffd3d4742bee610515cd2b0d9a2b8b729395a01d4e913552fff555b559fccaefd89d7b37632825789d1b06470608737ae69ab43fb languageName: node linkType: hard @@ -7945,16 +7900,16 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" dependencies: "@nodelib/fs.stat": "npm:^2.0.2" "@nodelib/fs.walk": "npm:^1.2.3" glob-parent: "npm:^5.1.2" merge2: "npm:^1.3.0" micromatch: "npm:^4.0.4" - checksum: b68431128fb6ce4b804c5f9622628426d990b66c75b21c0d16e3d80e2d1398bf33f7e1724e66a2e3f299285dcf5b8d745b122d0304e7dd66f5231081f33ec67c + checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 languageName: node linkType: hard @@ -8022,12 +7977,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^7.0.0": - version: 7.0.1 - resolution: "file-entry-cache@npm:7.0.1" +"file-entry-cache@npm:^7.0.2": + version: 7.0.2 + resolution: "file-entry-cache@npm:7.0.2" dependencies: - flat-cache: "npm:^3.1.1" - checksum: fc0e4f830777e07087f97da9a6734820fdffa2945583355433f40d9819dd97b89f16ac87c07118737a6bc3eb9cf4bd896e7b38b07f0768aefcf44da33e797363 + flat-cache: "npm:^3.2.0" + checksum: 822664e35c3e295e6a8ca7ec490d8d8077017607f41f94b29922f1f49c6dd07025048e3ed528e2909a1439eba66d60f802c0774aa612cf6ee053ee4ecc16c8c5 languageName: node linkType: hard @@ -8161,7 +8116,7 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4, flat-cache@npm:^3.1.1": +"flat-cache@npm:^3.0.4, flat-cache@npm:^3.2.0": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" dependencies: @@ -8693,13 +8648,6 @@ __metadata: languageName: node linkType: hard -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -8879,15 +8827,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -9141,10 +9080,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 7c7cd90edd9fea6e037f9b9da4b01bf0a86b198ce78345f9bbd983929d68ff14830be31111edc5d70c264921f4962404d75b7262b4d9cc3bc12381eccbd03096 +"ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.0": + version: 5.3.0 + resolution: "ignore@npm:5.3.0" + checksum: dc06bea5c23aae65d0725a957a0638b57e235ae4568dda51ca142053ed2c352de7e3bc93a69b2b32ac31966a1952e9a93c5ef2e2ab7c6b06aef9808f6b55b571 languageName: node linkType: hard @@ -9169,7 +9108,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -9179,13 +9118,6 @@ __metadata: languageName: node linkType: hard -"import-lazy@npm:^4.0.0": - version: 4.0.0 - resolution: "import-lazy@npm:4.0.0" - checksum: a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca - languageName: node - linkType: hard - "import-local@npm:^2.0.0": version: 2.0.0 resolution: "import-local@npm:2.0.0" @@ -9238,13 +9170,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 - languageName: node - linkType: hard - "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -9506,7 +9431,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.9.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -9788,13 +9713,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - "is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -10933,20 +10851,13 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:3.0.0": +"lilconfig@npm:3.0.0, lilconfig@npm:^3.0.0": version: 3.0.0 resolution: "lilconfig@npm:3.0.0" checksum: 7f5ee7a658dc016cacf146815e8d88b06f06f4402823b8b0934e305a57a197f55ccc9c5cd4fb5ea1b2b821c8ccaf2d54abd59602a4931af06eabda332388d3e6 languageName: node linkType: hard -"lilconfig@npm:^2.1.0": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -11288,20 +11199,6 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.1.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - "map-visit@npm:^1.0.0": version: 1.0.0 resolution: "map-visit@npm:1.0.0" @@ -11405,23 +11302,10 @@ __metadata: languageName: node linkType: hard -"meow@npm:^10.1.5": - version: 10.1.5 - resolution: "meow@npm:10.1.5" - dependencies: - "@types/minimist": "npm:^1.2.2" - camelcase-keys: "npm:^7.0.0" - decamelize: "npm:^5.0.0" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.2" - read-pkg-up: "npm:^8.0.0" - redent: "npm:^4.0.0" - trim-newlines: "npm:^4.0.2" - type-fest: "npm:^1.2.2" - yargs-parser: "npm:^20.2.9" - checksum: a513849022edd5ddcc41d28c679d31978abe414d9db5bc457e95e537a4327b2910fd2f699cdd883293f9a5da8951a50939bf60fbd62f7fe12b9ddf96a84b1b27 +"meow@npm:^12.1.1": + version: 12.1.1 + resolution: "meow@npm:12.1.1" + checksum: a125ca99a32e2306e2f4cbe651a0d27f6eb67918d43a075f6e80b35e9bf372ebf0fc3a9fbc201cbbc9516444b6265fb3c9f80c5b7ebd32f548aa93eb7c28e088 languageName: node linkType: hard @@ -11544,7 +11428,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": +"min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c @@ -11605,17 +11489,6 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -11973,18 +11846,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.2": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - "normalize-path@npm:^2.1.1": version: 2.1.1 resolution: "normalize-path@npm:2.1.1" @@ -12829,7 +12690,7 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^9.0.0": +"postcss-calc@npm:^9.0.1": version: 9.0.1 resolution: "postcss-calc@npm:9.0.1" dependencies: @@ -12841,65 +12702,65 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-colormin@npm:6.0.0" +"postcss-colormin@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-colormin@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" caniuse-api: "npm:^3.0.0" colord: "npm:^2.9.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: b05763b68f7f23333f408734f13be4bde641934ecbde25ac7d7fa648ab5e826716bffac0193067b317e861c6dabad81db9c012e865a83f81b6bce5c7e25c0fdd + postcss: ^8.4.31 + checksum: b0056812b3436b05b6b84284a1ebe68a72299f23e7eeb0b7b40a775978d06a1cbe235f3665e3f694f5de76fe7d9b93db607536d07697b31a59fd4e8705e5b64d languageName: node linkType: hard -"postcss-convert-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-convert-values@npm:6.0.0" +"postcss-convert-values@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-convert-values@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 8c20d31a39e0ddf7db4fde0da62e293279b5ee84c36919f2e5760650fa6f2984f1a40bfdbe8d1f7829bd37b17e5e589535f0aaaf71d4df29ad203cef830b9d7a + postcss: ^8.4.31 + checksum: 53b951d7475206969c63b8427a2dea0ccba0a7cb08122e5f05aee8d12b09c870c070b101c9f8eceda76ff4d0fd9e5fa9385e83f143d658bb729dbb6a3583b872 languageName: node linkType: hard -"postcss-discard-comments@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-comments@npm:6.0.0" +"postcss-discard-comments@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-discard-comments@npm:6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: c8792cd99c7696b21917d55937e02fb854a82ee308edf7564f18ad19bec4abf4756ba234e17f7d129d6b0dbaf6253bcddc435b1aeee190d4d26dcc2448f5453a + postcss: ^8.4.31 + checksum: 5e9128ffb8c005081bb0521f5a23cf090e8513d928ed39935504ffde2e335a62a7e1a749c5c7bc2d03f06a8667900d19dd7eed19dfa4273043b5fd760476260d languageName: node linkType: hard -"postcss-discard-duplicates@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-duplicates@npm:6.0.0" +"postcss-discard-duplicates@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-discard-duplicates@npm:6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 5fb0de3b187b09538a8c10f25bcc3e7b0865337a96a0599f8213864f0d52812f6c90142d170258293a30484b95e096dee28fc8fddb302016f93d4a8d269bb18f + postcss: ^8.4.31 + checksum: b9ea10a3c7528bb1630613c11756f809a95da634822d943fa91b28f2a37787e7cdb9ff96deed9776e2c3753d35e42c8afd5074b630930df7b5150573d4beda23 languageName: node linkType: hard -"postcss-discard-empty@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-empty@npm:6.0.0" +"postcss-discard-empty@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-discard-empty@npm:6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 5dfe01f93ee2bb85e71f7832498bd051b772b9c724a5630f749237b07a14b47c2b2800b4215ab4cf0d8cba29552725b40334f3ef9d349f7aacf410ad351715dc + postcss: ^8.4.31 + checksum: 6b95e588a3e8fb262e56bd313060daf29d7c9d44184bb6c4c5858ae81d6cd2907b15b3e3023b6621d50a67cfc10e6077920ff1e908892b207dee29477376498f languageName: node linkType: hard -"postcss-discard-overridden@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-overridden@npm:6.0.0" +"postcss-discard-overridden@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-discard-overridden@npm:6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 3a0c91241a95a887ef10227c761fb2c48870966bda5530de635002e485abc2743dfbfdc96e3b6a21f10c6231f0cfbe1a0eae0a01a89629d64a711eab3ee008c6 + postcss: ^8.4.31 + checksum: 22f9d56e53b90bc0f8e6d1c24d6da6c7c1a9d757644a128a7a4263a5479aaa8eca4ce3bfe9db10358051635ed40e8778a68c3f1831b7163eae10ced001db4a87 languageName: node linkType: hard @@ -12926,77 +12787,77 @@ __metadata: languageName: node linkType: hard -"postcss-merge-longhand@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-merge-longhand@npm:6.0.0" +"postcss-merge-longhand@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-merge-longhand@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^6.0.0" + stylehacks: "npm:^6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 0b67c590d301ab7f087ea7421e1eac0cccd2ff1c146a2dfa16d3f32b770d12a5999b8c6ea177efc443f4fb9df13b941c401365c634533878eef1982ad9d0bb98 + postcss: ^8.4.31 + checksum: 2c0eb81b6c6d3d2af3b129c46d10317b7923f218db1cadcb4723091fb951fe4624638002b65f235151129d4ce9b4775a6ed0d5fa13419c0df580f72e15fa4ad3 languageName: node linkType: hard -"postcss-merge-rules@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-merge-rules@npm:6.0.1" +"postcss-merge-rules@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-merge-rules@npm:6.0.2" dependencies: browserslist: "npm:^4.21.4" caniuse-api: "npm:^3.0.0" - cssnano-utils: "npm:^4.0.0" + cssnano-utils: "npm:^4.0.1" postcss-selector-parser: "npm:^6.0.5" peerDependencies: - postcss: ^8.2.15 - checksum: b6a2a196905cd170757aa7b8bc74dab1fc7e2b2ca6a19c6d355fb7c41ff736023b4176c1008a7049f6a1b24a94a30d066c4e51229c1282a941f7fd6056085af7 + postcss: ^8.4.31 + checksum: 138a9921423420116b20e5761a1139392f0bcfcf34264fe11e254917d9c3170e3c0478a1b409e227d22bb0d9820b0168a871a240215d114e9c1e218ee6c132e6 languageName: node linkType: hard -"postcss-minify-font-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-font-values@npm:6.0.0" +"postcss-minify-font-values@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-minify-font-values@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 6b74b1ec19bf76dcae7947c42145cb200b38767680512728f76168ae246db453798760e56111bd28ade9011d3655a79da4b33a93e5349f98fb0c1b22cc65ff36 + postcss: ^8.4.31 + checksum: 15af236245a6d27f1c83c943ef90d144ca043894bbd86f134506a984811a936a06824739984824965c7c3fd5a0ff4ed299f26a33f3b628662aa4fb40d7536fd0 languageName: node linkType: hard -"postcss-minify-gradients@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-gradients@npm:6.0.0" +"postcss-minify-gradients@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-minify-gradients@npm:6.0.1" dependencies: colord: "npm:^2.9.1" - cssnano-utils: "npm:^4.0.0" + cssnano-utils: "npm:^4.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 59046acd470bee151291ba99421846d776c4ed243acb05a005e74f64f92b968d712d35e727f5e4a90e632d6d6aeb3a01083469f50bfdf1fb9ecae7f4ae52d9b8 + postcss: ^8.4.31 + checksum: e700c3f6dc425072ff739fb18bb71c970599e0d909b326f4a5c84e91cf24c4f1ee78e4d161bd4cdf6e25b7d78f1ad082bb885afdd2a150f9b281520fc6359d5c languageName: node linkType: hard -"postcss-minify-params@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-params@npm:6.0.0" +"postcss-minify-params@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-minify-params@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" - cssnano-utils: "npm:^4.0.0" + cssnano-utils: "npm:^4.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: d4d1469b7ad7fe53900eb19c156ec6dcfeaf71641d29ba4df31f47d8fa8ac700df5b8d3e3768e66d695d5356ed348cea901314653046c8e48422962f165a1933 + postcss: ^8.4.31 + checksum: 0b34817f032ec9793fad4d33f3ba5551531073a36c9120d77194a3edeee860132951ed6954913494e5a6752ae8da1bc5cdb2a44fa5f428621afae8edddb0ca80 languageName: node linkType: hard -"postcss-minify-selectors@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-selectors@npm:6.0.0" +"postcss-minify-selectors@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-minify-selectors@npm:6.0.1" dependencies: postcss-selector-parser: "npm:^6.0.5" peerDependencies: - postcss: ^8.2.15 - checksum: 1cdd3bd231cf25f54ab370d959f727dfcbe839a1d97bcfd65add9df73747a45d299a009ff16111bbe78943e8f81dcf5f84ae4106847b23dd3652de7aadc0b297 + postcss: ^8.4.31 + checksum: ffc7ebb286beda2b2aa0ed13abafc89b5ffe232a48d57d3f2b9f69e167e354482a6f5279e9118bed753bf6e82d3cfb21228a6b07acd93d0dc9e01bbf0e7ebc75 languageName: node linkType: hard @@ -13044,136 +12905,136 @@ __metadata: languageName: node linkType: hard -"postcss-normalize-charset@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-charset@npm:6.0.0" +"postcss-normalize-charset@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-charset@npm:6.0.1" peerDependencies: - postcss: ^8.2.15 - checksum: 5232eac7f62097b1d349546182af2db7db34989867c147517cd407ab23c8450558a7f858eb8dac130959dae2d02d3460c5afa510e0ffe22221cb218f2bd79adb + postcss: ^8.4.31 + checksum: 8c09eedaf8813123875c65ab35120f14a87d6b9e8d6805fa808e3a714a8f868d15123f34f61e2240d89225f2f5c2bdabbcdf6385ce86b2487370d8994a65a857 languageName: node linkType: hard -"postcss-normalize-display-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-display-values@npm:6.0.0" +"postcss-normalize-display-values@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-display-values@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 58163258a52610fa0d2b61bd6e872b9a2b25da1f2209cbf34fad3b62a4139fff9e0e6b298dcd1adfe6ac556098aad8b79c387280f3a949180f8fb12e6b41fecf + postcss: ^8.4.31 + checksum: d08a92c653fb4f2506e029ceb8e3fdae9bc937fb1a7e80ecde759d02f6d15f69211af384d89d8582b160fd129abd9c77c8c64d75379417098ee5a2ba779e33d3 languageName: node linkType: hard -"postcss-normalize-positions@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-positions@npm:6.0.0" +"postcss-normalize-positions@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-positions@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: de2ced6cfdf2931d7cbc8f9c96bb12487119dba1b454c7ac01fd19f7afdaa9bf6c63f59624281293379ead5a3d5e883007a3f192f02c40ab41528ccc5a399f5c + postcss: ^8.4.31 + checksum: bb0267b13c92791543f5e9f94b119a0540e08aa46f600acd73a692cd38d07d2d2fddb11148a81adb58e3f65671eebb05ea38d2ded48f3202b2582f1199aa848e languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-repeat-style@npm:6.0.0" +"postcss-normalize-repeat-style@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-repeat-style@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 1643132094067709ca7d1fa2beededd28565c83bc8a6c2a4dec879a97e1d425ca1293a8832a45732eef12b52960f024330cfb654a8a222fb7ea768a75989c31e + postcss: ^8.4.31 + checksum: f6e943dbbf9341dd6ce2c9fc6820e8ae2a838d1db84f58f75b1e5c1b8b9d6895d17fb30b320e2189b8747f844713ec687540b5b1d52ccd6c9108d6d35328c659 languageName: node linkType: hard -"postcss-normalize-string@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-string@npm:6.0.0" +"postcss-normalize-string@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-string@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: d586ce274451229c6a3d625edef882b342ab7702babb632845c8c201c7bcc08481f282000d19d17edb7b5ef0b1982e715a16ab60990d124e937c4aef3304151e + postcss: ^8.4.31 + checksum: afcdd69522fc3ebafc349c2ef4b62f1e734ade9b6148fd20f2b841477808ac6cf6e5bfbb533c492fdc6bb2184b84be8ebb800a6ae174c4313f87fb0695088cc0 languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-timing-functions@npm:6.0.0" +"postcss-normalize-timing-functions@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-timing-functions@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: a70742648cec15eea031096f2ad99c21c79228ce4c4ccc9f63c277c07e9e3add96298cc67b0b1797896507248153e0a662f85f490f53147ded7008b459dd5ba3 + postcss: ^8.4.31 + checksum: c1c81d0dcb2f74fbd69cc45b0b6bd6cde390a0c9df602aabbf3eb2149a49da48e808837e811d22a525ffb036e158e63b4b2cf12c94cf28f2c2f6af858876134e languageName: node linkType: hard -"postcss-normalize-unicode@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-unicode@npm:6.0.0" +"postcss-normalize-unicode@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-unicode@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: cd9b06ed09c29ccc0b2cb222044d7ec49fb710fdd6f0878b26d7f3324478d8271a555ba3d82fc8d9fdcf8671a83c499cdfa09c0e73d4dee928adff4042ed8b22 + postcss: ^8.4.31 + checksum: 8057748dade94dc2dd63a3b75a85e394c2e9a7076053886ff08aa9b7729d383f204eda52d882e5361ae1ec493036e90b2e18dcc5f8c9b3a8f1cbfada12bcc05b languageName: node linkType: hard -"postcss-normalize-url@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-url@npm:6.0.0" +"postcss-normalize-url@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-url@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 719a7feee4adf638cc0b4bc204d89485388ca81f0ad0a181a225122f488f956abd29f429d69e5a57fffe93fbd2a22eab7737bd8b55b19979efba26e008b2ec11 + postcss: ^8.4.31 + checksum: 4e3e713a95e01f263feccd041b2b10016a0a09e494c81567f012d1326d9b2d57dc4a68956a820313630370c0ef591bdbb37cc96ed259022559623be179aad436 languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-whitespace@npm:6.0.0" +"postcss-normalize-whitespace@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-normalize-whitespace@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 8421dd5813c1e555d7c2847dd8b71a5138ee2091341ebd1ea686d5b00cd46d249a29027e142289f873ca7f5fc995b51eb68f9693fec6d61cf951c759d109c37d + postcss: ^8.4.31 + checksum: 259c0b7653f033ed14303602a30e458c37dc63ee55f47226b6379a6ea553ca7c9b971d49715b8f3f36a3a06927f6f87d7997c027ad4664af3bca37a5fe30352e languageName: node linkType: hard -"postcss-ordered-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-ordered-values@npm:6.0.0" +"postcss-ordered-values@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-ordered-values@npm:6.0.1" dependencies: - cssnano-utils: "npm:^4.0.0" + cssnano-utils: "npm:^4.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: b01352b0ea014e0037a5b8b3bd866696924bfb2cf3b47b73547786a1954e6771c04790fbe4c651bf029bafdbfde70f49e611f9ef309e945f753425841f343017 + postcss: ^8.4.31 + checksum: 2e71f035c90b26d7a8d31e1b716f977532367f75bc76de3318b6ba7b2e1ec43c011cc09e741f59f7d93dff427b7d90a35db0b460d2f171a6f0c6e8c938ef30ad languageName: node linkType: hard -"postcss-reduce-initial@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-reduce-initial@npm:6.0.0" +"postcss-reduce-initial@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-reduce-initial@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" caniuse-api: "npm:^3.0.0" peerDependencies: - postcss: ^8.2.15 - checksum: 7cf6340bde9f70c7d9b20bc3ee53e883bf27ed56fcc3bb2a2c736b311d977098a7c3a6b9e4be4d2c159d0042bf7742bb5af59628cd89cf838968dacc5ae15c80 + postcss: ^8.4.31 + checksum: 3f8f6c26ceeb79ddc285b0e01183fe30e911dd26b3abcdca56568e2bef3747f2b7f22ee3f9117e9752e1e93c10bcd88bd6a2842ca525b54336726292ebd3c3ad languageName: node linkType: hard -"postcss-reduce-transforms@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-reduce-transforms@npm:6.0.0" +"postcss-reduce-transforms@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-reduce-transforms@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.15 - checksum: 6da900d22dd8760b8a2ace32013036e3c4c4d9d560c31255eceea54563e3ddb2ca830bc9072fe2a1abacb8c48a008656887fc2f6ba1873e590342ad8e6bc269d + postcss: ^8.4.31 + checksum: de7631302311071d86622166539162e69df506785e3674afab0602c86ed9aa67799e44405b40327f0011d58089d2dc4e2ae481b21812177818e28f9272d350a5 languageName: node linkType: hard @@ -13184,12 +13045,12 @@ __metadata: languageName: node linkType: hard -"postcss-safe-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-safe-parser@npm:6.0.0" +"postcss-safe-parser@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-safe-parser@npm:7.0.0" peerDependencies: - postcss: ^8.3.3 - checksum: 5b0997b63de6ab4afb4b718a52dd7902e465c21d1f2e516762bcb59047787459b4dc5713132f6a19c9c8c483043b20b8a380a55fb61152ee66cbffcddf3b57f0 + postcss: ^8.4.31 + checksum: 4217afd8ce2809e959dc365e4675f499303cc6b91f94db06c8164422822db2d3b3124df701ee2234db4127ad05619b016bfb9c2bccae9bf9cf898a396f1632c9 languageName: node linkType: hard @@ -13212,26 +13073,26 @@ __metadata: languageName: node linkType: hard -"postcss-svgo@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-svgo@npm:6.0.0" +"postcss-svgo@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-svgo@npm:6.0.1" dependencies: postcss-value-parser: "npm:^4.2.0" - svgo: "npm:^3.0.2" + svgo: "npm:^3.0.5" peerDependencies: - postcss: ^8.2.15 - checksum: ec567cd5e982e3c0393695628bc508b87dcfe4e4b2049930e79e6c629c349fad19403f0d39d76ceda3e0f15ffd065304e76152f397fae2f3f848cdb847a0b564 + postcss: ^8.4.31 + checksum: 021da9b0d0696fce970f407891a0d6c05e51d1908af435026e0cd5936a75cd8502a7d504cd0e6a33b6f3369fee41f01b848e5bd919aecc3e804ce6308e91a6cc languageName: node linkType: hard -"postcss-unique-selectors@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-unique-selectors@npm:6.0.0" +"postcss-unique-selectors@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-unique-selectors@npm:6.0.1" dependencies: postcss-selector-parser: "npm:^6.0.5" peerDependencies: - postcss: ^8.2.15 - checksum: 63e81a7965ff8874fdf39ef0ae0f12cc21352548733538f52eda73f0ed5a7fab7fda9090facf50395d07873c5a6f02d31a6171fd476c80858b03090ec4c61d31 + postcss: ^8.4.31 + checksum: 637e35775d0ee8fbcf4a81b28d3832c5076de7c0232eb7769d4fbbf783f26793e2ec95e18461ae3b9f5f5cd63c3de9db102464487ba2488d4947aad24dc8841f languageName: node linkType: hard @@ -13242,7 +13103,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.28": +"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.32": version: 8.4.32 resolution: "postcss@npm:8.4.32" dependencies: @@ -13396,12 +13257,12 @@ __metadata: linkType: hard "prom-client@npm:^15.0.0": - version: 15.0.0 - resolution: "prom-client@npm:15.0.0" + version: 15.1.0 + resolution: "prom-client@npm:15.1.0" dependencies: "@opentelemetry/api": "npm:^1.4.0" tdigest: "npm:^0.1.1" - checksum: 4d69d4a6e086a80f1e7b5716c53d6be49d99dba8451f2a8117708f581f69648f47df68060cbea1c18e24fc1efe675868f85c5da89d0ef8d6f962a52b5f50c356 + checksum: c10781adbf49225298e44da5396a51a0bd4d0cddc3c7e237ba50e888e12ead26a8f98261f362a442f1bbcdaddd6e7302d5675b37beac67ea9b6f82e4d39fb3cc languageName: node linkType: hard @@ -13565,13 +13426,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - "raf@npm:^3.1.0": version: 3.4.1 resolution: "raf@npm:3.4.1" @@ -14051,29 +13905,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^8.0.0": - version: 8.0.0 - resolution: "read-pkg-up@npm:8.0.0" - dependencies: - find-up: "npm:^5.0.0" - read-pkg: "npm:^6.0.0" - type-fest: "npm:^1.0.1" - checksum: cf3905ccbe5cd602f23192cc7ca65ed17561bab117eadb9aed817441d5bfc6b9a11215c2a3e9505f501d046818f3c4180dbea61fa83c42083e0b4e407d5cc745 - languageName: node - linkType: hard - -"read-pkg@npm:^6.0.0": - version: 6.0.0 - resolution: "read-pkg@npm:6.0.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^3.0.2" - parse-json: "npm:^5.2.0" - type-fest: "npm:^1.0.1" - checksum: b51ee5eed75324f4fac34c9a40b5e4b403de4c532242be01959c9bbdb1ff9db1c6c2aefaba569622fec49d1ead866e97ba856ab145f6e11039b11f7bec1318ba - languageName: node - linkType: hard - "readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -14142,16 +13973,6 @@ __metadata: languageName: node linkType: hard -"redent@npm:^4.0.0": - version: 4.0.0 - resolution: "redent@npm:4.0.0" - dependencies: - indent-string: "npm:^5.0.0" - strip-indent: "npm:^4.0.0" - checksum: a9b640c8f4b2b5b26a1a908706475ff404dd50a97d6f094bc3c59717be922622927cc7d601d4ae2857d897ad243fd979bd76d751a0481cee8be7024e5fb4c662 - languageName: node - linkType: hard - "redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": version: 1.2.0 resolution: "redis-errors@npm:1.2.0" @@ -14240,9 +14061,9 @@ __metadata: linkType: hard "regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: e25f062c1a183f81c99681691a342760e65c55e8d3a4d4fe347ebe72433b123754b942b70b622959894e11f8a9131dc549bd3c9a5234677db06a4af42add8d12 + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 languageName: node linkType: hard @@ -15294,16 +15115,6 @@ __metadata: languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - "spdx-exceptions@npm:^2.1.0": version: 2.3.0 resolution: "spdx-exceptions@npm:2.3.0" @@ -15311,13 +15122,13 @@ __metadata: languageName: node linkType: hard -"spdx-expression-parse@npm:^3.0.0, spdx-expression-parse@npm:^3.0.1": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" dependencies: spdx-exceptions: "npm:^2.1.0" spdx-license-ids: "npm:^3.0.0" - checksum: 6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + checksum: 965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 languageName: node linkType: hard @@ -15747,15 +15558,6 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-indent@npm:4.0.0" - dependencies: - min-indent: "npm:^1.0.1" - checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -15763,22 +15565,15 @@ __metadata: languageName: node linkType: hard -"style-search@npm:^0.1.0": - version: 0.1.0 - resolution: "style-search@npm:0.1.0" - checksum: 9e5cb735e5dc4fc2f8c61bebdf211d5352f1cf01511a64da12bb726a01e8c6948c50d357eb8fd7893d44b4e3189655bdddcf8ab338f9d508fe89a8942c650b14 - languageName: node - linkType: hard - -"stylehacks@npm:^6.0.0": - version: 6.0.0 - resolution: "stylehacks@npm:6.0.0" +"stylehacks@npm:^6.0.1": + version: 6.0.1 + resolution: "stylehacks@npm:6.0.1" dependencies: browserslist: "npm:^4.21.4" postcss-selector-parser: "npm:^6.0.4" peerDependencies: - postcss: ^8.2.15 - checksum: 6ce277c816dd826fdc765258d612a160bad03dae52ab51ef1676efae07e96923ebeb6880d6522eefc50d2e81cb90b632615120c73aed190f345e8d836def67b6 + postcss: ^8.4.31 + checksum: 0877016f5b2a06b8ceaf39382b0c33da11ea93268209444f67f29b1ce465994058f305fc3bc90dda21e8664c959561fbb06ba12b82289c3b26ba832c6979d513 languageName: node linkType: hard @@ -15850,53 +15645,51 @@ __metadata: languageName: node linkType: hard -"stylelint@npm:^15.10.1": - version: 15.11.0 - resolution: "stylelint@npm:15.11.0" +"stylelint@npm:^16.0.2": + version: 16.0.2 + resolution: "stylelint@npm:16.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.3.1" - "@csstools/css-tokenizer": "npm:^2.2.0" - "@csstools/media-query-list-parser": "npm:^2.1.4" + "@csstools/css-parser-algorithms": "npm:^2.3.2" + "@csstools/css-tokenizer": "npm:^2.2.1" + "@csstools/media-query-list-parser": "npm:^2.1.5" "@csstools/selector-specificity": "npm:^3.0.0" balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" - cosmiconfig: "npm:^8.2.0" + cosmiconfig: "npm:^9.0.0" css-functions-list: "npm:^3.2.1" css-tree: "npm:^2.3.1" debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.1" + fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^7.0.0" + file-entry-cache: "npm:^7.0.2" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.2.4" - import-lazy: "npm:^4.0.0" + ignore: "npm:^5.3.0" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.29.0" mathml-tag-names: "npm:^2.1.3" - meow: "npm:^10.1.5" + meow: "npm:^12.1.1" micromatch: "npm:^4.0.5" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.0" - postcss: "npm:^8.4.28" + postcss: "npm:^8.4.32" postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-safe-parser: "npm:^6.0.0" + postcss-safe-parser: "npm:^7.0.0" postcss-selector-parser: "npm:^6.0.13" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - style-search: "npm:^0.1.0" + strip-ansi: "npm:^7.1.0" supports-hyperlinks: "npm:^3.0.0" svg-tags: "npm:^1.0.0" table: "npm:^6.8.1" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 2d88b7293e308b7e418c14ba4130777b1a28b214304957f03b41a6dc8e00005266caf47479f718a6ec5e572cb52e903ca34aabf3febbe3a3ae32fff6b018d9fd + checksum: 5ec755e209beb1877ff40d50f18c1ebb05bf251925da1f98f28fb3911e4031195eb86adaf641ac5cdb01ba973f4c999bc0c6b0270d08c1d5c070adbdd9e734cf languageName: node linkType: hard @@ -16004,19 +15797,20 @@ __metadata: languageName: node linkType: hard -"svgo@npm:^3.0.2": - version: 3.0.2 - resolution: "svgo@npm:3.0.2" +"svgo@npm:^3.0.5": + version: 3.1.0 + resolution: "svgo@npm:3.1.0" dependencies: "@trysound/sax": "npm:0.2.0" commander: "npm:^7.2.0" css-select: "npm:^5.1.0" css-tree: "npm:^2.2.1" - csso: "npm:^5.0.5" + css-what: "npm:^6.1.0" + csso: "npm:5.0.5" picocolors: "npm:^1.0.0" bin: - svgo: bin/svgo - checksum: d682d416dd68cdcbab5e1e77b93d621325480e97dfe87777e845ea9a0ce05d03fc837ce17080af67e787f6b24430b805ff79f4591dda30a0ab4060b6a3ac2adf + svgo: ./bin/svgo + checksum: b3f00b3319dee6ddc53f8b8ac5acef581860e1708c98b492169e096621edc1bdf46e3778099e3dffb5116bf0d4c074a686099843dbc020c73b3ccfae7b6a88f0 languageName: node linkType: hard @@ -16350,13 +16144,6 @@ __metadata: languageName: node linkType: hard -"trim-newlines@npm:^4.0.2": - version: 4.1.1 - resolution: "trim-newlines@npm:4.1.1" - checksum: 70e60e652305efd0dda1f2bce1a5edc9bb5834a2e00d05dfde178715ec48faa8264a2bc1a7efc593b7936d03f6d42c398616329eef44b7bd5070180a02056981 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -16366,15 +16153,15 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.2": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" dependencies: "@types/json5": "npm:^0.0.29" json5: "npm:^1.0.2" minimist: "npm:^1.2.6" strip-bom: "npm:^3.0.0" - checksum: fdc92bb7b18b31c0e76f8ec4f98d07236b09590fd6578e587ad024792c8b2235d65125a8fd007fa47a84400f84ceccbf33f24e5198d953249e7204f4cef3517c + checksum: 5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 languageName: node linkType: hard @@ -16448,13 +16235,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^1.0.1, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 - languageName: node - linkType: hard - "type-fest@npm:^3.0.0": version: 3.13.1 resolution: "type-fest@npm:3.13.1" @@ -16921,16 +16701,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -17763,8 +17533,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0, ws@npm:^8.12.1, ws@npm:^8.14.2": - version: 8.15.0 - resolution: "ws@npm:8.15.0" + version: 8.15.1 + resolution: "ws@npm:8.15.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17773,7 +17543,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: b778a405b2589ffbf549323e2f404f1f72e372a049d332d2f0b1f33057e9fbb14a05aa474cb156e4584b418cd95edf4297c0ca5263d6519e8009064bf8e0b80d + checksum: 9964360dd5ab35c7376bd7c4295a3c8bd44ea0838c9413742548a6fb3ec371fc6c18552d5b8e76bdc21536db1909765612815bae072674b5ec69971605395a96 languageName: node linkType: hard @@ -17857,7 +17627,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.1, yargs-parser@npm:^20.2.9": +"yargs-parser@npm:^20.2.1": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72