Merge commit 'fe2667bb0d3487a32b9da5250402a90482a85fe2' into glitch-soc/merge-upstream
Conflicts: - `app/lib/content_security_policy.rb`: Conflict caused by glitch-soc's support for the extra `EXTRA_DATA_HOSTS` environment variable. Ported upstream's changes while keeping support for `EXTRA_DATA_HOSTS`.pull/2559/head
commit
0b2c7cdb02
|
@ -70,7 +70,7 @@ services:
|
||||||
hard: -1
|
hard: -1
|
||||||
|
|
||||||
libretranslate:
|
libretranslate:
|
||||||
image: libretranslate/libretranslate:v1.5.2
|
image: libretranslate/libretranslate:v1.5.3
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- lt-data:/home/libretranslate/.local
|
- lt-data:/home/libretranslate/.local
|
||||||
|
|
|
@ -118,15 +118,10 @@ Rails/UnusedIgnoredColumns:
|
||||||
Rails/NegateInclude:
|
Rails/NegateInclude:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Reason: Some single letter camel case files shouldn't be split
|
# Reason: Deprecated cop, will be removed in 3.0, replaced by SpecFilePathFormat
|
||||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
||||||
RSpec/FilePath:
|
RSpec/FilePath:
|
||||||
CustomTransform:
|
Enabled: false
|
||||||
ActivityPub: activitypub
|
|
||||||
DeepL: deepl
|
|
||||||
FetchOEmbedService: fetch_oembed_service
|
|
||||||
OEmbedController: oembed_controller
|
|
||||||
OStatus: ostatus
|
|
||||||
|
|
||||||
# Reason:
|
# Reason:
|
||||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
|
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
|
||||||
# using RuboCop version 1.57.2.
|
# using RuboCop version 1.59.0.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the offenses are removed from the code base.
|
# one by one as the offenses are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
|
@ -26,7 +26,7 @@ Lint/NonLocalExitFromIterator:
|
||||||
|
|
||||||
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Max: 100
|
Max: 82
|
||||||
|
|
||||||
# Configuration parameters: CountBlocks, Max.
|
# Configuration parameters: CountBlocks, Max.
|
||||||
Metrics/BlockNesting:
|
Metrics/BlockNesting:
|
||||||
|
@ -50,7 +50,7 @@ RSpec/MultipleExpectations:
|
||||||
|
|
||||||
# Configuration parameters: AllowSubject.
|
# Configuration parameters: AllowSubject.
|
||||||
RSpec/MultipleMemoizedHelpers:
|
RSpec/MultipleMemoizedHelpers:
|
||||||
Max: 21
|
Max: 17
|
||||||
|
|
||||||
# Configuration parameters: AllowedGroups.
|
# Configuration parameters: AllowedGroups.
|
||||||
RSpec/NestedGroups:
|
RSpec/NestedGroups:
|
||||||
|
@ -66,7 +66,6 @@ Rails/ApplicationController:
|
||||||
Rails/HasAndBelongsToMany:
|
Rails/HasAndBelongsToMany:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/concerns/account/associations.rb'
|
- 'app/models/concerns/account/associations.rb'
|
||||||
- 'app/models/preview_card.rb'
|
|
||||||
- 'app/models/status.rb'
|
- 'app/models/status.rb'
|
||||||
- 'app/models/tag.rb'
|
- 'app/models/tag.rb'
|
||||||
|
|
||||||
|
@ -144,7 +143,6 @@ Rails/WhereExists:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/activitypub/inboxes_controller.rb'
|
- 'app/controllers/activitypub/inboxes_controller.rb'
|
||||||
- 'app/controllers/admin/email_domain_blocks_controller.rb'
|
- 'app/controllers/admin/email_domain_blocks_controller.rb'
|
||||||
- 'app/controllers/auth/registrations_controller.rb'
|
|
||||||
- 'app/lib/activitypub/activity/create.rb'
|
- 'app/lib/activitypub/activity/create.rb'
|
||||||
- 'app/lib/delivery_failure_tracker.rb'
|
- 'app/lib/delivery_failure_tracker.rb'
|
||||||
- 'app/lib/feed_manager.rb'
|
- 'app/lib/feed_manager.rb'
|
||||||
|
@ -160,24 +158,16 @@ Rails/WhereExists:
|
||||||
- 'app/serializers/rest/announcement_serializer.rb'
|
- 'app/serializers/rest/announcement_serializer.rb'
|
||||||
- 'app/serializers/rest/tag_serializer.rb'
|
- 'app/serializers/rest/tag_serializer.rb'
|
||||||
- 'app/services/activitypub/fetch_remote_status_service.rb'
|
- 'app/services/activitypub/fetch_remote_status_service.rb'
|
||||||
- 'app/services/app_sign_up_service.rb'
|
|
||||||
- 'app/services/vote_service.rb'
|
- 'app/services/vote_service.rb'
|
||||||
- 'app/validators/reaction_validator.rb'
|
- 'app/validators/reaction_validator.rb'
|
||||||
- 'app/validators/vote_validator.rb'
|
- 'app/validators/vote_validator.rb'
|
||||||
- 'app/workers/move_worker.rb'
|
- 'app/workers/move_worker.rb'
|
||||||
- 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb'
|
|
||||||
- 'lib/tasks/tests.rake'
|
- 'lib/tasks/tests.rake'
|
||||||
- 'spec/models/account_spec.rb'
|
- 'spec/models/account_spec.rb'
|
||||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
||||||
- 'spec/services/purge_domain_service_spec.rb'
|
- 'spec/services/purge_domain_service_spec.rb'
|
||||||
- 'spec/services/unallow_domain_service_spec.rb'
|
- 'spec/services/unallow_domain_service_spec.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowOnConstant, AllowOnSelfClass.
|
|
||||||
Style/CaseEquality:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/trusted_proxies.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
||||||
# AllowedMethods: ==, equal?, eql?
|
# AllowedMethods: ==, equal?, eql?
|
||||||
|
@ -205,8 +195,8 @@ Style/FetchEnvVar:
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
- 'config/initializers/vapid.rb'
|
- 'config/initializers/vapid.rb'
|
||||||
- 'lib/premailer_webpack_strategy.rb'
|
|
||||||
- 'lib/mastodon/redis_config.rb'
|
- 'lib/mastodon/redis_config.rb'
|
||||||
|
- 'lib/premailer_webpack_strategy.rb'
|
||||||
- 'lib/tasks/repo.rake'
|
- 'lib/tasks/repo.rake'
|
||||||
- 'spec/features/profile_spec.rb'
|
- 'spec/features/profile_spec.rb'
|
||||||
|
|
||||||
|
@ -223,7 +213,6 @@ Style/FormatStringToken:
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/GlobalStdStream:
|
Style/GlobalStdStream:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/boot.rb'
|
|
||||||
- 'config/environments/development.rb'
|
- 'config/environments/development.rb'
|
||||||
- 'config/environments/production.rb'
|
- 'config/environments/production.rb'
|
||||||
|
|
||||||
|
@ -253,8 +242,6 @@ Style/GuardClause:
|
||||||
- 'app/workers/redownload_media_worker.rb'
|
- 'app/workers/redownload_media_worker.rb'
|
||||||
- 'app/workers/remote_account_refresh_worker.rb'
|
- 'app/workers/remote_account_refresh_worker.rb'
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'db/migrate/20170901141119_truncate_preview_cards.rb'
|
|
||||||
- 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb'
|
|
||||||
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
|
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
|
||||||
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
|
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
|
||||||
- 'lib/mastodon/cli/accounts.rb'
|
- 'lib/mastodon/cli/accounts.rb'
|
||||||
|
@ -275,7 +262,6 @@ Style/HashAsLastArrayItem:
|
||||||
- 'app/models/status.rb'
|
- 'app/models/status.rb'
|
||||||
- 'app/services/batched_remove_status_service.rb'
|
- 'app/services/batched_remove_status_service.rb'
|
||||||
- 'app/services/notify_service.rb'
|
- 'app/services/notify_service.rb'
|
||||||
- 'db/migrate/20181024224956_migrate_account_conversations.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/HashTransformValues:
|
Style/HashTransformValues:
|
||||||
|
@ -415,8 +401,8 @@ Style/TrailingCommaInHashLiteral:
|
||||||
- 'config/environments/test.rb'
|
- 'config/environments/test.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: EnforcedStyle, MinSize, WordRegex.
|
# Configuration parameters: WordRegex.
|
||||||
# SupportedStyles: percent, brackets
|
# SupportedStyles: percent, brackets
|
||||||
Style/WordArray:
|
Style/WordArray:
|
||||||
Exclude:
|
EnforcedStyle: percent
|
||||||
- 'app/helpers/languages_helper.rb'
|
MinSize: 3
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -90,7 +90,7 @@ gem 'sidekiq-bulk', '~> 0.2.0'
|
||||||
gem 'simple-navigation', '~> 4.4'
|
gem 'simple-navigation', '~> 4.4'
|
||||||
gem 'simple_form', '~> 5.2'
|
gem 'simple_form', '~> 5.2'
|
||||||
gem 'stoplight', '~> 3.0.1'
|
gem 'stoplight', '~> 3.0.1'
|
||||||
gem 'strong_migrations', '1.6.4'
|
gem 'strong_migrations', '1.7.0'
|
||||||
gem 'tty-prompt', '~> 0.23', require: false
|
gem 'tty-prompt', '~> 0.23', require: false
|
||||||
gem 'twitter-text', '~> 3.1.0'
|
gem 'twitter-text', '~> 3.1.0'
|
||||||
gem 'tzinfo-data', '~> 1.2023'
|
gem 'tzinfo-data', '~> 1.2023'
|
||||||
|
|
18
Gemfile.lock
18
Gemfile.lock
|
@ -467,14 +467,14 @@ GEM
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.3.0)
|
multipart-post (2.3.0)
|
||||||
mutex_m (0.2.0)
|
mutex_m (0.2.0)
|
||||||
net-http (0.4.0)
|
net-http (0.4.1)
|
||||||
uri
|
uri
|
||||||
net-http-persistent (4.0.2)
|
net-http-persistent (4.0.2)
|
||||||
connection_pool (~> 2.2)
|
connection_pool (~> 2.2)
|
||||||
net-imap (0.4.4)
|
net-imap (0.4.4)
|
||||||
date
|
date
|
||||||
net-protocol
|
net-protocol
|
||||||
net-ldap (0.18.0)
|
net-ldap (0.19.0)
|
||||||
net-pop (0.1.2)
|
net-pop (0.1.2)
|
||||||
net-protocol
|
net-protocol
|
||||||
net-protocol (0.2.2)
|
net-protocol (0.2.2)
|
||||||
|
@ -544,7 +544,7 @@ GEM
|
||||||
psych (5.1.2)
|
psych (5.1.2)
|
||||||
stringio
|
stringio
|
||||||
public_suffix (5.0.4)
|
public_suffix (5.0.4)
|
||||||
puma (6.4.1)
|
puma (6.4.2)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
pundit (2.3.1)
|
pundit (2.3.1)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
@ -676,11 +676,11 @@ GEM
|
||||||
unicode-display_width (>= 2.4.0, < 3.0)
|
unicode-display_width (>= 2.4.0, < 3.0)
|
||||||
rubocop-ast (1.30.0)
|
rubocop-ast (1.30.0)
|
||||||
parser (>= 3.2.1.0)
|
parser (>= 3.2.1.0)
|
||||||
rubocop-capybara (2.19.0)
|
rubocop-capybara (2.20.0)
|
||||||
rubocop (~> 1.41)
|
rubocop (~> 1.41)
|
||||||
rubocop-factory_bot (2.24.0)
|
rubocop-factory_bot (2.25.0)
|
||||||
rubocop (~> 1.33)
|
rubocop (~> 1.33)
|
||||||
rubocop-performance (1.20.1)
|
rubocop-performance (1.20.2)
|
||||||
rubocop (>= 1.48.1, < 2.0)
|
rubocop (>= 1.48.1, < 2.0)
|
||||||
rubocop-ast (>= 1.30.0, < 2.0)
|
rubocop-ast (>= 1.30.0, < 2.0)
|
||||||
rubocop-rails (2.23.1)
|
rubocop-rails (2.23.1)
|
||||||
|
@ -688,7 +688,7 @@ GEM
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
rubocop (>= 1.33.0, < 2.0)
|
rubocop (>= 1.33.0, < 2.0)
|
||||||
rubocop-ast (>= 1.30.0, < 2.0)
|
rubocop-ast (>= 1.30.0, < 2.0)
|
||||||
rubocop-rspec (2.25.0)
|
rubocop-rspec (2.26.1)
|
||||||
rubocop (~> 1.40)
|
rubocop (~> 1.40)
|
||||||
rubocop-capybara (~> 2.17)
|
rubocop-capybara (~> 2.17)
|
||||||
rubocop-factory_bot (~> 2.22)
|
rubocop-factory_bot (~> 2.22)
|
||||||
|
@ -748,7 +748,7 @@ GEM
|
||||||
stoplight (3.0.2)
|
stoplight (3.0.2)
|
||||||
redlock (~> 1.0)
|
redlock (~> 1.0)
|
||||||
stringio (3.1.0)
|
stringio (3.1.0)
|
||||||
strong_migrations (1.6.4)
|
strong_migrations (1.7.0)
|
||||||
activerecord (>= 5.2)
|
activerecord (>= 5.2)
|
||||||
swd (1.3.0)
|
swd (1.3.0)
|
||||||
activesupport (>= 3)
|
activesupport (>= 3)
|
||||||
|
@ -952,7 +952,7 @@ DEPENDENCIES
|
||||||
simplecov-lcov (~> 0.8)
|
simplecov-lcov (~> 0.8)
|
||||||
stackprof
|
stackprof
|
||||||
stoplight (~> 3.0.1)
|
stoplight (~> 3.0.1)
|
||||||
strong_migrations (= 1.6.4)
|
strong_migrations (= 1.7.0)
|
||||||
test-prof
|
test-prof
|
||||||
thor (~> 1.2)
|
thor (~> 1.2)
|
||||||
tty-prompt (~> 0.23)
|
tty-prompt (~> 0.23)
|
||||||
|
|
|
@ -40,7 +40,7 @@ module Admin
|
||||||
(@email_domain_block.other_domains || []).uniq.each do |domain|
|
(@email_domain_block.other_domains || []).uniq.each do |domain|
|
||||||
next if EmailDomainBlock.where(domain: domain).exists?
|
next if EmailDomainBlock.where(domain: domain).exists?
|
||||||
|
|
||||||
other_email_domain_block = EmailDomainBlock.create!(domain: domain, parent: @email_domain_block)
|
other_email_domain_block = EmailDomainBlock.create!(domain: domain, allow_with_approval: @email_domain_block.allow_with_approval, parent: @email_domain_block)
|
||||||
log_action :create, other_email_domain_block
|
log_action :create, other_email_domain_block
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -65,7 +65,7 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_params
|
def resource_params
|
||||||
params.require(:email_domain_block).permit(:domain, other_domains: [])
|
params.require(:email_domain_block).permit(:domain, :allow_with_approval, other_domains: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def form_email_domain_block_batch_params
|
def form_email_domain_block_batch_params
|
||||||
|
|
|
@ -55,7 +55,7 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_params
|
def resource_params
|
||||||
params.permit(:domain)
|
params.permit(:domain, :allow_with_approval)
|
||||||
end
|
end
|
||||||
|
|
||||||
def insert_pagination_headers
|
def insert_pagination_headers
|
||||||
|
|
|
@ -3,150 +3,6 @@
|
||||||
module CacheConcern
|
module CacheConcern
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
module ActiveRecordCoder
|
|
||||||
EMPTY_HASH = {}.freeze
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def dump(record)
|
|
||||||
instances = InstanceTracker.new
|
|
||||||
serialized_associations = serialize_associations(record, instances)
|
|
||||||
serialized_records = instances.map { |r| serialize_record(r) }
|
|
||||||
[serialized_associations, *serialized_records]
|
|
||||||
end
|
|
||||||
|
|
||||||
def load(payload)
|
|
||||||
instances = InstanceTracker.new
|
|
||||||
serialized_associations, *serialized_records = payload
|
|
||||||
serialized_records.each { |attrs| instances.push(deserialize_record(*attrs)) }
|
|
||||||
deserialize_associations(serialized_associations, instances)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# Records without associations, or which have already been visited before,
|
|
||||||
# are serialized by their id alone.
|
|
||||||
#
|
|
||||||
# Records with associations are serialized as a two-element array including
|
|
||||||
# their id and the record's association cache.
|
|
||||||
#
|
|
||||||
def serialize_associations(record, instances)
|
|
||||||
return unless record
|
|
||||||
|
|
||||||
if (id = instances.lookup(record))
|
|
||||||
payload = id
|
|
||||||
else
|
|
||||||
payload = instances.push(record)
|
|
||||||
|
|
||||||
cached_associations = record.class.reflect_on_all_associations.select do |reflection|
|
|
||||||
record.association_cached?(reflection.name)
|
|
||||||
end
|
|
||||||
|
|
||||||
unless cached_associations.empty?
|
|
||||||
serialized_associations = cached_associations.map do |reflection|
|
|
||||||
association = record.association(reflection.name)
|
|
||||||
|
|
||||||
serialized_target = if reflection.collection?
|
|
||||||
association.target.map { |target_record| serialize_associations(target_record, instances) }
|
|
||||||
else
|
|
||||||
serialize_associations(association.target, instances)
|
|
||||||
end
|
|
||||||
|
|
||||||
[reflection.name, serialized_target]
|
|
||||||
end
|
|
||||||
|
|
||||||
payload = [payload, serialized_associations]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
payload
|
|
||||||
end
|
|
||||||
|
|
||||||
def deserialize_associations(payload, instances)
|
|
||||||
return unless payload
|
|
||||||
|
|
||||||
id, associations = payload
|
|
||||||
record = instances.fetch(id)
|
|
||||||
|
|
||||||
associations&.each do |name, serialized_target|
|
|
||||||
begin
|
|
||||||
association = record.association(name)
|
|
||||||
rescue ActiveRecord::AssociationNotFoundError
|
|
||||||
raise AssociationMissingError, "undefined association: #{name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
target = if association.reflection.collection?
|
|
||||||
serialized_target.map! { |serialized_record| deserialize_associations(serialized_record, instances) }
|
|
||||||
else
|
|
||||||
deserialize_associations(serialized_target, instances)
|
|
||||||
end
|
|
||||||
|
|
||||||
association.target = target
|
|
||||||
end
|
|
||||||
|
|
||||||
record
|
|
||||||
end
|
|
||||||
|
|
||||||
def serialize_record(record)
|
|
||||||
arguments = [record.class.name, attributes_for_database(record)]
|
|
||||||
arguments << true if record.new_record?
|
|
||||||
arguments
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes_for_database(record)
|
|
||||||
attributes = record.attributes_for_database
|
|
||||||
attributes.transform_values! { |attr| attr.is_a?(::ActiveModel::Type::Binary::Data) ? attr.to_s : attr }
|
|
||||||
attributes
|
|
||||||
end
|
|
||||||
|
|
||||||
def deserialize_record(class_name, attributes_from_database, new_record = false) # rubocop:disable Style/OptionalBooleanParameter
|
|
||||||
begin
|
|
||||||
klass = Object.const_get(class_name)
|
|
||||||
rescue NameError
|
|
||||||
raise ClassMissingError, "undefined class: #{class_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Ideally we'd like to call `klass.instantiate`, however it doesn't allow to pass
|
|
||||||
# wether the record was persisted or not.
|
|
||||||
attributes = klass.attributes_builder.build_from_database(attributes_from_database, EMPTY_HASH)
|
|
||||||
klass.allocate.init_with_attributes(attributes, new_record)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Error < StandardError
|
|
||||||
end
|
|
||||||
|
|
||||||
class ClassMissingError < Error
|
|
||||||
end
|
|
||||||
|
|
||||||
class AssociationMissingError < Error
|
|
||||||
end
|
|
||||||
|
|
||||||
class InstanceTracker
|
|
||||||
def initialize
|
|
||||||
@instances = []
|
|
||||||
@ids = {}.compare_by_identity
|
|
||||||
end
|
|
||||||
|
|
||||||
def map(&block)
|
|
||||||
@instances.map(&block)
|
|
||||||
end
|
|
||||||
|
|
||||||
def fetch(...)
|
|
||||||
@instances.fetch(...)
|
|
||||||
end
|
|
||||||
|
|
||||||
def push(instance)
|
|
||||||
id = @ids[instance] = @instances.size
|
|
||||||
@instances << instance
|
|
||||||
id
|
|
||||||
end
|
|
||||||
|
|
||||||
def lookup(instance)
|
|
||||||
@ids[instance]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class_methods do
|
class_methods do
|
||||||
def vary_by(value, **kwargs)
|
def vary_by(value, **kwargs)
|
||||||
before_action(**kwargs) do |controller|
|
before_action(**kwargs) do |controller|
|
||||||
|
@ -196,11 +52,7 @@ module CacheConcern
|
||||||
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
|
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
|
||||||
return [] if raw.empty?
|
return [] if raw.empty?
|
||||||
|
|
||||||
cached_keys_with_value = begin
|
cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id)
|
||||||
Rails.cache.read_multi(*raw).transform_keys(&:id).transform_values { |r| ActiveRecordCoder.load(r) }
|
|
||||||
rescue ActiveRecordCoder::Error
|
|
||||||
{} # The serialization format may have changed, let's pretend it's a cache miss.
|
|
||||||
end
|
|
||||||
|
|
||||||
uncached_ids = raw.map(&:id) - cached_keys_with_value.keys
|
uncached_ids = raw.map(&:id) - cached_keys_with_value.keys
|
||||||
|
|
||||||
|
@ -208,10 +60,7 @@ module CacheConcern
|
||||||
|
|
||||||
unless uncached_ids.empty?
|
unless uncached_ids.empty?
|
||||||
uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id)
|
uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id)
|
||||||
|
Rails.cache.write_multi(uncached.values.to_h { |i| [i, i] })
|
||||||
uncached.each_value do |item|
|
|
||||||
Rails.cache.write(item, ActiveRecordCoder.dump(item))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] }
|
raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] }
|
||||||
|
|
|
@ -21,7 +21,7 @@ module WellKnown
|
||||||
username = username_from_resource
|
username = username_from_resource
|
||||||
|
|
||||||
@account = begin
|
@account = begin
|
||||||
if username == Rails.configuration.x.local_domain
|
if username == Rails.configuration.x.local_domain || username == Rails.configuration.x.web_domain
|
||||||
Account.representative
|
Account.representative
|
||||||
else
|
else
|
||||||
Account.find_local!(username)
|
Account.find_local!(username)
|
||||||
|
|
|
@ -582,16 +582,20 @@ class Status extends ImmutablePureComponent {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
setRef = c => {
|
setContainerRef = c => {
|
||||||
this.node = c;
|
this.node = c;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setStatusRef = c => {
|
||||||
|
this.statusNode = c;
|
||||||
|
};
|
||||||
|
|
||||||
_scrollStatusIntoView () {
|
_scrollStatusIntoView () {
|
||||||
const { status, multiColumn } = this.props;
|
const { status, multiColumn } = this.props;
|
||||||
|
|
||||||
if (status) {
|
if (status) {
|
||||||
window.requestAnimationFrame(() => {
|
requestIdleCallback(() => {
|
||||||
this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true);
|
this.statusNode?.scrollIntoView(true);
|
||||||
|
|
||||||
// In the single-column interface, `scrollIntoView` will put the post behind the header,
|
// In the single-column interface, `scrollIntoView` will put the post behind the header,
|
||||||
// so compensate for that.
|
// so compensate for that.
|
||||||
|
@ -629,9 +633,8 @@ class Status extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scroll to focused post if it is loaded
|
// Scroll to focused post if it is loaded
|
||||||
const child = this.node?.querySelector('.detailed-status__wrapper');
|
if (this.statusNode) {
|
||||||
if (child) {
|
return [0, this.statusNode.offsetTop];
|
||||||
return [0, child.offsetTop];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not scroll otherwise, `componentDidUpdate` will take care of that
|
// Do not scroll otherwise, `componentDidUpdate` will take care of that
|
||||||
|
@ -692,11 +695,11 @@ class Status extends ImmutablePureComponent {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>
|
<ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>
|
||||||
<div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>
|
<div className={classNames('scrollable', { fullscreen })} ref={this.setContainerRef}>
|
||||||
{ancestors}
|
{ancestors}
|
||||||
|
|
||||||
<HotKeys handlers={handlers}>
|
<HotKeys handlers={handlers}>
|
||||||
<div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)}>
|
<div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)} ref={this.setStatusRef}>
|
||||||
<DetailedStatus
|
<DetailedStatus
|
||||||
key={`details-${status.get('id')}`}
|
key={`details-${status.get('id')}`}
|
||||||
status={status}
|
status={status}
|
||||||
|
|
|
@ -260,6 +260,9 @@
|
||||||
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
|
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
|
||||||
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
|
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||||
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
|
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
|
||||||
|
"firehose.all": "Όλα",
|
||||||
|
"firehose.local": "Αυτός ο διακομιστής",
|
||||||
|
"firehose.remote": "Άλλοι διακομιστές",
|
||||||
"follow_request.authorize": "Εξουσιοδότησε",
|
"follow_request.authorize": "Εξουσιοδότησε",
|
||||||
"follow_request.reject": "Απέρριψε",
|
"follow_request.reject": "Απέρριψε",
|
||||||
"follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, το προσωπικό του {domain} θεώρησαν πως ίσως να θέλεις να ελέγξεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.",
|
"follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, το προσωπικό του {domain} θεώρησαν πως ίσως να θέλεις να ελέγξεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.",
|
||||||
|
@ -285,11 +288,15 @@
|
||||||
"hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",
|
"hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",
|
||||||
"hashtag.follow": "Παρακολούθηση ετικέτας",
|
"hashtag.follow": "Παρακολούθηση ετικέτας",
|
||||||
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
||||||
|
"home.actions.go_to_suggestions": "Βρείτε άτομα για να ακολουθήσετε",
|
||||||
"home.column_settings.basic": "Βασικές ρυθμίσεις",
|
"home.column_settings.basic": "Βασικές ρυθμίσεις",
|
||||||
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
||||||
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
||||||
"home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:\nΗ τροφοδοσία της αρχικής σελίδας σας είναι ένα μίγμα από αναρτήσεις με τις ετικέτες και τα άτομα που επιλέξατε να ακολουθείτε, και τις αναρτήσεις που προωθούν. Εάν αυτό σας φαίνεται πολύ ήσυχο, μπορεί να θέλετε:",
|
"home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:\nΗ τροφοδοσία της αρχικής σελίδας σας είναι ένα μίγμα από αναρτήσεις με τις ετικέτες και τα άτομα που επιλέξατε να ακολουθείτε, και τις αναρτήσεις που προωθούν. Εάν αυτό σας φαίνεται πολύ ήσυχο, μπορεί να θέλετε:",
|
||||||
|
"home.explore_prompt.title": "Αυτό είναι το σπίτι σας στο Mastodon.",
|
||||||
"home.hide_announcements": "Απόκρυψη ανακοινώσεων",
|
"home.hide_announcements": "Απόκρυψη ανακοινώσεων",
|
||||||
|
"home.pending_critical_update.link": "Δείτε ενημερώσεις",
|
||||||
|
"home.pending_critical_update.title": "Κρίσιμη ενημέρωση ασφαλείας διαθέσιμη!",
|
||||||
"home.show_announcements": "Εμφάνιση ανακοινώσεων",
|
"home.show_announcements": "Εμφάνιση ανακοινώσεων",
|
||||||
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
|
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
|
||||||
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
|
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
|
||||||
|
@ -314,6 +321,7 @@
|
||||||
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
|
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
|
||||||
"keyboard_shortcuts.down": "κίνηση προς τα κάτω στη λίστα",
|
"keyboard_shortcuts.down": "κίνηση προς τα κάτω στη λίστα",
|
||||||
"keyboard_shortcuts.enter": "Εμφάνιση ανάρτησης",
|
"keyboard_shortcuts.enter": "Εμφάνιση ανάρτησης",
|
||||||
|
"keyboard_shortcuts.favourite": "Αγαπημένη δημοσίευση",
|
||||||
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
|
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
|
||||||
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
|
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
|
||||||
"keyboard_shortcuts.home": "Άνοιγμα ροής αρχικής σελίδας",
|
"keyboard_shortcuts.home": "Άνοιγμα ροής αρχικής σελίδας",
|
||||||
|
@ -358,6 +366,7 @@
|
||||||
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
|
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
|
||||||
"lists.subheading": "Οι λίστες σου",
|
"lists.subheading": "Οι λίστες σου",
|
||||||
"load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}",
|
"load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}",
|
||||||
|
"loading_indicator.label": "Φόρτωση…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Απόκρυψη εικόνας} other {Απόκρυψη εικόνων}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Απόκρυψη εικόνας} other {Απόκρυψη εικόνων}}",
|
||||||
"moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.",
|
"moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.",
|
||||||
"mute_modal.duration": "Διάρκεια",
|
"mute_modal.duration": "Διάρκεια",
|
||||||
|
@ -380,6 +389,7 @@
|
||||||
"navigation_bar.lists": "Λίστες",
|
"navigation_bar.lists": "Λίστες",
|
||||||
"navigation_bar.logout": "Αποσύνδεση",
|
"navigation_bar.logout": "Αποσύνδεση",
|
||||||
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
|
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
|
||||||
|
"navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.",
|
||||||
"navigation_bar.personal": "Προσωπικά",
|
"navigation_bar.personal": "Προσωπικά",
|
||||||
"navigation_bar.pins": "Καρφιτσωμένες αναρτήσεις",
|
"navigation_bar.pins": "Καρφιτσωμένες αναρτήσεις",
|
||||||
"navigation_bar.preferences": "Προτιμήσεις",
|
"navigation_bar.preferences": "Προτιμήσεις",
|
||||||
|
@ -403,6 +413,7 @@
|
||||||
"notifications.column_settings.admin.report": "Νέες αναφορές:",
|
"notifications.column_settings.admin.report": "Νέες αναφορές:",
|
||||||
"notifications.column_settings.admin.sign_up": "Νέες εγγραφές:",
|
"notifications.column_settings.admin.sign_up": "Νέες εγγραφές:",
|
||||||
"notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας",
|
"notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας",
|
||||||
|
"notifications.column_settings.favourite": "Αγαπημένα:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών",
|
"notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών",
|
||||||
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
|
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
|
||||||
"notifications.column_settings.filter_bar.show_bar": "Εμφάνιση μπάρας φίλτρου",
|
"notifications.column_settings.filter_bar.show_bar": "Εμφάνιση μπάρας φίλτρου",
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"about.blocks": "Servitores moderate",
|
||||||
|
"about.contact": "Contacto:",
|
||||||
|
"about.disclaimer": "Mastodon es software libere, de codice aperte, e un marca de Mastodon gGmbH.",
|
||||||
|
"account.account_note_header": "Nota",
|
||||||
"account.add_or_remove_from_list": "Adder o remover ab listas",
|
"account.add_or_remove_from_list": "Adder o remover ab listas",
|
||||||
"account.badges.group": "Gruppo",
|
"account.badges.group": "Gruppo",
|
||||||
"account.block": "Blocar @{name}",
|
"account.block": "Blocar @{name}",
|
||||||
|
@ -21,9 +25,12 @@
|
||||||
"bundle_column_error.return": "Retornar al initio",
|
"bundle_column_error.return": "Retornar al initio",
|
||||||
"bundle_modal_error.close": "Clauder",
|
"bundle_modal_error.close": "Clauder",
|
||||||
"bundle_modal_error.retry": "Tentar novemente",
|
"bundle_modal_error.retry": "Tentar novemente",
|
||||||
|
"column.about": "A proposito de",
|
||||||
"column.blocks": "Usatores blocate",
|
"column.blocks": "Usatores blocate",
|
||||||
|
"column.bookmarks": "Marcapaginas",
|
||||||
"column.directory": "Navigar profilos",
|
"column.directory": "Navigar profilos",
|
||||||
"column.favourites": "Favoritos",
|
"column.favourites": "Favoritos",
|
||||||
|
"column.firehose": "Fluxos in directe",
|
||||||
"column.home": "Initio",
|
"column.home": "Initio",
|
||||||
"column.lists": "Listas",
|
"column.lists": "Listas",
|
||||||
"column.notifications": "Notificationes",
|
"column.notifications": "Notificationes",
|
||||||
|
@ -33,23 +40,28 @@
|
||||||
"compose.language.change": "Cambiar le lingua",
|
"compose.language.change": "Cambiar le lingua",
|
||||||
"compose.language.search": "Cercar linguas...",
|
"compose.language.search": "Cercar linguas...",
|
||||||
"compose.published.open": "Aperir",
|
"compose.published.open": "Aperir",
|
||||||
|
"compose_form.direct_message_warning_learn_more": "Apprender plus",
|
||||||
"compose_form.poll.add_option": "Adder un option",
|
"compose_form.poll.add_option": "Adder un option",
|
||||||
"compose_form.poll.remove_option": "Remover iste option",
|
"compose_form.poll.remove_option": "Remover iste option",
|
||||||
"confirmation_modal.cancel": "Cancellar",
|
"confirmation_modal.cancel": "Cancellar",
|
||||||
"confirmations.delete.confirm": "Deler",
|
"confirmations.delete.confirm": "Deler",
|
||||||
"confirmations.delete_list.confirm": "Deler",
|
"confirmations.delete_list.confirm": "Deler",
|
||||||
|
"confirmations.edit.confirm": "Modificar",
|
||||||
"confirmations.logout.confirm": "Clauder le session",
|
"confirmations.logout.confirm": "Clauder le session",
|
||||||
"copy_icon_button.copied": "Copiate al area de transferentia",
|
"copy_icon_button.copied": "Copiate al area de transferentia",
|
||||||
|
"copypaste.copied": "Copiate",
|
||||||
"copypaste.copy_to_clipboard": "Copiar al area de transferentia",
|
"copypaste.copy_to_clipboard": "Copiar al area de transferentia",
|
||||||
"disabled_account_banner.account_settings": "Parametros de conto",
|
"disabled_account_banner.account_settings": "Parametros de conto",
|
||||||
"dismissable_banner.dismiss": "Dimitter",
|
"dismissable_banner.dismiss": "Dimitter",
|
||||||
"emoji_button.activity": "Activitate",
|
"emoji_button.activity": "Activitate",
|
||||||
|
"emoji_button.clear": "Rader",
|
||||||
"emoji_button.custom": "Personalisate",
|
"emoji_button.custom": "Personalisate",
|
||||||
"emoji_button.search_results": "Resultatos de recerca",
|
"emoji_button.search_results": "Resultatos de recerca",
|
||||||
"empty_column.account_unavailable": "Profilo non disponibile",
|
"empty_column.account_unavailable": "Profilo non disponibile",
|
||||||
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
||||||
"explore.search_results": "Resultatos de recerca",
|
"explore.search_results": "Resultatos de recerca",
|
||||||
"explore.trending_links": "Novas",
|
"explore.trending_links": "Novas",
|
||||||
|
"filter_modal.select_filter.prompt_new": "Nove categoria: {name}",
|
||||||
"firehose.all": "Toto",
|
"firehose.all": "Toto",
|
||||||
"firehose.local": "Iste servitor",
|
"firehose.local": "Iste servitor",
|
||||||
"firehose.remote": "Altere servitores",
|
"firehose.remote": "Altere servitores",
|
||||||
|
@ -62,23 +74,50 @@
|
||||||
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
|
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
|
||||||
"lightbox.close": "Clauder",
|
"lightbox.close": "Clauder",
|
||||||
"lightbox.next": "Sequente",
|
"lightbox.next": "Sequente",
|
||||||
|
"lightbox.previous": "Precedente",
|
||||||
"link_preview.author": "Per {name}",
|
"link_preview.author": "Per {name}",
|
||||||
"lists.account.add": "Adder al lista",
|
"lists.account.add": "Adder al lista",
|
||||||
|
"lists.delete": "Deler lista",
|
||||||
|
"lists.edit": "Modificar lista",
|
||||||
|
"lists.new.create": "Adder lista",
|
||||||
|
"lists.subheading": "Tu listas",
|
||||||
"mute_modal.duration": "Duration",
|
"mute_modal.duration": "Duration",
|
||||||
"mute_modal.hide_notifications": "Celar notificationes de iste usator?",
|
"mute_modal.hide_notifications": "Celar notificationes de iste usator?",
|
||||||
"navigation_bar.about": "A proposito de",
|
"navigation_bar.about": "A proposito de",
|
||||||
"navigation_bar.advanced_interface": "Aperir in un interfacie web avantiate",
|
"navigation_bar.advanced_interface": "Aperir in un interfacie web avantiate",
|
||||||
"navigation_bar.blocks": "Usatores blocate",
|
"navigation_bar.blocks": "Usatores blocate",
|
||||||
|
"navigation_bar.discover": "Discoperir",
|
||||||
|
"navigation_bar.edit_profile": "Modificar profilo",
|
||||||
"navigation_bar.favourites": "Favoritos",
|
"navigation_bar.favourites": "Favoritos",
|
||||||
"navigation_bar.lists": "Listas",
|
"navigation_bar.lists": "Listas",
|
||||||
"navigation_bar.logout": "Clauder le session",
|
"navigation_bar.logout": "Clauder le session",
|
||||||
"navigation_bar.preferences": "Preferentias",
|
"navigation_bar.preferences": "Preferentias",
|
||||||
|
"navigation_bar.search": "Cercar",
|
||||||
"navigation_bar.security": "Securitate",
|
"navigation_bar.security": "Securitate",
|
||||||
"notifications.column_settings.alert": "Notificationes de scriptorio",
|
"notifications.column_settings.alert": "Notificationes de scriptorio",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias",
|
"notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias",
|
||||||
"notifications.column_settings.sound": "Reproducer sono",
|
"notifications.column_settings.sound": "Reproducer sono",
|
||||||
"notifications.filter.all": "Toto",
|
"notifications.filter.all": "Toto",
|
||||||
|
"notifications.filter.favourites": "Favoritos",
|
||||||
|
"notifications.grant_permission": "Conceder permission.",
|
||||||
|
"notifications.group": "{count} notificationes",
|
||||||
"onboarding.compose.template": "Salute #Mastodon!",
|
"onboarding.compose.template": "Salute #Mastodon!",
|
||||||
"onboarding.profile.save_and_continue": "Salvar e continuar",
|
"onboarding.profile.save_and_continue": "Salvar e continuar",
|
||||||
"onboarding.share.title": "Compartir tu profilo"
|
"onboarding.share.title": "Compartir tu profilo",
|
||||||
|
"onboarding.steps.share_profile.title": "Compartir tu profilo de Mastodon",
|
||||||
|
"relative_time.just_now": "ora",
|
||||||
|
"relative_time.today": "hodie",
|
||||||
|
"reply_indicator.cancel": "Cancellar",
|
||||||
|
"report.next": "Sequente",
|
||||||
|
"report.placeholder": "Commentos additional",
|
||||||
|
"report.reasons.dislike": "Non me place",
|
||||||
|
"search.quick_action.go_to_account": "Vader al profilo {x}",
|
||||||
|
"search_results.accounts": "Profilos",
|
||||||
|
"search_results.see_all": "Vider toto",
|
||||||
|
"status.delete": "Deler",
|
||||||
|
"status.share": "Compartir",
|
||||||
|
"status.translate": "Traducer",
|
||||||
|
"status.translated_from_with": "Traducite ab {lang} usante {provider}",
|
||||||
|
"tabs_bar.home": "Initio",
|
||||||
|
"tabs_bar.notifications": "Notificationes"
|
||||||
}
|
}
|
||||||
|
|
|
@ -501,6 +501,7 @@
|
||||||
"onboarding.steps.setup_profile.title": "Personaliza tu profil",
|
"onboarding.steps.setup_profile.title": "Personaliza tu profil",
|
||||||
"onboarding.steps.share_profile.body": "Informe a tus amigos komo toparte en Mastodon",
|
"onboarding.steps.share_profile.body": "Informe a tus amigos komo toparte en Mastodon",
|
||||||
"onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon",
|
"onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon",
|
||||||
|
"password_confirmation.mismatching": "Los dos kodes son desferentes",
|
||||||
"picture_in_picture.restore": "Restora",
|
"picture_in_picture.restore": "Restora",
|
||||||
"poll.closed": "Serrado",
|
"poll.closed": "Serrado",
|
||||||
"poll.refresh": "Arefreska",
|
"poll.refresh": "Arefreska",
|
||||||
|
|
|
@ -606,7 +606,7 @@
|
||||||
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
||||||
"search.search_or_paste": "Søk eller lim inn URL",
|
"search.search_or_paste": "Søk eller lim inn URL",
|
||||||
"search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg på {domain}.",
|
"search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg på {domain}.",
|
||||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig ved innlogging.",
|
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.",
|
||||||
"search_popout.language_code": "ISO-språkkode",
|
"search_popout.language_code": "ISO-språkkode",
|
||||||
"search_popout.options": "Søkjealternativ",
|
"search_popout.options": "Søkjealternativ",
|
||||||
"search_popout.quick_actions": "Hurtighandlinger",
|
"search_popout.quick_actions": "Hurtighandlinger",
|
||||||
|
|
|
@ -606,7 +606,7 @@
|
||||||
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
||||||
"search.search_or_paste": "Søk eller lim inn URL",
|
"search.search_or_paste": "Søk eller lim inn URL",
|
||||||
"search_popout.full_text_search_disabled_message": "Ikke tilgjengelig på {domain}.",
|
"search_popout.full_text_search_disabled_message": "Ikke tilgjengelig på {domain}.",
|
||||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig ved innlogging.",
|
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.",
|
||||||
"search_popout.language_code": "ISO språkkode",
|
"search_popout.language_code": "ISO språkkode",
|
||||||
"search_popout.options": "Alternativer for søk",
|
"search_popout.options": "Alternativer for søk",
|
||||||
"search_popout.quick_actions": "Hurtighandlinger",
|
"search_popout.quick_actions": "Hurtighandlinger",
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
"account.featured_tags.last_status_never": "Pa postime",
|
"account.featured_tags.last_status_never": "Pa postime",
|
||||||
"account.featured_tags.title": "Hashtagë të zgjedhur të {name}",
|
"account.featured_tags.title": "Hashtagë të zgjedhur të {name}",
|
||||||
"account.follow": "Ndiqeni",
|
"account.follow": "Ndiqeni",
|
||||||
|
"account.follow_back": "Ndiqe gjithashtu",
|
||||||
"account.followers": "Ndjekës",
|
"account.followers": "Ndjekës",
|
||||||
"account.followers.empty": "Këtë përdorues ende s’e ndjek kush.",
|
"account.followers.empty": "Këtë përdorues ende s’e ndjek kush.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}",
|
"account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}",
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
"account.mute_notifications_short": "Mos shfaq njoftime",
|
"account.mute_notifications_short": "Mos shfaq njoftime",
|
||||||
"account.mute_short": "Mos i shfaq",
|
"account.mute_short": "Mos i shfaq",
|
||||||
"account.muted": "Heshtuar",
|
"account.muted": "Heshtuar",
|
||||||
|
"account.mutual": "Reciproke",
|
||||||
"account.no_bio": "S’u dha përshkrim.",
|
"account.no_bio": "S’u dha përshkrim.",
|
||||||
"account.open_original_page": "Hap faqen origjinale",
|
"account.open_original_page": "Hap faqen origjinale",
|
||||||
"account.posts": "Mesazhe",
|
"account.posts": "Mesazhe",
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
"account.mute_notifications_short": "关闭通知",
|
"account.mute_notifications_short": "关闭通知",
|
||||||
"account.mute_short": "隐藏",
|
"account.mute_short": "隐藏",
|
||||||
"account.muted": "已隐藏",
|
"account.muted": "已隐藏",
|
||||||
"account.mutual": "互相关注",
|
"account.mutual": "互粉好友",
|
||||||
"account.no_bio": "未提供描述。",
|
"account.no_bio": "未提供描述。",
|
||||||
"account.open_original_page": "打开原始页面",
|
"account.open_original_page": "打开原始页面",
|
||||||
"account.posts": "嘟文",
|
"account.posts": "嘟文",
|
||||||
|
@ -446,7 +446,7 @@
|
||||||
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
|
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
|
||||||
"notifications.column_settings.filter_bar.category": "快速过滤栏",
|
"notifications.column_settings.filter_bar.category": "快速过滤栏",
|
||||||
"notifications.column_settings.filter_bar.show_bar": "显示过滤栏",
|
"notifications.column_settings.filter_bar.show_bar": "显示过滤栏",
|
||||||
"notifications.column_settings.follow": "新关注者:",
|
"notifications.column_settings.follow": "新粉丝:",
|
||||||
"notifications.column_settings.follow_request": "新关注请求:",
|
"notifications.column_settings.follow_request": "新关注请求:",
|
||||||
"notifications.column_settings.mention": "提及:",
|
"notifications.column_settings.mention": "提及:",
|
||||||
"notifications.column_settings.poll": "投票结果:",
|
"notifications.column_settings.poll": "投票结果:",
|
||||||
|
@ -700,7 +700,7 @@
|
||||||
"time_remaining.moments": "即将结束",
|
"time_remaining.moments": "即将结束",
|
||||||
"time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
|
"time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "不会显示来自其它服务器的{resource}",
|
"timeline_hint.remote_resource_not_displayed": "不会显示来自其它服务器的{resource}",
|
||||||
"timeline_hint.resources.followers": "关注者",
|
"timeline_hint.resources.followers": "粉丝",
|
||||||
"timeline_hint.resources.follows": "关注",
|
"timeline_hint.resources.follows": "关注",
|
||||||
"timeline_hint.resources.statuses": "更早的嘟文",
|
"timeline_hint.resources.statuses": "更早的嘟文",
|
||||||
"trends.counter_by_accounts": "过去 {days, plural, other {{days} 天}}有{count, plural, other { {counter} 人}}讨论",
|
"trends.counter_by_accounts": "过去 {days, plural, other {{days} 天}}有{count, plural, other { {counter} 人}}讨论",
|
||||||
|
|
|
@ -10,7 +10,7 @@ class ContentSecurityPolicy
|
||||||
end
|
end
|
||||||
|
|
||||||
def media_hosts
|
def media_hosts
|
||||||
[assets_host, cdn_host_value].concat(extra_data_hosts).compact
|
[assets_host, cdn_host_value, paperclip_root_url].concat(extra_data_hosts).compact
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -27,6 +27,15 @@ class ContentSecurityPolicy
|
||||||
s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host
|
s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def paperclip_root_url
|
||||||
|
root_url = ENV.fetch('PAPERCLIP_ROOT_URL', nil)
|
||||||
|
return if root_url.blank?
|
||||||
|
|
||||||
|
(Addressable::URI.parse(assets_host) + root_url).tap do |uri|
|
||||||
|
uri.path += '/' unless uri.path.blank? || uri.path.end_with?('/')
|
||||||
|
end.to_s
|
||||||
|
end
|
||||||
|
|
||||||
def url_from_base_host
|
def url_from_base_host
|
||||||
host_to_url(base_host)
|
host_to_url(base_host)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,11 +11,12 @@ module Attachmentable
|
||||||
# For some file extensions, there exist different content
|
# For some file extensions, there exist different content
|
||||||
# type variants, and browsers often send the wrong one,
|
# type variants, and browsers often send the wrong one,
|
||||||
# for example, sending an audio .ogg file as video/ogg,
|
# for example, sending an audio .ogg file as video/ogg,
|
||||||
# likewise, MimeMagic also misreports them as such. For
|
# likewise, kt-paperclip also misreports them as such. For
|
||||||
# those files, it is necessary to use the output of the
|
# those files, it is necessary to use the output of the
|
||||||
# `file` utility instead
|
# `file` utility instead
|
||||||
INCORRECT_CONTENT_TYPES = %w(
|
INCORRECT_CONTENT_TYPES = %w(
|
||||||
audio/vorbis
|
audio/vorbis
|
||||||
|
audio/opus
|
||||||
video/ogg
|
video/ogg
|
||||||
video/webm
|
video/webm
|
||||||
).freeze
|
).freeze
|
||||||
|
|
|
@ -17,23 +17,8 @@
|
||||||
class CustomFilter < ApplicationRecord
|
class CustomFilter < ApplicationRecord
|
||||||
self.ignored_columns += %w(whole_word irreversible)
|
self.ignored_columns += %w(whole_word irreversible)
|
||||||
|
|
||||||
# NOTE: We previously used `alias_attribute` but this does not play nicely
|
alias_attribute :title, :phrase
|
||||||
# with cache
|
alias_attribute :filter_action, :action
|
||||||
def title
|
|
||||||
phrase
|
|
||||||
end
|
|
||||||
|
|
||||||
def title=(value)
|
|
||||||
self.phrase = value
|
|
||||||
end
|
|
||||||
|
|
||||||
def filter_action
|
|
||||||
action
|
|
||||||
end
|
|
||||||
|
|
||||||
def filter_action=(value)
|
|
||||||
self.action = value
|
|
||||||
end
|
|
||||||
|
|
||||||
VALID_CONTEXTS = %w(
|
VALID_CONTEXTS = %w(
|
||||||
home
|
home
|
||||||
|
@ -143,6 +128,10 @@ class CustomFilter < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def context_must_be_valid
|
def context_must_be_valid
|
||||||
errors.add(:context, I18n.t('filters.errors.invalid_context')) if context.empty? || context.any? { |c| !VALID_CONTEXTS.include?(c) }
|
errors.add(:context, I18n.t('filters.errors.invalid_context')) if invalid_context_value?
|
||||||
|
end
|
||||||
|
|
||||||
|
def invalid_context_value?
|
||||||
|
context.blank? || context.difference(VALID_CONTEXTS).any?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,15 +17,7 @@ class CustomFilterKeyword < ApplicationRecord
|
||||||
|
|
||||||
validates :keyword, presence: true
|
validates :keyword, presence: true
|
||||||
|
|
||||||
# NOTE: We previously used `alias_attribute` but this does not play nicely
|
alias_attribute :phrase, :keyword
|
||||||
# with cache
|
|
||||||
def phrase
|
|
||||||
keyword
|
|
||||||
end
|
|
||||||
|
|
||||||
def phrase=(value)
|
|
||||||
self.keyword = value
|
|
||||||
end
|
|
||||||
|
|
||||||
before_save :prepare_cache_invalidation!
|
before_save :prepare_cache_invalidation!
|
||||||
before_destroy :prepare_cache_invalidation!
|
before_destroy :prepare_cache_invalidation!
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
# parent_id :bigint(8)
|
# parent_id :bigint(8)
|
||||||
|
# allow_with_approval :boolean default(FALSE), not null
|
||||||
#
|
#
|
||||||
|
|
||||||
class EmailDomainBlock < ApplicationRecord
|
class EmailDomainBlock < ApplicationRecord
|
||||||
|
@ -42,8 +43,8 @@ class EmailDomainBlock < ApplicationRecord
|
||||||
@attempt_ip = attempt_ip
|
@attempt_ip = attempt_ip
|
||||||
end
|
end
|
||||||
|
|
||||||
def match?
|
def match?(...)
|
||||||
blocking? || invalid_uri?
|
blocking?(...) || invalid_uri?
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -52,8 +53,8 @@ class EmailDomainBlock < ApplicationRecord
|
||||||
@uris.any?(&:nil?)
|
@uris.any?(&:nil?)
|
||||||
end
|
end
|
||||||
|
|
||||||
def blocking?
|
def blocking?(allow_with_approval: false)
|
||||||
blocks = EmailDomainBlock.where(domain: domains_with_variants).order(Arel.sql('char_length(domain) desc'))
|
blocks = EmailDomainBlock.where(domain: domains_with_variants, allow_with_approval: allow_with_approval).order(Arel.sql('char_length(domain) desc'))
|
||||||
blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present?
|
blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present?
|
||||||
blocks.any?
|
blocks.any?
|
||||||
end
|
end
|
||||||
|
@ -86,4 +87,8 @@ class EmailDomainBlock < ApplicationRecord
|
||||||
def self.block?(domain_or_domains, attempt_ip: nil)
|
def self.block?(domain_or_domains, attempt_ip: nil)
|
||||||
Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?
|
Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.requires_approval?(domain_or_domains, attempt_ip: nil)
|
||||||
|
Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?(allow_with_approval: true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -418,7 +418,7 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
def set_approved
|
def set_approved
|
||||||
self.approved = begin
|
self.approved = begin
|
||||||
if sign_up_from_ip_requires_approval?
|
if sign_up_from_ip_requires_approval? || sign_up_email_requires_approval?
|
||||||
false
|
false
|
||||||
else
|
else
|
||||||
open_registrations? || valid_invitation? || external?
|
open_registrations? || valid_invitation? || external?
|
||||||
|
@ -430,6 +430,12 @@ class User < ApplicationRecord
|
||||||
!sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists?
|
!sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sign_up_email_requires_approval?
|
||||||
|
return false unless email.present? || unconfirmed_email.present?
|
||||||
|
|
||||||
|
EmailDomainBlock.requires_approval?(email.presence || unconfirmed_email, attempt_ip: sign_up_ip)
|
||||||
|
end
|
||||||
|
|
||||||
def open_registrations?
|
def open_registrations?
|
||||||
Setting.registrations_mode == 'open'
|
Setting.registrations_mode == 'open'
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class REST::Admin::EmailDomainBlockSerializer < ActiveModel::Serializer
|
class REST::Admin::EmailDomainBlockSerializer < ActiveModel::Serializer
|
||||||
attributes :id, :domain, :created_at, :history
|
attributes :id, :domain, :created_at, :history, :allow_with_approval
|
||||||
|
|
||||||
def id
|
def id
|
||||||
object.id.to_s
|
object.id.to_s
|
||||||
|
|
|
@ -47,6 +47,7 @@ class EmailMxValidator < ActiveModel::Validator
|
||||||
dns.timeouts = 5
|
dns.timeouts = 5
|
||||||
|
|
||||||
records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }
|
records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }
|
||||||
|
next if records == [''] # This domain explicitly rejects emails
|
||||||
|
|
||||||
([domain] + records).uniq.each do |hostname|
|
([domain] + records).uniq.each do |hostname|
|
||||||
ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s })
|
ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s })
|
||||||
|
|
|
@ -12,3 +12,7 @@
|
||||||
·
|
·
|
||||||
|
|
||||||
= t('admin.email_domain_blocks.attempts_over_week', count: email_domain_block.history.reduce(0) { |sum, day| sum + day.accounts })
|
= t('admin.email_domain_blocks.attempts_over_week', count: email_domain_block.history.reduce(0) { |sum, day| sum + day.accounts })
|
||||||
|
|
||||||
|
- if email_domain_block.allow_with_approval?
|
||||||
|
·
|
||||||
|
= t('admin.email_domain_blocks.allow_registrations_with_approval')
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :domain, wrapper: :with_block_label, label: t('admin.email_domain_blocks.domain'), input_html: { readonly: defined?(@resolved_records) }
|
= f.input :domain, wrapper: :with_block_label, label: t('admin.email_domain_blocks.domain'), input_html: { readonly: defined?(@resolved_records) }
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :allow_with_approval, wrapper: :with_label, hint: false, label: I18n.t('admin.email_domain_blocks.allow_registrations_with_approval')
|
||||||
|
|
||||||
- if defined?(@resolved_records)
|
- if defined?(@resolved_records)
|
||||||
%p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html')
|
%p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html')
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,8 @@ module Mastodon
|
||||||
# Initialize configuration defaults for originally generated Rails version.
|
# Initialize configuration defaults for originally generated Rails version.
|
||||||
config.load_defaults 7.0
|
config.load_defaults 7.0
|
||||||
|
|
||||||
|
config.active_record.marshalling_format_version = 7.1
|
||||||
|
|
||||||
# Please, add to the `ignore` list any other `lib` subdirectories that do
|
# Please, add to the `ignore` list any other `lib` subdirectories that do
|
||||||
# not contain `.rb` files, or that should not be reloaded or eager loaded.
|
# not contain `.rb` files, or that should not be reloaded or eager loaded.
|
||||||
# Common ones are `templates`, `generators`, or `middleware`, for example.
|
# Common ones are `templates`, `generators`, or `middleware`, for example.
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# TODO
|
|
||||||
# The Rails 7.0 framework default here is to set this true. However, we have a
|
|
||||||
# location in devise that redirects where we don't have an easy ability to
|
|
||||||
# override a method or set a config option, but where the redirect does not
|
|
||||||
# provide this option.
|
|
||||||
# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28
|
|
||||||
# Once a solution is found, this line can be removed.
|
|
||||||
Rails.application.config.action_controller.raise_on_open_redirects = false
|
|
|
@ -158,15 +158,6 @@ Rails.application.config.add_autoload_paths_to_load_path = false
|
||||||
# rather than to rely on a global default.
|
# rather than to rely on a global default.
|
||||||
# Rails.application.config.active_record.default_column_serializer = nil
|
# Rails.application.config.active_record.default_column_serializer = nil
|
||||||
|
|
||||||
# Enable a performance optimization that serializes Active Record models
|
|
||||||
# in a faster and more compact way.
|
|
||||||
#
|
|
||||||
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
|
|
||||||
# not yet been upgraded must be able to read caches from upgraded servers,
|
|
||||||
# leave this optimization off on the first deploy, then enable it on a
|
|
||||||
# subsequent deploy.
|
|
||||||
# Rails.application.config.active_record.marshalling_format_version = 7.1
|
|
||||||
|
|
||||||
# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
|
# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
|
||||||
# This matches the behaviour of all other callbacks.
|
# This matches the behaviour of all other callbacks.
|
||||||
# In previous versions of Rails, they ran in the inverse order.
|
# In previous versions of Rails, they ran in the inverse order.
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# Starting with Rails 7.0, the framework default here is to set this true.
|
||||||
|
# However, we have a location in devise that redirects where we don't have an
|
||||||
|
# easy ability to override the method or set a config option, and where the
|
||||||
|
# redirect does not supply this option itself.
|
||||||
|
# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28
|
||||||
|
# Once a solution is found, this line can be removed.
|
||||||
|
Rails.application.config.action_controller.raise_on_open_redirects = false
|
|
@ -3,6 +3,7 @@ ia:
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
user:
|
user:
|
||||||
|
email: Adresse de e-mail
|
||||||
password: Contrasigno
|
password: Contrasigno
|
||||||
user/account:
|
user/account:
|
||||||
username: Nomine de usator
|
username: Nomine de usator
|
||||||
|
|
|
@ -19,6 +19,7 @@ ie:
|
||||||
account:
|
account:
|
||||||
attributes:
|
attributes:
|
||||||
username:
|
username:
|
||||||
|
invalid: deve contener solmen lítteres, númeres e sublineas
|
||||||
reserved: es reservat
|
reserved: es reservat
|
||||||
admin/webhook:
|
admin/webhook:
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -39,6 +40,7 @@ ie:
|
||||||
user:
|
user:
|
||||||
attributes:
|
attributes:
|
||||||
email:
|
email:
|
||||||
|
blocked: usa un ne-permisset provisor de e-posta
|
||||||
unreachable: sembla ne exister
|
unreachable: sembla ne exister
|
||||||
role_id:
|
role_id:
|
||||||
elevated: ne posse esser plu alt quam tui actual rol
|
elevated: ne posse esser plu alt quam tui actual rol
|
||||||
|
|
|
@ -439,6 +439,7 @@ be:
|
||||||
view: Праглядзець новы блок дамену
|
view: Праглядзець новы блок дамену
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Дадаць
|
add_new: Дадаць
|
||||||
|
allow_registrations_with_approval: Дазволіць рэгістрацыю з дазволам
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} спробы рэгіістрацыі за апошні тыдзень"
|
few: "%{count} спробы рэгіістрацыі за апошні тыдзень"
|
||||||
many: "%{count} спроб рэгіістрацыі за апошні тыдзень"
|
many: "%{count} спроб рэгіістрацыі за апошні тыдзень"
|
||||||
|
|
|
@ -425,6 +425,7 @@ ca:
|
||||||
view: Veure el bloqueig del domini
|
view: Veure el bloqueig del domini
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Afegir nou
|
add_new: Afegir nou
|
||||||
|
allow_registrations_with_approval: Registre permès amb validació
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} intent en la darrera setmana"
|
one: "%{count} intent en la darrera setmana"
|
||||||
other: "%{count} intents de registre en la darrera setmana"
|
other: "%{count} intents de registre en la darrera setmana"
|
||||||
|
|
|
@ -453,6 +453,7 @@ cy:
|
||||||
view: Gweld bloc parth
|
view: Gweld bloc parth
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Ychwanegu
|
add_new: Ychwanegu
|
||||||
|
allow_registrations_with_approval: Caniatáu cofrestriadau wedi'u cymeradwyo
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
few: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
||||||
many: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
many: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
||||||
|
|
|
@ -425,6 +425,7 @@ da:
|
||||||
view: Vis domæneblokering
|
view: Vis domæneblokering
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Tilføj ny
|
add_new: Tilføj ny
|
||||||
|
allow_registrations_with_approval: Tillad registreringer med godkendelse
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} tilmeldingsforsøg over den seneste uge"
|
one: "%{count} tilmeldingsforsøg over den seneste uge"
|
||||||
other: "%{count} tilmeldingsforsøg over den seneste uge"
|
other: "%{count} tilmeldingsforsøg over den seneste uge"
|
||||||
|
|
|
@ -34,7 +34,7 @@ el:
|
||||||
explanation: Το συνθηματικό του λογαριασμού σου άλλαξε.
|
explanation: Το συνθηματικό του λογαριασμού σου άλλαξε.
|
||||||
extra: Αν δεν άλλαξες εσύ το συνθηματικό σου, ίσως κάποιος να έχει αποκτήσει πρόσβαση στο λογαριασμό σου. Παρακαλούμε άλλαξε το συνθηματικό σου άμεσα ή επικοινώνησε με τον διαχειριστή του κόμβου σου αν έχεις κλειδωθεί απ' έξω.
|
extra: Αν δεν άλλαξες εσύ το συνθηματικό σου, ίσως κάποιος να έχει αποκτήσει πρόσβαση στο λογαριασμό σου. Παρακαλούμε άλλαξε το συνθηματικό σου άμεσα ή επικοινώνησε με τον διαχειριστή του κόμβου σου αν έχεις κλειδωθεί απ' έξω.
|
||||||
subject: 'Mastodon: Αλλαγή συνθηματικού'
|
subject: 'Mastodon: Αλλαγή συνθηματικού'
|
||||||
title: Αλλαγή συνθηματικού
|
title: Ο κωδικός άλλαξε
|
||||||
reconfirmation_instructions:
|
reconfirmation_instructions:
|
||||||
explanation: Επιβεβαίωσε τη νέα διεύθυνση για να αλλάξεις το email σου.
|
explanation: Επιβεβαίωσε τη νέα διεύθυνση για να αλλάξεις το email σου.
|
||||||
extra: Αν δεν ζήτησες εσύ αυτή την αλλαγή, παρακαλούμε αγνόησε αυτό το email. Η διεύθυνση email για τον λογαριασμό σου στο Mastodon δεν θα αλλάξει μέχρι να επισκεφτείς τον παραπάνω σύνδεσμο.
|
extra: Αν δεν ζήτησες εσύ αυτή την αλλαγή, παρακαλούμε αγνόησε αυτό το email. Η διεύθυνση email για τον λογαριασμό σου στο Mastodon δεν θα αλλάξει μέχρι να επισκεφτείς τον παραπάνω σύνδεσμο.
|
||||||
|
|
|
@ -1 +1,25 @@
|
||||||
|
---
|
||||||
ia:
|
ia:
|
||||||
|
devise:
|
||||||
|
mailer:
|
||||||
|
confirmation_instructions:
|
||||||
|
action: Verificar adresse de e-mail
|
||||||
|
action_with_app: Confirmar e retornar a %{app}
|
||||||
|
title: Verificar adresse de e-mail
|
||||||
|
email_changed:
|
||||||
|
title: Nove adresse de e-mail
|
||||||
|
reconfirmation_instructions:
|
||||||
|
title: Verificar adresse de e-mail
|
||||||
|
reset_password_instructions:
|
||||||
|
action: Cambiar contrasigno
|
||||||
|
title: Reinitialisar contrasigno
|
||||||
|
two_factor_disabled:
|
||||||
|
title: 2FA disactivate
|
||||||
|
registrations:
|
||||||
|
updated: Tu conto ha essite actualisate con successo.
|
||||||
|
unlocks:
|
||||||
|
unlocked: Tu conto ha essite disblocate con successo. Initia session a continuar.
|
||||||
|
errors:
|
||||||
|
messages:
|
||||||
|
already_confirmed: jam esseva confirmate, tenta initiar session
|
||||||
|
not_found: non trovate
|
||||||
|
|
|
@ -46,17 +46,26 @@ ie:
|
||||||
title: 2FA desvalidat
|
title: 2FA desvalidat
|
||||||
two_factor_enabled:
|
two_factor_enabled:
|
||||||
title: 2FA permisset
|
title: 2FA permisset
|
||||||
|
two_factor_recovery_codes_changed:
|
||||||
|
explanation: Li anteyan codes de recuperation ha esset ínvalidat, e novis generat.
|
||||||
|
subject: 'Mastodon: 2-factor codes de recuperation regenerat'
|
||||||
|
title: 2FA codes de recuperation changeat
|
||||||
unlock_instructions:
|
unlock_instructions:
|
||||||
subject: 'Mastodon: Desserral instructiones'
|
subject: 'Mastodon: Desserral instructiones'
|
||||||
webauthn_credential:
|
webauthn_credential:
|
||||||
added:
|
added:
|
||||||
subject: 'Mastodon: Nov clave de securitá'
|
subject: 'Mastodon: Nov clave de securitá'
|
||||||
title: Un nov clave de securitá ha esset adjuntet
|
title: Un nov clave de securitá ha esset adjuntet
|
||||||
|
deleted:
|
||||||
|
subject: 'Mastodon: Clave de securitá deletet'
|
||||||
webauthn_disabled:
|
webauthn_disabled:
|
||||||
subject: 'Mastodon: Autentication con claves de securitá desactivisat'
|
subject: 'Mastodon: Autentication con claves de securitá desactivisat'
|
||||||
title: Claves de securitá desactivisat
|
title: Claves de securitá desactivisat
|
||||||
|
webauthn_enabled:
|
||||||
|
title: Claves de securitá activisat
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: Ne posset autenticar te de %{kind} pro "%{reason}".
|
failure: Ne posset autenticar te de %{kind} pro "%{reason}".
|
||||||
|
success: Successosimen autenticat de conto %{kind}.
|
||||||
passwords:
|
passwords:
|
||||||
no_token: Tu ne posse accessar ti-ci págine sin venir de un email pri reiniciar li passa-parol. Si tu ha venit de un email pri reiniciar li passa-parol, ples far cert que tu usat li complet URL providet.
|
no_token: Tu ne posse accessar ti-ci págine sin venir de un email pri reiniciar li passa-parol. Si tu ha venit de un email pri reiniciar li passa-parol, ples far cert que tu usat li complet URL providet.
|
||||||
send_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email.
|
send_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email.
|
||||||
|
@ -77,3 +86,6 @@ ie:
|
||||||
expired: ha expirat, ples demandar un nov
|
expired: ha expirat, ples demandar un nov
|
||||||
not_found: ne trovat
|
not_found: ne trovat
|
||||||
not_locked: ne esset serrat
|
not_locked: ne esset serrat
|
||||||
|
not_saved:
|
||||||
|
one: '1 error prohibit ti %{resource} de esser conservat:'
|
||||||
|
other: "%{count} errores prohibit ti %{resource} de esser conservat:"
|
||||||
|
|
|
@ -127,6 +127,7 @@ el:
|
||||||
bookmarks: Σελιδοδείκτες
|
bookmarks: Σελιδοδείκτες
|
||||||
conversations: Συνομιλίες
|
conversations: Συνομιλίες
|
||||||
crypto: Κρυπτογράφηση από άκρο σε άκρο
|
crypto: Κρυπτογράφηση από άκρο σε άκρο
|
||||||
|
favourites: Αγαπημένα
|
||||||
filters: Φίλτρα
|
filters: Φίλτρα
|
||||||
follow: Ακολουθείτε, σε Σίγαση και Αποκλεισμοί
|
follow: Ακολουθείτε, σε Σίγαση και Αποκλεισμοί
|
||||||
follows: Ακολουθείτε
|
follows: Ακολουθείτε
|
||||||
|
@ -169,9 +170,10 @@ el:
|
||||||
read:accounts: να βλέπει τα στοιχεία λογαριασμών
|
read:accounts: να βλέπει τα στοιχεία λογαριασμών
|
||||||
read:blocks: να βλέπει τους αποκλεισμένους σου
|
read:blocks: να βλέπει τους αποκλεισμένους σου
|
||||||
read:bookmarks: εμφάνιση των σελιδοδεικτών σας
|
read:bookmarks: εμφάνιση των σελιδοδεικτών σας
|
||||||
|
read:favourites: δείτε τα αγαπημένα σας
|
||||||
read:filters: να βλέπει τα φίλτρα σου
|
read:filters: να βλέπει τα φίλτρα σου
|
||||||
read:follows: να βλέπει ποιους ακολουθείς
|
read:follows: δές ποιους ακολουθείς
|
||||||
read:lists: να βλέπει τις λίστες σου
|
read:lists: δές τις λίστες σου
|
||||||
read:mutes: να βλέπει ποιους αποσιωπείς
|
read:mutes: να βλέπει ποιους αποσιωπείς
|
||||||
read:notifications: να βλέπει τις ειδοποιήσεις σου
|
read:notifications: να βλέπει τις ειδοποιήσεις σου
|
||||||
read:reports: να βλέπει τις καταγγελίες σου
|
read:reports: να βλέπει τις καταγγελίες σου
|
||||||
|
@ -183,8 +185,8 @@ el:
|
||||||
write:bookmarks: προσθήκη σελιδοδεικτών
|
write:bookmarks: προσθήκη σελιδοδεικτών
|
||||||
write:conversations: σίγαση και διαγραφή συνομιλιών
|
write:conversations: σίγαση και διαγραφή συνομιλιών
|
||||||
write:filters: να δημιουργεί φίλτρα
|
write:filters: να δημιουργεί φίλτρα
|
||||||
write:follows: να ακολουθεί ανθρώπους
|
write:follows: ακολουθήστε ανθρώπους
|
||||||
write:lists: να δημιουργεί λίστες
|
write:lists: δημιουργία λιστών
|
||||||
write:media: να ανεβάζει πολυμέσα
|
write:media: να ανεβάζει πολυμέσα
|
||||||
write:mutes: να αποσιωπεί ανθρώπους και συζητήσεις
|
write:mutes: να αποσιωπεί ανθρώπους και συζητήσεις
|
||||||
write:notifications: να καθαρίζει τις ειδοποιήσεις σου
|
write:notifications: να καθαρίζει τις ειδοποιήσεις σου
|
||||||
|
|
|
@ -1 +1,55 @@
|
||||||
|
---
|
||||||
ia:
|
ia:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
doorkeeper/application:
|
||||||
|
name: Nomine de application
|
||||||
|
website: Sito web de application
|
||||||
|
doorkeeper:
|
||||||
|
applications:
|
||||||
|
buttons:
|
||||||
|
cancel: Cancellar
|
||||||
|
edit: Modificar
|
||||||
|
edit:
|
||||||
|
title: Modificar application
|
||||||
|
index:
|
||||||
|
application: Application
|
||||||
|
delete: Deler
|
||||||
|
name: Nomine
|
||||||
|
new: Nove application
|
||||||
|
show: Monstrar
|
||||||
|
title: Tu applicationes
|
||||||
|
new:
|
||||||
|
title: Nove application
|
||||||
|
show:
|
||||||
|
actions: Actiones
|
||||||
|
title: 'Application: %{name}'
|
||||||
|
authorizations:
|
||||||
|
error:
|
||||||
|
title: Ocurreva un error
|
||||||
|
authorized_applications:
|
||||||
|
confirmations:
|
||||||
|
revoke: Es tu secur?
|
||||||
|
index:
|
||||||
|
scopes: Permissiones
|
||||||
|
title: Tu applicationes autorisate
|
||||||
|
flash:
|
||||||
|
applications:
|
||||||
|
create:
|
||||||
|
notice: Application create.
|
||||||
|
destroy:
|
||||||
|
notice: Application delite.
|
||||||
|
update:
|
||||||
|
notice: Application actualisate.
|
||||||
|
grouped_scopes:
|
||||||
|
title:
|
||||||
|
accounts: Contos
|
||||||
|
admin/accounts: Gestion de contos
|
||||||
|
favourites: Favoritos
|
||||||
|
lists: Listas
|
||||||
|
notifications: Notificationes
|
||||||
|
push: Notificationes push
|
||||||
|
layouts:
|
||||||
|
admin:
|
||||||
|
nav:
|
||||||
|
applications: Applicationes
|
||||||
|
|
|
@ -5,6 +5,7 @@ ie:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
name: Nómine de aplication
|
name: Nómine de aplication
|
||||||
redirect_uri: URI de redirection
|
redirect_uri: URI de redirection
|
||||||
|
scopes: Scopes
|
||||||
website: Situ web de aplication
|
website: Situ web de aplication
|
||||||
errors:
|
errors:
|
||||||
models:
|
models:
|
||||||
|
@ -29,12 +30,15 @@ ie:
|
||||||
title: Modificar aplication
|
title: Modificar aplication
|
||||||
help:
|
help:
|
||||||
redirect_uri: Usar un linea per URI
|
redirect_uri: Usar un linea per URI
|
||||||
|
scopes: Separar scopes con intersticies. Lassar blanc por usar li scopes predefinit.
|
||||||
index:
|
index:
|
||||||
application: Aplication
|
application: Aplication
|
||||||
|
callback_url: URL de retrovocada
|
||||||
delete: Deleter
|
delete: Deleter
|
||||||
empty: Tu have null aplicationes.
|
empty: Tu have null aplicationes.
|
||||||
name: Nómine
|
name: Nómine
|
||||||
new: Nov aplication
|
new: Nov aplication
|
||||||
|
scopes: Scopes
|
||||||
show: Monstrar
|
show: Monstrar
|
||||||
title: Tui aplicationes
|
title: Tui aplicationes
|
||||||
new:
|
new:
|
||||||
|
@ -42,6 +46,8 @@ ie:
|
||||||
show:
|
show:
|
||||||
actions: Actiones
|
actions: Actiones
|
||||||
application_id: Clave de client
|
application_id: Clave de client
|
||||||
|
callback_urls: URLs de retrovocada
|
||||||
|
scopes: Scopes
|
||||||
secret: Secrete de client
|
secret: Secrete de client
|
||||||
title: 'Aplication: %{name}'
|
title: 'Aplication: %{name}'
|
||||||
authorizations:
|
authorizations:
|
||||||
|
@ -51,6 +57,7 @@ ie:
|
||||||
error:
|
error:
|
||||||
title: Alquo ha errat
|
title: Alquo ha errat
|
||||||
new:
|
new:
|
||||||
|
review_permissions: Inspecter permissiones
|
||||||
title: Autorisation besonat
|
title: Autorisation besonat
|
||||||
authorized_applications:
|
authorized_applications:
|
||||||
buttons:
|
buttons:
|
||||||
|
@ -117,9 +124,13 @@ ie:
|
||||||
admin:
|
admin:
|
||||||
nav:
|
nav:
|
||||||
applications: Aplicationes
|
applications: Aplicationes
|
||||||
|
oauth2_provider: Provisor OAuth2
|
||||||
|
application:
|
||||||
|
title: Autorisation OAuth besonat
|
||||||
scopes:
|
scopes:
|
||||||
admin:read: leer li tot data sur li servitor
|
admin:read: leer li tot data sur li servitor
|
||||||
admin:read:accounts: leer sensitiv information de omni contos
|
admin:read:accounts: leer sensitiv information de omni contos
|
||||||
|
admin:read:canonical_email_blocks: leer sensitiv information pri omni canonic bloccas de e-posta
|
||||||
admin:read:domain_allows: leer sensitiv information pri omni permisses de dominia
|
admin:read:domain_allows: leer sensitiv information pri omni permisses de dominia
|
||||||
admin:read:domain_blocks: leer sensitiv information pri omni bloccas de dominia
|
admin:read:domain_blocks: leer sensitiv information pri omni bloccas de dominia
|
||||||
admin:read:email_domain_blocks: leer sensitiv information pri omni bloccas de dominia basat sur e-posta
|
admin:read:email_domain_blocks: leer sensitiv information pri omni bloccas de dominia basat sur e-posta
|
||||||
|
@ -134,6 +145,7 @@ ie:
|
||||||
admin:write:ip_blocks: fa moderatori actiones sur bloccas de IP
|
admin:write:ip_blocks: fa moderatori actiones sur bloccas de IP
|
||||||
admin:write:reports: far moderatori actiones sur raportes
|
admin:write:reports: far moderatori actiones sur raportes
|
||||||
follow: modifica li relationes del conto
|
follow: modifica li relationes del conto
|
||||||
|
push: reciver tui pussa-notificationes
|
||||||
read: lee omni datas de tui conto
|
read: lee omni datas de tui conto
|
||||||
read:accounts: vide li informationes pri li conto
|
read:accounts: vide li informationes pri li conto
|
||||||
read:blocks: vider tui bloccas
|
read:blocks: vider tui bloccas
|
||||||
|
|
|
@ -962,6 +962,7 @@ el:
|
||||||
notification_preferences: Αλλαγή προτιμήσεων email
|
notification_preferences: Αλλαγή προτιμήσεων email
|
||||||
salutation: "%{name},"
|
salutation: "%{name},"
|
||||||
settings: 'Άλλαξε τις προτιμήσεις email: %{link}'
|
settings: 'Άλλαξε τις προτιμήσεις email: %{link}'
|
||||||
|
unsubscribe: Κατάργηση εγγραφής
|
||||||
view: 'Προβολή:'
|
view: 'Προβολή:'
|
||||||
view_profile: Προβολή προφίλ
|
view_profile: Προβολή προφίλ
|
||||||
view_status: Προβολή ανάρτησης
|
view_status: Προβολή ανάρτησης
|
||||||
|
@ -975,6 +976,8 @@ el:
|
||||||
your_token: Το διακριτικό πρόσβασής σου
|
your_token: Το διακριτικό πρόσβασής σου
|
||||||
auth:
|
auth:
|
||||||
apply_for_account: Ζήτα έναν λογαριασμό
|
apply_for_account: Ζήτα έναν λογαριασμό
|
||||||
|
captcha_confirmation:
|
||||||
|
title: Ελεγχος ασφαλείας
|
||||||
confirmations:
|
confirmations:
|
||||||
wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού.
|
wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού.
|
||||||
delete_account: Διαγραφή λογαριασμού
|
delete_account: Διαγραφή λογαριασμού
|
||||||
|
@ -1238,6 +1241,8 @@ el:
|
||||||
status: Κατάσταση
|
status: Κατάσταση
|
||||||
success: Τα δεδομένα σου μεταφορτώθηκαν επιτυχώς και θα επεξεργαστούν σύντομα
|
success: Τα δεδομένα σου μεταφορτώθηκαν επιτυχώς και θα επεξεργαστούν σύντομα
|
||||||
time_started: Ξεκίνησε στις
|
time_started: Ξεκίνησε στις
|
||||||
|
titles:
|
||||||
|
following: Εισαγωγή λογαριασμών που ακολουθείτε
|
||||||
type: Τύπος εισαγωγής
|
type: Τύπος εισαγωγής
|
||||||
type_groups:
|
type_groups:
|
||||||
destructive: Μπλοκ & σίγαση
|
destructive: Μπλοκ & σίγαση
|
||||||
|
@ -1245,7 +1250,7 @@ el:
|
||||||
blocking: Λίστα αποκλεισμού
|
blocking: Λίστα αποκλεισμού
|
||||||
bookmarks: Σελιδοδείκτες
|
bookmarks: Σελιδοδείκτες
|
||||||
domain_blocking: Λίστα αποκλεισμένων τομέων
|
domain_blocking: Λίστα αποκλεισμένων τομέων
|
||||||
following: Λίστα ακολούθων
|
following: Λίστα ατόμων που ακολουθείτε
|
||||||
muting: Λίστα αποσιωπήσεων
|
muting: Λίστα αποσιωπήσεων
|
||||||
upload: Μεταμόρφωση
|
upload: Μεταμόρφωση
|
||||||
invites:
|
invites:
|
||||||
|
@ -1420,7 +1425,7 @@ el:
|
||||||
follow_failure: Δεν ήταν δυνατή η παρακολούθηση ορισμένων από τους επιλεγμένους λογαριασμούς.
|
follow_failure: Δεν ήταν δυνατή η παρακολούθηση ορισμένων από τους επιλεγμένους λογαριασμούς.
|
||||||
follow_selected_followers: Ακολούθησε τους επιλεγμένους ακόλουθους
|
follow_selected_followers: Ακολούθησε τους επιλεγμένους ακόλουθους
|
||||||
followers: Ακόλουθοι
|
followers: Ακόλουθοι
|
||||||
following: Ακολουθείς
|
following: Ακολουθείτε
|
||||||
invited: Προσκεκλημένοι
|
invited: Προσκεκλημένοι
|
||||||
last_active: Τελευταία ενεργός
|
last_active: Τελευταία ενεργός
|
||||||
most_recent: Πιο πρόσφατος
|
most_recent: Πιο πρόσφατος
|
||||||
|
|
|
@ -425,6 +425,7 @@ en:
|
||||||
view: View domain block
|
view: View domain block
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Add new
|
add_new: Add new
|
||||||
|
allow_registrations_with_approval: Allow registrations with approval
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} attempt over the last week"
|
one: "%{count} attempt over the last week"
|
||||||
other: "%{count} sign-up attempts over the last week"
|
other: "%{count} sign-up attempts over the last week"
|
||||||
|
|
|
@ -425,6 +425,7 @@ es-AR:
|
||||||
view: Ver bloqueo de dominio
|
view: Ver bloqueo de dominio
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Agregar nuevo
|
add_new: Agregar nuevo
|
||||||
|
allow_registrations_with_approval: Permitir crear cuentas con aprobación
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} intento durante la última semana"
|
one: "%{count} intento durante la última semana"
|
||||||
other: "%{count} intentos durante la última semana"
|
other: "%{count} intentos durante la última semana"
|
||||||
|
|
|
@ -425,6 +425,7 @@ es-MX:
|
||||||
view: Ver dominio bloqueado
|
view: Ver dominio bloqueado
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Añadir nuevo
|
add_new: Añadir nuevo
|
||||||
|
allow_registrations_with_approval: Permitir registros con aprobación
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} intentos durante la última semana"
|
one: "%{count} intentos durante la última semana"
|
||||||
other: "%{count} intentos de registro en la última semana"
|
other: "%{count} intentos de registro en la última semana"
|
||||||
|
|
|
@ -425,6 +425,7 @@ es:
|
||||||
view: Ver dominio bloqueado
|
view: Ver dominio bloqueado
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Añadir nuevo
|
add_new: Añadir nuevo
|
||||||
|
allow_registrations_with_approval: Permitir registros con aprobación
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} intento durante la última semana"
|
one: "%{count} intento durante la última semana"
|
||||||
other: "%{count} intentos de registro durante la última semana"
|
other: "%{count} intentos de registro durante la última semana"
|
||||||
|
|
|
@ -427,6 +427,7 @@ eu:
|
||||||
view: Ikusi domeinuaren blokeoa
|
view: Ikusi domeinuaren blokeoa
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Gehitu berria
|
add_new: Gehitu berria
|
||||||
|
allow_registrations_with_approval: Baimendu izen-emateak onarpen bidez
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: Izen-emateko saiakera %{count} azken astean
|
one: Izen-emateko saiakera %{count} azken astean
|
||||||
other: Izen-emateko %{count} saiakera azken astean
|
other: Izen-emateko %{count} saiakera azken astean
|
||||||
|
|
|
@ -425,6 +425,7 @@ fo:
|
||||||
view: Vís navnaøkisblokering
|
view: Vís navnaøkisblokering
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Stovna
|
add_new: Stovna
|
||||||
|
allow_registrations_with_approval: Loyv skrásetingum við góðkenning
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} roynd seinastu vikuna"
|
one: "%{count} roynd seinastu vikuna"
|
||||||
other: "%{count} tilmeldingarroyndir seinastu vikuna"
|
other: "%{count} tilmeldingarroyndir seinastu vikuna"
|
||||||
|
|
|
@ -425,6 +425,7 @@ fy:
|
||||||
view: Domeinblokkade besjen
|
view: Domeinblokkade besjen
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Nije tafoegje
|
add_new: Nije tafoegje
|
||||||
|
allow_registrations_with_approval: Ynskriuwingen mei tastimming tastean
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
one: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
||||||
other: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
other: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
||||||
|
|
|
@ -425,6 +425,7 @@ gl:
|
||||||
view: Ollar dominios bloqueados
|
view: Ollar dominios bloqueados
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Engadir novo
|
add_new: Engadir novo
|
||||||
|
allow_registrations_with_approval: Permitir crear contas con aprobación
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} intento na última semana"
|
one: "%{count} intento na última semana"
|
||||||
other: "%{count} intentos de conexión na última semana"
|
other: "%{count} intentos de conexión na última semana"
|
||||||
|
|
|
@ -439,6 +439,7 @@ he:
|
||||||
view: צפייה בחסימת דומיינים
|
view: צפייה בחסימת דומיינים
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: הוספת חדש
|
add_new: הוספת חדש
|
||||||
|
allow_registrations_with_approval: הרשאת הרשמה לאחר אישור
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
many: "%{count} נסיונות הרשמה במשך השבוע שעבר"
|
many: "%{count} נסיונות הרשמה במשך השבוע שעבר"
|
||||||
one: "%{count} נסיון במשך השבוע שעבר"
|
one: "%{count} נסיון במשך השבוע שעבר"
|
||||||
|
|
|
@ -425,6 +425,7 @@ hu:
|
||||||
view: Domain tiltásának megtekintése
|
view: Domain tiltásának megtekintése
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Új hozzáadása
|
add_new: Új hozzáadása
|
||||||
|
allow_registrations_with_approval: Regisztráció engedélyezése jóváhagyással
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} próbálkozás a múlt héten"
|
one: "%{count} próbálkozás a múlt héten"
|
||||||
other: "%{count} próbálkozás feliratkozásra a múlt héten"
|
other: "%{count} próbálkozás feliratkozásra a múlt héten"
|
||||||
|
|
|
@ -50,3 +50,26 @@ ia:
|
||||||
'15778476': 6 menses
|
'15778476': 6 menses
|
||||||
'2629746': 1 mense
|
'2629746': 1 mense
|
||||||
'86400': 1 die
|
'86400': 1 die
|
||||||
|
statuses_cleanup:
|
||||||
|
min_age:
|
||||||
|
'1209600': 2 septimanas
|
||||||
|
'15778476': 6 menses
|
||||||
|
'2629746': 1 mense
|
||||||
|
'31556952': 1 anno
|
||||||
|
'5259492': 2 menses
|
||||||
|
'604800': 1 septimana
|
||||||
|
'63113904': 2 annos
|
||||||
|
'7889238': 3 menses
|
||||||
|
themes:
|
||||||
|
default: Mastodon (Obscur)
|
||||||
|
mastodon-light: Mastodon (Clar)
|
||||||
|
two_factor_authentication:
|
||||||
|
add: Adder
|
||||||
|
disable: Disactivar 2FA
|
||||||
|
user_mailer:
|
||||||
|
appeal_approved:
|
||||||
|
action: Vader a tu conto
|
||||||
|
welcome:
|
||||||
|
subject: Benvenite in Mastodon
|
||||||
|
webauthn_credentials:
|
||||||
|
delete: Deler
|
||||||
|
|
|
@ -424,6 +424,7 @@ ie:
|
||||||
view: Vider dominia-blocca
|
view: Vider dominia-blocca
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Adjunter un nov
|
add_new: Adjunter un nov
|
||||||
|
allow_registrations_with_approval: Permisser registrationes con aprobation
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} registration-prova durant li ultim semane"
|
one: "%{count} registration-prova durant li ultim semane"
|
||||||
other: "%{count} registration-prova durant li ultim semane"
|
other: "%{count} registration-prova durant li ultim semane"
|
||||||
|
@ -439,6 +440,7 @@ ie:
|
||||||
title: Bloccar nov email-dominia
|
title: Bloccar nov email-dominia
|
||||||
no_email_domain_block_selected: Null email-dominia-bloccas esset changeat pro que null esset selectet
|
no_email_domain_block_selected: Null email-dominia-bloccas esset changeat pro que null esset selectet
|
||||||
not_permitted: Ne permisset
|
not_permitted: Ne permisset
|
||||||
|
resolved_dns_records_hint_html: Li dominia-nómine resolue se al seque dominias MX, queles es in fine responsabil por acceptar e-posta. Bloccar un dominia MX va bloccar inscriptiones de quelcunc e-posta quel usa li sam dominia MX, mem si li visibil dominia-nómine es diferent. <strong>Esse caut e ne blocca majori provisores de e-posta.</strong>
|
||||||
resolved_through_html: Resoluet per %{domain}
|
resolved_through_html: Resoluet per %{domain}
|
||||||
title: Bloccat email-dominias
|
title: Bloccat email-dominias
|
||||||
export_domain_allows:
|
export_domain_allows:
|
||||||
|
@ -672,11 +674,13 @@ ie:
|
||||||
description_html: Con <strong>roles por usatores</strong>, tu posse customisar li functiones e locs de Mastodon in queles tui usatores posse accesser.
|
description_html: Con <strong>roles por usatores</strong>, tu posse customisar li functiones e locs de Mastodon in queles tui usatores posse accesser.
|
||||||
edit: Modificar rol '%{name}'
|
edit: Modificar rol '%{name}'
|
||||||
everyone: Permissiones predefinit
|
everyone: Permissiones predefinit
|
||||||
|
everyone_full_description_html: Ti es li <strong>fundamental rol</strong> quel afecta <strong>omni usatores</strong>, mem tis sin un assignat rol. Omni altri roles hereda permissiones de it.
|
||||||
permissions_count:
|
permissions_count:
|
||||||
one: "%{count} permission"
|
one: "%{count} permission"
|
||||||
other: "%{count} permissiones"
|
other: "%{count} permissiones"
|
||||||
privileges:
|
privileges:
|
||||||
administrator: Administrator
|
administrator: Administrator
|
||||||
|
administrator_description: Usatores con ti permission va trapassar omni permission
|
||||||
delete_user_data: Deleter Data de Usator
|
delete_user_data: Deleter Data de Usator
|
||||||
delete_user_data_description: Possibilisa que usatores mey deleter li data de altri usatores strax
|
delete_user_data_description: Possibilisa que usatores mey deleter li data de altri usatores strax
|
||||||
invite_users: Invitar Usatores
|
invite_users: Invitar Usatores
|
||||||
|
@ -726,6 +730,8 @@ ie:
|
||||||
settings:
|
settings:
|
||||||
about:
|
about:
|
||||||
manage_rules: Gerer regules de servitor
|
manage_rules: Gerer regules de servitor
|
||||||
|
preamble: Provider detalliat information pri qualmen li servitor es operat, moderat, payat.
|
||||||
|
rules_hint: Hay un dedicat area por regules queles vor usatores es expectat obedir.
|
||||||
title: Pri
|
title: Pri
|
||||||
appearance:
|
appearance:
|
||||||
preamble: Customisar li interfacie web de Mastodon.
|
preamble: Customisar li interfacie web de Mastodon.
|
||||||
|
@ -736,7 +742,10 @@ ie:
|
||||||
desc_html: To ci usa extern scrites de hCaptcha, quel posse esser ínquietant pro rasones de securitá e privatie. In plu, <strong>it posse far li processu de registration mult plu desfacil (particularimen por tis con deshabilitás)</strong>. Pro ti rasones, ples considerar alternativ mesuras, tales quam registration per aprobation o invitation.
|
desc_html: To ci usa extern scrites de hCaptcha, quel posse esser ínquietant pro rasones de securitá e privatie. In plu, <strong>it posse far li processu de registration mult plu desfacil (particularimen por tis con deshabilitás)</strong>. Pro ti rasones, ples considerar alternativ mesuras, tales quam registration per aprobation o invitation.
|
||||||
title: Exige que nov usatores solue un CAPTCHA por confirmar lor conto
|
title: Exige que nov usatores solue un CAPTCHA por confirmar lor conto
|
||||||
content_retention:
|
content_retention:
|
||||||
|
preamble: Decider qualmen usator-generat contenete es inmagasinat in Mastodon.
|
||||||
title: Retention de contenete
|
title: Retention de contenete
|
||||||
|
default_noindex:
|
||||||
|
desc_html: Afecta omni usatores qui ne ha changeat ti parametre personalmen
|
||||||
discovery:
|
discovery:
|
||||||
follow_recommendations: Seque-recomandationes
|
follow_recommendations: Seque-recomandationes
|
||||||
preamble: Exposir interessant contenete es importantissim por incorporar nov usatores qui fórsan conosse nequi che Mastodon. Decider qualmen diferent utensiles de decovrition functiona che vor servitor.
|
preamble: Exposir interessant contenete es importantissim por incorporar nov usatores qui fórsan conosse nequi che Mastodon. Decider qualmen diferent utensiles de decovrition functiona che vor servitor.
|
||||||
|
@ -771,11 +780,13 @@ ie:
|
||||||
critical_update: Critic — ples actualisar rapidmen
|
critical_update: Critic — ples actualisar rapidmen
|
||||||
description: On recomanda que vu actualisa vor Mastodon-servitor regularimen por profiter del max recent fixes e facultates. In plu, quelcvez it es critic actualisar Mastodon promptmen por evitar problemas de securitá. Pro ti rasones, Mastodon questiona chascun 30 minutes ca hay actualisationes, e va notificar vos secun vor parametres pri email-notificationes.
|
description: On recomanda que vu actualisa vor Mastodon-servitor regularimen por profiter del max recent fixes e facultates. In plu, quelcvez it es critic actualisar Mastodon promptmen por evitar problemas de securitá. Pro ti rasones, Mastodon questiona chascun 30 minutes ca hay actualisationes, e va notificar vos secun vor parametres pri email-notificationes.
|
||||||
documentation_link: Aprender plu
|
documentation_link: Aprender plu
|
||||||
|
release_notes: Version-notas
|
||||||
title: Actualisationes disponibil
|
title: Actualisationes disponibil
|
||||||
type: Specie
|
type: Specie
|
||||||
types:
|
types:
|
||||||
major: Majori lansament
|
major: Majori lansament
|
||||||
minor: Minori lansament
|
minor: Minori lansament
|
||||||
|
patch: Lapp-version — bug-corectiones e changes facil a aplicar
|
||||||
version: Version
|
version: Version
|
||||||
statuses:
|
statuses:
|
||||||
account: Autor
|
account: Autor
|
||||||
|
@ -967,6 +978,7 @@ ie:
|
||||||
body: Nov versiones de Mastodon ha esset lansat, vu fórsan vole actualisar!
|
body: Nov versiones de Mastodon ha esset lansat, vu fórsan vole actualisar!
|
||||||
subject: Nov versiones Mastodon es disponibil por %{instance}!
|
subject: Nov versiones Mastodon es disponibil por %{instance}!
|
||||||
new_trends:
|
new_trends:
|
||||||
|
body: 'Li sequent elementes besona un revision ante que on posse monstrar les publicmen:'
|
||||||
new_trending_links:
|
new_trending_links:
|
||||||
title: Populari ligamentes
|
title: Populari ligamentes
|
||||||
new_trending_statuses:
|
new_trending_statuses:
|
||||||
|
@ -1385,10 +1397,12 @@ ie:
|
||||||
media_attachments:
|
media_attachments:
|
||||||
validations:
|
validations:
|
||||||
images_and_video: On ne posse atachar un video a un posta quel ja contene images
|
images_and_video: On ne posse atachar un video a un posta quel ja contene images
|
||||||
|
not_ready: Ne posse atachar files ancor sub tractament. Prova denov pos ne long!
|
||||||
too_many: Ne posse atachar plu quam 4 files
|
too_many: Ne posse atachar plu quam 4 files
|
||||||
migrations:
|
migrations:
|
||||||
acct: Translocat a
|
acct: Translocat a
|
||||||
cancel: Anullar redirection
|
cancel: Anullar redirection
|
||||||
|
cancel_explanation: Anullar li redirection va reactivisar tui actual conto, ma ne va restaurar sequitores queles ha esset movet a ti-ta conto.
|
||||||
cancelled_msg: Anullat redirection con successe.
|
cancelled_msg: Anullat redirection con successe.
|
||||||
errors:
|
errors:
|
||||||
already_moved: es li sam conto a equel tu ha ja translocat
|
already_moved: es li sam conto a equel tu ha ja translocat
|
||||||
|
@ -1397,6 +1411,9 @@ ie:
|
||||||
not_found: ne posset esser trovat
|
not_found: ne posset esser trovat
|
||||||
followers_count: Sequitores al témpor de translocation
|
followers_count: Sequitores al témpor de translocation
|
||||||
incoming_migrations: Translocant de un conto diferent
|
incoming_migrations: Translocant de un conto diferent
|
||||||
|
incoming_migrations_html: Por mover de un altri conto a ti-ci, erstmen tu deve <a href="%{path}">crear un alias de conto</a>.
|
||||||
|
moved_msg: Tui conto nu redirecte a %{acct} e tui sequitores es in li processu de esser movet.
|
||||||
|
not_redirecting: Tui conto redirecte a null altri conto actualmen.
|
||||||
on_cooldown: Tu ha recentmen migrat tui conto. Ti function va esser disponibil denov pos %{count} dies.
|
on_cooldown: Tu ha recentmen migrat tui conto. Ti function va esser disponibil denov pos %{count} dies.
|
||||||
past_migrations: Passat migrationes
|
past_migrations: Passat migrationes
|
||||||
proceed_with_move: Translocar sequitores
|
proceed_with_move: Translocar sequitores
|
||||||
|
@ -1406,7 +1423,12 @@ ie:
|
||||||
warning:
|
warning:
|
||||||
backreference_required: Li nov conto deve in prim esser configurat por retroreferentiar ti-ci conto
|
backreference_required: Li nov conto deve in prim esser configurat por retroreferentiar ti-ci conto
|
||||||
before: 'Ante proceder, ples leer ti notas cuidosimen:'
|
before: 'Ante proceder, ples leer ti notas cuidosimen:'
|
||||||
|
cooldown: Pos mover se, hay un periode de atendida durant quel tu ne va posser mover te denov
|
||||||
|
disabled_account: Tui actual conto ne va esser completmen usabil pos to. Támen, tu va posser accesser li exportation de data, e anc reactivisation.
|
||||||
|
followers: Ti-ci action va mover omni sequitores del actual conto al nov conto
|
||||||
|
only_redirect_html: Alternativmen, tu posse <a href="%{path}">solmen meter un redirection sur tui profil</a>.
|
||||||
other_data: Necun altri data va esser translocat automaticmen
|
other_data: Necun altri data va esser translocat automaticmen
|
||||||
|
redirect: Li profil de tui actual conto va esser actualisat con un anuncie de redirection e va esser excludet de serchas
|
||||||
moderation:
|
moderation:
|
||||||
title: Moderation
|
title: Moderation
|
||||||
move_handler:
|
move_handler:
|
||||||
|
@ -1805,6 +1827,7 @@ ie:
|
||||||
verification:
|
verification:
|
||||||
extra_instructions_html: '<strong>Nota</strong>: Li ligament in tui websitu posse esser ínvisibil. Li important parte es <code>rel="me"</code> quel prevente fals self-identification in websitus con contenete generat de usatores. Tu posse mem usar un <code>link</code> element in li cap-section del págine vice <code>a</code>, ma li HTML code deve esser accessibil sin executer JavaScript.'
|
extra_instructions_html: '<strong>Nota</strong>: Li ligament in tui websitu posse esser ínvisibil. Li important parte es <code>rel="me"</code> quel prevente fals self-identification in websitus con contenete generat de usatores. Tu posse mem usar un <code>link</code> element in li cap-section del págine vice <code>a</code>, ma li HTML code deve esser accessibil sin executer JavaScript.'
|
||||||
here_is_how: Vide qualmen
|
here_is_how: Vide qualmen
|
||||||
|
hint_html: "<strong>Verificar tui identitá che Mastodon es por omnes.</strong> Basat sur apert web-criteries, líber nu e sempre. Omno quel tu besona es un websitu personal per quel gente reconosse te. Quande tu fa un ligament a tui websitu de tui profil, on va controlar que li websitu have un ligament reciproc a tui profil e monstrar un visual indicator sur it."
|
||||||
instructions_html: Copiar e collar li code ci infra in li HTML de tui web-situ. Poy adjunter li adresse de tui web-situ ad-in un del aditional campes sur tui profil ex li section "Modificar profil" e salvar li changes.
|
instructions_html: Copiar e collar li code ci infra in li HTML de tui web-situ. Poy adjunter li adresse de tui web-situ ad-in un del aditional campes sur tui profil ex li section "Modificar profil" e salvar li changes.
|
||||||
verification: Verification
|
verification: Verification
|
||||||
verified_links: Tui verificat ligamentes
|
verified_links: Tui verificat ligamentes
|
||||||
|
@ -1815,9 +1838,12 @@ ie:
|
||||||
success: Tui clave de securitá esset adjuntet con successe.
|
success: Tui clave de securitá esset adjuntet con successe.
|
||||||
delete: Deleter
|
delete: Deleter
|
||||||
delete_confirmation: Vole tu vermen deleter ti-ci clave de securitá?
|
delete_confirmation: Vole tu vermen deleter ti-ci clave de securitá?
|
||||||
|
description_html: Si tu activisa <strong>autentication per clave de securitá</strong>, aperter session va postular que tu usa un de tui claves de securitá.
|
||||||
destroy:
|
destroy:
|
||||||
|
error: Un problema evenit durant li deletion de tui clave de securitá. Ples provar denov.
|
||||||
success: Tui clave de securitá esset successosimen deletet.
|
success: Tui clave de securitá esset successosimen deletet.
|
||||||
invalid_credential: Ínvalid clave de securitá
|
invalid_credential: Ínvalid clave de securitá
|
||||||
not_enabled: Tu ancor ne ha possibilisat WebAuthn
|
not_enabled: Tu ancor ne ha possibilisat WebAuthn
|
||||||
not_supported: Ti-ci navigator ne subtene claves de securitá
|
not_supported: Ti-ci navigator ne subtene claves de securitá
|
||||||
|
otp_required: Por usar claves de securitá, ples activisar 2-factor autentication.
|
||||||
registered_on: Adheret ye %{date}
|
registered_on: Adheret ye %{date}
|
||||||
|
|
|
@ -425,6 +425,7 @@ it:
|
||||||
view: Visualizza blocco di dominio
|
view: Visualizza blocco di dominio
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Aggiungi nuovo
|
add_new: Aggiungi nuovo
|
||||||
|
allow_registrations_with_approval: Consenti registrazioni con approvazione
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} tentativo nell'ultima settimana"
|
one: "%{count} tentativo nell'ultima settimana"
|
||||||
other: "%{count} tentativi di registrazione nell'ultima settimana"
|
other: "%{count} tentativi di registrazione nell'ultima settimana"
|
||||||
|
|
|
@ -420,6 +420,7 @@ ko:
|
||||||
view: 도메인 차단 보기
|
view: 도메인 차단 보기
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: 새로 추가하기
|
add_new: 새로 추가하기
|
||||||
|
allow_registrations_with_approval: 승인을 통한 가입 허용
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
other: 지난 주 동안 %{count}건의 가입 시도가 있었습니다
|
other: 지난 주 동안 %{count}건의 가입 시도가 있었습니다
|
||||||
created_msg: 이메일 도메인 차단 규칙을 생성했습니다
|
created_msg: 이메일 도메인 차단 규칙을 생성했습니다
|
||||||
|
|
|
@ -383,7 +383,11 @@ lad:
|
||||||
confirm_suspension:
|
confirm_suspension:
|
||||||
cancel: Anula
|
cancel: Anula
|
||||||
confirm: Suspende
|
confirm: Suspende
|
||||||
|
permanent_action: Si kites la suspensyon no restoraras dingunos datos ni relasyones.
|
||||||
|
remove_all_data: Esto efasara todo el kontenido, multimedia i datos de profiles de los kuentos en este domeno de tu sirvidor.
|
||||||
|
stop_communication: Tu sirvidor deshara de komunikarse kon estos sirvidores.
|
||||||
title: Konfirma bloko de domeno para %{domain}
|
title: Konfirma bloko de domeno para %{domain}
|
||||||
|
undo_relationships: Esto kitara todas las relasyones de segimyento entre tu kuentos en estos sirvidores i el tu sirvidor.
|
||||||
created_msg: El bloko de domeno esta siendo prosesado
|
created_msg: El bloko de domeno esta siendo prosesado
|
||||||
destroyed_msg: El bloko de domeno se dezizo
|
destroyed_msg: El bloko de domeno se dezizo
|
||||||
domain: Domeno
|
domain: Domeno
|
||||||
|
@ -772,6 +776,8 @@ lad:
|
||||||
type: Tipo
|
type: Tipo
|
||||||
types:
|
types:
|
||||||
major: Versyon prinsipala
|
major: Versyon prinsipala
|
||||||
|
minor: Versyon minora
|
||||||
|
patch: Versyon de remendo – koreksyones de yerros i trokamientos simples
|
||||||
version: Versyon
|
version: Versyon
|
||||||
statuses:
|
statuses:
|
||||||
account: Autor
|
account: Autor
|
||||||
|
@ -829,8 +835,10 @@ lad:
|
||||||
message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq
|
message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq
|
||||||
software_version_critical_check:
|
software_version_critical_check:
|
||||||
action: Amostra aktualizasyones desponivles
|
action: Amostra aktualizasyones desponivles
|
||||||
|
message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin.
|
||||||
software_version_patch_check:
|
software_version_patch_check:
|
||||||
action: Amostra aktualizasyones desponivles
|
action: Amostra aktualizasyones desponivles
|
||||||
|
message_html: Una aktualizasyon de Mastodon kon koreksyon de yerros esta desponivle.
|
||||||
upload_check_privacy_error:
|
upload_check_privacy_error:
|
||||||
action: Klika aki para mas enformasyon
|
action: Klika aki para mas enformasyon
|
||||||
message_html: "<strong>Tu sirvidor de web es mal konfigurado. La privasita de tus utilizadores esta en riziko.</strong>"
|
message_html: "<strong>Tu sirvidor de web es mal konfigurado. La privasita de tus utilizadores esta en riziko.</strong>"
|
||||||
|
@ -945,6 +953,7 @@ lad:
|
||||||
next_steps: Puedes achetar la apelasyon para dezazer la dechizyon de moderasyon, o ignorarla.
|
next_steps: Puedes achetar la apelasyon para dezazer la dechizyon de moderasyon, o ignorarla.
|
||||||
subject: "%{username} esta apelando a una dechizyon de moderasyon en %{instance}"
|
subject: "%{username} esta apelando a una dechizyon de moderasyon en %{instance}"
|
||||||
new_critical_software_updates:
|
new_critical_software_updates:
|
||||||
|
body: Ay mueva versyon kritika de Mastodon. Es posivle ke keras aktualizar pishin!
|
||||||
subject: Ay aktualizasyones kritikas de Mastodon desponivles para %{instance}!
|
subject: Ay aktualizasyones kritikas de Mastodon desponivles para %{instance}!
|
||||||
new_pending_account:
|
new_pending_account:
|
||||||
body: Los peratim del muevo kuento estan abashos. Puedes achetar o refuzar esta aplikasyon.
|
body: Los peratim del muevo kuento estan abashos. Puedes achetar o refuzar esta aplikasyon.
|
||||||
|
@ -1045,13 +1054,17 @@ lad:
|
||||||
accept: Acheta
|
accept: Acheta
|
||||||
back: Atras
|
back: Atras
|
||||||
preamble: Estas son establesidas i aplikadas por los moderadores de %{domain}.
|
preamble: Estas son establesidas i aplikadas por los moderadores de %{domain}.
|
||||||
|
preamble_invited: Antes de kontinuar, por favor reviza las reglas del sirvidor establesidas por los moderatores de %{domain}.
|
||||||
title: Algunas reglas bazikas.
|
title: Algunas reglas bazikas.
|
||||||
title_invited: Fuites envitado.
|
title_invited: Fuites envitado.
|
||||||
security: Sigurita
|
security: Sigurita
|
||||||
set_new_password: Establese muevo kod
|
set_new_password: Establese muevo kod
|
||||||
setup:
|
setup:
|
||||||
email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki.
|
email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki.
|
||||||
|
email_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki.
|
||||||
link_not_received: No risivites un atadijo?
|
link_not_received: No risivites un atadijo?
|
||||||
|
new_confirmation_instructions_sent: Resiviras un muevo mesaj de posta elektronika kon el atadjio de konfirmasyon en unos minutos!
|
||||||
|
title: Reviza tu kuti de arivo
|
||||||
sign_in:
|
sign_in:
|
||||||
preamble_html: Konektate kon tus kredensiales de <strong>%{domain}</strong>. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki.
|
preamble_html: Konektate kon tus kredensiales de <strong>%{domain}</strong>. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki.
|
||||||
title: Konektate kon %{domain}
|
title: Konektate kon %{domain}
|
||||||
|
@ -1246,9 +1259,11 @@ lad:
|
||||||
imports:
|
imports:
|
||||||
errors:
|
errors:
|
||||||
empty: Dosya CSV vaziya
|
empty: Dosya CSV vaziya
|
||||||
|
incompatible_type: Inkompativle kon el tipo de importo eskojido
|
||||||
invalid_csv_file: 'Dosya CSV no valida. Yerro: %{error}'
|
invalid_csv_file: 'Dosya CSV no valida. Yerro: %{error}'
|
||||||
over_rows_processing_limit: kontiene mas de %{count} filas
|
over_rows_processing_limit: kontiene mas de %{count} filas
|
||||||
too_large: Dosya es mas grande
|
too_large: Dosya es mas grande
|
||||||
|
failures: Yerros
|
||||||
imported: Importado
|
imported: Importado
|
||||||
modes:
|
modes:
|
||||||
merge: Une
|
merge: Une
|
||||||
|
@ -1671,6 +1686,9 @@ lad:
|
||||||
month: "%b %Y"
|
month: "%b %Y"
|
||||||
time: "%H:%M"
|
time: "%H:%M"
|
||||||
with_time_zone: "%d de %b del %Y, %H:%M %Z"
|
with_time_zone: "%d de %b del %Y, %H:%M %Z"
|
||||||
|
translation:
|
||||||
|
errors:
|
||||||
|
too_many_requests: Ay demaziadas solisitudes de servisyo de traduksyon.
|
||||||
two_factor_authentication:
|
two_factor_authentication:
|
||||||
add: Adjusta
|
add: Adjusta
|
||||||
disable: Inkapasita autentifikasyon en dos pasos
|
disable: Inkapasita autentifikasyon en dos pasos
|
||||||
|
@ -1750,9 +1768,12 @@ lad:
|
||||||
title: Bienvenido, %{name}!
|
title: Bienvenido, %{name}!
|
||||||
users:
|
users:
|
||||||
follow_limit_reached: No puedes segir a mas de %{limit} personas
|
follow_limit_reached: No puedes segir a mas de %{limit} personas
|
||||||
|
go_to_sso_account_settings: Va a la konfigurasyon de kuento de tu prokurador de identita
|
||||||
invalid_otp_token: Kodiche de dos pasos no valido
|
invalid_otp_token: Kodiche de dos pasos no valido
|
||||||
|
otp_lost_help_html: Si pedriste akseso a los dos, puedes kontaktarte kon %{email}
|
||||||
signed_in_as: 'Konektado komo:'
|
signed_in_as: 'Konektado komo:'
|
||||||
verification:
|
verification:
|
||||||
|
here_is_how: Ansina es komo
|
||||||
verification: Verifikasyon
|
verification: Verifikasyon
|
||||||
verified_links: Tus atadijos verifikados
|
verified_links: Tus atadijos verifikados
|
||||||
webauthn_credentials:
|
webauthn_credentials:
|
||||||
|
|
|
@ -169,6 +169,7 @@ lt:
|
||||||
undo: Atkurti domeno bloką
|
undo: Atkurti domeno bloką
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Pridėti naują
|
add_new: Pridėti naują
|
||||||
|
allow_registrations_with_approval: Leisti registracijas su patvirtinimu
|
||||||
created_msg: El pašto domenas sėkmingai pridėtas į juodąjį sąrašą
|
created_msg: El pašto domenas sėkmingai pridėtas į juodąjį sąrašą
|
||||||
delete: Ištrinti
|
delete: Ištrinti
|
||||||
domain: Domenas
|
domain: Domenas
|
||||||
|
|
|
@ -425,6 +425,7 @@ nl:
|
||||||
view: Domeinblokkade bekijken
|
view: Domeinblokkade bekijken
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Nieuwe toevoegen
|
add_new: Nieuwe toevoegen
|
||||||
|
allow_registrations_with_approval: Inschrijvingen met toestemming toestaan
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} registratiepoging tijdens de afgelopen week"
|
one: "%{count} registratiepoging tijdens de afgelopen week"
|
||||||
other: "%{count} registratiepogingen tijdens de afgelopen week"
|
other: "%{count} registratiepogingen tijdens de afgelopen week"
|
||||||
|
|
|
@ -425,6 +425,7 @@ nn:
|
||||||
view: Vis domeneblokkering
|
view: Vis domeneblokkering
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Lag ny
|
add_new: Lag ny
|
||||||
|
allow_registrations_with_approval: Tillat registreringer med godkjenning
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} forsøk i løpet av den siste uken"
|
one: "%{count} forsøk i løpet av den siste uken"
|
||||||
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
||||||
|
|
|
@ -425,6 +425,7 @@
|
||||||
view: Vis domeneblokkering
|
view: Vis domeneblokkering
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Lag ny
|
add_new: Lag ny
|
||||||
|
allow_registrations_with_approval: Tillat registreringer med godkjenning
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} forsøk i løpet av den siste uken"
|
one: "%{count} forsøk i løpet av den siste uken"
|
||||||
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
||||||
|
|
|
@ -439,6 +439,7 @@ pl:
|
||||||
view: Zobacz blokadę domeny
|
view: Zobacz blokadę domeny
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Dodaj nową
|
add_new: Dodaj nową
|
||||||
|
allow_registrations_with_approval: Zezwól na rejestracje po zatwierdzeniu
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} próby w ciągu ostatniego tygodnia"
|
few: "%{count} próby w ciągu ostatniego tygodnia"
|
||||||
many: "%{count} prób w ciągu ostatniego tygodnia"
|
many: "%{count} prób w ciągu ostatniego tygodnia"
|
||||||
|
|
|
@ -425,6 +425,7 @@ pt-BR:
|
||||||
view: Ver domínios bloqueados
|
view: Ver domínios bloqueados
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Adicionar novo
|
add_new: Adicionar novo
|
||||||
|
allow_registrations_with_approval: Permitir inscrições com aprovação
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} tentativa na última semana"
|
one: "%{count} tentativa na última semana"
|
||||||
other: "%{count} tentativas de inscrição na última semana"
|
other: "%{count} tentativas de inscrição na última semana"
|
||||||
|
|
|
@ -425,6 +425,7 @@ pt-PT:
|
||||||
view: Ver domínios bloqueados
|
view: Ver domínios bloqueados
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Adicionar novo
|
add_new: Adicionar novo
|
||||||
|
allow_registrations_with_approval: Permitir inscrições com aprovação
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} tentativa na última semana"
|
one: "%{count} tentativa na última semana"
|
||||||
other: "%{count} tentativas de inscrição na última semana"
|
other: "%{count} tentativas de inscrição na última semana"
|
||||||
|
|
|
@ -1 +1,46 @@
|
||||||
|
---
|
||||||
ia:
|
ia:
|
||||||
|
simple_form:
|
||||||
|
labels:
|
||||||
|
account:
|
||||||
|
fields:
|
||||||
|
name: Etiquetta
|
||||||
|
value: Contento
|
||||||
|
admin_account_action:
|
||||||
|
type: Action
|
||||||
|
defaults:
|
||||||
|
avatar: Pictura de profilo
|
||||||
|
confirm_new_password: Confirmar nove contrasigno
|
||||||
|
confirm_password: Confirmar contrasigno
|
||||||
|
current_password: Contrasigno actual
|
||||||
|
new_password: Nove contrasigno
|
||||||
|
password: Contrasigno
|
||||||
|
setting_display_media_default: Predefinite
|
||||||
|
setting_display_media_hide_all: Celar toto
|
||||||
|
setting_display_media_show_all: Monstrar toto
|
||||||
|
setting_system_font_ui: Usar typo de litteras predefinite del systema
|
||||||
|
setting_theme: Thema de sito
|
||||||
|
setting_trends: Monstrar le tendentias de hodie
|
||||||
|
sign_in_token_attempt: Codice de securitate
|
||||||
|
title: Titulo
|
||||||
|
username: Nomine de usator
|
||||||
|
username_or_email: Nomine de usator o e-mail
|
||||||
|
form_admin_settings:
|
||||||
|
custom_css: CSS personalisate
|
||||||
|
profile_directory: Activar directorio de profilos
|
||||||
|
site_contact_email: Adresse de e-mail de contacto
|
||||||
|
site_contact_username: Nomine de usator de contacto
|
||||||
|
site_terms: Politica de confidentialitate
|
||||||
|
site_title: Nomine de servitor
|
||||||
|
theme: Thema predefinite
|
||||||
|
trends: Activar tendentias
|
||||||
|
notification_emails:
|
||||||
|
software_updates:
|
||||||
|
label: Un nove version de Mastodon es disponibile
|
||||||
|
user:
|
||||||
|
time_zone: Fuso horari
|
||||||
|
user_role:
|
||||||
|
name: Nomine
|
||||||
|
permissions_as_keys: Permissiones
|
||||||
|
position: Prioritate
|
||||||
|
'yes': Si
|
||||||
|
|
|
@ -8,6 +8,7 @@ ie:
|
||||||
fields: Tui websitu, pronómines, etá, quocunc quel tu vole.
|
fields: Tui websitu, pronómines, etá, quocunc quel tu vole.
|
||||||
indexable: Tui public postas posse aparir in sercha-resultates sur Mastodon. E in omni casu, tis qui ha interactet con tui postas va posser serchar e trovar les.
|
indexable: Tui public postas posse aparir in sercha-resultates sur Mastodon. E in omni casu, tis qui ha interactet con tui postas va posser serchar e trovar les.
|
||||||
note: 'Tu posse @mentionar altri persones o #hashtags.'
|
note: 'Tu posse @mentionar altri persones o #hashtags.'
|
||||||
|
show_collections: Gente va posser navigar tra tui sequentes e sequitores. Gente quem tu seque va vider que tu seque les sin egarda.
|
||||||
unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores.
|
unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores.
|
||||||
account_alias:
|
account_alias:
|
||||||
acct: Specificar li usatornomine@dominia del conto ex quel tu vole translocar
|
acct: Specificar li usatornomine@dominia del conto ex quel tu vole translocar
|
||||||
|
@ -58,6 +59,14 @@ ie:
|
||||||
setting_display_media_default: Celar medie marcat quam sensitiv
|
setting_display_media_default: Celar medie marcat quam sensitiv
|
||||||
setting_display_media_hide_all: Sempre celar medie
|
setting_display_media_hide_all: Sempre celar medie
|
||||||
setting_display_media_show_all: Sempre monstrar medie
|
setting_display_media_show_all: Sempre monstrar medie
|
||||||
|
setting_use_blurhash: Gradientes es basat sur li colores del celat visuales ma obscura omni detallies
|
||||||
|
setting_use_pending_items: Celar nov postas detra un clicc vice rular li témpor-linea automaticmen
|
||||||
|
username: Tu posse usar lítteres, númeres e sublineas
|
||||||
|
domain_allow:
|
||||||
|
domain: Ti dominia va posser obtener data de ti-ci servitor, e data venient de it va esser tractat e inmagasinat
|
||||||
|
email_domain_block:
|
||||||
|
domain: Ti posse esser li dominia-nómine quel apari in li email-adresse o li MX-registre quel it usa. Ili va esser controlat durant adhesion.
|
||||||
|
with_dns_records: On va far un prova resoluer li DNS-registres del specificat dominia, e li resultates anc va esser bloccat
|
||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Vi quelc hashtags usat max recentmen de te:'
|
name: 'Vi quelc hashtags usat max recentmen de te:'
|
||||||
filters:
|
filters:
|
||||||
|
@ -66,8 +75,12 @@ ie:
|
||||||
hide: Celar completmen li contenete filtrat, quam si it ne existe
|
hide: Celar completmen li contenete filtrat, quam si it ne existe
|
||||||
warn: Celar li contenete filtrat detra un avise mentionant li titul del filtre
|
warn: Celar li contenete filtrat detra un avise mentionant li titul del filtre
|
||||||
form_admin_settings:
|
form_admin_settings:
|
||||||
|
activity_api_enabled: Númeres de postas publicat localmen, activ usatores, e nov adhesiones in periodes semanal
|
||||||
backups_retention_period: Mantener usator-generat archives por li specificat quantitá de dies.
|
backups_retention_period: Mantener usator-generat archives por li specificat quantitá de dies.
|
||||||
bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores.
|
bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores.
|
||||||
|
closed_registrations_message: Monstrat quande adhesiones es cludet
|
||||||
|
content_cache_retention_period: Omni postas e boosts de altri servitores va esser deletet pos li specificat quantitá de dies. Quelc postas fórsan va esser ínrestaurabil. Omni pertinent marcatores, favorites e boosts anc va esser perdit e ínpossibil a restaurar.
|
||||||
|
custom_css: On posse aplicar customisat stiles al web-version de Mastodon.
|
||||||
mascot: Substitue li ilustration in li avansat interfacie web.
|
mascot: Substitue li ilustration in li avansat interfacie web.
|
||||||
peers_api_enabled: Un liste de nómines de dominia queles ti-ci servitor ha incontrat in li fediverse. Ci null data es includet pri ca tu confedera con un cert servitor o ne; it indica solmen que tui servitor conosse it. Usat per servicies colectent general statisticas pri federation.
|
peers_api_enabled: Un liste de nómines de dominia queles ti-ci servitor ha incontrat in li fediverse. Ci null data es includet pri ca tu confedera con un cert servitor o ne; it indica solmen que tui servitor conosse it. Usat per servicies colectent general statisticas pri federation.
|
||||||
profile_directory: Li profilarium monstra omni usatores volent esser decovribil.
|
profile_directory: Li profilarium monstra omni usatores volent esser decovribil.
|
||||||
|
@ -86,6 +99,7 @@ ie:
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Facultativ. Ne obliviar pro quo tu adjuntet ti-ci regul.
|
comment: Facultativ. Ne obliviar pro quo tu adjuntet ti-ci regul.
|
||||||
expires_in: IP-adresses es un ressurse finit, quelcvez partit e transferet de manu a manu. Pro to, un índefinit bloccada de IP ne es recomandat.
|
expires_in: IP-adresses es un ressurse finit, quelcvez partit e transferet de manu a manu. Pro to, un índefinit bloccada de IP ne es recomandat.
|
||||||
|
ip: Intrar un adresse IPv4 o IPv6. Tu posse bloccar un tot intervalle de ili con li sintaxe CIDR. Atention a ne bloccar te self!
|
||||||
severities:
|
severities:
|
||||||
no_access: Bloccar accesse a omni ressurses
|
no_access: Bloccar accesse a omni ressurses
|
||||||
sign_up_block: Nov registrationes ne va esser possibil
|
sign_up_block: Nov registrationes ne va esser possibil
|
||||||
|
@ -93,6 +107,10 @@ ie:
|
||||||
severity: Selecter quo va evenir con demandes ex ti-ci IP
|
severity: Selecter quo va evenir con demandes ex ti-ci IP
|
||||||
rule:
|
rule:
|
||||||
text: Descrir un regul o postulation por usatores sur ti-ci servitor. Prova scrir un descrition curt e simplic
|
text: Descrir un regul o postulation por usatores sur ti-ci servitor. Prova scrir un descrition curt e simplic
|
||||||
|
sessions:
|
||||||
|
otp: 'Intrar li 2-factor code generat del app sur tui portabile o usar un de tui codes de recuperation:'
|
||||||
|
settings:
|
||||||
|
show_application: Totvez, tu va sempre posser vider quel app ha publicat tui posta.
|
||||||
user:
|
user:
|
||||||
role: Permissiones de usator decidet per su rol
|
role: Permissiones de usator decidet per su rol
|
||||||
user_role:
|
user_role:
|
||||||
|
@ -111,6 +129,7 @@ ie:
|
||||||
name: Etiquette
|
name: Etiquette
|
||||||
value: Contenete
|
value: Contenete
|
||||||
indexable: Includer public postas in resultates de sercha
|
indexable: Includer public postas in resultates de sercha
|
||||||
|
unlocked: Automaticmen acceptar nov sequitores
|
||||||
account_alias:
|
account_alias:
|
||||||
acct: Usator-nómine del anteyan conto
|
acct: Usator-nómine del anteyan conto
|
||||||
account_migration:
|
account_migration:
|
||||||
|
@ -158,6 +177,7 @@ ie:
|
||||||
max_uses: Max grand númere de usas
|
max_uses: Max grand númere de usas
|
||||||
new_password: Nov passa-parol
|
new_password: Nov passa-parol
|
||||||
note: Biografie
|
note: Biografie
|
||||||
|
otp_attempt: 2-factor code
|
||||||
password: Passa-parol
|
password: Passa-parol
|
||||||
phrase: Clave-parol o frase
|
phrase: Clave-parol o frase
|
||||||
setting_advanced_layout: Possibilisar web-interfacie avansat
|
setting_advanced_layout: Possibilisar web-interfacie avansat
|
||||||
|
@ -165,10 +185,13 @@ ie:
|
||||||
setting_default_language: Lingue in quel postar
|
setting_default_language: Lingue in quel postar
|
||||||
setting_default_privacy: Privatie de postada
|
setting_default_privacy: Privatie de postada
|
||||||
setting_default_sensitive: Sempre marcar medie quam sensitiv
|
setting_default_sensitive: Sempre marcar medie quam sensitiv
|
||||||
|
setting_display_media: Exposition de medie
|
||||||
setting_display_media_default: Predefinitiones
|
setting_display_media_default: Predefinitiones
|
||||||
setting_display_media_hide_all: Celar omno
|
setting_display_media_hide_all: Celar omno
|
||||||
setting_display_media_show_all: Monstrar omno
|
setting_display_media_show_all: Monstrar omno
|
||||||
setting_expand_spoilers: Sempre expander postas marcat con admonitiones de contenete
|
setting_expand_spoilers: Sempre expander postas marcat con admonitiones de contenete
|
||||||
|
setting_hide_network: Celar tui grafica social
|
||||||
|
setting_reduce_motion: Reducter motion in animationes
|
||||||
setting_system_font_ui: Usar predefinit fonte de sistema
|
setting_system_font_ui: Usar predefinit fonte de sistema
|
||||||
setting_theme: Tema de situ
|
setting_theme: Tema de situ
|
||||||
setting_trends: Monstrar li hodial tendenties
|
setting_trends: Monstrar li hodial tendenties
|
||||||
|
@ -179,7 +202,10 @@ ie:
|
||||||
title: Titul
|
title: Titul
|
||||||
type: Specie de importation
|
type: Specie de importation
|
||||||
username: Nómine de usator
|
username: Nómine de usator
|
||||||
|
username_or_email: Usator-nómine o E-posta
|
||||||
whole_word: Plen parol
|
whole_word: Plen parol
|
||||||
|
email_domain_block:
|
||||||
|
with_dns_records: Includer archives MX e IPs del dominia
|
||||||
featured_tag:
|
featured_tag:
|
||||||
name: Hashtag
|
name: Hashtag
|
||||||
filters:
|
filters:
|
||||||
|
@ -187,22 +213,36 @@ ie:
|
||||||
hide: Celar completmen
|
hide: Celar completmen
|
||||||
warn: Celar con un admonition
|
warn: Celar con un admonition
|
||||||
form_admin_settings:
|
form_admin_settings:
|
||||||
|
activity_api_enabled: Publicar agregat statisticas pri usator-activitá in li API
|
||||||
backups_retention_period: Periode de retener archives de usator
|
backups_retention_period: Periode de retener archives de usator
|
||||||
bootstrap_timeline_accounts: Sempre recomandar ti-ci contos a nov usatores
|
bootstrap_timeline_accounts: Sempre recomandar ti-ci contos a nov usatores
|
||||||
closed_registrations_message: Customisat missage quande registration ne disponibil
|
closed_registrations_message: Customisat missage quande registration ne disponibil
|
||||||
|
content_cache_retention_period: Periode de retention por cachat contenete
|
||||||
custom_css: Custom CSS
|
custom_css: Custom CSS
|
||||||
|
media_cache_retention_period: Periode de retention por cachat medie
|
||||||
|
peers_api_enabled: Publicar liste de conosset servitores per li API
|
||||||
profile_directory: Possibilisar profilarium
|
profile_directory: Possibilisar profilarium
|
||||||
registrations_mode: Qui posse registrar se
|
registrations_mode: Qui posse registrar se
|
||||||
|
require_invite_text: Exiger un rason por adherer se
|
||||||
show_domain_blocks: Vider bloccas de dominia
|
show_domain_blocks: Vider bloccas de dominia
|
||||||
show_domain_blocks_rationale: Monstrar pro quo cert dominias esset bloccat
|
show_domain_blocks_rationale: Monstrar pro quo cert dominias esset bloccat
|
||||||
site_contact_email: Contact e-mail adresse
|
site_contact_email: Contact e-mail adresse
|
||||||
site_contact_username: Usator-nómine de contact
|
site_contact_username: Usator-nómine de contact
|
||||||
site_extended_description: Extendet descrition
|
site_extended_description: Extendet descrition
|
||||||
|
site_short_description: Descrition del servitor
|
||||||
|
site_terms: Politica pri Privatie
|
||||||
site_title: Nómine de servitor
|
site_title: Nómine de servitor
|
||||||
|
status_page_url: URL de statu-págine
|
||||||
theme: Predefenit tema
|
theme: Predefenit tema
|
||||||
|
thumbnail: Miniatura del servitor
|
||||||
|
timeline_preview: Permisser accesse ínautenticat al public témpor-lineas
|
||||||
trendable_by_default: Possibilisar tendenties sin priori inspection
|
trendable_by_default: Possibilisar tendenties sin priori inspection
|
||||||
trends: Possibilisar tendenties
|
trends: Possibilisar tendenties
|
||||||
trends_as_landing_page: Usar tendenties quam frontispicie
|
trends_as_landing_page: Usar tendenties quam frontispicie
|
||||||
|
interactions:
|
||||||
|
must_be_follower: Bloccar notificationes de tis qui ne seque te
|
||||||
|
must_be_following: Bloccar notificationes de tis quem tu ne seque
|
||||||
|
must_be_following_dm: Bloccar direct missages de tis quem tu ne seque
|
||||||
invite:
|
invite:
|
||||||
comment: Comentar
|
comment: Comentar
|
||||||
invite_request:
|
invite_request:
|
||||||
|
@ -216,27 +256,38 @@ ie:
|
||||||
sign_up_requires_approval: Limitar usator-registrationes
|
sign_up_requires_approval: Limitar usator-registrationes
|
||||||
severity: Regul
|
severity: Regul
|
||||||
notification_emails:
|
notification_emails:
|
||||||
|
appeal: Alqui apella un decision moderatori
|
||||||
|
digest: Inviar compendies per email
|
||||||
favourite: Alqui favoritisat tui posta
|
favourite: Alqui favoritisat tui posta
|
||||||
follow: Alqui sequet te
|
follow: Alqui sequet te
|
||||||
follow_request: Alqui petit sequer te
|
follow_request: Alqui petit sequer te
|
||||||
mention: Alqui mentionat te
|
mention: Alqui mentionat te
|
||||||
pending_account: Nov conto besonant inspection
|
pending_account: Nov conto besonant inspection
|
||||||
|
reblog: Alqui boostat tui posta
|
||||||
report: Nov raporte es submisset
|
report: Nov raporte es submisset
|
||||||
software_updates:
|
software_updates:
|
||||||
all: Notificar pri omni nov actualisationes
|
all: Notificar pri omni nov actualisationes
|
||||||
critical: Notificar solmen pri critical actualisationes
|
critical: Notificar solmen pri critical actualisationes
|
||||||
label: Un nov version de Mastodon es disponibil
|
label: Un nov version de Mastodon es disponibil
|
||||||
|
none: Nequande notificar pri actualisationes (ne recomandat)
|
||||||
|
patch: Notificar pri problema-fixant actualisationes
|
||||||
trending_tag: Nov tendentie besonant inspection
|
trending_tag: Nov tendentie besonant inspection
|
||||||
rule:
|
rule:
|
||||||
text: Regul
|
text: Regul
|
||||||
|
settings:
|
||||||
|
indexable: Includer profil-pagine in serchatores
|
||||||
|
show_application: Monstrar de quel aplication tu fat un posta
|
||||||
tag:
|
tag:
|
||||||
|
listable: Permisser que ti hashtag apari in serchas e suggestiones
|
||||||
name: Hashtag
|
name: Hashtag
|
||||||
trendable: Permisse que ti-ci hashtag apari sub tendenties
|
trendable: Permisse que ti-ci hashtag apari sub tendenties
|
||||||
|
usable: Permisser que postas usa ti hashtag
|
||||||
user:
|
user:
|
||||||
role: Rol
|
role: Rol
|
||||||
time_zone: Zone temporal
|
time_zone: Zone temporal
|
||||||
user_role:
|
user_role:
|
||||||
color: Color del insignie
|
color: Color del insignie
|
||||||
|
highlighted: Monstrar rol quam insigne sur usator-profiles
|
||||||
name: Nómine
|
name: Nómine
|
||||||
permissions_as_keys: Permissiones
|
permissions_as_keys: Permissiones
|
||||||
position: Prioritá
|
position: Prioritá
|
||||||
|
|
|
@ -149,6 +149,8 @@ sk:
|
||||||
text: Prečo sa k nám chceš pridať?
|
text: Prečo sa k nám chceš pridať?
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Komentár
|
comment: Komentár
|
||||||
|
severities:
|
||||||
|
sign_up_requires_approval: Obmedz registrácie
|
||||||
severity: Pravidlo
|
severity: Pravidlo
|
||||||
notification_emails:
|
notification_emails:
|
||||||
digest: Zasielať súhrnné emaily
|
digest: Zasielať súhrnné emaily
|
||||||
|
|
|
@ -374,6 +374,7 @@ sk:
|
||||||
view: Ukáž blokovanie domén
|
view: Ukáž blokovanie domén
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Pridaj nový
|
add_new: Pridaj nový
|
||||||
|
allow_registrations_with_approval: Povoľ registrovanie so schválením
|
||||||
created_msg: Emailová doména bola úspešne pridaná do zoznamu zakázaných
|
created_msg: Emailová doména bola úspešne pridaná do zoznamu zakázaných
|
||||||
delete: Vymaž
|
delete: Vymaž
|
||||||
dns:
|
dns:
|
||||||
|
|
|
@ -439,6 +439,7 @@ sl:
|
||||||
view: Pokaži domenski blok
|
view: Pokaži domenski blok
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Dodaj novo
|
add_new: Dodaj novo
|
||||||
|
allow_registrations_with_approval: Dovoli registracije z odobritvijo
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} poskusi prijave zadnji teden"
|
few: "%{count} poskusi prijave zadnji teden"
|
||||||
one: "%{count} poskus prijave zadnji teden"
|
one: "%{count} poskus prijave zadnji teden"
|
||||||
|
|
|
@ -425,6 +425,7 @@ sq:
|
||||||
view: Shihni bllokim përkatësie
|
view: Shihni bllokim përkatësie
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Shtoni të ri
|
add_new: Shtoni të ri
|
||||||
|
allow_registrations_with_approval: Lejo regjistrim me miratim
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: "%{count} përpjekje gjatë javës së shkuar"
|
one: "%{count} përpjekje gjatë javës së shkuar"
|
||||||
other: "%{count} përpjekje regjistrimi gjatë javës së kaluar"
|
other: "%{count} përpjekje regjistrimi gjatë javës së kaluar"
|
||||||
|
|
|
@ -432,6 +432,7 @@ sr-Latn:
|
||||||
view: Pročitaj blok domena
|
view: Pročitaj blok domena
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Dodaj novi
|
add_new: Dodaj novi
|
||||||
|
allow_registrations_with_approval: Dozvoli registraciju uz odobrenje
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} pokušaja tokom prethodne nedelje"
|
few: "%{count} pokušaja tokom prethodne nedelje"
|
||||||
one: "%{count} pokušaj tokom prethodne nedelje"
|
one: "%{count} pokušaj tokom prethodne nedelje"
|
||||||
|
|
|
@ -432,6 +432,7 @@ sr:
|
||||||
view: Прочитај блок домена
|
view: Прочитај блок домена
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Додај нови
|
add_new: Додај нови
|
||||||
|
allow_registrations_with_approval: Дозволи регистрацију уз одобрење
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} покушаја током претходне недеље"
|
few: "%{count} покушаја током претходне недеље"
|
||||||
one: "%{count} покушај током претходне недеље"
|
one: "%{count} покушај током претходне недеље"
|
||||||
|
|
|
@ -418,6 +418,7 @@ th:
|
||||||
view: ดูการปิดกั้นโดเมน
|
view: ดูการปิดกั้นโดเมน
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: เพิ่มใหม่
|
add_new: เพิ่มใหม่
|
||||||
|
allow_registrations_with_approval: อนุญาตการลงทะเบียนด้วยการอนุมัติ
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
other: "%{count} ความพยายามในการลงทะเบียนในช่วงสัปดาห์ที่ผ่านมา"
|
other: "%{count} ความพยายามในการลงทะเบียนในช่วงสัปดาห์ที่ผ่านมา"
|
||||||
created_msg: ปิดกั้นโดเมนอีเมลสำเร็จ
|
created_msg: ปิดกั้นโดเมนอีเมลสำเร็จ
|
||||||
|
|
|
@ -425,6 +425,7 @@ tr:
|
||||||
view: Alan adı bloğunu görüntüle
|
view: Alan adı bloğunu görüntüle
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Yeni ekle
|
add_new: Yeni ekle
|
||||||
|
allow_registrations_with_approval: Onaylı kayıtlara izin ver
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
one: Son haftada %{count} deneme
|
one: Son haftada %{count} deneme
|
||||||
other: Son haftada %{count} kayıt denemesi
|
other: Son haftada %{count} kayıt denemesi
|
||||||
|
|
|
@ -439,6 +439,7 @@ uk:
|
||||||
view: Переглянути заблоковані домени
|
view: Переглянути заблоковані домени
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Додати
|
add_new: Додати
|
||||||
|
allow_registrations_with_approval: Дозволити реєстрації із затвердженням
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
few: "%{count} спроби входу за останній тиждень"
|
few: "%{count} спроби входу за останній тиждень"
|
||||||
many: "%{count} спроб входу за останній тиждень"
|
many: "%{count} спроб входу за останній тиждень"
|
||||||
|
|
|
@ -418,6 +418,7 @@ vi:
|
||||||
view: Xem máy chủ chặn
|
view: Xem máy chủ chặn
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: Thêm mới
|
add_new: Thêm mới
|
||||||
|
allow_registrations_with_approval: Cho đăng ký nhưng duyệt thủ công
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
other: "%{count} lần thử đăng ký vào tuần trước"
|
other: "%{count} lần thử đăng ký vào tuần trước"
|
||||||
created_msg: Đã chặn tên miền email này
|
created_msg: Đã chặn tên miền email này
|
||||||
|
|
|
@ -418,6 +418,7 @@ zh-CN:
|
||||||
view: 查看域名屏蔽
|
view: 查看域名屏蔽
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: 添加新条目
|
add_new: 添加新条目
|
||||||
|
allow_registrations_with_approval: 注册时需要批准
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
other: 上周有 %{count} 次注册尝试
|
other: 上周有 %{count} 次注册尝试
|
||||||
created_msg: 成功屏蔽电子邮件域名
|
created_msg: 成功屏蔽电子邮件域名
|
||||||
|
|
|
@ -418,6 +418,7 @@ zh-HK:
|
||||||
view: 顯示正被阻隔的網域
|
view: 顯示正被阻隔的網域
|
||||||
email_domain_blocks:
|
email_domain_blocks:
|
||||||
add_new: 新增
|
add_new: 新增
|
||||||
|
allow_registrations_with_approval: 允許經批准的註冊
|
||||||
attempts_over_week:
|
attempts_over_week:
|
||||||
other: 上週嘗試了註冊 %{count} 次
|
other: 上週嘗試了註冊 %{count} 次
|
||||||
created_msg: 已新增電郵網域阻隔
|
created_msg: 已新增電郵網域阻隔
|
||||||
|
|
|
@ -22,11 +22,9 @@ class TruncatePreviewCards < ActiveRecord::Migration[5.1]
|
||||||
end
|
end
|
||||||
|
|
||||||
def down
|
def down
|
||||||
if ActiveRecord::Base.connection.table_exists? 'deprecated_preview_cards'
|
raise ActiveRecord::IrreversibleMigration, 'Previous preview cards table has already been removed' unless ActiveRecord::Base.connection.table_exists? 'deprecated_preview_cards'
|
||||||
|
|
||||||
drop_table :preview_cards
|
drop_table :preview_cards
|
||||||
rename_table :deprecated_preview_cards, :preview_cards
|
rename_table :deprecated_preview_cards, :preview_cards
|
||||||
else
|
|
||||||
raise ActiveRecord::IrreversibleMigration, 'Previous preview cards table has already been removed'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -105,7 +105,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
notifications_about_direct_statuses.includes(:account, mention: { status: [:account, mentions: :account] }).find_each do |notification|
|
notifications_about_direct_statuses.includes(:account, mention: { status: [:account, { mentions: :account }] }).find_each do |notification|
|
||||||
MigrationAccountConversation.add_status(notification.account, notification.target_status)
|
MigrationAccountConversation.add_status(notification.account, notification.target_status)
|
||||||
migrated += 1
|
migrated += 1
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class PreserveOldLayoutForExistingUsers < ActiveRecord::Migration[5.2]
|
||||||
# on the to-be-changed default
|
# on the to-be-changed default
|
||||||
|
|
||||||
User.where(User.arel_table[:current_sign_in_at].gteq(1.month.ago)).find_each do |user|
|
User.where(User.arel_table[:current_sign_in_at].gteq(1.month.ago)).find_each do |user|
|
||||||
next if Setting.unscoped.where(thing_type: 'User', thing_id: user.id, var: 'advanced_layout').exists?
|
next if Setting.unscoped.exists?(thing_type: 'User', thing_id: user.id, var: 'advanced_layout')
|
||||||
|
|
||||||
user.settings.advanced_layout = true
|
user.settings.advanced_layout = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AddAllowWithApprovalToEmailDomainBlocks < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
add_column :email_domain_blocks, :allow_with_approval, :boolean, default: false, null: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,36 +6,55 @@ class MigrateSettingsToUserRoles < ActiveRecord::Migration[6.1]
|
||||||
class UserRole < ApplicationRecord; end
|
class UserRole < ApplicationRecord; end
|
||||||
|
|
||||||
def up
|
def up
|
||||||
owner_role = UserRole.find_by(name: 'Owner')
|
process_role_everyone
|
||||||
admin_role = UserRole.find_by(name: 'Admin')
|
process_role_owner
|
||||||
moderator_role = UserRole.find_by(name: 'Moderator')
|
process_role_admin
|
||||||
|
process_role_moderator
|
||||||
|
end
|
||||||
|
|
||||||
|
def down; end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def process_role_everyone
|
||||||
everyone_role = UserRole.find_by(id: -99)
|
everyone_role = UserRole.find_by(id: -99)
|
||||||
|
return unless everyone_role
|
||||||
|
|
||||||
min_invite_role = Setting.min_invite_role
|
|
||||||
show_staff_badge = Setting.show_staff_badge
|
|
||||||
|
|
||||||
if everyone_role
|
|
||||||
everyone_role.permissions &= ~::UserRole::FLAGS[:invite_users] unless min_invite_role == 'user'
|
everyone_role.permissions &= ~::UserRole::FLAGS[:invite_users] unless min_invite_role == 'user'
|
||||||
everyone_role.save
|
everyone_role.save
|
||||||
end
|
end
|
||||||
|
|
||||||
if owner_role
|
def process_role_owner
|
||||||
|
owner_role = UserRole.find_by(name: 'Owner')
|
||||||
|
return unless owner_role
|
||||||
|
|
||||||
owner_role.highlighted = show_staff_badge
|
owner_role.highlighted = show_staff_badge
|
||||||
owner_role.save
|
owner_role.save
|
||||||
end
|
end
|
||||||
|
|
||||||
if admin_role
|
def process_role_admin
|
||||||
|
admin_role = UserRole.find_by(name: 'Admin')
|
||||||
|
return unless admin_role
|
||||||
|
|
||||||
admin_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(admin moderator).include?(min_invite_role)
|
admin_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(admin moderator).include?(min_invite_role)
|
||||||
admin_role.highlighted = show_staff_badge
|
admin_role.highlighted = show_staff_badge
|
||||||
admin_role.save
|
admin_role.save
|
||||||
end
|
end
|
||||||
|
|
||||||
if moderator_role
|
def process_role_moderator
|
||||||
|
moderator_role = UserRole.find_by(name: 'Moderator')
|
||||||
|
return unless moderator_role
|
||||||
|
|
||||||
moderator_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(moderator).include?(min_invite_role)
|
moderator_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(moderator).include?(min_invite_role)
|
||||||
moderator_role.highlighted = show_staff_badge
|
moderator_role.highlighted = show_staff_badge
|
||||||
moderator_role.save
|
moderator_role.save
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def min_invite_role
|
||||||
|
Setting.min_invite_role
|
||||||
end
|
end
|
||||||
|
|
||||||
def down; end
|
def show_staff_badge
|
||||||
|
Setting.show_staff_badge
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.1].define(version: 2023_12_12_073317) do
|
ActiveRecord::Schema[7.1].define(version: 2023_12_22_100226) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
|
@ -435,6 +435,7 @@ ActiveRecord::Schema[7.1].define(version: 2023_12_12_073317) do
|
||||||
t.datetime "created_at", precision: nil, null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", precision: nil, null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
t.bigint "parent_id"
|
t.bigint "parent_id"
|
||||||
|
t.boolean "allow_with_approval", default: false, null: false
|
||||||
t.index ["domain"], name: "index_email_domain_blocks_on_domain", unique: true
|
t.index ["domain"], name: "index_email_domain_blocks_on_domain", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -48,19 +48,31 @@ module Mastodon::CLI
|
||||||
|
|
||||||
exit(1) unless ask('Type in the domain of the server to confirm:') == Rails.configuration.x.local_domain
|
exit(1) unless ask('Type in the domain of the server to confirm:') == Rails.configuration.x.local_domain
|
||||||
|
|
||||||
say('This operation WILL NOT be reversible.', :yellow)
|
say(<<~WARNING, :yellow)
|
||||||
say('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.', :yellow)
|
This operation WILL NOT be reversible.
|
||||||
say('The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).', :yellow)
|
While the data won't be erased locally, the server will be in a BROKEN STATE afterwards.
|
||||||
|
The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).
|
||||||
|
WARNING
|
||||||
|
|
||||||
exit(1) if no?('Are you sure you want to proceed?')
|
exit(1) if no?('Are you sure you want to proceed?')
|
||||||
|
|
||||||
self_destruct_value = Rails.application.message_verifier('self-destruct').generate(Rails.configuration.x.local_domain)
|
say(<<~INSTRUCTIONS, :green)
|
||||||
say('To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:', :green)
|
To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:
|
||||||
say(" SELF_DESTRUCT=#{self_destruct_value}", :green)
|
SELF_DESTRUCT=#{self_destruct_value}
|
||||||
say("\nYou can re-run this command to see the state of the self-destruct process.", :green)
|
You can re-run this command to see the state of the self-destruct process.
|
||||||
|
INSTRUCTIONS
|
||||||
rescue Interrupt
|
rescue Interrupt
|
||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def self_destruct_value
|
||||||
|
Rails
|
||||||
|
.application
|
||||||
|
.message_verifier('self-destruct')
|
||||||
|
.generate(Rails.configuration.x.local_domain)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,7 +34,7 @@ REDIS_CACHE_PARAMS = {
|
||||||
driver: :hiredis,
|
driver: :hiredis,
|
||||||
url: ENV['CACHE_REDIS_URL'],
|
url: ENV['CACHE_REDIS_URL'],
|
||||||
expires_in: 10.minutes,
|
expires_in: 10.minutes,
|
||||||
namespace: cache_namespace,
|
namespace: "#{cache_namespace}:7.1",
|
||||||
connect_timeout: 5,
|
connect_timeout: 5,
|
||||||
pool: {
|
pool: {
|
||||||
size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
|
size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
|
||||||
|
|
|
@ -205,7 +205,7 @@
|
||||||
"prettier": "^3.0.0",
|
"prettier": "^3.0.0",
|
||||||
"react-test-renderer": "^18.2.0",
|
"react-test-renderer": "^18.2.0",
|
||||||
"stylelint": "^16.0.2",
|
"stylelint": "^16.0.2",
|
||||||
"stylelint-config-standard-scss": "^12.0.0",
|
"stylelint-config-standard-scss": "^13.0.0",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.0.4",
|
||||||
"webpack-dev-server": "^3.11.3",
|
"webpack-dev-server": "^3.11.3",
|
||||||
"yargs": "^17.7.2"
|
"yargs": "^17.7.2"
|
||||||
|
|
|
@ -12,13 +12,14 @@ RSpec.describe Admin::EmailDomainBlocksController do
|
||||||
describe 'GET #index' do
|
describe 'GET #index' do
|
||||||
around do |example|
|
around do |example|
|
||||||
default_per_page = EmailDomainBlock.default_per_page
|
default_per_page = EmailDomainBlock.default_per_page
|
||||||
EmailDomainBlock.paginates_per 1
|
EmailDomainBlock.paginates_per 2
|
||||||
example.run
|
example.run
|
||||||
EmailDomainBlock.paginates_per default_per_page
|
EmailDomainBlock.paginates_per default_per_page
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
2.times { Fabricate(:email_domain_block) }
|
2.times { Fabricate(:email_domain_block) }
|
||||||
|
Fabricate(:email_domain_block, allow_with_approval: true)
|
||||||
get :index, params: { page: 2 }
|
get :index, params: { page: 2 }
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
@ -34,6 +35,16 @@ RSpec.describe Admin::EmailDomainBlocksController do
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
context 'when resolve button is pressed' do
|
context 'when resolve button is pressed' do
|
||||||
before do
|
before do
|
||||||
|
resolver = instance_double(Resolv::DNS)
|
||||||
|
|
||||||
|
allow(resolver).to receive(:getresources)
|
||||||
|
.with('example.com', Resolv::DNS::Resource::IN::MX)
|
||||||
|
.and_return([])
|
||||||
|
allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
|
||||||
|
allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
|
||||||
|
allow(resolver).to receive(:timeouts=).and_return(nil)
|
||||||
|
allow(Resolv::DNS).to receive(:open).and_yield(resolver)
|
||||||
|
|
||||||
post :create, params: { email_domain_block: { domain: 'example.com' } }
|
post :create, params: { email_domain_block: { domain: 'example.com' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -135,6 +135,25 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when user has an email address requiring approval' do
|
||||||
|
subject do
|
||||||
|
Setting.registrations_mode = 'open'
|
||||||
|
Fabricate(:email_domain_block, allow_with_approval: true, domain: 'example.com')
|
||||||
|
request.headers['Accept-Language'] = accept_language
|
||||||
|
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates unapproved user and redirects to setup' do
|
||||||
|
subject
|
||||||
|
expect(response).to redirect_to auth_setup_path
|
||||||
|
|
||||||
|
user = User.find_by(email: 'test@example.com')
|
||||||
|
expect(user).to_not be_nil
|
||||||
|
expect(user.locale).to eq(accept_language)
|
||||||
|
expect(user.approved).to be(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'with Approval-based registrations without invite' do
|
context 'with Approval-based registrations without invite' do
|
||||||
subject do
|
subject do
|
||||||
Setting.registrations_mode = 'approved'
|
Setting.registrations_mode = 'approved'
|
||||||
|
|
|
@ -22,7 +22,7 @@ describe 'Admin::Accounts' do
|
||||||
|
|
||||||
context 'without selecting any accounts' do
|
context 'without selecting any accounts' do
|
||||||
it 'displays a notice about account selection' do
|
it 'displays a notice about account selection' do
|
||||||
click_button button_for_suspend
|
click_on button_for_suspend
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
@ -32,7 +32,7 @@ describe 'Admin::Accounts' do
|
||||||
it 'suspends the account' do
|
it 'suspends the account' do
|
||||||
batch_checkbox_for(approved_user_account).check
|
batch_checkbox_for(approved_user_account).check
|
||||||
|
|
||||||
click_button button_for_suspend
|
click_on button_for_suspend
|
||||||
|
|
||||||
expect(approved_user_account.reload).to be_suspended
|
expect(approved_user_account.reload).to be_suspended
|
||||||
end
|
end
|
||||||
|
@ -42,7 +42,7 @@ describe 'Admin::Accounts' do
|
||||||
it 'approves the account user' do
|
it 'approves the account user' do
|
||||||
batch_checkbox_for(unapproved_user_account).check
|
batch_checkbox_for(unapproved_user_account).check
|
||||||
|
|
||||||
click_button button_for_approve
|
click_on button_for_approve
|
||||||
|
|
||||||
expect(unapproved_user_account.reload.user).to be_approved
|
expect(unapproved_user_account.reload.user).to be_approved
|
||||||
end
|
end
|
||||||
|
@ -52,7 +52,7 @@ describe 'Admin::Accounts' do
|
||||||
it 'rejects and removes the account' do
|
it 'rejects and removes the account' do
|
||||||
batch_checkbox_for(unapproved_user_account).check
|
batch_checkbox_for(unapproved_user_account).check
|
||||||
|
|
||||||
click_button button_for_reject
|
click_on button_for_reject
|
||||||
|
|
||||||
expect { unapproved_user_account.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { unapproved_user_account.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::CustomEmojis' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_enable
|
click_on button_for_enable
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,7 @@ describe 'blocking domains through the moderation interface' do
|
||||||
|
|
||||||
fill_in 'domain_block_domain', with: 'example.com'
|
fill_in 'domain_block_domain', with: 'example.com'
|
||||||
select I18n.t('admin.domain_blocks.new.severity.silence'), from: 'domain_block_severity'
|
select I18n.t('admin.domain_blocks.new.severity.silence'), from: 'domain_block_severity'
|
||||||
click_button I18n.t('admin.domain_blocks.new.create')
|
click_on I18n.t('admin.domain_blocks.new.create')
|
||||||
|
|
||||||
expect(DomainBlock.exists?(domain: 'example.com', severity: 'silence')).to be true
|
expect(DomainBlock.exists?(domain: 'example.com', severity: 'silence')).to be true
|
||||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||||
|
@ -27,14 +27,14 @@ describe 'blocking domains through the moderation interface' do
|
||||||
|
|
||||||
fill_in 'domain_block_domain', with: 'example.com'
|
fill_in 'domain_block_domain', with: 'example.com'
|
||||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||||
click_button I18n.t('admin.domain_blocks.new.create')
|
click_on I18n.t('admin.domain_blocks.new.create')
|
||||||
|
|
||||||
# It doesn't immediately block but presents a confirmation screen
|
# It doesn't immediately block but presents a confirmation screen
|
||||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||||
|
|
||||||
# Confirming creates a block
|
# Confirming creates a block
|
||||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||||
|
|
||||||
expect(DomainBlock.exists?(domain: 'example.com', severity: 'suspend')).to be true
|
expect(DomainBlock.exists?(domain: 'example.com', severity: 'suspend')).to be true
|
||||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||||
|
@ -49,14 +49,14 @@ describe 'blocking domains through the moderation interface' do
|
||||||
|
|
||||||
fill_in 'domain_block_domain', with: 'example.com'
|
fill_in 'domain_block_domain', with: 'example.com'
|
||||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||||
click_button I18n.t('admin.domain_blocks.new.create')
|
click_on I18n.t('admin.domain_blocks.new.create')
|
||||||
|
|
||||||
# It doesn't immediately block but presents a confirmation screen
|
# It doesn't immediately block but presents a confirmation screen
|
||||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||||
|
|
||||||
# Confirming updates the block
|
# Confirming updates the block
|
||||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||||
|
|
||||||
expect(domain_block.reload.severity).to eq 'suspend'
|
expect(domain_block.reload.severity).to eq 'suspend'
|
||||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||||
|
@ -71,14 +71,14 @@ describe 'blocking domains through the moderation interface' do
|
||||||
|
|
||||||
fill_in 'domain_block_domain', with: 'subdomain.example.com'
|
fill_in 'domain_block_domain', with: 'subdomain.example.com'
|
||||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||||
click_button I18n.t('admin.domain_blocks.new.create')
|
click_on I18n.t('admin.domain_blocks.new.create')
|
||||||
|
|
||||||
# It doesn't immediately block but presents a confirmation screen
|
# It doesn't immediately block but presents a confirmation screen
|
||||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))
|
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))
|
||||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||||
|
|
||||||
# Confirming creates the block
|
# Confirming creates the block
|
||||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||||
|
|
||||||
expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist
|
expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist
|
||||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||||
|
@ -96,14 +96,14 @@ describe 'blocking domains through the moderation interface' do
|
||||||
visit edit_admin_domain_block_path(domain_block)
|
visit edit_admin_domain_block_path(domain_block)
|
||||||
|
|
||||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||||
click_button I18n.t('generic.save_changes')
|
click_on I18n.t('generic.save_changes')
|
||||||
|
|
||||||
# It doesn't immediately block but presents a confirmation screen
|
# It doesn't immediately block but presents a confirmation screen
|
||||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||||
|
|
||||||
# Confirming updates the block
|
# Confirming updates the block
|
||||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||||
|
|
||||||
expect(domain_block.reload.severity).to eq 'suspend'
|
expect(domain_block.reload.severity).to eq 'suspend'
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::EmailDomainBlocks' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_delete
|
click_on button_for_delete
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::IpBlocks' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_delete
|
click_on button_for_delete
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,13 +11,13 @@ describe 'finding software updates through the admin interface' do
|
||||||
|
|
||||||
it 'shows a link to the software updates page, which links to release notes' do
|
it 'shows a link to the software updates page, which links to release notes' do
|
||||||
visit settings_profile_path
|
visit settings_profile_path
|
||||||
click_link I18n.t('admin.critical_update_pending')
|
click_on I18n.t('admin.critical_update_pending')
|
||||||
|
|
||||||
expect(page).to have_title(I18n.t('admin.software_updates.title'))
|
expect(page).to have_title(I18n.t('admin.software_updates.title'))
|
||||||
|
|
||||||
expect(page).to have_content('99.99.99')
|
expect(page).to have_content('99.99.99')
|
||||||
|
|
||||||
click_link I18n.t('admin.software_updates.release_notes')
|
click_on I18n.t('admin.software_updates.release_notes')
|
||||||
expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true)
|
expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ describe 'Admin::Statuses' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_report
|
click_on button_for_report
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::Trends::Links::PreviewCardProviders' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_allow
|
click_on button_for_allow
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::Trends::Links' do
|
||||||
|
|
||||||
context 'without selecting any records' do
|
context 'without selecting any records' do
|
||||||
it 'displays a notice about selection' do
|
it 'displays a notice about selection' do
|
||||||
click_button button_for_allow
|
click_on button_for_allow
|
||||||
|
|
||||||
expect(page).to have_content(selection_error_text)
|
expect(page).to have_content(selection_error_text)
|
||||||
end
|
end
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue