diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 73fe22f3a..4eebb74d1 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -26,7 +26,6 @@ services: ports: - '127.0.0.1:3000:3000' - '127.0.0.1:4000:4000' - - '127.0.0.1:80:3000' networks: - external_network - internal_network diff --git a/.eslintrc.js b/.eslintrc.js index 259c86157..8394d98b9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -7,6 +7,7 @@ module.exports = { 'plugin:jsx-a11y/recommended', 'plugin:import/recommended', 'plugin:promise/recommended', + 'plugin:jsdoc/recommended', ], env: { @@ -238,6 +239,14 @@ module.exports = { 'formatjs/no-useless-message': 'error', 'formatjs/prefer-formatted-message': 'error', 'formatjs/prefer-pound-in-plural': 'error', + + 'jsdoc/check-types': 'off', + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-param-description': 'off', + 'jsdoc/require-property-description': 'off', + 'jsdoc/require-returns-description': 'off', + 'jsdoc/require-returns': 'off', }, overrides: [ @@ -270,10 +279,13 @@ module.exports = { 'plugin:import/recommended', 'plugin:import/typescript', 'plugin:promise/recommended', + 'plugin:jsdoc/recommended', ], rules: { '@typescript-eslint/no-explicit-any': 'off', + + 'jsdoc/require-jsdoc': 'off', }, }, { diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 9deba6642..58e82a90c 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -428,10 +428,6 @@ RSpec/AnyInstance: - 'spec/workers/activitypub/delivery_worker_spec.rb' - 'spec/workers/web/push_notification_worker_spec.rb' -RSpec/BeforeAfterAll: - Exclude: - - 'spec/requests/localization_spec.rb' - # Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: @@ -861,7 +857,6 @@ RSpec/PendingWithoutReason: Exclude: - 'spec/controllers/statuses_controller_spec.rb' - 'spec/models/account_spec.rb' - - 'spec/models/user_spec.rb' # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Strict, EnforcedStyle, AllowedExplicitMatchers. @@ -1153,32 +1148,6 @@ RSpec/VerifiedDoubles: - 'spec/workers/feed_insert_worker_spec.rb' - 'spec/workers/regeneration_worker_spec.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: ExpectedOrder, Include. -# ExpectedOrder: index, show, new, edit, create, update, destroy -# Include: app/controllers/**/*.rb -Rails/ActionOrder: - Exclude: - - 'app/controllers/admin/announcements_controller.rb' - - 'app/controllers/admin/roles_controller.rb' - - 'app/controllers/admin/rules_controller.rb' - - 'app/controllers/admin/warning_presets_controller.rb' - - 'app/controllers/admin/webhooks_controller.rb' - - 'app/controllers/api/v1/admin/domain_allows_controller.rb' - - 'app/controllers/api/v1/admin/domain_blocks_controller.rb' - - 'app/controllers/api/v1/admin/email_domain_blocks_controller.rb' - - 'app/controllers/api/v1/admin/ip_blocks_controller.rb' - - 'app/controllers/api/v1/filters_controller.rb' - - 'app/controllers/api/v1/media_controller.rb' - - 'app/controllers/api/v1/push/subscriptions_controller.rb' - - 'app/controllers/api/v2/filters/keywords_controller.rb' - - 'app/controllers/api/v2/filters/statuses_controller.rb' - - 'app/controllers/api/v2/filters_controller.rb' - - 'app/controllers/auth/registrations_controller.rb' - - 'app/controllers/filters_controller.rb' - - 'app/controllers/settings/applications_controller.rb' - - 'app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: Include. # Include: app/models/**/*.rb @@ -1234,22 +1203,6 @@ Rails/BulkChangeTable: - 'db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb' - 'db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/CompactBlank: - Exclude: - - 'app/helpers/application_helper.rb' - - 'app/helpers/statuses_helper.rb' - - 'app/models/concerns/attachmentable.rb' - - 'app/models/poll.rb' - - 'app/services/import_service.rb' - - 'config/initializers/paperclip.rb' - -# This cop supports safe autocorrection (--autocorrect). -Rails/ContentTag: - Exclude: - - 'app/helpers/application_helper.rb' - - 'app/helpers/branding_helper.rb' - # Configuration parameters: Include. # Include: db/migrate/*.rb Rails/CreateTableWithTimestamps: @@ -1373,39 +1326,11 @@ Rails/HasManyOrHasOneDependent: - 'app/models/user.rb' - 'app/models/web/push_subscription.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Include. -# Include: spec/**/*, test/**/* -Rails/HttpPositionalArguments: - Exclude: - - 'spec/config/initializers/rack_attack_spec.rb' - -# Configuration parameters: Include. -# Include: spec/**/*.rb, test/**/*.rb -Rails/I18nLocaleAssignment: - Exclude: - - 'spec/controllers/auth/registrations_controller_spec.rb' - - 'spec/helpers/application_helper_spec.rb' - - 'spec/requests/localization_spec.rb' - Rails/I18nLocaleTexts: Exclude: - 'lib/tasks/mastodon.rake' - 'spec/helpers/flashes_helper_spec.rb' -# Configuration parameters: IgnoreScopes, Include. -# Include: app/models/**/*.rb -Rails/InverseOf: - Exclude: - - 'app/models/appeal.rb' - - 'app/models/concerns/account_interactions.rb' - - 'app/models/custom_emoji.rb' - - 'app/models/domain_block.rb' - - 'app/models/follow_recommendation.rb' - - 'app/models/instance.rb' - - 'app/models/notification.rb' - - 'app/models/status.rb' - # Configuration parameters: Include. # Include: app/controllers/**/*.rb, app/mailers/**/*.rb Rails/LexicallyScopedActionFilter: @@ -1433,23 +1358,10 @@ Rails/NegateInclude: - 'app/workers/web/push_notification_worker.rb' - 'lib/paperclip/color_extractor.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: Include. -# Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb -Rails/Output: - Exclude: - - 'lib/mastodon/ip_blocks_cli.rb' - Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank. -Rails/Present: - Exclude: - - 'config/initializers/content_security_policy.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Include. # Include: **/Rakefile, **/*.rake @@ -1533,15 +1445,6 @@ Rails/SkipsModelValidations: - 'spec/services/follow_service_spec.rb' - 'spec/services/update_account_service_spec.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/SquishedSQLHeredocs: - Exclude: - - 'db/migrate/20170920024819_status_ids_to_timestamp_ids.rb' - - 'db/migrate/20180608213548_reject_following_blocked_users.rb' - - 'db/post_migrate/20190519130537_remove_boosts_widening_audience.rb' - - 'lib/mastodon/snowflake.rb' - - 'lib/tasks/tests.rake' - Rails/TransactionExitStatement: Exclude: - 'app/lib/activitypub/activity/announce.rb' diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 351b9a991..8f9708183 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -14,6 +14,10 @@ class Admin::AnnouncementsController < Admin::BaseController @announcement = Announcement.new end + def edit + authorize :announcement, :update? + end + def create authorize :announcement, :create? @@ -28,10 +32,6 @@ class Admin::AnnouncementsController < Admin::BaseController end end - def edit - authorize :announcement, :update? - end - def update authorize :announcement, :update? diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb index d76aa745b..bcfc11159 100644 --- a/app/controllers/admin/roles_controller.rb +++ b/app/controllers/admin/roles_controller.rb @@ -16,6 +16,10 @@ module Admin @role = UserRole.new end + def edit + authorize @role, :update? + end + def create authorize :user_role, :create? @@ -30,10 +34,6 @@ module Admin end end - def edit - authorize @role, :update? - end - def update authorize @role, :update? diff --git a/app/controllers/admin/rules_controller.rb b/app/controllers/admin/rules_controller.rb index f3bed3ad8..d31aec6ea 100644 --- a/app/controllers/admin/rules_controller.rb +++ b/app/controllers/admin/rules_controller.rb @@ -11,6 +11,10 @@ module Admin @rule = Rule.new end + def edit + authorize @rule, :update? + end + def create authorize :rule, :create? @@ -24,10 +28,6 @@ module Admin end end - def edit - authorize @rule, :update? - end - def update authorize @rule, :update? diff --git a/app/controllers/admin/warning_presets_controller.rb b/app/controllers/admin/warning_presets_controller.rb index b376f8d9b..efbf65b11 100644 --- a/app/controllers/admin/warning_presets_controller.rb +++ b/app/controllers/admin/warning_presets_controller.rb @@ -11,6 +11,10 @@ module Admin @warning_preset = AccountWarningPreset.new end + def edit + authorize @warning_preset, :update? + end + def create authorize :account_warning_preset, :create? @@ -24,10 +28,6 @@ module Admin end end - def edit - authorize @warning_preset, :update? - end - def update authorize @warning_preset, :update? diff --git a/app/controllers/admin/webhooks_controller.rb b/app/controllers/admin/webhooks_controller.rb index d6fb1a4ea..1ed3fd18a 100644 --- a/app/controllers/admin/webhooks_controller.rb +++ b/app/controllers/admin/webhooks_controller.rb @@ -10,12 +10,20 @@ module Admin @webhooks = Webhook.page(params[:page]) end + def show + authorize @webhook, :show? + end + def new authorize :webhook, :create? @webhook = Webhook.new end + def edit + authorize @webhook, :update? + end + def create authorize :webhook, :create? @@ -28,14 +36,6 @@ module Admin end end - def show - authorize @webhook, :show? - end - - def edit - authorize @webhook, :update? - end - def update authorize @webhook, :update? diff --git a/app/controllers/api/v1/admin/domain_allows_controller.rb b/app/controllers/api/v1/admin/domain_allows_controller.rb index 0658199f0..61e1d481c 100644 --- a/app/controllers/api/v1/admin/domain_allows_controller.rb +++ b/app/controllers/api/v1/admin/domain_allows_controller.rb @@ -16,6 +16,16 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController PAGINATION_PARAMS = %i(limit).freeze + def index + authorize :domain_allow, :index? + render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer + end + + def show + authorize @domain_allow, :show? + render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer + end + def create authorize :domain_allow, :create? @@ -29,16 +39,6 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer end - def index - authorize :domain_allow, :index? - render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer - end - - def show - authorize @domain_allow, :show? - render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer - end - def destroy authorize @domain_allow, :destroy? UnallowDomainService.new.call(@domain_allow) diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb index 8b77e9717..2538c7c7c 100644 --- a/app/controllers/api/v1/admin/domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb @@ -16,6 +16,16 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController PAGINATION_PARAMS = %i(limit).freeze + def index + authorize :domain_block, :index? + render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer + end + + def show + authorize @domain_block, :show? + render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer + end + def create authorize :domain_block, :create? @@ -28,16 +38,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer end - def index - authorize :domain_block, :index? - render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer - end - - def show - authorize @domain_block, :show? - render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer - end - def update authorize @domain_block, :update? @domain_block.update!(domain_block_params) diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb index e53d0b157..850eda622 100644 --- a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb @@ -18,15 +18,6 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController limit ).freeze - def create - authorize :email_domain_block, :create? - - @email_domain_block = EmailDomainBlock.create!(resource_params) - log_action :create, @email_domain_block - - render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer - end - def index authorize :email_domain_block, :index? render json: @email_domain_blocks, each_serializer: REST::Admin::EmailDomainBlockSerializer @@ -37,6 +28,15 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer end + def create + authorize :email_domain_block, :create? + + @email_domain_block = EmailDomainBlock.create!(resource_params) + log_action :create, @email_domain_block + + render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer + end + def destroy authorize @email_domain_block, :destroy? @email_domain_block.destroy! diff --git a/app/controllers/api/v1/admin/ip_blocks_controller.rb b/app/controllers/api/v1/admin/ip_blocks_controller.rb index 201ab6b1f..61c191234 100644 --- a/app/controllers/api/v1/admin/ip_blocks_controller.rb +++ b/app/controllers/api/v1/admin/ip_blocks_controller.rb @@ -18,13 +18,6 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController limit ).freeze - def create - authorize :ip_block, :create? - @ip_block = IpBlock.create!(resource_params) - log_action :create, @ip_block - render json: @ip_block, serializer: REST::Admin::IpBlockSerializer - end - def index authorize :ip_block, :index? render json: @ip_blocks, each_serializer: REST::Admin::IpBlockSerializer @@ -35,6 +28,13 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController render json: @ip_block, serializer: REST::Admin::IpBlockSerializer end + def create + authorize :ip_block, :create? + @ip_block = IpBlock.create!(resource_params) + log_action :create, @ip_block + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + def update authorize @ip_block, :update? @ip_block.update(resource_params) diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb index 772791b25..ed98acce3 100644 --- a/app/controllers/api/v1/filters_controller.rb +++ b/app/controllers/api/v1/filters_controller.rb @@ -11,6 +11,10 @@ class Api::V1::FiltersController < Api::BaseController render json: @filters, each_serializer: REST::V1::FilterSerializer end + def show + render json: @filter, serializer: REST::V1::FilterSerializer + end + def create ApplicationRecord.transaction do filter_category = current_account.custom_filters.create!(filter_params) @@ -20,10 +24,6 @@ class Api::V1::FiltersController < Api::BaseController render json: @filter, serializer: REST::V1::FilterSerializer end - def show - render json: @filter, serializer: REST::V1::FilterSerializer - end - def update ApplicationRecord.transaction do @filter.update!(keyword_params) diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb index f9c935bf3..7485438db 100644 --- a/app/controllers/api/v1/media_controller.rb +++ b/app/controllers/api/v1/media_controller.rb @@ -6,6 +6,10 @@ class Api::V1::MediaController < Api::BaseController before_action :set_media_attachment, except: [:create] before_action :check_processing, except: [:create] + def show + render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment + end + def create @media_attachment = current_account.media_attachments.create!(media_attachment_params) render json: @media_attachment, serializer: REST::MediaAttachmentSerializer @@ -15,10 +19,6 @@ class Api::V1::MediaController < Api::BaseController render json: processing_error, status: 500 end - def show - render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment - end - def update @media_attachment.update!(updateable_media_attachment_params) render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 7148d63a4..3634acf95 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -6,6 +6,10 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController before_action :set_push_subscription before_action :check_push_subscription, only: [:show, :update] + def show + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer + end + def create @push_subscription&.destroy! @@ -21,10 +25,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end - def show - render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer - end - def update @push_subscription.update!(data: data_params) render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer diff --git a/app/controllers/api/v2/filters/keywords_controller.rb b/app/controllers/api/v2/filters/keywords_controller.rb index c63e1d986..fe1a99194 100644 --- a/app/controllers/api/v2/filters/keywords_controller.rb +++ b/app/controllers/api/v2/filters/keywords_controller.rb @@ -12,13 +12,13 @@ class Api::V2::Filters::KeywordsController < Api::BaseController render json: @keywords, each_serializer: REST::FilterKeywordSerializer end - def create - @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params) - + def show render json: @keyword, serializer: REST::FilterKeywordSerializer end - def show + def create + @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params) + render json: @keyword, serializer: REST::FilterKeywordSerializer end diff --git a/app/controllers/api/v2/filters/statuses_controller.rb b/app/controllers/api/v2/filters/statuses_controller.rb index 755c14cff..2e95497a6 100644 --- a/app/controllers/api/v2/filters/statuses_controller.rb +++ b/app/controllers/api/v2/filters/statuses_controller.rb @@ -12,13 +12,13 @@ class Api::V2::Filters::StatusesController < Api::BaseController render json: @status_filters, each_serializer: REST::FilterStatusSerializer end - def create - @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params) - + def show render json: @status_filter, serializer: REST::FilterStatusSerializer end - def show + def create + @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params) + render json: @status_filter, serializer: REST::FilterStatusSerializer end diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb index 8ff3076cf..2fcdeeae4 100644 --- a/app/controllers/api/v2/filters_controller.rb +++ b/app/controllers/api/v2/filters_controller.rb @@ -11,13 +11,13 @@ class Api::V2::FiltersController < Api::BaseController render json: @filters, each_serializer: REST::FilterSerializer, rules_requested: true end - def create - @filter = current_account.custom_filters.create!(resource_params) - + def show render json: @filter, serializer: REST::FilterSerializer, rules_requested: true end - def show + def create + @filter = current_account.custom_filters.create!(resource_params) + render json: @filter, serializer: REST::FilterSerializer, rules_requested: true end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 2322de465..a49d23a9f 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -25,16 +25,16 @@ class Auth::RegistrationsController < Devise::RegistrationsController super(&:build_invite_request) end - def destroy - not_found - end - def update super do |resource| resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password? end end + def destroy + not_found + end + protected def update_resource(resource, params) diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index 203241aff..180ddf070 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -18,6 +18,8 @@ class FiltersController < ApplicationController @filter.keywords.build end + def edit; end + def create @filter = current_account.custom_filters.build(resource_params) @@ -28,8 +30,6 @@ class FiltersController < ApplicationController end end - def edit; end - def update if @filter.update(resource_params) redirect_to filters_path diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb index e6e137c2b..d4b720568 100644 --- a/app/controllers/settings/applications_controller.rb +++ b/app/controllers/settings/applications_controller.rb @@ -8,6 +8,8 @@ class Settings::ApplicationsController < Settings::BaseController @applications = current_user.applications.order(id: :desc).page(params[:page]) end + def show; end + def new @application = Doorkeeper::Application.new( redirect_uri: Doorkeeper.configuration.native_redirect_uri, @@ -15,8 +17,6 @@ class Settings::ApplicationsController < Settings::BaseController ) end - def show; end - def create @application = current_user.applications.build(application_params) diff --git a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb index 5a9029a42..3f9e71357 100644 --- a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb +++ b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb @@ -8,9 +8,8 @@ module Settings before_action :require_otp_enabled before_action :require_webauthn_enabled, only: [:index, :destroy] - def new; end - def index; end + def new; end def options current_user.update(webauthn_id: WebAuthn.generate_user_id) unless current_user.webauthn_id diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e3da47d9b..879752cf7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -118,7 +118,7 @@ module ApplicationHelper end def check_icon - content_tag(:svg, tag(:path, 'fill-rule': 'evenodd', 'clip-rule': 'evenodd', d: 'M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z'), xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20', fill: 'currentColor') + content_tag(:svg, tag.path('fill-rule': 'evenodd', 'clip-rule': 'evenodd', d: 'M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z'), xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20', fill: 'currentColor') end def visibility_icon(status) @@ -152,7 +152,7 @@ module ApplicationHelper end def opengraph(property, content) - tag(:meta, content: content, property: property) + tag.meta(content: content, property: property) end def body_classes @@ -162,7 +162,7 @@ module ApplicationHelper output << 'system-font' if current_account&.user&.setting_system_font_ui output << (current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion') output << 'rtl' if locale_direction == 'rtl' - output.reject(&:blank?).join(' ') + output.compact_blank.join(' ') end def cdn_host diff --git a/app/helpers/branding_helper.rb b/app/helpers/branding_helper.rb index 548c95411..2b9c233c2 100644 --- a/app/helpers/branding_helper.rb +++ b/app/helpers/branding_helper.rb @@ -11,11 +11,11 @@ module BrandingHelper end def _logo_as_symbol_wordmark - content_tag(:svg, tag(:use, href: '#logo-symbol-wordmark'), viewBox: '0 0 261 66', class: 'logo logo--wordmark') + content_tag(:svg, tag.use(href: '#logo-symbol-wordmark'), viewBox: '0 0 261 66', class: 'logo logo--wordmark') end def _logo_as_symbol_icon - content_tag(:svg, tag(:use, href: '#logo-symbol-icon'), viewBox: '0 0 79 79', class: 'logo logo--icon') + content_tag(:svg, tag.use(href: '#logo-symbol-icon'), viewBox: '0 0 79 79', class: 'logo logo--icon') end def render_logo diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index 9f8759367..f1f1ea872 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -51,14 +51,14 @@ module StatusesHelper end def status_description(status) - components = [[media_summary(status), status_text_summary(status)].reject(&:blank?).join(' · ')] + components = [[media_summary(status), status_text_summary(status)].compact_blank.join(' · ')] if status.spoiler_text.blank? components << status.text components << poll_summary(status) end - components.reject(&:blank?).join("\n\n") + components.compact_blank.join("\n\n") end def stream_link_target diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 9c0ef83df..f0d50ccf1 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -441,16 +441,12 @@ export function changeUploadCompose(id, params) { // Editing already-attached media is deferred to editing the post itself. // For simplicity's sake, fake an API reply. if (media && !media.get('unattached')) { - let { description, focus } = params; - const data = media.toJS(); - - if (description) { - data.description = description; - } + const { focus, ...other } = params; + const data = { ...media.toJS(), ...other }; if (focus) { - focus = focus.split(','); - data.meta = { focus: { x: parseFloat(focus[0]), y: parseFloat(focus[1]) } }; + const [x, y] = focus.split(','); + data.meta = { focus: { x: parseFloat(x), y: parseFloat(y) } }; } dispatch(changeUploadComposeSuccess(data, true)); diff --git a/app/javascript/flavours/glitch/actions/picture_in_picture.js b/app/javascript/flavours/glitch/actions/picture_in_picture.js index 6b9ff7709..898375abe 100644 --- a/app/javascript/flavours/glitch/actions/picture_in_picture.js +++ b/app/javascript/flavours/glitch/actions/picture_in_picture.js @@ -20,7 +20,7 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; * @param {string} accountId * @param {string} playerType * @param {MediaProps} props - * @return {object} + * @returns {object} */ export const deployPictureInPicture = (statusId, accountId, playerType, props) => { // @ts-expect-error diff --git a/app/javascript/flavours/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js index 8c161ea83..dbf668ccb 100644 --- a/app/javascript/flavours/glitch/actions/streaming.js +++ b/app/javascript/flavours/glitch/actions/streaming.js @@ -27,7 +27,7 @@ const { messages } = getLocale(); /** * @param {number} max - * @return {number} + * @returns {number} */ const randomUpTo = max => Math.floor(Math.random() * Math.floor(max)); @@ -40,7 +40,7 @@ const randomUpTo = max => * @param {function(Function, Function): void} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] - * @return {function(): void} + * @returns {function(): void} */ export const connectTimelineStream = (timelineId, channelName, params = {}, options = {}) => connectStream(channelName, params, (dispatch, getState) => { @@ -132,7 +132,7 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => { }; /** - * @return {function(): void} + * @returns {function(): void} */ export const connectUserStream = () => // @ts-expect-error @@ -141,7 +141,7 @@ export const connectUserStream = () => /** * @param {Object} options * @param {boolean} [options.onlyMedia] - * @return {function(): void} + * @returns {function(): void} */ export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => (fillCommunityTimelineGaps({ onlyMedia })) }); @@ -151,7 +151,7 @@ export const connectCommunityStream = ({ onlyMedia } = {}) => * @param {boolean} [options.onlyMedia] * @param {boolean} [options.onlyRemote] * @param {boolean} [options.allowLocalOnly] - * @return {function(): void} + * @returns {function(): void} */ export const connectPublicStream = ({ onlyMedia, onlyRemote, allowLocalOnly } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => fillPublicTimelineGaps({ onlyMedia, onlyRemote, allowLocalOnly }) }); @@ -161,20 +161,20 @@ export const connectPublicStream = ({ onlyMedia, onlyRemote, allowLocalOnly } = * @param {string} tagName * @param {boolean} onlyLocal * @param {function(object): boolean} accept - * @return {function(): void} + * @returns {function(): void} */ export const connectHashtagStream = (columnId, tagName, onlyLocal, accept) => connectTimelineStream(`hashtag:${columnId}${onlyLocal ? ':local' : ''}`, `hashtag${onlyLocal ? ':local' : ''}`, { tag: tagName }, { accept }); /** - * @return {function(): void} + * @returns {function(): void} */ export const connectDirectStream = () => connectTimelineStream('direct', 'direct'); /** * @param {string} listId - * @return {function(): void} + * @returns {function(): void} */ export const connectListStream = listId => connectTimelineStream(`list:${listId}`, 'list', { list: listId }, { fillGaps: () => fillListTimelineGaps(listId) }); diff --git a/app/javascript/flavours/glitch/components/blurhash.jsx b/app/javascript/flavours/glitch/components/blurhash.jsx index 07cd31b6c..f5c58e04e 100644 --- a/app/javascript/flavours/glitch/components/blurhash.jsx +++ b/app/javascript/flavours/glitch/components/blurhash.jsx @@ -20,9 +20,8 @@ import PropTypes from 'prop-types'; /** * Component that is used to render blurred of blurhash string - * * @param {BlurhashProps} param1 Props of the component - * @returns Canvas which will render blurred region element to embed + * @returns {JSX.Element} Canvas which will render blurred region element to embed */ function Blurhash({ hash, diff --git a/app/javascript/flavours/glitch/components/common_counter.jsx b/app/javascript/flavours/glitch/components/common_counter.jsx index dd9b62de9..9964be516 100644 --- a/app/javascript/flavours/glitch/components/common_counter.jsx +++ b/app/javascript/flavours/glitch/components/common_counter.jsx @@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl'; /** * Returns custom renderer for one of the common counter types - * * @param {"statuses" | "following" | "followers"} counterType * Type of the counter * @param {boolean} isBold Whether display number must be displayed in bold diff --git a/app/javascript/flavours/glitch/components/hashtag.jsx b/app/javascript/flavours/glitch/components/hashtag.jsx index c4701055c..235aaeb3c 100644 --- a/app/javascript/flavours/glitch/components/hashtag.jsx +++ b/app/javascript/flavours/glitch/components/hashtag.jsx @@ -35,7 +35,6 @@ class SilentErrorBoundary extends React.Component { /** * Used to render counter of how much people are talking about hashtag - * * @type {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element} */ export const accountsCountRenderer = (displayNumber, pluralReady) => ( diff --git a/app/javascript/flavours/glitch/components/icon.jsx b/app/javascript/flavours/glitch/components/icon.jsx deleted file mode 100644 index d8a17722f..000000000 --- a/app/javascript/flavours/glitch/components/icon.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; - -export default class Icon extends React.PureComponent { - - static propTypes = { - id: PropTypes.string.isRequired, - className: PropTypes.string, - fixedWidth: PropTypes.bool, - }; - - render () { - const { id, className, fixedWidth, ...other } = this.props; - - return ( - - ); - } - -} diff --git a/app/javascript/flavours/glitch/components/icon.tsx b/app/javascript/flavours/glitch/components/icon.tsx new file mode 100644 index 000000000..d85fff6ef --- /dev/null +++ b/app/javascript/flavours/glitch/components/icon.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import classNames from 'classnames'; + +type Props = { + id: string; + className?: string; + fixedWidth?: boolean; + children?: never; + [key: string]: any; +} +export const Icon: React.FC = ({ id, className, fixedWidth, ...other }) => + ; + +export default Icon; diff --git a/app/javascript/flavours/glitch/components/icon_with_badge.jsx b/app/javascript/flavours/glitch/components/icon_with_badge.jsx deleted file mode 100644 index a42ba4589..000000000 --- a/app/javascript/flavours/glitch/components/icon_with_badge.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'flavours/glitch/components/icon'; - -const formatNumber = num => num > 40 ? '40+' : num; - -const IconWithBadge = ({ id, count, issueBadge, className }) => ( - - - {count > 0 && {formatNumber(count)}} - {issueBadge && } - -); - -IconWithBadge.propTypes = { - id: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - issueBadge: PropTypes.bool, - className: PropTypes.string, -}; - -export default IconWithBadge; diff --git a/app/javascript/flavours/glitch/components/icon_with_badge.tsx b/app/javascript/flavours/glitch/components/icon_with_badge.tsx new file mode 100644 index 000000000..487bf326a --- /dev/null +++ b/app/javascript/flavours/glitch/components/icon_with_badge.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Icon } from './icon'; + +const formatNumber = (num: number): number | string => num > 40 ? '40+' : num; + +type Props = { + id: string; + count: number; + issueBadge: boolean; + className: string; +} +const IconWithBadge: React.FC = ({ id, count, issueBadge, className }) => ( + + + {count > 0 && {formatNumber(count)}} + {issueBadge && } + +); + +export default IconWithBadge; diff --git a/app/javascript/mastodon/components/relative_timestamp.jsx b/app/javascript/flavours/glitch/components/relative_timestamp.tsx similarity index 85% rename from app/javascript/mastodon/components/relative_timestamp.jsx rename to app/javascript/flavours/glitch/components/relative_timestamp.tsx index e6c3e0880..89cad0665 100644 --- a/app/javascript/mastodon/components/relative_timestamp.jsx +++ b/app/javascript/flavours/glitch/components/relative_timestamp.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { injectIntl, defineMessages } from 'react-intl'; -import PropTypes from 'prop-types'; +import { injectIntl, defineMessages, InjectedIntl } from 'react-intl'; const messages = defineMessages({ today: { id: 'relative_time.today', defaultMessage: 'today' }, @@ -28,12 +27,12 @@ const dateFormatOptions = { day: '2-digit', hour: '2-digit', minute: '2-digit', -}; +} as const; const shortDateFormatOptions = { month: 'short', day: 'numeric', -}; +} as const; const SECOND = 1000; const MINUTE = 1000 * 60; @@ -42,7 +41,7 @@ const DAY = 1000 * 60 * 60 * 24; const MAX_DELAY = 2147483647; -const selectUnits = delta => { +const selectUnits = (delta: number) => { const absDelta = Math.abs(delta); if (absDelta < MINUTE) { @@ -56,7 +55,7 @@ const selectUnits = delta => { return 'day'; }; -const getUnitDelay = units => { +const getUnitDelay = (units: string) => { switch (units) { case 'second': return SECOND; @@ -71,7 +70,7 @@ const getUnitDelay = units => { } }; -export const timeAgoString = (intl, date, now, year, timeGiven, short) => { +export const timeAgoString = (intl: InjectedIntl, date: Date, now: number, year: number, timeGiven: boolean, short?: boolean) => { const delta = now - date.getTime(); let relativeTime; @@ -99,7 +98,7 @@ export const timeAgoString = (intl, date, now, year, timeGiven, short) => { return relativeTime; }; -const timeRemainingString = (intl, date, now, timeGiven = true) => { +const timeRemainingString = (intl: InjectedIntl, date: Date, now: number, timeGiven = true) => { const delta = date.getTime() - now; let relativeTime; @@ -121,15 +120,17 @@ const timeRemainingString = (intl, date, now, timeGiven = true) => { return relativeTime; }; -class RelativeTimestamp extends React.Component { - - static propTypes = { - intl: PropTypes.object.isRequired, - timestamp: PropTypes.string.isRequired, - year: PropTypes.number.isRequired, - futureDate: PropTypes.bool, - short: PropTypes.bool, - }; +type Props = { + intl: InjectedIntl; + timestamp: string; + year: number; + futureDate?: boolean; + short?: boolean; +} +type States = { + now: number; +} +class RelativeTimestamp extends React.Component { state = { now: this.props.intl.now(), @@ -140,7 +141,9 @@ class RelativeTimestamp extends React.Component { short: true, }; - shouldComponentUpdate (nextProps, nextState) { + _timer: number | undefined; + + shouldComponentUpdate (nextProps: Props, nextState: States) { // As of right now the locale doesn't change without a new page load, // but we might as well check in case that ever changes. return this.props.timestamp !== nextProps.timestamp || @@ -148,7 +151,7 @@ class RelativeTimestamp extends React.Component { this.state.now !== nextState.now; } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps: Props) { if (this.props.timestamp !== nextProps.timestamp) { this.setState({ now: this.props.intl.now() }); } @@ -158,16 +161,16 @@ class RelativeTimestamp extends React.Component { this._scheduleNextUpdate(this.props, this.state); } - componentWillUpdate (nextProps, nextState) { + UNSAFE_componentWillUpdate (nextProps: Props, nextState: States) { this._scheduleNextUpdate(nextProps, nextState); } componentWillUnmount () { - clearTimeout(this._timer); + window.clearTimeout(this._timer); } - _scheduleNextUpdate (props, state) { - clearTimeout(this._timer); + _scheduleNextUpdate (props: Props, state: States) { + window.clearTimeout(this._timer); const { timestamp } = props; const delta = (new Date(timestamp)).getTime() - state.now; @@ -176,7 +179,7 @@ class RelativeTimestamp extends React.Component { const updateInterval = 1000 * 10; const delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder); - this._timer = setTimeout(() => { + this._timer = window.setTimeout(() => { this.setState({ now: this.props.intl.now() }); }, delay); } diff --git a/app/javascript/flavours/glitch/components/short_number.jsx b/app/javascript/flavours/glitch/components/short_number.jsx index 861d0bc58..0c40941c0 100644 --- a/app/javascript/flavours/glitch/components/short_number.jsx +++ b/app/javascript/flavours/glitch/components/short_number.jsx @@ -24,7 +24,6 @@ import { FormattedMessage, FormattedNumber } from 'react-intl'; /** * Component that renders short big number to a shorter version - * * @param {ShortNumberProps} param0 Props for the component * @returns {JSX.Element} Rendered number */ @@ -58,7 +57,6 @@ ShortNumber.propTypes = { /** * Renders short number into corresponding localizable react fragment - * * @param {ShortNumberCounterProps} param0 Props for the component * @returns {JSX.Element} FormattedMessage ready to be embedded in code */ diff --git a/app/javascript/flavours/glitch/features/audio/index.jsx b/app/javascript/flavours/glitch/features/audio/index.jsx index ba8842791..f5bffb973 100644 --- a/app/javascript/flavours/glitch/features/audio/index.jsx +++ b/app/javascript/flavours/glitch/features/audio/index.jsx @@ -476,7 +476,7 @@ class Audio extends React.PureComponent { } return ( -
+
({ }); const mapDispatchToProps = dispatch => ({ - /** Set options in the redux store */ + /** + * Set options in the redux store + * @param opts + */ setOpt: (opts) => dispatch(doodleSet(opts)), - /** Submit doodle for upload */ + /** + * Submit doodle for upload + * @param file + */ submit: (file) => dispatch(uploadCompose([file])), }); @@ -230,7 +236,10 @@ class DoodleModal extends ImmutablePureComponent { //endregion - /** Key up handler */ + /** + * Key up handler + * @param e + */ handleKeyUp = (e) => { if (e.target.nodeName === 'INPUT') return; @@ -256,7 +265,10 @@ class DoodleModal extends ImmutablePureComponent { } }; - /** Key down handler */ + /** + * Key down handler + * @param e + */ handleKeyDown = (e) => { if (e.key === 'Control' || e.key === 'Meta') { this.controlHeld = true; @@ -292,7 +304,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set reference to the canvas element. * This is called during component init - * * @param elem - canvas element */ setCanvasRef = (elem) => { @@ -334,7 +345,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set up the sketcher instance - * * @param canvas - canvas element. Null if we're just resizing */ initSketcher (canvas = null) { @@ -433,7 +443,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Palette left click. * Selects Fg color (or Bg, if Control/Meta is held) - * * @param e - event */ onPaletteClick = (e) => { @@ -452,7 +461,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Palette right click. * Selects Bg color - * * @param e - event */ onPaletteRClick = (e) => { @@ -463,7 +471,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on the Draw mode button - * * @param e - event */ setModeDraw = (e) => { @@ -473,7 +480,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on the Fill mode button - * * @param e - event */ setModeFill = (e) => { @@ -483,7 +489,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on Smooth checkbox - * * @param e - event */ tglSmooth = (e) => { @@ -493,7 +498,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on Adaptive checkbox - * * @param e - event */ tglAdaptive = (e) => { @@ -503,7 +507,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle change of the Weight input field - * * @param e - event */ setWeight = (e) => { @@ -512,7 +515,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set size - clalback from the select box - * * @param e - event */ changeSize = (e) => { diff --git a/app/javascript/flavours/glitch/stream.js b/app/javascript/flavours/glitch/stream.js index 8a60f12b4..66d249f6c 100644 --- a/app/javascript/flavours/glitch/stream.js +++ b/app/javascript/flavours/glitch/stream.js @@ -17,10 +17,10 @@ let sharedConnection; */ /** - * @typedef StreamEvent - * @property {string} event - * @property {object} payload - */ + * @typedef StreamEvent + * @property {string} event + * @property {object} payload + */ /** * @type {Array.} @@ -126,7 +126,7 @@ const sharedCallbacks = { /** * @param {string} channelName * @param {Object.} params - * @return {string} + * @returns {string} */ const channelNameWithInlineParams = (channelName, params) => { if (Object.keys(params).length === 0) { @@ -140,7 +140,7 @@ const channelNameWithInlineParams = (channelName, params) => { * @param {string} channelName * @param {Object.} params * @param {function(Function, Function): { onConnect: (function(): void), onReceive: (function(StreamEvent): void), onDisconnect: (function(): void) }} callbacks - * @return {function(): void} + * @returns {function(): void} */ // @ts-expect-error export const connectStream = (channelName, params, callbacks) => (dispatch, getState) => { @@ -227,7 +227,7 @@ const handleEventSourceMessage = (e, received) => { * @param {string} accessToken * @param {string} channelName * @param {{ connected: Function, received: function(StreamEvent): void, disconnected: Function, reconnected: Function }} callbacks - * @return {WebSocketClient | EventSource} + * @returns {WebSocketClient | EventSource} */ const createConnection = (streamingAPIBaseURL, accessToken, channelName, { connected, received, disconnected, reconnected }) => { const params = channelName.split('&'); diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss index 4cfd9007b..2f36edd19 100644 --- a/app/javascript/flavours/glitch/styles/components/media.scss +++ b/app/javascript/flavours/glitch/styles/components/media.scss @@ -381,6 +381,7 @@ background: darken($ui-base-color, 8%); border-radius: 4px; padding-bottom: 44px; + width: 100%; &.editable { border-radius: 0; diff --git a/app/javascript/flavours/glitch/utils/scrollbar.js b/app/javascript/flavours/glitch/utils/scrollbar.js index 929b036d6..b3f543ffb 100644 --- a/app/javascript/flavours/glitch/utils/scrollbar.js +++ b/app/javascript/flavours/glitch/utils/scrollbar.js @@ -2,7 +2,7 @@ let cachedScrollbarWidth = null; /** - * @return {number} + * @returns {number} */ const getActualScrollbarWidth = () => { const outer = document.createElement('div'); @@ -20,7 +20,7 @@ const getActualScrollbarWidth = () => { }; /** - * @return {number} + * @returns {number} */ export const getScrollbarWidth = () => { if (cachedScrollbarWidth !== null) { diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 7e36bd22a..9dcdcf84c 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -408,16 +408,12 @@ export function changeUploadCompose(id, params) { // Editing already-attached media is deferred to editing the post itself. // For simplicity's sake, fake an API reply. if (media && !media.get('unattached')) { - let { description, focus } = params; - const data = media.toJS(); - - if (description) { - data.description = description; - } + const { focus, ...other } = params; + const data = { ...media.toJS(), ...other }; if (focus) { - focus = focus.split(','); - data.meta = { focus: { x: parseFloat(focus[0]), y: parseFloat(focus[1]) } }; + const [x, y] = focus.split(','); + data.meta = { focus: { x: parseFloat(x), y: parseFloat(y) } }; } dispatch(changeUploadComposeSuccess(data, true)); diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js index 6b9ff7709..898375abe 100644 --- a/app/javascript/mastodon/actions/picture_in_picture.js +++ b/app/javascript/mastodon/actions/picture_in_picture.js @@ -20,7 +20,7 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; * @param {string} accountId * @param {string} playerType * @param {MediaProps} props - * @return {object} + * @returns {object} */ export const deployPictureInPicture = (statusId, accountId, playerType, props) => { // @ts-expect-error diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 4d4ea83e4..41cb99e2d 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -27,7 +27,7 @@ const { messages } = getLocale(); /** * @param {number} max - * @return {number} + * @returns {number} */ const randomUpTo = max => Math.floor(Math.random() * Math.floor(max)); @@ -40,7 +40,7 @@ const randomUpTo = max => * @param {function(Function, Function): void} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] - * @return {function(): void} + * @returns {function(): void} */ export const connectTimelineStream = (timelineId, channelName, params = {}, options = {}) => connectStream(channelName, params, (dispatch, getState) => { @@ -132,7 +132,7 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => { }; /** - * @return {function(): void} + * @returns {function(): void} */ export const connectUserStream = () => // @ts-expect-error @@ -141,7 +141,7 @@ export const connectUserStream = () => /** * @param {Object} options * @param {boolean} [options.onlyMedia] - * @return {function(): void} + * @returns {function(): void} */ export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => (fillCommunityTimelineGaps({ onlyMedia })) }); @@ -150,7 +150,7 @@ export const connectCommunityStream = ({ onlyMedia } = {}) => * @param {Object} options * @param {boolean} [options.onlyMedia] * @param {boolean} [options.onlyRemote] - * @return {function(): void} + * @returns {function(): void} */ export const connectPublicStream = ({ onlyMedia, onlyRemote } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => fillPublicTimelineGaps({ onlyMedia, onlyRemote }) }); @@ -160,20 +160,20 @@ export const connectPublicStream = ({ onlyMedia, onlyRemote } = {}) => * @param {string} tagName * @param {boolean} onlyLocal * @param {function(object): boolean} accept - * @return {function(): void} + * @returns {function(): void} */ export const connectHashtagStream = (columnId, tagName, onlyLocal, accept) => connectTimelineStream(`hashtag:${columnId}${onlyLocal ? ':local' : ''}`, `hashtag${onlyLocal ? ':local' : ''}`, { tag: tagName }, { accept }); /** - * @return {function(): void} + * @returns {function(): void} */ export const connectDirectStream = () => connectTimelineStream('direct', 'direct'); /** * @param {string} listId - * @return {function(): void} + * @returns {function(): void} */ export const connectListStream = listId => connectTimelineStream(`list:${listId}`, 'list', { list: listId }, { fillGaps: () => fillListTimelineGaps(listId) }); diff --git a/app/javascript/mastodon/components/blurhash.jsx b/app/javascript/mastodon/components/blurhash.jsx index 07cd31b6c..f5c58e04e 100644 --- a/app/javascript/mastodon/components/blurhash.jsx +++ b/app/javascript/mastodon/components/blurhash.jsx @@ -20,9 +20,8 @@ import PropTypes from 'prop-types'; /** * Component that is used to render blurred of blurhash string - * * @param {BlurhashProps} param1 Props of the component - * @returns Canvas which will render blurred region element to embed + * @returns {JSX.Element} Canvas which will render blurred region element to embed */ function Blurhash({ hash, diff --git a/app/javascript/mastodon/components/common_counter.jsx b/app/javascript/mastodon/components/common_counter.jsx index dd9b62de9..9964be516 100644 --- a/app/javascript/mastodon/components/common_counter.jsx +++ b/app/javascript/mastodon/components/common_counter.jsx @@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl'; /** * Returns custom renderer for one of the common counter types - * * @param {"statuses" | "following" | "followers"} counterType * Type of the counter * @param {boolean} isBold Whether display number must be displayed in bold diff --git a/app/javascript/mastodon/components/hashtag.jsx b/app/javascript/mastodon/components/hashtag.jsx index 8821c66f0..254fae2fe 100644 --- a/app/javascript/mastodon/components/hashtag.jsx +++ b/app/javascript/mastodon/components/hashtag.jsx @@ -37,7 +37,6 @@ class SilentErrorBoundary extends React.Component { /** * Used to render counter of how much people are talking about hashtag - * * @type {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element} */ export const accountsCountRenderer = (displayNumber, pluralReady) => ( diff --git a/app/javascript/mastodon/components/icon.jsx b/app/javascript/mastodon/components/icon.jsx deleted file mode 100644 index d3d7c591d..000000000 --- a/app/javascript/mastodon/components/icon.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; - -export default class Icon extends React.PureComponent { - - static propTypes = { - id: PropTypes.string.isRequired, - className: PropTypes.string, - fixedWidth: PropTypes.bool, - }; - - render () { - const { id, className, fixedWidth, ...other } = this.props; - - return ( - - ); - } - -} diff --git a/app/javascript/mastodon/components/icon.tsx b/app/javascript/mastodon/components/icon.tsx new file mode 100644 index 000000000..d85fff6ef --- /dev/null +++ b/app/javascript/mastodon/components/icon.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import classNames from 'classnames'; + +type Props = { + id: string; + className?: string; + fixedWidth?: boolean; + children?: never; + [key: string]: any; +} +export const Icon: React.FC = ({ id, className, fixedWidth, ...other }) => + ; + +export default Icon; diff --git a/app/javascript/mastodon/components/icon_with_badge.jsx b/app/javascript/mastodon/components/icon_with_badge.jsx deleted file mode 100644 index 4214eccfd..000000000 --- a/app/javascript/mastodon/components/icon_with_badge.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'mastodon/components/icon'; - -const formatNumber = num => num > 40 ? '40+' : num; - -const IconWithBadge = ({ id, count, issueBadge, className }) => ( - - - {count > 0 && {formatNumber(count)}} - {issueBadge && } - -); - -IconWithBadge.propTypes = { - id: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - issueBadge: PropTypes.bool, - className: PropTypes.string, -}; - -export default IconWithBadge; diff --git a/app/javascript/mastodon/components/icon_with_badge.tsx b/app/javascript/mastodon/components/icon_with_badge.tsx new file mode 100644 index 000000000..487bf326a --- /dev/null +++ b/app/javascript/mastodon/components/icon_with_badge.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Icon } from './icon'; + +const formatNumber = (num: number): number | string => num > 40 ? '40+' : num; + +type Props = { + id: string; + count: number; + issueBadge: boolean; + className: string; +} +const IconWithBadge: React.FC = ({ id, count, issueBadge, className }) => ( + + + {count > 0 && {formatNumber(count)}} + {issueBadge && } + +); + +export default IconWithBadge; diff --git a/app/javascript/flavours/glitch/components/relative_timestamp.jsx b/app/javascript/mastodon/components/relative_timestamp.tsx similarity index 85% rename from app/javascript/flavours/glitch/components/relative_timestamp.jsx rename to app/javascript/mastodon/components/relative_timestamp.tsx index e6c3e0880..89cad0665 100644 --- a/app/javascript/flavours/glitch/components/relative_timestamp.jsx +++ b/app/javascript/mastodon/components/relative_timestamp.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { injectIntl, defineMessages } from 'react-intl'; -import PropTypes from 'prop-types'; +import { injectIntl, defineMessages, InjectedIntl } from 'react-intl'; const messages = defineMessages({ today: { id: 'relative_time.today', defaultMessage: 'today' }, @@ -28,12 +27,12 @@ const dateFormatOptions = { day: '2-digit', hour: '2-digit', minute: '2-digit', -}; +} as const; const shortDateFormatOptions = { month: 'short', day: 'numeric', -}; +} as const; const SECOND = 1000; const MINUTE = 1000 * 60; @@ -42,7 +41,7 @@ const DAY = 1000 * 60 * 60 * 24; const MAX_DELAY = 2147483647; -const selectUnits = delta => { +const selectUnits = (delta: number) => { const absDelta = Math.abs(delta); if (absDelta < MINUTE) { @@ -56,7 +55,7 @@ const selectUnits = delta => { return 'day'; }; -const getUnitDelay = units => { +const getUnitDelay = (units: string) => { switch (units) { case 'second': return SECOND; @@ -71,7 +70,7 @@ const getUnitDelay = units => { } }; -export const timeAgoString = (intl, date, now, year, timeGiven, short) => { +export const timeAgoString = (intl: InjectedIntl, date: Date, now: number, year: number, timeGiven: boolean, short?: boolean) => { const delta = now - date.getTime(); let relativeTime; @@ -99,7 +98,7 @@ export const timeAgoString = (intl, date, now, year, timeGiven, short) => { return relativeTime; }; -const timeRemainingString = (intl, date, now, timeGiven = true) => { +const timeRemainingString = (intl: InjectedIntl, date: Date, now: number, timeGiven = true) => { const delta = date.getTime() - now; let relativeTime; @@ -121,15 +120,17 @@ const timeRemainingString = (intl, date, now, timeGiven = true) => { return relativeTime; }; -class RelativeTimestamp extends React.Component { - - static propTypes = { - intl: PropTypes.object.isRequired, - timestamp: PropTypes.string.isRequired, - year: PropTypes.number.isRequired, - futureDate: PropTypes.bool, - short: PropTypes.bool, - }; +type Props = { + intl: InjectedIntl; + timestamp: string; + year: number; + futureDate?: boolean; + short?: boolean; +} +type States = { + now: number; +} +class RelativeTimestamp extends React.Component { state = { now: this.props.intl.now(), @@ -140,7 +141,9 @@ class RelativeTimestamp extends React.Component { short: true, }; - shouldComponentUpdate (nextProps, nextState) { + _timer: number | undefined; + + shouldComponentUpdate (nextProps: Props, nextState: States) { // As of right now the locale doesn't change without a new page load, // but we might as well check in case that ever changes. return this.props.timestamp !== nextProps.timestamp || @@ -148,7 +151,7 @@ class RelativeTimestamp extends React.Component { this.state.now !== nextState.now; } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps: Props) { if (this.props.timestamp !== nextProps.timestamp) { this.setState({ now: this.props.intl.now() }); } @@ -158,16 +161,16 @@ class RelativeTimestamp extends React.Component { this._scheduleNextUpdate(this.props, this.state); } - componentWillUpdate (nextProps, nextState) { + UNSAFE_componentWillUpdate (nextProps: Props, nextState: States) { this._scheduleNextUpdate(nextProps, nextState); } componentWillUnmount () { - clearTimeout(this._timer); + window.clearTimeout(this._timer); } - _scheduleNextUpdate (props, state) { - clearTimeout(this._timer); + _scheduleNextUpdate (props: Props, state: States) { + window.clearTimeout(this._timer); const { timestamp } = props; const delta = (new Date(timestamp)).getTime() - state.now; @@ -176,7 +179,7 @@ class RelativeTimestamp extends React.Component { const updateInterval = 1000 * 10; const delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder); - this._timer = setTimeout(() => { + this._timer = window.setTimeout(() => { this.setState({ now: this.props.intl.now() }); }, delay); } diff --git a/app/javascript/mastodon/components/short_number.jsx b/app/javascript/mastodon/components/short_number.jsx index 861d0bc58..0c40941c0 100644 --- a/app/javascript/mastodon/components/short_number.jsx +++ b/app/javascript/mastodon/components/short_number.jsx @@ -24,7 +24,6 @@ import { FormattedMessage, FormattedNumber } from 'react-intl'; /** * Component that renders short big number to a shorter version - * * @param {ShortNumberProps} param0 Props for the component * @returns {JSX.Element} Rendered number */ @@ -58,7 +57,6 @@ ShortNumber.propTypes = { /** * Renders short number into corresponding localizable react fragment - * * @param {ShortNumberCounterProps} param0 Props for the component * @returns {JSX.Element} FormattedMessage ready to be embedded in code */ diff --git a/app/javascript/mastodon/features/audio/index.jsx b/app/javascript/mastodon/features/audio/index.jsx index df40b48f0..53f24c6a3 100644 --- a/app/javascript/mastodon/features/audio/index.jsx +++ b/app/javascript/mastodon/features/audio/index.jsx @@ -470,7 +470,7 @@ class Audio extends React.PureComponent { } return ( -
+
Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Знаете ли, че? Може да защитите акаунта си, настройвайки двуфакторното удостоверяване в настройките на акаунта си. То работи с всяко приложение TOTP по ваш избор, не е необходим номер телефона!", "onboarding.tips.accounts_from_other_servers": "Знаете ли, че? Откак Mastodon е децентрализиран, някои профили, които срещате ще бъдат разположени на сървъри различен от вашия. И още може да взаимодействате с тях безпроблемно! Сървърът им е втората половина от потребителското им име!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", + "onboarding.tips.migration": "Знаете ли, че? Ако се чувствате, че {domain} не е чудесен избор на сървър в бъдуще, може да се преместите на друг сървър на Mastodon без да загубите последователите си. Дори може да сте съдържатели на свой собствен сървър!", "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", "password_confirmation.exceeds_maxlength": "Потвърждаването на паролата превишава максимално допустимата дължина за парола", "password_confirmation.mismatching": "Потвърждаването на паролата не съвпада", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 899994c9e..b26cfab75 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "সংবাদ", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 18f0065a5..1c697daa6 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", "explore.search_results": "Disoc'hoù an enklask", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Furchal", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/bs.json b/app/javascript/mastodon/locales/bs.json index 7bb07b7b0..01db7ea7d 100644 --- a/app/javascript/mastodon/locales/bs.json +++ b/app/javascript/mastodon/locales/bs.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5e660a489..17d676d29 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", "explore.search_results": "Resultats de la cerca", - "explore.suggested_follows": "Per a tu", + "explore.suggested_follows": "Persones", "explore.title": "Explora", "explore.trending_links": "Notícies", "explore.trending_statuses": "Tuts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No tornis a mostrar aquesta pantalla", "onboarding.actions.go_to_explore": "Mira què és tendència", "onboarding.actions.go_to_home": "Vés a la teva línia de temps inici", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.", "onboarding.follows.lead": "Tu tens cura de la teva línia de temps inici. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant-los de seguir!", "onboarding.follows.title": "Popular a Mastodon", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index a8bb16a8b..a58ea542f 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", "explore.search_results": "ئەنجامەکانی گەڕان", - "explore.suggested_follows": "بۆ تۆ", + "explore.suggested_follows": "People", "explore.title": "گەڕان", "explore.trending_links": "هەواڵەکان", "explore.trending_statuses": "بڵاوکراوەکان", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 36aed3820..f509e2394 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1a9a4b520..8d6dfdbdf 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", "explore.search_results": "Výsledky hledání", - "explore.suggested_follows": "Pro vás", + "explore.suggested_follows": "People", "explore.title": "Objevit", "explore.trending_links": "Zprávy", "explore.trending_statuses": "Příspěvky", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Příště nezobrazovat tuto obrazovku", "onboarding.actions.go_to_explore": "Podívejte se, co je populární", "onboarding.actions.go_to_home": "Přejít na svůj domovský feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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": "Populární na Mastodonu", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 490fdd2e3..82e5aafb6 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -182,7 +182,7 @@ "conversation.with": "Gyda {names}", "copypaste.copied": "Wedi ei gopïo", "copypaste.copy": "Copïo", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Copïo i'r clipfwrdd", "directory.federated": "O'r ffedysawd cyfan", "directory.local": "O {domain} yn unig", "directory.new_arrivals": "Defnyddwyr newydd", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", "explore.search_results": "Canlyniadau chwilio", - "explore.suggested_follows": "I chi", + "explore.suggested_follows": "Pobl", "explore.title": "Darganfod", "explore.trending_links": "Newyddion", "explore.trending_statuses": "Postiadau", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddant wedi'u galluogi.", "notifications_permission_banner.title": "Peidiwch colli dim", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "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.start.title": "You've made it!", - "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.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", - "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", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.action.back": "Ewch â fi yn ôl", + "onboarding.actions.back": "Ewch â fi yn ôl", + "onboarding.actions.close": "Peidio â dangos y sgrin hon eto", + "onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd", + "onboarding.actions.go_to_home": "Ewch i'ch ffrwd gartref", + "onboarding.compose.template": "Helo, #Mastodon!", + "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.", + "onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen!", + "onboarding.follows.title": "Yn boblogaidd ar Mastodon", + "onboarding.share.lead": "Cofiwch ddweud wrth bobl sut y gallan nhw ddod o hyd i chi ar Mastodon!", + "onboarding.share.message": "Fi yw {username} ar #Mastodon! Dewch i'm dilyn i yn {url}", + "onboarding.share.next_steps": "Camau nesaf posib:", + "onboarding.share.title": "Rhannwch eich proffil", + "onboarding.start.lead": "Mae eich cyfrif Mastodon newydd yn barod! Dyma sut y gallwch chi wneud y gorau ohono:", + "onboarding.start.skip": "Eisiau mynd syth yn eich blaen?", + "onboarding.start.title": "Rydych chi wedi cyrraedd!", + "onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.", + "onboarding.steps.follow_people.title": "Dilynwch {count, plural, one {one person} other {# people}}", + "onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd.", + "onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf", + "onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.", + "onboarding.steps.setup_profile.title": "Cyfaddaswch eich proffil", + "onboarding.steps.share_profile.body": "Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon!", + "onboarding.steps.share_profile.title": "Rhannwch eich proffil", + "onboarding.tips.2fa": "Oeddech chi'n gwybod? Gallwch ddiogelu'ch cyfrif trwy osod dilysiad dau ffactor yng ngosodiadau eich cyfrif. Mae'n gweithio gydag unrhyw app TOTP o'ch dewis, nid oes angen rhif ffôn!", + "onboarding.tips.accounts_from_other_servers": "Oeddech chi'n gwybod? Gan fod Mastodon wedi'i ddatganoli, bydd rhai proffiliau y dewch ar eu traws yn cael eu cynnal ar weinyddion heblaw eich un chi. Ac eto gallwch chi ryngweithio â nhw yn hawdd! Mae eu gweinydd yn ail hanner eu henw defnyddiwr!", + "onboarding.tips.migration": "Oeddech chi'n gwybod? Os ydych chi'n teimlo nad yw {domain} yn ddewis gweinydd gwych i chi i'r dyfodol, gallwch chi symud i weinydd Mastodon arall heb golli'ch dilynwyr. Gallwch chi hyd yn oed gynnal eich gweinydd eich hun!", + "onboarding.tips.verification": "Oeddech chi'n gwybod? Gallwch wirio'ch cyfrif trwy roi dolen i'ch proffil Mastodon ar eich gwefan eich hun ac ychwanegu'r wefan at eich proffil. Nid oes angen ffioedd na dogfennau!", "password_confirmation.exceeds_maxlength": "Mae'r cadarnhad cyfrinair yn fwy nag uchafswm hyd y cyfrinair", "password_confirmation.mismatching": "Nid yw'r cadarnhad cyfrinair yn cyfateb", "picture_in_picture.restore": "Rhowch ef yn ôl", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e1850ba85..205f2a813 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", "errors.unexpected_crash.report_issue": "Anmeld problem", "explore.search_results": "Søgeresultater", - "explore.suggested_follows": "Til dig", + "explore.suggested_follows": "People", "explore.title": "Udforsk", "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Vis ikke denne skærm igen", "onboarding.actions.go_to_explore": "Se, hvad som trender", "onboarding.actions.go_to_home": "Gå til hjemme-feed'et", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Ingen resultater tilgængelige pt. Prøv at bruge søgning eller gennemse siden for at finde personer at følge, eller forsøg igen senere.", "onboarding.follows.lead": "Man kurerer sin eget hjemme-feed. Jo flere personer man følger, des mere aktiv og interessant vil det være. Disse profiler kan være et godt udgangspunkt – de kan altid fjernes senere!", "onboarding.follows.title": "Populært på Mastodon", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index bfd3c0b43..461470fe6 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -218,7 +218,7 @@ "empty_column.blocks": "Du hast bisher keine Profile gesperrt.", "empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.", "empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!", - "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Sobald du eine private Nachricht sendest oder empfängst, wird sie hier zu sehen sein.", + "empty_column.direct": "Du hast noch keine Direktnachrichten. Sobald du eine Nachricht sendest oder empfängst, wird sie hier zu sehen sein.", "empty_column.domain_blocks": "Du hast noch keine Domains gesperrt.", "empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!", "empty_column.favourited_statuses": "Du hast noch keine Beiträge favorisiert. Sobald du einen favorisierst, wird er hier erscheinen.", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Fehlerdiagnose in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Fehler melden", "explore.search_results": "Suchergebnisse", - "explore.suggested_follows": "Für dich", + "explore.suggested_follows": "Profile", "explore.title": "Entdecken", "explore.trending_links": "Neuigkeiten", "explore.trending_statuses": "Beiträge", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Diese Seite nicht mehr anzeigen", "onboarding.actions.go_to_explore": "Sieh, was gerade angesagt ist", "onboarding.actions.go_to_home": "Gehe zu deiner Startseite", + "onboarding.compose.template": "Hallo #Mastodon!", "onboarding.follows.empty": "Bedauerlicherweise können aktuell keine Ergebnisse angezeigt werden. Du kannst die Suche verwenden oder den Reiter „Entdecken“ auswählen, um neue Leute zum Folgen zu finden – oder du versuchst es später erneut.", "onboarding.follows.lead": "Du verwaltest deine eigene Startseite. Je mehr Leuten du folgst, desto aktiver und interessanter wird sie sein. Diese Profile können ein guter Start sein – du kannst ihnen später immer noch entfolgen!", "onboarding.follows.title": "Beliebt auf Mastodon", @@ -461,7 +462,7 @@ "onboarding.steps.publish_status.title": "Erstelle deinen ersten Beitrag", "onboarding.steps.setup_profile.body": "Mit einem ausgefüllten Profil interagieren andere eher mit dir.", "onboarding.steps.setup_profile.title": "Personalisiere dein Profil", - "onboarding.steps.share_profile.body": "Lass deine Freund*innen wissen, wie sie dich auf Mastodon finden können!", + "onboarding.steps.share_profile.body": "Lass Deine FreundInnen wissen, wie sie Dich auf Mastodon finden können!", "onboarding.steps.share_profile.title": "Teile dein Profil", "onboarding.tips.2fa": "Wusstest du schon? Du kannst die Sicherheit deines Kontos erhöhen, indem du die Zwei-Faktor-Authentisierung in deinen Kontoeinstellungen aktivierst. Dafür ist keine Telefonnummer notwendig und es funktioniert jede beliebige TOTP-App!", "onboarding.tips.accounts_from_other_servers": "Wusstest du schon? Da Mastodon dezentralisiert ist, werden einige Profile, denen du begegnest, auf anderen Servern als deinem bereitgestellt. Und trotzdem kannst du uneingeschränkt mit ihnen interagieren! Der Servername befindet sich in der zweiten Hälfte ihres Profilnamens!", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d9a04c393..0f44b80af 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "explore.search_results": "Αποτελέσματα αναζήτησης", - "explore.suggested_follows": "Για σένα", + "explore.suggested_follows": "Άτομα", "explore.title": "Εξερεύνηση", "explore.trending_links": "Νέα", "explore.trending_statuses": "Αναρτήσεις", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Να μην εμφανιστεί ξανά αυτό", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Πηγαίνετε στην αρχική σας ροή", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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": "Δημοφιλή στο Mastodon", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 7ffe42b84..86aa015ad 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 07e1c8530..f45c87a5d 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", "explore.search_results": "Serĉaj rezultoj", - "explore.suggested_follows": "Por vi", + "explore.suggested_follows": "Homoj", "explore.title": "Esplori", "explore.trending_links": "Novaĵoj", "explore.trending_statuses": "Afiŝoj", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index ca18c161b..b1b6f9d7a 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para vos", + "explore.suggested_follows": "Cuentas", "explore.title": "Explorá", "explore.trending_links": "Noticias", "explore.trending_statuses": "Mensajes", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No mostrar esta pantalla de nuevo", "onboarding.actions.go_to_explore": "Mirá qué está en tendencia", "onboarding.actions.go_to_home": "Andá a tu línea temporal principal", + "onboarding.compose.template": "¡Hola, #Mastodon!", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Podés intentar usar la búsqueda o navegar por la página de exploración para encontrar cuentas a las que seguir, o intentarlo de nuevo más tarde.", "onboarding.follows.lead": "Vos completás tu propia línea temporal principal. Cuantas más cuentas sigas, más activa e interesante se volverá. Estos perfiles pueden ser un buen punto de partida; ¡podés dejar de seguir estas cuentas cuando quieras!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 91fe630a8..4deafbbeb 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "People", "explore.title": "Descubrir", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No volver a mostrar esta pantalla", "onboarding.actions.go_to_explore": "Ver qué es tendencia", "onboarding.actions.go_to_home": "Ir al inicio", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.", "onboarding.follows.lead": "Tienes que personalizar tu inicio. Cuantas más personas sigas, más activo e interesante será. Estos perfiles pueden ser un buen punto de partida, ¡pero siempre puedes dejar de seguirlos más adelante!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 418cbab7d..915c85800 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -32,7 +32,7 @@ "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", - "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, other {Siguiendo a {counter}}}", "account.follows.empty": "Este usuario todavía no sigue a nadie.", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", @@ -365,7 +365,7 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "moved_to_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada porque te has mudado a {movedToAccount}.", "mute_modal.duration": "Duración", - "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", + "mute_modal.hide_notifications": "¿Ocultar notificaciones de este usuario?", "mute_modal.indefinite": "Indefinida", "navigation_bar.about": "Acerca de", "navigation_bar.blocks": "Usuarios bloqueados", @@ -445,11 +445,12 @@ "onboarding.actions.close": "No volver a mostrar esta pantalla", "onboarding.actions.go_to_explore": "Ver qué es tendencia", "onboarding.actions.go_to_home": "Ir al inicio", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "¡Hola #Mastodon!", + "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.", "onboarding.follows.lead": "Tienes que personalizar tu línea de inicio. Cuantas más personas sigas, más activa e interesante será. Estos perfiles pueden ser un buen punto de partida, ¡pero siempre puedes dejar de seguirlos más adelante!", "onboarding.follows.title": "Popular en Mastodon", "onboarding.share.lead": "¡Dile a la gente cómo te pueden encontrar en Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "¡Soy {username} en #Mastodon! Ven a seguirme en {url}", "onboarding.share.next_steps": "Posibles siguientes pasos:", "onboarding.share.title": "Comparte tu perfil", "onboarding.start.lead": "Tu nueva cuenta de Mastodon está lista. Así es como puedes sacarle el máximo provecho:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!", "onboarding.steps.share_profile.title": "Comparte tu perfil", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "¿Sabías? Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de tu cuenta. Funciona con cualquier aplicación TOTP de tu elección, ¡no necesitas número de teléfono!", "onboarding.tips.accounts_from_other_servers": "¿Sabías que? Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "¿Sabías? Si en el futuro piensas que {domain} no es el servidor adecuado para ti, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!", + "onboarding.tips.verification": "¿Sabías? Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en tu propio sitio web y añadiendo el sitio web a tu perfil. ¡No se necesitan comisiones ni documentos!", "password_confirmation.exceeds_maxlength": "La contraseña de confirmación excede la longitud máxima de la contraseña", "password_confirmation.mismatching": "La contraseña de confirmación no coincide", "picture_in_picture.restore": "Restaurar", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 0db20482b..981dd05c1 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", "explore.search_results": "Otsitulemused", - "explore.suggested_follows": "Kasutajad", + "explore.suggested_follows": "People", "explore.title": "Avasta", "explore.trending_links": "Uudised", "explore.trending_statuses": "Postitused", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ära näita seda ekraani uuesti", "onboarding.actions.go_to_explore": "Vaata, mis on trendikas", "onboarding.actions.go_to_home": "Mine oma koduvoogu", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "Haldad ise oma koduvoogu. Mida rohkemaid inimesi jälgid, seda aktiivsem ja huvitavam see on. Need profiilid võiksid olla head alustamiskohad — saad nende jälgimise alati lõpetada!", "onboarding.follows.title": "Populaarne Mastodonis", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 3949a468e..4ace654f1 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -182,7 +182,7 @@ "conversation.with": "Hauekin: {names}", "copypaste.copied": "Kopiatuta", "copypaste.copy": "Kopiatu", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopiatu arbelera", "directory.federated": "Fedibertso ezagunekoak", "directory.local": "{domain} domeinukoak soilik", "directory.new_arrivals": "Iritsi berriak", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", "explore.search_results": "Bilaketaren emaitzak", - "explore.suggested_follows": "Zuretzako", + "explore.suggested_follows": "Jendea", "explore.title": "Arakatu", "explore.trending_links": "Berriak", "explore.trending_statuses": "Tutak", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "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.start.title": "You've made it!", - "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.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", + "onboarding.action.back": "Atzera egin", + "onboarding.actions.back": "Atzera egin", + "onboarding.actions.close": "Ez erakutsi pantaila hau berriro", + "onboarding.actions.go_to_explore": "Ikusi zer dagoen pil-pilean", + "onboarding.actions.go_to_home": "Joan hasierara", + "onboarding.compose.template": "Kaixo #Mastodon!", + "onboarding.follows.empty": "Zoritxarrez, ezin da emaitzik erakutsi orain. Bilaketa erabil dezakezu edo Arakatu orrian jendea bilatu jarraitzeko, edo saiatu geroago.", + "onboarding.follows.lead": "Hasierako orria zuk pertsonalizatzen duzu. Gero eta jende gehiago jarraitu, orduan eta aktibo eta interesgarriago izango da. Profil hauek egokiak izan daitezke hasteko, beti ere, geroago jarraitzeari utz diezazkiekezu!", + "onboarding.follows.title": "Mastodonen pil-pilean", + "onboarding.share.lead": "Ezagutarazi jendeari nola aurki zaitzaketen Mastodonen!", + "onboarding.share.message": "{username} naiz #Mastodon-en! Jarrai iezadazu hemen: {url}", + "onboarding.share.next_steps": "Hurrengo urrats posibleak:", + "onboarding.share.title": "Partekatu zure profila", + "onboarding.start.lead": "Zure Mastodoneko kontu berria prest dago. Jakin nola atera diezaioekun etekin handiena hemen:", + "onboarding.start.skip": "Urrats guztiak saltatu nahi dituzu?", + "onboarding.start.title": "Lortu duzu!", + "onboarding.steps.follow_people.body": "Zure jarioa zuk pertsonalizatzen duzu. Bete dezagun jende interesgarriaz.", + "onboarding.steps.follow_people.title": "Jarraitu {count, plural, one {pertsona bat} other {# pertsona}}", + "onboarding.steps.publish_status.body": "Agurtu munduari.", + "onboarding.steps.publish_status.title": "Sortu zure lehen argitalpena", "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", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Bazenekien? Zure kontua babes dezakezu bi faktoreko autentifikazioa zure kontuko ezarpenetan ezarriaz. Darabilzun edozein TOTP aplikaziorekin dabil, ez da telefono-zenbakirik behar!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Bazenekien? Uste baduzu {domain} ez dela aukera on bat zuretzako etorkizunari begira, beste Mastodoneko instantzia batera alda zaitezke zure jarraitzaileak galdu gabe. Zure zerbitzaria ostata dezakezu eta guzti!", + "onboarding.tips.verification": "Bazenekien? Zure kontua egiazta dezakezu zure webgunean zure Mastodoneko profilaren esteka erantsiaz, zure webgunea Mastodoneko profilean ere duzularik. Kuota edo dokumenturik gabe!", "password_confirmation.exceeds_maxlength": "Pasahitzaren berrespenak pasahitzaren gehienezko luzera gainditzen du", "password_confirmation.mismatching": "Pasahitzaren berrespena ez dator bat", "picture_in_picture.restore": "Leheneratu", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 68b4f3f95..fb5c979ef 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "explore.search_results": "نتایج جست‌وجو", - "explore.suggested_follows": "برای شما", + "explore.suggested_follows": "People", "explore.title": "کاوش", "explore.trending_links": "اخبار", "explore.trending_statuses": "فرسته‌ها", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 74e9c7c7c..f8be93660 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "explore.search_results": "Hakutulokset", - "explore.suggested_follows": "Sinulle", + "explore.suggested_follows": "Ihmiset", "explore.title": "Selaa", "explore.trending_links": "Uutiset", "explore.trending_statuses": "Julkaisut", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Älä näytä tätä uudelleen", "onboarding.actions.go_to_explore": "Katso, mikä on trendikästä", "onboarding.actions.go_to_home": "Siirry kotisyötteeseesi", + "onboarding.compose.template": "Tervehdys, #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata hakusivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", "onboarding.follows.title": "Suosittua Mastodonissa", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index f42d1a1d6..56c4a26d2 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Avrita stakkaslóðina til setiborðið", "errors.unexpected_crash.report_issue": "Fráboða trupulleika", "explore.search_results": "Leitiúrslit", - "explore.suggested_follows": "Til tín", + "explore.suggested_follows": "Fólk", "explore.title": "Rannsaka", "explore.trending_links": "Tíðindi", "explore.trending_statuses": "Postar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ikki vísa hendan skermin aftur", "onboarding.actions.go_to_explore": "Sí rákið", "onboarding.actions.go_to_home": "Far til heimarásina", + "onboarding.compose.template": "Hey #Mastodon!", "onboarding.follows.empty": "Tíverri kunnu eingi úrslit vísast beint nú. Tú kanst royna at brúka leiting ella at kaga gjøgnum Rannsaka síðuna fyri at finna fólk at fylgja - ella royna aftur seinni.", "onboarding.follows.lead": "Tú snikkar sjálv/ur tína heimarás til. Jú fleiri fólk, tú fylgir, jú virknari og áhugaverdari verður tað. Hesir vangar kunnu vera ein góð byrjan — tú kanst altíð gevast at fylgja teimum seinni!", "onboarding.follows.title": "Vælumtókt á Mastodon", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index af175099b..640bdf0c9 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler un problème", "explore.search_results": "Résultats", - "explore.suggested_follows": "Pour vous", + "explore.suggested_follows": "People", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", "explore.trending_statuses": "Messages", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index e49bb6d74..75b7890d2 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", "explore.search_results": "Résultats de la recherche", - "explore.suggested_follows": "Pour vous", + "explore.suggested_follows": "People", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", "explore.trending_statuses": "Messages", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index bae52ad86..a8827a6ce 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace nei klamboerd kopiearje", "errors.unexpected_crash.report_issue": "Technysk probleem melde", "explore.search_results": "Sykresultaten", - "explore.suggested_follows": "Foar jo", + "explore.suggested_follows": "People", "explore.title": "Ferkenne", "explore.trending_links": "Nijs", "explore.trending_statuses": "Berjochten", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Dit skerm net mear toane", "onboarding.actions.go_to_explore": "De aktuele trends besjen", "onboarding.actions.go_to_home": "Gean nei jo startside", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Spitigernôch kinne op dit stuit gjin resultaten toand wurde. Jo kinne probearje te sykjen of te blêdzjen troch de ferkenningsside om minsken te finen dy’t jo folgje kinne, of probearje it letter opnij.", "onboarding.follows.lead": "Jo beheare jo eigen startside. Hoe mear minsken jo folgje, hoe aktiver en ynteressanter it wêze sil. Dizze profilen kinne in goed startpunt wêze, jo kinne se letter altyd ûntfolgje!", "onboarding.follows.title": "Populêr op Mastodon", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 9f1217758..da3f1c9bf 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -39,7 +39,7 @@ "account.follows_you": "Do do leanúint", "account.go_to_profile": "Téigh go dtí próifíl", "account.hide_reblogs": "Folaigh moltaí ó @{name}", - "account.in_memoriam": "In Memoriam.", + "account.in_memoriam": "Cuimhneachán.", "account.joined_short": "Cláraithe", "account.languages": "Athraigh teangacha foscríofa", "account.link_verified_on": "Seiceáladh úinéireacht an naisc seo ar {date}", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Tuairiscigh deacracht", "explore.search_results": "Torthaí cuardaigh", - "explore.suggested_follows": "Duitse", + "explore.suggested_follows": "People", "explore.title": "Féach thart", "explore.trending_links": "Nuacht", "explore.trending_statuses": "Postálacha", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 1040cdf0f..ebd2dae7f 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd", "errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas", "explore.search_results": "Toraidhean an luirg", - "explore.suggested_follows": "Dhut-sa", + "explore.suggested_follows": "People", "explore.title": "Rùraich", "explore.trending_links": "Naidheachdan", "explore.trending_statuses": "Postaichean", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 9b6cd2883..9865e57b2 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", "explore.search_results": "Resultados da busca", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "Persoas", "explore.title": "Descubrir", "explore.trending_links": "Novas", "explore.trending_statuses": "Publicacións", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Non mostrar esta pantalla de novo", "onboarding.actions.go_to_explore": "Mira do que se está a falar", "onboarding.actions.go_to_home": "Vai á cronoloxía de inicio", + "onboarding.compose.template": "Ola #Mastodon!", "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.", "onboarding.follows.lead": "Podes facer que a túa cronoloxía de inicio sexa como ti a queres. Canta máis xente sigas máis interesante será. Estes perfís poderían axudarche a comezar —sempre poderás deixar de seguilos despois!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 8308943f7..2b63455b2 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "להעתיק את הקוד ללוח הכתיבה", "errors.unexpected_crash.report_issue": "דווח על בעיה", "explore.search_results": "תוצאות חיפוש", - "explore.suggested_follows": "עבורך", + "explore.suggested_follows": "אנשים", "explore.title": "סיור", "explore.trending_links": "חדשות", "explore.trending_statuses": "הודעות", @@ -445,6 +445,7 @@ "onboarding.actions.close": "אל תציג זאת שוב", "onboarding.actions.go_to_explore": "הצגת מגמות", "onboarding.actions.go_to_home": "מעבר לזרם הודעות הנעקבים", + "onboarding.compose.template": "שלום #מסטודון!", "onboarding.follows.empty": "למצער, תוצאות לחיפושך אינן בנמצא. ניתן להשתמש בחיפוש או בדף החקירות לשם מציאת אנשים ולעקבם. אפשר גם לנסות שוב אחר כך.", "onboarding.follows.lead": "אתם אוצרים את הזרם הבייתי שלכם. ככל שתעקבו אחרי יותר אנשים, הוא יהיה עשיר ופעיל יותר. הנה כמה פרופילים להתחיל בהם - תמיד ניתן להפסיק מעקב אחריהם בהמשך!", "onboarding.follows.title": "פופולארי על מסטודון", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 71e18c4fd..57dc03138 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "explore.search_results": "सर्च रिजल्ट्स", - "explore.suggested_follows": "आपके लिए", + "explore.suggested_follows": "People", "explore.title": "एक्स्प्लोर", "explore.trending_links": "समाचार", "explore.trending_statuses": "पोस्ट्स", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 351de3502..ac5fd7232 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj stacktrace u međuspremnik", "errors.unexpected_crash.report_issue": "Prijavi problem", "explore.search_results": "Rezultati pretrage", - "explore.suggested_follows": "Za vas", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "Novosti", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index d770ddd9c..f01e5a7f2 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -132,7 +132,7 @@ "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel nem nyilvános. Csak a nyilvános bejegyzések kereshetők hashtaggel.", "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.", "compose_form.lock_disclaimer.lock": "lezárva", - "compose_form.placeholder": "Mire gondolunk éppen?", + "compose_form.placeholder": "Mi jár a fejedben?", "compose_form.poll.add_option": "Lehetőség hozzáadása", "compose_form.poll.duration": "Szavazás időtartama", "compose_form.poll.option_placeholder": "{number}. lehetőség", @@ -148,7 +148,7 @@ "compose_form.sensitive.unmarked": "{count, plural, one {A médiát nem jelölték kényesnek} other {A médiát nem jelölték kényesnek}}", "compose_form.spoiler.marked": "Tartalmi figyelmeztetés eltávolítása", "compose_form.spoiler.unmarked": "Tartalmi figyelmeztetés hozzáadása", - "compose_form.spoiler_placeholder": "A figyelmeztetés beírása ide", + "compose_form.spoiler_placeholder": "Írd ide a figyelmeztetést", "confirmation_modal.cancel": "Mégsem", "confirmations.block.block_and_report": "Letiltás és jelentés", "confirmations.block.confirm": "Letiltás", @@ -240,11 +240,11 @@ "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", "explore.search_results": "Keresési találatok", - "explore.suggested_follows": "Nekem", + "explore.suggested_follows": "Emberek", "explore.title": "Felfedezés", "explore.trending_links": "Hírek", "explore.trending_statuses": "Bejegyzések", - "explore.trending_tags": "#Címkék", + "explore.trending_tags": "Hashtagek", "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből ez a bejegyzés elérésre kerül. Ha ebben a környezetben is szűrni szeretnénk a bejegyzést, akkor szerkeszteni kell a szűrőt.", "filter_modal.added.context_mismatch_title": "Környezeti eltérés.", "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítani kell a lejárati dátumot.", @@ -264,7 +264,7 @@ "follow_request.authorize": "Hitelesítés", "follow_request.reject": "Elutasítás", "follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni a fiók követési kéréseit.", - "followed_tags": "Követett #címkék", + "followed_tags": "Követett hashtagek", "footer.about": "Névjegy", "footer.directory": "Profiltár", "footer.get_app": "Alkalmazás beszerzése", @@ -279,11 +279,11 @@ "hashtag.column_header.tag_mode.any": "vagy {additional}", "hashtag.column_header.tag_mode.none": "{additional} nélkül", "hashtag.column_settings.select.no_options_message": "Nincs javaslat", - "hashtag.column_settings.select.placeholder": "#Címkék megadása…", + "hashtag.column_settings.select.placeholder": "Addj meg hashtageket…", "hashtag.column_settings.tag_mode.all": "Mindegyik", "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", - "hashtag.column_settings.tag_toggle": "További címkék felvétele ehhez az oszlophoz", + "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", "hashtag.follow": "Hashtag követése", "hashtag.unfollow": "Hashtag követésének megszüntetése", "home.column_settings.basic": "Alapvető", @@ -335,7 +335,7 @@ "keyboard_shortcuts.search": "Keresősáv fókuszálása", "keyboard_shortcuts.spoilers": "Tartalmi figyelmeztetés mező megjelenítése/elrejtése", "keyboard_shortcuts.start": "\"Első lépések\" oszlop megnyitása", - "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel mögötti szöveg megjelenítése/elrejtése", + "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel ellátott szöveg megjelenítése/elrejtése", "keyboard_shortcuts.toggle_sensitivity": "Média megjelenítése/elrejtése", "keyboard_shortcuts.toot": "Új bejegyzés írása", "keyboard_shortcuts.unfocus": "Szerkesztés/keresés fókuszból való kivétele", @@ -380,7 +380,7 @@ "navigation_bar.favourites": "Kedvencek", "navigation_bar.filters": "Némított szavak", "navigation_bar.follow_requests": "Követési kérelmek", - "navigation_bar.followed_tags": "Követett #címkék", + "navigation_bar.followed_tags": "Követett hashtagek", "navigation_bar.follows_and_followers": "Követettek és követők", "navigation_bar.lists": "Listák", "navigation_bar.logout": "Kijelentkezés", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ez a képernyő ne jelenjen meg újra", "onboarding.actions.go_to_explore": "Felkapottak megtekintése", "onboarding.actions.go_to_home": "Ugrás a saját hírfolyamra", + "onboarding.compose.template": "Üdvözlet, #Mastodon!", "onboarding.follows.empty": "Sajnos jelenleg nem jeleníthető meg eredmény. Kipróbálhatod a keresést vagy böngészheted a felfedező oldalon a követni kívánt személyeket, vagy próbáld meg később.", "onboarding.follows.lead": "Mindenki maga válogatja össze a saját hírfolyamát. Minél több embert követsz, annál aktívabb és érdekesebb a dolog. Ezek a profilok jó kiindulási alapot jelenthetnek – később bármikor leállíthatod a követésüket!", "onboarding.follows.title": "Népszerű a Mastodonon", @@ -554,12 +555,12 @@ "search.quick_action.go_to_hashtag": "Ugrás a következő hashtaghez: {x}", "search.quick_action.open_url": "Webcím megnyitása a Mastodonon", "search.quick_action.status_search": "Bejegyzések a következő keresésre: {x}", - "search.search_or_paste": "Keresés vagy webcím beillesztése", + "search.search_or_paste": "Keresés vagy URL beillesztése", "search_popout.quick_actions": "Gyors műveletek", "search_popout.recent": "Legutóbbi keresések", "search_results.accounts": "Profilok", "search_results.all": "Összes", - "search_results.hashtags": "#Címkék", + "search_results.hashtags": "Hashtagek", "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre", "search_results.statuses": "Bejegyzések", "search_results.statuses_fts_disabled": "Ezen a Mastodon szerveren nem engedélyezett a bejegyzések tartalom szerinti keresése.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 845c9abc3..3bd57ca57 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", "explore.search_results": "Որոնման արդիւնքներ", - "explore.suggested_follows": "Քեզ համար", + "explore.suggested_follows": "People", "explore.title": "Բացայայտել", "explore.trending_links": "Նորութիւններ", "explore.trending_statuses": "Գրառումներ", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 31e283969..7cc8281e0 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", "explore.search_results": "Hasil pencarian", - "explore.suggested_follows": "Untuk Anda", + "explore.suggested_follows": "People", "explore.title": "Jelajahi", "explore.trending_links": "Berita", "explore.trending_statuses": "Kiriman", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index b720ec213..c4eb719d7 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Kpesa nsogbu", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index fb880145b..ed3cf0520 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiez amastraso a klipplanko", "errors.unexpected_crash.report_issue": "Reportigez problemo", "explore.search_results": "Trovuri", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explorez", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 56ac8a799..e6657a84f 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", "explore.search_results": "Leitarniðurstöður", - "explore.suggested_follows": "Fyrir þig", + "explore.suggested_follows": "Fólk", "explore.title": "Kanna", "explore.trending_links": "Fréttir", "explore.trending_statuses": "Færslur", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ekki birta þetta aftur", "onboarding.actions.go_to_explore": "Sjáðu hvað er í umræðunni", "onboarding.actions.go_to_home": "Fara á heimastreymið þitt", + "onboarding.compose.template": "Halló #Mastodon!", "onboarding.follows.empty": "Því miður er ekki hægt að birta neinar niðurstöður í augnablikinu. Þú getur reynt að nota leitina eða skoðað könnunarsíðuna til að finna fólk til að fylgjast með, nú eða prófað aftur síðar.", "onboarding.follows.lead": "Þú ræktar heimastreymið þitt. Því fleira fólki sem þú fylgist með, því virkara og áhugaverðara verður það. Að fylgjast með þessum notendum gæti verið ágætt til að byrja með - þú getur alltaf hætt að fylgjast með þeim síðar!", "onboarding.follows.title": "Vinsælt á Mastodon", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fd18e388d..af2b8e64d 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala un problema", "explore.search_results": "Risultati della ricerca", - "explore.suggested_follows": "Per te", + "explore.suggested_follows": "Persone", "explore.title": "Esplora", "explore.trending_links": "Novità", "explore.trending_statuses": "Post", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Non mostrare più", "onboarding.actions.go_to_explore": "Guarda le tendenze", "onboarding.actions.go_to_home": "Vai alla cronologia della tua home", + "onboarding.compose.template": "Ciao #Mastodon!", "onboarding.follows.empty": "Sfortunatamente, nessun risultato può essere mostrato in questo momento. Puoi provare a utilizzare la ricerca o sfogliare la pagina di esplorazione per trovare persone da seguire, oppure riprova più tardi.", "onboarding.follows.lead": "La cronologia della tua home è gestita da te. Più persone segui, più attiva e interessante sarà. Questi profili possono essere un buon punto di partenza; puoi sempre smettere di seguirli in seguito!", "onboarding.follows.title": "Popolare su Mastodon", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 86a56ff53..5b9cf1752 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", "explore.search_results": "検索結果", - "explore.suggested_follows": "おすすめ", + "explore.suggested_follows": "ユーザー", "explore.title": "エクスプローラー", "explore.trending_links": "ニュース", "explore.trending_statuses": "投稿", @@ -445,6 +445,7 @@ "onboarding.actions.close": "今後この画面を表示しない", "onboarding.actions.go_to_explore": "話題をさがす", "onboarding.actions.go_to_home": "タイムラインに移動", + "onboarding.compose.template": "#Mastodon はじめました", "onboarding.follows.empty": "おすすめに表示できるアカウントはまだありません。検索や「見つける」を活用して、ほかのアカウントを探してみましょう。", "onboarding.follows.lead": "自分の手でタイムラインを作ってみましょう。フォローを増やせば、タイムラインはより賑やかでおもしろいものになります。最初のフォローの参考になりそうなアカウントをいくつか表示しています。気になったものがあれば、ここからフォローしてみましょう。フォローはいつでも解除して大丈夫です。", "onboarding.follows.title": "おすすめのアカウント", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "プロフィールを完成させる", "onboarding.steps.share_profile.body": "Mastodon アカウントをほかの人に紹介しましょう。", "onboarding.steps.share_profile.title": "プロフィールをシェアする", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "ワンポイント アカウント設定から2要素認証を有効にして、アカウントのセキュリティを強化しておきましょう。認証には任意のワンタイムパスワード(TOTP)アプリを利用でき、電話番号は不要です。", "onboarding.tips.accounts_from_other_servers": "ワンポイント Mastodon はたくさんのサーバーがつながりあってできている非中央集権型のSNSです。いくつかのアカウントはこことは別のサーバーに所属していることがありますが、サーバーの違いを意識しなくても同じようにフォローすることができます。サーバーが異なる場合は、ユーザー名の後半にサーバー名が表示されます。", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "ワンポイント もしも {domain} の雰囲気が合わないと感じたときは、ほかのMastodonサーバーにフォロワーを引き継いだまま引っ越しできます。また、自分で独自のサーバーを開設することも可能です。", + "onboarding.tips.verification": "ワンポイント webサイトを持っている場合は、webサイトにMastodonアカウントへのリンクを掲載し、さらにアカウントのプロフィール側にもwebサイトへのリンクを追加することで、アカウントが自分のものであることを証明できます。課金や書類の提出は必要ありません。", "password_confirmation.exceeds_maxlength": "パスワードの最大文字数を超えています", "password_confirmation.mismatching": "入力済みのパスワードと一致しません", "picture_in_picture.restore": "元に戻す", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 51c4073ef..2d84b4011 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index aee2e2f1b..16748208b 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", "explore.search_results": "Igemmaḍ n unadi", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Snirem", "explore.trending_links": "Isallen", "explore.trending_statuses": "Tisuffiɣin", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 0e39264f9..387686696 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", "errors.unexpected_crash.report_issue": "Мәселені хабарла", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index d8c85517d..f820dbc43 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 20a53bf4d..8030fd65f 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", "explore.search_results": "검색 결과", - "explore.suggested_follows": "추천", + "explore.suggested_follows": "사람들", "explore.title": "둘러보기", "explore.trending_links": "소식", "explore.trending_statuses": "게시물", @@ -445,6 +445,7 @@ "onboarding.actions.close": "이 화면을 다시 보지 않기", "onboarding.actions.go_to_explore": "무엇이 유행인지 보기", "onboarding.actions.go_to_home": "홈 피드로 가기", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "안타깝지만 아직은 아무 것도 보여드릴 수 없습니다. 검색을 이용하거나 발견하기 페이지에서 팔로우 할 사람을 찾을 수 있습니다. 아니면 잠시 후에 다시 시도하세요.", "onboarding.follows.lead": "내 피드는 내가 만듭니다. 더 많은 사람을 팔로우 할 수록 더 활성화되고 흥미로울 것입니다. 이 계정들이 첫 상대로 좋을 것 같습니다. 나중에 언제든지 팔로우를 해제할 수 있습니다!", "onboarding.follows.title": "마스토돈 속 인기물", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index da1589a77..717c0a088 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Şopa gemara (stacktrace) tûrikê ra jê bigire", "errors.unexpected_crash.report_issue": "Pirsgirêkekê ragihîne", "explore.search_results": "Encamên lêgerînê", - "explore.suggested_follows": "Ji bo te", + "explore.suggested_follows": "People", "explore.title": "Vekole", "explore.trending_links": "Nûçe", "explore.trending_statuses": "Şandî", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 2d6cff6f3..47fe1c301 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Dasskrifa daslergh dhe'n astel glypp", "errors.unexpected_crash.report_issue": "Reportya kudyn", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index 250586ecd..f947f934b 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Contributa", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 51f29375a..cc2b3598d 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index cec437a39..3d7578feb 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", "explore.search_results": "Meklēšanas rezultāti", - "explore.suggested_follows": "Tev", + "explore.suggested_follows": "Cilvēki", "explore.title": "Pārlūkot", "explore.trending_links": "Jaunumi", "explore.trending_statuses": "Ziņas", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Vairs nerādīt šo ekrānu", "onboarding.actions.go_to_explore": "Skatīt tendences", "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", + "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", "onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!", "onboarding.follows.title": "Populārs Mastodon", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 3b789942f..6e779e26f 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Пријавете проблем", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4cbbcde57..50c239daf 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "പര്യവേക്ഷണം നടത്തുക", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index b15050b52..09ee8da5d 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 3bf84ecf2..4a5a01fab 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan", "errors.unexpected_crash.report_issue": "Laporkan masalah", "explore.search_results": "Hasil carian", - "explore.suggested_follows": "Untuk anda", + "explore.suggested_follows": "People", "explore.title": "Terokai", "explore.trending_links": "Baru", "explore.trending_statuses": "Hantar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 877cca3a4..08bd29094 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "stacktrace ကို ကလစ်ဘုတ်သို့ ကူးယူပါ", "errors.unexpected_crash.report_issue": "အဆင်မပြေမှုကို တိုင်ကြားရန်", "explore.search_results": "ရှာဖွေမှုရလဒ်များ", - "explore.suggested_follows": "သင့်အတွက်", + "explore.suggested_follows": "လူများ", "explore.title": "စူးစမ်းရန်", "explore.trending_links": "သတင်းများ", "explore.trending_statuses": "ပို့စ်တင်မယ်", @@ -445,28 +445,29 @@ "onboarding.actions.close": "ဤစခရင်ကို ထပ်မပြပါနှင့်", "onboarding.actions.go_to_explore": "ခေတ်စားနေသည်များကို ကြည့်ပါ", "onboarding.actions.go_to_home": "ပင်မစာမျက်နှာသို့ သွားပါ", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.compose.template": "မင်္ဂလာပါ #Mastodon", + "onboarding.follows.empty": "ယခုအချိန် မည်သည့်ရလဒ်ကိုမျှ မပြသနိုင်ပါ။ လူများကိုစောင့်ကြည့်ရန်အတွက် Explore စာမျက်နှာကို အသုံးပြု၍ စမ်းကြည့်နိုင်သည် သို့မဟုတ် နောက်မှ ထပ်စမ်းကြည့်ပါ။", + "onboarding.follows.lead": "သင့်ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ သင်စောင့်ကြည့်သူ များလေလေ၊ စိတ်ဝင်စားစရာကောင်းသောပို့စ်များ တွေ့ရလေဖြစ်သည်။ ဤပရိုဖိုင်များမှာ ကောင်းမွန်သောအစပြုမှုတစ်ခုဖြစ်ပြီး ၎င်းတို့ကိုစောင့်ကြည့်ခြင်းမှလည်း အချိန်မရွေး ပယ်ဖျက်နိုင်ပါသည်။", "onboarding.follows.title": "Mastodon တွင် ရေပန်းစားခြင်း", "onboarding.share.lead": "Mastodon တွင် သင့်အား မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Mastodon ရှိ ကျွန်ုပ်၏အမည်မှာ {username} ဖြစ်သည်။ ကျွန်ုပ်ကို {url} တွင် စောင့်ကြည့်နိုင်ပါသည်", "onboarding.share.next_steps": "ဖြစ်နိုင်ချေရှိသော နောက်အဆင့်များ -", "onboarding.share.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ", "onboarding.start.lead": "သင့် Mastodon အကောင့်အသစ်မှာ အသုံးပြုနိုင်ပါပြီ။ အကောင်းဆုံးဖြစ်အောင် သင်ပြုလုပ်နိုင်သည် -", "onboarding.start.skip": "ရှေ့ကို ကျော်သွားချင်ပါသလား။", "onboarding.start.title": "ပြုလုပ်ပြီးပြီ။", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", + "onboarding.steps.follow_people.body": "သင်သည် ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ စိတ်ဝင်စားသူများနဲ့ အပြန်အလှန်စောင့်ကြည့်နိုင်ပါပြီ။", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "ကမ္ဘာကြီးကို နှုတ်ဆက်လိုက်ပါ။", "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.body": "အခြားသူများမှာလည်း သင်နှင့် အပြန်အလှန် တုံ့ပြန်နိုင်ပါသည်။", "onboarding.steps.setup_profile.title": "သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်လိုက်ပါ", "onboarding.steps.share_profile.body": "Mastodon တွင် သင့်ကို သူငယ်ချင်းများ မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။", "onboarding.steps.share_profile.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "သင်သိပါသလား။ သင့်အကောင့်သတ်မှတ်ချက်များတွင် နှစ်ဆင့်ခံလုံခြုံရေးစနစ် ထည့်သွင်းခြင်းဖြင့် သင့်အကောင့်ကို လုံခြုံစေနိုင်ပါသည်။ ထိုစနစ်မှာ သင်နှစ်သက်ရာ TOTP အက်ပ်နှင့် အလုပ်လုပ်ပြီး ဖုန်းနံပါတ်ထည့်ရန်မလိုပါ။", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "သင်သိပါသလား? အကယ်၍ {domain} သည် နောင်တွင် သင့်အတွက် အဆင်မပြေပါက သင့်စောင့်ကြည့်သူများကို မဆုံးရှုံးစေဘဲ အခြား Mastodon ဆာဗာသို့ ပြောင်းရွှေ့နိုင်ပါသည်။ သင့် ကိုယ်ပိုင်ဆာဗာတစ်လုံး ပြုလုပ်၍ပင် ဆောင်ရွက်နိုင်ပါသည်။", + "onboarding.tips.verification": "သင်သိပါသလား။ သင့်ဝဘ်ဆိုက်တွင် Mastodon ပရိုဖိုင်အတွက် လင့်ခ်ထည့်ထားပြီး သင့်ပရိုဖိုင်တွင် ဝဘ်ဆိုက်ထည့်ထားခြင်းဖြင့် သင့်အကောင့်ကို အတည်ပြုနိုင်သည်။ အခကြေးငွေ သို့မဟုတ် စာရွက်စာတမ်းများ မလိုအပ်ပါ။", "password_confirmation.exceeds_maxlength": "စကားဝှက်အတည်ပြုခြင်းတွင် အများဆုံးစကားဝှက်အရှည်ထက် ကျော်လွန်နေပါသည်", "password_confirmation.mismatching": "စကားဝှက်အတည်ပြုချက်မှာ မကိုက်ညီပါ", "picture_in_picture.restore": "ပြန်ထားပါ", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 4e4320c1d..b60aba562 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", "explore.search_results": "Zoekresultaten", - "explore.suggested_follows": "Voor jou", + "explore.suggested_follows": "Mensen", "explore.title": "Verkennen", "explore.trending_links": "Nieuws", "explore.trending_statuses": "Berichten", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Dit scherm niet meer weergeven", "onboarding.actions.go_to_explore": "De huidige trends bekijken", "onboarding.actions.go_to_home": "Ga naar je starttijdlijn", + "onboarding.compose.template": "Hallo #Mastodon!", "onboarding.follows.empty": "Helaas kunnen op dit moment geen resultaten worden getoond. Je kunt proberen te zoeken of te bladeren door de verkenningspagina om mensen te vinden die je kunt volgen, of probeer het later opnieuw.", "onboarding.follows.lead": "Je beheert je eigen starttijdlijn. Hoe meer mensen je volgt, hoe actiever en interessanter het zal zijn. Deze profielen kunnen een goed startpunt zijn, je kan ze later altijd niet meer volgen!", "onboarding.follows.title": "Populair op Mastodon", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 57706abbb..e3c979de4 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", "explore.search_results": "Søkeresultat", - "explore.suggested_follows": "For deg", + "explore.suggested_follows": "People", "explore.title": "Utforsk", "explore.trending_links": "Nytt", "explore.trending_statuses": "Innlegg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 8942b7d3b..c04d300e4 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -182,7 +182,7 @@ "conversation.with": "Med {names}", "copypaste.copied": "Kopiert", "copypaste.copy": "Kopier", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopier til utklippstavle", "directory.federated": "Fra det kjente strømiverset", "directory.local": "Kun fra {domain}", "directory.new_arrivals": "Nye ankomster", @@ -224,7 +224,7 @@ "empty_column.favourited_statuses": "Du har ikke noen favorittinnlegg enda. Når du favorittmarkerer et inlegg, vil det dukke opp her.", "empty_column.favourites": "Ingen har favorittmarkert dette innlegget ennå. Når noen gjør det, vil de dukke opp her.", "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.", - "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.", + "empty_column.followed_tags": "Du har ikke fulgt noen emneknagger ennå. Når du gjør det, vil de vises her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", "empty_column.home": "Hjem-tidslinjen din er tom! Følg flere folk for å fylle den. {suggestions}", "empty_column.home.suggestions": "Se noen forslag", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", "explore.search_results": "Søkeresultater", - "explore.suggested_follows": "For deg", + "explore.suggested_follows": "Personer", "explore.title": "Utforsk", "explore.trending_links": "Nyheter", "explore.trending_statuses": "Innlegg", @@ -264,7 +264,7 @@ "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", - "followed_tags": "Followed hashtags", + "followed_tags": "Fulgte emneknagger", "footer.about": "Om", "footer.directory": "Profilkatalog", "footer.get_app": "Last ned appen", @@ -292,7 +292,7 @@ "home.hide_announcements": "Skjul kunngjøring", "home.show_announcements": "Vis kunngjøring", "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.", - "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i hjem-feeden din.", + "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.", "interaction_modal.on_another_server": "På en annen server", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.", "notifications_permission_banner.title": "Aldri gå glipp av noe", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.action.back": "Ta meg tilbake", + "onboarding.actions.back": "Ta meg tilbake", + "onboarding.actions.close": "Ikke vis dette flere ganger", + "onboarding.actions.go_to_explore": "Se hva som er populært", + "onboarding.actions.go_to_home": "Gå til din tidslinje", + "onboarding.compose.template": "Hallo #Mastodon!", + "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nå. Du kan prøve å bruke søk eller bla gjennom utforske-siden for å finne folk å følge, eller prøve igjen senere.", "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.follows.title": "Populært på Mastodon", "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Jeg er {username} på #Mastodon! Kom og følg meg på {url}", "onboarding.share.next_steps": "Possible next steps:", "onboarding.share.title": "Share your profile", "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.start.title": "You've made it!", - "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": "Vil du hoppe over dette?", + "onboarding.start.title": "Du klarte det!", + "onboarding.steps.follow_people.body": "Du bestemmer over din egen tidslinje. La oss fylle den med ineressante personer.", + "onboarding.steps.follow_people.title": "Følg {count, plural, one {en person} other {# personer}}", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Make your first post", "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", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Visste du? Du kan sikre kontoen din ved å sette opp 2-trinnsinnlogging i kontoinnstillingene dine. Det fungerer med enhver TOTP-app du velger selv, intet telefonnummer nødvendig!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Visste du? Hvis du føler at {domain} ikke er et flott servervalg for deg i fremtiden, kan du flytte til en annen Mastodon-server uten å miste følgerene dine. Du kan også være vert for din egen server!", + "onboarding.tips.verification": "Visste du? Du kan bekrefte kontoen din ved å legge en lenke til Mastodon-profilen din på ditt eget nettsted og legge nettstedet til i profilen din. Ingen gebyrer eller dokumenter nødvendig!", "password_confirmation.exceeds_maxlength": "Passordbekreftelsen overskrider den maksimale passordlengden", "password_confirmation.mismatching": "Passordene er ulike", "picture_in_picture.restore": "Legg den tilbake", @@ -492,7 +493,7 @@ "privacy_policy.title": "Personvernregler", "refresh": "Oppfrisk", "regeneration_indicator.label": "Laster…", - "regeneration_indicator.sublabel": "Dine startside forberedes!", + "regeneration_indicator.sublabel": "Dine tidslinje blir gjort klar!", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dag} other {# dager}} siden", "relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden", @@ -541,7 +542,7 @@ "report.thanks.title": "Ønsker du ikke å se dette?", "report.thanks.title_actionable": "Takk for at du rapporterer, vi skal se på dette.", "report.unfollow": "Slutt å følge @{name}", - "report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din hjem-feed lenger, slutt å følge dem.", + "report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din tidslinje lenger, slutt å følge dem.", "report_notification.attached_statuses": "{count, plural,one {{count} innlegg} other {{count} innlegg}} vedlagt", "report_notification.categories.other": "Annet", "report_notification.categories.spam": "Søppelpost", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index f763d2566..652255e4a 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "explore.search_results": "Resultats de recèrca", - "explore.suggested_follows": "Per vos", + "explore.suggested_follows": "People", "explore.title": "Explorar", "explore.trending_links": "Novèlas", "explore.trending_statuses": "Publicacions", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index c160d1b11..f14226428 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index e20a75743..417cc54cd 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "explore.search_results": "Wyniki wyszukiwania", - "explore.suggested_follows": "Dla Ciebie", + "explore.suggested_follows": "Ludzie", "explore.title": "Odkrywaj", "explore.trending_links": "Aktualności", "explore.trending_statuses": "Posty", @@ -445,8 +445,9 @@ "onboarding.actions.close": "Nie pokazuj ponownie", "onboarding.actions.go_to_explore": "Zobacz co się dzieje", "onboarding.actions.go_to_home": "Przejdź do swojego kanału głównego", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.compose.template": "Witaj #Mastodon!", + "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.", + "onboarding.follows.lead": "Zarządasz swoim własnym kanałem. Im więcej ludzi śledzisz, tym bardziej aktywny i ciekawy będzie Twój kanał. Te profile mogą być dobrym punktem wyjścia— możesz przestać je obserwować w dowolnej chwili!", "onboarding.follows.title": "Popularne na Mastodonie", "onboarding.share.lead": "Daj znać ludziom, jak mogą cię znaleźć na Mastodonie!", "onboarding.share.message": "Jestem {username} na #Mastodon! Śledź mnie tutaj {url}", @@ -459,13 +460,13 @@ "onboarding.steps.follow_people.title": "Obserwuj {count, plural, one {jedną osobę} few {# osoby} many {# osób} other {# osób}}", "onboarding.steps.publish_status.body": "Przywitaj się ze światem.", "onboarding.steps.publish_status.title": "Utwórz swój pierwszy post", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "Inni użytkownicy są bardziej skłonni do interakcji z Tobą jeśli posiadasz wypełniony profil.", "onboarding.steps.setup_profile.title": "Spersonalizuj swój profil", "onboarding.steps.share_profile.body": "Poinformuj swoich przyjaciół jak znaleźć cię na Mastodonie!", "onboarding.steps.share_profile.title": "Udostępnij swój profil", "onboarding.tips.2fa": "Czy wiesz? Możesz zabezpieczyć swoje konto poprzez skonfigurowanie uwierzytelniania dwuetapowego w ustawieniach konta. Działa z wybraną przez Ciebie aplikacją TOTP, żaden numer telefonu nie jest wymagany!", "onboarding.tips.accounts_from_other_servers": "Czy wiesz? Ponieważ Mastodon jest zdecentralizowany, niektóre profile, z którymi się spotkasz, będą hostowane na serwerach innych niż twoje. A mimo to możesz z nimi bezproblemowo wchodzić w interakcje! Ich serwer jest w drugiej połowie ich nazwy użytkownika!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", + "onboarding.tips.migration": "Czy wiesz? Jeśli uważasz, że {domain} nie jest dla Ciebie dobrym wyborem na serwer w przyszłości, możesz przenieść się na inny serwer Mastodona bez utraty obserwujących. Możesz nawet hostować swój własny serwer!", "onboarding.tips.verification": "Czy wiesz? Możesz zweryfikować swoje konto, umieszczając link do profilu Mastodon na swojej własnej stronie internetowej, a następnie dodając stronę do swojego profilu. Żadne opłaty lub dokumenty nie są wymagane!", "password_confirmation.exceeds_maxlength": "Potwierdzenie hasła przekracza maksymalną długość hasła", "password_confirmation.mismatching": "Wprowadzone hasła różnią się od siebie", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 42c849fad..8057290da 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar dados do erro para área de transferência", "errors.unexpected_crash.report_issue": "Reportar problema", "explore.search_results": "Resultado da pesquisa", - "explore.suggested_follows": "Para você", + "explore.suggested_follows": "People", "explore.title": "Explorar", "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Não mostre esta tela novamente", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Ir para sua página inicial", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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 no Mastodon", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 19bfa8b5f..0aaa83443 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -182,7 +182,7 @@ "conversation.with": "Com {names}", "copypaste.copied": "Copiado", "copypaste.copy": "Copiar", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Copiar para a área de transferência", "directory.federated": "Do fediverso conhecido", "directory.local": "Apenas de {domain}", "directory.new_arrivals": "Recém chegados", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", "explore.search_results": "Resultados da pesquisa", - "explore.suggested_follows": "Para si", + "explore.suggested_follows": "Pessoas", "explore.title": "Explorar", "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca perca nada", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "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.start.title": "You've made it!", - "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.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", - "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", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.action.back": "Voltar atrás", + "onboarding.actions.back": "Voltar atrás", + "onboarding.actions.close": "Não exibir isto novamente", + "onboarding.actions.go_to_explore": "Veja as tendências atuais", + "onboarding.actions.go_to_home": "Ir para a sua página inicial", + "onboarding.compose.template": "Olá #Mastodon!", + "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.", + "onboarding.follows.lead": "Você personaliza a sua própria página inicial. Quanto mais pessoas seguir, mais ativa e interessante ela será. Estes perfis podem ser um bom ponto de partida - pode sempre deixar de os seguir mais tarde!", + "onboarding.follows.title": "Popular no Mastodon", + "onboarding.share.lead": "Deixe as pessoas saber como o podem encontrar no Mastodon!", + "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha seguir-me em {url}", + "onboarding.share.next_steps": "Próximos passos possíveis:", + "onboarding.share.title": "Partilhe o seu perfil", + "onboarding.start.lead": "A sua nova conta no Mastodon está pronta. Aqui está como pode tirar dela melhor proveito:", + "onboarding.start.skip": "Quer saltar à frente?", + "onboarding.start.title": "Conseguiu!", + "onboarding.steps.follow_people.body": "Você personaliza a sua própria página inicial. Vamos preenche-la com pessoas interessantes.", + "onboarding.steps.follow_people.title": "Siga {count, plural, one {uma pessoa} other {# pessoas}}", + "onboarding.steps.publish_status.body": "Diga olá para o mundo.", + "onboarding.steps.publish_status.title": "Faça a sua primeira publicação", + "onboarding.steps.setup_profile.body": "É mais provável que outros interajam consigo se preencher o seu perfil.", + "onboarding.steps.setup_profile.title": "Personalize o seu perfil", + "onboarding.steps.share_profile.body": "Diga aos seus amigos como o encontrarem no Mastodon!", + "onboarding.steps.share_profile.title": "Partilhe o seu perfil", + "onboarding.tips.2fa": "Sabia? Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!", + "onboarding.tips.accounts_from_other_servers": "Sabia? Como o Mastodon é descentralizado, alguns perfis que você encontra serão hospedados em outros servidores que não os seus. E ainda assim você pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de usuário!", + "onboarding.tips.migration": "Sabia? Se, no futuro, sentir que {domain} não é uma ótima escolha de servidor para si, pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!", + "onboarding.tips.verification": "Sabia? Pode verificar a sua conta colocando um link para o seu perfil Mastodon no seu site e adicionando o endereço do site ao seu perfil. Não são necessárias taxas ou documentos!", "password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excede o tamanho máximo para a palavra-passe", "password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde", "picture_in_picture.restore": "Colocá-lo de volta", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 4d8cd34c2..45324fb72 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiere stacktrace în clipboard", "errors.unexpected_crash.report_issue": "Raportează o problemă", "explore.search_results": "Rezultatele căutării", - "explore.suggested_follows": "Pentru tine", + "explore.suggested_follows": "People", "explore.title": "Explorează", "explore.trending_links": "Noutăți", "explore.trending_statuses": "Postări", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 32c1d385e..9f7c80cff 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "explore.search_results": "Результаты поиска", - "explore.suggested_follows": "Для вас", + "explore.suggested_follows": "Люди", "explore.title": "Обзор", "explore.trending_links": "Новости", "explore.trending_statuses": "Посты", @@ -445,11 +445,12 @@ "onboarding.actions.close": "Больше не показывать этот экран", "onboarding.actions.go_to_explore": "Посмотреть, что актуально", "onboarding.actions.go_to_home": "Перейти к домашней ленте новостей", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Привет, #Mastodon!", + "onboarding.follows.empty": "К сожалению, сейчас нет результатов. Вы можете попробовать использовать поиск или просмотреть страницу \"Исследования\", чтобы найти людей, за которыми можно следить, или повторить попытку позже.", "onboarding.follows.lead": "Вы сами формируете свою домашнюю ленту. Чем больше людей, за которыми вы следите, тем активнее и интереснее она будет. Эти профили могут быть хорошей отправной точкой - вы всегда можете от них отказаться!", "onboarding.follows.title": "Популярно на Mastodon", "onboarding.share.lead": "Расскажите людям, как они могут найти вас на Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}", "onboarding.share.next_steps": "Возможные дальнейшие шаги:", "onboarding.share.title": "Поделиться вашим профилем", "onboarding.start.lead": "Ваш новый аккаунт Mastodon готов к работе. Вот как вы можете использовать его по максимуму:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Настройте свой профиль", "onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поделитесь вашим профилем", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Знаете ли вы? Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!", "onboarding.tips.accounts_from_other_servers": "Знали ли вы? Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих последователей. Вы даже можете разместить свой собственный сервер!", + "onboarding.tips.verification": "Знали ли вы? Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!", "password_confirmation.exceeds_maxlength": "Срок подтверждения пароля превышает максимальную длину пароля", "password_confirmation.mismatching": "Введенные пароли не совпадают.", "picture_in_picture.restore": "Вернуть обратно", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 82243f05a..8947465aa 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "स्तेक्त्रेसमनुलिपिं कुरु क्लिप्फलकं", "errors.unexpected_crash.report_issue": "दोषमावेदय", "explore.search_results": "परिणामानविच्छ", - "explore.suggested_follows": "तुभ्यम्", + "explore.suggested_follows": "People", "explore.title": "अन्विच्छ", "explore.trending_links": "वार्ताः", "explore.trending_statuses": "पत्राणि", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 07ab7ebf2..7d318d0ba 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Sinnala unu problema", "explore.search_results": "Resurtados de sa chirca", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 47d18bce4..1da29dfcd 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace tae yer clipboord", "errors.unexpected_crash.report_issue": "Sen in a issue", "explore.search_results": "Seirch finnins", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Splore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2fba41265..3e90a30f6 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "ගවේශණය", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index debd8e769..6a6f8845e 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", "explore.search_results": "Výsledky hľadania", - "explore.suggested_follows": "Pre teba", + "explore.suggested_follows": "Ľudia", "explore.title": "Objavuj", "explore.trending_links": "Novinky", "explore.trending_statuses": "Príspevky", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Nazdar #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 485e3890b..6c5943e2d 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj sledenje skladu na odložišče", "errors.unexpected_crash.report_issue": "Prijavi težavo", "explore.search_results": "Rezultati iskanja", - "explore.suggested_follows": "Za vas", + "explore.suggested_follows": "People", "explore.title": "Razišči", "explore.trending_links": "Novice", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Tega zaslona ne kaži več", "onboarding.actions.go_to_explore": "Poglejte, kaj je v trendu", "onboarding.actions.go_to_home": "Pojdite na svoj domači vir", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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": "Priljubljeno na Mastodonu", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index a06e36f82..560ef7375 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", "explore.search_results": "Përfundime kërkimi", - "explore.suggested_follows": "Për ju", + "explore.suggested_follows": "Persona", "explore.title": "Eksploroni", "explore.trending_links": "Lajme", "explore.trending_statuses": "Postime", @@ -445,28 +445,29 @@ "onboarding.actions.close": "Mos e shfaq sërish këtë skenë", "onboarding.actions.go_to_explore": "Shihni ç’është në modë", "onboarding.actions.go_to_home": "Kaloni te prurja juaj kryesore", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "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.compose.template": "Tungjatjeta #Mastodon!", + "onboarding.follows.empty": "Mjerisht, s’mund të shfaqen përfundime tani. Mund të provoni të përdorni kërkimin, ose të shfletoni faqen e eksplorimit, që të gjeni persona për ndjekje, ose të riprovoni më vonë.", + "onboarding.follows.lead": "Ju kujdeseni për prurjen tuaj. Sa më tepër persona të tjerë të ndiqni, aq më aktive dhe interesante do të bëhet ajo. Këto profile mund të jenë një pikënisje e mirë—mundeni përherë të ndërpritni ndjekjen e tyre më vonë!", "onboarding.follows.title": "Popullore në Mastodon", "onboarding.share.lead": "Bëjuni të ditur njerëzve se si mund t’ju gjejnë në Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Jam {username} në #Mastodon! Ejani dhe ndiqmëni te {url}", "onboarding.share.next_steps": "Hapa pasues të mundshëm:", "onboarding.share.title": "Ndani me të tjerët profilin tuaj", - "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.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", + "onboarding.start.lead": "Llogaria juaj e re Mastodon është gati për punë. Ja se si të përfitoni maksimumin prej saj:", + "onboarding.start.skip": "Doni të hidheni drejt e në punë?", + "onboarding.start.title": "Ia dolët!", + "onboarding.steps.follow_people.body": "Ju kujdeseni për prurjen tuaj. Le ta mbushim me persona interesantë.", "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": "Make your first post", - "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", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.steps.publish_status.body": "Përshëndetni botën.", + "onboarding.steps.publish_status.title": "Shkruani postimin tuaj të parë", + "onboarding.steps.setup_profile.body": "Ka më tepër gjasa që të tjerët të ndërveprojnë me ju, kur keni një profil të plotësuar.", + "onboarding.steps.setup_profile.title": "Personalizoni profilin tuaj", + "onboarding.steps.share_profile.body": "Bëjuni të ditur shokëve si t’ju gjejnë në Mastodon!", + "onboarding.steps.share_profile.title": "Ndani me të tjerët profilin tuaj", + "onboarding.tips.2fa": "E dini? Mund të siguroni llogarinë tuaj duke ujdisur mirëfilltësim dyfaktorësh, që nga rregullimet e llogarisë tuaj. Funksionon me çfarëdo aplikacioni TOTP që doni, pa pasur nevojë për numër telefoni!", + "onboarding.tips.accounts_from_other_servers": "E dini? Ngaqë Mastodon-i është i decentralizuar, disa profile që hasni, do të jenë të strehuar në shërbyes të tjerë nga ai i juaji. E megjithatë, mundeni të ndërveproni me ta në mënyrë të pacen! Shërbyesi i tyre gjendet në pjesën e dytë të emrit të përdoruesit të gjithkujt!", + "onboarding.tips.migration": "E dini? Nëse ju duket se {domain} s’është zgjidhje kushedi për shërbyes për ju në të ardhmen, mund të kaloni te një shërbyes tjetër Mastodon, pa humbur ndjekësit tuaj. Mundeni edhe të strehoni vetë shërbyesin tuaj!", + "onboarding.tips.verification": "E dini? Mund të verifikoni llogarinë tuaj duke vendosur në sajtin tuaj një lidhje për te profili juaj Mastodon dhe duke shtuar sajtin tuaj te profili juaj. Pa tarifa, apo pa u dashur dokumente!", "password_confirmation.exceeds_maxlength": "Fjalëkalimi i ripohuar tejkalon gjatësinë maksimum të fjalëkalimeve", "password_confirmation.mismatching": "Fjalëkalimi i ripohuar nuk përkon", "picture_in_picture.restore": "Ktheje ku qe", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index ee2db4d53..e860c8fc3 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj „stacktrace” u klipbord", "errors.unexpected_crash.report_issue": "Prijavi problem", "explore.search_results": "Rezultati pretrage", - "explore.suggested_follows": "Za Vas", + "explore.suggested_follows": "People", "explore.title": "Istraži", "explore.trending_links": "Vesti", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 0432869f6..c20657a87 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Копирај „stacktrace” у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", "explore.search_results": "Резултати претраге", - "explore.suggested_follows": "За Вас", + "explore.suggested_follows": "People", "explore.title": "Истражи", "explore.trending_links": "Вести", "explore.trending_statuses": "Објаве", @@ -445,11 +445,12 @@ "onboarding.actions.close": "Не приказуј овај екран поново", "onboarding.actions.go_to_explore": "Погледај шта је у тренду", "onboarding.actions.go_to_home": "Иди на почетну страницу", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Hello #Mastodon!", + "onboarding.follows.empty": "Нажалост, тренутно се не могу приказати резултати. Можете покушати са коришћењем претраге или прегледањем странице за истраживање да бисте пронашли људе које ћете пратити или покушајте поново касније.", "onboarding.follows.lead": "Ви сами бирате своју почетну страницу. Што више људи пратите, то ће бити активније и занимљивије. Ови профили могу бити добра полазна тачка—увек можете да их престанете пратити касније!", "onboarding.follows.title": "Популарно на Mastodon-у", "onboarding.share.lead": "Нека људи знају како могу да вас пронађу на Mastodon-у!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Ја сам {username} на #Mastodon-у! Пратите ме на {url}", "onboarding.share.next_steps": "Могући следећи кораци:", "onboarding.share.title": "Поделите свој профил", "onboarding.start.lead": "Ваш нови Mastodon налог је спреман. Ево како то можете искористити на најбољи начин:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Прилагодите свој профил", "onboarding.steps.share_profile.body": "Нека ваши пријатељи знају како да вас пронађу на Mastodon-у!", "onboarding.steps.share_profile.title": "Поделите свој профил", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Да ли сте знали? Можете да заштитите свој налог подешавањем двоструке потврде идентитета у подешавањима налога. Ради са било којом TOTP апликацијом по вашем избору, није потребан број телефона!", "onboarding.tips.accounts_from_other_servers": "Да ли сте знали? Пошто је Mastodon децентрализован, неки профили на које наиђете биће смештени на серверима различитим од вашег. А ипак можете да комуницирате са њима беспрекорно! Њихов сервер је у другој половини њиховог корисничког имена!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Да ли сте знали? Ако сматрате да {domain} није одличан избор сервера за вас у будућности, можете да пређете на други Mastodon сервер без губитка пратилаца. Можете чак и да хостујете сопствени сервер!", + "onboarding.tips.verification": "Да ли сте знали? Можете да верификујете свој налог тако што ћете ставити везу до свог Mastodon профила на свој веб сајт и додати веб сајт свом профилу. Нису потребне никакве накнаде или документи!", "password_confirmation.exceeds_maxlength": "Потврда лозинке премашује максималну дужину лозинке", "password_confirmation.mismatching": "Потврда лозинке се не подудара", "picture_in_picture.restore": "Врати назад", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 9acf38528..795ffe377 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -182,7 +182,7 @@ "conversation.with": "Med {names}", "copypaste.copied": "Kopierad", "copypaste.copy": "Kopiera", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopiera till urklipp", "directory.federated": "Från känt fediversum", "directory.local": "Endast från {domain}", "directory.new_arrivals": "Nyanlända", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", "explore.search_results": "Sökresultat", - "explore.suggested_follows": "För dig", + "explore.suggested_follows": "Personer", "explore.title": "Utforska", "explore.trending_links": "Nyheter", "explore.trending_statuses": "Inlägg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hallå #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", @@ -462,7 +463,7 @@ "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", + "onboarding.steps.share_profile.title": "Dela din profil", "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 5600422fc..ca773f388 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 7d20a2332..6c048c13d 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 40759754f..a7bd1f5ba 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 11deeb8dc..5166282a6 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 2443dfd22..367fe6949 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "explore.search_results": "ผลลัพธ์การค้นหา", - "explore.suggested_follows": "สำหรับคุณ", + "explore.suggested_follows": "ผู้คน", "explore.title": "สำรวจ", "explore.trending_links": "ข่าว", "explore.trending_statuses": "โพสต์", @@ -445,6 +445,7 @@ "onboarding.actions.close": "ไม่ต้องแสดงหน้าจอนี้อีก", "onboarding.actions.go_to_explore": "ดูสิ่งที่กำลังนิยม", "onboarding.actions.go_to_home": "ไปยังฟีดหน้าแรกของคุณ", + "onboarding.compose.template": "สวัสดี #Mastodon!", "onboarding.follows.empty": "น่าเสียดาย ไม่สามารถแสดงผลลัพธ์ได้ในตอนนี้ คุณสามารถลองใช้การค้นหาหรือเรียกดูหน้าสำรวจเพื่อค้นหาผู้คนที่จะติดตาม หรือลองอีกครั้งในภายหลัง", "onboarding.follows.lead": "คุณเรียบเรียงฟีดหน้าแรกของคุณเอง ยิ่งคุณติดตามผู้คนมากเท่าไร ฟีดหน้าแรกก็จะยิ่งมีการใช้งานและน่าสนใจมากขึ้นเท่านั้น โปรไฟล์เหล่านี้อาจเป็นจุดเริ่มต้นที่ดี—คุณสามารถเลิกติดตามเขาได้ในภายหลังเสมอ!", "onboarding.follows.title": "เป็นที่นิยมใน Mastodon", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 1f6ad6e6e..4fa354bdd 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", "explore.search_results": "Arama sonuçları", - "explore.suggested_follows": "Sizin için", + "explore.suggested_follows": "İnsanlar", "explore.title": "Keşfet", "explore.trending_links": "Haberler", "explore.trending_statuses": "Gönderiler", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Bunu tekrar gösterme", "onboarding.actions.go_to_explore": "Öne çıkanları gör", "onboarding.actions.go_to_home": "Ana akışına git", + "onboarding.compose.template": "Merhaba #Mastodon!", "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.", "onboarding.follows.lead": "Kendi ana akışınızı siz düzenliyorsunuz. Siz daha fazla insanı takip ettikçe, daha etkin ve ilgi çekici olacaktır. Bu profiller iyi bir başlangıç olabilir, isterseniz izlemeyi daha sonra bırakabilirsiniz!", "onboarding.follows.title": "Mastodon'da Popüler", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 0fc45cb0f..9cab1a901 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Хата турында белдерү", "explore.search_results": "Search results", - "explore.suggested_follows": "Сез өчен", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "Яңалыклар", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index c160d1b11..f14226428 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 7c2e56e56..aa0e70f7b 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", "explore.search_results": "Результати пошуку", - "explore.suggested_follows": "Для вас", + "explore.suggested_follows": "Люди", "explore.title": "Огляд", "explore.trending_links": "Новини", "explore.trending_statuses": "Дописи", @@ -445,7 +445,8 @@ "onboarding.actions.close": "Більше не показувати цей екран", "onboarding.actions.go_to_explore": "Переглянути тенденції", "onboarding.actions.go_to_home": "Перейти до вашої домашньої стрічки", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Привіт #Mastodon!", + "onboarding.follows.empty": "На жаль, жоден результат не може бути показаний просто зараз. Ви можете спробувати скористатися пошуком або переглядом сторінки огляду, щоб знайти людей для слідкування або повторіть спробу пізніше.", "onboarding.follows.lead": "Ви керуєте головною стрічкою. Чим більше підписок на людей, тим вона активніша й цікавіша. Ці профілі можуть бути хорошою відправною точкою - ви завжди можете відписатися від них пізніше!", "onboarding.follows.title": "Популярне в Mastodon", "onboarding.share.lead": "Розкажіть людям про те, як вони можуть знайти вас на Mastodon!", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Персоналізуйте свій профіль", "onboarding.steps.share_profile.body": "Розкажіть друзям, як знайти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поділитися своїм профілем", - "onboarding.tips.2fa": "Чи знаєте ви? Ви можете захистити свій обліковий запис, налаштувавши двофакторну автентифікацію в налаштуваннях свого облікового запису. Це працює з будь-яким TOTP додатком на ваш вибір, без потреби номеру телефону!", + "onboarding.tips.2fa": "Чи знаєте ви? Ви можете захистити свій обліковий запис, налаштувавши двофакторну автентифікацію в налаштуваннях свого облікового запису. Це працює з будь-яким TOTP-застосунком, без потреби номера телефону!", "onboarding.tips.accounts_from_other_servers": "Чи знаєте ви? Оскільки Mastodon децентралізований, деякі профілі, які ви відвідуєте, будуть розміщені на інших серверах. І все ж ви можете взаємодіяти з ними! Назва їхнього сервера розміщена у другій половині імені!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Чи знаєте ви? Якщо ви відчуваєте, що {domain} не найкращий вибір сервера в майбутньому, ви можете перейти на інший сервер Mastodon, не втративши при цьому своїх підписників. Ви навіть можете створити власний сервер!", + "onboarding.tips.verification": "Чи знаєте ви? Ви можете перевірити свій обліковий запис, розмістивши посилання на ваш профіль Mastodon на вашому вебсайті та додавши сайт до вашого профілю. Без плати чи документів!", "password_confirmation.exceeds_maxlength": "Підтвердження пароля перевищує максимально допустиму довжину пароля", "password_confirmation.mismatching": "Підтвердження пароля не збігається", "picture_in_picture.restore": "Повернути назад", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index f332720dc..c9cd6e31b 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index a9d635ed6..edadd6926 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ni vaqtinchalik xotiraga nusxalash", "errors.unexpected_crash.report_issue": "Muammo haqida xabar berish", "explore.search_results": "Qidiruv natijalari", - "explore.suggested_follows": "Siz uchun", + "explore.suggested_follows": "People", "explore.title": "Ko'rib chiqish", "explore.trending_links": "Yangiliklar", "explore.trending_statuses": "Postlar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index f553fcb19..1b2686e25 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", "explore.search_results": "Kết quả tìm kiếm", - "explore.suggested_follows": "Đề xuất", + "explore.suggested_follows": "Mọi người", "explore.title": "Khám phá", "explore.trending_links": "Tin tức", "explore.trending_statuses": "Tút", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Không hiển thị lại", "onboarding.actions.go_to_explore": "Xem những gì đang thịnh hành", "onboarding.actions.go_to_home": "Đi đến bảng tin", + "onboarding.compose.template": "Xin chào #Mastodon!", "onboarding.follows.empty": "Không có kết quả có thể được hiển thị lúc này. Bạn có thể thử sử dụng tính năng tìm kiếm hoặc duyệt qua trang khám phá để tìm những người theo dõi hoặc thử lại sau.", "onboarding.follows.lead": "Bạn quản lý bảng tin của riêng bạn. Bạn càng theo dõi nhiều người, nó sẽ càng sôi động và thú vị. Những hồ sơ này có thể là một điểm khởi đầu tốt—bạn luôn có thể hủy theo dõi họ sau!", "onboarding.follows.title": "Thịnh hành trên Mastodon", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index ce79e7656..2433fb728 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 14e926bc8..7b1f3b565 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "explore.search_results": "搜索结果", - "explore.suggested_follows": "为你推荐", + "explore.suggested_follows": "用户", "explore.title": "探索", "explore.trending_links": "新闻", "explore.trending_statuses": "嘟文", @@ -440,24 +440,25 @@ "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", + "onboarding.action.back": "带我返回", + "onboarding.actions.back": "带我返回", "onboarding.actions.close": "不再显示此画面", "onboarding.actions.go_to_explore": "看看有什么新鲜事", "onboarding.actions.go_to_home": "转到主页订阅流", + "onboarding.compose.template": "你好 #Mastodon!", "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。您可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", - "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.share.lead": "Let people know how they can find you on Mastodon!", + "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!", + "onboarding.follows.title": "在Mastodon上流行的", + "onboarding.share.lead": "让人们知道他们如何在Mastodon找到你!", "onboarding.share.message": "我是来自 #Mastodon 的 {username}!请在 {url} 关注我。", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "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.start.title": "You've made it!", + "onboarding.share.next_steps": "可能的下一步:", + "onboarding.share.title": "分享你的个人资料", + "onboarding.start.lead": "您新的 Mastodon 帐户已准备好。下面是如何最大限度地利用它:", + "onboarding.start.skip": "想要在前面跳过吗?", + "onboarding.start.title": "你已经成功了!", "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.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.body": "向世界问声好吧。", "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": "自定义你的个人资料", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 690bedb78..0952857e2 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "explore.search_results": "搜尋結果", - "explore.suggested_follows": "為您推薦", + "explore.suggested_follows": "People", "explore.title": "探索", "explore.trending_links": "最新消息", "explore.trending_statuses": "帖文", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a5927d995..c4c8b761e 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "回報問題", "explore.search_results": "搜尋結果", - "explore.suggested_follows": "為您推薦", + "explore.suggested_follows": "使用者", "explore.title": "探索", "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", @@ -445,6 +445,7 @@ "onboarding.actions.close": "不再顯示此畫面", "onboarding.actions.go_to_explore": "看看發生什麼新鮮事", "onboarding.actions.go_to_home": "前往您的首頁時間軸", + "onboarding.compose.template": "哈囉 #Mastodon!", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", "onboarding.follows.lead": "您建立自己的首頁時間軸。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "Mastodon 上之流行內容", diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js index 95e0359d0..ff3af5fd8 100644 --- a/app/javascript/mastodon/stream.js +++ b/app/javascript/mastodon/stream.js @@ -17,10 +17,10 @@ let sharedConnection; */ /** - * @typedef StreamEvent - * @property {string} event - * @property {object} payload - */ + * @typedef StreamEvent + * @property {string} event + * @property {object} payload + */ /** * @type {Array.} @@ -126,7 +126,7 @@ const sharedCallbacks = { /** * @param {string} channelName * @param {Object.} params - * @return {string} + * @returns {string} */ const channelNameWithInlineParams = (channelName, params) => { if (Object.keys(params).length === 0) { @@ -140,7 +140,7 @@ const channelNameWithInlineParams = (channelName, params) => { * @param {string} channelName * @param {Object.} params * @param {function(Function, Function): { onConnect: (function(): void), onReceive: (function(StreamEvent): void), onDisconnect: (function(): void) }} callbacks - * @return {function(): void} + * @returns {function(): void} */ // @ts-expect-error export const connectStream = (channelName, params, callbacks) => (dispatch, getState) => { @@ -227,7 +227,7 @@ const handleEventSourceMessage = (e, received) => { * @param {string} accessToken * @param {string} channelName * @param {{ connected: Function, received: function(StreamEvent): void, disconnected: Function, reconnected: Function }} callbacks - * @return {WebSocketClient | EventSource} + * @returns {WebSocketClient | EventSource} */ const createConnection = (streamingAPIBaseURL, accessToken, channelName, { connected, received, disconnected, reconnected }) => { const params = channelName.split('&'); diff --git a/app/javascript/mastodon/utils/scrollbar.js b/app/javascript/mastodon/utils/scrollbar.js index 6f0ee010b..ca87dd76f 100644 --- a/app/javascript/mastodon/utils/scrollbar.js +++ b/app/javascript/mastodon/utils/scrollbar.js @@ -4,7 +4,7 @@ import { isMobile } from '../is_mobile'; let cachedScrollbarWidth = null; /** - * @return {number} + * @returns {number} */ const getActualScrollbarWidth = () => { const outer = document.createElement('div'); @@ -22,7 +22,7 @@ const getActualScrollbarWidth = () => { }; /** - * @return {number} + * @returns {number} */ export const getScrollbarWidth = () => { if (cachedScrollbarWidth !== null) { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 49875524d..bd01d8bd1 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1155,6 +1155,7 @@ body > [data-popper-placement] { .video-player, .audio-player, .attachment-list, + .picture-in-picture-placeholder, .status-card { margin-inline-start: 46px + 10px; width: calc(100% - (46px + 10px)); @@ -6522,6 +6523,7 @@ a.status-card.compact:hover { background: darken($ui-base-color, 8%); border-radius: 4px; padding-bottom: 44px; + width: 100%; &.editable { border-radius: 0; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index d17303b85..03e06c100 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -722,7 +722,7 @@ code { } } - @media screen and (width <= 740px) and (width >= 441px) { + @media screen and (440px < width <= 740px) { margin-top: 40px; } diff --git a/app/lib/connection_pool/shared_connection_pool.rb b/app/lib/connection_pool/shared_connection_pool.rb index 2865a4108..741529652 100644 --- a/app/lib/connection_pool/shared_connection_pool.rb +++ b/app/lib/connection_pool/shared_connection_pool.rb @@ -37,7 +37,17 @@ class ConnectionPool::SharedConnectionPool < ConnectionPool end def checkin(preferred_tag) - if ::Thread.current[key(preferred_tag)] + if preferred_tag.is_a?(Hash) && preferred_tag[:force] + # ConnectionPool 2.4+ calls `checkin(force: true)` after fork. + # When this happens, we should remove all connections from Thread.current + + ::Thread.current.keys.each do |name| # rubocop:disable Style/HashEachMethods + next unless name.to_s.start_with?("#{@key}-") + + @available.push(::Thread.current[name]) + ::Thread.current[name] = nil + end + elsif ::Thread.current[key(preferred_tag)] if ::Thread.current[key_count(preferred_tag)] == 1 @available.push(::Thread.current[key(preferred_tag)]) ::Thread.current[key(preferred_tag)] = nil diff --git a/app/models/appeal.rb b/app/models/appeal.rb index 6fbf60b39..f1290ad01 100644 --- a/app/models/appeal.rb +++ b/app/models/appeal.rb @@ -19,7 +19,7 @@ class Appeal < ApplicationRecord MAX_STRIKE_AGE = 20.days belongs_to :account - belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id' + belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id', inverse_of: :appeal belongs_to :approved_by_account, class_name: 'Account', optional: true belongs_to :rejected_by_account, class_name: 'Account', optional: true diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 48ab1349d..b2ccddef3 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -81,8 +81,10 @@ module AccountInteractions # Follow relations has_many :follow_requests, dependent: :destroy - has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy - has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy + with_options class_name: 'Follow', dependent: :destroy do + has_many :active_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :passive_relationships, foreign_key: 'target_account_id', inverse_of: :target_account + end has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account @@ -91,15 +93,19 @@ module AccountInteractions has_many :account_notes, dependent: :destroy # Block relationships - has_many :block_relationships, class_name: 'Block', foreign_key: 'account_id', dependent: :destroy + with_options class_name: 'Block', dependent: :destroy do + has_many :block_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :blocked_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account + end has_many :blocking, -> { order('blocks.id desc') }, through: :block_relationships, source: :target_account - has_many :blocked_by_relationships, class_name: 'Block', foreign_key: :target_account_id, dependent: :destroy has_many :blocked_by, -> { order('blocks.id desc') }, through: :blocked_by_relationships, source: :account # Mute relationships - has_many :mute_relationships, class_name: 'Mute', foreign_key: 'account_id', dependent: :destroy + with_options class_name: 'Mute', dependent: :destroy do + has_many :mute_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :muted_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account + end has_many :muting, -> { order('mutes.id desc') }, through: :mute_relationships, source: :target_account - has_many :muted_by_relationships, class_name: 'Mute', foreign_key: :target_account_id, dependent: :destroy has_many :muted_by, -> { order('mutes.id desc') }, through: :muted_by_relationships, source: :account has_many :conversation_mutes, dependent: :destroy has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb index d44c22438..9cafedc20 100644 --- a/app/models/concerns/attachmentable.rb +++ b/app/models/concerns/attachmentable.rb @@ -46,7 +46,7 @@ module Attachmentable def set_file_extension(attachment) # rubocop:disable Naming/AccessorMethodName return if attachment.blank? - attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].delete_if(&:blank?).join('.') + attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].compact_blank!.join('.') end def check_image_dimension(attachment) diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index b5a07a5a0..c822ef532 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -37,7 +37,8 @@ class CustomEmoji < ApplicationRecord IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze belongs_to :category, class_name: 'CustomEmojiCategory', optional: true - has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode + + has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode, inverse_of: false has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index fbb045416..06d35d8be 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -25,7 +25,7 @@ class DomainBlock < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true - has_many :accounts, foreign_key: :domain, primary_key: :domain + has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false delegate :count, to: :accounts, prefix: true scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 602d32985..123570b12 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -12,7 +12,7 @@ class FollowRecommendation < ApplicationRecord self.primary_key = :account_id - belongs_to :account_summary, foreign_key: :account_id + belongs_to :account_summary, foreign_key: :account_id, inverse_of: false belongs_to :account scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } diff --git a/app/models/instance.rb b/app/models/instance.rb index 1f96d3728..95231c52a 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -13,11 +13,13 @@ class Instance < ApplicationRecord attr_accessor :failure_days - has_many :accounts, foreign_key: :domain, primary_key: :domain + has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false - belongs_to :domain_block, foreign_key: :domain, primary_key: :domain - belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain - belongs_to :unavailable_domain, foreign_key: :domain, primary_key: :domain # skipcq: RB-RL1031 + with_options foreign_key: :domain, primary_key: :domain, inverse_of: false do + belongs_to :domain_block + belongs_to :domain_allow + belongs_to :unavailable_domain # skipcq: RB-RL1031 + end scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } diff --git a/app/models/notification.rb b/app/models/notification.rb index 3eaf557b0..8ba506fa1 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -55,13 +55,15 @@ class Notification < ApplicationRecord belongs_to :from_account, class_name: 'Account', optional: true belongs_to :activity, polymorphic: true, optional: true - belongs_to :mention, foreign_key: 'activity_id', optional: true - belongs_to :status, foreign_key: 'activity_id', optional: true - belongs_to :follow, foreign_key: 'activity_id', optional: true - belongs_to :follow_request, foreign_key: 'activity_id', optional: true - belongs_to :favourite, foreign_key: 'activity_id', optional: true - belongs_to :poll, foreign_key: 'activity_id', optional: true - belongs_to :report, foreign_key: 'activity_id', optional: true + with_options foreign_key: 'activity_id', optional: true do + belongs_to :mention, inverse_of: :notification + belongs_to :status, inverse_of: :notification + belongs_to :follow, inverse_of: :notification + belongs_to :follow_request, inverse_of: :notification + belongs_to :favourite, inverse_of: :notification + belongs_to :poll, inverse_of: false + belongs_to :report, inverse_of: false + end validates :type, inclusion: { in: TYPES } diff --git a/app/models/poll.rb b/app/models/poll.rb index dd35e953b..74a77978b 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -101,7 +101,7 @@ class Poll < ApplicationRecord end def prepare_options - self.options = options.map(&:strip).reject(&:blank?) + self.options = options.map(&:strip).compact_blank end def reset_parent_cache diff --git a/app/models/status.rb b/app/models/status.rb index 863e1a56b..b69d2b064 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -58,7 +58,7 @@ class Status < ApplicationRecord belongs_to :account, inverse_of: :statuses belongs_to :in_reply_to_account, class_name: 'Account', optional: true belongs_to :conversation, optional: true - belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true + belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true, inverse_of: false belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true diff --git a/app/models/user.rb b/app/models/user.rb index daf8768e8..7181cf8d6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -445,7 +445,6 @@ class User < ApplicationRecord return if chosen_languages.nil? chosen_languages.compact_blank! - self.chosen_languages = nil if chosen_languages.empty? end diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 56f191c1f..f6c94cbb6 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -132,7 +132,7 @@ class ImportService < BaseService def parse_import_data!(default_headers) data = CSV.parse(import_data, headers: true) data = CSV.parse(import_data, headers: default_headers) unless data.headers&.first&.strip&.include?(' ') - @data = data.reject(&:blank?) + @data = data.compact_blank end def import_data diff --git a/config/environments/production.rb b/config/environments/production.rb index 95c6e790f..59f077bb4 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -56,7 +56,7 @@ Rails.application.configure do # Enable locale fallbacks for I18n (makes lookups for any locale fall back to # English when a translation cannot be found). - config.i18n.fallbacks = true + config.i18n.fallbacks = [:en] # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index bd37f6709..b72cbe192 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -7,7 +7,7 @@ Paperclip.interpolates :filename do |attachment, style| if style == :original attachment.original_filename else - [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.') + [basename(attachment, style), extension(attachment, style)].compact_blank!.join('.') end end diff --git a/config/locales/af.yml b/config/locales/af.yml index ed8661991..1dbf99afe 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -91,13 +91,7 @@ af: approve_appeal: Aanvaar appèl reject_appeal: Verwerp appèl errors: - '400': The request you submitted was invalid or malformed. '403': Jy het nie toestemming om hierdie bladsy te sien nie. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: bookmarks: Boekmerke lists: Lyste diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 84eb59a08..24b85f13f 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -224,13 +224,5 @@ bn: report_notes: created_msg: রিপোর্ট নোট সফলভাবে তৈরি করা হয়েছে! destroyed_msg: রিপোর্ট নোট সফলভাবে মোছা হয়েছে! - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. verification: verification: সত্যতা নির্ধারণ diff --git a/config/locales/br.yml b/config/locales/br.yml index fc4e3d982..3ab23a4a1 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -334,14 +334,6 @@ br: created_at: Deiziad title_actions: none: Diwall - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Deiziad diff --git a/config/locales/bs.yml b/config/locales/bs.yml index 2709636c9..b7817c17f 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -1,10 +1,2 @@ --- bs: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/en.yml b/config/locales/en.yml index e5b30d7e3..ddefbc49b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -771,7 +771,7 @@ en: remove_from_report: Remove from report report: Report deleted: Deleted - favourites: Favourites + favourites: Favorites history: Version history in_reply_to: Replying to language: Language @@ -852,14 +852,14 @@ en: statuses: allow: Allow post allow_account: Allow author - description_html: These are posts that your server knows about that are currently being shared and favourited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts. + description_html: These are posts that your server knows about that are currently being shared and favorited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts. disallow: Disallow post disallow_account: Disallow author no_status_selected: No trending posts were changed as none were selected not_discoverable: Author has not opted-in to being discoverable shared_by: - one: Shared or favourited one time - other: Shared and favourited %{friendly_count} times + one: Shared or favorited one time + other: Shared and favorited %{friendly_count} times title: Trending posts tags: current_score: Current score %{score} @@ -1337,9 +1337,9 @@ en: sign_up: subject: "%{name} signed up" favourite: - body: 'Your post was favourited by %{name}:' - subject: "%{name} favourited your post" - title: New favourite + body: 'Your post was favorited by %{name}:' + subject: "%{name} favorited your post" + title: New favorite follow: body: "%{name} is now following you!" subject: "%{name} is now following you" @@ -1572,10 +1572,10 @@ en: enabled_hint: Automatically deletes your posts once they reach a specified age threshold, unless they match one of the exceptions below exceptions: Exceptions explanation: Because deleting posts is an expensive operation, this is done slowly over time when the server is not otherwise busy. For this reason, your posts may be deleted a while after they reach the age threshold. - ignore_favs: Ignore favourites + ignore_favs: Ignore favorites ignore_reblogs: Ignore boosts interaction_exceptions: Exceptions based on interactions - interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favourite or boost threshold after having once gone over them. + interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favorite or boost threshold after having once gone over them. keep_direct: Keep direct messages keep_direct_hint: Doesn't delete any of your direct messages keep_media: Keep posts with media attachments @@ -1586,8 +1586,8 @@ en: keep_polls_hint: Doesn't delete any of your polls keep_self_bookmark: Keep posts you bookmarked keep_self_bookmark_hint: Doesn't delete your own posts if you have bookmarked them - keep_self_fav: Keep posts you favourited - keep_self_fav_hint: Doesn't delete your own posts if you have favourited them + keep_self_fav: Keep posts you favorited + keep_self_fav_hint: Doesn't delete your own posts if you have favorited them min_age: '1209600': 2 weeks '15778476': 6 months @@ -1598,8 +1598,8 @@ en: '63113904': 2 years '7889238': 3 months min_age_label: Age threshold - min_favs: Keep posts favourited at least - min_favs_hint: Doesn't delete any of your posts that has received at least this number of favourites. Leave blank to delete posts regardless of their number of favourites + min_favs: Keep posts favorited at least + min_favs_hint: Doesn't delete any of your posts that has received at least this number of favorites. Leave blank to delete posts regardless of their number of favorites min_reblogs: Keep posts boosted at least min_reblogs_hint: Doesn't delete any of your posts that has been boosted at least this number of times. Leave blank to delete posts regardless of their number of boosts stream_entries: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 8a7f43c86..65da86372 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -94,6 +94,7 @@ ga: search: Cuardaigh security_measures: only_password: Pasfhocal amháin + password_and_2fa: Pasfhocal agus fíordheimhniú déshraithe sensitized: Marcáladh mar íogair silence: Teorannaigh silenced: Teoranta @@ -238,6 +239,7 @@ ga: status: Stádas reports: are_you_sure: An bhfuil tú cinnte? + cancel: Cealaigh category: Catagóir created_at: Tuairiscithe delete_and_resolve: Scrios postálacha @@ -361,14 +363,6 @@ ga: title_actions: none: Rabhadh your_appeal_pending: Chuir tú achomharc isteach - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Dáta diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 809e425d8..8870fb8f9 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -7,14 +7,6 @@ hi: upload_check_privacy_error_object_storage: action: अधिक जानकारी हेतु यहां क्लिक करें। message_html: " आपके वेब सर्वर का कन्फिगरेशन सही नहीं है। उपयोगकर्ताओं की निजता खतरे में है। " - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. relationships: follow_failure: चुने हुए अकाउंट्स में से कुछ को फ़ॉलो नहीं किया जा सकता sessions: diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 44f408d30..dda7b2219 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -73,14 +73,6 @@ hr: less_than_x_seconds: Upravo sada over_x_years: "%{count}god" x_months: "%{count}mj" - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Datum diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 540ef3616..658b982f0 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -529,15 +529,10 @@ hy: domain_validator: invalid_domain: անվաւէր տիրոյթի անուն errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. '404': Էջը, որը փնտրում ես գոյութիւն չունի։ - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. '429': Չափազանց շատ հարցումներ '500': title: Էջը ճիշտ չէ - '503': The page could not be served due to a temporary server failure. existing_username_validator: not_found: չյաջողուեց գտնել այս ծածկագրով լոկալ օգտատիրոջ not_found_multiple: չյաջողուեց գտնել %{usernames} diff --git a/config/locales/ig.yml b/config/locales/ig.yml index 645939638..f52e594c8 100644 --- a/config/locales/ig.yml +++ b/config/locales/ig.yml @@ -1,10 +1,2 @@ --- ig: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 6766b160f..a23262366 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -263,10 +263,8 @@ ka: proceed: ანგარიშის გაუქმება success_msg: თქვენი ანგარიში წარმატებით გაუქმდა errors: - '400': The request you submitted was invalid or malformed. '403': ამ გვერდის ხილვის უფლება არ გაქვთ. '404': გვერდი რომელსაც ეძებთ არ არსებობს. - '406': This page is not available in the requested format. '410': გვერდი რომელსაც ეძებდით აღარ არსებობს. '422': content: უსაფრთხოების ვერიფიკაცია ვერ მოხერხდა. ბლოკავთ ქუქის? @@ -275,7 +273,6 @@ ka: '500': content: ბოდიში, ჩვენ მხარეს რაღაც არია. title: გვერდი არაა სწორი - '503': The page could not be served due to a temporary server failure. noscript_html: მასტოდონ ვებ-აპლიკაციის გამოყენებისთვის, გთხოვთ ჩართოთ ჯავასკრიპტი. სხვა შემთხვევაში, მასტოდონის თქვენი პატფორმისთვის სცადეთ გამოიყენოთ ერთ-ერთი მშობლიური აპლიკაცია. exports: archive_takeout: diff --git a/config/locales/kn.yml b/config/locales/kn.yml index 998f613ef..880681616 100644 --- a/config/locales/kn.yml +++ b/config/locales/kn.yml @@ -1,10 +1,2 @@ --- kn: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/kw.yml b/config/locales/kw.yml index 4085046cf..b7731ca1a 100644 --- a/config/locales/kw.yml +++ b/config/locales/kw.yml @@ -5,13 +5,5 @@ kw: email: Ebost followers: Holyoryon title: Akontow - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. settings: account: Akont diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 2a4acb831..ab31b3989 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -298,10 +298,8 @@ lt: proceed: Ištrinti paskyrą success_msg: Jūsų paskyra sėkmingai ištrinta errors: - '400': The request you submitted was invalid or malformed. '403': Jūs neturie prieigos matyti šiam puslapiui. '404': Puslapis nerastas. - '406': This page is not available in the requested format. '410': Puslapis neegzistuoja. '422': content: Apsaugos patvirtinmas klaidingas. Ar jūs blokuojate sausainius? @@ -310,7 +308,6 @@ lt: '500': content: Atsiprašome, tačiau mūsų pusėje įvyko klaida. title: Netinkamas puslapis - '503': The page could not be served due to a temporary server failure. noscript_html: Kad naudotumėtės Mastodon web aplikacija, prašome įsijungti JavaScript. Alternatyviai, pabandykite viena iš vietinių aplikacijų Mastodon savo platformai. exports: archive_takeout: diff --git a/config/locales/mk.yml b/config/locales/mk.yml index 9504dc972..de46b2f73 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -1,10 +1,2 @@ --- mk: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 6db786ad9..9a3471d1a 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -78,14 +78,6 @@ ml: all: എല്ലാം authorize_follow: following: 'വിജയകരം! നിങ്ങൾ ഇപ്പോൾ പിന്തുടരുന്നു:' - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. filters: contexts: notifications: അറിയിപ്പുകൾ diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 161e5e571..de65b2f4a 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -1,10 +1,2 @@ --- mr: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d6c3140a4..8affb7745 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -560,7 +560,6 @@ oc: domain_validator: invalid_domain: es pas un nom de domeni valid errors: - '400': The request you submitted was invalid or malformed. '403': Avètz pas l’autorizacion de veire aquesta pagina. '404': La pagina que cercatz existís pas aquí. '406': La pagina es pas disponibla dins lo format demandat. @@ -572,7 +571,6 @@ oc: '500': content: Un quicomet a pas foncionat coma caliá. title: Aquesta pagina es pas corrècta - '503': The page could not be served due to a temporary server failure. noscript_html: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar una aplicacion per vòstra plataforma coma alernativa. existing_username_validator: not_found: impossible de trobar un utilizaire local amb aqueste nom d’utilizaire diff --git a/config/locales/pl.yml b/config/locales/pl.yml index dc20202ec..31a1236b8 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1057,6 +1057,7 @@ pl: security: Bezpieczeństwo set_new_password: Ustaw nowe hasło setup: + email_below_hint_html: Sprawdź folder ze spamem lub poproś o inny link potwierdzający. Możesz poprawić swój adres e-mail, jeśli jest niepoprawny. email_settings_hint_html: Kliknij link, który wysłaliśmy do Ciebie w celu zweryfikowania %{email}. Poczekamy tutaj. link_not_received: Nie otrzymano linku? new_confirmation_instructions_sent: Za kilka minut otrzymasz nowy e-mail z linkiem potwierdzającym! @@ -1065,6 +1066,7 @@ pl: preamble_html: Zaloguj się przy użyciu danych logowania %{domain}. Jeśli Twoje konto jest hostowane na innym serwerze, nie będziesz mógł się zalogować tutaj. title: Zaloguj się do %{domain} sign_up: + manual_review: Rejestracja na %{domain} przechodzi przez ręczne sprawdzanie przez naszych moderatorów. Aby pomóc nam usprawnić ten proces, napisz coś o sobie oraz dlaczego chcesz założyć konto na %{domain}. preamble: Z kontem na tym serwerze Mastodon będziesz mógł obserwować każdą inną osobę w sieci, niezależnie od miejsca przechowywania ich konta. title: Skonfigurujmy Twoje konto na %{domain}. status: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index bc1a1d223..a751669ca 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -492,10 +492,8 @@ ro: email_change_html: Puteți schimba adresa de e-mail fără a șterge contul dvs email_contact_html: Dacă tot nu ajunge, puteți trimite e-mail la %{email} pentru ajutor errors: - '400': The request you submitted was invalid or malformed. '403': Nu ai permisiunea să vizitezi această pagină. '404': Pagina pe care o cauți nu există. - '406': This page is not available in the requested format. '410': Pagina pe care o cauți nu mai există. '422': content: Verificarea securității a eșuat. Ai blocat cookiurile? @@ -504,7 +502,6 @@ ro: '500': content: Ne pare rău, dar ceva a funcționat greșit. Încercați din nou!? title: Această pagină nu este corectă - '503': The page could not be served due to a temporary server failure. noscript_html: Pentru a utiliza o aplicație web Mastodon, te rog activează JavaScript. Alternativ, încearcă una din aplicațiile native Mastodon pentru platforma ta. exports: archive_takeout: diff --git a/config/locales/sa.yml b/config/locales/sa.yml index f8c64a785..84df86ceb 100644 --- a/config/locales/sa.yml +++ b/config/locales/sa.yml @@ -1,10 +1,2 @@ --- sa: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 39190ad9b..3597544ce 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,15 +3,15 @@ ga: simple_form: hints: account_alias: - acct: Sonraigh ainm@fearann an chuntais ar mhaith leat aistriú uaidh + acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú uaidh account_migration: - acct: Sonraigh ainm@fearann an chuntais ar mhaith leat aistriú chuige + acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú chuige admin_account_action: types: - disable: Cuir cosc ar an úsáideoir a chuntas a úsáid, ach ná scrios nó folaigh a bhfuil ann. + disable: Cuir cosc ar an úsáideoir a chuntas a úsáid, ach ná scrios ná folaigh a bhfuil ann. defaults: - setting_display_media_hide_all: Folaítear meáin i gcónaí - setting_display_media_show_all: Go dtaispeántar meáin i gcónaí + setting_display_media_hide_all: Folaigh meáin i gcónaí + setting_display_media_show_all: Taispeáin meáin i gcónaí labels: account: fields: @@ -40,7 +40,7 @@ ga: setting_display_media_hide_all: Cuir uile i bhfolach setting_display_media_show_all: Taispeáin uile setting_theme: Téama suímh - setting_trends: Taispeáin treochta an lae + setting_trends: Taispeáin treochtaí an lae inniu title: Teideal username: Ainm úsáideora featured_tag: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index d0e7d165b..cfb4dc5ba 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -59,6 +59,7 @@ vi: setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết của tút setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào + username: Chỉ chấp nhận ký tự, số và dấu gạch dưới whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: domain: Máy chủ này sẽ tiếp nhận dữ liệu, rồi sau đó xử lý và lưu trữ diff --git a/config/locales/sq.yml b/config/locales/sq.yml index c86cf7a41..2d2dfa2d5 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -982,6 +982,7 @@ sq: prefix_invited_by_user: "@%{name} ju fton të bëheni pjesë e këtij shërbyesi Mastodon!" prefix_sign_up: Regjistrohuni në Mastodon që sot! suffix: Me një llogari, do të jeni në gjendje të ndiqni persona, përditësime postimesh dhe të shkëmbeni mesazhe me përdorues nga cilido shërbyes Mastodon, etj! + didnt_get_confirmation: S’morët një lidhje ripohimi? dont_have_your_security_key: S’i keni kyçet tuaj të sigurisë? forgot_password: Harruat fjalëkalimin tuaj? invalid_reset_password_token: Token-i i ricaktimit të fjalëkalimit është i pavlefshëm ose ka skaduar. Ju lutemi, kërkoni një të ri. @@ -994,11 +995,16 @@ sq: migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund ta formësoni këtu. or_log_in_with: Ose bëni hyrjen me privacy_policy_agreement_html: I kam lexuar dhe pajtohem me rregullat e privatësisë + progress: + confirm: Email ripohimi + details: Hollësitë tuaja + review: Shqyrtimi ynë providers: cas: CAS saml: SAML register: Regjistrohuni registration_closed: "%{instance} s’pranon anëtarë të rinj" + resend_confirmation: Ridërgo lidhje ripohimi reset_password: Ricaktoni fjalëkalimin rules: accept: Pranoje @@ -1007,10 +1013,17 @@ sq: title: Disa rregulla bazë. security: Siguri set_new_password: Caktoni fjalëkalim të ri + setup: + email_below_hint_html: Shihni te dosja juaj e të padëshiruara, ose kërkoni një tjetër. Mund të ndreqni adresën tuaj email, nëse është e gabuar. + email_settings_hint_html: Që të verifikoni %{email}, klikoni lidhjen që ju dërguam. Do të presim këtu. + link_not_received: S’morët lidhje? + new_confirmation_instructions_sent: Pas pak minutash do të merrni një email të ri me lidhjen e ripohimit! + title: Shihni te email-et tuaj sign_in: preamble_html: Hyni me kredencialet tuaja për te %{domain}. Nëse llogaria juaj strehohet në një tjetër shërbyes, s’do të jeni në gjendje të bëni hyrjen këtu. title: Bëni hyrjen te %{domain} sign_up: + manual_review: Regjistrimet te %{domain} kalojnë një shqyrtim dorazi nga moderatorët tanë. Që të na ndihmoni të përfundojmë regjistrimin tuaj, na shkruani pakëz mbi veten dhe pse doni një llogari në %{domain}. preamble: Me një llogari në këtë shërbyes Mastodon, do të jeni në gjendje të ndiqni cilindo person tjetër në rrjet, pavarësisht se ku strehohet llogaria e tyre. title: Le të ujdisim llogarinë tuaj në %{domain}. status: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index c7cc4c68d..4e93e6390 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -125,6 +125,8 @@ sv: removed_header_msg: Tog bort %{username}s sidhuvudsbild resend_confirmation: already_confirmed: Den här användaren är redan bekräftad + send: Skicka bekräftelselänken igen + success: Bekräftelselänken har skickats! reset: Återställ reset_password: Återställ lösenord resubscribe: Starta en ny prenumeration @@ -986,6 +988,7 @@ sv: prefix_invited_by_user: "@%{name} bjuder in dig att gå med i en Mastodon-server!" prefix_sign_up: Registrera dig på Mastodon idag! suffix: Med ett konto kommer du att kunna följa personer, göra inlägg och utbyta meddelanden med användare från andra Mastodon-servrar, och ännu mer! + didnt_get_confirmation: Fick du ingen bekräftelselänk? dont_have_your_security_key: Har du inte din säkerhetsnyckel? forgot_password: Glömt ditt lösenord? invalid_reset_password_token: Lösenordsåterställningstoken är ogiltig eller utgått. Vänligen be om en ny. @@ -998,11 +1001,15 @@ sv: migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du konfigurera det här. or_log_in_with: Eller logga in med privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn + progress: + confirm: Bekräfta e-postadress + details: Dina uppgifter providers: cas: CAS saml: SAML register: Registrera registration_closed: "%{instance} accepterar inte nya medlemmar" + resend_confirmation: Skicka bekräftelselänken igen reset_password: Återställ lösenord rules: accept: Godkänn @@ -1011,6 +1018,8 @@ sv: title: Några grundregler. security: Säkerhet set_new_password: Skriv in nytt lösenord + setup: + link_not_received: Fick du ingen länk? sign_in: preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här. title: Logga in på %{domain} diff --git a/config/locales/szl.yml b/config/locales/szl.yml index 2e059c51a..bfcf2a6ad 100644 --- a/config/locales/szl.yml +++ b/config/locales/szl.yml @@ -1,10 +1,2 @@ --- szl: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ta.yml b/config/locales/ta.yml index 2d2bce86a..6386301bb 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -197,14 +197,6 @@ ta: errors: invalid_key: ஒரு முறையான Ed25519 அல்லது Curve25519 key அல்ல invalid_signature: ஒரு முறையான Ed25519 அடையாளம் அல்ல - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. filters: index: empty: தடுப்புகள் ஏதும் இல்லை. diff --git a/config/locales/te.yml b/config/locales/te.yml index e3b3f97ab..a5eb8d779 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -70,11 +70,3 @@ te: moderation_notes: మోడరేషన్ నోట్స్ most_recent_activity: ఇటీవల యాక్టివిటీ most_recent_ip: ఇటీవలి IP - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/tt.yml b/config/locales/tt.yml index d260e8be2..642ef8233 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -140,14 +140,6 @@ tt: x_minutes: "%{count}м" x_months: "%{count}ай" x_seconds: "%{count}сек" - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Көне diff --git a/config/locales/ug.yml b/config/locales/ug.yml index ea5bdb5c8..48684f9eb 100644 --- a/config/locales/ug.yml +++ b/config/locales/ug.yml @@ -1,10 +1,2 @@ --- ug: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ur.yml b/config/locales/ur.yml index a5ae83fd4..79c5de2df 100644 --- a/config/locales/ur.yml +++ b/config/locales/ur.yml @@ -1,10 +1,2 @@ --- ur: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/uz.yml b/config/locales/uz.yml index caed654ec..403ffd33c 100644 --- a/config/locales/uz.yml +++ b/config/locales/uz.yml @@ -39,11 +39,3 @@ uz: most_recent_ip: Eng oxirgi IP perform_full_suspension: To'xtatilgan reject: Rad etish - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 642d6e551..92a90e52c 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -983,11 +983,17 @@ vi: migrate_account_html: Nếu bạn muốn bỏ tài khoản này để dùng một tài khoản khác, bạn có thể thiết lập tại đây. or_log_in_with: Hoặc đăng nhập bằng privacy_policy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật + progress: + confirm: Xác minh email + details: Thông tin của bạn + review: Đợi duyệt + rules: Đọc nội quy providers: cas: CAS saml: SAML register: Đăng ký registration_closed: "%{instance} tạm ngưng đăng ký mới" + resend_confirmation: Gửi lại email xác nhận reset_password: Đặt lại mật khẩu rules: accept: Chấp nhận @@ -996,10 +1002,17 @@ vi: title: Nội quy máy chủ. security: Bảo mật set_new_password: Đặt mật khẩu mới + setup: + email_below_hint_html: Kiểm tra thư rác của bạn hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. + email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn. + link_not_received: Không nhận được mã? + new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút! + title: Kiểm tra hộp thư của bạn sign_in: preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu tài khoản của bạn được lưu trữ trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. title: Đăng nhập %{domain} sign_up: + manual_review: Đăng ký trên %{domain} cần duyệt thủ công. Để giúp chúng tôi xử lý nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}. preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu. title: Cho phép bạn đăng ký trên %{domain}. status: diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 4750a6cee..3cbd31de5 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -83,14 +83,6 @@ zgh: title: ⴹⴼⵕ %{acct} deletes: proceed: ⴽⴽⵙ ⴰⵎⵉⴹⴰⵏ - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: ⴰⵣⵎⵣ diff --git a/config/routes.rb b/config/routes.rb index 26d5c3526..89f3fd18b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -85,6 +85,8 @@ Rails.application.routes.draw do } get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username/following', to: redirect('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username/followers', to: redirect('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? } get '/users/:username/statuses/:id', to: redirect('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? } get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" } diff --git a/crowdin.yml b/crowdin.yml index 6d84ab0a1..7cb74c401 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,6 @@ commit_message: '[ci skip]' +skip_untranslated_strings: true + files: - source: /app/javascript/mastodon/locales/en.json translation: /app/javascript/mastodon/locales/%two_letters_code%.json diff --git a/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb b/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb index 8679f8ece..82e91f1e1 100644 --- a/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb +++ b/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb @@ -4,7 +4,7 @@ class StatusIdsToTimestampIds < ActiveRecord::Migration[5.1] Mastodon::Snowflake.define_timestamp_id # Set up the statuses.id column to use our timestamp-based IDs. - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) ALTER TABLE statuses ALTER COLUMN id SET DEFAULT timestamp_id('statuses') @@ -21,7 +21,7 @@ class StatusIdsToTimestampIds < ActiveRecord::Migration[5.1] # We lock the table during this so that the ID won't get clobbered, # but ID is indexed, so this should be a fast operation. - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) LOCK statuses; SELECT setval('statuses_id_seq', (SELECT MAX(id) FROM statuses)); ALTER TABLE statuses diff --git a/db/migrate/20180608213548_reject_following_blocked_users.rb b/db/migrate/20180608213548_reject_following_blocked_users.rb index 78f8df538..bb21bd8fa 100644 --- a/db/migrate/20180608213548_reject_following_blocked_users.rb +++ b/db/migrate/20180608213548_reject_following_blocked_users.rb @@ -2,14 +2,14 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - blocked_follows = Follow.find_by_sql(<<-SQL) + blocked_follows = Follow.find_by_sql(<<-SQL.squish) select f.* from follows f inner join blocks b on f.account_id = b.target_account_id and f.target_account_id = b.account_id SQL - domain_blocked_follows = Follow.find_by_sql(<<-SQL) + domain_blocked_follows = Follow.find_by_sql(<<-SQL.squish) select f.* from follows f inner join accounts following on f.account_id = following.id inner join account_domain_blocks b on diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index 8dbca9ecd..2fac886bd 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class MoveUserSettings < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + class User < ApplicationRecord; end MAPPING = { @@ -57,26 +59,29 @@ class MoveUserSettings < ActiveRecord::Migration[6.1] end def up - User.find_each do |user| - previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var) + User.find_in_batches do |users| + previous_settings_for_batch = LegacySetting.where(thing_type: 'User', thing_id: users.map(&:id)).group_by(&:thing_id) - user_settings = {} + users.each do |user| + previous_settings = previous_settings_for_batch[user.id]&.index_by(&:var) || {} + user_settings = {} - MAPPING.each do |legacy_key, new_key| - value = previous_settings[legacy_key]&.value + MAPPING.each do |legacy_key, new_key| + value = previous_settings[legacy_key]&.value - next if value.blank? + next if value.blank? - if value.is_a?(Hash) - value.each do |nested_key, nested_value| - user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + if value.is_a?(Hash) + value.each do |nested_key, nested_value| + user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + end + else + user_settings[new_key] = value end - else - user_settings[new_key] = value end - end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + end end end diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb index 76fafdd76..e47a84ebc 100644 --- a/db/migrate/20230215074424_move_glitch_user_settings.rb +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + class User < ApplicationRecord; end MAPPING = { @@ -29,27 +31,30 @@ class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] end def up - User.find_each do |user| - previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var) + User.find_in_batches do |users| + previous_settings_for_batch = LegacySetting.where(thing_type: 'User', thing_id: users.map(&:id)).group_by(&:thing_id) - user_settings = Oj.load(user.settings || '{}') - user_settings.delete('theme') + users.each do |user| + previous_settings = previous_settings_for_batch[user.id]&.index_by(&:var) || {} + user_settings = Oj.load(user.settings || '{}') + user_settings.delete('theme') - MAPPING.each do |legacy_key, new_key| - value = previous_settings[legacy_key]&.value + MAPPING.each do |legacy_key, new_key| + value = previous_settings[legacy_key]&.value - next if value.blank? + next if value.blank? - if value.is_a?(Hash) - value.each do |nested_key, nested_value| - user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + if value.is_a?(Hash) + value.each do |nested_key, nested_value| + user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + end + else + user_settings[new_key] = value end - else - user_settings[new_key] = value end - end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + end end end diff --git a/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb b/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb index d2d924239..f1708b2e1 100644 --- a/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb +++ b/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb @@ -2,7 +2,7 @@ class RemoveBoostsWideningAudience < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - public_boosts = Status.find_by_sql(<<-SQL) + public_boosts = Status.find_by_sql(<<-SQL.squish) SELECT boost.id FROM statuses AS boost LEFT JOIN statuses AS boosted ON boost.reblog_of_id = boosted.id diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index ebfb60979..43269334a 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -545,7 +545,7 @@ module Mastodon User.pending.find_each(&:approve!) say('OK', :green) elsif options[:number]&.positive? - User.pending.limit(options[:number]).each(&:approve!) + User.pending.order(created_at: :asc).limit(options[:number]).each(&:approve!) say('OK', :green) elsif username.present? account = Account.find_local(username) diff --git a/lib/mastodon/ip_blocks_cli.rb b/lib/mastodon/ip_blocks_cli.rb index 08939c092..3b9959585 100644 --- a/lib/mastodon/ip_blocks_cli.rb +++ b/lib/mastodon/ip_blocks_cli.rb @@ -108,9 +108,9 @@ module Mastodon IpBlock.where(severity: :no_access).find_each do |ip_block| case options[:format] when 'nginx' - puts "deny #{ip_block.ip}/#{ip_block.ip.prefix};" + say "deny #{ip_block.ip}/#{ip_block.ip.prefix};" else - puts "#{ip_block.ip}/#{ip_block.ip.prefix}" + say "#{ip_block.ip}/#{ip_block.ip.prefix}" end end end diff --git a/lib/mastodon/snowflake.rb b/lib/mastodon/snowflake.rb index 8030288af..32ed140c3 100644 --- a/lib/mastodon/snowflake.rb +++ b/lib/mastodon/snowflake.rb @@ -146,7 +146,7 @@ module Mastodon::Snowflake private def already_defined? - connection.execute(<<~SQL).values.first.first + connection.execute(<<~SQL.squish).values.first.first SELECT EXISTS( SELECT * FROM pg_proc WHERE proname = 'timestamp_id' ); diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 35073b78b..ceb421f4b 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -113,7 +113,7 @@ namespace :tests do desc 'Populate the database with test data for 2.4.0' task populate_v2_4: :environment do # rubocop:disable Naming/VariableNumber - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) INSERT INTO "settings" (id, thing_type, thing_id, var, value, created_at, updated_at) VALUES diff --git a/package.json b/package.json index 9a5d41aa7..32c8a3f8d 100644 --- a/package.json +++ b/package.json @@ -151,9 +151,9 @@ "@types/express": "^4.17.17", "@types/http-link-header": "^1.0.3", "@types/intl": "^1.2.0", - "@types/jest": "^29.4.2", + "@types/jest": "^29.5.1", "@types/js-yaml": "^4.0.5", - "@types/lodash": "^4.14.191", + "@types/lodash": "^4.14.194", "@types/npmlog": "^4.1.4", "@types/object-assign": "^4.0.30", "@types/pg": "^8.6.6", @@ -179,13 +179,14 @@ "@types/requestidlecallback": "^0.3.5", "@types/uuid": "^8.3.4", "@types/webpack": "^4.41.33", - "@types/yargs": "^17.0.22", + "@types/yargs": "^17.0.24", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "babel-jest": "^29.5.0", - "eslint": "^8.38.0", + "eslint": "^8.39.0", "eslint-plugin-formatjs": "^4.9.0", "eslint-plugin-import": "~2.27.5", + "eslint-plugin-jsdoc": "^43.1.1", "eslint-plugin-jsx-a11y": "~6.7.1", "eslint-plugin-promise": "~6.1.1", "eslint-plugin-react": "~7.32.2", @@ -198,8 +199,8 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^15.3.0", - "stylelint-config-standard-scss": "^7.0.1", + "stylelint": "^15.6.0", + "stylelint-config-standard-scss": "^9.0.0", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3", "yargs": "^17.7.1" @@ -214,6 +215,7 @@ }, "lint-staged": { "*": "prettier --ignore-unknown --write", + "Capfile|Gemfile|*.{rb,ruby,ru,rake}": "bundle exec rubocop -a", "*.{js,jsx,ts,tsx}": "eslint --fix", "*.{css,scss}": "stylelint --fix" } diff --git a/spec/config/initializers/rack_attack_spec.rb b/spec/config/initializers/rack_attack_spec.rb index cc931b21b..0411a48d2 100644 --- a/spec/config/initializers/rack_attack_spec.rb +++ b/spec/config/initializers/rack_attack_spec.rb @@ -2,9 +2,7 @@ require 'rails_helper' -describe Rack::Attack do - include Rack::Test::Methods - +describe Rack::Attack, type: :request do def app Rails.application end @@ -25,7 +23,7 @@ describe Rack::Attack do it 'does not change the request status' do limit.times do request.call - expect(last_response.status).to_not eq(429) + expect(response).to_not have_http_status(429) end end end @@ -34,13 +32,13 @@ describe Rack::Attack do it 'returns http too many requests after limit and returns to normal status after period' do (limit * 2).times do |i| request.call - expect(last_response.status).to eq(429) if i > limit + expect(response).to have_http_status(429) if i > limit end travel period request.call - expect(last_response.status).to_not eq(429) + expect(response).to_not have_http_status(429) end end end @@ -51,7 +49,7 @@ describe Rack::Attack do context 'through the website' do let(:limit) { 25 } let(:period) { 5.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/auth' } @@ -69,7 +67,7 @@ describe Rack::Attack do context 'through the API' do let(:limit) { 5 } let(:period) { 30.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/api/v1/accounts' } @@ -82,7 +80,7 @@ describe Rack::Attack do it 'returns http not found' do request.call - expect(last_response.status).to eq(404) + expect(response).to have_http_status(404) end end end @@ -91,7 +89,7 @@ describe Rack::Attack do describe 'throttle excessive sign-in requests by IP address' do let(:limit) { 25 } let(:period) { 5.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/auth/sign_in' } diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index fffa7e06d..5c422bdff 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -104,9 +104,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do end around do |example| - current_locale = I18n.locale - example.run - I18n.locale = current_locale + I18n.with_locale(I18n.locale) do + example.run + end end before { request.env['devise.mapping'] = Devise.mappings[:user] } diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 3c6a534a1..5e2c4f742 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -45,30 +45,28 @@ describe ApplicationHelper do end describe 'locale_direction' do - around do |example| - current_locale = I18n.locale - example.run - I18n.locale = current_locale - end - it 'adds rtl body class if locale is Arabic' do - I18n.locale = :ar - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:ar) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'adds rtl body class if locale is Farsi' do - I18n.locale = :fa - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:fa) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'adds rtl if locale is Hebrew' do - I18n.locale = :he - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:he) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'does not add rtl if locale is Thai' do - I18n.locale = :th - expect(helper.locale_direction).to_not eq 'rtl' + I18n.with_locale(:th) do + expect(helper.locale_direction).to_not eq 'rtl' + end end end diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 341fe6f23..ab98bac38 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -61,12 +61,12 @@ RSpec.describe NotificationMailer, type: :mailer do include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob' it 'renders the headers' do - expect(mail.subject).to eq('bob favourited your post') + expect(mail.subject).to eq('bob favorited your post') expect(mail[:to].value).to eq("#{receiver.account.username} <#{receiver.email}>") end it 'renders the body' do - expect(mail.body.encoded).to match('Your post was favourited by bob') + expect(mail.body.encoded).to match('Your post was favorited by bob') expect(mail.body.encoded).to include 'The body of the own status' end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 2e2ca7274..458b2ce52 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -951,10 +951,10 @@ RSpec.describe Account, type: :model do end context 'when is local' do - # Test disabled because test environment omits autogenerating keys for performance - xit 'generates keys' do + it 'generates keys' do account = Account.create!(domain: nil, username: Faker::Internet.user_name(separators: ['_'])) - expect(account.keypair.private?).to be true + expect(account.keypair).to be_private + expect(account.keypair).to be_public end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2bb6a334b..b7754e926 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -527,6 +527,28 @@ RSpec.describe User, type: :model do end describe '.those_who_can' do - pending + let!(:moderator_user) { Fabricate(:user, role: UserRole.find_by(name: 'Moderator')) } + + context 'when there are not any user roles' do + before { UserRole.destroy_all } + + it 'returns an empty list' do + expect(User.those_who_can(:manage_blocks)).to eq([]) + end + end + + context 'when there are not users with the needed role' do + it 'returns an empty list' do + expect(User.those_who_can(:manage_blocks)).to eq([]) + end + end + + context 'when there are users with roles' do + let!(:admin_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'returns the users with the role' do + expect(User.those_who_can(:manage_blocks)).to eq([admin_user]) + end + end end end diff --git a/spec/requests/follower_accounts_spec.rb b/spec/requests/follower_accounts_spec.rb new file mode 100644 index 000000000..52e86e13f --- /dev/null +++ b/spec/requests/follower_accounts_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'FollowerAccountsController' do + describe 'The follower_accounts route' do + it "returns a http 'moved_permanently' code" do + get '/users/:username/followers' + + expect(response).to have_http_status(301) + end + end +end diff --git a/spec/requests/following_accounts_spec.rb b/spec/requests/following_accounts_spec.rb new file mode 100644 index 000000000..f0955ceb3 --- /dev/null +++ b/spec/requests/following_accounts_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'FollowingAccountsController' do + describe 'The following_accounts route' do + it "returns a http 'moved_permanently' code" do + get '/users/:username/following' + + expect(response).to have_http_status(301) + end + end +end diff --git a/spec/requests/localization_spec.rb b/spec/requests/localization_spec.rb index 39eeee5f0..b7fb53ed8 100644 --- a/spec/requests/localization_spec.rb +++ b/spec/requests/localization_spec.rb @@ -3,8 +3,10 @@ require 'rails_helper' describe 'Localization' do - after(:all) do - I18n.locale = I18n.default_locale + around do |example| + I18n.with_locale(I18n.locale) do + example.run + end end it 'uses a specific region when provided' do diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index ca5bb2ae8..370743dfe 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -29,10 +29,10 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do header_tags = view.content_for(:header_tags) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) + expect(header_tags).to match(//) + expect(header_tags).to match(//) + expect(header_tags).to match(//) + expect(header_tags).to match(%r{}) end it 'has twitter player tag' do @@ -48,7 +48,7 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do header_tags = view.content_for(:header_tags) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) + expect(header_tags).to match(%r{}) + expect(header_tags).to match(//) end end diff --git a/streaming/index.js b/streaming/index.js index a5b53ea49..48ad41f68 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -53,7 +53,7 @@ const redisUrlToClient = async (defaultConfig, redisUrl) => { /** * @param {string} json * @param {any} req - * @return {Object.|null} + * @returns {Object.|null} */ const parseJSON = (json, req) => { try { @@ -70,7 +70,7 @@ const parseJSON = (json, req) => { /** * @param {Object.} env the `process.env` value to read configuration from - * @return {Object.} the configuration for the PostgreSQL connection + * @returns {Object.} the configuration for the PostgreSQL connection */ const pgConfigFromEnv = (env) => { const pgConfigs = { @@ -124,7 +124,7 @@ const pgConfigFromEnv = (env) => { /** * @param {Object.} env the `process.env` value to read configuration from - * @return {Object.} configuration for the Redis connection + * @returns {Object.} configuration for the Redis connection */ const redisConfigFromEnv = (env) => { const redisNamespace = env.REDIS_NAMESPACE || null; @@ -171,7 +171,7 @@ const startServer = async () => { /** * @param {string[]} channels - * @return {function(): void} + * @returns {function(): void} */ const subscriptionHeartbeat = channels => { const interval = 6 * 60; @@ -224,6 +224,7 @@ const startServer = async () => { /** * @param {string} channel + * @param {function(string): void} callback */ const unsubscribe = (channel, callback) => { log.silly(`Removing listener for ${channel}`); @@ -255,7 +256,7 @@ const startServer = async () => { /** * @param {any} value - * @return {boolean} + * @returns {boolean} */ const isTruthy = value => value && !FALSE_VALUES.includes(value); @@ -263,7 +264,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const allowCrossDomain = (req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); @@ -276,7 +277,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const setRequestId = (req, res, next) => { req.requestId = uuid.v4(); @@ -288,7 +289,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const setRemoteAddress = (req, res, next) => { req.remoteAddress = req.connection.remoteAddress; @@ -299,7 +300,7 @@ const startServer = async () => { /** * @param {any} req * @param {string[]} necessaryScopes - * @return {boolean} + * @returns {boolean} */ const isInScope = (req, necessaryScopes) => req.scopes.some(scope => necessaryScopes.includes(scope)); @@ -307,7 +308,7 @@ const startServer = async () => { /** * @param {string} token * @param {any} req - * @return {Promise.} + * @returns {Promise.} */ const accountFromToken = (token, req) => new Promise((resolve, reject) => { pgPool.connect((err, client, done) => { @@ -345,8 +346,7 @@ const startServer = async () => { /** * @param {any} req - * @param {boolean=} required - * @return {Promise.} + * @returns {Promise.} */ const accountFromRequest = (req) => new Promise((resolve, reject) => { const authorization = req.headers.authorization; @@ -368,7 +368,7 @@ const startServer = async () => { /** * @param {any} req - * @return {string} + * @returns {string} */ const channelNameFromPath = req => { const { path, query } = req; @@ -412,7 +412,7 @@ const startServer = async () => { /** * @param {any} req * @param {string} channelName - * @return {Promise.} + * @returns {Promise.} */ const checkScopes = (req, channelName) => new Promise((resolve, reject) => { log.silly(req.requestId, `Checking OAuth scopes for ${channelName}`); @@ -477,7 +477,7 @@ const startServer = async () => { /** * @param {any} req * @param {SystemMessageHandlers} eventHandlers - * @return {function(string): void} + * @returns {function(string): void} */ const createSystemMessageListener = (req, eventHandlers) => { return message => { @@ -565,14 +565,14 @@ const startServer = async () => { /** * @param {array} arr * @param {number=} shift - * @return {string} + * @returns {string} */ const placeholders = (arr, shift = 0) => arr.map((_, i) => `$${i + 1 + shift}`).join(', '); /** * @param {string} listId * @param {any} req - * @return {Promise.} + * @returns {Promise.} */ const authorizeListAccess = (listId, req) => new Promise((resolve, reject) => { const { accountId } = req; @@ -603,7 +603,7 @@ const startServer = async () => { * @param {function(string[], function(string): void): void} attachCloseHandler * @param {boolean=} needsFiltering * @param {boolean=} allowLocalOnly - * @return {function(string): void} + * @returns {function(string): void} */ const streamFrom = (ids, req, output, attachCloseHandler, needsFiltering = false, allowLocalOnly = false) => { const accountId = req.accountId || req.remoteAddress; @@ -772,7 +772,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @return {function(string, string): void} + * @returns {function(string, string): void} */ const streamToHttp = (req, res) => { const accountId = req.accountId || req.remoteAddress; @@ -799,7 +799,7 @@ const startServer = async () => { /** * @param {any} req * @param {function(): void} [closeHandler] - * @return {function(string[]): void} + * @returns {function(string[]): void} */ const streamHttpEnd = (req, closeHandler = undefined) => (ids) => { req.on('close', () => { @@ -817,7 +817,7 @@ const startServer = async () => { * @param {any} req * @param {any} ws * @param {string[]} streamName - * @return {function(string, string): void} + * @returns {function(string, string): void} */ const streamToWs = (req, ws, streamName) => (event, payload) => { if (ws.readyState !== ws.OPEN) { @@ -892,7 +892,7 @@ const startServer = async () => { /** * @param {any} req - * @return {string[]} + * @returns {string[]} */ const channelsForUserStream = req => { const arr = [`timeline:${req.accountId}`]; @@ -917,7 +917,7 @@ const startServer = async () => { /** * @param {string} str - * @return {string} + * @returns {string} */ const foldToASCII = str => { const regex = new RegExp(NON_ASCII_CHARS.split('').join('|'), 'g'); @@ -930,7 +930,7 @@ const startServer = async () => { /** * @param {string} str - * @return {string} + * @returns {string} */ const normalizeHashtag = str => { return foldToASCII(str.normalize('NFKC').toLowerCase()).replace(/[^\p{L}\p{N}_\u00b7\u200c]/gu, ''); @@ -940,7 +940,7 @@ const startServer = async () => { * @param {any} req * @param {string} name * @param {StreamParams} params - * @return {Promise.<{ channelIds: string[], options: { needsFiltering: boolean } }>} + * @returns {Promise.<{ channelIds: string[], options: { needsFiltering: boolean } }>} */ const channelNameToIds = (req, name, params) => new Promise((resolve, reject) => { switch (name) { @@ -1062,7 +1062,7 @@ const startServer = async () => { /** * @param {string} channelName * @param {StreamParams} params - * @return {string[]} + * @returns {string[]} */ const streamNameFromChannelName = (channelName, params) => { if (channelName === 'list') { @@ -1170,7 +1170,7 @@ const startServer = async () => { /** * @param {string|string[]} arrayOrString - * @return {string} + * @returns {string} */ const firstParam = arrayOrString => { if (Array.isArray(arrayOrString)) { diff --git a/yarn.lock b/yarn.lock index 1f87e2c9a..f12a89189 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1110,25 +1110,25 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/css-parser-algorithms@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz#ff02629c7c95d1f4f8ea84d5ef1173461610535e" - integrity sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw== - -"@csstools/css-tokenizer@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.0.tgz#fee4de3d444db3ce9007f3af6474af8ba3e4b930" - integrity sha512-dtqFyoJBHUxGi9zPZdpCKP1xk8tq6KPHJ/NY4qWXiYo6IcSGwzk3L8x2XzZbbyOyBs9xQARoGveU2AsgLj6D2A== - -"@csstools/media-query-list-parser@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz#d85a366811563a5d002755ed10e5212a1613c91d" - integrity sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA== - -"@csstools/selector-specificity@^2.1.1": +"@csstools/css-parser-algorithms@^2.1.1": version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.1.1.tgz#7b62e6412a468a2d1096ed267edd1e4a7fd4a119" + integrity sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA== + +"@csstools/css-tokenizer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" + integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + +"@csstools/media-query-list-parser@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.4.tgz#466bd254041530dfd1e88bcb1921e8ca4af75b6a" + integrity sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA== + +"@csstools/selector-specificity@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== "@discoveryjs/json-ext@0.5.7": version "0.5.7" @@ -1218,6 +1218,15 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@es-joy/jsdoccomment@~0.37.1": + version "0.37.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz#fa32a41ba12097452693343e09ad4d26d157aedd" + integrity sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg== + dependencies: + comment-parser "1.3.1" + esquery "^1.5.0" + jsdoc-type-pratt-parser "~4.0.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -1245,10 +1254,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.38.0": - version "8.38.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" - integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== "@floating-ui/core@^1.0.1": version "1.0.1" @@ -1544,16 +1553,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - "@jest/types@^27.0.2": version "27.2.5" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132" @@ -2019,14 +2018,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -2034,18 +2025,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "26.0.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.3.tgz#79534e0e94857171c0edc596db0ebe7cb7863251" - integrity sha512-v89ga1clpVL/Y1+YI0eIu1VMW+KU7Xl8PhylVtDKVWaSUHBHYPLXMQGBdrpHewaKoTvlXkksbYqPgz8b4cmRZg== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/jest@^29.4.2": - version "29.4.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.2.tgz#13ca45d528a0f81a4792b7df199f58ad46c2a0e3" - integrity sha512-bbne90W7is+m88ezmZrLiTpp41tIoTdvPC5t3gLoNgu/6qbGdWTC2JWqPWQRJn2Q7rVYTr8aTWqOjhGJDXyvAQ== +"@types/jest@*", "@types/jest@^29.5.1": + version "29.5.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.1.tgz#83c818aa9a87da27d6da85d3378e5a34d2f31a47" + integrity sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2084,10 +2067,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.191": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== +"@types/lodash@^4.14.194": + version "4.14.194" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/mime@*": version "3.0.1" @@ -2462,13 +2445,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.3" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" @@ -2476,17 +2452,10 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^17.0.22": - version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== +"@types/yargs@^17.0.24", "@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" @@ -2958,6 +2927,11 @@ anymatch@^3.0.3, anymatch@~3.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + are-we-there-yet@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" @@ -4018,6 +3992,11 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +comment-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -4172,7 +4151,7 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.1.0: +cosmiconfig@^8.1.3: version "8.1.3" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== @@ -4660,11 +4639,6 @@ detect-passive-events@^2.0.3: dependencies: detect-it "^4.0.1" -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -5099,6 +5073,20 @@ eslint-plugin-import@~2.27.5: semver "^6.3.0" tsconfig-paths "^3.14.1" +eslint-plugin-jsdoc@^43.1.1: + version "43.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-43.1.1.tgz#fc72ba21597cc99b1a0dc988aebb9bb57d0ec492" + integrity sha512-J2kjjsJ5vBXSyNzqJhceeSGTAgVgZHcPSJKo3vD4tNjUdfky98rR2VfZUDsS1GKL6isyVa8GWvr+Az7Vyg2HXA== + dependencies: + "@es-joy/jsdoccomment" "~0.37.1" + are-docs-informative "^0.0.2" + comment-parser "1.3.1" + debug "^4.3.4" + escape-string-regexp "^4.0.0" + esquery "^1.5.0" + semver "^7.5.0" + spdx-expression-parse "^3.0.1" + eslint-plugin-jsx-a11y@~6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" @@ -5163,10 +5151,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -5176,15 +5164,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@^8.38.0: - version "8.38.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" - integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== +eslint@^8.39.0: + version "8.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.38.0" + "@eslint/js" "8.39.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5194,7 +5182,7 @@ eslint@^8.38.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" + eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.0" espree "^9.5.1" esquery "^1.4.2" @@ -5236,7 +5224,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: +esquery@^1.4.2, esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -6172,10 +6160,10 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-tags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== http-deceiver@^1.2.7: version "1.2.7" @@ -7039,16 +7027,6 @@ jest-config@^29.5.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-diff@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" @@ -7103,11 +7081,6 @@ jest-environment-node@^29.5.0: jest-mock "^29.5.0" jest-util "^29.5.0" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" @@ -7399,6 +7372,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -9002,7 +8980,7 @@ postcss-loader@^4.3.0: postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-merge-longhand@^6.0.0: version "6.0.0" @@ -9170,19 +9148,19 @@ postcss-reduce-transforms@^6.0.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-safe-parser@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== -postcss-scss@^4.0.2: +postcss-scss@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.6.tgz#5d62a574b950a6ae12f2aa89b60d63d9e4432bfd" integrity sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ== -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -9210,7 +9188,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.15, postcss@^8.4.21, postcss@^8.4.23: +postcss@^8.2.15, postcss@^8.4.22, postcss@^8.4.23: version "8.4.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== @@ -9261,16 +9239,6 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - pretty-format@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" @@ -9541,7 +9509,7 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10283,7 +10251,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== @@ -10622,7 +10590,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -10942,58 +10910,57 @@ stylehacks@^6.0.0: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylelint-config-recommended-scss@^9.0.0: +stylelint-config-recommended-scss@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-11.0.0.tgz#7b933ecac99cd3b52d14d1746e3ecd36f421b4b6" + integrity sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw== + dependencies: + postcss-scss "^4.0.6" + stylelint-config-recommended "^12.0.0" + stylelint-scss "^4.6.0" + +stylelint-config-recommended@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz#d0993232fca017065fd5acfcb52dd8a188784ef4" + integrity sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ== + +stylelint-config-standard-scss@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-9.0.0.tgz#e755cf3654f3a3a6d7bdf84fe0a814595754a386" - integrity sha512-5e9pn3Ztfncd8s9OqvvCW7tZpYe+vGmPi7VEXX7XEp+Kj38PnKCrvFCBL+hQ7rkD4d5QzjB3BxlFEyo/30UWUw== + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-9.0.0.tgz#70c66e1179612519fdf6ca1dbff23c804def1b6b" + integrity sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg== dependencies: - postcss-scss "^4.0.2" - stylelint-config-recommended "^10.0.1" - stylelint-scss "^4.4.0" + stylelint-config-recommended-scss "^11.0.0" + stylelint-config-standard "^33.0.0" -stylelint-config-recommended@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-10.0.1.tgz#25a8828acf6cde87dac6db2950c8c4ed82a69ae1" - integrity sha512-TQ4xQ48tW4QSlODcti7pgSRqBZcUaBzuh0jPpfiMhwJKBPkqzTIAU+IrSWL/7BgXlOM90DjB7YaNgFpx8QWhuA== - -stylelint-config-standard-scss@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-7.0.1.tgz#4ba83fa19e1508937f7e02674e085cf94fc1a145" - integrity sha512-m5sRdtsB1F5fnC1Ozla7ryftU47wVpO+HWd+JQTqeoG0g/oPh5EfbWfcVHbNCEtuoHfALIySiUWS20pz2hX6jA== +stylelint-config-standard@^33.0.0: + version "33.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-33.0.0.tgz#1f7bb299153a53874073e93829e37a475842f0f9" + integrity sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg== dependencies: - stylelint-config-recommended-scss "^9.0.0" - stylelint-config-standard "^30.0.1" + stylelint-config-recommended "^12.0.0" -stylelint-config-standard@^30.0.1: - version "30.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-30.0.1.tgz#a84d57c240c37f7db47023ab9d2e64c49090e1eb" - integrity sha512-NbeHOmpRQhjZh5XB1B/S4MLRWvz4xxAxeDBjzl0tY2xEcayNhLbaRGF0ZQzq+DQZLCcPpOHeS2Ru1ydbkhkmLg== +stylelint-scss@^4.6.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.7.0.tgz#f986bf8c5a4b93eae2b67d3a3562eef822657908" + integrity sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== dependencies: - stylelint-config-recommended "^10.0.1" - -stylelint-scss@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.4.0.tgz#87ce9d049eff1ce67cce788780fbfda63099017e" - integrity sha512-Qy66a+/30aylFhPmUArHhVsHOun1qrO93LGT15uzLuLjWS7hKDfpFm34mYo1ndR4MCo8W4bEZM1+AlJRJORaaw== - dependencies: - lodash "^4.17.21" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" - postcss-selector-parser "^6.0.6" - postcss-value-parser "^4.1.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" -stylelint@^15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.3.0.tgz#5f0f3264abeb29c54f571ea3f3934eba2c2be96d" - integrity sha512-9UYBYk7K9rtlKcTUDZrtntE840sZM00qyYBQHHe7tjwMNUsPsGvR6Fd43IxHEAhRrDLzpy3TVaHb6CReBB3eFg== +stylelint@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.6.0.tgz#1d76176dd8b6307bc4645e428ad18ddd15edbafc" + integrity sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg== dependencies: - "@csstools/css-parser-algorithms" "^2.0.1" - "@csstools/css-tokenizer" "^2.1.0" - "@csstools/media-query-list-parser" "^2.0.1" - "@csstools/selector-specificity" "^2.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" + "@csstools/selector-specificity" "^2.2.0" balanced-match "^2.0.0" colord "^2.9.3" - cosmiconfig "^8.1.0" + cosmiconfig "^8.1.3" css-functions-list "^3.1.0" css-tree "^2.3.1" debug "^4.3.4" @@ -11003,7 +10970,7 @@ stylelint@^15.3.0: global-modules "^2.0.0" globby "^11.1.0" globjoin "^0.1.4" - html-tags "^3.2.0" + html-tags "^3.3.1" ignore "^5.2.4" import-lazy "^4.0.0" imurmurhash "^0.1.4" @@ -11014,7 +10981,7 @@ stylelint@^15.3.0: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.21" + postcss "^8.4.22" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" @@ -11660,7 +11627,7 @@ utf-8-validate@^6.0.3: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@0.10.3: version "0.10.3"