diff --git a/.eslintrc.js b/.eslintrc.js
index 93ff1d7b59..480b274fad 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -109,7 +109,7 @@ module.exports = defineConfig({
'react/jsx-equals-spacing': 'error',
'react/jsx-no-bind': 'error',
'react/jsx-no-useless-fragment': 'error',
- 'react/jsx-no-target-blank': 'off',
+ 'react/jsx-no-target-blank': ['error', { allowReferrer: true }],
'react/jsx-tag-spacing': 'error',
'react/jsx-uses-react': 'off', // not needed with new JSX transform
'react/jsx-wrap-multilines': 'error',
diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml
index f379c56112..ffab4880e1 100644
--- a/.github/workflows/lint-css.yml
+++ b/.github/workflows/lint-css.yml
@@ -43,4 +43,4 @@ jobs:
uses: ./.github/actions/setup-javascript
- name: Stylelint
- run: yarn lint:css -f github
+ run: yarn lint:css --custom-formatter @csstools/stylelint-formatter-github
diff --git a/.rubocop/style.yml b/.rubocop/style.yml
index 03e35a70ac..7dd4299c3e 100644
--- a/.rubocop/style.yml
+++ b/.rubocop/style.yml
@@ -1,4 +1,7 @@
---
+Style/ArrayIntersect:
+ Enabled: false
+
Style/ClassAndModuleChildren:
Enabled: false
@@ -19,6 +22,16 @@ Style/HashSyntax:
EnforcedShorthandSyntax: either
EnforcedStyle: ruby19_no_mixed_keys
+Style/IfUnlessModifier:
+ Exclude:
+ - '**/*.haml'
+
+Style/KeywordArgumentsMerging:
+ Enabled: false
+
+Style/MultipleComparison:
+ Enabled: false
+
Style/NumericLiterals:
AllowedPatterns:
- \d{4}_\d{2}_\d{2}_\d{6}
@@ -37,6 +50,9 @@ Style/RedundantFetchBlock:
Style/RescueStandardError:
EnforcedStyle: implicit
+Style/SafeNavigationChainLength:
+ Enabled: false
+
Style/SymbolArray:
Enabled: false
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index cd5d365c67..d128d3f679 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
-# using RuboCop version 1.66.1.
+# using RuboCop version 1.69.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
@@ -39,7 +39,6 @@ Rails/OutputSafety:
# Configuration parameters: AllowedVars.
Style/FetchEnvVar:
Exclude:
- - 'app/lib/translation_service.rb'
- 'config/environments/production.rb'
- 'config/initializers/2_limited_federation_mode.rb'
- 'config/initializers/3_omniauth.rb'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ebc166a48a..743cc36ef5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,48 @@
All notable changes to this project will be documented in this file.
+## [4.3.2] - 2024-12-03
+
+### Added
+
+- Add `tootctl feeds vacuum` (#33065 by @ClearlyClaire)
+- Add error message when user tries to follow their own account (#31910 by @lenikadali)
+- Add client_secret_expires_at to OAuth Applications (#30317 by @ThisIsMissEm)
+
+### Changed
+
+- Change design of Content Warnings and filters (#32543 by @ClearlyClaire)
+
+### Fixed
+
+- Fix processing incoming post edits with mentions to unresolvable accounts (#33129 by @ClearlyClaire)
+- Fix error when including multiple instances of `embed.js` (#33107 by @YKWeyer)
+- Fix inactive users' timelines being backfilled on follow and unsuspend (#33094 by @ClearlyClaire)
+- Fix direct inbox delivery pushing posts into inactive followers' timelines (#33067 by @ClearlyClaire)
+- Fix `TagFollow` records not being correctly handled in account operations (#33063 by @ClearlyClaire)
+- Fix pushing hashtag-followed posts to feeds of inactive users (#33018 by @Gargron)
+- Fix duplicate notifications in notification groups when using slow mode (#33014 by @ClearlyClaire)
+- Fix posts made in the future being allowed to trend (#32996 by @ClearlyClaire)
+- Fix uploading higher-than-wide GIF profile picture with libvips enabled (#32911 by @ClearlyClaire)
+- Fix domain attribution field having autocorrect and autocapitalize enabled (#32903 by @ClearlyClaire)
+- Fix titles being escaped twice (#32889 by @ClearlyClaire)
+- Fix list creation limit check (#32869 by @ClearlyClaire)
+- Fix error in `tootctl email_domain_blocks` when supplying `--with-dns-records` (#32863 by @mjankowski)
+- Fix `min_id` and `max_id` causing error in search API (#32857 by @Gargron)
+- Fix inefficiencies when processing removal of posts that use featured tags (#32787 by @ClearlyClaire)
+- Fix alt-text pop-in not using the translated description (#32766 by @ClearlyClaire)
+- Fix preview cards with long titles erroneously causing layout changes (#32678 by @ClearlyClaire)
+- Fix embed modal layout on mobile (#32641 by @DismalShadowX)
+- Fix and improve batch attachment deletion handling when using OpenStack Swift (#32637 by @hugogameiro)
+- Fix blocks not being applied on link timeline (#32625 by @tribela)
+- Fix follow counters being incorrectly changed (#32622 by @oneiros)
+- Fix 'unknown' media attachment type rendering (#32613 and #32713 by @ThisIsMissEm and @renatolond)
+- Fix tl language native name (#32606 by @seav)
+
+### Security
+
+- Update dependencies
+
## [4.3.1] - 2024-10-21
### Added
diff --git a/Gemfile.lock b/Gemfile.lock
index 8cbceae214..6d125f4a96 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,29 +10,29 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.2.2)
- actionpack (= 7.2.2)
- activesupport (= 7.2.2)
+ actioncable (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.2.2)
- actionpack (= 7.2.2)
- activejob (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ actionmailbox (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ activejob (= 7.2.2.1)
+ activerecord (= 7.2.2.1)
+ activestorage (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
mail (>= 2.8.0)
- actionmailer (7.2.2)
- actionpack (= 7.2.2)
- actionview (= 7.2.2)
- activejob (= 7.2.2)
- activesupport (= 7.2.2)
+ actionmailer (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ actionview (= 7.2.2.1)
+ activejob (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.2.2)
- actionview (= 7.2.2)
- activesupport (= 7.2.2)
+ actionpack (7.2.2.1)
+ actionview (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4, < 3.2)
@@ -41,15 +41,15 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (7.2.2)
- actionpack (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ actiontext (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ activerecord (= 7.2.2.1)
+ activestorage (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.2.2)
- activesupport (= 7.2.2)
+ actionview (7.2.2.1)
+ activesupport (= 7.2.2.1)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -59,22 +59,22 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
- activejob (7.2.2)
- activesupport (= 7.2.2)
+ activejob (7.2.2.1)
+ activesupport (= 7.2.2.1)
globalid (>= 0.3.6)
- activemodel (7.2.2)
- activesupport (= 7.2.2)
- activerecord (7.2.2)
- activemodel (= 7.2.2)
- activesupport (= 7.2.2)
+ activemodel (7.2.2.1)
+ activesupport (= 7.2.2.1)
+ activerecord (7.2.2.1)
+ activemodel (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
timeout (>= 0.4.0)
- activestorage (7.2.2)
- actionpack (= 7.2.2)
- activejob (= 7.2.2)
- activerecord (= 7.2.2)
- activesupport (= 7.2.2)
+ activestorage (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ activejob (= 7.2.2.1)
+ activerecord (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
marcel (~> 1.0)
- activesupport (7.2.2)
+ activesupport (7.2.2.1)
base64
benchmark (>= 0.3)
bigdecimal
@@ -103,7 +103,7 @@ GEM
aws-sdk-kms (1.96.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sigv4 (~> 1.5)
- aws-sdk-s3 (1.176.0)
+ aws-sdk-s3 (1.176.1)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
@@ -175,7 +175,7 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
- date (3.4.0)
+ date (3.4.1)
debug (1.9.2)
irb (~> 1.10)
reline (>= 0.3.8)
@@ -199,9 +199,9 @@ GEM
activerecord (>= 4.2, < 9.0)
docile (1.4.1)
domain_name (0.6.20240107)
- doorkeeper (5.8.0)
+ doorkeeper (5.8.1)
railties (>= 5)
- dotenv (3.1.4)
+ dotenv (3.1.5)
drb (2.2.1)
elasticsearch (7.17.11)
elasticsearch-api (= 7.17.11)
@@ -319,7 +319,7 @@ GEM
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.7.2)
- irb (1.14.1)
+ irb (1.14.2)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jd-paperclip-azure (3.0.0)
@@ -327,7 +327,7 @@ GEM
azure-blob (~> 0.5.2)
hashie (~> 5.0)
jmespath (1.6.2)
- json (2.8.1)
+ json (2.9.0)
json-canonicalization (1.0.0)
json-jwt (1.15.3.1)
activesupport (>= 4.2)
@@ -384,7 +384,7 @@ GEM
llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
- logger (1.6.1)
+ logger (1.6.2)
lograge (0.14.0)
actionpack (>= 4)
activesupport (>= 4)
@@ -409,7 +409,7 @@ GEM
mime-types-data (3.2024.1105)
mini_mime (1.1.5)
mini_portile2 (2.8.8)
- minitest (5.25.2)
+ minitest (5.25.4)
msgpack (1.7.5)
multi_json (1.15.0)
mutex_m (0.3.0)
@@ -426,7 +426,7 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.4)
- nokogiri (1.16.8)
+ nokogiri (1.17.2)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.7)
@@ -579,7 +579,8 @@ GEM
activesupport (>= 7.0.0)
rack
railties (>= 7.0.0)
- psych (5.2.0)
+ psych (5.2.1)
+ date
stringio
public_suffix (6.0.1)
puma (6.5.0)
@@ -608,23 +609,23 @@ GEM
rack (< 3)
rack-test (2.1.0)
rack (>= 1.3)
- rackup (1.0.0)
+ rackup (1.0.1)
rack (< 3)
webrick
- rails (7.2.2)
- actioncable (= 7.2.2)
- actionmailbox (= 7.2.2)
- actionmailer (= 7.2.2)
- actionpack (= 7.2.2)
- actiontext (= 7.2.2)
- actionview (= 7.2.2)
- activejob (= 7.2.2)
- activemodel (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ rails (7.2.2.1)
+ actioncable (= 7.2.2.1)
+ actionmailbox (= 7.2.2.1)
+ actionmailer (= 7.2.2.1)
+ actionpack (= 7.2.2.1)
+ actiontext (= 7.2.2.1)
+ actionview (= 7.2.2.1)
+ activejob (= 7.2.2.1)
+ activemodel (= 7.2.2.1)
+ activerecord (= 7.2.2.1)
+ activestorage (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
bundler (>= 1.15.0)
- railties (= 7.2.2)
+ railties (= 7.2.2.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -639,9 +640,9 @@ GEM
rails-i18n (7.0.10)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (7.2.2)
- actionpack (= 7.2.2)
- activesupport (= 7.2.2)
+ railties (7.2.2.1)
+ actionpack (= 7.2.2.1)
+ activesupport (= 7.2.2.1)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -663,8 +664,8 @@ GEM
redis (>= 4)
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
- regexp_parser (2.9.2)
- reline (0.5.11)
+ regexp_parser (2.9.3)
+ reline (0.5.12)
io-console (~> 0.5)
request_store (1.6.0)
rack (>= 1.4)
@@ -707,21 +708,21 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.1)
- rubocop (1.66.1)
+ rubocop (1.69.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
- regexp_parser (>= 2.4, < 3.0)
- rubocop-ast (>= 1.32.2, < 2.0)
+ regexp_parser (>= 2.9.3, < 3.0)
+ rubocop-ast (>= 1.36.2, < 2.0)
ruby-progressbar (~> 1.7)
- unicode-display_width (>= 2.4.0, < 3.0)
- rubocop-ast (1.32.3)
+ unicode-display_width (>= 2.4.0, < 4.0)
+ rubocop-ast (1.36.2)
parser (>= 3.3.1.0)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
- rubocop-performance (1.22.1)
+ rubocop-performance (1.23.0)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rails (2.27.0)
@@ -729,7 +730,7 @@ GEM
rack (>= 1.1)
rubocop (>= 1.52.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
- rubocop-rspec (3.2.0)
+ rubocop-rspec (3.3.0)
rubocop (~> 1.61)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
@@ -837,7 +838,7 @@ GEM
unf_ext (0.0.9.1)
unicode-display_width (2.6.0)
uri (0.13.1)
- useragent (0.16.10)
+ useragent (0.16.11)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
@@ -866,7 +867,7 @@ GEM
rack-proxy (>= 0.6.1)
railties (>= 5.2)
semantic_range (>= 2.3.0)
- webrick (1.9.0)
+ webrick (1.9.1)
websocket (1.2.11)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
diff --git a/Vagrantfile b/Vagrantfile
index 89f5536edc..ce456060cd 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -174,7 +174,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if config.vm.networks.any? { |type, options| type == :private_network }
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'actimeo=1']
else
- config.vm.synced_folder ".", "/vagrant"
+ config.vm.synced_folder ".", "/vagrant", type: "rsync", create: true, rsync__args: ["--verbose", "--archive", "--delete", "-z"]
end
# Otherwise, you can access the site at http://localhost:3000 and http://localhost:4000 , http://localhost:8080
diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb
index 48685db17a..3dca3a9614 100644
--- a/app/controllers/admin/base_controller.rb
+++ b/app/controllers/admin/base_controller.rb
@@ -8,6 +8,7 @@ module Admin
layout 'admin'
before_action :set_cache_headers
+ before_action :set_referrer_policy_header
after_action :verify_authorized
@@ -17,6 +18,10 @@ module Admin
response.cache_control.replace(private: true, no_store: true)
end
+ def set_referrer_policy_header
+ response.headers['Referrer-Policy'] = 'same-origin'
+ end
+
def set_user
@user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
end
diff --git a/app/controllers/admin/terms_of_service/distributions_controller.rb b/app/controllers/admin/terms_of_service/distributions_controller.rb
new file mode 100644
index 0000000000..c639b083dd
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/distributions_controller.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::DistributionsController < Admin::BaseController
+ before_action :set_terms_of_service
+
+ def create
+ authorize @terms_of_service, :distribute?
+ @terms_of_service.touch(:notification_sent_at)
+ Admin::DistributeTermsOfServiceNotificationWorker.perform_async(@terms_of_service.id)
+ redirect_to admin_terms_of_service_index_path
+ end
+
+ private
+
+ def set_terms_of_service
+ @terms_of_service = TermsOfService.find(params[:terms_of_service_id])
+ end
+end
diff --git a/app/controllers/admin/terms_of_service/drafts_controller.rb b/app/controllers/admin/terms_of_service/drafts_controller.rb
new file mode 100644
index 0000000000..5d32c0bd83
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/drafts_controller.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::DraftsController < Admin::BaseController
+ before_action :set_terms_of_service
+
+ def show
+ authorize :terms_of_service, :create?
+ end
+
+ def update
+ authorize @terms_of_service, :update?
+
+ @terms_of_service.published_at = Time.now.utc if params[:action_type] == 'publish'
+
+ if @terms_of_service.update(resource_params)
+ log_action(:publish, @terms_of_service) if @terms_of_service.published?
+ redirect_to @terms_of_service.published? ? admin_terms_of_service_index_path : admin_terms_of_service_draft_path
+ else
+ render :show
+ end
+ end
+
+ private
+
+ def set_terms_of_service
+ @terms_of_service = TermsOfService.draft.first || TermsOfService.new(text: current_terms_of_service&.text)
+ end
+
+ def current_terms_of_service
+ TermsOfService.live.first
+ end
+
+ def resource_params
+ params.require(:terms_of_service).permit(:text, :changelog)
+ end
+end
diff --git a/app/controllers/admin/terms_of_service/generates_controller.rb b/app/controllers/admin/terms_of_service/generates_controller.rb
new file mode 100644
index 0000000000..28037674a3
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/generates_controller.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::GeneratesController < Admin::BaseController
+ before_action :set_instance_presenter
+
+ def show
+ authorize :terms_of_service, :create?
+
+ @generator = TermsOfService::Generator.new(
+ domain: @instance_presenter.domain,
+ admin_email: @instance_presenter.contact.email
+ )
+ end
+
+ def create
+ authorize :terms_of_service, :create?
+
+ @generator = TermsOfService::Generator.new(resource_params)
+
+ if @generator.valid?
+ TermsOfService.create!(text: @generator.render)
+ redirect_to admin_terms_of_service_draft_path
+ else
+ render :show
+ end
+ end
+
+ private
+
+ def set_instance_presenter
+ @instance_presenter = InstancePresenter.new
+ end
+
+ def resource_params
+ params.require(:terms_of_service_generator).permit(*TermsOfService::Generator::VARIABLES)
+ end
+end
diff --git a/app/controllers/admin/terms_of_service/histories_controller.rb b/app/controllers/admin/terms_of_service/histories_controller.rb
new file mode 100644
index 0000000000..8f12341aea
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/histories_controller.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::HistoriesController < Admin::BaseController
+ def show
+ authorize :terms_of_service, :index?
+ @terms_of_service = TermsOfService.published.all
+ end
+end
diff --git a/app/controllers/admin/terms_of_service/previews_controller.rb b/app/controllers/admin/terms_of_service/previews_controller.rb
new file mode 100644
index 0000000000..0a1a966751
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/previews_controller.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::PreviewsController < Admin::BaseController
+ before_action :set_terms_of_service
+
+ def show
+ authorize @terms_of_service, :distribute?
+ @user_count = @terms_of_service.scope_for_notification.count
+ end
+
+ private
+
+ def set_terms_of_service
+ @terms_of_service = TermsOfService.find(params[:terms_of_service_id])
+ end
+end
diff --git a/app/controllers/admin/terms_of_service/tests_controller.rb b/app/controllers/admin/terms_of_service/tests_controller.rb
new file mode 100644
index 0000000000..e2483c1005
--- /dev/null
+++ b/app/controllers/admin/terms_of_service/tests_controller.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfService::TestsController < Admin::BaseController
+ before_action :set_terms_of_service
+
+ def create
+ authorize @terms_of_service, :distribute?
+ UserMailer.terms_of_service_changed(current_user, @terms_of_service).deliver_later!
+ redirect_to admin_terms_of_service_preview_path(@terms_of_service)
+ end
+
+ private
+
+ def set_terms_of_service
+ @terms_of_service = TermsOfService.find(params[:terms_of_service_id])
+ end
+end
diff --git a/app/controllers/admin/terms_of_service_controller.rb b/app/controllers/admin/terms_of_service_controller.rb
new file mode 100644
index 0000000000..f70bfd2071
--- /dev/null
+++ b/app/controllers/admin/terms_of_service_controller.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class Admin::TermsOfServiceController < Admin::BaseController
+ def index
+ authorize :terms_of_service, :index?
+ @terms_of_service = TermsOfService.live.first
+ end
+end
diff --git a/app/controllers/api/v1/instances/terms_of_services_controller.rb b/app/controllers/api/v1/instances/terms_of_services_controller.rb
new file mode 100644
index 0000000000..e9e8e8ef55
--- /dev/null
+++ b/app/controllers/api/v1/instances/terms_of_services_controller.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class Api::V1::Instances::TermsOfServicesController < Api::V1::Instances::BaseController
+ before_action :set_terms_of_service
+
+ def show
+ cache_even_if_authenticated!
+ render json: @terms_of_service, serializer: REST::PrivacyPolicySerializer
+ end
+
+ private
+
+ def set_terms_of_service
+ @terms_of_service = TermsOfService.live.first!
+ end
+end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7a858ed059..1b071e8655 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -70,7 +70,13 @@ class ApplicationController < ActionController::Base
end
def require_functional!
- redirect_to edit_user_registration_path unless current_user.functional?
+ return if current_user.functional?
+
+ if current_user.confirmed?
+ redirect_to edit_user_registration_path
+ else
+ redirect_to auth_setup_path
+ end
end
def skip_csrf_meta_tags?
diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb
index 4d94c80158..34c7599553 100644
--- a/app/controllers/auth/registrations_controller.rb
+++ b/app/controllers/auth/registrations_controller.rb
@@ -142,4 +142,12 @@ class Auth::RegistrationsController < Devise::RegistrationsController
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
+
+ def is_flashing_format? # rubocop:disable Naming/PredicateName
+ if params[:action] == 'create'
+ false # Disable flash messages for sign-up
+ else
+ super
+ end
+ end
end
diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb
index 249bb20a25..1d8ee43507 100644
--- a/app/controllers/concerns/web_app_controller_concern.rb
+++ b/app/controllers/concerns/web_app_controller_concern.rb
@@ -7,6 +7,7 @@ module WebAppControllerConcern
vary_by 'Accept, Accept-Language, Cookie'
before_action :redirect_unauthenticated_to_permalinks!
+ before_action :set_referer_header
content_security_policy do |p|
policy = ContentSecurityPolicy.new
@@ -41,4 +42,10 @@ module WebAppControllerConcern
end
end
end
+
+ protected
+
+ def set_referer_header
+ response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'origin' : 'same-origin')
+ end
end
diff --git a/app/controllers/terms_of_service_controller.rb b/app/controllers/terms_of_service_controller.rb
new file mode 100644
index 0000000000..672fb07915
--- /dev/null
+++ b/app/controllers/terms_of_service_controller.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class TermsOfServiceController < ApplicationController
+ include WebAppControllerConcern
+
+ skip_before_action :require_functional!
+
+ def show
+ expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
+ end
+end
diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb
index 8ba2d7acd3..dc7442ac33 100644
--- a/app/helpers/formatting_helper.rb
+++ b/app/helpers/formatting_helper.rb
@@ -68,6 +68,10 @@ module FormattingHelper
end
end
+ def markdown(text)
+ Redcarpet::Markdown.new(Redcarpet::Render::HTML, escape_html: true, no_images: true).render(text).html_safe # rubocop:disable Rails/OutputSafety
+ end
+
private
def wrapped_status_content_format(status)
diff --git a/app/javascript/entrypoints/embed.tsx b/app/javascript/entrypoints/embed.tsx
index f8c824d287..cb62727563 100644
--- a/app/javascript/entrypoints/embed.tsx
+++ b/app/javascript/entrypoints/embed.tsx
@@ -60,6 +60,10 @@ window.addEventListener('message', (e) => {
const data = e.data;
+ // Only set overflow to `hidden` once we got the expected `message` so the post can still be scrolled if
+ // embedded without parent Javascript support
+ document.body.style.overflow = 'hidden';
+
// We use a timeout to allow for the React page to render before calculating the height
afterInitialRender(() => {
window.parent.postMessage(
diff --git a/app/javascript/hooks/useLinks.ts b/app/javascript/hooks/useLinks.ts
index f08b9500da..c99f3f4199 100644
--- a/app/javascript/hooks/useLinks.ts
+++ b/app/javascript/hooks/useLinks.ts
@@ -2,6 +2,8 @@ import { useCallback } from 'react';
import { useHistory } from 'react-router-dom';
+import { isFulfilled, isRejected } from '@reduxjs/toolkit';
+
import { openURL } from 'mastodon/actions/search';
import { useAppDispatch } from 'mastodon/store';
@@ -28,12 +30,22 @@ export const useLinks = () => {
);
const handleMentionClick = useCallback(
- (element: HTMLAnchorElement) => {
- dispatch(
- openURL(element.href, history, () => {
+ async (element: HTMLAnchorElement) => {
+ const result = await dispatch(openURL({ url: element.href }));
+
+ if (isFulfilled(result)) {
+ if (result.payload.accounts[0]) {
+ history.push(`/@${result.payload.accounts[0].acct}`);
+ } else if (result.payload.statuses[0]) {
+ history.push(
+ `/@${result.payload.statuses[0].account.acct}/${result.payload.statuses[0].id}`,
+ );
+ } else {
window.location.href = element.href;
- }),
- );
+ }
+ } else if (isRejected(result)) {
+ window.location.href = element.href;
+ }
},
[dispatch, history],
);
@@ -48,7 +60,7 @@ export const useLinks = () => {
if (isMentionClick(target)) {
e.preventDefault();
- handleMentionClick(target);
+ void handleMentionClick(target);
} else if (isHashtagClick(target)) {
e.preventDefault();
handleHashtagClick(target);
diff --git a/app/javascript/mastodon/actions/importer/index.js b/app/javascript/mastodon/actions/importer/index.js
index ebf58b761a..380190a910 100644
--- a/app/javascript/mastodon/actions/importer/index.js
+++ b/app/javascript/mastodon/actions/importer/index.js
@@ -1,10 +1,12 @@
+import { createPollFromServerJSON } from 'mastodon/models/poll';
+
import { importAccounts } from '../accounts_typed';
-import { normalizeStatus, normalizePoll } from './normalizer';
+import { normalizeStatus } from './normalizer';
+import { importPolls } from './polls';
export const STATUS_IMPORT = 'STATUS_IMPORT';
export const STATUSES_IMPORT = 'STATUSES_IMPORT';
-export const POLLS_IMPORT = 'POLLS_IMPORT';
export const FILTERS_IMPORT = 'FILTERS_IMPORT';
function pushUnique(array, object) {
@@ -25,10 +27,6 @@ export function importFilters(filters) {
return { type: FILTERS_IMPORT, filters };
}
-export function importPolls(polls) {
- return { type: POLLS_IMPORT, polls };
-}
-
export function importFetchedAccount(account) {
return importFetchedAccounts([account]);
}
@@ -77,7 +75,7 @@ export function importFetchedStatuses(statuses) {
}
if (status.poll?.id) {
- pushUnique(polls, normalizePoll(status.poll, getState().getIn(['polls', status.poll.id])));
+ pushUnique(polls, createPollFromServerJSON(status.poll, getState().polls.get(status.poll.id)));
}
if (status.card) {
@@ -87,15 +85,9 @@ export function importFetchedStatuses(statuses) {
statuses.forEach(processStatus);
- dispatch(importPolls(polls));
+ dispatch(importPolls({ polls }));
dispatch(importFetchedAccounts(accounts));
dispatch(importStatuses(normalStatuses));
dispatch(importFilters(filters));
};
}
-
-export function importFetchedPoll(poll) {
- return (dispatch, getState) => {
- dispatch(importPolls([normalizePoll(poll, getState().getIn(['polls', poll.id]))]));
- };
-}
diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js
index d9e9fef0c6..b643cf5613 100644
--- a/app/javascript/mastodon/actions/importer/normalizer.js
+++ b/app/javascript/mastodon/actions/importer/normalizer.js
@@ -1,15 +1,12 @@
import escapeTextContentForBrowser from 'escape-html';
+import { makeEmojiMap } from 'mastodon/models/custom_emoji';
+
import emojify from '../../features/emoji/emoji';
import { expandSpoilers, me } from '../../initial_state';
const domParser = new DOMParser();
-const makeEmojiMap = emojis => emojis.reduce((obj, emoji) => {
- obj[`:${emoji.shortcode}:`] = emoji;
- return obj;
-}, {});
-
export function searchTextFromRawStatus (status) {
const spoilerText = status.spoiler_text || '';
const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(/
/g, '\n').replace(/<\/p>
/g, '\n\n');
@@ -140,38 +137,6 @@ export function normalizeStatusTranslation(translation, status) {
return normalTranslation;
}
-export function normalizePoll(poll, normalOldPoll) {
- const normalPoll = { ...poll };
- const emojiMap = makeEmojiMap(poll.emojis);
-
- normalPoll.options = poll.options.map((option, index) => {
- const normalOption = {
- ...option,
- voted: poll.own_votes && poll.own_votes.includes(index),
- titleHtml: emojify(escapeTextContentForBrowser(option.title), emojiMap),
- };
-
- if (normalOldPoll && normalOldPoll.getIn(['options', index, 'title']) === option.title) {
- normalOption.translation = normalOldPoll.getIn(['options', index, 'translation']);
- }
-
- return normalOption;
- });
-
- return normalPoll;
-}
-
-export function normalizePollOptionTranslation(translation, poll) {
- const emojiMap = makeEmojiMap(poll.get('emojis').toJS());
-
- const normalTranslation = {
- ...translation,
- titleHtml: emojify(escapeTextContentForBrowser(translation.title), emojiMap),
- };
-
- return normalTranslation;
-}
-
export function normalizeAnnouncement(announcement) {
const normalAnnouncement = { ...announcement };
const emojiMap = makeEmojiMap(normalAnnouncement.emojis);
diff --git a/app/javascript/mastodon/actions/importer/polls.ts b/app/javascript/mastodon/actions/importer/polls.ts
new file mode 100644
index 0000000000..5bbe7d57d6
--- /dev/null
+++ b/app/javascript/mastodon/actions/importer/polls.ts
@@ -0,0 +1,7 @@
+import { createAction } from '@reduxjs/toolkit';
+
+import type { Poll } from 'mastodon/models/poll';
+
+export const importPolls = createAction<{ polls: Poll[] }>(
+ 'poll/importMultiple',
+);
diff --git a/app/javascript/mastodon/actions/polls.js b/app/javascript/mastodon/actions/polls.js
deleted file mode 100644
index aa49341444..0000000000
--- a/app/javascript/mastodon/actions/polls.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import api from '../api';
-
-import { importFetchedPoll } from './importer';
-
-export const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST';
-export const POLL_VOTE_SUCCESS = 'POLL_VOTE_SUCCESS';
-export const POLL_VOTE_FAIL = 'POLL_VOTE_FAIL';
-
-export const POLL_FETCH_REQUEST = 'POLL_FETCH_REQUEST';
-export const POLL_FETCH_SUCCESS = 'POLL_FETCH_SUCCESS';
-export const POLL_FETCH_FAIL = 'POLL_FETCH_FAIL';
-
-export const vote = (pollId, choices) => (dispatch) => {
- dispatch(voteRequest());
-
- api().post(`/api/v1/polls/${pollId}/votes`, { choices })
- .then(({ data }) => {
- dispatch(importFetchedPoll(data));
- dispatch(voteSuccess(data));
- })
- .catch(err => dispatch(voteFail(err)));
-};
-
-export const fetchPoll = pollId => (dispatch) => {
- dispatch(fetchPollRequest());
-
- api().get(`/api/v1/polls/${pollId}`)
- .then(({ data }) => {
- dispatch(importFetchedPoll(data));
- dispatch(fetchPollSuccess(data));
- })
- .catch(err => dispatch(fetchPollFail(err)));
-};
-
-export const voteRequest = () => ({
- type: POLL_VOTE_REQUEST,
-});
-
-export const voteSuccess = poll => ({
- type: POLL_VOTE_SUCCESS,
- poll,
-});
-
-export const voteFail = error => ({
- type: POLL_VOTE_FAIL,
- error,
-});
-
-export const fetchPollRequest = () => ({
- type: POLL_FETCH_REQUEST,
-});
-
-export const fetchPollSuccess = poll => ({
- type: POLL_FETCH_SUCCESS,
- poll,
-});
-
-export const fetchPollFail = error => ({
- type: POLL_FETCH_FAIL,
- error,
-});
diff --git a/app/javascript/mastodon/actions/polls.ts b/app/javascript/mastodon/actions/polls.ts
new file mode 100644
index 0000000000..28f729394b
--- /dev/null
+++ b/app/javascript/mastodon/actions/polls.ts
@@ -0,0 +1,40 @@
+import { apiGetPoll, apiPollVote } from 'mastodon/api/polls';
+import type { ApiPollJSON } from 'mastodon/api_types/polls';
+import { createPollFromServerJSON } from 'mastodon/models/poll';
+import {
+ createAppAsyncThunk,
+ createDataLoadingThunk,
+} from 'mastodon/store/typed_functions';
+
+import { importPolls } from './importer/polls';
+
+export const importFetchedPoll = createAppAsyncThunk(
+ 'poll/importFetched',
+ (args: { poll: ApiPollJSON }, { dispatch, getState }) => {
+ const { poll } = args;
+
+ dispatch(
+ importPolls({
+ polls: [createPollFromServerJSON(poll, getState().polls.get(poll.id))],
+ }),
+ );
+ },
+);
+
+export const vote = createDataLoadingThunk(
+ 'poll/vote',
+ ({ pollId, choices }: { pollId: string; choices: string[] }) =>
+ apiPollVote(pollId, choices),
+ async (poll, { dispatch, discardLoadData }) => {
+ await dispatch(importFetchedPoll({ poll }));
+ return discardLoadData;
+ },
+);
+
+export const fetchPoll = createDataLoadingThunk(
+ 'poll/fetch',
+ ({ pollId }: { pollId: string }) => apiGetPoll(pollId),
+ async (poll, { dispatch }) => {
+ await dispatch(importFetchedPoll({ poll }));
+ },
+);
diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js
deleted file mode 100644
index bde17ae0db..0000000000
--- a/app/javascript/mastodon/actions/search.js
+++ /dev/null
@@ -1,215 +0,0 @@
-import { fromJS } from 'immutable';
-
-import { searchHistory } from 'mastodon/settings';
-
-import api from '../api';
-
-import { fetchRelationships } from './accounts';
-import { importFetchedAccounts, importFetchedStatuses } from './importer';
-
-export const SEARCH_CHANGE = 'SEARCH_CHANGE';
-export const SEARCH_CLEAR = 'SEARCH_CLEAR';
-export const SEARCH_SHOW = 'SEARCH_SHOW';
-
-export const SEARCH_FETCH_REQUEST = 'SEARCH_FETCH_REQUEST';
-export const SEARCH_FETCH_SUCCESS = 'SEARCH_FETCH_SUCCESS';
-export const SEARCH_FETCH_FAIL = 'SEARCH_FETCH_FAIL';
-
-export const SEARCH_EXPAND_REQUEST = 'SEARCH_EXPAND_REQUEST';
-export const SEARCH_EXPAND_SUCCESS = 'SEARCH_EXPAND_SUCCESS';
-export const SEARCH_EXPAND_FAIL = 'SEARCH_EXPAND_FAIL';
-
-export const SEARCH_HISTORY_UPDATE = 'SEARCH_HISTORY_UPDATE';
-
-export function changeSearch(value) {
- return {
- type: SEARCH_CHANGE,
- value,
- };
-}
-
-export function clearSearch() {
- return {
- type: SEARCH_CLEAR,
- };
-}
-
-export function submitSearch(type) {
- return (dispatch, getState) => {
- const value = getState().getIn(['search', 'value']);
- const signedIn = !!getState().getIn(['meta', 'me']);
-
- if (value.length === 0) {
- dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, '', type));
- return;
- }
-
- dispatch(fetchSearchRequest(type));
-
- api().get('/api/v2/search', {
- params: {
- q: value,
- resolve: signedIn,
- limit: 11,
- type,
- },
- }).then(response => {
- if (response.data.accounts) {
- dispatch(importFetchedAccounts(response.data.accounts));
- }
-
- if (response.data.statuses) {
- dispatch(importFetchedStatuses(response.data.statuses));
- }
-
- dispatch(fetchSearchSuccess(response.data, value, type));
- dispatch(fetchRelationships(response.data.accounts.map(item => item.id)));
- }).catch(error => {
- dispatch(fetchSearchFail(error));
- });
- };
-}
-
-export function fetchSearchRequest(searchType) {
- return {
- type: SEARCH_FETCH_REQUEST,
- searchType,
- };
-}
-
-export function fetchSearchSuccess(results, searchTerm, searchType) {
- return {
- type: SEARCH_FETCH_SUCCESS,
- results,
- searchType,
- searchTerm,
- };
-}
-
-export function fetchSearchFail(error) {
- return {
- type: SEARCH_FETCH_FAIL,
- error,
- };
-}
-
-export const expandSearch = type => (dispatch, getState) => {
- const value = getState().getIn(['search', 'value']);
- const offset = getState().getIn(['search', 'results', type]).size - 1;
-
- dispatch(expandSearchRequest(type));
-
- api().get('/api/v2/search', {
- params: {
- q: value,
- type,
- offset,
- limit: 11,
- },
- }).then(({ data }) => {
- if (data.accounts) {
- dispatch(importFetchedAccounts(data.accounts));
- }
-
- if (data.statuses) {
- dispatch(importFetchedStatuses(data.statuses));
- }
-
- dispatch(expandSearchSuccess(data, value, type));
- dispatch(fetchRelationships(data.accounts.map(item => item.id)));
- }).catch(error => {
- dispatch(expandSearchFail(error));
- });
-};
-
-export const expandSearchRequest = (searchType) => ({
- type: SEARCH_EXPAND_REQUEST,
- searchType,
-});
-
-export const expandSearchSuccess = (results, searchTerm, searchType) => ({
- type: SEARCH_EXPAND_SUCCESS,
- results,
- searchTerm,
- searchType,
-});
-
-export const expandSearchFail = error => ({
- type: SEARCH_EXPAND_FAIL,
- error,
-});
-
-export const showSearch = () => ({
- type: SEARCH_SHOW,
-});
-
-export const openURL = (value, history, onFailure) => (dispatch, getState) => {
- const signedIn = !!getState().getIn(['meta', 'me']);
-
- if (!signedIn) {
- if (onFailure) {
- onFailure();
- }
-
- return;
- }
-
- dispatch(fetchSearchRequest());
-
- api().get('/api/v2/search', { params: { q: value, resolve: true } }).then(response => {
- if (response.data.accounts?.length > 0) {
- dispatch(importFetchedAccounts(response.data.accounts));
- history.push(`/@${response.data.accounts[0].acct}`);
- } else if (response.data.statuses?.length > 0) {
- dispatch(importFetchedStatuses(response.data.statuses));
- history.push(`/@${response.data.statuses[0].account.acct}/${response.data.statuses[0].id}`);
- } else if (onFailure) {
- onFailure();
- }
-
- dispatch(fetchSearchSuccess(response.data, value));
- }).catch(err => {
- dispatch(fetchSearchFail(err));
-
- if (onFailure) {
- onFailure();
- }
- });
-};
-
-export const clickSearchResult = (q, type) => (dispatch, getState) => {
- const previous = getState().getIn(['search', 'recent']);
-
- if (previous.some(x => x.get('q') === q && x.get('type') === type)) {
- return;
- }
-
- const me = getState().getIn(['meta', 'me']);
- const current = previous.add(fromJS({ type, q })).takeLast(4);
-
- searchHistory.set(me, current.toJS());
- dispatch(updateSearchHistory(current));
-};
-
-export const forgetSearchResult = q => (dispatch, getState) => {
- const previous = getState().getIn(['search', 'recent']);
- const me = getState().getIn(['meta', 'me']);
- const current = previous.filterNot(result => result.get('q') === q);
-
- searchHistory.set(me, current.toJS());
- dispatch(updateSearchHistory(current));
-};
-
-export const updateSearchHistory = recent => ({
- type: SEARCH_HISTORY_UPDATE,
- recent,
-});
-
-export const hydrateSearch = () => (dispatch, getState) => {
- const me = getState().getIn(['meta', 'me']);
- const history = searchHistory.get(me);
-
- if (history !== null) {
- dispatch(updateSearchHistory(history));
- }
-};
diff --git a/app/javascript/mastodon/actions/search.ts b/app/javascript/mastodon/actions/search.ts
new file mode 100644
index 0000000000..7ee432f782
--- /dev/null
+++ b/app/javascript/mastodon/actions/search.ts
@@ -0,0 +1,151 @@
+import { createAction } from '@reduxjs/toolkit';
+
+import { apiGetSearch } from 'mastodon/api/search';
+import type { ApiSearchType } from 'mastodon/api_types/search';
+import type {
+ RecentSearch,
+ SearchType as RecentSearchType,
+} from 'mastodon/models/search';
+import { searchHistory } from 'mastodon/settings';
+import {
+ createDataLoadingThunk,
+ createAppAsyncThunk,
+} from 'mastodon/store/typed_functions';
+
+import { fetchRelationships } from './accounts';
+import { importFetchedAccounts, importFetchedStatuses } from './importer';
+
+export const SEARCH_HISTORY_UPDATE = 'SEARCH_HISTORY_UPDATE';
+
+export const submitSearch = createDataLoadingThunk(
+ 'search/submit',
+ async ({ q, type }: { q: string; type?: ApiSearchType }, { getState }) => {
+ const signedIn = !!getState().meta.get('me');
+
+ return apiGetSearch({
+ q,
+ type,
+ resolve: signedIn,
+ limit: 11,
+ });
+ },
+ (data, { dispatch }) => {
+ if (data.accounts.length > 0) {
+ dispatch(importFetchedAccounts(data.accounts));
+ dispatch(fetchRelationships(data.accounts.map((account) => account.id)));
+ }
+
+ if (data.statuses.length > 0) {
+ dispatch(importFetchedStatuses(data.statuses));
+ }
+
+ return data;
+ },
+ {
+ useLoadingBar: false,
+ },
+);
+
+export const expandSearch = createDataLoadingThunk(
+ 'search/expand',
+ async ({ type }: { type: ApiSearchType }, { getState }) => {
+ const q = getState().search.q;
+ const results = getState().search.results;
+ const offset = results?.[type].length;
+
+ return apiGetSearch({
+ q,
+ type,
+ limit: 11,
+ offset,
+ });
+ },
+ (data, { dispatch }) => {
+ if (data.accounts.length > 0) {
+ dispatch(importFetchedAccounts(data.accounts));
+ dispatch(fetchRelationships(data.accounts.map((account) => account.id)));
+ }
+
+ if (data.statuses.length > 0) {
+ dispatch(importFetchedStatuses(data.statuses));
+ }
+
+ return data;
+ },
+ {
+ useLoadingBar: true,
+ },
+);
+
+export const openURL = createDataLoadingThunk(
+ 'search/openURL',
+ ({ url }: { url: string }, { getState }) => {
+ const signedIn = !!getState().meta.get('me');
+
+ return apiGetSearch({
+ q: url,
+ resolve: signedIn,
+ limit: 1,
+ });
+ },
+ (data, { dispatch }) => {
+ if (data.accounts.length > 0) {
+ dispatch(importFetchedAccounts(data.accounts));
+ } else if (data.statuses.length > 0) {
+ dispatch(importFetchedStatuses(data.statuses));
+ }
+
+ return data;
+ },
+ {
+ useLoadingBar: true,
+ },
+);
+
+export const clickSearchResult = createAppAsyncThunk(
+ 'search/clickResult',
+ (
+ { q, type }: { q: string; type?: RecentSearchType },
+ { dispatch, getState },
+ ) => {
+ const previous = getState().search.recent;
+
+ if (previous.some((x) => x.q === q && x.type === type)) {
+ return;
+ }
+
+ const me = getState().meta.get('me') as string;
+ const current = [{ type, q }, ...previous].slice(0, 4);
+
+ searchHistory.set(me, current);
+ dispatch(updateSearchHistory(current));
+ },
+);
+
+export const forgetSearchResult = createAppAsyncThunk(
+ 'search/forgetResult',
+ (q: string, { dispatch, getState }) => {
+ const previous = getState().search.recent;
+ const me = getState().meta.get('me') as string;
+ const current = previous.filter((result) => result.q !== q);
+
+ searchHistory.set(me, current);
+ dispatch(updateSearchHistory(current));
+ },
+);
+
+export const updateSearchHistory = createAction
💕 #foo test: foo.
')) - .toEqual('💕 #foo test: foo.
')) + .toEqual('
+
+
- {domain}:
- {' '}
-
- Mastodon:
- {' '}
-
+ {domain}:{' '}
+
+
+ Mastodon:{' '}
+
+
rel="me"
που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμη να χρησιμοποιήσεις μια ετικέτα συνδέσμου
στην κεφαλίδα της σελίδας αντί για a
, αλλά ο κώδικας HTML πρέπει να είναι προσβάσιμος χωρίς την εκτέλεση JavaScript.
here_is_how: Δείτε πώς
+ hint_html: Η επαλήθευση της ταυτότητας στο Mastodon είναι για όλους. Βασισμένο σε ανοιχτά πρότυπα ιστού, τώρα και για πάντα δωρεάν. Το μόνο που χρειάζεσαι είναι μια προσωπική ιστοσελίδα που ο κόσμος να σε αναγνωρίζει από αυτή. Όταν συνδέεσαι σε αυτήν την ιστοσελίδα από το προφίλ σου, θα ελέγξουμε ότι η ιστοσελίδα συνδέεται πίσω στο προφίλ σου και θα δείξει μια οπτική ένδειξη σε αυτό.
+ instructions_html: Αντέγραψε και επικόλλησε τον παρακάτω κώδικα στην HTML της ιστοσελίδας σου. Στη συνέχεια, πρόσθεσε τη διεύθυνση της ιστοσελίδας σου σε ένα από τα επιπλέον πεδία στο προφίλ σου από την καρτέλα "Επεξεργασία προφίλ" και αποθήκευσε τις αλλαγές.
verification: Πιστοποίηση
verified_links: Οι επαληθευμένοι σύνδεσμοι σας
website_verification: Επαλήθευση ιστοτόπου
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index b08ce82368..20f134c959 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -1132,7 +1132,6 @@ en-GB:
migrate_account: Move to a different account
migrate_account_html: If you wish to redirect this account to a different one, you can configure it here.
or_log_in_with: Or log in with
- privacy_policy_agreement_html: I have read and agree to the privacy policy
progress:
confirm: Confirm email
details: Your details
@@ -1157,7 +1156,6 @@ en-GB:
set_new_password: Set new password
setup:
email_below_hint_html: Check your spam folder, or request another one. You can correct your email address if it's wrong.
- email_settings_hint_html: Click the link we sent you to verify %{email}. We'll wait right here.
link_not_received: Didn't get a link?
new_confirmation_instructions_sent: You will receive a new email with the confirmation link in a few minutes!
title: Check your inbox
@@ -1166,7 +1164,6 @@ en-GB:
title: Log in to %{domain}
sign_up:
manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}.
- preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted.
title: Let's get you set up on %{domain}.
status:
account_status: Account status
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 43db925d49..26697b5792 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -222,6 +222,7 @@ en:
force_sensitive_status: Add Sensitive Flag to Post
memorialize_account: Memorialize Account
promote_user: Promote User
+ publish_terms_of_service: Publish Terms of Service
reject_appeal: Reject Appeal
reject_remote_account: Reject Remote Account
reject_user: Reject User
@@ -290,6 +291,7 @@ en:
force_sensitive_status_html: "%{name} turned post by %{target} sensitive"
memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
promote_user_html: "%{name} promoted user %{target}"
+ publish_terms_of_service_html: "%{name} published updates to the terms of service"
reject_appeal_html: "%{name} rejected moderation decision appeal from %{target}"
reject_remote_account_html: "%{name} rejected %{target} join on this server"
reject_user_html: "%{name} rejected sign-up from %{target}"
@@ -1189,6 +1191,35 @@ en:
search: Search
title: Hashtags
updated_msg: Hashtag settings updated successfully
+ terms_of_service:
+ back: Back to terms of service
+ changelog: What's changed
+ create: Use your own
+ current: Current
+ draft: Draft
+ generate: Use template
+ generates:
+ action: Generate
+ chance_to_review_html: "The generated terms of service will not be published automatically. You will have a chance to review the results. Please fill in the necessary details to proceed."
+ explanation_html: The terms of service template provided is for informational purposes only, and should not be construed as legal advice on any subject matter. Please consult with your own legal counsel on your situation and specific legal questions you have.
+ title: Terms of Service Setup
+ history: History
+ live: Live
+ no_history: There are no recorded changes of the terms of service yet.
+ no_terms_of_service_html: You don't currently have any terms of service configured. Terms of service are meant to provide clarity and protect you from potential liabilities in disputes with your users.
+ notified_on_html: Users notified on %{date}
+ notify_users: Notify users
+ preview:
+ explanation_html: 'The email will be sent to %{display_count} users who have signed up before %{date}. The following text will be included in the e-mail:'
+ send_preview: Send preview to %{email}
+ send_to_all:
+ one: Send %{display_count} email
+ other: Send %{display_count} emails
+ title: Preview terms of service notification
+ publish: Publish
+ published_on_html: Published on %{date}
+ save_draft: Save draft
+ title: Terms of Service
title: Administration
trends:
allow: Allow
@@ -1424,7 +1455,6 @@ en:
migrate_account: Move to a different account
migrate_account_html: If you wish to redirect this account to a different one, you can configure it here.
or_log_in_with: Or log in with
- privacy_policy_agreement_html: I have read and agree to the privacy policy
progress:
confirm: Confirm email
details: Your details
@@ -1452,7 +1482,7 @@ en:
set_new_password: Set new password
setup:
email_below_hint_html: Check your spam folder, or request another one. You can correct your email address if it's wrong.
- email_settings_hint_html: Click the link we sent you to verify %{email}. We'll wait right here.
+ email_settings_hint_html: Click the link we sent to %{email} to begin using Mastodon. We'll wait right here.
link_not_received: Didn't get a link?
new_confirmation_instructions_sent: You will receive a new email with the confirmation link in a few minutes!
title: Check your inbox
@@ -1461,7 +1491,7 @@ en:
title: Login to %{domain}
sign_up:
manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}.
- preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted.
+ preamble: With an account on this Mastodon server, you'll be able to follow any other person on the fediverse, regardless of where their account is hosted.
title: Let's get you set up on %{domain}.
status:
account_status: Account status
@@ -1473,6 +1503,7 @@ en:
view_strikes: View past strikes against your account
too_fast: Form submitted too fast, try again.
use_security_key: Use security key
+ user_agreement_html: I have read and agree to the terms of service and privacy policy
with_login_options: Will you disable your custom css?
author_attribution:
example_title: Sample text
@@ -2208,6 +2239,8 @@ en:
too_late: It is too late to appeal this strike
tags:
does_not_match_previous_name: does not match the previous name
+ terms_of_service:
+ title: Terms of Service
themes:
contrast: Mastodon (High contrast)
default: Mastodon (Dark)
@@ -2269,6 +2302,15 @@ en:
further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure.
subject: Your account has been accessed from a new IP address
title: A new sign-in
+ terms_of_service_changed:
+ agreement: By continuing to use %{domain}, you are agreeing to these terms. If you disagree with the updated terms, you may terminate your agreement with %{domain} at any time by deleting your account.
+ changelog: 'At a glance, here is what this update means for you:'
+ description: 'You are receiving this e-mail because we''re making some changes to our terms of service at %{domain}. We encourage you to review the updated terms in full here:'
+ description_html: You are receiving this e-mail because we're making some changes to our terms of service at %{domain}. We encourage you to review the updated terms in full here.
+ sign_off: The %{domain} team
+ subject: Updates to our terms of service
+ subtitle: The terms of service of %{domain} are changing
+ title: Important update
warning:
appeal: Submit an appeal
appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}.
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 7e454ddcf4..912de854c6 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -214,6 +214,7 @@ eo:
enable_user: Ebligi uzanton
memorialize_account: Memorigu Konton
promote_user: Promocii Uzanton
+ publish_terms_of_service: Publikigi kondiĉojn de uzado
reject_appeal: Malaprobi Apelacion
reject_user: Malakcepti Uzanton
remove_avatar_user: Forigi la profilbildon
@@ -925,6 +926,23 @@ eo:
search: Serĉi
title: Kradvortoj
updated_msg: Kradvorto agordoj ĝisdatigis sukcese
+ terms_of_service:
+ back: Reen al kondiĉoj de uzado
+ changelog: Kio ŝanĝiĝis
+ create: Uzu viajn proprajn
+ current: Nuna
+ draft: Malneto
+ generate: Uzi ŝablonon
+ generates:
+ title: Agordo de kondiĉoj de uzado
+ preview:
+ send_to_all:
+ one: Sendi %{display_count} retpoŝton
+ other: Sendi %{display_count} retpoŝtojn
+ publish: Publikigi
+ published_on_html: Publikigita je %{date}
+ save_draft: Konservi malneton
+ title: Kondiĉoj de uzado
title: Administrado
trends:
allow: Permesi
@@ -1132,7 +1150,6 @@ eo:
migrate_account: Movi al alia konto
migrate_account_html: Se vi deziras alidirekti ĉi tiun konton al alia, vi povas agordi ĝin ĉi tie.
or_log_in_with: Aŭ saluti per
- privacy_policy_agreement_html: Mi legis kaj konsentis pri privatpolitiko
progress:
confirm: Konfirmi retadreson
details: Viaj detaloj
@@ -1157,7 +1174,6 @@ eo:
set_new_password: Elekti novan pasvorton
setup:
email_below_hint_html: Kontrolu vian spam-dosierujon aŭ petu novan. Se necese, vi povas korekti vian retadreson.
- email_settings_hint_html: Enklaku la ligilon, ke ni sendis al vi por kontroli %{email}. Ni estos tien.
link_not_received: Ĉu vi ne ricevis ligilon?
new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj!
title: Kontrolu vian retpoŝta enirkesto
@@ -1166,7 +1182,7 @@ eo:
title: Saluti en %{domain}
sign_up:
manual_review: Enskriboj en %{domain} havas manan superrigardon, farita de niaj moderistoj. Por helpi nin por procezi vian enskribon, skribu ion pri vi mem, kaj kial vi volas konton en %{domain}.
- preamble: Per konto ĉe ĉi tiu Mastodon-servilo, vi povas sekvi ajn personojn en la reto.
+ preamble: Per konto ĉe ĉi tiu Mastodon-servilo, vi povos sekvi ajnan alian personon ĉe la fediverso, sendepende de kie ilia konto estas gastigita.
title: Ni pretigu vin ĉe %{domain}.
status:
account_status: Statuso de la konto
@@ -1499,7 +1515,7 @@ eo:
follow: sciigoj retpoŝtaj de sekvoj
follow_request: retpoŝtajn petoj de sekvado
mention: sciigoj retpoŝtaj de mencioj
- reblog: sciigoj retpoŝtaj de stimuloj
+ reblog: sciigoj retpoŝtaj de diskonigoj
resubscribe_html: Se vi malabonis erare, vi povas reaboni de viaj retpoŝtaj sciigaj agordoj.
success_html: Vi ne plu ricevos %{type} por Mastodon ĉe %{domain} al via retpoŝto ĉe %{email}.
title: Malaboni
@@ -1841,6 +1857,8 @@ eo:
too_late: Estas tro malfrua por apelacii ĉi tiun admonon
tags:
does_not_match_previous_name: ne kongruas kun la antaŭa nomo
+ terms_of_service:
+ title: Kondiĉoj de uzado
themes:
contrast: Mastodon (Forta kontrasto)
default: Mastodon (Malhela)
@@ -1901,6 +1919,8 @@ eo:
further_actions_html: Se ne estas vi, ni rekomendas ke vi %{action} tuj por sekurigi vian konton.
subject: Via konto estas alirita de nova IP-adreso
title: Nova saluto
+ terms_of_service_changed:
+ title: Grava ĝisdatigo
warning:
appeal: Sendi apelacion
appeal_description: Se vi pensas ke ĉi tio estas eraro, vi povas sendi apelacion al la teamo de %{instance}.
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index 5ea429f5cb..d9fa28a3a1 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -214,6 +214,7 @@ es-AR:
enable_user: Habilitar usuario
memorialize_account: Convertir en cuenta conmemorativa
promote_user: Promover usuario
+ publish_terms_of_service: Publicar términos del servicio
reject_appeal: Rechazar apelación
reject_user: Rechazar usuario
remove_avatar_user: Quitar avatar
@@ -278,6 +279,7 @@ es-AR:
enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa"
promote_user_html: "%{name} promovió al usuario %{target}"
+ publish_terms_of_service_html: "%{name} ha publicado actualizaciones de los términos del servicio"
reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}"
reject_user_html: "%{name} rechazó el registro de %{target}"
remove_avatar_user_html: "%{name} quitó el avatar de %{target}"
@@ -925,6 +927,35 @@ es-AR:
search: Buscar
title: Etiquetas
updated_msg: La configuración de la etiqueta se actualizó exitosamente
+ terms_of_service:
+ back: Volver a los términos del servicio
+ changelog: Qué ha cambiado
+ create: Usa los tuyos
+ current: Actual
+ draft: Borrador
+ generate: Usar plantilla
+ generates:
+ action: Generar
+ chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar."
+ explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas.
+ title: Configuración de términos del servicio
+ history: Historial
+ live: En vivo
+ no_history: Aún no se han registrado cambios en los términos del servicio.
+ no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
+ notified_on_html: Usuarios notificados el %{date}
+ notify_users: Notificar usuarios
+ preview:
+ explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:'
+ send_preview: Enviar vista previa a %{email}
+ send_to_all:
+ one: Enviar %{display_count} correo electrónico
+ other: Enviar %{display_count} correos electrónicos
+ title: Vista previa de la notificación de términos del servicios
+ publish: Publicar
+ published_on_html: Publicado el %{date}
+ save_draft: Guardar borrador
+ title: Términos del Servicio
title: Administración
trends:
allow: Permitir
@@ -1132,7 +1163,6 @@ es-AR:
migrate_account: Mudarse a otra cuenta
migrate_account_html: Si querés redireccionar esta cuenta a otra distinta, podés configurar eso acá.
or_log_in_with: O iniciar sesión con
- privacy_policy_agreement_html: Leí y acepto la política de privacidad
progress:
confirm: Confirmar correo electrónico
details: Tus detalles
@@ -1157,7 +1187,7 @@ es-AR:
set_new_password: Establecer nueva contraseña
setup:
email_below_hint_html: Revisá tu carpeta de correo no deseado / spam, o solicitá otro enlace de confirmación. Podés corregir tu dirección de correo electrónico si está mal.
- email_settings_hint_html: Hacé clic en el enlace que te enviamos para verificar %{email}. Te esperamos por acá.
+ email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo.
link_not_received: "¿No recibiste un enlace?"
new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
title: Revisá tu bandeja de entrada
@@ -1166,7 +1196,7 @@ es-AR:
title: Iniciar sesión en %{domain}
sign_up:
manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribinos un poco sobre vos y contanos por qué querés una cuenta en %{domain}.
- preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra cuenta en la red, independientemente de en qué servidor esté alojada esa cuenta.
+ preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en el fediverso, independientemente de dónde esté alojada su cuenta.
title: Dejá que te preparemos en %{domain}.
status:
account_status: Estado de la cuenta
@@ -1178,6 +1208,7 @@ es-AR:
view_strikes: Ver incumplimientos pasados contra tu cuenta
too_fast: Formulario enviado demasiado rápido, probá de nuevo.
use_security_key: Usar la llave de seguridad
+ user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad
author_attribution:
example_title: Texto de ejemplo
hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon."
@@ -1839,6 +1870,8 @@ es-AR:
too_late: Es demasiado tarde para apelar este incumplimiento
tags:
does_not_match_previous_name: no coincide con el nombre anterior
+ terms_of_service:
+ title: Términos del Servicio
themes:
contrast: Alto contraste
default: Oscuro
@@ -1899,6 +1932,15 @@ es-AR:
further_actions_html: Si no fuiste vos, te recomendamos que %{action} inmediatamente y habilités la autenticación de dos factores para mantener tu cuenta segura.
subject: Se accedió a tu cuenta desde una nueva dirección IP
title: Un nuevo inicio de sesión
+ terms_of_service_changed:
+ agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta.
+ changelog: 'En resumen, esto es lo que esta actualización significa para ti:'
+ description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:'
+ description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí.
+ sign_off: El equipo de %{domain}
+ subject: Actualizaciones en nuestros términos del servicio
+ subtitle: Los términos del servicio de %{domain} están cambiando
+ title: Actualización importante
warning:
appeal: Enviar una apelación
appeal_description: Si creés que esto es un error, podés enviar una apelación al equipo de %{instance}.
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 3e0680aa61..6bdee869e7 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -214,6 +214,7 @@ es-MX:
enable_user: Habilitar Usuario
memorialize_account: Transformar en Cuenta Conmemorativa
promote_user: Promover Usuario
+ publish_terms_of_service: Publicar condiciones del servicio
reject_appeal: Rechazar apelación
reject_user: Rechazar Usuario
remove_avatar_user: Eliminar Avatar
@@ -278,6 +279,7 @@ es-MX:
enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
promote_user_html: "%{name} promoción al usuario %{target}"
+ publish_terms_of_service_html: "%{name} publicó actualizaciones de las condiciones del servicio"
reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}"
reject_user_html: "%{name} rechazó el registro de %{target}"
remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
@@ -925,6 +927,35 @@ es-MX:
search: Buscar
title: Etiquetas
updated_msg: Etiquetas actualizadas exitosamente
+ terms_of_service:
+ back: Regresar a las condiciones del servicio
+ changelog: Lo que ha cambiado
+ create: Usa los tuyos
+ current: Actual
+ draft: Borrador
+ generate: Usar plantilla
+ generates:
+ action: Generar
+ chance_to_review_html: "Las condiciones de servicio generadas no se publicarán automáticamente. Tendrás la oportunidad de revisar los resultados. Por favor, rellena los datos necesarios para continuar."
+ explanation_html: La plantilla de condiciones de servicio que se proporciona tiene únicamente fines informativos y no debe interpretarse como asesoramiento jurídico sobre ningún tema. Por favor, consulte con su propio asesor legal sobre su situación y las cuestiones legales específicas que tenga.
+ title: Configuración de las condiciones del servicio
+ history: Historial
+ live: Actual
+ no_history: No se han registrado cambios en las condiciones del servicio hasta el momento.
+ no_terms_of_service_html: Actualmente, no tiene configuradas condiciones del servicio. Las condiciones del servicio están diseñadas para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
+ notified_on_html: Usuarios notificados el %{date}
+ notify_users: Notificar usuarios
+ preview:
+ explanation_html: 'El correo electrónico se enviará a %{display_count} usuarios que se hayan registrado antes de %{date}. En el correo electrónico se incluirá el siguiente texto:'
+ send_preview: Enviar vista previa a %{email}
+ send_to_all:
+ one: Enviar %{display_count} correo electrónico
+ other: Enviar %{display_count} correos electrónicos
+ title: Vista previa de la notificación de las condiciones del servicio
+ publish: Publicar
+ published_on_html: Publicado el %{date}
+ save_draft: Guardar borrador
+ title: Condiciones del servicio
title: Administración
trends:
allow: Permitir
@@ -1132,7 +1163,6 @@ es-MX:
migrate_account: Mudarse a otra cuenta
migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes configurarlo aquí.
or_log_in_with: O inicia sesión con
- privacy_policy_agreement_html: He leído y acepto la política de privacidad
progress:
confirm: Confirmar dirección de correo
details: Tus detalles
@@ -1157,7 +1187,7 @@ es-MX:
set_new_password: Establecer nueva contraseña
setup:
email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal.
- email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo.
+ email_settings_hint_html: Haz clic en el enlace que te enviamos a %{email} para comenzar a usar Mastodon. Te esperamos aquí.
link_not_received: "¿No recibiste un enlace?"
new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
title: Revisa tu bandeja de entrada
@@ -1166,7 +1196,7 @@ es-MX:
title: Registrate en %{domain}
sign_up:
manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribe un poco sobre ti mismo y por qué quieres una cuenta en %{domain}.
- preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en la red, independientemente del servidor en el que se encuentre.
+ preamble: Al tener una cuenta en este servidor de Mastodon, tendrás la oportunidad de seguir a cualquier persona en el fediverso, sin importar en qué plataforma esté alojada su cuenta.
title: Crear cuenta de Mastodon en %{domain}.
status:
account_status: Estado de la cuenta
@@ -1178,6 +1208,7 @@ es-MX:
view_strikes: Ver amonestaciones pasadas contra tu cuenta
too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo.
use_security_key: Usar la clave de seguridad
+ user_agreement_html: He leído y acepto las condiciones del servicio y la política de privacidad
author_attribution:
example_title: Texto de ejemplo
hint_html: "¿Estás escribiendo artículos de noticias o blogs fuera de Mastodon? Controla cómo te acreditan cuando se comparten en Mastodon."
@@ -1839,6 +1870,8 @@ es-MX:
too_late: Es demasiado tarde para apelar esta amonestación
tags:
does_not_match_previous_name: no coincide con el nombre anterior
+ terms_of_service:
+ title: Condiciones del servicio
themes:
contrast: Alto contraste
default: Mastodon
@@ -1899,6 +1932,15 @@ es-MX:
further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura.
subject: Tu cuenta ha sido accedida desde una nueva dirección IP
title: Un nuevo inicio de sesión
+ terms_of_service_changed:
+ agreement: Al seguir usando %{domain}, aceptas estas condiciones. Si no estás de acuerdo con las condiciones actualizadas, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta.
+ changelog: 'En pocas palabras, esto es lo que esta actualización implica para ti:'
+ description: 'Estás recibiendo este correo electrónico porque estamos realizando algunos cambios en nuestras condiciones del servicio en %{domain}. Te animamos a revisar las condiciones actualizadas en su totalidad aquí:'
+ description_html: Estás recibiendo este correo electrónico porque estamos realizando algunos cambios en nuestras condiciones del servicio en %{domain}. Te animamos a revisar las condiciones actualizadas en su totalidad aquí.
+ sign_off: El equipo de %{domain}
+ subject: Actualizaciones en nuestras condiciones del servicio
+ subtitle: Las condiciones del servicio de %{domain} han cambiado
+ title: Actualización importante
warning:
appeal: Enviar una apelación
appeal_description: Si crees que esto es un error, puedes enviar una apelación al equipo de %{instance}.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 2984fbf2ad..5e3374ae8c 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -214,6 +214,7 @@ es:
enable_user: Habilitar Usuario
memorialize_account: Transformar en Cuenta Conmemorativa
promote_user: Promover Usuario
+ publish_terms_of_service: Publicar términos del servicio
reject_appeal: Rechazar Apelación
reject_user: Rechazar Usuario
remove_avatar_user: Eliminar Avatar
@@ -278,6 +279,7 @@ es:
enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
promote_user_html: "%{name} promoción al usuario %{target}"
+ publish_terms_of_service_html: "%{name} ha publicado actualizaciones de los términos del servicio"
reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}"
reject_user_html: "%{name} rechazó el registro de %{target}"
remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
@@ -925,6 +927,35 @@ es:
search: Buscar
title: Etiquetas
updated_msg: La configuración de etiquetas se actualizó correctamente
+ terms_of_service:
+ back: Volver a los términos del servicio
+ changelog: Qué ha cambiado
+ create: Usa los tuyos
+ current: Actual
+ draft: Borrador
+ generate: Usar plantilla
+ generates:
+ action: Generar
+ chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar."
+ explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas.
+ title: Configuración de términos del servicio
+ history: Historial
+ live: En vivo
+ no_history: Aún no se han registrado cambios en los términos del servicio.
+ no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
+ notified_on_html: Usuarios notificados el %{date}
+ notify_users: Notificar usuarios
+ preview:
+ explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:'
+ send_preview: Enviar vista previa a %{email}
+ send_to_all:
+ one: Enviar %{display_count} correo electrónico
+ other: Enviar %{display_count} correos electrónicos
+ title: Vista previa de la notificación de términos del servicios
+ publish: Publicar
+ published_on_html: Publicado el %{date}
+ save_draft: Guardar borrador
+ title: Términos del Servicio
title: Administración
trends:
allow: Permitir
@@ -1132,7 +1163,6 @@ es:
migrate_account: Mudarse a otra cuenta
migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes configurarlo aquí.
or_log_in_with: O inicia sesión con
- privacy_policy_agreement_html: He leído y acepto la política de privacidad
progress:
confirm: Confirmar dirección de correo
details: Tus detalles
@@ -1157,7 +1187,7 @@ es:
set_new_password: Establecer nueva contraseña
setup:
email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal.
- email_settings_hint_html: Haz clic en el enlace que te hemos enviado para verificar %{email}. Te esperamos aquí.
+ email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo.
link_not_received: "¿No recibiste un enlace?"
new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
title: Revisa tu bandeja de entrada
@@ -1166,7 +1196,7 @@ es:
title: Iniciar sesión en %{domain}
sign_up:
manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribe un poco sobre ti mismo y por qué quieres una cuenta en %{domain}.
- preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en la red, independientemente del servidor en el que se encuentre.
+ preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en el fediverso, independientemente de dónde esté alojada su cuenta.
title: Crear cuenta de Mastodon en %{domain}.
status:
account_status: Estado de la cuenta
@@ -1178,6 +1208,7 @@ es:
view_strikes: Ver amonestaciones pasadas contra tu cuenta
too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo.
use_security_key: Usar la clave de seguridad
+ user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad
author_attribution:
example_title: Texto de ejemplo
hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon."
@@ -1839,6 +1870,8 @@ es:
too_late: Es demasiado tarde para apelar esta amonestación
tags:
does_not_match_previous_name: no coincide con el nombre anterior
+ terms_of_service:
+ title: Términos del Servicio
themes:
contrast: Mastodon (alto contraste)
default: Mastodon (oscuro)
@@ -1899,6 +1932,15 @@ es:
further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura.
subject: Tu cuenta ha sido accedida desde una nueva dirección IP
title: Un nuevo inicio de sesión
+ terms_of_service_changed:
+ agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta.
+ changelog: 'En resumen, esto es lo que esta actualización significa para ti:'
+ description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:'
+ description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí.
+ sign_off: El equipo de %{domain}
+ subject: Actualizaciones en nuestros términos del servicio
+ subtitle: Los términos del servicio de %{domain} están cambiando
+ title: Actualización importante
warning:
appeal: Enviar una apelación
appeal_description: Si crees que esto es un error, puedes enviar una apelación al personal de %{instance}.
diff --git a/config/locales/et.yml b/config/locales/et.yml
index ea4545ac42..2f182d08b2 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -1117,7 +1117,6 @@ et:
migrate_account: Teisele kontole ära kolimine
migrate_account_html: Kui soovid konto siit ära kolida, saad seda teha siin.
or_log_in_with: Või logi sisse koos
- privacy_policy_agreement_html: Olen tutvunud isikuandmete kaitse põhimõtetega ja nõustun nendega
progress:
confirm: E-posti kinnitamine
details: Sinu üksikasjad
@@ -1142,7 +1141,6 @@ et:
set_new_password: Uue salasõna määramine
setup:
email_below_hint_html: Kontrolli rämpsposti kausta või taotle uut. Saad oma e-posti aadressi parandada, kui see on vale.
- email_settings_hint_html: Klõpsa linki, mis saadeti sulle, et kinnitada %{email}. Seni me ootame.
link_not_received: Kas ei saanud linki?
new_confirmation_instructions_sent: Saad mõne minuti pärast uue kinnituslingiga e-kirja!
title: Kontrolli sisendkasti
@@ -1151,7 +1149,6 @@ et:
title: Logi sisse kohta %{domain}
sign_up:
manual_review: Liitumised kohas %{domain} vaadatakse meie moderaatorite poolt käsitsi läbi. Aitamaks meil sinu taotlust läbi vaadata, kirjuta palun natuke endast ja miks soovid kontot kohas %{domain}.
- preamble: Selle kontoga saad jälgida ja suhelda kõigi teiste kasutajatega erinevates Mastodoni serverites.
title: Loo konto serverisse %{domain}.
status:
account_status: Konto olek
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index c1e5ab1ee6..8ca53d492c 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -1041,7 +1041,6 @@ eu:
migrate_account: Migratu beste kontu batera
migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, hemen konfiguratu dezakezu.
or_log_in_with: Edo hasi saioa honekin
- privacy_policy_agreement_html: Pribatutasun politika irakurri dut eta ados nago
progress:
details: Zure xehetasunak
review: Gure berrikuspena
@@ -1064,7 +1063,6 @@ eu:
security: Segurtasuna
set_new_password: Ezarri pasahitza berria
setup:
- email_settings_hint_html: Egin klik bidali dizugun estekan %{email} helbidea egiaztatzeko. Hementxe itxarongo zaitugu.
link_not_received: Ez duzu estekarik jaso?
title: Begiratu zure sarrera-ontzia
sign_in:
@@ -1072,7 +1070,6 @@ eu:
title: "%{domain}-(e)an saioa hasi"
sign_up:
manual_review: "%{domain}-(e)n eginiko izen-emateak gure moderatzaileek eskuz aztertzen dituzte. Zure izen-ematea prozesatzen lagun gaitzazun, idatz ezazu zertxobait zuri buruz eta azaldu zergatik nahi duzun %{domain}-(e)n kontu bat."
- preamble: Mastodon zerbitzari honetako kontu batekin, aukera izango duzu sareko edozein pertsona jarraitzeko, ez dio axola kontua non ostatatua dagoen.
title: "%{domain} zerbitzariko kontua prestatuko dizugu."
status:
account_status: Kontuaren egoera
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index ad242ca503..341bb4cf54 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -978,7 +978,6 @@ fa:
migrate_account: نقل مکان به یک حساب دیگر
migrate_account_html: اگر میخواهید این حساب را به حساب دیگری منتقل کنید، اینجا را کلیک کنید.
or_log_in_with: یا ورود به وسیلهٔ
- privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفتهام
progress:
confirm: تأیید رایانامه
details: جزئیات شما
@@ -999,7 +998,6 @@ fa:
security: امنیت
set_new_password: تعین گذرواژه جدید
setup:
- email_settings_hint_html: برای تأیید %{email}، روی پیوندی که برای شما ارسال کردیم ضربه بزنید. همین جا منتظر میمانیم.
link_not_received: پیوندی نگرفتید؟
title: صندوق ورودیتان را بررسی کنید
sign_in:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index eec42d0bfb..c4f9844679 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -214,6 +214,7 @@ fi:
enable_user: Ota tili käyttöön
memorialize_account: Muuta muistotiliksi
promote_user: Ylennä käyttäjä
+ publish_terms_of_service: Julkaise käyttöehdot
reject_appeal: Hylkää valitus
reject_user: Hylkää käyttäjä
remove_avatar_user: Poista profiilikuva
@@ -278,6 +279,7 @@ fi:
enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}"
memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi"
promote_user_html: "%{name} ylensi käyttäjän %{target}"
+ publish_terms_of_service_html: "%{name} julkaisi päivityksiä käyttöehtoihin"
reject_appeal_html: "%{name} hylkäsi käyttäjän %{target} valituksen moderointipäätöksestä"
reject_user_html: "%{name} hylkäsi käyttäjän %{target} rekisteröitymisen"
remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan"
@@ -925,6 +927,35 @@ fi:
search: Hae
title: Aihetunnisteet
updated_msg: Aihetunnisteiden asetusten päivitys onnistui
+ terms_of_service:
+ back: Takaisin käyttöehtoihin
+ changelog: Mikä on muuttunut
+ create: Käytä omiasi
+ current: Voimassa olevat
+ draft: Luonnos
+ generate: Käytä mallia
+ generates:
+ action: Luo
+ chance_to_review_html: "Luotuja käyttöehtoja ei julkaista automaattisesti. Sinulla on mahdollisuus tarkistaa lopputulos. Jatka täyttämällä tarvittavat tiedot."
+ explanation_html: Tarjottu käyttöehtomalli on tarkoitettu vain tiedoksi, eikä sitä pidä tulkita oikeudellisena neuvontana missään yhteydessä. Käänny oman oikeusavustajasi puoleen tilanteessasi ja erityisissä oikeudellisissa kysymyksissäsi.
+ title: Käyttöehtojen määritys
+ history: Historia
+ live: Julki
+ no_history: Käyttöehtoihin ei ole vielä tehty muutoksia.
+ no_terms_of_service_html: Sinulla ei ole tällä hetkellä määritettyjä käyttöehtoja. Käyttöehtojen tarkoituksena on antaa selvyyttä ja suojata sinua mahdollisilta vastuilta riitatilanteissa käyttäjiesi kanssa.
+ notified_on_html: Ilmoitettu käyttäjille %{date}
+ notify_users: Ilmoita käyttäjille
+ preview:
+ explanation_html: 'Sähköpostia lähetetään %{display_count} käyttäjälle, jotka ovat rekisteröityneet ennen %{date}. Sähköpostiviestissä on seuraava teksti:'
+ send_preview: Lähetä esikatselu osoitteeseen %{email}
+ send_to_all:
+ one: Lähetä %{display_count} sähköpostiviesti
+ other: Lähetä %{display_count} sähköpostiviestiä
+ title: Esikatsele käyttöehtojen ilmoitus
+ publish: Julkaise
+ published_on_html: Julkaistu %{date}
+ save_draft: Tallenna luonnos
+ title: Käyttöehdot
title: Ylläpito
trends:
allow: Salli
@@ -1132,7 +1163,6 @@ fi:
migrate_account: Muuta toiseen tiliin
migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit asettaa toisen tilin tästä.
or_log_in_with: Tai käytä kirjautumiseen
- privacy_policy_agreement_html: Olen lukenut ja hyväksyn tietosuojakäytännön
progress:
confirm: Vahvista sähköpostiosoite
details: Omat tietosi
@@ -1157,7 +1187,7 @@ fi:
set_new_password: Aseta uusi salasana
setup:
email_below_hint_html: Tarkista roskapostikansiosi tai pyydä uusi viesti. Voit korjata sähköpostiosoitteesi tarvittaessa.
- email_settings_hint_html: Napsauta lähettämäämme linkkiä vahvistaaksesi osoitteen %{email}. Odotamme täällä.
+ email_settings_hint_html: Jotta voit aloittaa Mastodonin käytön, napsauta linkkiä, jonka lähetimme osoitteeseen %{email}. Odotamme täällä.
link_not_received: Etkö saanut linkkiä?
new_confirmation_instructions_sent: Saat pian uuden vahvistuslinkin sisältävän sähköpostiviestin!
title: Tarkista sähköpostilaatikkosi
@@ -1166,7 +1196,7 @@ fi:
title: Kirjaudu palvelimelle %{domain}
sign_up:
manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja siitä, miksi haluat luoda käyttäjätilin palvelimelle %{domain}.
- preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia käyttäjiä riippumatta siitä, missä heidän tilinsä on.
+ preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita fediversumin käyttäjiä riippumatta siitä, missä heidän tilinsä on.
title: Otetaan %{domain} käyttöösi.
status:
account_status: Tilin tila
@@ -1178,6 +1208,7 @@ fi:
view_strikes: Näytä aiemmat tiliäsi koskevat varoitukset
too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen.
use_security_key: Käytä suojausavainta
+ user_agreement_html: Olen lukenut ja hyväksyn käyttöehdot ja tietosuojakäytännön
author_attribution:
example_title: Esimerkkiteksti
hint_html: Kirjoitatko uutisia tai blogitekstejä Mastodonin ulkopuolella? Määrää, kuinka tulet tunnustetuksi, kun niitä jaetaan Mastodonissa.
@@ -1839,6 +1870,8 @@ fi:
too_late: On liian myöhäistä vedota tähän varoitukseen
tags:
does_not_match_previous_name: ei vastaa edellistä nimeä
+ terms_of_service:
+ title: Käyttöehdot
themes:
contrast: Mastodon (suuri kontrasti)
default: Mastodon (tumma)
@@ -1899,6 +1932,15 @@ fi:
further_actions_html: Jos tämä et ollut sinä, suosittelemme, että %{action} heti ja otat käyttöön kaksivaiheisen todennuksen pitääksesi tilisi turvassa.
subject: Tiliäsi on käytetty uudesta IP-osoitteesta
title: Uusi kirjautuminen
+ terms_of_service_changed:
+ agreement: Jatkamalla palvelun %{domain} käyttöä hyväksyt nämä ehdot. Jos et hyväksy päivitettyjä ehtoja, voit milloin tahansa päättää sopimuksesi palvelun %{domain} kanssa poistamalla tilisi.
+ changelog: 'Lyhyesti, mitä tämä päivitys tarkoittaa sinulle:'
+ description: 'Sait tämän sähköpostiviestin, koska teemme muutoksia palvelun %{domain} käyttöehtoihin. Kehotamme sinua tutustumaan päivitettyihin ehtoihin kokonaisuudessaan täällä:'
+ description_html: Sait tämän sähköpostiviestin, koska teemme muutoksia palvelun %{domain} käyttöehtoihin. Kehotamme sinua tutustumaan päivitettyihin ehtoihin kokonaisuudessaan täällä.
+ sign_off: Palvelimen %{domain} tiimi
+ subject: Käyttöehtojemme päivitykset
+ subtitle: Palvelimen %{domain} käyttöehdot muuttuvat
+ title: Tärkeä päivitys
warning:
appeal: Lähetä valitus
appeal_description: Jos uskot, että tämä on virhe, voit hakea muutosta palvelimen %{instance} ylläpidolta.
diff --git a/config/locales/fil.yml b/config/locales/fil.yml
index 4084bf2f90..fc19d9fd31 100644
--- a/config/locales/fil.yml
+++ b/config/locales/fil.yml
@@ -1 +1,26 @@
+---
fil:
+ about:
+ about_mastodon_html: 'Ang social network ng hinaharap: Walang mga ad, walang corporate na pagmamanman, etikal na disenyo, at desentralisasyon! Sa iyo ang data mo sa Mastodon!'
+ contact_missing: Hindi naka-set
+ contact_unavailable: N/A
+ hosted_on: Mastodon hosted sa %{domain}
+ title: About
+ accounts:
+ following: Following
+ instance_actor_flash: Ang account na ito ay virtual actor na ginagamit para i-represent ang mismong server at hindi anumang indibidwal na user. Ginagamit ito para sa mga layunin ng pederasyon at hindi dapat i-suspend.
+ last_active: huling aktibo
+ link_verified_on: Ang pagmamay-ari ng link na ito ay huling na-check sa %{date}
+ nothing_here: Walang makikita rito!
+ pin_errors:
+ following: Dapat ay fina-follow mo na ang taong gusto mong i-endorse
+ posts_tab_heading: Mga Post
+ self_follow_error: Hindi puwede ang pag-follow sa sariling account
+ admin:
+ account_actions:
+ action: Gawin ang aksiyon
+ already_silenced: Nalimitahan na ang account na ito.
+ already_suspended: Nasuspinde na ang account na ito.
+ title: Gawin ang moderation na aksiyon sa %{acct}
+ account_moderation_notes:
+ create: Mag-iwan ng note
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index 6f2f94242c..00ffed90bb 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -1132,7 +1132,6 @@ fo:
migrate_account: Flyt til eina aðra kontu
migrate_account_html: Ynskir tú at víðaribeina hesa kontuna til eina aðra, so kanst tú seta tað upp her.
or_log_in_with: Ella innrita við
- privacy_policy_agreement_html: Eg havi lisið og taki undir við privatlívspolitikkinum
progress:
confirm: Vátta teldupost
details: Tínir smálutir
@@ -1157,7 +1156,6 @@ fo:
set_new_password: Áset nýtt loyniorð
setup:
email_below_hint_html: Kekka mappuna við ruskposti ella bið um ein annan. Tú kanst rætta teldupostadressuna, um hon er skeiv.
- email_settings_hint_html: Kekka leinkið, sum vit sendu tær at eftirkanna %{email}. Vit bíða beint her.
link_not_received: Fekk tú einki leinki?
new_confirmation_instructions_sent: Tú fer at móttaka eitt nýtt teldubræv við váttanarleinkinum um nakrar fáar minuttir!
title: Kekka innbakkan hjá tær
@@ -1166,7 +1164,6 @@ fo:
title: Rita inn á %{domain}
sign_up:
manual_review: Tilmeldingar til %{domain} fara ígjøgnum eina manuella eftirkanning av okkara kjakleiðarum. Fyri at hjálpa okkum at skunda undir skrásetingina, skriva eitt sindur um teg sjálva/n og hví tú vil hava eina kontu á %{domain}.
- preamble: Við eini kontu á hesum Mastodon ambætaranum ber til hjá tær at fylgja ein og hvønn annan persón á netverkinum, óansæð hvar teirra konta er hýst.
title: Latum okkum fáa teg settan upp á %{domain}.
status:
account_status: Kontustøða
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 057dac582c..4fefee7ae0 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -187,6 +187,7 @@ fr-CA:
create_domain_block: Créer un blocage de domaine
create_email_domain_block: Création d'un blocage de domaine de courrier électronique
create_ip_block: Créer une règle IP
+ create_relay: Créer un relais
create_unavailable_domain: Créer un domaine indisponible
create_user_role: Créer le rôle
demote_user: Rétrograder l’utilisateur·ice
@@ -198,18 +199,22 @@ fr-CA:
destroy_email_domain_block: Supprimer le blocage de domaine de courriel
destroy_instance: Purge du domaine
destroy_ip_block: Supprimer la règle IP
+ destroy_relay: Supprimer le relais
destroy_status: Supprimer le message
destroy_unavailable_domain: Supprimer le domaine indisponible
destroy_user_role: Détruire le rôle
disable_2fa_user: Désactiver l’A2F
disable_custom_emoji: Désactiver les émojis personnalisés
+ disable_relay: Désactiver le relais
disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur
disable_user: Désactiver le compte
enable_custom_emoji: Activer les émojis personnalisées
+ enable_relay: Activer le relais
enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur
enable_user: Activer l’utilisateur
memorialize_account: Ériger en mémorial
promote_user: Promouvoir l’utilisateur
+ publish_terms_of_service: Publier les conditions d'utilisation
reject_appeal: Rejeter l'appel
reject_user: Rejeter l’utilisateur
remove_avatar_user: Supprimer l’avatar
@@ -247,6 +252,7 @@ fr-CA:
create_domain_block_html: "%{name} a bloqué le domaine %{target}"
create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}"
create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}"
+ create_relay_html: "%{name} a créé un relais %{target}"
create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}"
create_user_role_html: "%{name} a créé le rôle %{target}"
demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}"
@@ -258,18 +264,22 @@ fr-CA:
destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}"
destroy_instance_html: "%{name} a purgé le domaine %{target}"
destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}"
+ destroy_relay_html: "%{name} a supprimé le relais %{target}"
destroy_status_html: "%{name} a supprimé le message de %{target}"
destroy_unavailable_domain_html: "%{name} a repris la livraison au domaine %{target}"
destroy_user_role_html: "%{name} a supprimé le rôle %{target}"
disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}"
disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}"
+ disable_relay_html: "%{name} a désactivé le relais %{target}"
disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}"
disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}"
enable_custom_emoji_html: "%{name} a activé l'émoji %{target}"
+ enable_relay_html: "%{name} a activé le relais %{target}"
enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}"
enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}"
memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial"
promote_user_html: "%{name} a promu l'utilisateur·rice %{target}"
+ publish_terms_of_service_html: "%{name} a publié des mises à jour des conditions d'utilisation"
reject_appeal_html: "%{name} a rejeté l'appel de la décision de modération émis par %{target}"
reject_user_html: "%{name} a rejeté l’inscription de %{target}"
remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}"
@@ -821,8 +831,10 @@ fr-CA:
back_to_account: Retour à la page du compte
back_to_report: Retour à la page du rapport
batch:
+ add_to_report: 'Ajouter au rapport #%{id}'
remove_from_report: Retirer du rapport
report: Signalement
+ contents: Contenu
deleted: Supprimé
favourites: Favoris
history: Historique de version
@@ -831,12 +843,17 @@ fr-CA:
media:
title: Médias
metadata: Metadonnés
+ no_history: Ce message n'a pas été édité
no_status_selected: Aucun message n’a été modifié car aucun n’a été sélectionné
open: Ouvrir le message
original_status: Message original
reblogs: Partages
+ replied_to_html: Répondu à %{acct_link}
status_changed: Publication modifiée
+ status_title: Posté par @%{name}
+ title: Messages du compte - @%{name}
trending: Tendances
+ view_publicly: Afficher de manière publique
visibility: Visibilité
with_media: Avec médias
strikes:
@@ -913,6 +930,35 @@ fr-CA:
search: Recherche
title: Hashtags
updated_msg: Paramètres du hashtag mis à jour avec succès
+ terms_of_service:
+ back: Retour aux conditions d'utilisation
+ changelog: Nouveautés
+ create: Utilisez vos propres
+ current: Courant
+ draft: Brouillon
+ generate: Utiliser un modèle
+ generates:
+ action: Générer
+ chance_to_review_html: "Les conditions d'utilisation générées ne seront pas publiées automatiquement. Vous aurez la possibilité de vérifier les résultats. Veuillez remplir les informations nécessaires pour continuer."
+ explanation_html: Le modèle de conditions d'utilisation fourni l'est uniquement à titre informatif et ne doit pas être interprété comme un conseil juridique sur quelque sujet que ce soit. Veuillez consulter votre propre conseiller juridique sur votre situation et les questions juridiques spécifiques que vous vous posez.
+ title: Configuration des Conditions d'Utilisation
+ history: Historique
+ live: En cours d'utilisation
+ no_history: Il n'y a pas encore de modifications enregistrées des conditions d'utilisation.
+ no_terms_of_service_html: Vous n'avez actuellement aucune condition d'utilisation configurée. Les conditions d'utilisation ont pour but de clarifier les droits et obligations de chacun lors de l'utilisation du service et de vous protéger contre d'éventuelles responsabilités en cas de litige avec vos utilisateurs.
+ notified_on_html: Utilisateurs notifiés le `%{date}`
+ notify_users: Notifier les utilisateurs
+ preview:
+ explanation_html: 'L''e-mail sera envoyé aux utilisateurs %{display_count} qui se sont inscrits avant %{date}. Le texte suivant sera inclus dans l''e-mail :'
+ send_preview: Envoyer un aperçu à %{email}
+ send_to_all:
+ one: Envoyer %{display_count} email
+ other: Envoyer %{display_count} emails
+ title: Notification concernant l'aperçu des conditions d'utilisation
+ publish: Publier
+ published_on_html: Publié le %{date}
+ save_draft: Enregistrer le brouillon
+ title: Conditions d'utilisation
title: Administration
trends:
allow: Autoriser
@@ -1120,7 +1166,6 @@ fr-CA:
migrate_account: Déménager vers un compte différent
migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le configurer ici.
or_log_in_with: Ou authentifiez-vous avec
- privacy_policy_agreement_html: J’ai lu et j’accepte la politique de confidentialité
progress:
confirm: Confirmation de l'adresse mail
details: Vos infos
@@ -1145,7 +1190,7 @@ fr-CA:
set_new_password: Définir le nouveau mot de passe
setup:
email_below_hint_html: Consultez votre dossier de courrier indésirable ou demandez-en un autre. Vous pouvez corriger votre adresse e-mail si elle est incorrecte.
- email_settings_hint_html: Cliquez sur le lien que nous vous avons envoyé pour vérifier %{email}. Nous vous attendrons ici.
+ email_settings_hint_html: Cliquez sur le lien que nous avons envoyé à %{email} pour commencer à utiliser Mastodon. Nous vous attendrons ici.
link_not_received: Vous n'avez pas reçu de lien?
new_confirmation_instructions_sent: Vous allez recevoir un nouvel e-mail avec le lien de confirmation dans quelques minutes !
title: Vérifiez votre boîte de réception
@@ -1154,7 +1199,7 @@ fr-CA:
title: Se connecter à %{domain}
sign_up:
manual_review: Les inscriptions sur %{domain} passent par une revue manuelle de nos modérateurs. Pour les aider, écrivez un peu plus sur vous et pourquoi vous souhaitez créer un compte sur %{domain}.
- preamble: Avec un compte sur ce serveur Mastodon, vous serez en mesure de suivre toute autre personne sur le réseau, quel que soit l’endroit où son compte est hébergé.
+ preamble: Avec un compte sur ce serveur Mastodon, vous pourrez suivre n'importe quelle autre personne du fediverse, quel que soit l'endroit où son compte est hébergé.
title: Mettons les choses en place pour %{domain}.
status:
account_status: État du compte
@@ -1166,10 +1211,14 @@ fr-CA:
view_strikes: Voir les sanctions précédemment appliquées à votre compte
too_fast: Formulaire envoyé trop rapidement, veuillez réessayer.
use_security_key: Utiliser la clé de sécurité
+ user_agreement_html: J'ai lu et j'accepte les conditions d'utilisation et la politique de confidentialité
author_attribution:
example_title: Exemple de texte
+ hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon.
+ instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :'
more_from_html: Plus via %{name}
s_blog: Blog de %{name}
+ then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous.
title: Attribution de l'auteur·e
challenge:
confirm: Continuer
@@ -1661,6 +1710,7 @@ fr-CA:
scheduled_statuses:
over_daily_limit: Vous avez dépassé la limite de %{limit} messages planifiés par jour
over_total_limit: Vous avez dépassé la limite de %{limit} messages planifiés
+ too_soon: la date doit se situer dans le futur
self_destruct:
lead_html: Malheureusement, %{domain} ferme définitivement. Si vous y aviez un compte, vous ne pourrez pas continuer à l’utiliser, mais vous pouvez toujours demander une sauvegarde de vos données.
title: Ce serveur est en cours de fermeture
@@ -1823,6 +1873,8 @@ fr-CA:
too_late: Il est trop tard pour faire appel à cette sanction
tags:
does_not_match_previous_name: ne correspond pas au nom précédent
+ terms_of_service:
+ title: Conditions d'utilisation
themes:
contrast: Mastodon (Contraste élevé)
default: Mastodon (Sombre)
@@ -1883,6 +1935,15 @@ fr-CA:
further_actions_html: Si ce n’était pas vous, nous vous recommandons de %{action} immédiatement et d’activer l’authentification à deux facteurs afin de garder votre compte sécurisé.
subject: Votre compte a été accédé à partir d'une nouvelle adresse IP
title: Une nouvelle connexion
+ terms_of_service_changed:
+ agreement: En continuant d'utiliser %{domain}, vous acceptez ces conditions. Si vous n'êtes pas d'accord avec les conditions mises à jour, vous pouvez résilier votre accord avec %{domain} à tout moment en supprimant votre compte.
+ changelog: 'En un coup d''œil, voici ce que cette mise à jour signifie pour vous :'
+ description: 'Vous recevez cet e-mail car nous apportons des modifications à nos conditions d''utilisation sur %{domain}. Nous vous encourageons à consulter l''intégralité des conditions mises à jour ici :'
+ description_html: Vous recevez cet e-mail car nous apportons des modifications à nos conditions d'utilisation sur %{domain}. Nous vous encourageons à consulter l'intégralité des conditions mises à jour ici.
+ sign_off: L'équipe %{domain}
+ subject: Mises à jour de nos conditions d'utilisation
+ subtitle: Les conditions d'utilisation de `%{domain}` changent
+ title: Mise à jour importante
warning:
appeal: Faire appel
appeal_description: Si vous pensez qu'il s'agit d'une erreur, vous pouvez faire appel auprès de l'équipe de %{instance}.
@@ -1928,7 +1989,7 @@ fr-CA:
feature_action: En savoir plus
feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous.
feature_audience_title: Construisez votre audience en toute confiance
- feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble.
+ feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble.
feature_control_title: Gardez le contrôle de votre fil
feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous.
feature_creativity_title: Créativité inégalée
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index e21e4f3e09..3000f9a4a9 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -187,6 +187,7 @@ fr:
create_domain_block: Créer un blocage de domaine
create_email_domain_block: Création d'un blocage de domaine de courrier électronique
create_ip_block: Créer une règle IP
+ create_relay: Créer un relais
create_unavailable_domain: Créer un domaine indisponible
create_user_role: Créer le rôle
demote_user: Rétrograder l’utilisateur·ice
@@ -198,18 +199,22 @@ fr:
destroy_email_domain_block: Supprimer le blocage de domaine de courriel
destroy_instance: Purge du domaine
destroy_ip_block: Supprimer la règle IP
+ destroy_relay: Supprimer le relais
destroy_status: Supprimer le message
destroy_unavailable_domain: Supprimer le domaine indisponible
destroy_user_role: Détruire le rôle
disable_2fa_user: Désactiver l’A2F
disable_custom_emoji: Désactiver les émojis personnalisés
+ disable_relay: Désactiver le relais
disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur
disable_user: Désactiver le compte
enable_custom_emoji: Activer les émojis personnalisées
+ enable_relay: Activer le relais
enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur
enable_user: Activer le compte
memorialize_account: Ériger en mémorial
promote_user: Promouvoir le compte
+ publish_terms_of_service: Publier les conditions d'utilisation
reject_appeal: Rejeter l'appel
reject_user: Rejeter le compte
remove_avatar_user: Supprimer l’avatar
@@ -247,6 +252,7 @@ fr:
create_domain_block_html: "%{name} a bloqué le domaine %{target}"
create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}"
create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}"
+ create_relay_html: "%{name} a créé un relais %{target}"
create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}"
create_user_role_html: "%{name} a créé le rôle %{target}"
demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}"
@@ -258,18 +264,22 @@ fr:
destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}"
destroy_instance_html: "%{name} a purgé le domaine %{target}"
destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}"
+ destroy_relay_html: "%{name} a supprimé le relais %{target}"
destroy_status_html: "%{name} a supprimé le message de %{target}"
destroy_unavailable_domain_html: "%{name} a repris la livraison au domaine %{target}"
destroy_user_role_html: "%{name} a supprimé le rôle %{target}"
disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}"
disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}"
+ disable_relay_html: "%{name} a désactivé le relais %{target}"
disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}"
disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}"
enable_custom_emoji_html: "%{name} a activé l'émoji %{target}"
+ enable_relay_html: "%{name} a activé le relais %{target}"
enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}"
enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}"
memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial"
promote_user_html: "%{name} a promu l'utilisateur·rice %{target}"
+ publish_terms_of_service_html: "%{name} a publié des mises à jour des conditions d'utilisation"
reject_appeal_html: "%{name} a rejeté l'appel de la décision de modération émis par %{target}"
reject_user_html: "%{name} a rejeté l’inscription de %{target}"
remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}"
@@ -821,8 +831,10 @@ fr:
back_to_account: Retour à la page du compte
back_to_report: Retour à la page du rapport
batch:
+ add_to_report: 'Ajouter au rapport #%{id}'
remove_from_report: Retirer du rapport
report: Signalement
+ contents: Contenu
deleted: Supprimé
favourites: Favoris
history: Historique de version
@@ -831,12 +843,17 @@ fr:
media:
title: Médias
metadata: Metadonnés
+ no_history: Ce message n'a pas été édité
no_status_selected: Aucun message n’a été modifié car aucun n’a été sélectionné
open: Ouvrir le message
original_status: Message original
reblogs: Partages
- status_changed: Publication modifiée
+ replied_to_html: Répondu à %{acct_link}
+ status_changed: Message modifié
+ status_title: Posté par @%{name}
+ title: Messages du compte - @%{name}
trending: Tendances
+ view_publicly: Afficher de manière publique
visibility: Visibilité
with_media: Avec médias
strikes:
@@ -913,6 +930,35 @@ fr:
search: Recherche
title: Hashtags
updated_msg: Paramètres du hashtag mis à jour avec succès
+ terms_of_service:
+ back: Retour aux conditions d'utilisation
+ changelog: Nouveautés
+ create: Utilisez vos propres
+ current: Courant
+ draft: Brouillon
+ generate: Utiliser un modèle
+ generates:
+ action: Générer
+ chance_to_review_html: "Les conditions d'utilisation générées ne seront pas publiées automatiquement. Vous aurez la possibilité de vérifier les résultats. Veuillez remplir les informations nécessaires pour continuer."
+ explanation_html: Le modèle de conditions d'utilisation fourni l'est uniquement à titre informatif et ne doit pas être interprété comme un conseil juridique sur quelque sujet que ce soit. Veuillez consulter votre propre conseiller juridique sur votre situation et les questions juridiques spécifiques que vous vous posez.
+ title: Configuration des Conditions d'Utilisation
+ history: Historique
+ live: En cours d'utilisation
+ no_history: Il n'y a pas encore de modifications enregistrées des conditions d'utilisation.
+ no_terms_of_service_html: Vous n'avez actuellement aucune condition d'utilisation configurée. Les conditions d'utilisation ont pour but de clarifier les droits et obligations de chacun lors de l'utilisation du service et de vous protéger contre d'éventuelles responsabilités en cas de litige avec vos utilisateurs.
+ notified_on_html: Utilisateurs notifiés le `%{date}`
+ notify_users: Notifier les utilisateurs
+ preview:
+ explanation_html: 'L''e-mail sera envoyé aux utilisateurs %{display_count} qui se sont inscrits avant %{date}. Le texte suivant sera inclus dans l''e-mail :'
+ send_preview: Envoyer un aperçu à %{email}
+ send_to_all:
+ one: Envoyer %{display_count} email
+ other: Envoyer %{display_count} emails
+ title: Notification concernant l'aperçu des conditions d'utilisation
+ publish: Publier
+ published_on_html: Publié le %{date}
+ save_draft: Enregistrer le brouillon
+ title: Conditions d'utilisation
title: Administration
trends:
allow: Autoriser
@@ -1120,7 +1166,6 @@ fr:
migrate_account: Déménager vers un compte différent
migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le configurer ici.
or_log_in_with: Ou authentifiez-vous avec
- privacy_policy_agreement_html: J’ai lu et j’accepte la politique de confidentialité
progress:
confirm: Confirmation de l'adresse mail
details: Vos infos
@@ -1145,7 +1190,7 @@ fr:
set_new_password: Définir le nouveau mot de passe
setup:
email_below_hint_html: Consultez votre dossier de courrier indésirable ou demandez-en un autre. Vous pouvez corriger votre adresse e-mail si elle est incorrecte.
- email_settings_hint_html: Cliquez sur le lien que nous vous avons envoyé pour vérifier l’adresse %{email}. Nous vous attendons ici.
+ email_settings_hint_html: Cliquez sur le lien que nous avons envoyé à %{email} pour commencer à utiliser Mastodon. Nous vous attendrons ici.
link_not_received: Vous n'avez pas reçu de lien ?
new_confirmation_instructions_sent: Vous allez recevoir un nouvel e-mail avec le lien de confirmation dans quelques minutes !
title: Vérifiez votre boîte de réception
@@ -1154,7 +1199,7 @@ fr:
title: Se connecter à %{domain}
sign_up:
manual_review: Les inscriptions sur %{domain} passent par une revue manuelle de nos modérateurs. Pour les aider, écrivez un peu plus sur vous et pourquoi vous souhaitez créer un compte sur %{domain}.
- preamble: Avec un compte sur ce serveur Mastodon, vous serez en mesure de suivre toute autre personne sur le réseau, quel que soit l’endroit où son compte est hébergé.
+ preamble: Avec un compte sur ce serveur Mastodon, vous pourrez suivre n'importe quelle autre personne du fediverse, quel que soit l'endroit où son compte est hébergé.
title: Mettons les choses en place pour %{domain}.
status:
account_status: État du compte
@@ -1166,10 +1211,14 @@ fr:
view_strikes: Voir les sanctions précédemment appliquées à votre compte
too_fast: Formulaire envoyé trop rapidement, veuillez réessayer.
use_security_key: Utiliser la clé de sécurité
+ user_agreement_html: J'ai lu et j'accepte les conditions d'utilisation et la politique de confidentialité
author_attribution:
example_title: Exemple de texte
+ hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon.
+ instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :'
more_from_html: Plus via %{name}
s_blog: Blog de %{name}
+ then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous.
title: Attribution de l'auteur·e
challenge:
confirm: Continuer
@@ -1285,7 +1334,7 @@ fr:
add_new: Ajouter un nouveau hashtag
errors:
limit: Vous avez déjà mis en avant le nombre maximum de hashtags
- hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres publications."
+ hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres messages."
filters:
contexts:
account: Profils
@@ -1296,7 +1345,7 @@ fr:
edit:
add_keyword: Ajouter un mot-clé
keywords: Mots-clés
- statuses: Publications individuelles
+ statuses: Messages individuels
statuses_hint_html: Ce filtre s'applique à la sélection de messages individuels, qu'ils correspondent ou non aux mots-clés ci-dessous. Revoir ou supprimer des messages du filtre.
title: Modifier le filtre
errors:
@@ -1315,8 +1364,8 @@ fr:
one: "%{count} message"
other: "%{count} messages"
statuses_long:
- one: "%{count} publication individuelle cachée"
- other: "%{count} publications individuelles cachées"
+ one: "%{count} message individuel caché"
+ other: "%{count} messages individuels cachés"
title: Filtres
new:
save: Enregistrer le nouveau filtre
@@ -1661,6 +1710,7 @@ fr:
scheduled_statuses:
over_daily_limit: Vous avez dépassé la limite de %{limit} messages planifiés par jour
over_total_limit: Vous avez dépassé la limite de %{limit} messages planifiés
+ too_soon: la date doit se situer dans le futur
self_destruct:
lead_html: Malheureusement, %{domain} ferme définitivement. Si vous y aviez un compte, vous ne pourrez pas continuer à l’utiliser, mais vous pouvez toujours demander une sauvegarde de vos données.
title: Ce serveur est en cours de fermeture
@@ -1758,7 +1808,7 @@ fr:
one: "%{count} vidéo"
other: "%{count} vidéos"
boosted_from_html: Partagé depuis %{acct_link}
- content_warning: 'Avertissement sur le contenu : %{warning}'
+ content_warning: 'Avertissement de contenu : %{warning}'
default_language: Même langue que celle de l’interface
disallowed_hashtags:
one: 'contient un hashtag désactivé : %{tags}'
@@ -1823,6 +1873,8 @@ fr:
too_late: Il est trop tard pour faire appel à cette sanction
tags:
does_not_match_previous_name: ne correspond pas au nom précédent
+ terms_of_service:
+ title: Conditions d'utilisation
themes:
contrast: Mastodon (Contraste élevé)
default: Mastodon (Sombre)
@@ -1883,6 +1935,15 @@ fr:
further_actions_html: Si ce n’était pas vous, nous vous recommandons de %{action} immédiatement et d’activer l’authentification à deux facteurs afin de garder votre compte sécurisé.
subject: Une nouvelle adresse IP a accédé à votre compte
title: Une nouvelle connexion
+ terms_of_service_changed:
+ agreement: En continuant d'utiliser %{domain}, vous acceptez ces conditions. Si vous n'êtes pas d'accord avec les conditions mises à jour, vous pouvez résilier votre accord avec %{domain} à tout moment en supprimant votre compte.
+ changelog: 'En un coup d''œil, voici ce que cette mise à jour signifie pour vous :'
+ description: 'Vous recevez cet e-mail car nous apportons des modifications à nos conditions d''utilisation sur %{domain}. Nous vous encourageons à consulter l''intégralité des conditions mises à jour ici :'
+ description_html: Vous recevez cet e-mail car nous apportons des modifications à nos conditions d'utilisation sur %{domain}. Nous vous encourageons à consulter l'intégralité des conditions mises à jour ici.
+ sign_off: L'équipe %{domain}
+ subject: Mises à jour de nos conditions d'utilisation
+ subtitle: Les conditions d'utilisation de `%{domain}` changent
+ title: Mise à jour importante
warning:
appeal: Faire appel
appeal_description: Si vous pensez qu'il s'agit d'une erreur, vous pouvez faire appel auprès de l'équipe de %{instance}.
@@ -1928,7 +1989,7 @@ fr:
feature_action: En savoir plus
feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous.
feature_audience_title: Construisez votre audience en toute confiance
- feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble.
+ feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble.
feature_control_title: Gardez le contrôle de votre fil
feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous.
feature_creativity_title: Créativité inégalée
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index 088e49cb9d..2809019bf3 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -187,6 +187,7 @@ fy:
create_domain_block: Domeinblokkade oanmeitsje
create_email_domain_block: E-maildomeinblokkade oanmeitsje
create_ip_block: IP-rigel oanmeitsje
+ create_relay: Relay oanmeitsje
create_unavailable_domain: Net beskikber domein oanmeitsje
create_user_role: Rol oanmeitsje
demote_user: Brûker degradearje
@@ -198,18 +199,22 @@ fy:
destroy_email_domain_block: E-maildomeinblokkade fuortsmite
destroy_instance: Domein folslein fuortsmite
destroy_ip_block: IP-rigel fuortsmite
+ destroy_relay: Relay fuortsmite
destroy_status: Toot fuortsmite
destroy_unavailable_domain: Net beskikber domein fuortsmite
destroy_user_role: Rol permanint fuortsmite
disable_2fa_user: Twa-stapsferifikaasje útskeakelje
disable_custom_emoji: Lokale emoji útskeakelje
+ disable_relay: Relay útskeakelje
disable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker útskeakelje
disable_user: Brûker útskeakelje
enable_custom_emoji: Lokale emoji ynskeakelje
+ enable_relay: Relay ynskeakelje
enable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker ynskeakelje
enable_user: Brûker ynskeakelje
memorialize_account: De account yn in Yn memoriam wizigje
promote_user: Brûker promovearje
+ publish_terms_of_service: Algemiene gebrûksbetingsten publisearje
reject_appeal: Beswier ôfwize
reject_user: Brûker ôfwize
remove_avatar_user: Profylfoto fuortsmite
@@ -247,6 +252,7 @@ fy:
create_domain_block_html: Domein %{target} is troch %{name} blokkearre
create_email_domain_block_html: "%{name} hat it e-maildomein %{target} blokkearre"
create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke"
+ create_relay_html: "%{name} hat in relay oanmakke %{target}"
create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige"
create_user_role_html: "%{name} hat de rol %{target} oanmakke"
demote_user_html: Brûker %{target} is troch %{name} degradearre
@@ -258,18 +264,22 @@ fy:
destroy_email_domain_block_html: "%{name} hat it e-maildomein %{target} deblokkearre"
destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten"
destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten"
+ destroy_relay_html: "%{name} hat de relay %{target} fuortsmiten"
destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten
destroy_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} opnij starte"
destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten"
disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele
disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele
+ disable_relay_html: "%{name} hat de relay %{target} útskeakele"
disable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail útskeakele foar %{target}"
disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele
enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele
+ enable_relay_html: "%{name} hat de relay %{target} ynskeakele"
enable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail ynskeakele foar %{target}"
enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele
memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige
promote_user_html: Brûker %{target} is troch %{name} promovearre
+ publish_terms_of_service_html: "%{name} publisearre updates fan de tsjinstbetingsten"
reject_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} ôfwêzen"
reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen"
remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten"
@@ -818,8 +828,10 @@ fy:
back_to_account: Tebek nei accountside
back_to_report: Tebek nei de rapportaazje
batch:
+ add_to_report: 'Oan rapport #%{id} tafoegje'
remove_from_report: Ut rapportaazje fuortsmite
report: Rapportaazje
+ contents: Ynhâld
deleted: Fuortsmiten
favourites: Favoriten
history: Ferzjeskiednis
@@ -828,12 +840,17 @@ fy:
media:
title: Media
metadata: Metagegevens
+ no_history: Dit berjocht is net bewurke
no_status_selected: Der binne gjin berjochten wizige, omdat der gjin ien selektearre waard
open: Berjocht toane
original_status: Oarspronklik berjocht
reblogs: Boosts
+ replied_to_html: Antwurde op %{acct_link}
status_changed: Berjocht wizige
+ status_title: Berjocht fan @%{name}
+ title: Accountberjochten - @%{name}
trending: Trending
+ view_publicly: Yn it iepenbier besjen
visibility: Sichtberheid
with_media: Mei media
strikes:
@@ -910,6 +927,35 @@ fy:
search: Sykje
title: Hashtags
updated_msg: Hashtagynstellingen mei sukses bywurke
+ terms_of_service:
+ back: Tebek nei de gebrûksbetingsten
+ changelog: Wat is wizige
+ create: Brûk jo eigen
+ current: Aktuele
+ draft: Konsept
+ generate: Sjabloan brûke
+ generates:
+ action: Generearje
+ chance_to_review_html: "De generearre gebrûksbetingsten wurde net automatysk publisearre. Jo krije gelegenheid om de resultaten te besjen. Folje de nedige gegevens yn om troch te gean."
+ explanation_html: It sjabloan foar de gebrûksbetingsten is útslutend bedoeld foar ynformative doeleinen en mei net opfette wurde as juridysk advys oer hokker ûnderwerp dan ek. Freegje in eigen juridysk adviseur oer jo situaasje en foar spesifike juridyske fragen.
+ title: Gebrûksbetingsten ynstelle
+ history: Skiednis
+ live: Aktueel
+ no_history: Der binne noch gjin bewarre wizigingen fan de gebrûksbetingsten.
+ no_terms_of_service_html: Jo hawwe op dit stuit gjin servicebetingsten konfigurearre. De gebrûksbetingsten binne bedoeld om dúdlikheid te ferskaffen en jo te beskermjen tsjin mooglike ferplichtingen yn konflikten mei brûkers.
+ notified_on_html: Brûkers ynljochte op %{date}
+ notify_users: Brûkers ynformearje
+ preview:
+ explanation_html: 'It e-mailberjocht wurdt ferstjoerd nei %{display_count} brûkers dy’t harren oanmeld hawwe foar %{date}. De folgjende tekst sil yn it e-mailberjocht opnommen wurde:'
+ send_preview: Foarbyld ferstjoere nei %{email}
+ send_to_all:
+ one: "%{display_count} e-mailberjocht ferstjoere"
+ other: "%{display_count} e-mailberjochten ferstjoere"
+ title: Foarbyld fan Melding gebrûksbetingsten
+ publish: Publisearje
+ published_on_html: Publisearre op %{date}
+ save_draft: Konsept bewarje
+ title: Gebrûksbetingsten
title: Behear
trends:
allow: Tastean
@@ -1117,7 +1163,6 @@ fy:
migrate_account: Nei in oar account ferhúzje
migrate_account_html: Wannear’t jo dizze account nei in oare account trochferwize wolle, kinne jo dit hjir ynstelle.
or_log_in_with: Of oanmelde mei
- privacy_policy_agreement_html: Ik haw it privacybelied lêzen en gean dêrmei akkoard
progress:
confirm: E-mailadres werhelje
details: Jo gegevens
@@ -1142,7 +1187,7 @@ fy:
set_new_password: Nij wachtwurd ynstelle
setup:
email_below_hint_html: Kontrolearje jo map Net-winske, of freegje in nije befêstigingskeppeling oan. Jo kinne jo e-mailadres wizigje as it ferkeard is.
- email_settings_hint_html: Klik op de keppeling dy’t wy jo stjoerd hawwe om %{email} te ferifiearjen. Wy wachtsje wol even.
+ email_settings_hint_html: Klik op de keppeling dy’t wy nei %{email} stjoerd hawwe om Mastodon te brûken. Wy wachtsje hjir ôf.
link_not_received: Gjin keppeling krigen?
new_confirmation_instructions_sent: Jo ûntfange binnen inkelde minuten in nij e-mailberjocht mei de befêstigingskeppeling!
title: Kontrolearje jo Postfek YN
@@ -1151,7 +1196,7 @@ fy:
title: Oanmelde op %{domain}
sign_up:
manual_review: Ynskriuwingen op %{domain} wurde hânmjittich troch de moderator beoardiele. Skriuw wat oer josels en wêrom jo in account wolle op %{domain} om ús te helpen jo registraasje te ferwurkjen.
- preamble: Jo kinne mei in Mastodon-account elkenien yn it netwurk folgen, wêr’t dizze persoan ek in account hat.
+ preamble: Mei in account op dizze Mastodon-server kinne jo elkenien folgje op de fediverse, nettsjinsteande wêr’t dizze persoan in account hat.
title: Litte wy jo account op %{domain} ynstelle.
status:
account_status: Accountsteat
@@ -1163,6 +1208,7 @@ fy:
view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dy’t jo makke hawwe
too_fast: Formulier is te fluch yntsjinne. Probearje it nochris.
use_security_key: Befeiligingskaai brûke
+ user_agreement_html: Ik haw de gebrûksbetingsten en it privacybelied lêzen en gean der mei akkoard
author_attribution:
example_title: Faorbyldtekst
hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoe’t jo oahelle wurde as dizze dield wurde op Mastodon.
@@ -1661,6 +1707,7 @@ fy:
scheduled_statuses:
over_daily_limit: Jo binne oer de limyt fan %{limit} yn te plannen berjochten foar hjoed
over_total_limit: Jo binne oer de limyt fan %{limit} yn te plannen berjochten
+ too_soon: datum moat yn de takomst lizze
self_destruct:
lead_html: Spitigernôch sil %{domain} permanint ôfslute. As jo dêr in account hiene, kinne jo dizze net mear brûke, mar jo kinne noch hieltyd in reservekopy fan jo gegevens opfreegje.
title: Deze server sil ôfslute
@@ -1823,6 +1870,8 @@ fy:
too_late: De perioade dat jo beswier meitsje kinne tsjin dizze skeining is ferrûn
tags:
does_not_match_previous_name: komt net oerien mei de foarige namme
+ terms_of_service:
+ title: Gebrûksbetingsten
themes:
contrast: Mastodon (heech kontrast)
default: Mastodon (donker)
@@ -1883,6 +1932,15 @@ fy:
further_actions_html: Wannear’t jo dit net wiene, advisearje wy om daliks %{action} en om twa-stapsferifikaasje yn te skeakeljen, om sa jo account feilich te hâlden.
subject: Jo account is fan in nij IP-adres ôf benadere
title: In nije registraasje
+ terms_of_service_changed:
+ agreement: Troch %{domain} brûke te bliuwen, geane jo akkoard mei dizze betingsten. As jo it net iens binne mei de bywurke betingsten, kinne jo jo oerienkomst mei %{domain} op elk winske momint beëinigje troch jo account fuort te smiten.
+ changelog: 'Yn ien eachopslach betsjut dizze update foar jo:'
+ description: 'Jo ûntfange dit berjocht, omdat wy inkelde wizigingen oanbringe yn ús gebrûksbetingsten by %{domain}. Wy riede jo oan om de bywurke betingsten hjir folslein te besjen:'
+ description_html: Jo ûntfange dit berjocht, omdat wy inkelde wizigingen oanbringe yn ús gebrûksbetingsten by %{domain}. Wy riede jo oan om de bywurke betingsten hjir folslein te besjen.
+ sign_off: It %{domain}-team
+ subject: Aktualisaasje fan ús tsjinstbetingsten
+ subtitle: De gebrûksbetingsten fan %{domain} wizigje
+ title: Wichtige update
warning:
appeal: Beswier yntsjinje
appeal_description: Wannear’t jo tinke dat dit in flater is, kinne jo in beswier yntsjinje by de meiwurkers fan %{instance}.
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index 424302fc2e..1da40dc1c3 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -1186,7 +1186,6 @@ ga:
migrate_account: Bog chuig cuntas eile
migrate_account_html: Más mian leat an cuntas seo a atreorú chuig ceann eile, is féidir leat é a chumrú anseo.
or_log_in_with: Nó logáil isteach le
- privacy_policy_agreement_html: Léigh mé agus aontaím leis an polasaí príobháideachais
progress:
confirm: Deimhnigh ríomhphost
details: Do chuid sonraí
@@ -1211,7 +1210,6 @@ ga:
set_new_password: Socraigh pasfhocal nua
setup:
email_below_hint_html: Seiceáil d'fhillteán turscair, nó iarr ceann eile. Is féidir leat do sheoladh ríomhphoist a cheartú má tá sé mícheart.
- email_settings_hint_html: Cliceáil ar an nasc a sheol muid chugat chun %{email} a fhíorú. Beidh muid ag fanacht ar dheis anseo.
link_not_received: Nach bhfuair tú nasc?
new_confirmation_instructions_sent: Gheobhaidh tú ríomhphost nua leis an nasc deimhnithe i gceann cúpla bomaite!
title: Seiceáil do bhosca isteach
@@ -1220,7 +1218,6 @@ ga:
title: Logáil isteach go %{domain}
sign_up:
manual_review: Téann clárúcháin ar %{domain} trí athbhreithniú láimhe ag ár modhnóirí. Chun cabhrú linn do chlárúchán a phróiseáil, scríobh beagán fút féin agus cén fáth a bhfuil cuntas uait ar %{domain}.
- preamble: Le cuntas ar an bhfreastalaí Mastodon seo, beidh tú in ann aon duine eile ar an líonra a leanúint, beag beann ar an áit a bhfuil a gcuntas á óstáil.
title: Déanaimis tú a shocrú ar %{domain}.
status:
account_status: Stádas cuntais
@@ -1790,6 +1787,7 @@ ga:
scheduled_statuses:
over_daily_limit: Tá an teorainn de %{limit} postáil sceidealaithe sáraithe agat don lá atá inniu ann
over_total_limit: Tá an teorainn de %{limit} postáil sceidealaithe sáraithe agat
+ too_soon: caithfidh dáta a bheith sa todhchaí
self_destruct:
lead_html: Ar an drochuair, tá %{domain} ag dúnadh síos go buan. Má bhí cuntas agat ann, ní bheidh tú in ann leanúint ar aghaidh á úsáid, ach is féidir leat cúltaca de do shonraí a iarraidh fós.
title: Tá an freastalaí seo ag dúnadh
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index ae714cddcf..850143567f 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -1168,7 +1168,6 @@ gd:
migrate_account: Imrich gu cunntas eile
migrate_account_html: Nam bu mhiann leat an cunntas seo ath-stiùireadh gu fear eile, ’s urrainn dhut a rèiteachadh an-seo.
or_log_in_with: No clàraich a-steach le
- privacy_policy_agreement_html: Leugh mi is tha mi ag aontachadh ris a’ phoileasaidh prìobhaideachd
progress:
confirm: Dearbh am post-d
details: Am fiosrachadh agad
@@ -1193,7 +1192,6 @@ gd:
set_new_password: Suidhich facal-faire ùr
setup:
email_below_hint_html: Thoir sùil air pasgan an spama agad no iarr fear eile. ’S urrainn dhut an seòladh puist-d agad a chur ceart ma tha e ceàrr.
- email_settings_hint_html: Briog air a’ cheangal a chuir sinn thugad a dhearbhadh %{email}. Fuirichidh sinn ort an-seo.
link_not_received: Nach d’fhuair thu ceangal?
new_confirmation_instructions_sent: Gheibh thu post-d ùr le ceangal dearbhaidh an ceann corra mionaid!
title: Thoir sùil air a’ bhogsa a-steach agad
@@ -1202,7 +1200,6 @@ gd:
title: Clàraich a-steach gu %{domain}
sign_up:
manual_review: Nì na maoir againn lèirmheas a làimh air clàraidhean air %{domain}. Airson ar cuideachadh le làimhseachadh do chlàraidh, sgrìobh beagan mu do dhèidhinn agus carson a tha thu ag iarraidh cunntas air %{domain}.
- preamble: Le cunntas air an fhrithealaiche Mastodon seo, ’s urrainn dhut neach sam bith a leantainn air an lìonra, ge b’ e càit a bheil an cunntas aca-san ’ga òstadh.
title: Suidhicheamaid %{domain} dhut.
status:
account_status: Staid a’ chunntais
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index cf5363196c..ac6581c8c9 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -214,6 +214,7 @@ gl:
enable_user: Activar usuaria
memorialize_account: Transformar en conta conmemorativa
promote_user: Promover usuaria
+ publish_terms_of_service: Publicar os Termos do Servizo
reject_appeal: Rexeitar apelación
reject_user: Rexeitar Usuaria
remove_avatar_user: Eliminar avatar
@@ -278,6 +279,7 @@ gl:
enable_user_html: "%{name} activou as credenciais para a usuaria %{target}"
memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo"
promote_user_html: "%{name} promocionou a usuaria %{target}"
+ publish_terms_of_service_html: "%{name} actualizou os termos do servizo"
reject_appeal_html: "%{name} rexeitou a apelación da decisión da moderación de %{target}"
reject_user_html: "%{name} rexeitou o rexistro de %{target}"
remove_avatar_user_html: "%{name} eliminou o avatar de %{target}"
@@ -925,6 +927,35 @@ gl:
search: Buscar
title: Cancelos
updated_msg: Actualizaronse os axustes dos cancelos
+ terms_of_service:
+ back: Volver aos termos do servizo
+ changelog: Que cambios se fixeron
+ create: Usa os teus propios
+ current: Actuais
+ draft: Borrador
+ generate: Usar un modelo
+ generates:
+ action: Crear
+ chance_to_review_html: "Vanse publicar automaticamente os termos do servizo creados. Terás a oportunidade de revisar o resultado. Por favor completa os detalles precisos para continuar."
+ explanation_html: O modelo dos termos do servizo proporcionados é soamente informativo, e en ningún caso constitúe un consello legal. Por favor realiza unha consulta legal sobre a túa situación concreta e posibles cuestións legais que debas afrontar.
+ title: Configurar os Termos do Servizo
+ history: Historial
+ live: Actuais
+ no_history: Non hai rexistrados cambios nos termos do servizo.
+ no_terms_of_service_html: Actualmente non tes configurados ningúns termos do servizo. Os Termos do servizo están pensados para dar claridade e protexerte de responsabilidades potenciais nas disputas coas túas usuarias.
+ notified_on_html: Informouse ás usuarias o %{date}
+ notify_users: Informar ás usuarias
+ preview:
+ explanation_html: 'Vaise enviar un correo a %{display_count} usuarias que crearon a conta antes do %{date}. Incluirase o seguinte texto no correo:'
+ send_preview: Enviar vista previa a %{email}
+ send_to_all:
+ one: Enviar %{display_count} correo
+ other: Enviar %{display_count} correos
+ title: Vista previa da notificación sobre os termos do servizo
+ publish: Publicar
+ published_on_html: Publicados o %{date}
+ save_draft: Gardar borrador
+ title: Termos do Servizo
title: Administración
trends:
allow: Permitir
@@ -1132,7 +1163,6 @@ gl:
migrate_account: Mover a unha conta diferente
migrate_account_html: Se queres redirixir esta conta hacia outra diferente, podes facelo aquí.
or_log_in_with: Ou accede con
- privacy_policy_agreement_html: Lin e acepto a política de privacidade
progress:
confirm: Confirmar correo
details: Detalles
@@ -1157,7 +1187,7 @@ gl:
set_new_password: Estabelecer novo contrasinal
setup:
email_below_hint_html: Mira no cartafol do spam, ou solicita outra. Podes cambiar o enderzo de correo se non é correcto.
- email_settings_hint_html: Preme na ligazón que che enviamos para verificar %{email}. Agardamos por ti.
+ email_settings_hint_html: Preme na ligazón que enviamos a %{email} para comezar a usar Mastodon. Agardámoste.
link_not_received: Non recibiches a ligazón?
new_confirmation_instructions_sent: Nuns minutos recibirás un novo correo electrónico coa ligazón de confirmación!
title: Mira a caixa de entrada
@@ -1166,7 +1196,7 @@ gl:
title: Accede a %{domain}
sign_up:
manual_review: As novas contas en %{domain} son comprobadas manualmente pola moderación. Para axudarnos a xestionar o teu rexistro, escribe algo acerca de ti e por que queres unha conta en %{domain}.
- preamble: Cunha conta neste servidor Mastodon poderás seguir a calquera outra persoa na rede, independentemente de onde estivese hospedada esa conta.
+ preamble: Cunha conta neste servidor Mastodon poderás seguir a calquera outra persoa no fediverso, independentemente de onde estivese hospedada esa conta.
title: Imos crear a túa conta en %{domain}.
status:
account_status: Estado da conta
@@ -1178,6 +1208,7 @@ gl:
view_strikes: Ver avisos anteriores respecto da túa conta
too_fast: Formulario enviado demasiado rápido, inténtao outra vez.
use_security_key: Usa chave de seguridade
+ user_agreement_html: Lin e acepto os termos do servizo e a política de privacidade
author_attribution:
example_title: Texto de mostra
hint_html: Escribes novas ou artigos nun blog alleos a Mastodon? Xestiona o xeito en que podes dar crédito da túa autoría cando os compartes en Mastodon.
@@ -1471,7 +1502,7 @@ gl:
table:
expires_at: Caduca
uses: Usos
- title: Convidar xente
+ title: Convidar a persoas
lists:
errors:
limit: Xa acadaches o número máximo de listas
@@ -1839,6 +1870,8 @@ gl:
too_late: É demasiado tarde para recurrir este aviso
tags:
does_not_match_previous_name: non concorda co nome anterior
+ terms_of_service:
+ title: Termos do Servizo
themes:
contrast: Mastodon (Alto contraste)
default: Mastodon (Escuro)
@@ -1899,6 +1932,15 @@ gl:
further_actions_html: Se non foches ti, aconsellámosche %{action} inmediatamente e activar o segundo factor de autenticación para manter conta segura.
subject: Accedeuse á túa conta desde novos enderezos IP
title: Novo acceso
+ terms_of_service_changed:
+ agreement: Se continúas a usar %{domain} aceptas estas condicións. Se non aceptas as condicións actualizadas podería rematar o acordo con %{domain} en calquera momento e eliminarse a túa conta.
+ changelog: 'Dunha ollada, aquí tes o que implican os cambios para ti:'
+ description: 'Recibes este correo porque fixemos cambios nos termos do servizo de %{domain}. Recomendámosche que leas as condicións actualizadas ao completo aquí:'
+ description_html: Recibes este correo porque fixemos cambios nos termos do servizo de %{domain}. Recomendámosche que leas as condicións actualizadas ao completo aquí.
+ sign_off: O equipo de %{domain}
+ subject: Actualización dos nosos termos do servizo
+ subtitle: Cambiaron os termos do servizo de %{domain}
+ title: Notificación importante
warning:
appeal: Enviar unha apelación
appeal_description: Se cres que esto é un erro, podes enviar un recurso á administración de %{instance}.
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 1c2796173b..eea4c63179 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -220,6 +220,7 @@ he:
enable_user: אפשור משתמש
memorialize_account: הנצחת חשבון
promote_user: קידום משתמש
+ publish_terms_of_service: פרסום תנאי השירות
reject_appeal: דחיית ערעור
reject_user: דחיית משתמש
remove_avatar_user: הסרת תמונת פרופיל
@@ -284,6 +285,7 @@ he:
enable_user_html: "%{name} אפשר/ה כניסה עבור המשתמש %{target}"
memorialize_account_html: "%{name} הפך/ה את חשבונו של %{target} לדף הנצחה"
promote_user_html: "%{name} העלה בדרגה את המשתמש %{target}"
+ publish_terms_of_service_html: "%{name} פירסמו עדכון לתנאי השירות"
reject_appeal_html: "%{name} דחו ערעור על החלטת הנהלת הקהילה מ-%{target}"
reject_user_html: "%{name} דחו הרשמה מ-%{target}"
remove_avatar_user_html: "%{name} הסירו את תמונת הפרופיל של %{target}"
@@ -953,6 +955,37 @@ he:
search: חיפוש
title: תגיות
updated_msg: הגדרות תגיות עודכנו בהצלחה
+ terms_of_service:
+ back: חזרה אל תנאי השירות
+ changelog: מה נשתנה
+ create: הבאתי מהבית
+ current: גרסא נוכחית
+ draft: טיוטה
+ generate: שימוש בתבנית
+ generates:
+ action: לחולל
+ chance_to_review_html: "תנאי השירות שחוללו עצמונית לא יפורסמו אוטומטית. תהיה לך הזדמנות לעבור על התוצאה. יש למלא את הפרטים הבאים כדי להמשיך."
+ explanation_html: תבנית תנאי השירות סופקה לצרכי יידוע בלבד, ואין לראות בהם עצה חוקית על אף נושא. אנא התייעצו בעצמבם עם פרקליט לגבי מצבכם הייחודי ושאלות ספציפיות שעלולות להיות לכם.
+ title: הקמת מסמך תנאי השירות
+ history: גרסאות העבר
+ live: הגרסא החיה
+ no_history: עוד לא נרשמו שינויים בתנאי השירות.
+ no_terms_of_service_html: עוד לא הוקם מסמך תנאי השירות. מסמך תנאי השירות מיועד להבהיר ולהגן עליך מאחריות חוקית במקרה של אי הסכמות מול המשתמשים שלך.
+ notified_on_html: המשתמשים קיבלו הודעה בתאריך %{date}
+ notify_users: להודיע למשתמשים
+ preview:
+ explanation_html: 'הדואל ישלח אל %{display_count} משתמשיםות שנרשמו לפני %{date}. להלן המלל שישלח בדואל:'
+ send_preview: שליחת הצצה מוקדמת אל %{email}
+ send_to_all:
+ many: שליחת %{display_count} הודעות דואל
+ one: שליחת הודעת דואל
+ other: שליחת %{display_count} הודעות דואל
+ two: שליחת שתי הודעות דואל
+ title: צפייה מוקדמת בתנאי השירות
+ publish: לפרסם
+ published_on_html: פורסם ביום %{date}
+ save_draft: שמירת טיוטה
+ title: תנאי השירות
title: ניהול
trends:
allow: לאפשר
@@ -1168,7 +1201,6 @@ he:
migrate_account: מעבר לחשבון אחר
migrate_account_html: אם ברצונך להכווין את החשבון לעבר חשבון אחר, ניתן להגדיר זאת כאן.
or_log_in_with: או התחבר באמצעות
- privacy_policy_agreement_html: קראתי והסכמתי למדיניות הפרטיות
progress:
confirm: אימות כתובת הדואל
details: הפרטים שלך
@@ -1193,7 +1225,7 @@ he:
set_new_password: סיסמה חדשה
setup:
email_below_hint_html: אנא בדקו בתיקיית הספאם, או בקשו קוד חדש. ניתן לתקן את הכתובת אם נפלה תקלדה.
- email_settings_hint_html: לחצו על הקישור שנשלח כדי לאשר את הכתובת %{email}. אנו ממתינים פה.
+ email_settings_hint_html: יש ללחוץ על הקישורית ששלחנו אל %{email} כדי להתחיל להשתמש במסטודון. נמתין לך כאן.
link_not_received: לא קיבלת קישור?
new_confirmation_instructions_sent: אתם עומדים לקבל הודעת דואל חדשה עם קיש/ור אימות בדקות הקרובות!
title: בדוק/בדקי את תיבת הדואר הנכנס שלך
@@ -1202,7 +1234,7 @@ he:
title: התחבר אל %{domain}
sign_up:
manual_review: פתיחת חשבון אצל %{domain} עוברת בדיקה ידנית על ידי הצוות שלנו. כדי לסייע בתהליך הרישום שלכןם, כתבו לנו על עצמכןם ולמה אתןם רוצותים חשבון בשרת %{domain}.
- preamble: כיוון שמסטודון מבוזרת, תוכל/י להשתמש בחשבון שלך משרתי מסטודון או רשתות תואמות אחרות אם אין לך חשבון על שרת זה.
+ preamble: בעזרת חשבון על שרת מסטודון זה, ניתן לעקוב אחרי כל אדם בפידרציה, ולא משנה באיזה שרת נמצא החשבון שלהם.
title: הבה ניצור לך חשבון בשרת %{domain}.
status:
account_status: מצב חשבון
@@ -1214,6 +1246,7 @@ he:
view_strikes: צפיה בעברות קודמות שנרשמו נגד חשבונך
too_fast: הטופס הוגש מהר מדי, נסה/י שוב.
use_security_key: שימוש במפתח אבטחה
+ user_agreement_html: קראתי וזו הסכמתי למסמך תנאי השירות ומדיניות הפרטיות
author_attribution:
example_title: טקסט לדוגמה
hint_html: האם יש לך בלוג או טור חדשות שמתפרסם מחוץ למסטודון? ניתן לשלוט איך יוצג הקרדיט שלך כשמשתפים את הלינק במסטודון.
@@ -1752,6 +1785,7 @@ he:
scheduled_statuses:
over_daily_limit: חרגת מהמספר המקסימלי של הודעות מתוזמנות להיום, שהוא %{limit}
over_total_limit: חרגת מהמספר המקסימלי של הודעות מתוזמנות, שהוא %{limit}
+ too_soon: התאריך חייב להיות עתידי
self_destruct:
lead_html: לרוע המזל, %{domain} עומד לרדת באופן סופי. אם היה לך חשבון כאן, לא תהיה אפשרות להמשיך להשתמש בו, אבל ניתן לבקש גיבוי של כל המידע שלך.
title: שרת זה בתהליכי סגירה
@@ -1922,6 +1956,8 @@ he:
too_late: מאוחר מדי להגיש ערעור
tags:
does_not_match_previous_name: לא תואם את השם האחרון
+ terms_of_service:
+ title: תנאי השירות
themes:
contrast: מסטודון (ניגודיות גבוהה)
default: מסטודון (כהה)
@@ -1982,6 +2018,15 @@ he:
further_actions_html: אם לא את/ה התחברת, אנו ממליצים שתבצע/י %{action} מיידית ותאפשר/י אימות דו גורמי על מנת לשמור על החשבון בטוח.
subject: נרשמה גישה לחשבונך מכתובת IP חדשה
title: התחברות חדשה
+ terms_of_service_changed:
+ agreement: עם המשך השימוש בשרת %{domain} אתן מסכימות לתנאים הללו. אם אינכם מסכימים עם עדכוני תנאי השירות, אתן יכולות להפסיק את ההסכם עם %{domain} בכל עת על ידי מחיקת החשבון.
+ changelog: 'בקצרה, הנה משמעות העדכון עבורך:'
+ description: 'קיבלת הודעת דואל זו כיוון שאנו מבצעים שינויים במסמך תנאי השירות של %{domain}. אנו מעודדים אותך לעבור על השינויים במסמך המלא כאן:'
+ description_html: 'קיבלת הודעת דואל זו כיוון שאנו מבצעים שינויים במסמך תנאי השירות של %{domain}. אנו מעודדים אותך לעבור על השינויים במסמך המלא כאן:'
+ sign_off: צוות %{domain}
+ subject: עדכונים לתנאי השירות שלנו
+ subtitle: מסמך תנאי השירות של %{domain} עוברים שינויים
+ title: עדכון חשוב
warning:
appeal: הגשת ערעור
appeal_description: אם את/ה מאמין/ה שזו טעות, ניתן להגיש ערעור לצוות של %{instance}.
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index fccda994ea..da51e3b5a9 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -214,6 +214,7 @@ hu:
enable_user: Felhasználó engedélyezése
memorialize_account: Fiók emlékké nyilvánítása
promote_user: Felhasználó előléptetése
+ publish_terms_of_service: Felhasználási feltételek közzététele
reject_appeal: Fellebbezés elutasítása
reject_user: Felhasználó Elutasítása
remove_avatar_user: Profilkép eltávolítása
@@ -278,6 +279,7 @@ hu:
enable_user_html: "%{name} engedélyezte %{target} felhasználó bejelentkezését"
memorialize_account_html: "%{name} emléket állított %{target} felhasználónak"
promote_user_html: "%{name} előléptette %{target} felhasználót"
+ publish_terms_of_service_html: "%{name} frissítette a felhasználási feltételeket"
reject_appeal_html: "%{name} visszautasított egy fellebbezést %{target} moderátori döntéséről"
reject_user_html: "%{name} elutasította %{target} regisztrációját"
remove_avatar_user_html: "%{name} törölte %{target} profilképét"
@@ -925,6 +927,35 @@ hu:
search: Keresés
title: Hashtagek
updated_msg: A hashtag beállításokat sikeresen frissítettük
+ terms_of_service:
+ back: Vissza a felhasználási feltételekhez
+ changelog: Mi változott
+ create: Saját használata
+ current: Jelenlegi
+ draft: Piszkozat
+ generate: Sablon használata
+ generates:
+ action: Előállítás
+ chance_to_review_html: "Az előállított felhasználási feltételek nem lesznek automatikusan közzétéve. Előtte áttekintheted az eredményt. A folytatáshoz töltsd ki a szükséges részleteket."
+ explanation_html: A felhasználási feltételek sablonja csak információs célokat szolgál, és semmilyen témában nem tekinthető jogi tanácsadásnak. Konzultálj a saját jogi tanácsadóddal a helyzetedről és a felmerülő konkrét jogi kérdésekről.
+ title: Felhasználási feltételek beállítása
+ history: Előzmények
+ live: Élő
+ no_history: Még nincsenek változtatások a szolgáltatási feltételekben.
+ no_terms_of_service_html: Még nincsenek felhasználási feltételek beállítva. A felhasználási feltételek célja, hogy egyértelműsítsen, és megvédjen a felelősségvállalásoktól a felhasználókkal szembeni lehetséges viták során.
+ notified_on_html: 'Felhasználók értesítve: %{date}'
+ notify_users: Felhasználók értesítése
+ preview:
+ explanation_html: 'Az e-mail %{display_count} felhasználónak lesz elküldve (akik %{date} előtt regisztráltak). A következő szöveg fog szerepelni a levélben:'
+ send_preview: 'Előnézet elküldése ide: %{email}'
+ send_to_all:
+ one: "%{display_count} e-mail elküldése"
+ other: "%{display_count} e-mail elküldése"
+ title: Felhasználási feltételek értesítésének előnézete
+ publish: Közzététel
+ published_on_html: 'Közzétéve: %{date}'
+ save_draft: Piszkozat mentése
+ title: Felhasználási feltételek
title: Karbantartás
trends:
allow: Engedélyezés
@@ -1132,7 +1163,6 @@ hu:
migrate_account: Felhasználói fiók költöztetése
migrate_account_html: Ha át szeretnéd irányítani ezt a fiókodat egy másikra, akkor itt állíthatod be.
or_log_in_with: Vagy jelentkezz be ezzel
- privacy_policy_agreement_html: Elolvastam és egyetértek az adatvédemi nyilatkozattal
progress:
confirm: E-mail megerősítése
details: Saját adatok
@@ -1157,7 +1187,7 @@ hu:
set_new_password: Új jelszó beállítása
setup:
email_below_hint_html: Nézd meg a levélszemét mappát, vagy kérj egy újat. Módosíthatod az e-mail-címet, ha az hibás.
- email_settings_hint_html: Kattints a hivatkozásra, melyet a(z) %{email} megerősítése céljából küldtünk. Addig várni fogunk.
+ email_settings_hint_html: A Mastodon használatának megkezdéséhez kattints a(z) %{email} címre küldött hivatkozásra. Itt fogunk várni.
link_not_received: Nem kaptad meg a hivatkozást?
new_confirmation_instructions_sent: Néhány perc múlva új e-mailt fogsz kapni a megerősítési hivatkozással.
title: Bejövő postaláda ellenőrzése
@@ -1166,7 +1196,7 @@ hu:
title: 'Bejelentkezés ide: %{domain}'
sign_up:
manual_review: A(z) %{domain} regisztrációi a moderátorok kézi felülvizsgálatán mennek át. Hogy segítsd a regisztráció feldolgozását, írj röviden magadról, és hogy miért szeretnél fiókot a(z) %{domain} oldalon.
- preamble: Egy fiókkal ezen a Mastodon-kiszolgálón követhetsz bárkit a hálózaton, függetlenül attól, hogy az illető fiókja melyik kiszolgálón található.
+ preamble: Egy fiókkal ezen a Mastodon kiszolgálón követhetsz bárkit a födiverzumban, függetlenül attól, hogy az illető fiókja melyik kiszolgálón található.
title: Állítsuk be a fiókod a %{domain} kiszolgálón.
status:
account_status: Fiók állapota
@@ -1178,6 +1208,7 @@ hu:
view_strikes: Fiókod ellen felrótt korábbi vétségek megtekintése
too_fast: Túl gyorsan küldted el az űrlapot, próbáld később.
use_security_key: Biztonsági kulcs használata
+ user_agreement_html: Elolvastam és egyetértek a felhasználási feltételekkel és az adatvédelmi nyilatkozattal
author_attribution:
example_title: Mintaszöveg
hint_html: Mastodonon kívül írsz híreket vagy blogbejegyzéseket? Szabályozd, hogyan tüntethetnek fel szerzőként, amikor Mastodonon osztják meg őket.
@@ -1839,6 +1870,8 @@ hu:
too_late: Túl késő, hogy fellebbezd ezt a felrótt vétséget
tags:
does_not_match_previous_name: nem illeszkedik az előző névvel
+ terms_of_service:
+ title: Felhasználási feltételek
themes:
contrast: Mastodon (nagy kontrasztú)
default: Mastodon (sötét)
@@ -1899,6 +1932,15 @@ hu:
further_actions_html: Ha nem te voltál, akkor azt javasoljuk, hogy azonnal %{action} és engedélyezd a kétlépcsős hitelesítést, hogy biztonságban tudd a fiókodat.
subject: A fiókodat egy új IP-címről érték el
title: Új bejelentkezés
+ terms_of_service_changed:
+ agreement: A(z) %{domain} használatának folytatásával beleegyezel ezekbe a feltételekbe. Ha nem értesz egyet a frissített feltételekkel, akkor a fiókod törlésével megszakíthatod a(z) %{domain} weboldallal való megállapodásodat.
+ changelog: 'Dióhéjban ez a frissítés ezt jelenti számodra:'
+ description: 'Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt:'
+ description_html: Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt.
+ sign_off: A(z) %{domain} csapata
+ subject: A felhasználási feltételei frissítései
+ subtitle: A(z) %{domain} felhasználási feltételei megváltoznak
+ title: Fontos frissítés
warning:
appeal: Fellebbezés beküldése
appeal_description: Ha azt gondolod, hogy ez hibás, beküldhetsz egy fellebbezést a(z) %{instance} szerver csapatának.
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index a6924c2b07..dfbbe73e2a 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -462,7 +462,6 @@ hy:
logout: Դուրս գալ
migrate_account: Տեղափոխուել այլ հաշիւ
or_log_in_with: Կամ մուտք գործել օգտագործելով՝
- privacy_policy_agreement_html: Ես կարդացել եւ ընդունել եմ գաղնիութեան քաղաքականութիւնը
progress:
details: Ձեր տուեալները
review: Վաւերացում
@@ -482,7 +481,6 @@ hy:
title: Մտնել %{domain}
sign_up:
manual_review: Գրանցումները %{domain}-ում վաւերացնում են մոդերատորնրը։ Մեզ օգնելու համար մի փոքր պատմէք ձեր մասին եւ թե ինչու էք ուզում գրանցուել։
- preamble: Այս հանգոյցում հաշիւ ունենալով դուք կարող էք հերտեւել դաշնեզերքի ցանկացած օգտատիրոջ, անկախ նրանից թե որտեղ է նրա հաշիւը տեղակայուած։
title: Ստեղծի՜ր հաշիւ %{domain}-ում
status:
account_status: Հաշուի կարգավիճակ
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 9914db1aec..2f8c3ee982 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -1132,7 +1132,6 @@ ia:
migrate_account: Migrar a un altere conto
migrate_account_html: Si tu vole rediriger iste conto a un altere, tu pote configurar lo hic.
or_log_in_with: O aperi session con
- privacy_policy_agreement_html: Io ha legite e accepta le politica de confidentialitate
progress:
confirm: Confirmar e-mail
details: Tu detalios
@@ -1157,7 +1156,6 @@ ia:
set_new_password: Definir un nove contrasigno
setup:
email_below_hint_html: Consulta tu dossier de spam, o requesta un altere ligamine de confirmation. Tu pote corriger tu adresse de e-mail si illo es errate.
- email_settings_hint_html: Clicca sur le ligamine que nos te ha inviate pro verificar %{email}. Nos te attendera hic.
link_not_received: Necun ligamine recipite?
new_confirmation_instructions_sent: Tu recipera un nove e-mail con le ligamine de confirmation in poc minutas!
title: Consulta tu cassa de entrata
@@ -1166,7 +1164,6 @@ ia:
title: Aperir session sur %{domain}
sign_up:
manual_review: Le inscriptiones sur %{domain} passa per un revision manual de nostre moderatores. Pro adjutar nos a processar tu inscription, per favor scribe un poco sur te e explica proque tu vole un conto sur %{domain}.
- preamble: Con un conto sur iste servitor de Mastodon, tu potera sequer qualcunque altere persona sur le rete, independentemente de ubi su conto es albergate.
title: Lassa nos installar tu conto sur %{domain}.
status:
account_status: Stato del conto
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 60c2026667..03d25a6e53 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -903,7 +903,6 @@ id:
migrate_account: Pindah ke akun berbeda
migrate_account_html: Jika Anda ingin mengalihkan akun ini ke akun lain, Anda dapat mengaturnya di sini.
or_log_in_with: Atau masuk dengan
- privacy_policy_agreement_html: Saya telah membaca dan menerima kebijakan privasi
providers:
cas: CAS
saml: SAML
@@ -918,7 +917,6 @@ id:
sign_in:
title: Masuk ke %{domain}
sign_up:
- preamble: Dengan sebuah akun di server Mastodon ini, Anda akan dapat mengikuti orang lain dalam jaringan, di mana pun akun mereka berada.
title: Mari kita siapkan Anda di %{domain}.
status:
account_status: Status akun
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index 5dde082330..4e154b3114 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -1039,7 +1039,6 @@ ie:
migrate_account: Mover te a un conto diferent
migrate_account_html: Si tu vole redirecter ti-ci conto a un altri, tu posse configurar it ci.
or_log_in_with: O intrar med
- privacy_policy_agreement_html: Yo leet e consenti li politica pri privatie
progress:
details: Tui detallies
review: Nor revise
@@ -1062,7 +1061,6 @@ ie:
security: Securitá
set_new_password: Establisser nov passa-parol
setup:
- email_settings_hint_html: Clicca li ligament quel noi inviat a te por verificar %{email}. Noi va atender ci.
link_not_received: Recivet null ligament?
title: Vider tui inbuxe
sign_in:
@@ -1070,7 +1068,6 @@ ie:
title: Aperter session che %{domain}
sign_up:
manual_review: Adhesiones a %{domain} es tractat manualmen de nor moderatores. Por auxiliar nos tractar tui aplication, scri un poc pri te e pro quo tu vole un conto che %{domain}.
- preamble: Med un conto che ti-ci Mastodon-servitor, tu va posser sequer quelcunc altri person in li retage, sin egarda a u logia su conto.
title: Crear un conto che %{domain}.
status:
account_status: Statu del conto
diff --git a/config/locales/io.yml b/config/locales/io.yml
index c0e4ac6dc1..c89d920f30 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -1014,7 +1014,6 @@ io:
migrate_account: Transferez a diferanta konto
migrate_account_html: Se vu volas ridirektar ca konto a diferanto, vu povas ajustar hike.
or_log_in_with: O eniras per
- privacy_policy_agreement_html: Me lektis e konsentis privatesguidilo
progress:
details: Vua detali
review: Nia revuo
@@ -1037,7 +1036,6 @@ io:
security: Chanjar pasvorto
set_new_password: Selektar nova pasvorto
setup:
- email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike.
link_not_received: Ka vu ne recevis ligilo?
title: Kontrolez vua retposti
sign_in:
@@ -1045,7 +1043,6 @@ io:
title: Enirez a %{domain}
sign_up:
manual_review: Registragi che %{domain} es revuata da nia personaro. Por helpar ni traktar vua aplikajo, skribez kelko pri vu e pro quo vu volas konto che %{domain}.
- preamble: Per konto en ca servilo di Mastodon, on povas sequar irga persono en ca reto, ne ye ube ona konto hostagisas.
title: Ni komencigez vu en %{domain}.
status:
account_status: Kontostando
diff --git a/config/locales/is.yml b/config/locales/is.yml
index d606106421..f714409ff1 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -214,6 +214,7 @@ is:
enable_user: Virkja notanda
memorialize_account: Gera aðgang að minningargrein
promote_user: Hækka notanda í tign
+ publish_terms_of_service: Birta þjónustuskilmála
reject_appeal: Hafna áfrýjun
reject_user: Hafna notanda
remove_avatar_user: Fjarlægja auðkennismynd
@@ -278,6 +279,7 @@ is:
enable_user_html: "%{name} gerði innskráningu virka fyrir notandann %{target}"
memorialize_account_html: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu"
promote_user_html: "%{name} hækkaði notandann %{target} í tign"
+ publish_terms_of_service_html: "%{name} gaf út uppfærða þjónustuskilmála"
reject_appeal_html: "%{name} hafnaði áfrýjun á ákvörðun umsjónarmanns frá %{target}"
reject_user_html: "%{name} hafnaði nýskráningu frá %{target}"
remove_avatar_user_html: "%{name} fjarlægði auðkennismynd af %{target}"
@@ -927,6 +929,34 @@ is:
search: Leita
title: Myllumerki
updated_msg: Það tókst að uppfæra stillingar myllumerkja
+ terms_of_service:
+ back: Til baka í þjónustuskilmála
+ changelog: Hvað breyttist
+ create: Notaðu þína eigin
+ current: Núverandi
+ draft: Drög
+ generate: Nota sniðmát
+ generates:
+ action: Útbúa
+ chance_to_review_html: "Sjálfvirkt útbúnu þjónustuskilmálarnir verða ekki birtir sjálfkrafa. Þú munt geta yfirfarið textann. Fylltu inn nauðsynlegar upplýsingar til að halda áfram to proceed."
+ title: Uppsetning þjónustuskilmála
+ history: Ferill
+ live: Í beinni
+ no_history: Það eru engar breytingar ennþá á þjónustuskilmálunum.
+ no_terms_of_service_html: Þú ert ekki með neina þjónustuskilmála stillta í augnablikinu. Þjónustuskilmálum er ætlað að gera ábyrgð ljósa og vernda þig fyrir mögulegum kröfum sem notendur gætu gert í ágreiningsmálum við þig.
+ notified_on_html: Notendur látnir vita þann %{date}
+ notify_users: Láta notendur vita
+ preview:
+ explanation_html: 'Tölvupósturinn verður sendur til %{display_count} notenda sem hafa skráð sig fyrir %{date}. Eftirfarandi texti verður hafður með í póstinum:'
+ send_preview: Senda forskoðun til %{email}
+ send_to_all:
+ one: Senda %{display_count} tölvupóst
+ other: Senda %{display_count} tölvupósta
+ title: Forskoða tilkynningu um breytingar á þjónustuskilmálum
+ publish: Birta
+ published_on_html: Gefið út þann %{date}
+ save_draft: Vista drög
+ title: Þjónustuskilmálar
title: Stjórnendur
trends:
allow: Leyfa
@@ -1136,7 +1166,6 @@ is:
migrate_account: Færa á annan notandaaðgang
migrate_account_html: Ef þú vilt endurbeina þessum aðgangi á einhvern annan, geturðu stillt það hér.
or_log_in_with: Eða skráðu inn með
- privacy_policy_agreement_html: Ég hef lesið og samþykkt persónuverndarstefnuna
progress:
confirm: Staðfesta tölvupóstfang
details: Nánari upplýsingar þínar
@@ -1161,7 +1190,7 @@ is:
set_new_password: Stilla nýtt lykilorð
setup:
email_below_hint_html: Skoðaðu ruslpóstmöppuna þína, eða biddu um annan póst. Þú getur leiðrétt tölvupóstfangið þitt ef þörf er á.
- email_settings_hint_html: Ýttu á tengilinn sem við sendum þér til að staðfesta %{email}. Við bíðum á meðan.
+ email_settings_hint_html: Smelltu á tengilinn sem við sendum á %{email} til að byrja að nota Mastodon. Við bíðum hér á meðan.
link_not_received: Fékkstu ekki neinn tengil?
new_confirmation_instructions_sent: Þú munt fá nýjan tölvupóst með staðfestingartengli innan skamms!
title: Athugaðu pósthólfið þitt
@@ -1170,7 +1199,7 @@ is:
title: Skrá inn á %{domain}
sign_up:
manual_review: Nýskráningar á %{domain} fara í gegnum handvirka yfirferð hjá umsjónarfólkinu okkar. Til að flýta fyrir skráningarferlinu, ættirðu að skrifa smávegis um þig og ástæður þess að þú viljir skrá þig á %{domain}.
- preamble: Með notandaaðgangi á þessum Mastodon-þjóni geturðu fylgst með hverjum sem er á netkerfinu, sama hvar notandaaðgangurinn þeirra er hýstur.
+ preamble: Með notandaaðgangi á þessum Mastodon-þjóni geturðu fylgst með hverjum sem er á sambandsnetinu, sama hvar notandaaðgangurinn þeirra er hýstur.
title: Förum núna að setja þig upp á %{domain}.
status:
account_status: Staða notandaaðgangs
@@ -1182,6 +1211,7 @@ is:
view_strikes: Skoða fyrri bönn notandaaðgangsins þíns
too_fast: Innfyllingarform sent inn of hratt, prófaðu aftur.
use_security_key: Nota öryggislykil
+ user_agreement_html: Ég hef lesið og samþykkt þjónustuskilmálana og stefnuna um persónuvernd
author_attribution:
example_title: Sýnitexti
hint_html: Ertu að skrifa fréttir eða bloggfærslur utan Mastodon? Stýrðu því hvernig vitnað er í þig þegar þeim er deilt á Mastodon.
@@ -1843,6 +1873,8 @@ is:
too_late: Það er orðið of sint að áfrýja þessari refsingu
tags:
does_not_match_previous_name: samsvarar ekki fyrra nafni
+ terms_of_service:
+ title: Þjónustuskilmálar
themes:
contrast: Mastodon (mikil birtuskil)
default: Mastodon (dökkt)
@@ -1903,6 +1935,13 @@ is:
further_actions_html: Ef þetta varst ekki þú, þá mælum við með að þú %{action} strax og virkjir tveggja-þátta auðkenningu til að halda aðgangnum þínum öruggum.
subject: Skráð hefur verið inn á aðganginn þinn frá nýju IP-vistfangi
title: Ný innskráning
+ terms_of_service_changed:
+ agreement: Með því að halda áfram að nota %{domain}, ert þú þar með að samþykkja þessa skilmála. Ef þú ert ósammála þessum uppfærðu skilmálum, geturðu hvenær sem er sagt upp samþykki þínu gagnvart %{domain} með því að eyða notandaaðgangi þínum.
+ changelog: 'Í stuttu máli er það þetta sem þessi uppfærsla þýðir fyrir þig:'
+ sign_off: "%{domain}-teymið"
+ subject: Breytingar á þjónustuskilmálum okkar
+ subtitle: Þjónustuskilmálar eru að breytast á %{domain}
+ title: Mikilvæg uppfærsla
warning:
appeal: Senda inn áfrýjun
appeal_description: Ef þú álítur að um mistök sé að ræða, geturðu sent áfrýjun til umsjónarmanna %{instance}.
@@ -2007,4 +2046,4 @@ is:
not_enabled: Þú hefur ennþá ekki virkjað WebAuthn
not_supported: Þessi vafri styður ekki öryggislykla
otp_required: Til að nota öryggislykla skaltu fyrst virkja tveggja-þátta auðkenningu.
- registered_on: Nýskráður %{date}
+ registered_on: Skráði sig %{date}
diff --git a/config/locales/it.yml b/config/locales/it.yml
index f80728be0a..a561079f3a 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -214,6 +214,7 @@ it:
enable_user: Abilita l'Utente
memorialize_account: Commemora Profilo
promote_user: Promuovi Utente
+ publish_terms_of_service: Pubblicare i Termini di Servizio
reject_appeal: Rifiuta Ricorso
reject_user: Rifiuta Utente
remove_avatar_user: Rimuovi Avatar
@@ -278,6 +279,7 @@ it:
enable_user_html: "%{name} ha abilitato l'accesso per l'utente %{target}"
memorialize_account_html: "%{name} ha trasformato il profilo di %{target} in una pagina commemorativa"
promote_user_html: "%{name} ha promosso l'utente %{target}"
+ publish_terms_of_service_html: "%{name} ha pubblicato aggiornamenti ai termini di servizio"
reject_appeal_html: "%{name} ha rifiutato il ricorso alla decisione di moderazione da %{target}"
reject_user_html: "%{name} ha rifiutato l'iscrizione da %{target}"
remove_avatar_user_html: "%{name} ha rimosso l'avatar di %{target}"
@@ -925,6 +927,35 @@ it:
search: Cerca
title: Hashtag
updated_msg: Impostazioni hashtag aggiornate con successo
+ terms_of_service:
+ back: Torna ai termini di servizio
+ changelog: Cosa è cambiato
+ create: Usa i tuoi
+ current: Attuale
+ draft: Bozza
+ generate: Usa il modello
+ generates:
+ action: Genera
+ chance_to_review_html: "I termini di servizio generati non verranno pubblicati automaticamente. Avrai la possibilità di esaminare i risultati. Si prega di inserire i dettagli necessari per procedere."
+ explanation_html: Il modello di termini di servizio fornito è solo a scopo informativo e non deve essere interpretato come consulenza legale su alcun argomento. Si prega di consultare il proprio consulente legale, in merito alla propria situazione e alle specifiche questioni legali che si hanno.
+ title: Impostazione dei Termini di Servizio
+ history: Cronologia
+ live: In uso
+ no_history: Non sono ancora state registrate modifiche ai termini di servizio.
+ no_terms_of_service_html: Al momento non hai configurato alcun termine di servizio. I termini di servizio sono pensati per fornire chiarezza e proteggerti da potenziali responsabilità in caso di controversie con i tuoi utenti.
+ notified_on_html: 'Utenti notificati in data: %{date}'
+ notify_users: Notifica gli utenti
+ preview:
+ explanation_html: 'L''email verrà inviata a %{display_count} utenti che si sono registrati prima del giorno %{date}. Il seguente testo sarà incluso nell''email:'
+ send_preview: Invia l'anteprima a %{email}
+ send_to_all:
+ one: Invia %{display_count} email
+ other: Invia %{display_count} email
+ title: Anteprima della notifica dei termini di servizio
+ publish: Pubblica
+ published_on_html: 'Pubblicati in data: %{date}'
+ save_draft: Salva la bozza
+ title: Termini di Servizio
title: Amministrazione
trends:
allow: Consenti
@@ -1134,7 +1165,6 @@ it:
migrate_account: Sposta ad un account differente
migrate_account_html: Se vuoi che questo account sia reindirizzato a uno diverso, puoi configurarlo qui.
or_log_in_with: Oppure accedi con
- privacy_policy_agreement_html: Ho letto e accetto l'informativa sulla privacy
progress:
confirm: Conferma l'e-mail
details: I tuoi dettagli
@@ -1159,7 +1189,7 @@ it:
set_new_password: Imposta una nuova password
setup:
email_below_hint_html: Controlla la tua cartella spam o richiedine un'altra. Puoi correggere il tuo indirizzo e-mail, se è sbagliato.
- email_settings_hint_html: Fai clic sul link che ti abbiamo inviato per verificare %{email}. Aspetteremo proprio qui.
+ email_settings_hint_html: Clicca sul collegamento che abbiamo inviato all'indirizzo %{email}, per iniziare a usare Mastodon. Ti aspettiamo qui.
link_not_received: Non hai ricevuto un link?
new_confirmation_instructions_sent: Riceverai una nuova e-mail con il link di conferma entro pochi minuti!
title: Controlla la tua posta in arrivo
@@ -1168,7 +1198,7 @@ it:
title: Accedi a %{domain}
sign_up:
manual_review: Le registrazioni su %{domain} vengono sottoposte a revisione manuale da parte dei nostri moderatori. Per aiutarci a elaborare la tua registrazione, scrivi qualcosa su di te e sul motivo per cui desideri un account su %{domain}.
- preamble: Con un account su questo server Mastodon, sarai in grado di seguire qualsiasi altra persona sulla rete, indipendentemente da dove sia ospitato il suo account.
+ preamble: Con un account su questo server Mastodon, potrai seguire qualsiasi altra persona sul fediverso, indipendentemente da dove sia ospitato il suo account.
title: Lascia che ti configuriamo su %{domain}.
status:
account_status: Stato dell'account
@@ -1180,6 +1210,7 @@ it:
view_strikes: Visualizza le sanzioni precedenti prese nei confronti del tuo account
too_fast: Modulo inviato troppo velocemente, riprova.
use_security_key: Usa la chiave di sicurezza
+ user_agreement_html: Ho letto e accetto i termini di servizio e l'informativa sulla privacy
author_attribution:
example_title: Testo di esempio
hint_html: Stai scrivendo notizie o articoli di blog al di fuori di Mastodon? Controlla come vieni accreditato quando vengono condivisi su Mastodon.
@@ -1841,6 +1872,8 @@ it:
too_late: È troppo tardi per fare appello contro questa sanzione
tags:
does_not_match_previous_name: non corrisponde al nome precedente
+ terms_of_service:
+ title: Termini di Servizio
themes:
contrast: Mastodon (contrasto elevato)
default: Mastodon (scuro)
@@ -1901,6 +1934,15 @@ it:
further_actions_html: Se non eri tu, ti consigliamo di %{action} subito e di abilitare l'autenticazione a due fattori per mantenere il tuo account al sicuro.
subject: C'è stato un accesso al tuo account da un nuovo indirizzo IP
title: Un nuovo accesso
+ terms_of_service_changed:
+ agreement: Continuando a usare %{domain}, accetti questi termini. Se non sei d'accordo con i termini aggiornati, puoi terminare il tuo accordo con %{domain} in qualsiasi momento eliminando il tuo account.
+ changelog: 'Ecco, in sintesi, cosa significa per te questo aggiornamento:'
+ description: 'Stai ricevendo questa e-mail perché stiamo apportando alcune modifiche ai nostri termini di servizio su %{domain}. Ti invitiamo a leggere i termini aggiornati per intero qui:'
+ description_html: Stai ricevendo questa e-mail perché stiamo apportando alcune modifiche ai nostri termini di servizio su %{domain}. Ti invitiamo a leggere i termini aggiornati per intero qui.
+ sign_off: Il team di %{domain}
+ subject: Aggiornamenti ai nostri termini di servizio
+ subtitle: I termini di servizio di %{domain} stanno cambiando
+ title: Aggiornamento importante
warning:
appeal: Presenta un appello
appeal_description: Se credi che si tratti di un errore, puoi presentare un appello allo staff di %{instance}.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 51e7f0e05c..139a248858 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -1404,7 +1404,6 @@ ja:
migrate_account: 別のアカウントに引っ越す
migrate_account_html: 引っ越し先を明記したい場合はこちらで設定できます。
or_log_in_with: または次のサービスでログイン
- privacy_policy_agreement_html: プライバシーポリシーを読み、同意します
progress:
confirm: メールアドレスの確認
details: ユーザー情報
@@ -1432,7 +1431,6 @@ ja:
set_new_password: 新しいパスワード
setup:
email_below_hint_html: 確認メールが迷惑メールフォルダに振り分けられていないか確認してください。メールアドレスを間違えた場合は、ここでメールアドレスの変更と確認メールの再送ができます。
- email_settings_hint_html: メールに記載のリンクを開いて %{email} を確認してください。
link_not_received: 確認メールを受信できない場合は
new_confirmation_instructions_sent: 確認用のリンクを記載した新しいメールを送信しました
title: 確認メールを送信しました
@@ -1441,7 +1439,6 @@ ja:
title: "%{domain}にログイン"
sign_up:
manual_review: "%{domain} への登録にはモデレーターによる承認が必要です。審査の参考になるように、簡単な自己紹介や %{domain} に登録したい理由などを記入してください。"
- preamble: この Mastodon サーバーのアカウントがあれば、ネットワーク上の他の人のアカウントがどこでホストされているかに関係なく、その人をフォローすることができます。
title: さあ %{domain} でセットアップしましょう.
status:
account_status: アカウントの状態
@@ -1961,6 +1958,7 @@ ja:
scheduled_statuses:
over_daily_limit: その日予約できる投稿数 %{limit}を超えています
over_total_limit: 予約できる投稿数 %{limit}を超えています
+ too_soon: 日付は未来でなければなりません
self_destruct:
lead_html: 残念ながら、%{domain} は恒久的に閉鎖されます。ここにお持ちだったアカウントを今後使うことはできませんが、これまでのデータのバックアップを要求することはまだ可能です。
title: このサーバーは閉鎖されます
diff --git a/config/locales/kab.yml b/config/locales/kab.yml
index 1f5c5ded79..314029a89e 100644
--- a/config/locales/kab.yml
+++ b/config/locales/kab.yml
@@ -495,7 +495,6 @@ kab:
logout: Ffeɣ
migrate_account: Gujj ɣer umiḍan nniḍen
or_log_in_with: Neɣ eqqen s
- privacy_policy_agreement_html: Ɣriɣ yerna qebleɣ tasertit n tbaḍnit
progress:
confirm: Sentem imayl
details: Isalli-inek
@@ -518,13 +517,11 @@ kab:
security: Taɣellist
set_new_password: Egr-d awal uffir amaynut
setup:
- email_settings_hint_html: Sit ɣef useɣwen i ak-d-nceyyeε akken ad tesfeqdeḍ %{email}. Ad nerǧu da kan.
link_not_received: Ur k-id-iṣaḥ ara wassaɣ ?
sign_in:
preamble_html: Kcem ar %{domain} s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya.
title: Akeččum ɣer %{domain}
sign_up:
- preamble: S umiḍan deg uqeddac-a n Mastodon, ad tizmireḍ ad tḍefreḍ win i ak·kem-yehwan deg uẓeṭṭa, anida yebɣu yili umiḍan-nnsen.
title: Iyya ad d-nessewjed tiɣawsiwin i %{domain}.
status:
account_status: Addad n umiḍan
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index c7e12961b6..f7469ce25a 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -211,6 +211,7 @@ ko:
enable_user: 사용자 활성화
memorialize_account: 고인의 계정으로 전환
promote_user: 사용자 승급
+ publish_terms_of_service: 이용 약관 게시
reject_appeal: 이의 제기 거절
reject_user: 사용자 거부
remove_avatar_user: 아바타 지우기
@@ -275,6 +276,7 @@ ko:
enable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 활성화했습니다"
memorialize_account_html: "%{name} 님이 %{target}의 계정을 고인의 계정 페이지로 전환했습니다"
promote_user_html: "%{name} 님이 사용자 %{target}를 승급시켰습니다"
+ publish_terms_of_service_html: "%{name} 님이 이용 약관을 업데이트했습니다"
reject_appeal_html: "%{name} 님이 %{target}의 중재 결정에 대한 이의 제기를 거절했습니다"
reject_user_html: "%{name} 님이 %{target} 님의 가입을 거부했습니다"
remove_avatar_user_html: "%{name} 님이 %{target} 님의 아바타를 지웠습니다"
@@ -913,6 +915,31 @@ ko:
search: 검색
title: 해시태그
updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다
+ terms_of_service:
+ back: 이용약관으로 돌아가기
+ changelog: 변경사항
+ create: 직접 사용
+ current: 현재
+ draft: 초안
+ generate: 템플릿 사용
+ generates:
+ action: 생성
+ chance_to_review_html: "생성된 이용 약관은 자동으로 게시되지 않을 것입니다. 결과를 확인할 기회가 있습니다. 진행하려면 필요한 정보들을 입력하세요."
+ title: 이용 약관 설정
+ history: 역사
+ live: 활성
+ notified_on_html: 사용자들이 %{date}에 알림을 받았습니다
+ notify_users: 사용자들에게 알리기
+ preview:
+ explanation_html: "%{date} 이전에 가입한 %{display_count} 명의 사용자에게 이메일이 발송됩니다. 다음 내용이 이메일에 포함됩니다:"
+ send_preview: 미리보기를 %{email}에 보내기
+ send_to_all:
+ other: "%{display_count} 건의 메일 발송"
+ title: 이용 약관 알림 미리보기
+ publish: 게시
+ published_on_html: "%{date}에 게시됨"
+ save_draft: 초안 저장
+ title: 이용 약관
title: 관리
trends:
allow: 허용
@@ -1116,7 +1143,6 @@ ko:
migrate_account: 계정 옮기기
migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 여기에서 설정할 수 있습니다.
or_log_in_with: 다른 방법으로 로그인 하려면
- privacy_policy_agreement_html: 개인정보처리방침을 읽고 동의합니다
progress:
confirm: 이메일 확인
details: 세부사항
@@ -1141,7 +1167,7 @@ ko:
set_new_password: 새 암호 설정
setup:
email_below_hint_html: 스팸 폴더를 체크해보거나, 새로 요청할 수 있습니다. 이메일을 잘못 입력한 경우 수정할 수 있습니다.
- email_settings_hint_html: "%{email}을 인증하기 위해 우리가 보낸 링크를 누르세요. 여기서 기다리겠습니다."
+ email_settings_hint_html: "%{email}로 보낸 링크를 클릭해 마스토돈을 시작하세요. 기다리고 있겠습니다."
link_not_received: 링크를 못 받으셨나요?
new_confirmation_instructions_sent: 확인 링크가 담긴 이메일이 몇 분 안에 도착할것입니다!
title: 수신함 확인하기
@@ -1150,7 +1176,7 @@ ko:
title: "%{domain}에 로그인"
sign_up:
manual_review: "%{domain} 가입은 중재자들의 심사를 거쳐 진행됩니다. 가입 절차를 원활하게 하기 위해, 간단한 자기소개와 왜 %{domain}에 계정을 만들려고 하는지 적어주세요."
- preamble: 이 마스토돈 서버의 계정을 통해, 네트워크에 속한 다른 사람들을, 그들이 어떤 서버에 있든 팔로우 할 수 있습니다.
+ preamble: 이 마스토돈 서버의 계정을 통해, 연합우주에 속한 다른 사람들을, 그들이 어떤 서버에 있든 팔로우 할 수 있습니다.
title: "%{domain}에 가입하기 위한 정보들을 입력하세요."
status:
account_status: 계정 상태
@@ -1162,6 +1188,7 @@ ko:
view_strikes: 내 계정에 대한 과거 중재 기록 보기
too_fast: 너무 빠르게 양식이 제출되었습니다, 다시 시도하세요.
use_security_key: 보안 키 사용
+ user_agreement_html: 이용 약관과 개인정보처리방침을 읽었고 동의합니다
author_attribution:
example_title: 예시 텍스트
hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요.
@@ -1799,6 +1826,8 @@ ko:
too_late: 이의를 제기하기에 너무 늦었습니다
tags:
does_not_match_previous_name: 이전 이름과 맞지 않습니다
+ terms_of_service:
+ title: 이용 약관
themes:
contrast: 마스토돈 (고대비)
default: 마스토돈 (어두움)
@@ -1859,6 +1888,15 @@ ko:
further_actions_html: 직접 로그인한 것이 아니라면, 지금 바로 %{action}과 2단계 인증을 활성화하여 계정을 안전하게 보호하시길 권해드립니다.
subject: 계정이 새로운 IP에서 접근됨
title: 새로운 로그인
+ terms_of_service_changed:
+ agreement: "%{domain}을 계속 사용하는 것으로 약관에 동의하는 것으로 간주합니다. 약관에 동의하지 않는 경우 계정을 삭제함으로써 언제든 동의를 철회할 수 있습니다."
+ changelog: '이번 변경사항의 주요 내용입니다:'
+ description: "%{domain}의 이용 약관이 변경되었기 때문에 발송된 이메일입니다. 변경된 전체 약관을 확인하시길 권합니다:"
+ description_html: '%{domain}의 이용 약관이 변경되었기 때문에 발송된 이메일입니다. 변경된 전체 약관을 확인하시길 권합니다.'
+ sign_off: "%{domain} 팀"
+ subject: 변경된 이용 약관
+ subtitle: "%{domain}의 이용 약관이 변경됩니다"
+ title: 중요한 알림
warning:
appeal: 이의 제출하기
appeal_description: 이것이 오류라고 생각한다면, %{instance}의 중재자에게 이의신청을 할 수 있습니다.
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index 77d14c6ca8..06f3e32f20 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -916,7 +916,6 @@ ku:
migrate_account: Livandin bo ajimêreke din
migrate_account_html: Ku tu dixwazî ev ajimêr li ajimêreke cuda beralî bikî, tu dikarî ji vir de saz bike.
or_log_in_with: An têketinê bike bi riya
- privacy_policy_agreement_html: Min Politîka taybetiyê xwend û dipejirînim
providers:
cas: CAS
saml: SAML
@@ -932,7 +931,6 @@ ku:
preamble_html: Têketinê bike bi riya %{domain} xwe. Ku ajimêrê te li ser rajekareke cuda hatiye pêşkêşkirin, tu yê nikaribû têketinê bikî vir.
title: Têkeve %{domain}
sign_up:
- preamble: Bi ajimêrekê li ser vê rajekarê Mastodon re, tu yê karîbî her keseke din li ser torê bişopînî, her ku ajimêrê wan li ku derê tê pêşkêşkirin.
title: Ka em te bi rê bixin li ser %{domain}.
status:
account_status: Rewşa ajimêr
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 69bcd5b941..939a8826b2 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -1097,7 +1097,6 @@ lad:
migrate_account: Transferate a otro kuento
migrate_account_html: Si keres readresar este kuento a otra distinta, puedes konfigurarlo aki.
or_log_in_with: O konektate kon tu kuento kon
- privacy_policy_agreement_html: Tengo meldado i acheto la politika de privasita
progress:
confirm: Konfirma posta
details: Tus detalyos
@@ -1122,7 +1121,6 @@ lad:
set_new_password: Establese muevo kod
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_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki.
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
@@ -1131,7 +1129,6 @@ lad:
title: Konektate kon %{domain}
sign_up:
manual_review: Las enrejistrasyones en %{domain} pasan por la revizyon manuala de muestros moderadores. Para ayudarmos a prosesar tu enrejistrasyon, eskrive un poko sovre ti i por ke keres un kuento en %{domain}.
- preamble: Kon un kuento en este sirvidor de Mastodon, podras segir a kualkier otra persona en la red, endependientemente del sirvidor en el ke se tope.
title: Kriya kuento de Mastodon en %{domain}.
status:
account_status: Estado del kuento
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index e629373483..dbca48dd37 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -208,6 +208,7 @@ lt:
enable_user: Įjungti naudotoją
memorialize_account: Memorializuoti paskyrą
promote_user: Paaukštinti naudotoją
+ publish_terms_of_service: Publikuoti paslaugų sąlygas
reject_appeal: Atmesti apeliaciją
reject_user: Atmesti naudotoją
remove_avatar_user: Pašalinti avatarą
@@ -264,6 +265,7 @@ lt:
enable_user_html: "%{name} įjungė prisijungimą naudotojui %{target}"
memorialize_account_html: "%{name} pavertė %{target} paskyrą į atminimo puslapį"
promote_user_html: "%{name} paaukštino naudotoją %{target}"
+ publish_terms_of_service_html: "%{name} publikavo paslaugų sąlygų naujinimus"
reject_appeal_html: "%{name} atmetė prižiūjimo veiksmo apeliaciją iš %{target}"
reject_user_html: "%{name} atmetė registraciją iš %{target}"
remove_avatar_user_html: "%{name} pašalino %{target} avatarą"
@@ -643,6 +645,37 @@ lt:
reset: Atkurti
search: Paieška
title: Saitažodžiai
+ terms_of_service:
+ back: Atgal į paslaugų sąlygas
+ changelog: Kas pasikeitė
+ create: Naudoti savo
+ current: Dabartinė
+ draft: Parengti iš naujo
+ generate: Naudoti šabloną
+ generates:
+ action: Generuoti
+ chance_to_review_html: "Sugeneruotos paslaugų sąlygos nebus publikuojamos automatiškai. Turėsite galimybę peržiūrėti rezultatus. Kad tęstumėte, užpildykite reikiamą informaciją."
+ explanation_html: Pateiktas paslaugų sąlygų šablonas yra tik informacinio pobūdžio ir neturėtų būti laikomas teisiniu patarimu bet kokiu klausimu. Dėl savo situacijos ir konkrečių teisinių klausimų pasitarkite su savo teisininku.
+ title: Paslaugų sąlygų sąranka
+ history: Istorija
+ live: Tiesioginis
+ no_history: Kol kas nėra įrašyta paslaugų sąlygų pakeitimų.
+ no_terms_of_service_html: Šiuo metu nesate sukonfigūravę jokių paslaugų sąlygų. Paslaugų sąlygos skirtos suteikti aiškumo ir apsaugoti jus nuo galimų įsipareigojimų ginčuose su naudotojais.
+ notified_on_html: Naudotojams pranešta %{date}
+ notify_users: Pranešti naudotojus
+ preview:
+ explanation_html: 'El. laiškas bus išsiųstas %{display_count} naudotojams, kurie užsiregistravo iki %{date}. Į el. laišką bus įtrauktas toks tekstas:'
+ send_preview: Siųsti peržiūrą į %{email}
+ send_to_all:
+ few: Siųsti %{display_count} el. laiškus
+ many: Siųsti %{display_count} el. laiško
+ one: Siųsti %{display_count} el. laišką
+ other: Siųsti %{display_count} el. laiškų
+ title: Peržiūrėti paslaugų sąlygų pranešimą
+ publish: Publikuoti
+ published_on_html: Publikuota %{date}
+ save_draft: Išsaugoti juodraštį
+ title: Paslaugų sąlygos
title: Administracija
trends:
allow: Leisti
@@ -795,7 +828,6 @@ lt:
migrate_account: Persikelti prie kitos paskyros
migrate_account_html: Jei nori šią paskyrą nukreipti į kitą, gali sukonfigūruoti ją čia.
or_log_in_with: Arba prisijungti su
- privacy_policy_agreement_html: Perskaičiau ir sutinku su privatumo politika
progress:
details: Tavo duomenys
review: Mūsų peržiūra
@@ -818,17 +850,20 @@ lt:
security: Apsauga
set_new_password: Nustatyti naują slaptažodį
setup:
- email_settings_hint_html: Spustelėk mūsų atsiųstą nuorodą, kad patikrintum %{email}. Mes lauksime čia.
+ email_settings_hint_html: Spustelėkite nuorodą, kurią atsiuntėme adresu %{email}, kad pradėtumėte naudoti „Mastodon“. Lauksime čia.
link_not_received: Negavai nuorodos?
title: Patikrinti pašto dėžutę
sign_in:
preamble_html: Prisijunk su savo %{domain} kredencialais. Jei tavo yra kitame serveryje, čia prisijungti negalėsi.
title: Prisijungti prie %{domain}
+ sign_up:
+ preamble: Su šio „Mastodon“ serverio paskyra galėsite sekti bet kurį kitą fediversijoje esantį asmenį, nepriklausomai nuo to, kur yra jo paskyra.
status:
account_status: Paskyros būsena
redirecting_to: Tavo paskyra yra neaktyvi, nes šiuo metu ji nukreipiama į %{acct}.
self_destruct: Kadangi %{domain} uždaromas, turėsi tik ribotą prieigą prie savo paskyros.
view_strikes: Peržiūrėti ankstesnius savo paskyros pažeidimus
+ user_agreement_html: Perskaičiau ir sutinku su paslaugų sąlygomis ir privatumo politika
author_attribution:
example_title: Teksto pavyzdys
hint_html: Ar rašote naujienas ar tinklaraščio straipsnius už „Mastodon“ ribų? Valdykite, kaip būsite nurodomi, kai jais bus bendrinama platformoje „Mastodon“.
@@ -1070,6 +1105,7 @@ lt:
scheduled_statuses:
over_daily_limit: Jūs pasieketė limitą (%{limit}) galimų toot'ų per dieną
over_total_limit: Jūs pasieketė %{limit} limitą galimų toot'ų
+ too_soon: data turi būti ateityje.
sessions:
activity: Paskutinė veikla
browser: Naršyklė
@@ -1161,6 +1197,8 @@ lt:
min_age_label: Amžiaus riba
stream_entries:
sensitive_content: Jautrus turinys
+ terms_of_service:
+ title: Paslaugų sąlygos
themes:
contrast: Mastodon (didelis kontrastas)
default: Mastodon (tamsi)
@@ -1198,6 +1236,15 @@ lt:
title: Nepavyko atlikti dvigubo tapatybės nustatymo
suspicious_sign_in:
further_actions_html: Jei tai buvai ne tu, rekomenduojame nedelsiant %{action} ir įjungti dvigubą tapatybės nustatymą, kad tavo paskyra būtų saugi.
+ terms_of_service_changed:
+ agreement: Tęsiant naudojimąsi %{domain}, jūs sutinkate su šiomis sąlygomis. Jei nesutinkate su atnaujintomis sąlygomis, bet kuriuo metu galite nutraukti sutartį su %{domain} ištrindami savo paskyrą.
+ changelog: Trumpai apie tai, ką šis naujinimas reiškia jums
+ description: 'Šį el. laišką gaunate, nes mes keičiame savo paslaugų sąlygas serveryje %{domain}. Kviečiame susipažinti su visomis atnaujintomis sąlygomis čia:'
+ description_html: Šį el. laišką gaunate, nes mes keičiame savo paslaugų sąlygas serveryje %{domain}. Kviečiame susipažinti su visomis atnaujintomis sąlygomis čia.
+ sign_off: "%{domain} komanda"
+ subject: Paslaugų sąlygų atnaujinimai
+ subtitle: Keičiasi %{domain} paslaugų sąlygos
+ title: Svarbus naujinimas
warning:
categories:
spam: Šlamštas
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index b49b57f27c..2102e84c99 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -1110,7 +1110,6 @@ lv:
migrate_account: Pāriešana uz citu kontu
migrate_account_html: Ja vēlies novirzīt šo kontu uz citu, tu vari to konfigurēt šeit.
or_log_in_with: Vai piesakies ar
- privacy_policy_agreement_html: Esmu izlasījis un piekrītu privātuma politikai
progress:
confirm: Apstiprināt e-pasta adresi
details: Tavi dati
@@ -1135,7 +1134,6 @@ lv:
set_new_password: Iestatīt jaunu paroli
setup:
email_below_hint_html: Jāpārbauda sava surogātpasta mape vai jāpieprasa vēl vienu! Savu e-pasta adresi var labot, ja tā ir nepareiza.
- email_settings_hint_html: Noklikšķini uz saites, kuru mēs tev nosūtījām, lai apstiprinātu %{email}. Mēs tepat pagaidīsim.
link_not_received: Vai nesaņēmi sati?
new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pasta ziņojumu ar apstiprinājuma saiti.
title: Pārbaudi savu iesūtni
@@ -1144,7 +1142,6 @@ lv:
title: Pieteikties %{domain}
sign_up:
manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}.
- preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts viņa konts.
title: Atļauj tevi iestatīt %{domain}.
status:
account_status: Konta statuss
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index d872c342cb..94cbca57fd 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -1001,7 +1001,6 @@ ms:
migrate_account: Pindah kepada akaun lain
migrate_account_html: Jika anda ingin mengubah hala akaun ini kepada akaun lain, anda boleh konfigurasikannya di sini.
or_log_in_with: Atau daftar masuk dengan
- privacy_policy_agreement_html: Saya telah membaca dan bersetuju menerima dasar privasi
progress:
details: Maklumat anda
review: Ulasan kami
@@ -1024,7 +1023,6 @@ ms:
security: Keselamatan
set_new_password: Tetapkan kata laluan baharu
setup:
- email_settings_hint_html: Klik pautan yang kami hantar kepada anda untuk mengesahkan %{email}. Kami akan tunggu di sini.
link_not_received: Tidak mendapat pautan?
title: Semak peti masuk anda
sign_in:
@@ -1032,7 +1030,6 @@ ms:
title: Log masuk ke %{domain}
sign_up:
manual_review: Pendaftaran pada %{domain} melalui semakan manual oleh penyederhana kami. Untuk membantu kami memproses pendaftaran anda, tulis sedikit tentang diri anda dan sebab anda mahukan akaun di %{domain}.
- preamble: Dengan akaun pada server Mastodon ini, anda akan dapat mengikuti mana-mana orang lain di rangkaian, tidak kira di mana akaun mereka dihoskan.
title: Mari sediakan anda pada %{domain}.
status:
account_status: Status akaun
diff --git a/config/locales/my.yml b/config/locales/my.yml
index 4c9573c2eb..cba06d15f4 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -994,7 +994,6 @@ my:
migrate_account: အခြားအကောင့်တစ်ခုသို့ ရွှေ့ရန်
migrate_account_html: ဤအကောင့်ကို အခြားအကောင့်သို့ ပြန်ညွှန်းလိုပါက ဤနေရာတွင် စီစဉ်သတ်မှတ်နိုင်သည်။
or_log_in_with: သို့မဟုတ် အကောင့်ဖြင့် ဝင်ရောက်ပါ
- privacy_policy_agreement_html: ကိုယ်ရေးအချက်အလက်မူဝါဒ ကို ဖတ်ပြီး သဘောတူလိုက်ပါပြီ
progress:
details: သင့်အသေးစိတ်အချက်အလက်များ
review: ကျွန်ုပ်တို့၏သုံးသပ်ချက်
@@ -1017,7 +1016,6 @@ my:
security: လုံခြုံရေး
set_new_password: စကားဝှက်အသစ် သတ်မှတ်ပါ။
setup:
- email_settings_hint_html: "%{email} အတည်ပြုရန် သင့်ထံပေးပို့သော လင့်ခ်ကို နှိပ်ပါ။ စောင့်နေပါမည်။"
link_not_received: လင့်ခ် မရခဲ့ဘူးလား။
title: သင့်ဝင်စာပုံးကို စစ်ဆေးပါ
sign_in:
@@ -1025,7 +1023,6 @@ my:
title: "%{domain} သို့ အကောင့်ဝင်ရန်"
sign_up:
manual_review: "%{domain} ၌ အကောင့်ဖွင့်ခြင်းများတွင် ကျွန်ုပ်တို့၏ ကြီးကြပ်သူများမှ ကိုယ်တိုင်သုံးသပ် လုပ်ဆောင်လျက်ရှိပါသည်။ သင့်အကြောင်းနှင့် %{domain} တွင် အကောင့်ဖွင့်လိုသည့်အကြောင်း အနည်းငယ်ရေးသားခြင်းဖြင့် သင့်အကောင့်စာရင်းသွင်းခြင်းမှာ ကျွန်ုပ်တို့ကို အကူအညီဖြစ်စေပါသည်။"
- preamble: ဤ Mastodon အကောင့်တစ်ခုဖြင့် သင်သည် ကွန်ရက်ပေါ်ရှိ အခြားမည်သူ့မဆို မည်သည့်ဆာဗာတွင်ရှိစေကာမူ သင်စောင့်ကြည့်နိုင်မည်ဖြစ်ပါသည်။
title: "%{domain} တွင် ထည့်သွင်းရန်။"
status:
account_status: အကောင့်အခြေအနေ
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 86fc42527a..c41652ca0d 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -214,6 +214,7 @@ nl:
enable_user: Gebruiker inschakelen
memorialize_account: Het account in een In memoriam veranderen
promote_user: Gebruiker promoveren
+ publish_terms_of_service: Algemene gebruiksvoorwaarden publiceren
reject_appeal: Bezwaar afwijzen
reject_user: Gebruiker afwijzen
remove_avatar_user: Profielfoto verwijderen
@@ -278,6 +279,7 @@ nl:
enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld
memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd
promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd
+ publish_terms_of_service_html: "%{name} publiceerde updates van de servicevoorwaarden"
reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatiemaatregel van %{target} afgewezen"
reject_user_html: "%{name} heeft de registratie van %{target} afgewezen"
remove_avatar_user_html: "%{name} verwijderde de profielfoto van %{target}"
@@ -925,6 +927,35 @@ nl:
search: Zoeken
title: Hashtags
updated_msg: Instellingen hashtag succesvol bijgewerkt
+ terms_of_service:
+ back: Terug naar de gebruiksvoorwaarden
+ changelog: Wat is veranderd
+ create: Gebruik je eigen
+ current: Huidige
+ draft: Concept
+ generate: Sjabloon gebruiken
+ generates:
+ action: Genereren
+ chance_to_review_html: "De gegenereerde gebruiksvoorwaarden worden niet automatisch gepubliceerd. Je krijgt gelegenheid om de resultaten te bekijken. Vul de benodigde gegevens in om verder te gaan."
+ explanation_html: Het sjabloon voor de gebruiksvoorwaarden is uitsluitend bedoeld voor informatieve doeleinden en mag niet worden opgevat als juridisch advies over welk onderwerp dan ook. Raadpleeg een eigen juridisch adviseur over jouw situatie en voor specifieke juridische vragen.
+ title: Gebruiksvoorwaarden instellen
+ history: Geschiedenis
+ live: Actueel
+ no_history: Er zijn nog geen opgeslagen wijzigingen van de gebruiksvoorwaarden.
+ no_terms_of_service_html: Je hebt momenteel geen servicevoorwaarden geconfigureerd. De gebruiksvoorwaarden zijn bedoeld om duidelijkheid te verschaffen en je te beschermen tegen mogelijke verplichtingen in geschillen met gebruikers.
+ notified_on_html: Gebruikers ingelicht op %{date}
+ notify_users: Gebruikers informeren
+ preview:
+ explanation_html: 'De e-mail wordt verzonden naar %{display_count} gebruikers die zich hebben aangemeld voor %{date}. De volgende tekst zal in de e-mail worden opgenomen:'
+ send_preview: Voorbeeld verzenden naar %{email}
+ send_to_all:
+ one: "%{display_count} e-mail verzenden"
+ other: "%{display_count} e-mails verzenden"
+ title: Voorbeeld van Melding gebruiksvoorwaarden
+ publish: Publiceren
+ published_on_html: Gepubliceerd op %{date}
+ save_draft: Concept opslaan
+ title: Gebruiksvoorwaarden
title: Beheer
trends:
allow: Goedkeuren
@@ -1132,7 +1163,6 @@ nl:
migrate_account: Naar een ander account verhuizen
migrate_account_html: Wanneer je dit account naar een ander account wilt doorverwijzen, kun je dit hier instellen.
or_log_in_with: Of inloggen met
- privacy_policy_agreement_html: Ik heb het privacybeleid gelezen en ga daarmee akkoord
progress:
confirm: E-mailadres bevestigen
details: Jouw gegevens
@@ -1157,7 +1187,7 @@ nl:
set_new_password: Nieuw wachtwoord instellen
setup:
email_below_hint_html: Controleer je map met spam, of vraag een nieuwe bevestigingslink aan. Je kan je e-mailadres corrigeren als het verkeerd is.
- email_settings_hint_html: Klik op de link die we je hebben gestuurd om %{email} te verifiëren. We wachten wel even.
+ email_settings_hint_html: Klik op de link die we naar %{email} hebben gestuurd om Mastodon te gebruiken. We wachten hier af.
link_not_received: Geen link ontvangen?
new_confirmation_instructions_sent: Je ontvangt binnen enkele minuten een nieuwe e-mail met de bevestigingslink!
title: Kijk in je mailbox
@@ -1166,7 +1196,7 @@ nl:
title: Inloggen op %{domain}
sign_up:
manual_review: Inschrijvingen op %{domain} worden handmatig door onze moderatoren beoordeeld. Schrijf wat over jezelf en waarom je een account op %{domain} wilt. Hiermee help je ons om de aanvraag van jouw account goed te kunnen verwerken.
- preamble: Je kunt met een Mastodon-account iedereen in het netwerk volgen, ongeacht waar deze persoon een account heeft.
+ preamble: Met een account op deze Mastodon-server kun je iedereen volgen op de fediverse, ongeacht waar deze persoon een account heeft.
title: Laten we je account op %{domain} instellen.
status:
account_status: Accountstatus
@@ -1178,6 +1208,7 @@ nl:
view_strikes: Bekijk de eerder door moderatoren vastgestelde overtredingen die je hebt gemaakt
too_fast: Formulier is te snel ingediend. Probeer het nogmaals.
use_security_key: Beveiligingssleutel gebruiken
+ user_agreement_html: Ik heb de gebruiksvoorwaarden en het privacybeleid gelezen en ga ermee akkoord
author_attribution:
example_title: Voorbeeldtekst
hint_html: Schrijf je nieuws- of blogartikelen buiten Mastodon? Bepaal hoe je geattribueerd wordt als deze gedeeld worden op Mastodon.
@@ -1839,6 +1870,8 @@ nl:
too_late: De periode dat je bezwaar kunt maken tegen deze overtreding is verstreken
tags:
does_not_match_previous_name: komt niet overeen met de vorige naam
+ terms_of_service:
+ title: Gebruiksvoorwaarden
themes:
contrast: Mastodon (hoog contrast)
default: Mastodon (donker)
@@ -1899,6 +1932,15 @@ nl:
further_actions_html: Wanneer jij dit niet was, adviseren wij om onmiddellijk %{action} en om tweestapsverificatie in te schakelen, om zo je account veilig te houden.
subject: Jouw account is vanaf een nieuw IP-adres benaderd
title: Een nieuwe registratie
+ terms_of_service_changed:
+ agreement: Door %{domain} te blijven gebruiken, ga je akkoord met deze voorwaarden. Als je het niet eens bent met de bijgewerkte voorwaarden, kun je je overeenkomst met %{domain} op elk gewenst moment beëindigen door je account te verwijderen.
+ changelog: 'In een oogopslag betekent deze update voor jou:'
+ description: 'Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bekijken:'
+ description_html: Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier geheel te bestuderen.
+ sign_off: Het %{domain}-team
+ subject: Bijwerkingen van onze servicevoorwaarden
+ subtitle: De gebruiksvoorwaarden van %{domain} veranderen
+ title: Belangrijke update
warning:
appeal: Bezwaar indienen
appeal_description: Wanneer je denkt dat dit een fout is, kun je een bezwaar indienen bij de medewerkers van %{instance}.
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index c0b6aac8bd..5d3ead4290 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -1132,7 +1132,6 @@ nn:
migrate_account: Flytt til ein annan konto
migrate_account_html: Om du vil visa denne kontoen til ein anna, kan du skipe det her.
or_log_in_with: Eller logg inn med
- privacy_policy_agreement_html: Jeg har lest og godtar retningslinjer for personvern
progress:
confirm: Stadfest e-post
details: Opplysingane dine
@@ -1157,7 +1156,6 @@ nn:
set_new_password: Lag nytt passord
setup:
email_below_hint_html: Sjekk søppelpostmappa di, eller be om ein ny. Du kan endra e-postadressa di dersom ho er feil.
- email_settings_hint_html: Klikk lenka me sende deg for å stadfesta %{email}. Me sit her og ventar.
link_not_received: Fekk du ikkje lenka?
new_confirmation_instructions_sent: Du vil få ein ny e-post med stadfestingslenke innan nokre minutt!
title: Sjekk innboksen din
@@ -1166,7 +1164,6 @@ nn:
title: Logg inn på %{domain}
sign_up:
manual_review: Når du lagar ein konto på %{domain}, vil moderatorane våre gå gjennom påmeldinga di manuelt. For å hjelpa oss med påmeldinga di, er det fint om du skriv litt om deg sjølv og kvifor du vil ha ein konto på %{domain}.
- preamble: Med ein konto på denne Mastodon-tenaren kan du fylgja andre folk på nettverket, uansett kvar dei har brukarkontoen sin.
title: La oss få deg satt i gang på %{domain}.
status:
account_status: Kontostatus
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 01672fe3b3..2529fafb4a 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -1033,7 +1033,6 @@
migrate_account: Flytt til en annen konto
migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du konfigurere det her.
or_log_in_with: Eller logg inn med
- privacy_policy_agreement_html: Jeg har lest og godtar retningslinjer for personvern
progress:
details: Dine opplysninger
review: Vår gjennomgang
@@ -1056,7 +1055,6 @@
security: Sikkerhet
set_new_password: Angi nytt passord
setup:
- email_settings_hint_html: Klikk på lenken vi sendte deg for å bekrefte %{email}. Vi venter her.
link_not_received: Fikk du ikke lenken?
title: Sjekk innboksen din
sign_in:
@@ -1064,7 +1062,6 @@
title: Logg inn på %{domain}
sign_up:
manual_review: Registreringer på %{domain} krever manuell gjennomgang av moderatorene våre. For å hjelpe oss med å behandle registreringen din, skriv litt om deg selv og hvorfor du vil ha en konto på %{domain}.
- preamble: Med en konto på denne Mastodon-tjeneren vil du kunne følge andre personer på nettverket, uansett hvor kontoen deres holder til.
title: La oss få deg satt i gang på %{domain}.
status:
account_status: Kontostatus
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index a67f55c6b7..258348d41c 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -481,7 +481,6 @@ oc:
migrate_account: Mudar endacòm mai
migrate_account_html: Se volètz mandar los visitors d’aqueste compte a un autre, podètz o configurar aquí.
or_log_in_with: O autentificatz-vos amb
- privacy_policy_agreement_html: Ai legit e accepti la politica de confidencialitat
providers:
cas: CAS
saml: SAML
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 32425d8844..f1dfbe4f7d 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -1168,7 +1168,6 @@ pl:
migrate_account: Przenieś konto
migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz zrobić to tutaj.
or_log_in_with: Lub zaloguj się z użyciem
- privacy_policy_agreement_html: Przeczytałem/am i akceptuję politykę prywatności
progress:
confirm: Potwierdź adres e-mail
details: Twoje dane
@@ -1193,7 +1192,6 @@ pl:
set_new_password: Ustaw nowe hasło
setup:
email_below_hint_html: Sprawdź folder ze spamem lub poproś o inny link potwierdzający. Możesz poprawić swój adres e-mail, jeśli jest niepoprawny.
- email_settings_hint_html: Kliknij link, który wysłaliśmy do Ciebie w celu zweryfikowania %{email}. Poczekamy tutaj.
link_not_received: Nie otrzymano linku?
new_confirmation_instructions_sent: Za kilka minut otrzymasz nowy e-mail z linkiem potwierdzającym!
title: Sprawdź swoją skrzynkę odbiorczą
@@ -1202,7 +1200,6 @@ pl:
title: Zaloguj się do %{domain}
sign_up:
manual_review: Rejestracja na %{domain} przechodzi przez ręczne sprawdzanie przez naszych moderatorów. Aby pomóc nam usprawnić ten proces, napisz coś o sobie oraz dlaczego chcesz założyć konto na %{domain}.
- preamble: Z kontem na tym serwerze Mastodon będziesz mógł obserwować każdą inną osobę w sieci, niezależnie od miejsca przechowywania ich konta.
title: Skonfigurujmy Twoje konto na %{domain}.
status:
account_status: Stan konta
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 23a3b61f9e..fe10dd6462 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -214,6 +214,7 @@ pt-BR:
enable_user: Ativar usuário
memorialize_account: Converter conta em memorial
promote_user: Promover usuário
+ publish_terms_of_service: Publicar termos de serviço
reject_appeal: Rejeitar revisão
reject_user: Rejeitar usuário
remove_avatar_user: Remover imagem de perfil
@@ -278,6 +279,7 @@ pt-BR:
enable_user_html: "%{name} ativou o login para %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
promote_user_html: "%{name} promoveu o usuário %{target}"
+ publish_terms_of_service_html: "%{name} publicou atualizações aos termos de serviço"
reject_appeal_html: "%{name} rejeitou a revisão da decisão da moderação em %{target}"
reject_user_html: "%{name} rejeitou a inscrição de %{target}"
remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}"
@@ -925,6 +927,16 @@ pt-BR:
search: Buscar
title: Hashtags
updated_msg: Configurações de hashtag atualizadas
+ terms_of_service:
+ back: Voltar aos termos de serviço
+ changelog: O que há de novo
+ create: Usar o meu próprio
+ current: Atual
+ draft: Rascunho
+ generate: Usar modelo
+ generates:
+ action: Gerar
+ chance_to_review_html: "Os termos de serviço gerado não será publicado automaticamente.Você terá uma chance de revisar os resultados. Preencha os detalhes necessários para continuar"
title: Administração
trends:
allow: Permitir
@@ -1132,7 +1144,6 @@ pt-BR:
migrate_account: Mudar-se para outra conta
migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode configurar isso aqui.
or_log_in_with: Ou entre com
- privacy_policy_agreement_html: Eu li e concordo com a política de privacidade
progress:
confirm: Confirmar e-mail
details: Suas informações
@@ -1157,7 +1168,6 @@ pt-BR:
set_new_password: Definir uma nova senha
setup:
email_below_hint_html: Verifique a sua pasta de spam, ou solicite outra. Você pode corrigir o seu endereço de e-mail se estiver errado.
- email_settings_hint_html: Clique no link que te enviamos para verificar %{email}. Esperaremos aqui.
link_not_received: Não recebeu um link?
new_confirmation_instructions_sent: Você receberá um novo e-mail com o link de confirmação em alguns minutos!
title: Verifique sua caixa de entrada
@@ -1166,7 +1176,6 @@ pt-BR:
title: Entrar em %{domain}
sign_up:
manual_review: Inscrições no %{domain} passam pela revisão manual dos nossos moderadores. Para nos ajudar a processar o seu cadastro, escreva um pouco sobre você e por que você quer uma conta no %{domain}.
- preamble: Com uma conta neste servidor Mastodon, você poderá seguir qualquer outra pessoa na rede, independentemente de onde sua conta esteja hospedada.
title: Então vamos lá criar uma conta em %{domain}.
status:
account_status: Status da conta
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index cdbed49a8d..f739c93394 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -1113,7 +1113,6 @@ pt-PT:
migrate_account: Mudar para uma conta diferente
migrate_account_html: Se deseja redirecionar esta conta para uma outra pode configurar isso aqui.
or_log_in_with: Ou iniciar sessão com
- privacy_policy_agreement_html: Eu li e concordo com a política de privacidade
progress:
confirm: Confirmar e-mail
details: Os seus dados
@@ -1138,7 +1137,6 @@ pt-PT:
set_new_password: Editar palavra-passe
setup:
email_below_hint_html: Verifique a sua pasta de spam ou solicite outra. Pode corrigir o seu endereço de e-mail se estiver errado.
- email_settings_hint_html: Clique no link que enviamos para verificar %{email}. Esperaremos aqui.
link_not_received: Não recebeu um link?
new_confirmation_instructions_sent: Irá receber uma nova mensagem de e-mail com a ligação de confirmação dentro de alguns minutos!
title: Verifique a caixa de entrada do seu e-mail
@@ -1147,7 +1145,6 @@ pt-PT:
title: Iniciar sessão em %{domain}
sign_up:
manual_review: Inscrições no %{domain} passam por uma revisão manual pelos nossos moderadores. Para nos ajudar a processar o seu pedido de inscrição, escreva um pouco sobre si e o porquê de quer uma conta no %{domain}.
- preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa na rede, independentemente do servidor onde a conta esteja hospedada.
title: Vamos lá inscrevê-lo em %{domain}.
status:
account_status: Estado da conta
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 4a1dbb1dc1..486d87f003 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -1168,7 +1168,6 @@ ru:
migrate_account: Перенос учётной записи
migrate_account_html: Завели новую учётную запись? Перенаправьте подписчиков на неё — настройте перенаправление тут.
or_log_in_with: Или войти с помощью
- privacy_policy_agreement_html: Мной прочитана и принята политика конфиденциальности
progress:
confirm: Подтвердите электронную почту
details: Ваши данные
@@ -1193,7 +1192,6 @@ ru:
set_new_password: Задать новый пароль
setup:
email_below_hint_html: Проверьте папку "Спам" или запросите другую. Вы можете исправить свой адрес электронной почты, если он неправильный.
- email_settings_hint_html: Нажмите на ссылку, которую мы отправили вам для проверки %{email}. Мы будем ждать прямо здесь.
link_not_received: Не получили ссылку?
new_confirmation_instructions_sent: Через несколько минут вы получите новое письмо со ссылкой для подтверждения!
title: Проверьте свой почтовый ящик
@@ -1202,7 +1200,6 @@ ru:
title: Войти в %{domain}
sign_up:
manual_review: Регистрация на %{domain} проходит через ручную проверку нашими модераторами. Чтобы помочь нам обработать вашу регистрацию, напишите немного о себе и о том, почему вы хотите получить аккаунт на %{domain}.
- preamble: С учётной записью на этом сервере Mastodon вы сможете следить за любым другим пользователем в сети, независимо от того, где размещён их аккаунт.
title: Зарегистрируйтесь в %{domain}.
status:
account_status: Статус учётной записи
diff --git a/config/locales/sco.yml b/config/locales/sco.yml
index be3383ea66..209b761851 100644
--- a/config/locales/sco.yml
+++ b/config/locales/sco.yml
@@ -909,7 +909,6 @@ sco:
migrate_account: Uise a different accoont
migrate_account_html: Gin ye'r wantin fir tae redireck this accoont tae a different ane, ye kin configure it here.
or_log_in_with: Or log in wi
- privacy_policy_agreement_html: A'v read an A agree tae the privacy policy
providers:
cas: CAS
saml: SAML
@@ -922,7 +921,6 @@ sco:
security: Security
set_new_password: Set new passwird
sign_up:
- preamble: Wi a accoont on this Mastodon server, ye'll be able tae follae onie ither person on the netwirk, regairdless o whaur their accoont is hostit.
title: Let's get ye set up on %{domain}.
status:
account_status: Accoont status
diff --git a/config/locales/simple_form.az.yml b/config/locales/simple_form.az.yml
new file mode 100644
index 0000000000..e9ba86bc79
--- /dev/null
+++ b/config/locales/simple_form.az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 2f9af21aeb..68386eded6 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -130,6 +130,11 @@ bg:
show_application: Винаги ще може да видите кое приложение е публикувало публикацията ви независимо.
tag:
name: Можете да смените само употребата на големи/малки букви, например, за да е по-четимо
+ terms_of_service:
+ changelog: Може да се структурира със синтаксиса на Markdown.
+ text: Може да се структурира със синтаксиса на Markdown.
+ terms_of_service_generator:
+ jurisdiction: Впишете държавата, където живее всеки, който плаща сметките. Ако е дружество или друго образувание, то впишете държавата, в която е регистрирано, и градът, регионът, територията или щатът според случая.
user:
chosen_languages: Само публикации на отметнатите езици ще се показват в публичните часови оси
role: Ролята управлява какви позволения има потребителят.
@@ -319,6 +324,17 @@ bg:
name: Хаштаг
trendable: Показване на хаштага да се появява под нашумели
usable: Позволяване на публикациите да употребяват този хаштаг локално
+ terms_of_service:
+ changelog: Какво е променено?
+ text: Условия на услугата
+ terms_of_service_generator:
+ admin_email: Имейл адрес за правни известия
+ arbitration_address: Физичен адрес за арбитражни известия
+ arbitration_website: Уебсайт за подаване на арбитражни известия
+ dmca_address: Физичен адрес за DMCA/бележки за авторски права
+ dmca_email: Адрес на е-поща за DMCA/бележки за авторски права
+ domain: Домейн
+ jurisdiction: Законова юрисдикция
user:
role: Роля
time_zone: Часова зона
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index d2bf790c9e..2fecc78c79 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -319,6 +319,17 @@ ca:
name: Etiqueta
trendable: Permet que aquesta etiqueta aparegui en les tendències
usable: Permet a les publicacions emprar aquesta etiqueta localment
+ terms_of_service:
+ changelog: Què ha canviat?
+ text: Condicions de servei
+ terms_of_service_generator:
+ admin_email: Adreça-e per a les notificacions legals
+ arbitration_address: Adreça física per a les notificacions d'arbitratge
+ arbitration_website: Lloc web per a enviar les notificacions d'arbitratge
+ dmca_address: Adreça física per a les notificacions de copyright/DMCA
+ dmca_email: Adreça-e per a les notificacions de copyright/DMCA
+ domain: Domini
+ jurisdiction: Jurisdicció
user:
role: Rol
time_zone: Zona horària
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 6c21683b07..d5a785e387 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -60,6 +60,7 @@ cy:
setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif
setting_display_media_hide_all: Cuddio cyfryngau bob tro
setting_display_media_show_all: Dangos cyfryngau bob tro
+ setting_system_scrollbars_ui: Yn berthnasol i borwyr bwrdd gwaith yn seiliedig ar Safari a Chrome yn unig
setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maen nhw'n cuddio unrhyw fanylion
setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio'n awtomatig
username: Gallwch ddefnyddio nodau, rhifau a thanlinellau
@@ -129,6 +130,17 @@ cy:
show_application: Byddwch bob amser yn gallu gweld pa ap a gyhoeddodd eich postiad beth bynnag.
tag:
name: Dim ond er mwyn ei gwneud yn fwy darllenadwy y gallwch chi newid y llythrennau, er enghraifft
+ terms_of_service:
+ changelog: Mae modd ei strwythuro gyda chystrawen Markdown.
+ text: Mae modd ei strwythuro gyda chystrawen Markdown.
+ terms_of_service_generator:
+ admin_email: Mae hysbysiadau cyfreithiol yn cynnwys gwrth-hysbysiadau, gorchmynion llys, ceisiadau tynnu i lawr, a cheisiadau gorfodi'r gyfraith.
+ arbitration_address: Gall fod yr un peth â'r cyfeiriad ffisegol uchod, neu “D/A” os ydych chi'n defnyddio e-bost
+ arbitration_website: Gall fod yn ffurflen we, neu “D/A” os ydych chi'n defnyddio e-bost
+ dmca_address: Ar gyfer gweithredwyr yr Unol Daleithiau, defnyddiwch y cyfeiriad sydd wedi'i gofrestru yn Designated Agent Directory y DMCA. Mae rhestriad blychau post ar gael ar gais uniongyrchol, defnyddiwch gais Designated Agent Post Office Box Waiver Request y DMCA i anfon e-bost at y Swyddfa Hawlfraint a disgrifiwch eich bod yn gymedrolwr cynnwys yn y cartref sy'n ofni dial neu ddialedd am eich gweithredoedd ac sydd angen defnyddio Blwch P.O. i dynnu eich cyfeiriad cartref o olwg y cyhoedd.
+ dmca_email: Gall fod yr un e-bost sy'n cael ei ddefnyddio ar gyfer “Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol” uchod
+ domain: Dynodiad unigryw o'r gwasanaeth ar-lein rydych chi'n ei ddarparu.
+ jurisdiction: Rhestrwch y wlad lle mae pwy bynnag sy'n talu'r biliau yn byw. Os yw'n gwmni neu'n endid arall, rhestrwch y wlad lle mae wedi'i ymgorffori, a'r ddinas, rhanbarth, tiriogaeth neu wladwriaeth fel y bo'n briodol.
user:
chosen_languages: Wedi eu dewis, dim ond tŵtiau yn yr ieithoedd hyn bydd yn cael eu harddangos mewn ffrydiau cyhoeddus
role: Mae'r rôl yn rheoli pa ganiatâd sydd gan y defnyddiwr.
@@ -223,6 +235,7 @@ cy:
setting_hide_network: Cuddio eich graff cymdeithasol
setting_reduce_motion: Lleihau mudiant mewn animeiddiadau
setting_system_font_ui: Defnyddio ffont rhagosodedig y system
+ setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system
setting_theme: Thema'r wefan
setting_trends: Dangos pynciau llosg heddiw
setting_unfollow_modal: Dangos deialog cadarnhau cyn dad-ddilyn rhywun
@@ -317,6 +330,17 @@ cy:
name: Hashnod
trendable: Caniatáu i'r hashnod hwn ymddangos o dan bynciau llosg
usable: Caniatáu i bostiadau ddefnyddio'r hashnod hwn yn lleol
+ terms_of_service:
+ changelog: Beth sydd wedi newid?
+ text: Telerau Gwasanaeth
+ terms_of_service_generator:
+ admin_email: Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol
+ arbitration_address: Cyfeiriad ffisegol ar gyfer hysbysiadau cyflafareddu
+ arbitration_website: Gwefan ar gyfer cyflwyno hysbysiadau cyflafareddu
+ dmca_address: Cyfeiriad ffisegol ar gyfer DMCA/hysbysiadau hawlfraint
+ dmca_email: Cyfeiriad e-bost ar gyfer DMCA/hysbysiadau hawlfraint
+ domain: Parth
+ jurisdiction: Awdurdodaeth gyfreithiol
user:
role: Rôl
time_zone: Cylchfa amser
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 78629c95ca..0ef8232dda 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -130,6 +130,17 @@ da:
show_application: Du vil dog altid kunne se, hvilken app, der offentliggjorde dit indlæg.
tag:
name: Kun bogstavtyper (store/små) kan ændres, eksempelvis for at gøre det mere læsbart
+ terms_of_service:
+ changelog: Kan struktureres med Markdown-syntaks.
+ text: Kan struktureres med Markdown-syntaks.
+ terms_of_service_generator:
+ admin_email: Juridiske bekendtgørelser omfatter imødegåelsesbekendtgørelser, retskendelser, nedtagelses- og retshåndhævelsesanmodninger.
+ arbitration_address: Kan være den samme som Fysisk adresse ovenfor, eller “N/A” ved brug af e-mail
+ arbitration_website: Kan være en webformular, eller “N/A” ved brug af e-mail
+ dmca_address: For amerikanske operatører, brug den adresse, der er registreret i DMCA Designated Agent Directory. En Postboksliste er tilgængelig på direkte anmodning, brug den DMCA Designated Agent Post Office Box Waiver Request til at e-maile Ophavsretskontoret og beskrive, at man er en hjemmebaseret indholdsmoderator, der frygter hævn eller gengældelse for sine handlinger og behøver en Postboks for at fjerne hjemmeadressen fra den offentlige visning.
+ dmca_email: Kan være samme e-mail, som brugt til “E-mailadresse til juridiske meddelelser” ovenfor
+ domain: Unik identifikation af den onlinetjeneste, man leverer.
+ jurisdiction: Angiv landet, hvor betaleren af regningerne er bosiddende. Er det en virksomhed eller en anden entitet, angiv det land, hvor det er stiftet, og byen, regionen, området eller staten efter behov.
user:
chosen_languages: Når markeret, vil kun indlæg på de valgte sprog fremgå på offentlige tidslinjer
role: Rollen styrer, hvilke tilladelser brugeren er tildelt.
@@ -319,6 +330,17 @@ da:
name: Hashtag
trendable: Tillad visning af dette hashtag under trends
usable: Tillad indlæg at benytte dette hashtag lokalt
+ terms_of_service:
+ changelog: Hvad der er ændret?
+ text: Tjenestevilkår
+ terms_of_service_generator:
+ admin_email: E-mailadresse til juridiske meddelelser
+ arbitration_address: Fysisk adresse til voldgiftsmeddelelser
+ arbitration_website: Websted til indsendelse af voldgiftsmeddelelser
+ dmca_address: Fysisk adresse til DMCA-/ophavsretsmeddelelser
+ dmca_email: E-mailadresse til DMCA-/ophavsretsmeddelelser
+ domain: Domæne
+ jurisdiction: Juridisk jurisdiktion
user:
role: Rolle
time_zone: Tidszone
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 2ac7791273..201af831ad 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -130,6 +130,16 @@ de:
show_application: Du wirst immer sehen können, über welche App dein Beitrag veröffentlicht wurde.
tag:
name: Du kannst nur die Groß- und Kleinschreibung der Buchstaben ändern, um es z. B. lesbarer zu machen
+ terms_of_service:
+ changelog: Kann mit der Markdown-Syntax formatiert werden.
+ text: Kann mit der Markdown-Syntax formatiert werden.
+ terms_of_service_generator:
+ admin_email: Rechtliche Hinweise umfassen Gegendarstellungen, Gerichtsbeschlüsse, Anfragen zum Herunternehmen von Inhalten und Anfragen von Strafverfolgungsbehörden.
+ arbitration_address: Kann wie die Anschrift hierüber sein oder „N/A“, falls eine E-Mail verwendet wird
+ arbitration_website: Kann ein Webformular sein oder „N/A“, falls eine E-Mail verwendet wird
+ dmca_email: Kann dieselbe E-Mail wie bei „E-Mail-Adresse für rechtliche Hinweise“ sein
+ domain: Einzigartige Identifizierung des angebotenen Online-Services.
+ jurisdiction: Gib das Land an, in dem die Person lebt, die alle Rechnungen bezahlt. Falls es sich dabei um ein Unternehmen oder eine andere Einrichtung handelt, gib das Land mit dem Sitz an, sowie die Stadt oder Region.
user:
chosen_languages: Wenn du hier eine oder mehrere Sprachen auswählst, werden ausschließlich Beiträge in diesen Sprachen in deinen öffentlichen Timelines angezeigt
role: Die Rolle bestimmt, welche Berechtigungen das Konto hat.
@@ -319,6 +329,17 @@ de:
name: Hashtag
trendable: Erlaube, dass dieser Hashtag in den Trends erscheint
usable: Beiträge dürfen diesen Hashtag lokal verwenden
+ terms_of_service:
+ changelog: Was hat sich geändert?
+ text: Nutzungsbedingungen
+ terms_of_service_generator:
+ admin_email: E-Mail-Adresse für rechtliche Hinweise
+ arbitration_address: Anschrift für Schiedsverfahren
+ arbitration_website: Website zum Einreichen von Schiedsverfahren
+ dmca_address: Anschrift für Urheberrechtsverletzungen
+ dmca_email: E-Mail-Adresse für Urheberrechtsverletzungen
+ domain: Domain
+ jurisdiction: Gerichtsstand
user:
role: Rolle
time_zone: Zeitzone
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index bdd9c5991c..3d04917561 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -165,6 +165,17 @@ en:
show_application: You will always be able to see which app published your post regardless.
tag:
name: You can only change the casing of the letters, for example, to make it more readable
+ terms_of_service:
+ changelog: Can be structured with Markdown syntax.
+ text: Can be structured with Markdown syntax.
+ terms_of_service_generator:
+ admin_email: Legal notices include counternotices, court orders, takedown requests, and law enforcement requests.
+ arbitration_address: Can be the same as Physical address above, or “N/A” if using email
+ arbitration_website: Can be a web form, or “N/A” if using email
+ dmca_address: For US operators, use the address registered in the DMCA Designated Agent Directory. A P.O. Box listing is available upon direct request, use the DMCA Designated Agent Post Office Box Waiver Request to email the Copyright Office and describe that you are a home-based content moderator who fears revenge or retribution for your actions and need to use a P.O. Box to remove your home address from public view.
+ dmca_email: Can be the same email used for “Email address for legal notices” above
+ domain: Unique identification of the online service you are providing.
+ jurisdiction: List the country where whoever pays the bills lives. If it’s a company or other entity, list the country where it’s incorporated, and the city, region, territory or state as appropriate.
user:
chosen_languages: When checked, only posts in selected languages will be displayed in public timelines
role: The role controls which permissions the user has.
@@ -462,6 +473,17 @@ en:
name: Hashtag
trendable: Allow this hashtag to appear under trends
usable: Allow posts to use this hashtag locally
+ terms_of_service:
+ changelog: What's changed?
+ text: Terms of Service
+ terms_of_service_generator:
+ admin_email: Email address for legal notices
+ arbitration_address: Physical address for arbitration notices
+ arbitration_website: Website for submitting arbitration notices
+ dmca_address: Physical address for DMCA/copyright notices
+ dmca_email: Email address for DMCA/copyright notices
+ domain: Domain
+ jurisdiction: Legal jurisdiction
user:
role: Role
time_zone: Time zone
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 0c5c10d8bd..a741040477 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -183,7 +183,7 @@ eo:
defaults:
autofollow: Inviti al sekvi vian konton
avatar: Rolfiguro
- bot: Tio estas robota konto
+ bot: Ĉi tio estas aŭtomata konto
chosen_languages: Filtri lingvojn
confirm_new_password: Konfirmi novan pasvorton
confirm_password: Konfirmi pasvorton
@@ -319,6 +319,11 @@ eo:
name: Kradvorto
trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj
usable: Permesi afiŝojn uzi ĉi tiun kradvorton loke
+ terms_of_service:
+ changelog: Kio ŝanĝiĝis?
+ text: Kondiĉoj de uzado
+ terms_of_service_generator:
+ domain: Domajno
user:
role: Rolo
time_zone: Horzono
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index 85dc47853c..1dfac9d043 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -130,6 +130,16 @@ es-AR:
show_application: Sin embargo, siempre podrás ver desde qué aplicación se envió tu mensaje.
tag:
name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible
+ terms_of_service:
+ changelog: Se puede estructurar con sintaxis Markdown.
+ text: Se puede estructurar con sintaxis Markdown.
+ terms_of_service_generator:
+ arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico
+ arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico
+ dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública.
+ dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba
+ domain: Identificación única del servicio en línea que estás proporcionando.
+ jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda.
user:
chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas
role: El rol controla qué permisos tiene el usuario.
@@ -319,6 +329,17 @@ es-AR:
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir que los mensajes usen esta etiqueta localmente
+ terms_of_service:
+ changelog: "¿Qué ha cambiado?"
+ text: Términos del servicio
+ terms_of_service_generator:
+ admin_email: Dirección de correo electrónico para avisos legales
+ arbitration_address: Dirección física para avisos de arbitraje
+ arbitration_website: Sitio web para enviar avisos de arbitraje
+ dmca_address: Dirección física para avisos de DMCA/derechos de autor
+ dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor
+ domain: Dominio
+ jurisdiction: Jurisdicción legal
user:
role: Rol
time_zone: Zona horaria
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 2278fda6da..8dc1c4a3a6 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -25,7 +25,7 @@ es-MX:
type_html: Elige qué hacer con %{acct}
types:
disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos.
- none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción.
+ none: Usa esto para enviar una advertencia al usuario, sin desencadenar ninguna otra acción.
sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles.
silence: Evita que el usuario pueda publicar con visibilidad pública, y oculta sus publicaciones y notificaciones a personas que no lo siguen. Cierra todas las denuncias contra esta cuenta.
suspend: Evita cualquier interacción desde o hacia esta cuenta y elimina su contenido. Reversible en 30 días. Cierra todas las denuncias contra esta cuenta.
@@ -48,7 +48,7 @@ es-MX:
digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
email: Se le enviará un correo de confirmación
header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
- inbox_url: Copia la URL de la página principal del relés que quieres utilizar
+ inbox_url: Copia la URL de la página principal del relé que deseas usar
irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
locale: El idioma de la interfaz de usuario, correos y notificaciones push
password: Utiliza al menos 8 caracteres
@@ -61,7 +61,7 @@ es-MX:
setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
setting_system_scrollbars_ui: Solo se aplica a los navegadores de escritorio basados en Safari y Chrome
- setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
+ setting_use_blurhash: Los degradados se basan en los colores de los elementos visuales ocultos, pero ocultan cualquier detalle
setting_use_pending_items: Ocultar las publicaciones de la línea de tiempo tras un clic en lugar de desplazar automáticamente el feed
username: Puedes usar letras, números y guiones bajos
whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra
@@ -130,11 +130,22 @@ es-MX:
show_application: Siempre podrás ver desde cuál aplicación realizaste una publicación.
tag:
name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
+ terms_of_service:
+ changelog: Puede estructurarse con la sintaxis Markdown.
+ text: Puede estructurarse con la sintaxis Markdown.
+ terms_of_service_generator:
+ admin_email: Las notificaciones legales incluyen contraavisos, órdenes judiciales, solicitudes de retirada y solicitudes de aplicación de la ley.
+ arbitration_address: Puede ser la misma que la dirección física anterior, o “N/A” si se utiliza el correo electrónico
+ arbitration_website: Puede ser un formulario web, o “N/A” si se utiliza el correo electrónico
+ dmca_address: Para los operadores de EE. UU., utilice la dirección registrada en el Directorio de Agentes Designados de la DMCA. Un listado de apartados de correos está disponible bajo petición directa, utilice la Solicitud de Renuncia de Apartado de Correos de Agente Designado de la DMCA para enviar un correo electrónico a la Oficina de Derechos de Autor y describa que usted es un moderador de contenidos desde su casa que teme venganza o represalias por sus acciones y necesita utilizar un apartado de correos para eliminar su dirección particular de la vista del público.
+ dmca_email: Puede ser la misma dirección de correo electrónico usada en “Dirección de correo electrónico para notificaciones legales”
+ domain: Identificación única del servicio en línea que presta.
+ jurisdiction: Indique el país de residencia de quien paga las facturas. Si se trata de una empresa u otra entidad, indique el país en el que está constituida y la ciudad, región, territorio o estado, según proceda.
user:
chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas
role: El rol controla qué permisos tiene el usuario.
user_role:
- color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal
+ color: Color que se usará para el rol en toda la interfaz de usuario, como RGB en formato hexadecimal
highlighted: Esto hace que el rol sea públicamente visible
name: Nombre público del rol, si el rol se establece para que se muestre como una insignia
permissions_as_keys: Los usuarios con este rol tendrán acceso a...
@@ -223,12 +234,12 @@ es-MX:
setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido
setting_hide_network: Ocultar tu red
setting_reduce_motion: Reducir el movimiento de las animaciones
- setting_system_font_ui: Utilizar la tipografía por defecto del sistema
+ setting_system_font_ui: Usar la fuente por defecto del sistema
setting_system_scrollbars_ui: Usar la barra de desplazamiento por defecto del sistema
setting_theme: Tema del sitio
setting_trends: Mostrar las tendencias de hoy
setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien
- setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto
+ setting_use_blurhash: Mostrar degradados de colores para contenidos multimedia ocultos
setting_use_pending_items: Modo lento
severity: Severidad
sign_in_token_attempt: Código de seguridad
@@ -319,6 +330,17 @@ es-MX:
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir a las publicaciones usar esta etiqueta localmente
+ terms_of_service:
+ changelog: "¿Qué es lo que ha cambiado?"
+ text: Condiciones del servicio
+ terms_of_service_generator:
+ admin_email: Dirección de correo electrónico para notificaciones legales
+ arbitration_address: Dirección física para notificaciones de arbitraje
+ arbitration_website: Sitio web para presentar notificaciones de arbitraje
+ dmca_address: Dirección física para avisos de DMCA/derechos de autor
+ dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor
+ domain: Dominio
+ jurisdiction: Jurisdicción legal
user:
role: Rol
time_zone: Zona horaria
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index f83b4b1d1c..269fdb7091 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -130,6 +130,16 @@ es:
show_application: Tú siempre podrás ver desde qué aplicación se ha publicado tu publicación.
tag:
name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
+ terms_of_service:
+ changelog: Se puede estructurar con sintaxis Markdown.
+ text: Se puede estructurar con sintaxis Markdown.
+ terms_of_service_generator:
+ arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico
+ arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico
+ dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública.
+ dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba
+ domain: Identificación única del servicio en línea que estás proporcionando.
+ jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda.
user:
chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas
role: El rol controla qué permisos tiene el usuario.
@@ -319,6 +329,17 @@ es:
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir a las publicaciones usar esta etiqueta localmente
+ terms_of_service:
+ changelog: "¿Qué ha cambiado?"
+ text: Términos del servicio
+ terms_of_service_generator:
+ admin_email: Dirección de correo electrónico para avisos legales
+ arbitration_address: Dirección física para avisos de arbitraje
+ arbitration_website: Sitio web para enviar avisos de arbitraje
+ dmca_address: Dirección física para avisos de DMCA/derechos de autor
+ dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor
+ domain: Dominio
+ jurisdiction: Jurisdicción legal
user:
role: Rol
time_zone: Zona horaria
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index ae3bbd5c9b..acd1eefca6 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -130,6 +130,17 @@ fi:
show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin.
tag:
name: Voit esimerkiksi vaihtaa suur- ja pienaakkosten kesken helppolukuistaaksesi tekstiäsi
+ terms_of_service:
+ changelog: Voidaan jäsentää Markdown-syntaksilla.
+ text: Voidaan jäsentää Markdown-syntaksilla.
+ terms_of_service_generator:
+ admin_email: Oikeudellisiin ilmoituksiin kuuluvat vastailmoitukset, oikeuden määräykset, poistopyynnöt ja lainvalvontaviranomaisten pyynnöt.
+ arbitration_address: Voi olla sama kuin edellä oleva fyysinen osoite tai ”N/A”, jos käytät sähköpostia
+ arbitration_website: Voi olla verkkolomake tai ”N/A”, jos käytät sähköpostia
+ dmca_address: Yhdysvaltalaisten operaattoreiden on käytettävä DMCA Designated Agent Directory -luetteloon rekisteröityä osoitetta. Postilokeroluettelo on saatavissa suoralla pyynnöllä, joten käytä DMCA Designated Agent Post Office Box Waiver Request -lomaketta lähettääksesi sähköpostia tekijänoikeusvirastolle ja kuvaile, että olet kotona toimiva sisältömoderaattori, joka pelkää kostoa tai rangaistusta toimistaan ja tarvitsee postilokeroa pitääkseen kotiosoitteensa poissa julkisuudesta.
+ dmca_email: Voi olla sama sähköpostiosoite kuin edellä kohdassa ”Sähköpostiosoite oikeudellisia ilmoituksia varten”
+ domain: Tarjoamasi verkkopalvelun yksilöllinen tunniste.
+ jurisdiction: Mainitse valtio, jossa laskujen maksaja asuu. Jos kyseessä on yritys tai muu yhteisö, mainitse valtio, johon se on rekisteröity, ja tarvittaessa kaupunki, alue, territorio tai osavaltio.
user:
chosen_languages: Jos valitset kieliä oheisesta luettelosta, vain niidenkieliset julkaisut näkyvät sinulle julkisilla aikajanoilla
role: Rooli määrää, millaiset käyttöoikeudet käyttäjällä on.
@@ -319,6 +330,17 @@ fi:
name: Aihetunniste
trendable: Salli tämän aihetunnisteen näkyä trendeissä
usable: Salli julkaisujen käyttää tätä aihetunnistetta paikallisesti
+ terms_of_service:
+ changelog: Mikä on muuttunut?
+ text: Käyttöehdot
+ terms_of_service_generator:
+ admin_email: Sähköpostiosoite oikeudellisille ilmoituksille
+ arbitration_address: Fyysinen osoite välimiesmenettelyn ilmoituksille
+ arbitration_website: Sähköpostiosoite välimiesmenettelyn ilmoituksille
+ dmca_address: Fyysinen osoite DMCA-/tekijänoikeusilmoituksille
+ dmca_email: Sähköpostiosoite DMCA-/tekijänoikeusilmoituksille
+ domain: Verkkotunnus
+ jurisdiction: Lainkäyttöalue
user:
role: Rooli
time_zone: Aikavyöhyke
diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml
index d38aeaa414..4f89eec5e6 100644
--- a/config/locales/simple_form.fr-CA.yml
+++ b/config/locales/simple_form.fr-CA.yml
@@ -3,12 +3,14 @@ fr-CA:
simple_form:
hints:
account:
+ attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions.
discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs.
display_name: Votre nom complet ou votre nom cool.
fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez.
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
+ unlocked: Les personnes pourront vous suivre sans en demander la permission. Décochez cette case si vous souhaitez examiner les demandes de suivi et choisir d'accepter ou de rejeter les nouveaux followers.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte que vous souhaitez faire migrer
account_migration:
@@ -58,6 +60,7 @@ fr-CA:
setting_display_media_default: Masquer les médias marqués comme sensibles
setting_display_media_hide_all: Toujours masquer les médias
setting_display_media_show_all: Toujours afficher les médias
+ setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome
setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails
setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement
username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas
@@ -127,6 +130,17 @@ fr-CA:
show_application: Vous pourrez toujours voir quelle application vous avez utilisé pour publier un message dans tous les cas.
tag:
name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible
+ terms_of_service:
+ changelog: Peut être structuré avec la syntaxe Markdown.
+ text: Peut être structuré avec la syntaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Les avis juridiques comprennent les contre-avis, les ordonnances judiciaires, les demandes de retrait et les demandes des forces de l'ordre.
+ arbitration_address: Peut être la même que l'adresse physique ci-dessus, ou "N/A" si vous utilisez un e-mail
+ arbitration_website: Peut être un formulaire web, ou « N/A» si vous utilisez un e-mail
+ dmca_address: Pour les opérateurs américains, utilisez l'adresse enregistrée dans le répertoire des agents désignés du DMCA Designated Agent Directory. Une boîte postale est disponible sur demande directe. Utilisez le formulaire de demande de dérogation pour l'utilisation d'une boîte postale par un agent désigné du Designated Agent Post Office Box Waiver Request pour envoyer un e-mail au Bureau du droit d'auteur (Copyright Office) et expliquer que vous êtes un modérateur de contenu à domicile qui craint des représailles ou une vengeance pour ses actions et que vous avez besoin d'utiliser une boîte postale afin de masquer votre adresse personnelle au public.
+ dmca_email: Peut être la même adresse e-mail que celle utilisée pour « Adresse e-mail pour les mentions légales » ci-dessus
+ domain: Identification unique du service en ligne que vous offrez.
+ jurisdiction: Indiquez le pays dans lequel réside la personne qui paie les factures. S'il s'agit d'une entreprise ou d'une autre entité, indiquez le pays dans lequel elle est enregistrée, ainsi que la ville, la région, le territoire ou l'État, le cas échéant.
user:
chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics
role: Le rôle définit quelles autorisations a l'utilisateur⋅rice.
@@ -142,6 +156,7 @@ fr-CA:
url: Là où les événements seront envoyés
labels:
account:
+ attribution_domains_as_text: Sites web autorisés à vous citer
discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages
fields:
name: Étiquette
@@ -220,6 +235,7 @@ fr-CA:
setting_hide_network: Cacher votre réseau
setting_reduce_motion: Réduire la vitesse des animations
setting_system_font_ui: Utiliser la police par défaut du système
+ setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système
setting_theme: Thème du site
setting_trends: Afficher les tendances du jour
setting_unfollow_modal: Afficher une fenêtre de confirmation avant de vous désabonner d’un compte
@@ -314,6 +330,17 @@ fr-CA:
name: Mot-clic
trendable: Autoriser ce hashtag à apparaitre dans les tendances
usable: Autoriser les messages à utiliser ce hashtag localement
+ terms_of_service:
+ changelog: Nouveautés?
+ text: Conditions d'utilisation
+ terms_of_service_generator:
+ admin_email: Adresse électronique pour les notifications légales
+ arbitration_address: Adresse physique pour les notifications d'arbitrage
+ arbitration_website: Site Web pour soumettre les notifications d'arbitrage
+ dmca_address: Adresse physique pour les avis DMCA/copyright
+ dmca_email: Adresse e-mail pour les avis DMCA/copyright
+ domain: Domaine
+ jurisdiction: Juridiction
user:
role: Rôle
time_zone: Fuseau horaire
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index b601bf0b66..1b0469f7a3 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -3,12 +3,14 @@ fr:
simple_form:
hints:
account:
+ attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions.
discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs.
display_name: Votre nom complet ou votre nom rigolo.
fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez.
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
+ unlocked: Les personnes pourront vous suivre sans en demander la permission. Décochez cette case si vous souhaitez examiner les demandes de suivi et choisir d'accepter ou de rejeter les nouveaux followers.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte à partir duquel vous souhaitez migrer
account_migration:
@@ -19,7 +21,7 @@ fr:
admin_account_action:
include_statuses: L’utilisateur·rice verra quels messages sont la source de l’action de modération ou de l’avertissement
send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte
- text_html: Facultatif. Vous pouvez utiliser la syntaxe des publications. Vous pouvez ajouter des présélections d'attention pour gagner du temps
+ text_html: Facultatif. Vous pouvez utiliser la syntaxe des messages. Vous pouvez ajouter des avertissements préconfigurés pour gagner du temps
type_html: Choisir que faire avec %{acct}
types:
disable: Empêcher l’utilisateur·rice d’utiliser son compte, mais ne pas supprimer ou masquer son contenu.
@@ -58,6 +60,7 @@ fr:
setting_display_media_default: Masquer les médias marqués comme sensibles
setting_display_media_hide_all: Toujours masquer les médias
setting_display_media_show_all: Toujours afficher les médias
+ setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome
setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails
setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement
username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas
@@ -99,7 +102,7 @@ fr:
thumbnail: Une image d'environ 2:1 affichée à côté des informations de votre serveur.
timeline_preview: Les utilisateur⋅rice⋅s déconnecté⋅e⋅s pourront parcourir les derniers messages publics disponibles sur le serveur.
trendable_by_default: Ignorer l'examen manuel du contenu tendance. Des éléments individuels peuvent toujours être supprimés des tendances après coup.
- trends: Les tendances montrent quelles publications, hashtags et actualités gagnent en ampleur sur votre serveur.
+ trends: Les tendances montrent quels messages, hashtags et actualités gagnent en popularité sur votre serveur.
trends_as_landing_page: Afficher le contenu tendance au lieu d'une description de ce serveur pour les comptes déconnectés et les non-inscrit⋅e⋅s. Nécessite que les tendances soient activées.
form_challenge:
current_password: Vous entrez une zone sécurisée
@@ -127,6 +130,17 @@ fr:
show_application: Vous pourrez toujours voir quelle application vous avez utilisé pour publier un message dans tous les cas.
tag:
name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible
+ terms_of_service:
+ changelog: Peut être structuré avec la syntaxe Markdown.
+ text: Peut être structuré avec la syntaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Les avis juridiques comprennent les contre-avis, les ordonnances judiciaires, les demandes de retrait et les demandes des forces de l'ordre.
+ arbitration_address: Peut être la même que l'adresse physique ci-dessus, ou "N/A" si vous utilisez un e-mail
+ arbitration_website: Peut être un formulaire web, ou « N/A» si vous utilisez un e-mail
+ dmca_address: Pour les opérateurs américains, utilisez l'adresse enregistrée dans le répertoire des agents désignés du DMCA Designated Agent Directory. Une boîte postale est disponible sur demande directe. Utilisez le formulaire de demande de dérogation pour l'utilisation d'une boîte postale par un agent désigné du Designated Agent Post Office Box Waiver Request pour envoyer un e-mail au Bureau du droit d'auteur (Copyright Office) et expliquer que vous êtes un modérateur de contenu à domicile qui craint des représailles ou une vengeance pour ses actions et que vous avez besoin d'utiliser une boîte postale afin de masquer votre adresse personnelle au public.
+ dmca_email: Peut être la même adresse e-mail que celle utilisée pour « Adresse e-mail pour les mentions légales » ci-dessus
+ domain: Identification unique du service en ligne que vous offrez.
+ jurisdiction: Indiquez le pays dans lequel réside la personne qui paie les factures. S'il s'agit d'une entreprise ou d'une autre entité, indiquez le pays dans lequel elle est enregistrée, ainsi que la ville, la région, le territoire ou l'État, le cas échéant.
user:
chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics
role: Le rôle définit quelles autorisations a l'utilisateur⋅rice.
@@ -142,6 +156,7 @@ fr:
url: Là où les événements seront envoyés
labels:
account:
+ attribution_domains_as_text: Sites web autorisés à vous citer
discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages
fields:
name: Étiquette
@@ -220,6 +235,7 @@ fr:
setting_hide_network: Cacher votre réseau
setting_reduce_motion: Réduire la vitesse des animations
setting_system_font_ui: Utiliser la police par défaut du système
+ setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système
setting_theme: Thème du site
setting_trends: Afficher les tendances du jour
setting_unfollow_modal: Demander confirmation avant de vous désabonner d’un compte
@@ -314,6 +330,17 @@ fr:
name: Hashtag
trendable: Autoriser ce hashtag à apparaitre dans les tendances
usable: Autoriser les messages à utiliser ce hashtag localement
+ terms_of_service:
+ changelog: Nouveautés?
+ text: Conditions d'utilisation
+ terms_of_service_generator:
+ admin_email: Adresse électronique pour les notifications légales
+ arbitration_address: Adresse physique pour les notifications d'arbitrage
+ arbitration_website: Site Web pour soumettre les notifications d'arbitrage
+ dmca_address: Adresse physique pour les avis DMCA/copyright
+ dmca_email: Adresse e-mail pour les avis DMCA/copyright
+ domain: Domaine
+ jurisdiction: Juridiction
user:
role: Rôle
time_zone: Fuseau horaire
diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml
index 6a37a09201..3c8fef4e05 100644
--- a/config/locales/simple_form.fy.yml
+++ b/config/locales/simple_form.fy.yml
@@ -10,6 +10,7 @@ fy:
indexable: Jo iepenbiere berjochten kinne ferskine yn de sykresultaten op Mastodon. Minsken dy’t reagearre hawwe op jo berjochten kinne se hoe dan ek trochsykje.
note: 'Jo kinne oare minsken @fermelde of #hashtags brûke.'
show_collections: Minsken kinne sjen wa’t jo folgje en wa’t jo folget.
+ unlocked: Minsken kinne jo folgje sûnder dêrfoar tastimming freegje te hoegen. Wannear’t jo nije folgers hânmjittich goedkarre wolle, moatte jo dizze opsje deselektearje.
account_alias:
acct: Fermeld de brûkersnamme@domein fan de account fan wêr’t jo ferhúzje wolle
account_migration:
@@ -59,6 +60,7 @@ fy:
setting_display_media_default: As gefoelich markearre media ferstopje
setting_display_media_hide_all: Media altyd ferstopje
setting_display_media_show_all: Media altyd toane
+ setting_system_scrollbars_ui: Allinnich fan tapassing op desktopbrowsers basearre op Safari en Chromium
setting_use_blurhash: Dizige kleuroergongen binne basearre op de kleuren fan de ferstoppe media, wêrmei elk detail ferdwynt
setting_use_pending_items: De tiidline wurdt bywurke troch op it oantal nije items te klikken, yn stee fan dat dizze automatysk bywurke wurdt
username: Jo kinne letters, sifers en ûnderstreekjes brûke
@@ -128,6 +130,17 @@ fy:
show_application: Jo kinne sels altyd sjen mei hokker app jo in berjocht pleatst hawwe.
tag:
name: Jo kinne elk wurd mei in haadletter begjinne, om sa bygelyks de tekst mear lêsber te meitsjen
+ terms_of_service:
+ changelog: Kin strukturearre wurde mei Markdown-syntaksis.
+ text: Kin strukturearre wurde mei Markdown-syntaksis.
+ terms_of_service_generator:
+ admin_email: Juridyske meidielingen binne û.o. tsjinoantekeningen, rjochterlike befelen, ferwiderfersiken en fersiken om wetshanthaving.
+ arbitration_address: Kin itselde wêze as boppesteande strjitteof ‘N/A’ by gebrûk fan e-mail
+ arbitration_website: Kin in webformulier wêze, of ‘N/A’ as e-mail brûkt wurdt
+ dmca_address: 'Brûk foar behearders yn de FS: it adres dat registrearre is yn de DMCA Designated Agent Directory. Op fersyk is der in postbuslist beskikber. Brûk it DMCA Designated Agent Post Office Box Waiver Request om it Copyright Office te e-mailen en te beskriuwen dat jo in thúsbasearre ynhâldsmoderator binne dy’t wraak of fergelding frezet foar jo dieden en in postbus brûke moat om jo húsadres út it publike domein te hâlden.'
+ dmca_email: Kin itselde e-mailadres wêze as ‘E-mailadres foar juridyske berjochten’ hjirboppe
+ domain: In unike identifikaasje fan de online tsjinst dy’t ferliend wurdt.
+ jurisdiction: Fermeld it lân wêr’t de persoan wennet dy’t de rekkeningen betellet. As it in bedriuw of in oare entiteit is, fermeld it lân wêr’t it opnommen is en de stêd, regio, grûngebiet of steat, foar safier fan tapassing.
user:
chosen_languages: Allinnich berjochten yn de selektearre talen wurde op de iepenbiere tiidline toand
role: De rol bepaalt hokker rjochten in brûker hat.
@@ -222,6 +235,7 @@ fy:
setting_hide_network: Jo folgers en wa’t jo folget ferstopje
setting_reduce_motion: Stadigere animaasjes
setting_system_font_ui: Standertlettertype fan jo systeem brûke
+ setting_system_scrollbars_ui: Standert skowbalke fan jo systeem brûke
setting_theme: Websitetema
setting_trends: Trends fan hjoed toane
setting_unfollow_modal: Freegje foar it ûntfolgjen fan ien in befêstiging
@@ -316,6 +330,17 @@ fy:
name: Hashtag
trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is
usable: Berjochten tastean dizze hashtag lokaal te brûken
+ terms_of_service:
+ changelog: Wat is wizige?
+ text: Gebrûksbetingsten
+ terms_of_service_generator:
+ admin_email: E-mailadres foar juridyske meldingen
+ arbitration_address: Strjitte foar arbitraazjemeldingen
+ arbitration_website: Website foar it yntsjinjen fan arbitraazjemeldingen
+ dmca_address: Strjitte foar DMCA/auteursrjocht-meidielingen
+ dmca_email: E-mailadres foar DMCA/auteursrjocht-meidielingen
+ domain: Domein
+ jurisdiction: Rjochtsgebiet
user:
role: Rol
time_zone: Tiidsône
diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml
index f8257a9da9..749efcb5b4 100644
--- a/config/locales/simple_form.ga.yml
+++ b/config/locales/simple_form.ga.yml
@@ -60,6 +60,7 @@ ga:
setting_display_media_default: Folaigh meáin atá marcáilte mar íogair
setting_display_media_hide_all: Folaigh meáin i gcónaí
setting_display_media_show_all: Taispeáin meáin i gcónaí
+ setting_system_scrollbars_ui: Ní bhaineann sé ach le brabhsálaithe deisce bunaithe ar Safari agus Chrome
setting_use_blurhash: Tá grádáin bunaithe ar dhathanna na n-amharcanna ceilte ach cuireann siad salach ar aon mhionsonraí
setting_use_pending_items: Folaigh nuashonruithe amlíne taobh thiar de chlic seachas an fotha a scrollú go huathoibríoch
username: Is féidir leat litreacha, uimhreacha, agus béim a úsáid
@@ -223,6 +224,7 @@ ga:
setting_hide_network: Folaigh do ghraf sóisialta
setting_reduce_motion: Laghdú ar an tairiscint i beochan
setting_system_font_ui: Úsáid cló réamhshocraithe an chórais
+ setting_system_scrollbars_ui: Bain úsáid as scrollbharra réamhshocraithe an chórais
setting_theme: Téama suímh
setting_trends: Taispeáin treochtaí an lae inniu
setting_unfollow_modal: Taispeáin dialóg deimhnithe sula ndíleanfaidh tú duine éigin
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 3dc6ea28d2..6fdbe06d06 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -130,6 +130,17 @@ gl:
show_application: Independentemente, ti sempre poderás ver a app coa que publicaches a túa publicación.
tag:
name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade
+ terms_of_service:
+ changelog: Pode usarse sintaxe Markdown.
+ text: Pode usarse sintaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Os avisos legais inclúen ordes xudiciais, solicitudes de retirada de contido e requerimentos do cumprimento da lei.
+ arbitration_address: Pode ser o mesmo enderezo Físico de máis arriba, ou "N/A" se usas o correo electrónico
+ arbitration_website: Pode ser un formulario web ou "N/A" se usas o correo electrónico
+ dmca_address: Para operadores de USA, utiliza o mesmo enderezo rexistrado no DMCA Designated Agent Directory. Está dispoñible a opción de usar P.O. Box facendo a solicitude baixo a DMCA Designated Agent Post Office Box Waiver Request pedíndoa á Copyright Office e indicando que es un moderador de contidos na túa casa e temes ameazas ou violencia polas medidas que tomas e precisas usar un P.O. Box para que non sexa público o enderezo da túa casa.
+ dmca_email: Pode ser o mesmo enderezo de correo usado para "Enderezo para avisos legais"
+ domain: Identificador único do servizo en liña que proporcionas.
+ jurisdiction: Informa sobre o país onde vive quen paga as facturas. Se é unha empresa ou outra entidade, indica o país onde está establecida e é axeitado escribir a cidade, rexión, territorio ou estado.
user:
chosen_languages: Se ten marca, só as publicacións nos idiomas seleccionados serán mostrados en cronoloxías públicas
role: Os roles establecen os permisos que ten a usuaria.
@@ -319,6 +330,17 @@ gl:
name: Cancelo
trendable: Permitir que este cancelo apareza en tendencias
usable: Permitir que as publicacións usen este cancelo localmente
+ terms_of_service:
+ changelog: Que cambios se fixeron?
+ text: Termos do Servizo
+ terms_of_service_generator:
+ admin_email: Enderezo de correo para avisos legais
+ arbitration_address: Enderezo físico para avisos de arbitraxe
+ arbitration_website: Páxina web para enviar avisos de arbitraxe
+ dmca_address: Enderezo físico para avisos sobre DMCA/copyright
+ dmca_email: Enderezo de correo electrónico para avisos sobre DMCA/copyright
+ domain: Dominio
+ jurisdiction: Xurisdición legal
user:
role: Rol
time_zone: Fuso horario
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index 1c82aa9d40..85e8cbc53e 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -130,6 +130,17 @@ he:
show_application: תמיד ניתן לראות איזו אפליקציה פרסמה את הפוסט שלך בכל מקרה.
tag:
name: ניתן רק להחליף בין אותיות קטנות וגדולות, למשל כדי לשפר את הקריאות
+ terms_of_service:
+ changelog: ניתן לעצב בעזרת תחביר מארקדאון.
+ text: ניתן לעצב בעזרת תחביר מארקדאון.
+ terms_of_service_generator:
+ admin_email: מזכרים חוקיים כוללים הוראות בימ"ש, בקשות הסרה, תשובות להתראות ובקשות ציות לאכיפה.
+ arbitration_address: יכול להיות כתובת פיזית זהה לעיל, או “N/A” אם משתמשים בדואל
+ arbitration_website: יכול להיות טופס בדפדפן או “N/A” אם משתמשים בדואל
+ dmca_address: For US operators, use the address registered in the DMCA Designated Agent Directory. A P.O. Box listing is available upon direct request, use the DMCA Designated Agent Post Office Box Waiver Request to email the Copyright Office and describe that you are a home-based content moderator who fears revenge or retribution for your actions and need to use a P.O. Box to remove your home address from public view.
+ dmca_email: ניתן להשתמש באותה כתובת הדואל שעבור "כתובת דואל להודעות משפטיות" לעיל
+ domain: זיהוי ייחודי של השירות המקוון שאתה מספק.
+ jurisdiction: פרט את המדינה שבה גר משלם החשבונות. אם מדובר בחברה או גוף אחר, פרטו את המדינה שבה הוקם התאגיד, העיר, האזור, או המדינה בהתאם לצורך.
user:
chosen_languages: אם פעיל, רק הודעות בשפות הנבחרות יוצגו לפידים הפומביים
role: התפקיד שולט על אילו הרשאות יש למשתמש.
@@ -319,6 +330,17 @@ he:
name: תגית
trendable: הרשה/י לתגית זו להופיע תחת נושאים חמים
usable: הרשה/י להודעות להכיל תגית זו באופן מקומי
+ terms_of_service:
+ changelog: מה נשתנה?
+ text: תנאי השירות
+ terms_of_service_generator:
+ admin_email: כתובת דוא"ל להודעות משפטיות
+ arbitration_address: כתובת פיזית להודעות גישור
+ arbitration_website: אתר רשת להגשת הודעות גישור
+ dmca_address: כתובת פיזית לשליחת התראות זכויות יוצרים/DMCA
+ dmca_email: כתובת דואל לשליחת התראות זכויות יוצרים/DMCA
+ domain: מתחם (דומיין)
+ jurisdiction: איזור השיפוט
user:
role: תפקיד
time_zone: אזור זמן
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 2290440449..8a0f867f14 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -130,6 +130,14 @@ hu:
show_application: Ettől függetlenül mindig láthatod, melyik alkalmazás tette közzé a bejegyzésedet.
tag:
name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen
+ terms_of_service:
+ changelog: Markdown szintaxissal adható meg.
+ text: Markdown szintaxissal adható meg.
+ terms_of_service_generator:
+ admin_email: A jogi közlemények közé tartoznak az ellenkeresetek, a bírósági végzések, az eltávolítási kérelmek és a bűnüldöző szervek kérelmei is.
+ arbitration_address: Lehet a fent használt valós cím, vagy e-mail használata esetén „N/A”
+ arbitration_website: Lehet webes űrlap, vagy e-mail használata esetén „N/A”
+ domain: A nyújtott online szolgáltatás egyedi azonosítója.
user:
chosen_languages: Ha aktív, csak a kiválasztott nyelvű bejegyzések jelennek majd meg a nyilvános idővonalon
role: A szerep szabályozza, hogy a felhasználó milyen jogosultságokkal rendelkezik.
@@ -319,6 +327,17 @@ hu:
name: Hashtag
trendable: A hashtag megjelenhet a felkapottak között
usable: A helyi bejegyzések használhatják ezt a hashtaget
+ terms_of_service:
+ changelog: Mi változott?
+ text: Felhasználási feltételek
+ terms_of_service_generator:
+ admin_email: E-mail-cím a jogi nyilatkozatok benyújtásához
+ arbitration_address: Fizikai cím a békéltető testületi nyilatkozatok benyújtásához
+ arbitration_website: Weboldal a békéltető testületi nyilatkozatok benyújtásához
+ dmca_address: Fizikai cím a szerzői jogi nyilatkozatokhoz
+ dmca_email: E-mail-cím a szerzői jogi nyilatkozatokhoz
+ domain: Domain
+ jurisdiction: Joghatóság
user:
role: Szerep
time_zone: Időzóna
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 1a405980c0..113f55a2ba 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -40,14 +40,14 @@ ia:
text: Tu pote solo appellar contra un sanction un vice
defaults:
autofollow: Le personas qui se inscribe per medio del invitation te sequera automaticamente
- avatar: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px
bot: Signala a alteres que le conto principalmente exeque actiones automatisate e poterea non esser surveliate
context: Un o plure contextos ubi le filtro deberea applicar se
current_password: Pro propositos de securitate insere le contrasigno del conto actual
current_username: Pro confirmar, insere le nomine de usator del conto actual
digest: Solo inviate post un longe periodo de inactivitate e solo si tu ha recipite alcun messages personal in tu absentia
email: Te sera inviate un email de confirmation
- header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px
inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar
irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite
locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate
@@ -60,8 +60,8 @@ ia:
setting_display_media_default: Celar le medios marcate como sensibile
setting_display_media_hide_all: Sempre celar le medios
setting_display_media_show_all: Sempre monstrar le medios
- setting_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios
- setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo
+ setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios
+ setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo
username: Tu pote usar litteras, numeros e tractos de sublineamento
whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola
domain_allow:
@@ -98,7 +98,7 @@ ia:
site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio.
status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption
theme: Thema que le visitatores disconnexe e le nove usatores vide.
- thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor.
+ thumbnail: Un imagine de circa 2:1 monstrate al latere del informationes de tu servitor.
timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor.
trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto.
trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor.
@@ -181,7 +181,7 @@ ia:
text: Explicar perque iste decision deberea esser revertite
defaults:
autofollow: Invitar a sequer tu conto
- avatar: Pictura de profilo
+ avatar: Imagine de profilo
bot: Isto es un conto automatisate
chosen_languages: Filtrar linguas
confirm_new_password: Confirmar nove contrasigno
@@ -193,14 +193,14 @@ ia:
email: Adresse de e-mail
expires_in: Expira post
fields: Campos extra
- header: Imagine titulo
+ header: Imagine de titulo
honeypot: "%{label} (non compilar)"
inbox_url: URL del cassa de ingresso de repetitor
irreversible: Declinar in vice que celar
locale: Lingua de interfacie
max_uses: Numero max de usos
new_password: Nove contrasigno
- note: Bio
+ note: Biographia
otp_attempt: Codice a duo factores
password: Contrasigno
phrase: Parola o phrase clave
@@ -311,7 +311,7 @@ ia:
text: Regula
settings:
indexable: Includer pagina de profilo in le motores de recerca
- show_application: Monstrar ab que app tu ha inviate un message
+ show_application: Monstrar desde qual app tu ha inviate un message
tag:
listable: Permitter a iste hashtag apparer in le recercas e suggestiones
name: Hashtag
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 7c24ef80b1..2f113087e9 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -319,6 +319,14 @@ is:
name: Myllumerki
trendable: Leyfa þessu myllumerki að birtast undir vinsælu efni
usable: Leyfa færslum að nota þetta myllumerki staðvært
+ terms_of_service:
+ changelog: Hvað breyttist?
+ text: Þjónustuskilmálar
+ terms_of_service_generator:
+ admin_email: Tölvupóstfang vegna löglegra fyrirvara
+ dmca_email: Tölvupóstfang tylfynninga vegna DMCA/höfundarétt
+ domain: Lén
+ jurisdiction: Lögsagnarumdæmi
user:
role: Hlutverk
time_zone: Tímabelti
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 27c1a00370..97565f4b1a 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -130,6 +130,17 @@ it:
show_application: Tu sarai sempre in grado di vedere quale app ha pubblicato il tuo post anche se hai attivato questa impostazione.
tag:
name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile
+ terms_of_service:
+ changelog: Può essere strutturato con la sintassi Markdown.
+ text: Può essere strutturato con la sintassi Markdown.
+ terms_of_service_generator:
+ admin_email: Gli avvisi legali includono controavvisi, ordinanze del tribunale, richieste di rimozione e richieste delle forze dell'ordine.
+ arbitration_address: Può essere lo stesso dell'indirizzo fisico sopra o "N/A" se si utilizza l'email
+ arbitration_website: Può essere un modulo web o "N/A" se si utilizza l'email
+ dmca_address: Per gli operatori statunitensi, utilizzare l'indirizzo registrato nella DMCA Designated Agent Directory. L'elenco delle caselle postali è disponibile su richiesta diretta, utilizzando il DMCA Designated Agent Post Office Box Waiver Request per inviare un'email al Copyright Office e descrivendo di essere un moderatore di contenuti che lavora da casa e che teme vendette o punizioni per le proprie azioni e che hai bisogno di usare una casella postale per rimuovere il tuo indirizzo di casa dalla vista pubblica.
+ dmca_email: Può essere lo stesso indirizzo email utilizzato per "Indirizzo email per avvisi legali" sopra
+ domain: Identificazione univoca del servizio online che stai fornendo.
+ jurisdiction: Indica il Paese in cui risiede il soggetto che paga le fatture. Se si tratta di un'azienda o di un altro ente, indicare il Paese in cui è costituito, nonché la città, la regione, il territorio o lo Stato, a seconda dei casi.
user:
chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate
role: Il ruolo controlla quali permessi ha l'utente.
@@ -319,6 +330,17 @@ it:
name: Hashtag
trendable: Permetti a questo hashtag di apparire nelle tendenze
usable: Permetti ai post di utilizzare questo hashtag localmente
+ terms_of_service:
+ changelog: Cosa è cambiato?
+ text: Termini di Servizio
+ terms_of_service_generator:
+ admin_email: Indirizzo email per avvisi legali
+ arbitration_address: Indirizzo fisico per avvisi di arbitrato
+ arbitration_website: Sito web per l'invio di avvisi di arbitrato
+ dmca_address: Indirizzo fisico per gli avvisi DMCA/copyright
+ dmca_email: Indirizzo email per gli avvisi DMCA/copyright
+ domain: Dominio
+ jurisdiction: Giurisdizione legale
user:
role: Ruolo
time_zone: Fuso orario
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 90c3d7f4b0..71af0b42fd 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -130,6 +130,12 @@ ko:
show_application: 나 자신은 이 설정과 관계 없이 어떤 앱으로 게시물을 작성했는지 볼 수 있습니다.
tag:
name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다.
+ terms_of_service:
+ changelog: 마크다운 문법을 사용할 수 있습니다.
+ text: 마크다운 문법을 사용할 수 있습니다.
+ terms_of_service_generator:
+ arbitration_website: 웹 형태를 사용할 수 있습니다. 이메일을 사용한다면 "N/A"로 둘 수 있습니다
+ dmca_email: 상단의 "법적 통지를 위한 이메일 주소"와 같은 주소를 사용할 수 있습니다
user:
chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다
role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다.
@@ -319,6 +325,17 @@ ko:
name: 해시태그
trendable: 이 해시태그가 유행에 나타날 수 있도록 허용
usable: 이 해시태그를 로컬 게시물에서 사용 가능하도록 허용
+ terms_of_service:
+ changelog: 무엇이 바뀌었나요?
+ text: 이용 약관
+ terms_of_service_generator:
+ admin_email: 법적 조치를 위한 이메일 주소
+ arbitration_address: 중재 통지를 위한 실제 주소
+ arbitration_website: 중재 통지를 제출하기 위한 웹사이트
+ dmca_address: DMCA/저작권 통지를 위한 실제 주소
+ dmca_email: DMCA/저작권 통지를 위한 이메일 주소
+ domain: 도메인
+ jurisdiction: 법적 관할권
user:
role: 역할
time_zone: 시간대
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index b3885fb12b..865272c60e 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -103,6 +103,17 @@ lt:
settings:
indexable: Tavo profilio puslapis gali būti rodomas paieškos rezultatuose Google, Bing ir kituose.
show_application: Neatsižvelgiant į tai, visada galėsi matyti, kuri programėlė paskelbė tavo įrašą.
+ terms_of_service:
+ changelog: Gali būti struktūrizuota su ženklinimo sintakse.
+ text: Gali būti struktūrizuota su ženklinimo sintakse.
+ terms_of_service_generator:
+ admin_email: Teisiniai pranešimai įtraukia priešpriešinius pranešimus, teismo įsakymus, pašalinimo prašymus ir teisėsaugos institucijų prašymus.
+ arbitration_address: Gali būti toks pat kaip aukščiau nurodytas fizinis adresas arba „N/A“ (netaikoma), jei naudojamas el. paštas.
+ arbitration_website: Gali būti interneto forma arba „N/A“ (netaikoma), jei naudojamas el. paštas.
+ dmca_address: JAV operatoriams naudokite DMCA paskirtojo agento kataloge užregistruotą adresą. Pašto dėžutės sąrašą galima sudaryti pateikus tiesioginį prašymą, naudokite DMCA paskirtojo agento pašto dėžutės atsisakymo prašymą, kad parašytumėte el. laišką Autorinių teisių tarnybai ir aprašytumėte, kad esate namuose įsikūręs turinio moderatorius, kuris baiminasi keršto ar bausmės už savo veiksmus ir kuriam reikia naudoti pašto dėžutę, kad jo namų adresas nebūtų viešai matomas.
+ dmca_email: Gali būti tas pats aukščiau nurodytas el. pašto adresas, naudojamas „El. pašto adresas, skirtas teisiniams pranešimams“.
+ domain: Unikalus jūsų teikiamos internetinės paslaugos identifikavimas.
+ jurisdiction: Nurodykite šalį, kurioje gyvena tas, kas apmoka sąskaitas. Jei tai bendrovė ar kita esybė, nurodykite šalį, kurioje jis įregistruotas, ir atitinkamai miestą, regioną, teritoriją ar valstiją.
user:
chosen_languages: Kai pažymėta, viešose laiko skalėse bus rodomi tik įrašai pasirinktomis kalbomis.
role: Vaidmuo valdo, kokius leidimus naudotojas turi.
@@ -215,6 +226,17 @@ lt:
name: Saitažodis
trendable: Leisti šį saitažodį rodyti pagal trendus
usable: Leisti įrašams naudoti šį saitažodį vietoje
+ terms_of_service:
+ changelog: Kas pasikeitė?
+ text: Paslaugų sąlygos
+ terms_of_service_generator:
+ admin_email: El. pašto adresas, skirtas teisiniams pranešimams
+ arbitration_address: Fizinis adresas pranešimams apie arbitražą
+ arbitration_website: Svetainė pranešimams apie arbitražą
+ dmca_address: Fizinis adresas, skirtas DMCA / autorinių teisių pranešimams
+ dmca_email: El. pašto adresas, skirtas DMCA / autorinių teisių pranešimams
+ domain: Domenas
+ jurisdiction: Teisinis teismingumas
user:
role: Vaidmuo
time_zone: Laiko juosta
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index b1d0927eda..d272ebef0d 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -130,6 +130,17 @@ nl:
show_application: Je kunt zelf altijd zien met welke app je een bericht hebt geplaatst.
tag:
name: Je kunt elk woord met een hoofdletter beginnen, om zo bijvoorbeeld de tekst leesbaarder te maken
+ terms_of_service:
+ changelog: Kan worden gestructureerd met Markdown-syntaxis.
+ text: Kan worden gestructureerd met Markdown-syntaxis.
+ terms_of_service_generator:
+ admin_email: Juridische mededelingen zijn o.a. tegenaantekeningen, rechterlijke bevelen, verwijderingsverzoeken en verzoeken om wetshandhaving.
+ arbitration_address: Kan hetzelfde zijn als bovenstaande straatadres of "N/A" bij gebruik van e-mail
+ arbitration_website: Kan een webformulier zijn, of "N/A" als e-mail wordt gebruikt
+ dmca_address: 'Gebruik voor beheerders in de VS: het adres dat is geregistreerd in de DMCA Designated Agent Directory. Op verzoek is er een postbuslijst beschikbaar. Gebruik het DMCA Designated Agent Post Office Box Waiver Request om het Copyright Office te e-mailen en te beschrijven dat u een thuisgebaseerde inhoudsmoderator bent die wraak of vergelding vreest voor uw daden en een postbus moet gebruiken om uw huisadres uit het publieke domein te houden.'
+ dmca_email: Kan dezelfde e-mail worden gebruikt voor "E-mailadres voor juridische berichten" hierboven
+ domain: Een unieke identificatie van de online dienst die wordt verleend.
+ jurisdiction: Vermeldt het land waar de persoon woont die de rekeningen betaalt. Als het een bedrijf of een andere entiteit is, vermeldt het land waar het is opgenomen en de stad, regio, grondgebied of staat, voor zover van toepassing.
user:
chosen_languages: Alleen berichten in de aangevinkte talen worden op de openbare tijdlijnen getoond
role: De rol bepaalt welke rechten de gebruiker heeft.
@@ -319,6 +330,17 @@ nl:
name: Hashtag
trendable: Goedkeuren dat deze hashtag onder trends te zien valt
usable: Berichten toestaan deze hashtag lokaal te gebruiken
+ terms_of_service:
+ changelog: Wat is veranderd?
+ text: Gebruiksvoorwaarden
+ terms_of_service_generator:
+ admin_email: E-mailadres voor juridische meldingen
+ arbitration_address: Straatadres voor arbitragemeldingen
+ arbitration_website: Website voor het indienen van arbitragemeldingen
+ dmca_address: Straatadres voor DMCA/auteursrecht-mededelingen
+ dmca_email: E-mailadres voor DMCA/auteursrecht-mededelingen
+ domain: Domein
+ jurisdiction: Rechtsgebied
user:
role: Rol
time_zone: Tijdzone
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index cf09812382..6061ff44dc 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -319,6 +319,12 @@ pl:
name: Hasztag
trendable: Pozwól na wyświetlanie tego hashtagu w „Na czasie”
usable: Pozwól na umieszczanie tego hashtagu w lokalnych wpisach
+ terms_of_service:
+ changelog: Co się zmieniło?
+ text: Warunki korzystania z usługi
+ terms_of_service_generator:
+ domain: Domena
+ jurisdiction: Jurysdykcja
user:
role: Rola
time_zone: Strefa czasowa
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index 5a605e9872..8e01c6264d 100644
--- a/config/locales/simple_form.sq.yml
+++ b/config/locales/simple_form.sq.yml
@@ -130,6 +130,16 @@ sq:
show_application: Pavarësisht nga kjo, do të jeni përherë në gjendje të shihni cili aplikacion botoi postimin tuaj.
tag:
name: Mund të ndryshoni shkronjat vetëm nga të mëdha në të vogla ose anasjelltas, për shembull, për t’i bërë më të lexueshme
+ terms_of_service:
+ changelog: Mund të strukturohet me sintaksë Markdown.
+ text: Mund të strukturohet me sintaksë Markdown.
+ terms_of_service_generator:
+ admin_email: Njoftimet ligjore përfshijnë kundërnjoftime, vendime gjyqi, kërkesa për për nxjerrje sajti jashtë shërbimit dhe kërkesa nga organe ligjore.
+ arbitration_address: Mund të jetë e njëjtë me adresën Fizike më sipër, ose “N/A”, nëse përdoret email
+ arbitration_website: Mund të jetë një formular web, ose “N/A”, nëse përdoret email
+ dmca_email: Mund të jetë i njëjti email i përdorur për “Adresë email për njoftime ligjore” më sipëer
+ domain: Identifikues unik për shërbimin internetor që po ofroni.
+ jurisdiction: Vendosni vendin ku jeton cilido që paguan faturat. Nëse është një shoqëri apo tjetër njësi, vendosni vendin ku është regjistruar, si dhe qytetin, rajonin, territorin apo shtetin përkatës.
user:
chosen_languages: Në iu vëntë shenjë, te rrjedha kohore publike do të shfaqen vetëm mesazhe në gjuhët e përzgjedhura
role: Roli kontrollon cilat leje ka përdoruesi.
@@ -319,6 +329,17 @@ sq:
name: Hashtag
trendable: Lejoje këtë hashtag të shfaqet në prirje
usable: Lejoji postimet të përdorin lokalisht këtë hashtag
+ terms_of_service:
+ changelog: Ç’ka ndryshuar?
+ text: Kushte Shërbimi
+ terms_of_service_generator:
+ admin_email: Adresë email për njoftime ligjore
+ arbitration_address: Adresë fizike për njoftime arbitrazhi
+ arbitration_website: Sajtin për parashtrim njoftime arbitrazhi
+ dmca_address: Adresë fizike për njoftime DMCA/të drejtash kopjimi
+ dmca_email: Adresë email për njoftime DMCA/të drejtash kopjimi
+ domain: Përkatësi
+ jurisdiction: Juridiksion ligjor
user:
role: Rol
time_zone: Zonë kohore
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index 599b63ea6a..26cade806e 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -130,6 +130,17 @@ tr:
show_application: Ne olursa olsun gönderinizi yayınlayan uygulamayı her zaman görebileceksiniz.
tag:
name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz
+ terms_of_service:
+ changelog: Markdown sözdizimiyle yapılandırılabilir.
+ text: Markdown sözdizimiyle yapılandırılabilir.
+ terms_of_service_generator:
+ admin_email: Yasal bildirimler arasında karşı bildirimler, mahkeme kararları, yayından kaldırma talepleri ve kolluk kuvvetleri talepleri yer alır.
+ arbitration_address: Yukarıdaki fiziksel adresle aynı olabilir, veya e-posta kullanıyorsanız "N/A"
+ arbitration_website: Web formu olabilir, veya e-posta kullanıyorsanız "N/A"
+ dmca_address: ABD operatörleri için DMCA Atanmış Temsilci Dizininde kayıtlı adresi kullanın. Doğrudan taleple Posta Kutusu kullanımı mümkündür, Telif Hakkı Ofisine e-posta göndermek için DMCA Atanmış Temsilci Posta Kutusu Feragat Talebini kullanın ve eylemleriniz nedeniyle intikam veya cezalandırılmaktan çekinen ve herkese açık ev adresini kullanmamak için Posta Kutusu kullanması gereken ev tabanlı bir içerik moderatörü olduğunuzu açıklayın.
+ dmca_email: Yukarıdaki "Yasal bildirimler için e-posta adresi" için kullanılan e-posta ile aynı olabilir
+ domain: Sağladığınız çevrimiçi hizmetin benzersiz tanımlaması.
+ jurisdiction: Faturaları ödeyen kişinin yaşadığı ülkeyi listeleyin. Bir şirket veya başka bir kuruluş ise, kurulduğu ülkeyi ve uygun şekilde şehri, bölgeyi, yöreyi veya eyaleti listeleyin.
user:
chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki gönderiler genel zaman çizelgelerinde görüntülenir
role: Rol, kullanıcıların sahip olduğu izinleri denetler.
@@ -319,6 +330,17 @@ tr:
name: Etiket
trendable: Bu etiketin gündem altında görünmesine izin ver
usable: Gönderilerin yerelde bu etiketi kullanmasına izin ver
+ terms_of_service:
+ changelog: Ne Değişti?
+ text: Hizmet Şartları
+ terms_of_service_generator:
+ admin_email: Yasal bildirimler için e-posta adresi
+ arbitration_address: Tahkim bildirimleri için fiziksel adres
+ arbitration_website: Tahkim bildirimlerini göndermek için website
+ dmca_address: DMCA/telif hakkı bildirimleri için fiziksel adres
+ dmca_email: DMCA/telif hakkı bildirimleri için e-posta adresi
+ domain: Alan adı
+ jurisdiction: Yasal yetki alanı
user:
role: Rol
time_zone: Zaman dilimi
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 91b35ead32..49f191bcdd 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -319,6 +319,11 @@ uk:
name: Хештеґ
trendable: Дозволити появу цього хештеґа у списку популярних хештеґів
usable: Дозволити дописам використовувати цей хештег локально
+ terms_of_service:
+ changelog: Що змінилося?
+ text: Умови використання
+ terms_of_service_generator:
+ domain: Домен
user:
role: Роль
time_zone: Часовий пояс
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index c04e541f70..6d9a8c749e 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -130,6 +130,17 @@ vi:
show_application: Bạn sẽ luôn có thể xem ứng dụng nào đã đăng tút của mình.
tag:
name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn
+ terms_of_service:
+ changelog: Có thể dùng cú pháp Markdown.
+ text: Có thể dùng cú pháp Markdown.
+ terms_of_service_generator:
+ admin_email: Thông báo pháp lý bao gồm thông báo phản đối, lệnh của tòa án, yêu cầu gỡ bỏ và yêu cầu của cơ quan thực thi pháp luật.
+ arbitration_address: Có thể giống với Địa chỉ liên hệ ở trên hoặc “N/A” nếu sử dụng email
+ arbitration_website: Có thể dùng biểu mẫu online, hoặc “N/A” nếu dùng email
+ dmca_address: Đối với các quản trị viên tại Hoa Kỳ, hãy sử dụng địa chỉ đã đăng ký trong Danh bạ đại lý được chỉ định của DMCA. Danh sách hộp thư bưu điện có sẵn khi yêu cầu trực tiếp, hãy sử dụng Yêu cầu miễn trừ hộp thư bưu điện của đại lý được chỉ định của DMCA để gửi email đến Văn phòng bản quyền và mô tả rằng bạn là người kiểm duyệt nội dung tại nhà, người sợ bị trả thù hoặc trừng phạt vì hành động của mình và cần sử dụng hộp thư bưu điện để xóa địa chỉ nhà của bạn khỏi chế độ xem công khai.
+ dmca_email: Có thể là cùng một email được sử dụng cho “Địa chỉ email để nhận thông báo pháp lý” ở trên
+ domain: Mã nhận dạng duy nhất của dịch vụ trực tuyến mà bạn đang cung cấp.
+ jurisdiction: Liệt kê quốc gia nơi người trả hóa đơn sinh sống. Nếu đó là công ty hoặc tổ chức khác, hãy liệt kê quốc gia nơi công ty được thành lập và thành phố, khu vực, lãnh thổ hoặc tiểu bang nếu phù hợp.
user:
chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ sau
role: Vai trò kiểm soát những quyền mà người dùng có.
@@ -319,6 +330,17 @@ vi:
name: Hashtag
trendable: Cho phép hashtag này lên xu hướng
usable: Cho phép dùng hashtag này khi soạn tút
+ terms_of_service:
+ changelog: Điểm mới?
+ text: Điều khoản Dịch vụ
+ terms_of_service_generator:
+ admin_email: Địa chỉ email để nhận thông báo pháp lý
+ arbitration_address: Địa chỉ thực tế để nhận thông báo trọng tài
+ arbitration_website: Trang web để nộp thông báo trọng tài
+ dmca_address: Địa chỉ liên lạc để nhận thông báo DMCA/bản quyền
+ dmca_email: Địa chỉ email để nhận thông báo DMCA/bản quyền
+ domain: Tên miền
+ jurisdiction: Quyền tài phán pháp lý
user:
role: Vai trò
time_zone: Múi giờ
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index cbbb1556ee..226ebfd0b8 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -130,13 +130,24 @@ zh-CN:
show_application: 无论如何,你始终可以看到是哪个应用发布了你的嘟文。
tag:
name: 你只能改变字母的大小写,让它更易读
+ terms_of_service:
+ changelog: 可以使用 Markdown 语法。
+ text: 可以使用 Markdown 语法。
+ terms_of_service_generator:
+ admin_email: 法务通知包括反通知、法院命令、内容下架要求与执法机关的要求。
+ arbitration_address: 可以与上面的实际地址相同,若使用邮箱,则填写“N/A”
+ arbitration_website: 可以为网页表单,若使用邮箱,则填写“N/A”
+ dmca_address: 如果你是位于美国的运营者,请使用在 DMCA 指定代表名录中注册的地址。如果你需要使用邮政信箱,可以直接申请。请使用 DMCA 指定代表邮政信箱豁免申请表,通过电子邮件联系版权办公室,并声明你是居家内容审核员,因担心审核操作会招致报复或打击报复,需要使用邮政信箱以避免公开家庭住址。
+ dmca_email: 可使用与上方“法务通知接收邮箱地址”相同的邮箱地址。
+ domain: 你所提供的在线服务的唯一标识。
+ jurisdiction: 请列出支付运营费用者所在的国家/地区。如果为公司或其他实体,请列出其注册的国家/地区以及相应的城市、地区、领地或州。
user:
chosen_languages: 仅选中语言的嘟文会出现在公共时间线上(全不选则显示所有语言的嘟文)
role: 角色用于控制用户拥有的权限。
user_role:
color: 在界面各处用于标记该角色的颜色,以十六进制 RGB 格式表示
highlighted: 使角色公开可见
- name: 角色的公开名称,将在设为展示徽章时使用
+ name: 角色的公开名称,将在外显为徽章时使用
permissions_as_keys: 具有此角色的用户将有权访问...
position: 用于在特定情况下处理决策冲突。一些特定操作只能对优先级更低的角色执行
webhook:
@@ -319,14 +330,25 @@ zh-CN:
name: 话题
trendable: 允许在热门下显示此话题
usable: 允许本站嘟文使用此话题
+ terms_of_service:
+ changelog: 变更说明
+ text: 服务条款
+ terms_of_service_generator:
+ admin_email: 接收法务通知的邮箱地址
+ arbitration_address: 仲裁通知的实际送达地址
+ arbitration_website: 仲裁通知的在线提交入口
+ dmca_address: 接收DMCA/版权通知的实际地址
+ dmca_email: 接收DMCA/版权通知的邮箱地址
+ domain: 域名
+ jurisdiction: 法律管辖区
user:
role: 角色
time_zone: 时区
user_role:
color: 徽章颜色
- highlighted: 在用户资料中显示角色徽章
+ highlighted: 在账户页显示角色徽章
name: 名称
- permissions_as_keys: 权限设置
+ permissions_as_keys: 权限
position: 优先级
webhook:
events: 已启用事件
diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml
index c1a3a8d6d9..48a7941f76 100644
--- a/config/locales/simple_form.zh-TW.yml
+++ b/config/locales/simple_form.zh-TW.yml
@@ -130,6 +130,17 @@ zh-TW:
show_application: 將總是顯示您發嘟文之應用程式
tag:
name: 您只能變更大小寫,例如,以使其更易讀。
+ terms_of_service:
+ changelog: 能以 Markdown 語法撰寫。
+ text: 能以 Markdown 語法撰寫。
+ terms_of_service_generator:
+ admin_email: 法律通知包含反駁通知、法院命令、刪除請求和執法單位請求。
+ arbitration_address: 能與上述相同之實體地址,或「N/A」如使用 email
+ arbitration_website: 能為網路表單,或「N/A」如使用 email
+ dmca_address: 位於美國的運營團隊,請使用於 DMCA 指定代理目錄中註冊之地址。可直接請求 PO Box 清單,使用 DMCA 指定代理郵局信箱豁免請求向版權局發送電子郵件,並描述您是一名在家工作之內容管理員,擔心您的行為將遭報復,需要使用 PO Box 保護您的私人住址。
+ dmca_email: 能使用上述用於「法律通知用途電子郵件」之相同電子郵件
+ domain: 您所提供線上服務之唯一識別。
+ jurisdiction: 列出帳單支付人之居住國家。若為公司或其他實體,請列出其註冊地所在的國家,及城市、地區、領土、或州別等。
user:
chosen_languages: 當選取時,只有選取語言之嘟文會於公開時間軸中顯示
role: 角色控制使用者有哪些權限。
@@ -319,6 +330,17 @@ zh-TW:
name: 主題標籤
trendable: 允許此主題標籤於熱門趨勢下顯示
usable: 允許嘟文使用此主題標籤
+ terms_of_service:
+ changelog: 有何異動?
+ text: 服務條款
+ terms_of_service_generator:
+ admin_email: 法律通知用途電子郵件
+ arbitration_address: 仲裁通知之實體地址
+ arbitration_website: 提交仲裁通知之網站
+ dmca_address: DMCA 或版權通知之實體地址
+ dmca_email: DMCA 或版權通知之電子郵件地址
+ domain: 網域
+ jurisdiction: 司法管轄區
user:
role: 角色
time_zone: 時區
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 62d9eba758..72ff7af37f 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -182,11 +182,13 @@ sk:
create_custom_emoji: Vytvor vlastné emotikony
create_domain_allow: Vytvor povolenie pre doménu
create_domain_block: Vytvor zákaz domény
+ create_email_domain_block: Vytvor zákaz emailovej domény
create_ip_block: Vytvor IP pravidlo
create_unavailable_domain: Vytvor nedostupnú doménu
create_user_role: Vytvoriť rolu
demote_user: Zniž užívateľskú rolu
destroy_announcement: Vymaž oboznámenie
+ destroy_canonical_email_block: Zruš blokovanie emailu
destroy_custom_emoji: Vymaž vlastné emotikony
destroy_domain_allow: Zmaž povolenie pre doménu
destroy_domain_block: Zruš blokovanie domény
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index b29808dc14..24aa67e7ae 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -1141,7 +1141,6 @@ sl:
migrate_account: Premakni se na drug račun
migrate_account_html: Če želite ta račun preusmeriti na drugega, ga lahko nastavite tukaj.
or_log_in_with: Ali se prijavite z
- privacy_policy_agreement_html: Prebral_a sem in se strinjam s pravilnikom o zasebnosti.
progress:
confirm: Potrdi e-pošto
details: Vaši podatki
@@ -1166,7 +1165,6 @@ sl:
set_new_password: Nastavi novo geslo
setup:
email_below_hint_html: Poglejte v mapo neželene pošte ali zaprosite za novega. Če ste podali napačen e-naslov, ga lahko popravite.
- email_settings_hint_html: Kliknite povezavo, ki smo vam jo poslali, da overite %{email}. Počakali bomo.
link_not_received: Ali ste prejeli povezavo?
new_confirmation_instructions_sent: Čez nekaj minut boste prejeli novo e-sporočilo s potrditveno povezavo!
title: Preverite svojo dohodno e-pošto
@@ -1175,7 +1173,6 @@ sl:
title: Vpiši se v %{domain}
sign_up:
manual_review: Registracije na %{domain} ročno pregledajo naši moderatorji. Da nam olajšate obdelavo vaše prijave, zapišite kaj o sebi in zakaj si želite račun na %{domain}.
- preamble: Z računom na strežniku Mastodon boste lahko sledili vsem drugim v tem omrežju, ne glede na to, kje gostuje njihov račun.
title: Naj vas namestimo na %{domain}.
status:
account_status: Stanje računa
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index afce58503d..4ac12b67a4 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -214,6 +214,7 @@ sq:
enable_user: Aktivizo Përdorues
memorialize_account: Bëje Llogari Përkujtimore
promote_user: Promovojeni Përdoruesin
+ publish_terms_of_service: Boto Kushte Shërbimi
reject_appeal: Hidheni Poshtë Apelimin
reject_user: Hidhe Poshtë Përdoruesin
remove_avatar_user: Hiqe Avatarin
@@ -278,6 +279,7 @@ sq:
enable_user_html: "%{name} aktivizoi hyrje për përdoruesin %{target}"
memorialize_account_html: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore"
promote_user_html: "%{name} gradoi përdoruesin %{target}"
+ publish_terms_of_service_html: "%{name} botoi përditësime të kushteve të shërbimit"
reject_appeal_html: "%{name} hodhi poshtë apelim vendimi moderimi nga %{target}"
reject_user_html: "%{name} hodhi poshtë regjistrimin nga %{target}"
remove_avatar_user_html: "%{name} hoqi avatarin e %{target}"
@@ -920,6 +922,35 @@ sq:
search: Kërkim
title: Hashtag-ë
updated_msg: Rregullimet për hashtag-ët u përditësuan me sukses
+ terms_of_service:
+ back: Mbrapsht te kushte shërbimi
+ changelog: Ç’ka ndryshuar
+ create: Përdorni tuajat
+ current: Të tanishmet
+ draft: Skicë
+ generate: Përdorni gjedhe
+ generates:
+ action: Prodhoji
+ chance_to_review_html: "Termat e shërbimit të prodhuar s’do të botohen automatikisht. Do të keni një mundësi të shqyrtoni përfundimet. Ju lutemi, që të vazhdohet, plotësoni hollësitë e nevojshme."
+ explanation_html: Gjedhja e dhënë për kushtet e shërbimit është vetëm për qëllime njohjeje dhe s’duhet marrë si këshillë ligjore, për çfarëdo çështje. Ju lutemi, për situatën tuaj dhe pyetje specifike ligjore, lidhuni me juristin tuaj.
+ title: Ujdisje Termash Shërbimi
+ history: Historik
+ live: Drejtpërdrejt
+ no_history: Ende s’ka ndryshime të regjistruara të kushteve të shërbimit.
+ no_terms_of_service_html: Aktualisht s’keni të formësuar terma shërbimit. Termat e shërbimit janë menduar të japin qartësi dhe t’ju mbrojnë nga penalitete potenciale në çështje gjyqësore me përdoruesit tuaj.
+ notified_on_html: Përdoruesi u njoftuan më %{date}
+ notify_users: Njoftoji përdoruesit
+ preview:
+ explanation_html: 'Email-i do t’u dërgohet %{display_count} përdoruesve që janë regjistruar para %{date}. Te email-i do të përfshihet teksti vijues:'
+ send_preview: Dërgo paraparje te %{email}
+ send_to_all:
+ one: Dërgo %{display_count} email
+ other: Dërgo %{display_count} email-e
+ title: Bëni paraparje të njoftimit të shërbimt
+ publish: Botoje
+ published_on_html: Botuar më %{date}
+ save_draft: Ruaje skicën
+ title: Kushte Shërbimi
title: Administrim
trends:
allow: Lejojeni
@@ -1126,7 +1157,6 @@ sq:
migrate_account: Kaloni në një tjetër llogari
migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund ta formësoni këtu.
or_log_in_with: Ose bëni hyrjen me
- privacy_policy_agreement_html: I kam lexuar dhe pajtohem me rregullat e privatësisë
progress:
confirm: Ripohoni email-in
details: Hollësitë tuaja
@@ -1151,7 +1181,7 @@ sq:
set_new_password: Caktoni fjalëkalim të ri
setup:
email_below_hint_html: Shihni te dosja juaj e të padëshiruarve, ose kërkoni një tjetër. Mundeni të saktësoni adresën tuaj email, nëse është gabim.
- email_settings_hint_html: Që të verifikoni %{email}, klikoni lidhjen që ju dërguam. Do të presim këtu.
+ email_settings_hint_html: Që të filloni të përdorni Mastodon-in, klikoni mbi lidhjen që dërguam te%{email}. Do të presim këtu.
link_not_received: S’morët lidhje?
new_confirmation_instructions_sent: Brenda pak mintuash do të merrni një email të ri me lidhjen e ripohimit!
title: Shihni te email-et tuaj
@@ -1160,7 +1190,7 @@ sq:
title: Bëni hyrjen te %{domain}
sign_up:
manual_review: Regjistrimet te %{domain} kalojnë një shqyrtim dorazi nga moderatorët tanë. Që të na ndihmoni të përfundojmë regjistrimin tuaj, na shkruani pakëz mbi veten dhe pse doni një llogari në %{domain}.
- preamble: Me një llogari në këtë shërbyes Mastodon, do të jeni në gjendje të ndiqni cilindo person tjetër në rrjet, pavarësisht se ku strehohet llogaria e tyre.
+ preamble: Me një llogari te ky shërbyes Mastodon do të jeni në gjendje të ndiqni cilindo person në fedivers, pavarësisht se ku strehohet llogaria e tij.
title: Le të ujdisim llogarinë tuaj në %{domain}.
status:
account_status: Gjendje llogarie
@@ -1172,6 +1202,7 @@ sq:
view_strikes: Shihni paralajmërime të dikurshme kundër llogarisë tuaj
too_fast: Formulari u parashtrua shumë shpejt, riprovoni.
use_security_key: Përdor kyç sigurie
+ user_agreement_html: I kam lexuar dhe pajtohen me kushtet e shërbimit dhe rregullat e privatësisë
author_attribution:
example_title: Tekst shembull
hint_html: Shkruani lajme, apo artikuj blogu jashtë Mastodon-it? Kontrolloni se si ju jepet hakë, kur ndahen me të tjerët në Mastodon.
@@ -1833,6 +1864,8 @@ sq:
too_late: Është shumë vonë për apelim të këtij paralajmërimi
tags:
does_not_match_previous_name: s’përputhet me emrin e mëparshëm
+ terms_of_service:
+ title: Kushte Shërbimi
themes:
contrast: Mastodon (Me shumë kontrast)
default: Mastodon (I errët)
@@ -1893,6 +1926,15 @@ sq:
further_actions_html: Nëse s’ishit ju, këshillojmë të %{action} menjëherë dhe të aktivizoni mirëfilltësim dyfaktorësh, për ta mbajtur llogarinë tuaj të sigurt.
subject: Llogaria juaj është përdorur që nga një adresë e re IP
title: Hyrje e re
+ terms_of_service_changed:
+ agreement: Duke vazhduar të përdorni %{domain}, pajtoheni më këto terma. Nëse s’pajtoheni me termat e përditësuar, mund të përfundoni pajtimin tuaj me %{domain} në çfarëdo kohe, përmes fshirjes së llogarisë tuaj.
+ changelog: 'Me një vështrim, ja se ç’do të thotë ky përditësim për ju:'
+ description: 'Po e merrni këtë email ngaqë po bëjmë disa ndryshime te kushtet tona të shërbimit në %{domain}. Ju nxisim të shqyrtoni termat e përditësuar të plotë këtu:'
+ description_html: Po e merrni këtë email ngaqë po bëjmë disa ndryshime në kushtet tona të shërbimit te %{domain}. Ju nxisim të shqyrtoni termat e përditësuar të plotë këtu.
+ sign_off: Ekipi i %{domain}
+ subject: Përditësime të termave tanë të shërbimit
+ subtitle: Termat e shërbimit të %{domain} po ndryshojnë
+ title: Përditësim i rëndësishëm
warning:
appeal: Parashtroni një apelim
appeal_description: Nëse besoni se është gabim, mund t’i parashtroni një apelim stafit të %{instance}.
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 37c531b207..700e588550 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -1060,7 +1060,6 @@ sr-Latn:
migrate_account: Premeštanje u drugi nalog
migrate_account_html: Ako želite da preusmerite ovaj nalog na neki drugi, možete to podesiti ovde.
or_log_in_with: Ili se prijavite sa
- privacy_policy_agreement_html: Pročitao/-la sam i saglasan/-a sam sa politikom privatnosti
progress:
details: Vaši detalji
review: Naš pregled
@@ -1083,7 +1082,6 @@ sr-Latn:
security: Bezbednost
set_new_password: Postavi novu lozinku
setup:
- email_settings_hint_html: Kliknite na vezu koji smo vam poslali da verifikujete %{email}. Čekaćemo ovde.
link_not_received: Niste dobili vezu?
title: Proverite svoje prijemno sanduče
sign_in:
@@ -1091,7 +1089,6 @@ sr-Latn:
title: Prijavite se na %{domain}
sign_up:
manual_review: Naši moderatori ručno pregledaju registracije na %{domain}. Da biste nam pomogli da obradimo vašu registraciju, napišite nešto o sebi i zašto želite nalog na %{domain}.
- preamble: Sa nalogom na ovom Mastodon serveru, moći ćete da pratite bilo koga sa mreže, bez obzira na to na kom serveru se njegov/njen nalog nalazi.
title: Hajde da Vam namestimo nalog na %{domain}.
status:
account_status: Status naloga
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 7a8469d645..28abe3b46e 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -1090,7 +1090,6 @@ sr:
migrate_account: Премештање у други налог
migrate_account_html: Ако желите да преусмерите овај налог на неки други, можете то подесити овде.
or_log_in_with: Или се пријавите са
- privacy_policy_agreement_html: Прочитао/-ла сам и сагласан/-а сам са политиком приватности
progress:
details: Ваши детаљи
review: Наш преглед
@@ -1113,7 +1112,6 @@ sr:
security: Безбедност
set_new_password: Постави нову лозинку
setup:
- email_settings_hint_html: Кликните на везу који смо вам послали да верификујете %{email}. Чекаћемо овде.
link_not_received: Нисте добили везу?
title: Проверите своје пријемно сандуче
sign_in:
@@ -1121,7 +1119,6 @@ sr:
title: Пријавите се на %{domain}
sign_up:
manual_review: Наши модератори ручно прегледају регистрације на %{domain}. Да бисте нам помогли да обрадимо вашу регистрацију, напишите нешто о себи и зашто желите налог на %{domain}.
- preamble: Са налогом на овом Mastodon серверу, моћи ћете да пратите било кога са мреже, без обзира на то на ком серверу се његов/њен налог налази.
title: Хајде да Вам наместимо налог на %{domain}.
status:
account_status: Статус налога
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 8d4aa7f7da..0eee797fec 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -1132,7 +1132,6 @@ sv:
migrate_account: Flytta till ett annat konto
migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du konfigurera det här.
or_log_in_with: Eller logga in med
- privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn
progress:
confirm: Bekräfta e-postadress
details: Dina uppgifter
@@ -1157,7 +1156,6 @@ sv:
set_new_password: Skriv in nytt lösenord
setup:
email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel.
- email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här.
link_not_received: Fick du ingen länk?
new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter!
title: Kolla din inkorg
@@ -1166,7 +1164,6 @@ sv:
title: Logga in på %{domain}
sign_up:
manual_review: Registreringar på %{domain} går igenom manuell granskning av våra moderatorer. För att hjälpa oss att hantera din registrering, skriv lite om dig själv och varför du vill ha ett konto på %{domain}.
- preamble: Med ett konto på denna Mastodon-server kan du följa alla andra personer på nätverket, oavsett vilken server deras konto tillhör.
title: Låt oss få igång dig på %{domain}.
status:
account_status: Kontostatus
@@ -1838,6 +1835,8 @@ sv:
too_late: Det är för sent att överklaga denna strejk
tags:
does_not_match_previous_name: matchar inte det föregående namnet
+ terms_of_service:
+ title: Användarvillkor
themes:
contrast: Mastodon (Hög kontrast)
default: Mastodon (Mörk)
diff --git a/config/locales/th.yml b/config/locales/th.yml
index d0590d19ef..4f0a6e98bd 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1114,7 +1114,6 @@ th:
migrate_account: ย้ายไปยังบัญชีอื่น
migrate_account_html: หากคุณต้องการเปลี่ยนเส้นทางบัญชีนี้ไปยังบัญชีอื่น คุณสามารถ กำหนดค่าบัญชีที่นี่
or_log_in_with: หรือเข้าสู่ระบบด้วย
- privacy_policy_agreement_html: ฉันได้อ่านและเห็นด้วยกับ นโยบายความเป็นส่วนตัว
progress:
confirm: ยืนยันอีเมล
details: รายละเอียดของคุณ
@@ -1139,7 +1138,6 @@ th:
set_new_password: ตั้งรหัสผ่านใหม่
setup:
email_below_hint_html: ตรวจสอบโฟลเดอร์สแปมของคุณ หรือขออีเมลอื่น คุณสามารถแก้ไขที่อยู่อีเมลของคุณหากที่อยู่อีเมลผิด
- email_settings_hint_html: คลิกลิงก์ที่เราส่งถึงคุณเพื่อยืนยัน %{email} เราจะรออยู่ตรงนี้
link_not_received: ไม่ได้รับลิงก์?
new_confirmation_instructions_sent: คุณจะได้รับอีเมลใหม่พร้อมลิงก์การยืนยันในไม่กี่นาที!
title: ตรวจสอบกล่องขาเข้าของคุณ
@@ -1148,7 +1146,6 @@ th:
title: เข้าสู่ระบบ %{domain}
sign_up:
manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้กลั่นกรองของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain}
- preamble: ด้วยบัญชีในเซิร์ฟเวอร์ Mastodon นี้ คุณจะสามารถติดตามบุคคลอื่นใดในเครือข่าย โดยไม่คำนึงถึงที่ซึ่งบัญชีของเขาได้รับการโฮสต์
title: มาตั้งค่าของคุณใน %{domain} กันเลย
status:
account_status: สถานะบัญชี
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 18e8dd1338..7c4840be60 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -214,6 +214,7 @@ tr:
enable_user: Kullanıcıyı Etkinleştir
memorialize_account: Hesabı Anıtlaştır
promote_user: Kullanıcıyı Yükselt
+ publish_terms_of_service: Hizmet Şartlarını Yayınla
reject_appeal: İtirazı Reddet
reject_user: Kullanıcıyı Reddet
remove_avatar_user: Profil Resmini Kaldır
@@ -278,6 +279,7 @@ tr:
enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi"
memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü"
promote_user_html: "%{name}, %{target} kullanıcısını yükseltti"
+ publish_terms_of_service_html: "%{name} hizmet şartları güncellemelerini yayınladı"
reject_appeal_html: "%{name}, %{target} kullanıcısının yönetim kararına itirazını reddetti"
reject_user_html: "%{name}, %{target} konumundan kaydı reddetti"
remove_avatar_user_html: "%{name}, %{target} kullanıcısının avatarını kaldırdı"
@@ -925,6 +927,32 @@ tr:
search: Ara
title: Etiketler
updated_msg: Etiket ayarları başarıyla güncellendi
+ terms_of_service:
+ back: Hizmet şartlarına dön
+ changelog: Ne Değişti
+ create: Kendinizinkini kullanın
+ current: Şimdiki
+ draft: Taslak
+ generate: Şablon kullan
+ generates:
+ action: Oluştur
+ chance_to_review_html: "Üretilmiş hizmet şartları otomatik olarak yayınlanmayacaktır. Sonucu gözden geçirme şansınız olacaktır. Devam etmek için lütfen gerekli ayrıntıları doldurun."
+ explanation_html: Sağlanan hizmet şartları şablonu yalnızca bilgilendirme amaçlıdır ve herhangi bir konuda yasal tavsiye olarak yorumlanmamalıdır. Lütfen durumunuz ve belirli yasal sorularınız hakkında kendi hukuk müşavirinize danışın.
+ title: Hizmet Şartları Kurulumu
+ history: Tarihçe
+ live: Canlı
+ no_history: Henüz kaydedilmiş hizmet şartları değişikliği yok.
+ no_terms_of_service_html: Şu anda yapılandırılmış herhangi bir hizmet şartınız yok. Hizmet şartları, kullanıcılarınızla olan anlaşmazlıklarda netlik sağlamak ve sizi olası yükümlülüklerden korumak içindir.
+ notified_on_html: Kullanıcılar %{date} tarihinde bilgilendirildi
+ notify_users: Kullanıcılara bildir
+ preview:
+ explanation_html: 'E-posta, %{date} tarihinden önce kaydolan %{display_count} kullanıcıya gönderilecektir. E-posta içerisinde aşağıdaki metin yer alacaktır:'
+ send_preview: Ön izlemeyi %{email} adresine gönder
+ title: Hizmet şartları bildirimini öz izle
+ publish: Yayınla
+ published_on_html: "%{date} tarihinde yayınlandı"
+ save_draft: Taslağı kaydet
+ title: Hizmet Şartları
title: Yönetim
trends:
allow: İzin ver
@@ -1132,7 +1160,6 @@ tr:
migrate_account: Farklı bir hesaba taşıyın
migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsan, buradan yapılandırabilirsin.
or_log_in_with: 'Veya şununla oturum açın:'
- privacy_policy_agreement_html: Gizlilik politikasını okudum ve kabul ettim
progress:
confirm: E-postanızı onaylayın
details: Ayrıntılarınız
@@ -1157,7 +1184,7 @@ tr:
set_new_password: Yeni parola belirle
setup:
email_below_hint_html: İstenmeyenler dizininize bakın veya başka bir onay bağlantısı isteyin. Eğer yanlışsa e-posta adresinizi de düzeltebilirsiniz.
- email_settings_hint_html: "%{email} adresinizi doğrulamak için size gönderdiğimiz bağlantıya tıklayın. Biz burada bekliyoruz."
+ email_settings_hint_html: Mastodon kullanmaya başlamak %{email} adresine gönderdiğimiz bağlantıya tıklayın. Sizi burada bekliyoruz.
link_not_received: Bağlantı gelmedi mi?
new_confirmation_instructions_sent: Birkaç dakika içerisinde onaylama bağlantısını içeren yeni bir e-posta alacaksınız!
title: Gelen kutunuzu kontrol edin
@@ -1166,7 +1193,7 @@ tr:
title: "%{domain} giriş yapın"
sign_up:
manual_review: "%{domain} kayıtları moderatörler tarafından manuel olarak inceleniyor. Kaydınızı işlememizi kolaylaştırmak için kendiniz ve %{domain} sunucusundan neden hesap istediğiniz hakkında biraz bilgi verin."
- preamble: Bu Mastodon sunucusu üzerinden bir hesap ile ağdaki herhangi bir kişiyi, hesabı hangi sunucuda saklanırsa saklansın, takip edebilirsiniz.
+ preamble: Bu Mastodon sunucusu üzerinden bir hesap ile fediverseteki herhangi bir kişiyi, hangi sunucuda olursa olsun, takip edebilirsiniz.
title: "%{domain} için kurulumunuzu yapalım."
status:
account_status: Hesap durumu
@@ -1178,6 +1205,7 @@ tr:
view_strikes: Hesabınıza yönelik eski eylemleri görüntüleyin
too_fast: Form çok hızlı gönderildi, tekrar deneyin.
use_security_key: Güvenlik anahtarını kullan
+ user_agreement_html: hizmet şartları ve gizlilik politikasını okudum ve kabul ediyorum
author_attribution:
example_title: Örnek metin
hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin.
@@ -1839,6 +1867,8 @@ tr:
too_late: Bu eyleme itiraz etmek için çok geç
tags:
does_not_match_previous_name: önceki adla eşleşmiyor
+ terms_of_service:
+ title: Hizmet Şartları
themes:
contrast: Mastodon (Yüksek karşıtlık)
default: Mastodon (Karanlık)
@@ -1899,6 +1929,15 @@ tr:
further_actions_html: Eğer oturum açan siz değildiyseniz, hesabınızı güvenli tutmanız için hemen %{action} yapmanızı ve iki aşamalı yetkilendirmeyi etkinleştirmenizi öneriyoruz.
subject: Hesabınıza yeni bir IP adresinden erişim oldu
title: Yeni bir oturum açma
+ terms_of_service_changed:
+ agreement: "%{domain} sunucusunu kullanmaya devam ederek bu şartları kabul etmiş olursunuz. Güncellenen şartları kabul etmiyorsanız, %{domain} ile olan sözleşmenizi istediğiniz zaman hesabınızı silerek feshedebilirsiniz."
+ changelog: 'Bir bakışta, bu güncellemenin sizin için anlamı şudur:'
+ description: 'Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Aşağıda tümü yer alan güncellenen şartları incelemenizi öneriyoruz:'
+ description_html: Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Tüm güncellenen şartları buraya tıklayarak incelemenizi öneririz.
+ sign_off: "%{domain} Ekibi"
+ subject: Şimdiki hizmet şartlarımıza güncellemeler
+ subtitle: "%{domain} adresindeki hizmet şartları değişiyor"
+ title: Önemli güncelleme
warning:
appeal: Bir itiraz gönder
appeal_description: Bunun bir hata olduğunu düşünüyorsanız, %{instance} sunucusunun personeline bir itiraz gönderebilirsiniz.
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 40127b8917..0478ce6d3b 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -1153,7 +1153,6 @@ uk:
migrate_account: Переїхати на інший обліковий запис
migrate_account_html: Якщо ви бажаєте переспрямувати цей обліковий запис на інший, ви можете налаштувати це тут.
or_log_in_with: Або увійдіть з
- privacy_policy_agreement_html: Мною прочитано і я погоджуюся з політикою приватності
progress:
confirm: Підтвердити електронну адресу
details: Ваші дані
@@ -1178,7 +1177,7 @@ uk:
set_new_password: Встановити новий пароль
setup:
email_below_hint_html: Перевірте теку "Спам", або зробіть ще один запит. Ви можете виправити свою електронну адресу, якщо вона неправильна.
- email_settings_hint_html: Натисніть на посилання, яке ми надіслали вам, щоб підтвердити %{email}. Ми чекатимемо прямо тут.
+ email_settings_hint_html: Натисніть посилання, надіслане на %{email} щоб почати використання Mastodon. Ми чекатимемо тут.
link_not_received: Не отримали посилання?
new_confirmation_instructions_sent: Ви отримаєте новий лист із посиланням для підтвердження протягом кількох хвилин!
title: Перевірте вашу поштову скриньку
@@ -1187,7 +1186,6 @@ uk:
title: Увійти до %{domain}
sign_up:
manual_review: Реєстрація на %{domain} проходить через ручний розгляд нашими модераторами. Щоб допомогти нам завершити вашу реєстрацію, напишіть трохи про себе і чому ви хочете зареєструватися на %{domain}.
- preamble: За допомогою облікового запису на цьому сервері Mastodon, ви зможете слідкувати за будь-якою іншою людиною в мережі, не зважаючи на те, де розміщений обліковий запис.
title: Налаштуймо вас на %{domain}.
status:
account_status: Стан облікового запису
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index b226c44701..33c743188d 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -211,6 +211,7 @@ vi:
enable_user: Cho phép đăng nhập
memorialize_account: Gán tưởng niệm
promote_user: Nâng vai trò
+ publish_terms_of_service: Đăng Điều khoản Dịch vụ
reject_appeal: Từ chối khiếu nại
reject_user: Từ chối đăng ký
remove_avatar_user: Xóa ảnh đại diện
@@ -275,6 +276,7 @@ vi:
enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}"
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
promote_user_html: "%{name} đã nâng vai trò của %{target}"
+ publish_terms_of_service_html: "%{name} đã cập nhật điều khoản dịch vụ"
reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}"
reject_user_html: "%{name} đã từ chối đăng ký từ %{target}"
remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}"
@@ -911,6 +913,34 @@ vi:
search: Tìm kiếm
title: Hashtag
updated_msg: Hashtag đã được cập nhật thành công
+ terms_of_service:
+ back: Trở về điều khoản dịch vụ
+ changelog: Điểm mới
+ create: Dùng của bạn
+ current: Hiện tại
+ draft: Bản nháp
+ generate: Dùng mẫu
+ generates:
+ action: Tạo
+ chance_to_review_html: "Các điều khoản dịch vụ đã tạo sẽ không được tự động công bố. Bạn sẽ cần xem lại trước. Vui lòng điền thông tin cần thiết để tiếp tục."
+ explanation_html: Mẫu điều khoản dịch vụ được cung cấp chỉ nhằm mục đích cung cấp thông tin và không được hiểu là tư vấn pháp lý về bất kỳ vấn đề nào. Vui lòng tham khảo ý kiến cố vấn pháp lý của riêng bạn về tình huống của bạn và các câu hỏi pháp lý cụ thể mà bạn có.
+ title: Thiết lập Điều khoản Dịch vụ
+ history: Lịch sử
+ live: Đang hiển thị
+ no_history: Hiện tại chưa có ghi nhận thay đổi nào về các điều khoản dịch vụ.
+ no_terms_of_service_html: Hiện tại bạn chưa cấu hình bất kỳ điều khoản dịch vụ nào. Điều khoản dịch vụ nhằm mục đích cung cấp sự rõ ràng và bảo vệ bạn khỏi các trách nhiệm pháp lý tiềm ẩn trong các tranh chấp với người dùng của bạn.
+ notified_on_html: Đã thông báo tới thành viên vào %{date}
+ notify_users: Thông báo tới thành viên
+ preview:
+ explanation_html: 'Gửi email tới %{display_count} thành viên đã đăng ký trước %{date}. Nội dung sau đây sẽ được đưa vào email:'
+ send_preview: Gửi bản xem thử tới %{email}
+ send_to_all:
+ other: Gửi tới %{display_count} email
+ title: Xem trước thông báo về điều khoản dịch vụ
+ publish: Đăng
+ published_on_html: Đăng vào %{date}
+ save_draft: Lưu bản nháp
+ title: Điều khoản Dịch vụ
title: Quản trị
trends:
allow: Cho phép
@@ -1114,7 +1144,6 @@ vi:
migrate_account: Chuyển sang tài khoản khác
migrate_account_html: Nếu bạn muốn bỏ tài khoản này để dùng một tài khoản khác, bạn có thể thiết lập tại đây.
or_log_in_with: Hoặc đăng nhập bằng
- privacy_policy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật
progress:
confirm: Xác nhận email
details: Điền thông tin
@@ -1139,7 +1168,7 @@ vi:
set_new_password: Đặt mật khẩu mới
setup:
email_below_hint_html: Kiểm tra hộp thư rác hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai.
- email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn.
+ email_settings_hint_html: Nhấn vào link được gửi đến %{email} để bắt đầu dùng Mastodon. Chúng tôi đợi bạn.
link_not_received: Không nhận được mã?
new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác minh sau vài phút!
title: Kiểm tra email của bạn
@@ -1148,7 +1177,7 @@ vi:
title: Đăng nhập %{domain}
sign_up:
manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}."
- preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào thuộc các máy chủ khác.
+ preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu.
title: Đang đăng ký trên %{domain}.
status:
account_status: Trạng thái tài khoản
@@ -1160,6 +1189,7 @@ vi:
view_strikes: Xem những lần cảnh cáo cũ
too_fast: Nghi vấn đăng ký spam, xin thử lại.
use_security_key: Dùng khóa bảo mật
+ user_agreement_html: Tôi đã đọc và đồng ý với điều khoản dịch vụ và chính sách bảo mật
author_attribution:
example_title: Văn bản mẫu
hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon.
@@ -1797,6 +1827,8 @@ vi:
too_late: Đã quá trễ để khiếu nại
tags:
does_not_match_previous_name: không khớp với tên trước
+ terms_of_service:
+ title: Điều khoản Dịch vụ
themes:
contrast: Mastodon (Tương phản)
default: Mastodon (Tối)
@@ -1857,6 +1889,15 @@ vi:
further_actions_html: Nếu đây không phải là bạn, hãy %{action} lập tức và bật xác minh hai bước để giữ tài khoản được an toàn.
subject: Đăng nhập tài khoản từ địa chỉ IP mới
title: Lần đăng nhập mới
+ terms_of_service_changed:
+ agreement: Tiếp tục sử dụng %{domain}, đồng nghĩa bạn đồng ý điều khoản dịch vụ. Nếu bạn không đồng ý với các điều khoản đã cập nhật, hãy xóa tài khoản %{domain} của bạn.
+ changelog: 'Nhìn sơ qua, bản cập nhật này:'
+ description: 'Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản đã cập nhật tại đây:'
+ description_html: Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản được cập nhật ở đây.
+ sign_off: Đội ngũ %{domain}
+ subject: Cập nhật điều khoản dịch vụ
+ subtitle: Điều khoản dịch vụ tại %{domain} đã thay đổi
+ title: Cập nhật quan trọng
warning:
appeal: Gửi khiếu nại
appeal_description: Nếu bạn nghĩ đây chỉ là nhầm lẫn, hãy gửi một khiếu nại cho %{instance}.
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 7ce3eab939..2249875b6d 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -102,7 +102,7 @@ zh-CN:
most_recent_ip: 最后活跃IP
no_account_selected: 因为没有选中任何账号,所以没有更改
no_limits_imposed: 无限制
- no_role_assigned: 未定角色
+ no_role_assigned: 未指派角色
not_subscribed: 未订阅
pending: 待审核
perform_full_suspension: 封禁
@@ -199,7 +199,7 @@ zh-CN:
destroy_relay: 删除中继站
destroy_status: 删除嘟文
destroy_unavailable_domain: 删除不可用域名
- destroy_user_role: 销毁角色
+ destroy_user_role: 删除角色
disable_2fa_user: 停用双因素认证
disable_custom_emoji: 禁用自定义表情符号
disable_relay: 禁用中继站
@@ -211,6 +211,7 @@ zh-CN:
enable_user: 启用用户
memorialize_account: 设为追悼账户
promote_user: 指派管理员
+ publish_terms_of_service: 发布服务条款
reject_appeal: 驳回申诉
reject_user: 拒绝用户
remove_avatar_user: 移除头像
@@ -250,7 +251,7 @@ zh-CN:
create_ip_block_html: "%{name} 为 IP %{target} 创建了规则"
create_relay_html: "%{name} 添加了中继站 %{target}"
create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
- create_user_role_html: "%{name} 创建了 %{target} 角色"
+ create_user_role_html: "%{name} 创建了角色 %{target}"
demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限"
destroy_announcement_html: "%{name} 删除了公告 %{target}"
destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址"
@@ -263,7 +264,7 @@ zh-CN:
destroy_relay_html: "%{name} 删除了中继站 %{target}"
destroy_status_html: "%{name} 删除了 %{target} 的嘟文"
destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递"
- destroy_user_role_html: "%{name} 删除了 %{target} 角色"
+ destroy_user_role_html: "%{name} 删除了角色 %{target}"
disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证"
disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}"
disable_relay_html: "%{name} 停用了中继站 %{target}"
@@ -275,6 +276,7 @@ zh-CN:
enable_user_html: "%{name} 将用户 %{target} 设置为允许登录"
memorialize_account_html: "%{name} 将 %{target} 设置为追悼账户"
promote_user_html: "%{name} 将用户 %{target} 设为管理员"
+ publish_terms_of_service_html: "%{name} 更新了服务条款"
reject_appeal_html: "%{name} 驳回了 %{target} 对审核结果的申诉"
reject_user_html: "%{name} 拒绝了用户 %{target} 的注册"
remove_avatar_user_html: "%{name} 删除了 %{target} 的头像"
@@ -296,7 +298,7 @@ zh-CN:
update_ip_block_html: "%{name} 修改了对 IP %{target} 的规则"
update_report_html: "%{name} 更新了举报 %{target}"
update_status_html: "%{name} 刷新了 %{target} 的嘟文"
- update_user_role_html: "%{name} 更改了 %{target} 角色"
+ update_user_role_html: "%{name} 更改了角色 %{target}"
deleted_account: 账号已注销
empty: 没有找到日志
filter_by_action: 根据操作筛选
@@ -677,61 +679,61 @@ zh-CN:
roles:
add_new: 添加角色
assigned_users:
- other: "%{count} 用户"
+ other: "%{count} 名用户"
categories:
administration: 管理
devops: 开发运维
invites: 邀请
- moderation: 监察
+ moderation: 审核
special: 特殊
delete: 刪除
- description_html: 使用 用户角色,你可以自定义你的用户可以访问的功能和区域。
- edit: 编辑 '%{name}' 角色
+ description_html: 使用 用户角色,你可以自定义你的用户可以访问的 Mastodon 功能和区域。
+ edit: 编辑角色 '%{name}'
everyone: 默认权限
- everyone_full_description_html: 这是影响到 所有用户的基础角色,包括未指定角色的用户。 其他所有的角色都继承着它的权限。
+ everyone_full_description_html: 该角色是基础角色,会影响所有用户,包括未指定角色的用户。 其他所有的角色都继承该角色的权限。
permissions_count:
- other: "%{count} 权限"
+ other: "%{count} 个权限"
privileges:
administrator: 管理员
- administrator_description: 拥有此权限的用户将绕过每个权限
+ administrator_description: 拥有此权限的用户将绕过所有权限限制。
delete_user_data: 删除用户数据
delete_user_data_description: 允许用户立即删除其他用户的数据
invite_users: 邀请用户
- invite_users_description: 允许用户邀请新人加入服务器
+ invite_users_description: 允许用户邀请新人加入站点
manage_announcements: 管理公告
- manage_announcements_description: 允许用户管理服务器上的通知
+ manage_announcements_description: 允许用户管理站点上的公告
manage_appeals: 管理申诉
- manage_appeals_description: 允许用户审阅针对管理操作的申诉
- manage_blocks: 管理地址段
- manage_blocks_description: 允许用户屏蔽邮箱提供商和IP地址
+ manage_appeals_description: 允许用户复核针对管理操作的申诉
+ manage_blocks: 管理地址屏蔽列表
+ manage_blocks_description: 允许用户屏蔽邮箱域名与IP地址
manage_custom_emojis: 管理自定义表情
- manage_custom_emojis_description: 允许用户管理服务器上的自定义表情
+ manage_custom_emojis_description: 允许用户管理站点上的自定义表情
manage_federation: 管理联合
manage_federation_description: 允许用户禁止或允许本站同其他站点的联合,并控制消息投递能力
manage_invites: 管理邀请
- manage_invites_description: 允许用户浏览和停用邀请链接
+ manage_invites_description: 允许用户浏览与停用邀请链接
manage_reports: 管理举报
manage_reports_description: 允许用户审核举报并执行管理操作
manage_roles: 管理角色
- manage_roles_description: 允许用户管理和分配比他们权限低的角色
+ manage_roles_description: 允许用户管理与指派比自己权限低的角色
manage_rules: 管理规则
- manage_rules_description: 允许用户更改服务器规则
+ manage_rules_description: 允许用户修改站点规则
manage_settings: 管理设置
manage_settings_description: 允许用户更改站点设置
- manage_taxonomies: 管理分类
- manage_taxonomies_description: 允许用户查看热门内容并更新标签设置
- manage_user_access: 管理访问
- manage_user_access_description: 允许用户禁用其它用户的双因素身份验证,更改他们的邮箱地址,以及重置他们的密码。
+ manage_taxonomies: 管理热门与话题
+ manage_taxonomies_description: 允许用户审核热门内容并更新话题设置
+ manage_user_access: 管理用户身份验证信息
+ manage_user_access_description: 允许用户允许用户为其他用户关闭双因素身份验证、修改邮箱并重置密码。
manage_users: 管理用户
manage_users_description: 允许用户查看其他用户的信息并执行管理操作
manage_webhooks: 管理 Webhooks
manage_webhooks_description: 允许用户为管理事件配置 Webhook
view_audit_log: 查看审核日志
- view_audit_log_description: 允许用户查看此服务器上的管理操作记录
- view_dashboard: 查看仪表板
- view_dashboard_description: 允许用户访问仪表盘和各种指标
+ view_audit_log_description: 允许用户查看此站点上的管理操作记录
+ view_dashboard: 查看信息面板
+ view_dashboard_description: 允许用户访问信息面板和各种指标
view_devops: 开发运维
- view_devops_description: 允许用户访问 Sidekiq 和 pgHero 仪表板
+ view_devops_description: 允许用户访问 Sidekiq 和 pgHero 控制面板
title: 角色
rules:
add_new: 添加规则
@@ -911,6 +913,34 @@ zh-CN:
search: 搜索
title: 话题
updated_msg: 话题设置更新成功
+ terms_of_service:
+ back: 返回服务条款页
+ changelog: 变更说明
+ create: 自定义
+ current: 当前版本
+ draft: 草稿
+ generate: 使用模板
+ generates:
+ action: 生成
+ chance_to_review_html: "服务条款生成后不会自动发布。你可以审核生成的草稿,填写必要的信息后继续操作。"
+ explanation_html: 此服务条款模板仅供参考,不构成法律意见。如有任何法律问题,请咨询法律顾问。
+ title: 设置服务条款
+ history: 历史记录
+ live: 生效中
+ no_history: 尚无服务条款变更记录。
+ no_terms_of_service_html: 你还没有设置任何服务条款。设置服务条款可以清晰地界定责任,并在与用户发生争议时有效保护您的权益。
+ notified_on_html: 已于 %{date} 通知用户
+ notify_users: 通知用户
+ preview:
+ explanation_html: 即将向在 %{date} 注册之前的 %{display_count} 名用户发送邮件。下述文本将会包含在邮件中:
+ send_preview: 向 %{email} 发送预览
+ send_to_all:
+ other: 发送 %{display_count} 封邮件
+ title: 服务条款变更通知预览
+ publish: 发布
+ published_on_html: 发表于 %{date}
+ save_draft: 保存草稿
+ title: 服务条款
title: 管理
trends:
allow: 允许
@@ -1114,7 +1144,6 @@ zh-CN:
migrate_account: 迁移到另一个账户
migrate_account_html: 如果你希望引导他人关注另一个账号,请点击这里进行设置。
or_log_in_with: 或通过外部服务登录
- privacy_policy_agreement_html: 我已阅读并同意 隐私政策
progress:
confirm: 确认邮箱
details: 你的详细信息
@@ -1139,7 +1168,7 @@ zh-CN:
set_new_password: 设置新密码
setup:
email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求重新发送邮件。如果你填写的邮箱地址有误,请更正。
- email_settings_hint_html: 请点击我们发送给 %{email} 地址中的确认链接。我在这儿等着你。
+ email_settings_hint_html: 点击发送到 %{email} 的链接,即可开始使用 Mastodon。
link_not_received: 没有收到链接?
new_confirmation_instructions_sent: 你将在几分钟内收到一封带有确认链接的新邮件!
title: 请检查你的收件箱
@@ -1148,7 +1177,7 @@ zh-CN:
title: 登录到 %{domain}
sign_up:
manual_review: 你在 %{domain} 上的注册需要经由管理人员手动审核。 为了帮助我们处理你的注册,请简要说明你为什么想在 %{domain} 上注册。
- preamble: 有了这个Mastodon服务器上的账户,你就可以关注Mastodon网络上的任何其他人,无论他们的账户在哪里。
+ preamble: 在这个 Mastodon 站点上注册一个账户,你就可以关注联邦宇宙中的任何人,无论他们的账户在哪里。
title: 让我们在 %{domain} 上开始。
status:
account_status: 账户状态
@@ -1160,6 +1189,7 @@ zh-CN:
view_strikes: 查看针对你账号的处罚记录
too_fast: 表单提交过快,请重试。
use_security_key: 使用安全密钥
+ user_agreement_html: 我已阅读并同意 服务条款 与 隐私政策
author_attribution:
example_title: 示例文本
hint_html: 你是否在 Mastodon 之外撰写新闻或博客文章?控制它们被分享到 Mastodon 时的署名方式。
@@ -1797,6 +1827,8 @@ zh-CN:
too_late: 已来不及对此次处罚提出申诉
tags:
does_not_match_previous_name: 和之前的名称不匹配
+ terms_of_service:
+ title: 服务条款
themes:
contrast: Mastodon (高对比度)
default: Mastodon (暗色)
@@ -1857,6 +1889,15 @@ zh-CN:
further_actions_html: 如果不是你本人操作,我们建议你立即 %{action} 并启用双因素认证,以确保账号安全。
subject: 已有新 IP 地址访问了你的账号
title: 一次新登录
+ terms_of_service_changed:
+ agreement: 继续使用你在 %{domain} 的账户即表示您同意这些条款。如果你不同意更新后的条款,你可以随时删除账户以终止与 %{domain} 的协议。
+ changelog: 本次更新的要点如下:
+ description: 你收到此邮件是因为我们更新了 %{domain} 的服务条款。我们建议你在此查看变更后的服务条款:
+ description_html: 你收到此邮件是因为我们更新了 %{domain} 的服务条款。我们建议你在此查看变更后的服务条款。
+ sign_off: "%{domain} 运营团队"
+ subject: 服务条款变更
+ subtitle: "%{domain} 更新了服务条款"
+ title: 重要变更
warning:
appeal: 提交申诉
appeal_description: 如果你认为此结果有误,可以向 %{instance} 的工作人员提交申诉。
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index cff96797ee..7278058dce 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -1021,7 +1021,6 @@ zh-HK:
migrate_account: 轉移到另一個帳號
migrate_account_html: 想要將這個帳號指向另一個帳號可到這裡設定。
or_log_in_with: 或登入於
- privacy_policy_agreement_html: 我已閱讀且同意私隱政策
progress:
details: 你的資料
review: 我們的審核
@@ -1044,7 +1043,6 @@ zh-HK:
security: 登入資訊
set_new_password: 設定新密碼
setup:
- email_settings_hint_html: 請點擊我們發送給你的連結來驗證 %{email}。我們會等着你。
link_not_received: 收不到連結嗎?
title: 檢查你的信箱
sign_in:
@@ -1052,7 +1050,6 @@ zh-HK:
title: 登入 %{domain}
sign_up:
manual_review: "%{domain} 的註冊均需要我們的管理員手動審核。為了幫助我們處理你的註冊,請填寫一些關於你的資訊,以及為何想在 %{domain} 上開設帳號。"
- preamble: 有了這個 Mastodon 伺服器的帳號,無論將帳號託管在何處,你都可以追蹤網絡上任何人。
title: 讓我為你在 %{domain} 上設定好。
status:
account_status: 帳戶文章
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 6de2e0fd52..cf215240e9 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -211,6 +211,7 @@ zh-TW:
enable_user: 啓用帳號
memorialize_account: 設定成追悼帳號
promote_user: 將用戶升級
+ publish_terms_of_service: 發佈服務條款
reject_appeal: 駁回申訴
reject_user: 回絕使用者
remove_avatar_user: 刪除大頭貼
@@ -275,6 +276,7 @@ zh-TW:
enable_user_html: "%{name} 將使用者 %{target} 設定為允許登入"
memorialize_account_html: "%{name} 將 %{target} 設定為追悼帳號"
promote_user_html: "%{name} 對使用者 %{target} 已進行晉級操作"
+ publish_terms_of_service_html: "%{name} 已發佈服務條款更新"
reject_appeal_html: "%{name} 已回絕來自 %{target} 的審核決定申訴"
reject_user_html: "%{name} 已回絕自 %{target} 而來的註冊"
remove_avatar_user_html: "%{name} 已移除 %{target} 的大頭貼"
@@ -913,6 +915,34 @@ zh-TW:
search: 搜尋
title: 主題標籤
updated_msg: 成功更新主題標籤設定
+ terms_of_service:
+ back: 回到服務條款
+ changelog: 有何異動
+ create: 使用您自己的
+ current: 目前
+ draft: 草稿
+ generate: 使用模板
+ generates:
+ action: 產生
+ chance_to_review_html: "所產生之服務條款將不會自動發佈。 您將能檢視所產生之結果。請填寫必要細節以繼續。"
+ explanation_html: 提供之服務條款模板僅供參考資訊使用,不應將其作為任何法律建議。請依照您的具體情形與特定法律議題諮詢您的法律顧問。
+ title: 設定服務條款
+ history: 歷史
+ live: 目前版本
+ no_history: 未有任何服務條款變更紀錄。
+ no_terms_of_service_html: 您目前尚未設定任何服務條款。服務條款旨在提供明確性,並保護您與使用者的爭議中免受潛在責任。
+ notified_on_html: 於 %{date} 通知之使用者
+ notify_users: 通知使用者
+ preview:
+ explanation_html: 此 email 將寄至於 %{date} 前註冊之 %{display_count} 名使用者。以下文字將被包含於 e-mail 中:
+ send_preview: 將預覽寄至 %{email}
+ send_to_all:
+ other: 寄出 %{display_count} 封 email
+ title: 預覽服務條款通知
+ publish: 發佈
+ published_on_html: 發佈於 %{date}
+ save_draft: 儲存草稿
+ title: 服務條款
title: 管理介面
trends:
allow: 允許
@@ -1116,7 +1146,6 @@ zh-TW:
migrate_account: 轉移至另一個帳號
migrate_account_html: 如果您希望引導他人跟隨另一個帳號,請至這裡設定。
or_log_in_with: 或透過其他方式登入
- privacy_policy_agreement_html: 我已閱讀且同意 隱私權政策
progress:
confirm: 驗證電子郵件地址
details: 您的個人資料
@@ -1141,7 +1170,7 @@ zh-TW:
set_new_password: 設定新密碼
setup:
email_below_hint_html: 請檢查您的垃圾郵件資料夾,或是請求另一封驗證信。若不正確,您可以更正您的電子郵件地址。
- email_settings_hint_html: 請點擊我們寄給您連結以驗證 %{email}。我們將於此稍候。
+ email_settings_hint_html: 請點擊我們寄至 %{email} 之連結以開始使用 Mastodon。我們將於此稍候。
link_not_received: 無法取得連結嗎?
new_confirmation_instructions_sent: 您將於幾分鐘之內收到新的包含驗證連結之電子郵件!
title: 請檢查您的收件匣
@@ -1150,7 +1179,7 @@ zh-TW:
title: 登入 %{domain}
sign_up:
manual_review: "%{domain} 上的註冊由我們的管理員進行人工審核。為協助我們處理您的註冊,請寫一些關於您自己的資訊以及您欲於 %{domain} 上註冊帳號之原因。"
- preamble: 若於此 Mastodon 伺服器擁有帳號,您將能跟隨聯邦宇宙網路中任何一份子,無論他們的帳號託管於何處。
+ preamble: 若於此 Mastodon 伺服器擁有帳號,您將能跟隨聯邦宇宙中任何一份子,無論他們的帳號託管於何處。
title: 讓我們一起設定 %{domain} 吧!
status:
account_status: 帳號狀態
@@ -1162,6 +1191,7 @@ zh-TW:
view_strikes: 檢視針對您帳號過去的警示
too_fast: 送出表單的速度太快跟不上,請稍後再試。
use_security_key: 使用安全金鑰
+ user_agreement_html: 我已閱讀並同意 服務條款 與 隱私權政策
author_attribution:
example_title: 範例文字
hint_html: 您是否正於 Mastodon 之外撰寫新聞或部落格文章?控制當它們於 Mastodon 上分享時您如何獲得信譽。
@@ -1799,6 +1829,8 @@ zh-TW:
too_late: 您太晚申訴這個警示了
tags:
does_not_match_previous_name: 與先前的名稱不吻合
+ terms_of_service:
+ title: 服務條款
themes:
contrast: Mastodon(高對比)
default: Mastodon(深色)
@@ -1859,6 +1891,15 @@ zh-TW:
further_actions_html: 如果這個不是您,我們建議您立即 %{action} ,並且啟用二階段驗證 (2FA) 以確保帳號安全。
subject: 您的帳號已被新 IP 位址存取
title: 新登入
+ terms_of_service_changed:
+ agreement: 透過繼續使用 %{domain},您將同意這些條款。若您不同意此條款異動,您能隨時終止與 %{domain} 之協議並刪除您的帳號。
+ changelog: 簡而言之,此次更新對您將意味著:
+ description: 您收到此 e-mail 係因我們正在更新 %{domain} 之服務條款。我們鼓勵您審視此處之服務條款更新全文:
+ description_html: 您收到此 e-mail 係因我們正在更新 %{domain} 之服務條款。我們鼓勵您審視 此處之服務條款更新全文。
+ sign_off: "%{domain} 團隊"
+ subject: 我們的服務條款更新
+ subtitle: "%{domain} 之服務條款正在悄悄發生變化"
+ title: 重要更新
warning:
appeal: 遞交申訴
appeal_description: 若您認為這是錯誤,您可以向 %{instance} 的工作人員提出申訴。
diff --git a/config/navigation.rb b/config/navigation.rb
index de0673426b..ff327ec07a 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -75,6 +75,7 @@ SimpleNavigation::Configuration.run do |navigation|
n.item :admin, safe_join([material_symbol('manufacturing'), t('admin.title')]), nil, if: -> { current_user.can?(:view_dashboard, :manage_settings, :manage_rules, :manage_announcements, :manage_custom_emojis, :manage_webhooks, :manage_federation) && !self_destruct } do |s|
s.item :dashboard, safe_join([material_symbol('speed'), t('admin.dashboard.title')]), admin_dashboard_path, if: -> { current_user.can?(:view_dashboard) }
s.item :settings, safe_join([material_symbol('manufacturing'), t('admin.settings.title')]), admin_settings_path, if: -> { current_user.can?(:manage_settings) }, highlights_on: %r{/admin/settings}
+ s.item :terms_of_service, safe_join([material_symbol('description'), t('admin.terms_of_service.title')]), admin_terms_of_service_index_path, highlights_on: %r{/admin/terms_of_service}, if: -> { current_user.can?(:manage_rules) }
s.item :rules, safe_join([material_symbol('gavel'), t('admin.rules.title')]), admin_rules_path, highlights_on: %r{/admin/rules}, if: -> { current_user.can?(:manage_rules) }
s.item :warning_presets, safe_join([material_symbol('warning'), t('admin.warning_presets.title')]), admin_warning_presets_path, highlights_on: %r{/admin/warning_presets}, if: -> { current_user.can?(:manage_settings) }
s.item :roles, safe_join([material_symbol('contact_mail'), t('admin.roles.title')]), admin_roles_path, highlights_on: %r{/admin/roles}, if: -> { current_user.can?(:manage_roles) }
diff --git a/config/routes.rb b/config/routes.rb
index ad6aba50fc..f7171bb930 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -205,8 +205,9 @@ Rails.application.routes.draw do
get '/about', to: 'about#show'
get '/about/more', to: redirect('/about')
- get '/privacy-policy', to: 'privacy#show', as: :privacy_policy
- get '/terms', to: redirect('/privacy-policy')
+ get '/privacy-policy', to: 'privacy#show', as: :privacy_policy
+ get '/terms-of-service', to: 'terms_of_service#show', as: :terms_of_service
+ get '/terms', to: redirect('/terms-of-service')
match '/', via: [:post, :put, :patch, :delete], to: 'application#raise_not_found', format: false
match '*unmatched_route', via: :all, to: 'application#raise_not_found', format: false
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 0802be319b..f6a0c88048 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -48,6 +48,18 @@ namespace :admin do
resource :special_instances, only: [:show, :create]
resource :special_domains, only: [:show, :create]
+ namespace :terms_of_service do
+ resource :generate, only: [:show, :create]
+ resource :history, only: [:show]
+ resource :draft, only: [:show, :update]
+ end
+
+ resources :terms_of_service, only: [:index] do
+ resource :preview, only: [:show], module: :terms_of_service
+ resource :test, only: [:create], module: :terms_of_service
+ resource :distribution, only: [:create], module: :terms_of_service
+ end
+
resources :announcements, except: [:show] do
member do
post :publish
diff --git a/config/routes/api.rb b/config/routes/api.rb
index 1985268f36..d8193ab96d 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -128,6 +128,7 @@ namespace :api, format: false do
resources :rules, only: [:index]
resources :domain_blocks, only: [:index]
resource :privacy_policy, only: [:show]
+ resource :terms_of_service, only: [:show]
resource :extended_description, only: [:show]
resource :translation_languages, only: [:show]
resource :languages, only: [:show]
diff --git a/config/settings.yml b/config/settings.yml
index 8e64018736..2d8b75148f 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -69,6 +69,7 @@ defaults: &defaults
stranger_mention_from_local_ng: false
enable_local_timeline: true
emoji_reaction_disallow_domains: []
+ allow_referer_origin: false
development:
<<: *defaults
diff --git a/config/templates/terms-of-service.md b/config/templates/terms-of-service.md
new file mode 100644
index 0000000000..cb81a22e84
--- /dev/null
+++ b/config/templates/terms-of-service.md
@@ -0,0 +1,276 @@
+## Introduction
+
+These terms of service (the "Terms") cover your access and use of Server
+Operator's ("Administrator", "we", or "us") instance, located at %{domain} (the
+"Instance"). These Terms apply solely to your use of the Instance as operated
+by the Administrator. Please note that we have no affiliation with Mastodon
+gGmbH (“Mastodon”) and these Terms do not contain any representations or
+warranties or other promises from Mastodon about your use of the Instance. If
+you would like to contact us for any reason, please direct all questions,
+comments, concerns and notices to us by following the instructions provided in
+the Notice section below.
+
+Please read these Terms carefully before using the Instance as they contain
+important information about your interactions with the Instance. We may have
+other policies that apply to your use of the Instance and that are incorporated
+into these Terms. You should also read these policies before using the Instance.
+
+## Age Requirements and Responsibility of Parents and Legal Guardians
+
+By accessing the Instance, you signify that you are at least thirteen years old
+and that you meet the minimum age required by the laws in your country. If you
+are old enough to access the Instance in your country, but are not old enough to
+have the legal authority to consent to our Terms, please ask your parent or
+legal guardian to read these Terms with you, as they must agree to the Terms on
+your behalf. If you are a parent or legal guardian who has accepted these terms
+on your child's behalf, these terms apply to you and you are responsible for
+your child's activities on the Instance.
+
+## Prohibited Uses
+
+You are fully responsible for your activities while using the Instance,
+including any content, information or other materials you post or upload to the
+Instance, and you bear all risks associated with use of the Instance. By
+agreeing to these Terms, you agree to comply with all applicable federal, state,
+and local laws and regulations in connection with your use of the Instance. You
+also agree not to use the Instance to engage in any prohibited conduct, or to
+assist any other person or entity in engaging in any prohibited conduct.
+
+We reserve the right (but do not have the obligation) in our sole discretion to:
+(1) monitor the Instance for violations of these Terms; (2) take appropriate
+legal action against anyone who uses or accesses the Instance in a manner that
+we believe violates the law or these Terms, including without limitation,
+reporting such user to law enforcement authorities; (3) deny access to the
+Instance or any features of the Instance to anyone who violates these Terms or
+who we believe interferes with the ability of others to enjoy our Instance or
+infringes the rights of others; and (4) otherwise manage the Instance in a
+manner designed to protect our rights and property and to facilitate the proper
+functioning of the Instance.
+
+You are prohibited from using the Instance for the commission of harmful or
+illegal activities. Accordingly, you may not, or assist any other person to (or
+attempt to):
+
+- Violate these Terms or other policies and terms posted on, or otherwise
+ applicable to, the Instance;
+- Upload any material, program, or software that contains any virus, worm,
+ spyware, Trojan horse or other program or code designed to interrupt, destroy
+ or limit the functionality of the Instance, launch a denial of service attack,
+ or in any other way attempt to interfere with the functioning and availability
+ of the Instance;
+- Except as may be the result of standard search engine or Internet browser
+ usage, use, launch, develop, or distribute any automated system, including
+ without limitation, any spider, robot, cheat utility, scraper, offline reader,
+ or any data mining or similar data gathering extraction tools to access the
+ Instance, or use or launch any unauthorized script or other software;
+- Interfere with, disable, vandalize or disrupt the Instance or servers or
+ networks connected to the Instance;
+- Hack into, penetrate, disable, or otherwise circumvent the security measures
+ of the Instance or servers or networks connected to the Instance;
+- or otherwise use the Instance in any way that violates any applicable
+ national, federal, state, local or international law or regulation.
+
+## Intellectual Property
+
+The Instance contains content provided by its users, including you, such as
+text, photos, videos, audio, links, and streams (“Content”). When you submit
+Content to the Instance, you represent and warrant that you have all of the
+rights, power, and authority necessary to grant the rights to the Content
+contained within these Terms. Because you alone are responsible for the Content
+that you submit to the Instance, you may expose yourself to liability from third
+parties if you post or share such Content without all necessary rights.
+
+You retain all ownership rights you have in the Content that you submit to the
+Instance, but you grant us a limited, non-exclusive, irrevocable, transferable,
+royalty-free, perpetual license to use, copy, store, display, share, distribute,
+communicate and transfer the Content in ways that are consistent with your use
+of the Instance. To the fullest extent possible, you agree to waive or promise
+not to assert against the Administrator all moral rights you may have in the
+Content to the extent those rights are necessary for the Administrator to host
+the Content on the Instance.
+
+## DMCA Copyright Infringement Notice
+
+We have implemented the procedures described in the Digital Millennium Copyright
+Act of 1998 ("DMCA"), 17 U.S.C. § 512 , regarding the reporting of alleged
+copyright infringement and the removal of or disabling access to infringing
+material. If you have a good faith belief that copyrighted material on the
+Instance is being used in a way that infringes a copyright over which you are
+authorized to act, you may make a Notice of Infringing Material. If you have a
+good faith belief that copyrighted material that was removed or access to which
+was disabled was a result of a mistake or misidentification, then you may make a
+Notice of Counter-Notification.
+
+Before serving a Notice of Infringing Material or Counter-Notification, you may
+wish to contact a lawyer to better understand your rights and obligations under
+the DMCA and other applicable laws. For example, if your Notice or
+Counter-Notifications fails to comply with all requirements of sections
+512(c)(3) or 512(g)(3), respectively, your Notice or Counter-Notification may
+not be effective.
+
+### Termination of Repeat Infringers
+
+We will terminate or disable your use of the Instance in appropriate
+circumstances if you are deemed by us to be a repeat copyright infringer.
+
+### Notices and Counter-Notifications must be sent to:
+
+DMCA Agent: Copyright Manager
+
+Address: %{dmca_address}
+
+Email: %{dmca_email}
+
+## Disclaimer
+
+Administrator reserves the right in our sole discretion to modify or
+discontinue, temporarily or permanently, the Instance (or any part thereof) with
+or without notice to you. You agree that Administrator will not be liable to
+you or to any third party for any modification or discontinuance of the
+Instance, except as set forth in the "Limitation of Liability" section below.
+
+You understand that we are not responsible for any activities or legal
+consequences of your use of the Instance. Users are responsible for using the
+Instance in compliance with all applicable laws and regulations of the
+jurisdictions in which such users are domiciled, reside, or are located at the
+time of such access or use, as well as these Terms. Any violation of these
+Terms may result in the suspension or termination by us, in our sole discretion,
+of your access to and use of the Instance.
+
+## Limitation of Liability
+
+In no event will Administrator's total liability to you for all damages, losses,
+or causes of action exceed one hundred dollars ($100). If you are dissatisfied
+with the Instance or with these Terms, your sole remedy is to discontinue your
+use of the Instance.
+
+## Links to and From Other Websites
+
+You may gain access to other websites and Instances via links on the Instance.
+These Terms apply to the Instance only and do not apply to Mastodon, other
+Instances, or other parties' websites. Similarly, you may have come to the
+Instance via a link from another website or Instance. The terms of use of other
+websites and Instances do not apply to the Instance. Administrator assumes no
+responsibility for any terms of use or material outside of the Instance accessed
+via any link. You are free to establish a hypertext link to the Instance so
+long as the link does not state or imply any sponsorship of your website,
+instance or service by Administrator or the Instance. Unless expressly agreed
+to by us in writing, reference to any of our products, services, processes or
+other information, by trade name, trademark, logo, or otherwise by you or any
+third party does not constitute or imply endorsement, sponsorship or
+recommendation thereof by us. You may not, without our prior written
+permission, scrape the Instance or incorporate into another website or other
+service any of our material, content or intellectual property, unless you are
+otherwise permitted by us to do so in accordance with a license or subject to
+separate terms.
+
+## Dispute Resolution by Binding Arbitration
+
+### Agreement to Arbitrate:
+
+This Dispute Resolution by Binding Arbitration section is referred to in these
+Terms as the “Arbitration Agreement.” You and the Instance agree that any and
+all disputes, claims, demands, or causes of action (“Claims”) that have arisen
+or may arise between you and us, whether arising out of or relating to these
+Terms, the website, or any aspect of the relationship or transactions between
+us, will be resolved exclusively through final and binding arbitration before a
+neutral arbitrator, rather than in a court by a judge or jury, in accordance
+with the terms of this Arbitration Agreement, except that, where available, you
+or we may (but are not required to) assert individual Claims in small claims
+court if such Claims are within the scope of such court's jurisdiction. Further,
+this Arbitration Agreement does not preclude you from bringing issues to the
+attention of federal, state/provincial, or local agencies, and such agencies
+can, if the law allows, seek relief against us on your behalf. You agree that,
+by entering into these Terms, you and we are each waiving the right to a trial
+by jury or to participate in a class action and that our respective rights will
+be determined by a neutral arbitrator, not a judge or jury.
+
+### Prohibition of Class and Representative Actions and Non-Individualized
+
+### Relief
+
+You and we agree that each of us may bring claims against the other only on an
+individual basis and not as a plaintiff or class member in any purported class
+or representative action or proceeding.
+
+### Pre-Arbitration Dispute Resolution
+
+Before commencing any arbitration (or suit in small claims court, if available),
+you agree to provide the Instance with a written notice of Claim, and the
+Instance agrees to provide you with a written notice of Claim to the extent
+reasonably possible based on the availability of your contact information to the
+Instance (“Notice”). The Notice to the Instance shall be sent to
+%{arbitration_website} with a paper copy to %{arbitration_address}. Where the
+Instance has your contact information, the Instance will send its Notice to you
+using the last email address we have on file for you if you have provided us
+with an email address (each, a “Notice Address”). The Notice must (i) describe
+the nature and basis of the Claim in sufficient detail to evaluate the merits of
+the claiming party's Claim and (ii) set forth the specific relief sought,
+including the amount of money (if any) that is demanded and the means by which
+the demanding party calculated the claimed amount. Both parties agree that they
+will attempt to resolve a Claim through informal negotiation within sixty (60)
+calendar days from the date the Notice is received. If the Claim is not resolved
+within sixty (60) calendar days after the Notice is received, you or we may
+commence an arbitration proceeding. Each party agrees that %{jurisdiction}
+courts may enter injunctive relief to enforce the pre-filing requirements of
+this paragraph, including an injunction to stay an arbitration that has been
+commenced in violation of this paragraph.
+
+### Arbitration Procedures
+
+The relevant arbitration rules of %{jurisdiction} fully applies to the
+Arbitration Agreement. The arbitration will be conducted by a neutral arbitrator
+in accordance with %{jurisdiction} rules (the “Rules”), as modified by this
+Arbitration Agreement. If there is any inconsistency between any term of the
+Rules and any term of this Arbitration Agreement, the applicable terms of this
+Arbitration Agreement will control. The arbitrator must also follow the
+provisions of these Terms as a court would. Except as set forth above, all
+issues are for the arbitrator to decide, including, but not limited to,
+threshold issues relating to the scope, enforceability, and arbitrability of
+this Arbitration Agreement and issues relating to (a) whether the terms of these
+Terms (or any aspect thereof) are enforceable, unconscionable, or illusory and
+(b) any defense to arbitration, including waiver, delay, laches, or estoppel.
+Regardless of the manner in which the arbitration is conducted, the arbitrator
+will issue a reasoned written decision sufficient to explain the essential
+findings and conclusions on which the award is based. Payment of all filing,
+administration and arbitrator fees (collectively, the “Arbitration Fees”) will
+be governed by the Rules unless otherwise provided in this Arbitration
+Agreement.
+
+### Small Claims Court
+
+Subject to applicable jurisdictional requirements, either party may elect to
+pursue a Claim in a local small claims court rather than through arbitration so
+long as the matter remains in a small claims court and proceeds only on an
+individual basis.
+
+## Choice of Law
+
+Any and all claims related to or arising out of your use of, or access to the
+Instance shall be governed by internal substantive laws of New York in all
+respects, without regard for the jurisdiction or forum in which you are
+domiciled, reside, or located at the time of such access or use.
+
+## Waiver and Severability
+
+If you do not comply with a portion of these Terms and we do not take action
+right away, this does not mean we are giving up any of our rights under these
+Terms. If any part of these Terms is determined to be invalid or unenforceable
+by a court of competent jurisdiction or arbitrator, the remainder of the Terms
+shall be enforced to the maximum extent permitted by law.
+
+## Notices
+
+All notices to Administrator under these Terms, unless otherwise specified shall
+be sent to %{admin_email}. Service of any notice will be deemed given on the
+date of receipt delivered by email.
+
+## Changes to these Terms
+
+We may change or modify these Terms by posting a revised version on the
+Instance, or by otherwise providing notice to you, and will state at the top of
+the revised Terms the date they were last revised. Changes will not apply
+retroactively and will become effective no earlier than fourteen (14) calendar
+days after they are posted, except for changes addressing changes made for legal
+reasons, which will be effective immediately. Your continued use of the
+Instance after any change means you agree to the new Terms.
diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml
index 6f8b6cc60d..f594b8799a 100644
--- a/db/migrate/.rubocop.yml
+++ b/db/migrate/.rubocop.yml
@@ -1,9 +1,16 @@
inherit_from: ../../.rubocop.yml
-Naming/VariableNumber:
- CheckSymbols: false
+# Below are all enabled as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity
+# TODO: Delete this file and move above config to base naming config
-# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity
Rails/CreateTableWithTimestamps:
Include:
- '*.rb'
+
+Rails/ThreeStateBooleanColumn:
+ Include:
+ - '*.rb'
+
+Rails/ReversibleMigration:
+ Include:
+ - '*.rb'
diff --git a/db/migrate/20160325130944_add_admin_to_users.rb b/db/migrate/20160325130944_add_admin_to_users.rb
index 6b701ebcc8..a78d08a156 100644
--- a/db/migrate/20160325130944_add_admin_to_users.rb
+++ b/db/migrate/20160325130944_add_admin_to_users.rb
@@ -2,6 +2,6 @@
class AddAdminToUsers < ActiveRecord::Migration[4.2]
def change
- add_column :users, :admin, :boolean, default: false
+ add_column :users, :admin, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20161123093447_add_sensitive_to_statuses.rb b/db/migrate/20161123093447_add_sensitive_to_statuses.rb
index 7487b2ee33..93388126e9 100644
--- a/db/migrate/20161123093447_add_sensitive_to_statuses.rb
+++ b/db/migrate/20161123093447_add_sensitive_to_statuses.rb
@@ -2,6 +2,6 @@
class AddSensitiveToStatuses < ActiveRecord::Migration[5.0]
def change
- add_column :statuses, :sensitive, :boolean, default: false
+ add_column :statuses, :sensitive, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
index 5282602ce9..d05be7673e 100644
--- a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
+++ b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
@@ -2,6 +2,6 @@
class AddRejectMediaToDomainBlocks < ActiveRecord::Migration[5.0]
def change
- add_column :domain_blocks, :reject_media, :boolean
+ add_column :domain_blocks, :reject_media, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
index 0f60758d3b..5e29e2f003 100644
--- a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
+++ b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
@@ -7,7 +7,7 @@ class AddDeviseTwoFactorToUsers < ActiveRecord::Migration[5.0]
t.column :encrypted_otp_secret_iv, :string
t.column :encrypted_otp_secret_salt, :string
t.column :consumed_timestep, :integer
- t.column :otp_required_for_login, :boolean
+ t.column :otp_required_for_login, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
end
diff --git a/db/migrate/20170205175257_remove_devices.rb b/db/migrate/20170205175257_remove_devices.rb
index 643e196bf3..d4af5ab613 100644
--- a/db/migrate/20170205175257_remove_devices.rb
+++ b/db/migrate/20170205175257_remove_devices.rb
@@ -1,7 +1,11 @@
# frozen_string_literal: true
class RemoveDevices < ActiveRecord::Migration[5.0]
- def change
+ def up
drop_table :devices if table_exists?(:devices)
end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
end
diff --git a/db/migrate/20170209184350_add_reply_to_statuses.rb b/db/migrate/20170209184350_add_reply_to_statuses.rb
index ffef97609d..030ceb4db0 100644
--- a/db/migrate/20170209184350_add_reply_to_statuses.rb
+++ b/db/migrate/20170209184350_add_reply_to_statuses.rb
@@ -2,7 +2,7 @@
class AddReplyToStatuses < ActiveRecord::Migration[5.0]
def up
- add_column :statuses, :reply, :boolean, nil: false, default: false
+ add_column :statuses, :reply, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
Status.unscoped.update_all('reply = (in_reply_to_id IS NOT NULL)')
end
diff --git a/db/migrate/20170304202101_add_type_to_media_attachments.rb b/db/migrate/20170304202101_add_type_to_media_attachments.rb
index e49d87fc74..8f863fba40 100644
--- a/db/migrate/20170304202101_add_type_to_media_attachments.rb
+++ b/db/migrate/20170304202101_add_type_to_media_attachments.rb
@@ -3,7 +3,7 @@
class AddTypeToMediaAttachments < ActiveRecord::Migration[5.0]
class MigrationMediaAttachment < ApplicationRecord
self.table_name = :media_attachments
- enum type: [:image, :gifv, :video]
+ enum :type, [:image, :gifv, :video]
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze
end
diff --git a/db/migrate/20170330163835_create_imports.rb b/db/migrate/20170330163835_create_imports.rb
index 6bd9e28b5b..7548a376d4 100644
--- a/db/migrate/20170330163835_create_imports.rb
+++ b/db/migrate/20170330163835_create_imports.rb
@@ -5,7 +5,7 @@ class CreateImports < ActiveRecord::Migration[5.0]
create_table :imports do |t|
t.integer :account_id, null: false
t.integer :type, null: false
- t.boolean :approved
+ t.boolean :approved # rubocop:disable Rails/ThreeStateBooleanColumn
t.timestamps
end
diff --git a/db/migrate/20170711225116_fix_null_booleans.rb b/db/migrate/20170711225116_fix_null_booleans.rb
index 12cc9b8b86..7b0ee32293 100644
--- a/db/migrate/20170711225116_fix_null_booleans.rb
+++ b/db/migrate/20170711225116_fix_null_booleans.rb
@@ -3,10 +3,10 @@
class FixNullBooleans < ActiveRecord::Migration[5.1]
def change
safety_assured do
- change_column_default :domain_blocks, :reject_media, false
+ change_column_default :domain_blocks, :reject_media, false # rubocop:disable Rails/ReversibleMigration
change_column_null :domain_blocks, :reject_media, false, false
- change_column_default :imports, :approved, false
+ change_column_default :imports, :approved, false # rubocop:disable Rails/ReversibleMigration
change_column_null :imports, :approved, false, false
change_column_null :statuses, :sensitive, false, false
@@ -14,7 +14,7 @@ class FixNullBooleans < ActiveRecord::Migration[5.1]
change_column_null :users, :admin, false, false
- change_column_default :users, :otp_required_for_login, false
+ change_column_default :users, :otp_required_for_login, false # rubocop:disable Rails/ReversibleMigration
change_column_null :users, :otp_required_for_login, false, false
end
end
diff --git a/db/migrate/20170905165803_add_local_to_statuses.rb b/db/migrate/20170905165803_add_local_to_statuses.rb
index cb6307c265..90f01cb373 100644
--- a/db/migrate/20170905165803_add_local_to_statuses.rb
+++ b/db/migrate/20170905165803_add_local_to_statuses.rb
@@ -2,6 +2,6 @@
class AddLocalToStatuses < ActiveRecord::Migration[5.1]
def change
- add_column :statuses, :local, :boolean, null: true, default: nil
+ add_column :statuses, :local, :boolean, null: true, default: nil # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
index 4c3a25e838..34b7951551 100644
--- a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
+++ b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
@@ -5,7 +5,7 @@ class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migrat
def change
safety_assured do
- add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106
+ add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber
end
remove_index :statuses, [:account_id, :id], name: :index_statuses_on_account_id_id
end
diff --git a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
index 242ae74107..317c48bb69 100644
--- a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
+++ b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
@@ -5,7 +5,7 @@ class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecor
def change
safety_assured do
- add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106')
+ add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106') # rubocop:disable Naming/VariableNumber
end
# These index may not exists (see migration 20180514130000)
diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb
index d879fd88a2..643b3d46c4 100644
--- a/db/migrate/20181024224956_migrate_account_conversations.rb
+++ b/db/migrate/20181024224956_migrate_account_conversations.rb
@@ -21,7 +21,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
belongs_to :account, class_name: 'MigrationAccount'
has_many :mentions, dependent: :destroy, inverse_of: :status, class_name: 'MigrationMention', foreign_key: :status_id
scope :local, -> { where(local: true).or(where(uri: nil)) }
- enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility
+ enum :visibility, { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, suffix: :visibility
has_many :active_mentions, -> { active }, class_name: 'MigrationMention', inverse_of: :status, foreign_key: :status_id
end
diff --git a/db/migrate/20181203021853_add_discoverable_to_accounts.rb b/db/migrate/20181203021853_add_discoverable_to_accounts.rb
index 16576aa043..333a2ce210 100644
--- a/db/migrate/20181203021853_add_discoverable_to_accounts.rb
+++ b/db/migrate/20181203021853_add_discoverable_to_accounts.rb
@@ -2,6 +2,6 @@
class AddDiscoverableToAccounts < ActiveRecord::Migration[5.2]
def change
- add_column :accounts, :discoverable, :boolean
+ add_column :accounts, :discoverable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
index 656cd0af58..8dfa4cca4a 100644
--- a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
+++ b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
@@ -2,6 +2,6 @@
class AddByModeratorToTombstone < ActiveRecord::Migration[5.2]
def change
- add_column :tombstones, :by_moderator, :boolean
+ add_column :tombstones, :by_moderator, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
index cbb5fc67b4..37812f2b54 100644
--- a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
+++ b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
@@ -7,7 +7,7 @@ class AddSilencedAtSuspendedAtToAccounts < ActiveRecord::Migration[5.2]
class DomainBlock < ApplicationRecord
# Dummy class, to make migration possible across version changes
- enum severity: [:silence, :suspend, :noop]
+ enum :severity, [:silence, :suspend, :noop]
has_many :accounts, foreign_key: :domain, primary_key: :domain
end
diff --git a/db/migrate/20190805123746_add_capabilities_to_tags.rb b/db/migrate/20190805123746_add_capabilities_to_tags.rb
index 949938bb1e..628617cb7e 100644
--- a/db/migrate/20190805123746_add_capabilities_to_tags.rb
+++ b/db/migrate/20190805123746_add_capabilities_to_tags.rb
@@ -4,9 +4,11 @@ class AddCapabilitiesToTags < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_table(:tags, bulk: true) do |t|
+ # rubocop:disable Rails/ThreeStateBooleanColumn
t.column :usable, :boolean
t.column :trendable, :boolean
t.column :listable, :boolean
+ # rubocop:enable Rails/ThreeStateBooleanColumn
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
diff --git a/db/migrate/20190820003045_update_statuses_index.rb b/db/migrate/20190820003045_update_statuses_index.rb
index df9ce0638f..4bd9c156db 100644
--- a/db/migrate/20190820003045_update_statuses_index.rb
+++ b/db/migrate/20190820003045_update_statuses_index.rb
@@ -4,12 +4,12 @@ class UpdateStatusesIndex < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 }
- remove_index :statuses, name: :index_statuses_20180106
+ safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 } # rubocop:disable Naming/VariableNumber
+ remove_index :statuses, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber
end
def down
- safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 }
- remove_index :statuses, name: :index_statuses_20190820
+ safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 } # rubocop:disable Naming/VariableNumber
+ remove_index :statuses, name: :index_statuses_20190820 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20190823221802_add_local_index_to_statuses.rb b/db/migrate/20190823221802_add_local_index_to_statuses.rb
index b5baa30287..5cab5547e5 100644
--- a/db/migrate/20190823221802_add_local_index_to_statuses.rb
+++ b/db/migrate/20190823221802_add_local_index_to_statuses.rb
@@ -4,10 +4,10 @@ class AddLocalIndexToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))'
+ add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
end
def down
- remove_index :statuses, name: :index_statuses_local_20190824
+ remove_index :statuses, name: :index_statuses_local_20190824 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
index d6740f19b8..0cf1e9fee7 100644
--- a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
+++ b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
@@ -2,6 +2,6 @@
class AddHideCollectionsToAccounts < ActiveRecord::Migration[5.2]
def change
- add_column :accounts, :hide_collections, :boolean
+ add_column :accounts, :hide_collections, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20200119112504_add_public_index_to_statuses.rb b/db/migrate/20200119112504_add_public_index_to_statuses.rb
index 6451b9254e..21a361d5b6 100644
--- a/db/migrate/20200119112504_add_public_index_to_statuses.rb
+++ b/db/migrate/20200119112504_add_public_index_to_statuses.rb
@@ -4,10 +4,10 @@ class AddPublicIndexToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))'
+ add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
end
def down
- remove_index :statuses, name: :index_statuses_public_20200119
+ remove_index :statuses, name: :index_statuses_public_20200119 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20200309150742_add_forwarded_to_reports.rb b/db/migrate/20200309150742_add_forwarded_to_reports.rb
index 60db0167e3..ba835ded3a 100644
--- a/db/migrate/20200309150742_add_forwarded_to_reports.rb
+++ b/db/migrate/20200309150742_add_forwarded_to_reports.rb
@@ -2,6 +2,6 @@
class AddForwardedToReports < ActiveRecord::Migration[5.2]
def change
- add_column :reports, :forwarded, :boolean
+ add_column :reports, :forwarded, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20210609202149_create_login_activities.rb b/db/migrate/20210609202149_create_login_activities.rb
index f2da335997..4add47a725 100644
--- a/db/migrate/20210609202149_create_login_activities.rb
+++ b/db/migrate/20210609202149_create_login_activities.rb
@@ -6,7 +6,7 @@ class CreateLoginActivities < ActiveRecord::Migration[6.1]
t.belongs_to :user, null: false, foreign_key: { on_delete: :cascade }
t.string :authentication_method
t.string :provider
- t.boolean :success
+ t.boolean :success # rubocop:disable Rails/ThreeStateBooleanColumn
t.string :failure_reason
t.inet :ip
t.string :user_agent
diff --git a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
index 8c5d9c368a..eaeba54473 100644
--- a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
+++ b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
@@ -2,6 +2,6 @@
class AddSkipSignInTokenToUsers < ActiveRecord::Migration[6.1]
def change
- add_column :users, :skip_sign_in_token, :boolean
+ add_column :users, :skip_sign_in_token, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20211031031021_create_preview_card_providers.rb b/db/migrate/20211031031021_create_preview_card_providers.rb
index 83255614b6..577cfc53b8 100644
--- a/db/migrate/20211031031021_create_preview_card_providers.rb
+++ b/db/migrate/20211031031021_create_preview_card_providers.rb
@@ -5,7 +5,7 @@ class CreatePreviewCardProviders < ActiveRecord::Migration[6.1]
create_table :preview_card_providers do |t|
t.string :domain, null: false, default: '', index: { unique: true }
t.attachment :icon
- t.boolean :trendable
+ t.boolean :trendable # rubocop:disable Rails/ThreeStateBooleanColumn
t.datetime :reviewed_at
t.datetime :requested_review_at
t.timestamps
diff --git a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
index 21fc4ecf46..561a4d91c0 100644
--- a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
+++ b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
@@ -2,6 +2,6 @@
class AddTrendableToPreviewCards < ActiveRecord::Migration[6.1]
def change
- add_column :preview_cards, :trendable, :boolean
+ add_column :preview_cards, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20220202200743_add_trendable_to_accounts.rb b/db/migrate/20220202200743_add_trendable_to_accounts.rb
index 539717b751..ad97e1fd1e 100644
--- a/db/migrate/20220202200743_add_trendable_to_accounts.rb
+++ b/db/migrate/20220202200743_add_trendable_to_accounts.rb
@@ -4,7 +4,7 @@ class AddTrendableToAccounts < ActiveRecord::Migration[6.1]
def change
safety_assured do
change_table(:accounts, bulk: true) do |t|
- t.column :trendable, :boolean
+ t.column :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
diff --git a/db/migrate/20220202200926_add_trendable_to_statuses.rb b/db/migrate/20220202200926_add_trendable_to_statuses.rb
index 5d101132b8..3eaf2d0bb0 100644
--- a/db/migrate/20220202200926_add_trendable_to_statuses.rb
+++ b/db/migrate/20220202200926_add_trendable_to_statuses.rb
@@ -2,6 +2,6 @@
class AddTrendableToStatuses < ActiveRecord::Migration[6.1]
def change
- add_column :statuses, :trendable, :boolean
+ add_column :statuses, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
index 55567d62e1..c3dfc786a5 100644
--- a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
+++ b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
@@ -7,7 +7,7 @@ class AddOrderedMediaAttachmentIdsToStatusEdits < ActiveRecord::Migration[6.1]
t.column :ordered_media_attachment_ids, :bigint, array: true
t.column :media_descriptions, :text, array: true
t.column :poll_options, :string, array: true
- t.column :sensitive, :boolean
+ t.column :sensitive, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
end
diff --git a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
index e794824afc..b3b5ed3894 100644
--- a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
+++ b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
@@ -2,6 +2,6 @@
class ChangeCanonicalEmailBlocksNullable < ActiveRecord::Migration[6.1]
def change
- safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil }
+ safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil } # rubocop:disable Rails/ReversibleMigration
end
end
diff --git a/db/migrate/20240312105620_create_severed_relationships.rb b/db/migrate/20240312105620_create_severed_relationships.rb
index 1ed911cd55..3269298e80 100644
--- a/db/migrate/20240312105620_create_severed_relationships.rb
+++ b/db/migrate/20240312105620_create_severed_relationships.rb
@@ -14,8 +14,10 @@ class CreateSeveredRelationships < ActiveRecord::Migration[7.0]
t.integer :direction, null: false
# Those attributes are carried over from the `follows` table
+ # rubocop:disable Rails/ThreeStateBooleanColumn
t.boolean :show_reblogs
t.boolean :notify
+ # rubocop:enable Rails/ThreeStateBooleanColumn
t.string :languages, array: true
t.timestamps
diff --git a/db/migrate/20241123224956_create_terms_of_services.rb b/db/migrate/20241123224956_create_terms_of_services.rb
new file mode 100644
index 0000000000..dda2b0647c
--- /dev/null
+++ b/db/migrate/20241123224956_create_terms_of_services.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class CreateTermsOfServices < ActiveRecord::Migration[7.2]
+ def change
+ create_table :terms_of_services do |t|
+ t.text :text, null: false, default: ''
+ t.text :changelog, null: false, default: ''
+ t.datetime :published_at
+ t.datetime :notification_sent_at
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb
new file mode 100644
index 0000000000..69b5b4a025
--- /dev/null
+++ b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountPinAccountColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_pins
+ WHERE account_id IS NULL
+ OR target_account_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :account_pins, :account_id, false
+ change_column_null :account_pins, :target_account_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :account_pins, :account_id, true
+ change_column_null :account_pins, :target_account_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb
new file mode 100644
index 0000000000..cd57f3b2fa
--- /dev/null
+++ b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountAliasColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_aliases
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :account_aliases, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :account_aliases, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb
new file mode 100644
index 0000000000..80c57b1e39
--- /dev/null
+++ b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountDeletionRequestColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_deletion_requests
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :account_deletion_requests, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :account_deletion_requests, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb
new file mode 100644
index 0000000000..38ab6b9ad4
--- /dev/null
+++ b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountDomainBlockColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_domain_blocks
+ WHERE account_id IS NULL
+ OR domain IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :account_domain_blocks, :account_id, false
+ change_column_null :account_domain_blocks, :domain, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :account_domain_blocks, :account_id, true
+ change_column_null :account_domain_blocks, :domain, true
+ end
+ end
+end
diff --git a/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb
new file mode 100644
index 0000000000..092ad00e85
--- /dev/null
+++ b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAdminActionLogColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM admin_action_logs
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :admin_action_logs, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :admin_action_logs, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb
new file mode 100644
index 0000000000..052f0300a9
--- /dev/null
+++ b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAnnouncementMuteColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM announcement_mutes
+ WHERE account_id IS NULL
+ OR announcement_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :announcement_mutes, :account_id, false
+ change_column_null :announcement_mutes, :announcement_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :announcement_mutes, :account_id, true
+ change_column_null :announcement_mutes, :announcement_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb
new file mode 100644
index 0000000000..a877eccb3a
--- /dev/null
+++ b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAnnouncementReactionColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM announcement_reactions
+ WHERE account_id IS NULL
+ OR announcement_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :announcement_reactions, :account_id, false
+ change_column_null :announcement_reactions, :announcement_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :announcement_reactions, :account_id, true
+ change_column_null :announcement_reactions, :announcement_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb
new file mode 100644
index 0000000000..5eeb5f942a
--- /dev/null
+++ b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToCustomFilterColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM custom_filters
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :custom_filters, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :custom_filters, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb
new file mode 100644
index 0000000000..141b95b63a
--- /dev/null
+++ b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToScheduledStatusColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM scheduled_statuses
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :scheduled_statuses, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :scheduled_statuses, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb
new file mode 100644
index 0000000000..7066f69691
--- /dev/null
+++ b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToUserInviteRequestColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM user_invite_requests
+ WHERE user_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :user_invite_requests, :user_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :user_invite_requests, :user_id, true }
+ end
+end
diff --git a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
index 7788431cd5..ff4012ffa1 100644
--- a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
+++ b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
@@ -7,7 +7,7 @@ class RemoveSuspendedSilencedAccountFields < ActiveRecord::Migration[5.2]
class DomainBlock < ApplicationRecord
# Dummy class, to make migration possible across version changes
- enum severity: [:silence, :suspend, :noop]
+ enum :severity, [:silence, :suspend, :noop]
has_many :accounts, foreign_key: :domain, primary_key: :domain
end
diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
index b00f9df533..0bf9dbff03 100644
--- a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
+++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
@@ -6,7 +6,7 @@ class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2]
class MigrationAccount < ApplicationRecord
self.table_name = :accounts
scope :suspended, -> { where.not(suspended_at: nil) }
- enum suspension_origin: { local: 0, remote: 1 }, _prefix: true
+ enum :suspension_origin, { local: 0, remote: 1 }, prefix: true
end
def up
diff --git a/db/schema.rb b/db/schema.rb
index 70f2795235..7b9065f20c 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,12 +10,12 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
+ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "account_aliases", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.string "acct", default: "", null: false
t.string "uri", default: "", null: false
t.datetime "created_at", precision: nil, null: false
@@ -36,17 +36,17 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "account_deletion_requests", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id"], name: "index_account_deletion_requests_on_account_id"
end
create_table "account_domain_blocks", force: :cascade do |t|
- t.string "domain"
+ t.string "domain", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.index ["account_id", "domain"], name: "index_account_domain_blocks_on_account_id_and_domain", unique: true
end
@@ -82,8 +82,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "account_pins", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "target_account_id"
+ t.bigint "account_id", null: false
+ t.bigint "target_account_id", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "target_account_id"], name: "index_account_pins_on_account_id_and_target_account_id", unique: true
@@ -220,7 +220,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "admin_action_logs", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.string "action", default: "", null: false
t.string "target_type"
t.bigint "target_id"
@@ -234,8 +234,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "announcement_mutes", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "announcement_id"
+ t.bigint "account_id", null: false
+ t.bigint "announcement_id", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "announcement_id"], name: "index_announcement_mutes_on_account_id_and_announcement_id", unique: true
@@ -243,8 +243,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "announcement_reactions", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "announcement_id"
+ t.bigint "account_id", null: false
+ t.bigint "announcement_id", null: false
t.string "name", default: "", null: false
t.bigint "custom_emoji_id"
t.datetime "created_at", precision: nil, null: false
@@ -542,7 +542,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "custom_filters", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "expires_at", precision: nil
t.text "phrase", default: "", null: false
t.string "context", default: [], null: false, array: true
@@ -1236,7 +1236,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "scheduled_statuses", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "scheduled_at", precision: nil
t.jsonb "params"
t.index ["account_id"], name: "index_scheduled_statuses_on_account_id"
@@ -1474,6 +1474,15 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
t.index "lower((name)::text) text_pattern_ops", name: "index_tags_on_name_lower_btree", unique: true
end
+ create_table "terms_of_services", force: :cascade do |t|
+ t.text "text", default: "", null: false
+ t.text "changelog", default: "", null: false
+ t.datetime "published_at"
+ t.datetime "notification_sent_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
create_table "tombstones", force: :cascade do |t|
t.bigint "account_id"
t.string "uri", null: false
@@ -1492,7 +1501,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do
end
create_table "user_invite_requests", force: :cascade do |t|
- t.bigint "user_id"
+ t.bigint "user_id", null: false
t.text "text"
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
diff --git a/lib/mastodon/cli/progress_helper.rb b/lib/mastodon/cli/progress_helper.rb
index da9527ffd7..a0cfec69cf 100644
--- a/lib/mastodon/cli/progress_helper.rb
+++ b/lib/mastodon/cli/progress_helper.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-dev_null = Logger.new('/dev/null')
+dev_null = Logger.new(File::NULL)
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb
index b4ff4a12a0..fe58d1bce1 100644
--- a/lib/paperclip/blurhash_transcoder.rb
+++ b/lib/paperclip/blurhash_transcoder.rb
@@ -23,7 +23,7 @@ module Paperclip
image = Vips::Image.thumbnail(@file.path, 100)
[image.width, image.height, image.colourspace(:srgb).extract_band(0, n: 3).to_a.flatten]
else
- pixels = convert(':source -depth 8 RGB:-', source: File.expand_path(@file.path)).unpack('C*')
+ pixels = convert(':source -flatten -depth 8 -compress none RGB:-', source: File.expand_path(@file.path)).unpack('C*')
geometry = options.fetch(:file_geometry_parser).from_file(@file)
[geometry.width, geometry.height, pixels]
end
diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb
deleted file mode 100644
index 32bdb8a863..0000000000
--- a/lib/paperclip/gif_transcoder.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-# frozen_string_literal: true
-
-class GifReader
- attr_reader :animated
-
- EXTENSION_LABELS = [0xf9, 0x01, 0xff].freeze
- GIF_HEADERS = %w(GIF87a GIF89a).freeze
-
- class GifReaderException < StandardError; end
-
- class UnknownImageType < GifReaderException; end
-
- class CannotParseImage < GifReaderException; end
-
- def self.animated?(path)
- new(path).animated
- rescue GifReaderException
- false
- end
-
- def initialize(path, max_frames = 2)
- @path = path
- @nb_frames = 0
-
- File.open(path, 'rb') do |s|
- raise UnknownImageType unless GIF_HEADERS.include?(s.read(6))
-
- # Skip to "packed byte"
- s.seek(4, IO::SEEK_CUR)
-
- # "Packed byte" gives us the size of the GIF color table
- packed_byte, = s.read(1).unpack('C')
-
- # Skip background color and aspect ratio
- s.seek(2, IO::SEEK_CUR)
-
- if packed_byte & 0x80 != 0
- # GIF uses a global color table, skip it
- s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR)
- end
-
- # Now read data
- while @nb_frames < max_frames
- separator = s.read(1)
-
- case separator
- when ',' # Image block
- @nb_frames += 1
-
- # Skip to "packed byte"
- s.seek(8, IO::SEEK_CUR)
- packed_byte, = s.read(1).unpack('C')
-
- if packed_byte & 0x80 != 0
- # Image uses a local color table, skip it
- s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR)
- end
-
- # Skip lzw min code size
- raise InvalidValue unless s.read(1).unpack1('C') >= 2
-
- # Skip image data sub-blocks
- skip_sub_blocks!(s)
- when '!' # Extension block
- skip_extension_block!(s)
- when ';' # Trailer
- break
- else
- raise CannotParseImage
- end
- end
- end
-
- @animated = @nb_frames > 1
- end
-
- private
-
- def skip_extension_block!(file)
- if EXTENSION_LABELS.include?(file.read(1).unpack1('C'))
- block_size, = file.read(1).unpack('C')
- file.seek(block_size, IO::SEEK_CUR)
- end
-
- # Read until extension block end marker
- skip_sub_blocks!(file)
- end
-
- # Skip sub-blocks up until block end marker
- def skip_sub_blocks!(file)
- loop do
- size, = file.read(1).unpack('C')
-
- break if size.zero?
-
- file.seek(size, IO::SEEK_CUR)
- end
- end
-end
-
-module Paperclip
- # This transcoder is only to be used for the MediaAttachment model
- # to convert animated GIFs to videos
-
- class GifTranscoder < Paperclip::Processor
- def make
- return File.open(@file.path) unless needs_convert?
-
- final_file = Paperclip::Transcoder.make(file, options, attachment)
-
- if options[:style] == :original
- attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4"
- attachment.instance.file_content_type = 'video/mp4'
- attachment.instance.type = MediaAttachment.types[:gifv]
- end
-
- final_file
- end
-
- private
-
- def needs_convert?
- GifReader.animated?(file.path)
- end
- end
-end
diff --git a/lib/paperclip/gifv_transcoder.rb b/lib/paperclip/gifv_transcoder.rb
new file mode 100644
index 0000000000..4bb27e3b75
--- /dev/null
+++ b/lib/paperclip/gifv_transcoder.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+module Paperclip
+ # This transcoder is only to be used for the MediaAttachment model
+ # to convert animated GIFs and PNGs to videos
+
+ class GifvTranscoder < Paperclip::Processor
+ def make
+ final_file = Paperclip::Transcoder.make(file, options, attachment)
+
+ if options[:style] == :original
+ attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4"
+ attachment.instance.file_content_type = 'video/mp4'
+ attachment.instance.type = MediaAttachment.types[:gifv]
+ end
+
+ final_file
+ end
+ end
+end
diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb
index bdac85da50..7815d9ed52 100644
--- a/lib/sanitize_ext/sanitize_config.rb
+++ b/lib/sanitize_ext/sanitize_config.rb
@@ -137,7 +137,7 @@ class Sanitize
add_attributes: {
'a' => {
- 'rel' => 'nofollow noopener noreferrer',
+ 'rel' => 'nofollow noopener',
'target' => '_blank',
},
},
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 948a18ab98..b72c6387f7 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -592,7 +592,7 @@ namespace :mastodon do
end
def disable_log_stdout!
- dev_null = Logger.new('/dev/null')
+ dev_null = Logger.new(File::NULL)
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
diff --git a/package.json b/package.json
index 6751e62960..40fefd551c 100644
--- a/package.json
+++ b/package.json
@@ -46,6 +46,7 @@
"@babel/preset-react": "^7.22.3",
"@babel/preset-typescript": "^7.21.5",
"@babel/runtime": "^7.23.7",
+ "@csstools/stylelint-formatter-github": "^1.0.0",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
@@ -53,7 +54,7 @@
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
"@hello-pangea/dnd": "^17.0.0",
- "@rails/ujs": "7.1.500",
+ "@rails/ujs": "7.1.501",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
@@ -195,9 +196,9 @@
"lint-staged": "^15.0.0",
"prettier": "^3.3.3",
"react-test-renderer": "^18.2.0",
- "stylelint": "^16.0.2",
+ "stylelint": "^16.11.0",
"stylelint-config-prettier-scss": "^1.0.0",
- "stylelint-config-standard-scss": "^13.0.0",
+ "stylelint-config-standard-scss": "^14.0.0",
"typescript": "^5.0.4",
"webpack-dev-server": "^3.11.3"
},
diff --git a/public/emoji/sheet_13.png b/public/emoji/sheet_13.png
index 1ba12b6191..ade4077719 100644
Binary files a/public/emoji/sheet_13.png and b/public/emoji/sheet_13.png differ
diff --git a/spec/controllers/admin/export_domain_allows_controller_spec.rb b/spec/controllers/admin/export_domain_allows_controller_spec.rb
index 0a2e342620..0a56394193 100644
--- a/spec/controllers/admin/export_domain_allows_controller_spec.rb
+++ b/spec/controllers/admin/export_domain_allows_controller_spec.rb
@@ -32,15 +32,16 @@ RSpec.describe Admin::ExportDomainAllowsController do
it 'allows imported domains' do
post :import, params: { admin_import: { data: fixture_file_upload('domain_allows.csv') } }
- expect(response).to redirect_to(admin_instances_path)
+ expect(response)
+ .to redirect_to(admin_instances_path)
- # Header should not be imported
- expect(DomainAllow.where(domain: '#domain').present?).to be(false)
-
- # Domains should now be added
- get :export, params: { format: :csv }
- expect(response).to have_http_status(200)
- expect(response.body).to eq(domain_allows_csv_file)
+ # Header row should not be imported, but domains should
+ expect(DomainAllow)
+ .to_not exist(domain: '#domain')
+ expect(DomainAllow)
+ .to exist(domain: 'good.domain')
+ expect(DomainAllow)
+ .to exist(domain: 'better.domain')
end
it 'displays error on no file selected' do
diff --git a/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb b/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb
new file mode 100644
index 0000000000..b6d436a26f
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::DistributionsController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+ let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'POST #create' do
+ it 'returns http success' do
+ post :create, params: { terms_of_service_id: terms_of_service.id }
+
+ expect(response).to redirect_to(admin_terms_of_service_index_path)
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb
new file mode 100644
index 0000000000..6c19b973d0
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::DraftsController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'GET #show' do
+ it 'returns http success' do
+ get :show
+
+ expect(response).to have_http_status(:success)
+ end
+ end
+
+ describe 'PUT #update' do
+ subject { put :update, params: params }
+
+ let!(:terms) { Fabricate :terms_of_service, published_at: nil }
+
+ context 'with publishing params' do
+ let(:params) { { terms_of_service: { text: 'new' }, action_type: 'publish' } }
+
+ it 'publishes the record' do
+ expect { subject }
+ .to change(Admin::ActionLog, :count).by(1)
+
+ expect(response)
+ .to redirect_to(admin_terms_of_service_index_path)
+ expect(terms.reload.published_at)
+ .to_not be_nil
+ end
+ end
+
+ context 'with non publishing params' do
+ let(:params) { { terms_of_service: { text: 'new' }, action_type: 'save_draft' } }
+
+ it 'updates but does not publish the record' do
+ expect { subject }
+ .to_not change(Admin::ActionLog, :count)
+
+ expect(response)
+ .to redirect_to(admin_terms_of_service_draft_path)
+ expect(terms.reload.published_at)
+ .to be_nil
+ end
+ end
+
+ context 'with invalid params' do
+ let(:params) { { terms_of_service: { text: '' }, action_type: 'save_draft' } }
+
+ it 'does not update the record' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service/generates_controller_spec.rb b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb
new file mode 100644
index 0000000000..2f85fbc25f
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::GeneratesController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'GET #show' do
+ it 'returns http success' do
+ get :show
+
+ expect(response).to have_http_status(:success)
+ end
+ end
+
+ describe 'POST #create' do
+ subject { post :create, params: params }
+
+ context 'with valid params' do
+ let(:params) do
+ {
+ terms_of_service_generator: {
+ admin_email: 'test@host.example',
+ arbitration_address: '123 Main Street',
+ arbitration_website: 'https://host.example',
+ dmca_address: '123 DMCA Ave',
+ dmca_email: 'dmca@host.example',
+ domain: 'host.example',
+ jurisdiction: 'Europe',
+ },
+ }
+ end
+
+ it 'saves new record' do
+ expect { subject }
+ .to change(TermsOfService, :count).by(1)
+ expect(response)
+ .to redirect_to(admin_terms_of_service_draft_path)
+ end
+ end
+
+ context 'with invalid params' do
+ let(:params) do
+ {
+ terms_of_service_generator: {
+ admin_email: 'what the',
+ },
+ }
+ end
+
+ it 'does not save new record' do
+ expect { subject }
+ .to_not change(TermsOfService, :count)
+ expect(response)
+ .to have_http_status(200)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service/histories_controller_spec.rb b/spec/controllers/admin/terms_of_service/histories_controller_spec.rb
new file mode 100644
index 0000000000..d11ea2cd33
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/histories_controller_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::HistoriesController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'GET #show' do
+ it 'returns http success' do
+ get :show
+
+ expect(response).to have_http_status(:success)
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service/previews_controller_spec.rb b/spec/controllers/admin/terms_of_service/previews_controller_spec.rb
new file mode 100644
index 0000000000..5d923c9f30
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/previews_controller_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::PreviewsController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+ let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'GET #show' do
+ it 'returns http success' do
+ get :show, params: { terms_of_service_id: terms_of_service.id }
+
+ expect(response).to have_http_status(:success)
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service/tests_controller_spec.rb b/spec/controllers/admin/terms_of_service/tests_controller_spec.rb
new file mode 100644
index 0000000000..281c4d28c5
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service/tests_controller_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfService::TestsController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+ let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'POST #create' do
+ it 'returns http success' do
+ post :create, params: { terms_of_service_id: terms_of_service.id }
+
+ expect(response).to redirect_to(admin_terms_of_service_preview_path(terms_of_service))
+ end
+ end
+end
diff --git a/spec/controllers/admin/terms_of_service_controller_spec.rb b/spec/controllers/admin/terms_of_service_controller_spec.rb
new file mode 100644
index 0000000000..b7fdb90446
--- /dev/null
+++ b/spec/controllers/admin/terms_of_service_controller_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Admin::TermsOfServiceController do
+ render_views
+
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ before do
+ sign_in user, scope: :user
+ end
+
+ describe 'GET #index' do
+ it 'returns http success' do
+ get :index
+
+ expect(response).to have_http_status(:success)
+ end
+ end
+end
diff --git a/spec/controllers/settings/verifications_controller_spec.rb b/spec/controllers/settings/verifications_controller_spec.rb
deleted file mode 100644
index 1a8df485b5..0000000000
--- a/spec/controllers/settings/verifications_controller_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::VerificationsController do
- render_views
-
- let!(:user) { Fabricate(:user) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- get :show
- end
-
- it 'returns http success with private cache control headers', :aggregate_failures do
- expect(response)
- .to have_http_status(200)
- .and have_attributes(
- headers: include(
- 'Cache-Control' => 'private, no-store'
- )
- )
- end
- end
-end
diff --git a/spec/fabricators/status_edit_fabricator.rb b/spec/fabricators/status_edit_fabricator.rb
new file mode 100644
index 0000000000..4df61dcfda
--- /dev/null
+++ b/spec/fabricators/status_edit_fabricator.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+Fabricator(:status_edit) do
+ status { Fabricate.build(:status) }
+end
diff --git a/spec/fabricators/terms_of_service_fabricator.rb b/spec/fabricators/terms_of_service_fabricator.rb
new file mode 100644
index 0000000000..2b0cfabcfb
--- /dev/null
+++ b/spec/fabricators/terms_of_service_fabricator.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+Fabricator(:terms_of_service) do
+ text { Faker::Lorem.paragraph }
+ changelog { Faker::Lorem.paragraph }
+ published_at { Time.zone.now }
+ notification_sent_at { Time.zone.now }
+end
diff --git a/spec/fixtures/files/600x400-animated.gif b/spec/fixtures/files/600x400-animated.gif
new file mode 100644
index 0000000000..1a773c0af1
Binary files /dev/null and b/spec/fixtures/files/600x400-animated.gif differ
diff --git a/spec/fixtures/files/600x400-animated.png b/spec/fixtures/files/600x400-animated.png
new file mode 100644
index 0000000000..6430fceabb
Binary files /dev/null and b/spec/fixtures/files/600x400-animated.png differ
diff --git a/spec/fixtures/files/600x400.gif b/spec/fixtures/files/600x400.gif
new file mode 100644
index 0000000000..bab39cb6f7
Binary files /dev/null and b/spec/fixtures/files/600x400.gif differ
diff --git a/spec/fixtures/files/attachment.gif b/spec/fixtures/files/attachment.gif
deleted file mode 100644
index 89dd73ad3e..0000000000
Binary files a/spec/fixtures/files/attachment.gif and /dev/null differ
diff --git a/spec/lib/sanitize/config_spec.rb b/spec/lib/sanitize/config_spec.rb
index b1cab85827..b4c849c427 100644
--- a/spec/lib/sanitize/config_spec.rb
+++ b/spec/lib/sanitize/config_spec.rb
@@ -39,15 +39,15 @@ RSpec.describe Sanitize::Config do
end
it 'keeps a with href' do
- expect(Sanitize.fragment('Test', subject)).to eq 'Test'
+ expect(Sanitize.fragment('Test', subject)).to eq 'Test'
end
it 'keeps a with translate="no"' do
- expect(Sanitize.fragment('Test', subject)).to eq 'Test'
+ expect(Sanitize.fragment('Test', subject)).to eq 'Test'
end
it 'removes "translate" attribute with invalid value' do
- expect(Sanitize.fragment('Test', subject)).to eq 'Test'
+ expect(Sanitize.fragment('Test', subject)).to eq 'Test'
end
it 'removes a with unparsable href' do
@@ -55,7 +55,7 @@ RSpec.describe Sanitize::Config do
end
it 'keeps a with supported scheme and no host' do
- expect(Sanitize.fragment('Test', subject)).to eq 'Test'
+ expect(Sanitize.fragment('Test', subject)).to eq 'Test'
end
it 'sanitizes math to LaTeX' do
diff --git a/spec/lib/text_formatter_spec.rb b/spec/lib/text_formatter_spec.rb
index bde17bb79c..a71655ed2e 100644
--- a/spec/lib/text_formatter_spec.rb
+++ b/spec/lib/text_formatter_spec.rb
@@ -50,7 +50,7 @@ RSpec.describe TextFormatter do
end
end
- context 'when given a stand-alone google URL' do
+ context 'when given a stand-alone Google URL' do
let(:text) { 'http://google.com' }
it 'matches the full URL' do
@@ -280,6 +280,26 @@ RSpec.describe TextFormatter do
end
end
+ context 'when given a lengthy URL' do
+ let(:text) { 'lorem https://prepitaph.org/wip/web-dovespair/ ipsum' }
+
+ it 'truncates the URL' do
+ expect(subject).to include 'https://'
+ expect(subject).to include 'prepitaph.org/wip/web-dovespai'
+ expect(subject).to include 'r/'
+ end
+ end
+
+ context 'when given a sufficiently short URL' do
+ let(:text) { 'lorem https://prepitaph.org/wip/web-devspair/ ipsum' }
+
+ it 'does not truncate the URL' do
+ expect(subject).to include 'https://'
+ expect(subject).to include 'prepitaph.org/wip/web-devspair/'
+ expect(subject).to include ''
+ end
+ end
+
context 'when given text containing a hashtag' do
let(:text) { '#hashtag' }
diff --git a/spec/mailers/previews/user_mailer_preview.rb b/spec/mailers/previews/user_mailer_preview.rb
index 2722538e1a..e677a24df2 100644
--- a/spec/mailers/previews/user_mailer_preview.rb
+++ b/spec/mailers/previews/user_mailer_preview.rb
@@ -98,4 +98,9 @@ class UserMailerPreview < ActionMailer::Preview
def failed_2fa
UserMailer.failed_2fa(User.first, '127.0.0.1', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0', Time.now.utc)
end
+
+ # Preview this email at http://localhost:3000/rails/mailers/user_mailer/terms_of_service_changed
+ def terms_of_service_changed
+ UserMailer.terms_of_service_changed(User.first, TermsOfService.live.first)
+ end
end
diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb
index 0257465817..0a128355b5 100644
--- a/spec/mailers/user_mailer_spec.rb
+++ b/spec/mailers/user_mailer_spec.rb
@@ -272,4 +272,16 @@ RSpec.describe UserMailer do
.and(have_body_text(I18n.t('user_mailer.backup_ready.explanation')))
end
end
+
+ describe '#terms_of_service_changed' do
+ let(:terms) { Fabricate :terms_of_service }
+ let(:mail) { described_class.terms_of_service_changed(receiver, terms) }
+
+ it 'renders terms_of_service_changed mail' do
+ expect(mail)
+ .to be_present
+ .and(have_subject(I18n.t('user_mailer.terms_of_service_changed.subject')))
+ .and(have_body_text(I18n.t('user_mailer.terms_of_service_changed.changelog')))
+ end
+ end
end
diff --git a/spec/models/account_pin_spec.rb b/spec/models/account_pin_spec.rb
new file mode 100644
index 0000000000..b3460da2fb
--- /dev/null
+++ b/spec/models/account_pin_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe AccountPin do
+ describe 'Associations' do
+ it { is_expected.to belong_to(:account).required }
+ it { is_expected.to belong_to(:target_account).required }
+ end
+
+ describe 'Validations' do
+ describe 'the follow relationship' do
+ subject { Fabricate.build :account_pin, account: account }
+
+ let(:account) { Fabricate :account }
+ let(:target_account) { Fabricate :account }
+
+ context 'when account is following target account' do
+ before { account.follow!(target_account) }
+
+ it { is_expected.to allow_value(target_account).for(:target_account).against(:base) }
+ end
+
+ context 'when account is not following target account' do
+ it { is_expected.to_not allow_value(target_account).for(:target_account).against(:base).with_message(not_following_message) }
+
+ def not_following_message
+ I18n.t('accounts.pin_errors.following')
+ end
+ end
+ end
+ end
+end
diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb
index 18b791a73a..517cc4f6ae 100644
--- a/spec/models/custom_filter_spec.rb
+++ b/spec/models/custom_filter_spec.rb
@@ -7,19 +7,8 @@ RSpec.describe CustomFilter do
it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_presence_of(:context) }
- it 'requires non-empty of context' do
- record = described_class.new(context: [])
- record.valid?
-
- expect(record).to model_have_error_on_field(:context)
- end
-
- it 'requires valid context value' do
- record = described_class.new(context: ['invalid'])
- record.valid?
-
- expect(record).to model_have_error_on_field(:context)
- end
+ it { is_expected.to_not allow_values([], %w(invalid)).for(:context) }
+ it { is_expected.to allow_values(%w(home)).for(:context) }
end
describe 'Normalizations' do
diff --git a/spec/models/form/import_spec.rb b/spec/models/form/import_spec.rb
index 109bc88d4e..e1c1538de9 100644
--- a/spec/models/form/import_spec.rb
+++ b/spec/models/form/import_spec.rb
@@ -61,10 +61,7 @@ RSpec.describe Form::Import do
let(:import_type) { 'following' }
let(:import_file) { 'boop.ogg' }
- it 'has errors' do
- # NOTE: not testing more specific error because we don't know the string to match
- expect(subject).to model_have_error_on_field(:data)
- end
+ it { is_expected.to_not allow_value(data).for(:data) }
end
context 'when importing more follows than allowed' do
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index 5f91ae0967..cce4b30479 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -90,7 +90,7 @@ RSpec.describe MediaAttachment, :attachment_processing do
media.destroy
end
- it 'saves media attachment with correct file and size metadata' do
+ it 'saves metadata and generates styles' do
expect(media)
.to be_persisted
.and be_processing_complete
@@ -98,18 +98,28 @@ RSpec.describe MediaAttachment, :attachment_processing do
file: be_present,
type: eq('image'),
file_content_type: eq(content_type),
- file_file_name: end_with(extension)
+ file_file_name: end_with(extension),
+ blurhash: have_attributes(size: eq(36))
)
- # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension
- expect(Rack::Mime.mime_type(extension, nil)).to eq content_type
-
# Strip original file name
expect(media.file_file_name)
.to_not start_with '600x400'
+ # Generate styles
+ expect(FastImage.size(media.file.path(:original)))
+ .to eq [600, 400]
+ expect(FastImage.size(media.file.path(:small)))
+ .to eq [588, 392]
+
+ # Use extension recognized by Rack::Mime (used by PublicFileServerMiddleware)
+ expect(media.file.path(:original))
+ .to end_with(extension)
+ expect(media.file.path(:small))
+ .to end_with(extension)
+
# Set meta for original and thumbnail
- expect(media.file.meta.deep_symbolize_keys)
+ expect(media_metadata)
.to include(
original: include(
width: eq(600),
@@ -122,6 +132,60 @@ RSpec.describe MediaAttachment, :attachment_processing do
aspect: eq(1.5)
)
)
+
+ # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension
+ expect(Rack::Mime.mime_type(extension, nil)).to eq content_type
+ end
+ end
+
+ shared_examples 'animated 600x400 image' do
+ after do
+ media.destroy
+ end
+
+ it 'saves metadata and generates styles' do
+ expect(media)
+ .to be_persisted
+ .and be_processing_complete
+ .and have_attributes(
+ file: be_present,
+ type: eq('gifv'),
+ file_content_type: eq('video/mp4'),
+ file_file_name: end_with('.mp4'),
+ blurhash: have_attributes(size: eq(36))
+ )
+
+ # Strip original file name
+ expect(media.file_file_name)
+ .to_not start_with '600x400'
+
+ # Transcode to MP4
+ expect(media.file.path(:original))
+ .to end_with('.mp4')
+
+ # Generate static thumbnail
+ expect(FastImage.size(media.file.path(:small)))
+ .to eq [600, 400]
+ expect(FastImage.animated?(media.file.path(:small)))
+ .to be false
+ expect(media.file.path(:small))
+ .to end_with('.png')
+
+ # Set meta for styles
+ expect(media_metadata)
+ .to include(
+ original: include(
+ width: eq(600),
+ height: eq(400),
+ duration: eq(3),
+ frame_rate: '1/1'
+ ),
+ small: include(
+ width: eq(600),
+ height: eq(400),
+ aspect: eq(1.5)
+ )
+ )
end
end
@@ -137,10 +201,10 @@ RSpec.describe MediaAttachment, :attachment_processing do
it_behaves_like 'static 600x400 image', 'image/png', '.png'
end
- describe 'monochrome jpg' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) }
+ describe 'gif' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.gif')) }
- it_behaves_like 'static 600x400 image', 'image/png', '.png'
+ it_behaves_like 'static 600x400 image', 'image/gif', '.gif'
end
describe 'webp' do
@@ -161,6 +225,12 @@ RSpec.describe MediaAttachment, :attachment_processing do
it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
end
+ describe 'monochrome jpg' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) }
+
+ it_behaves_like 'static 600x400 image', 'image/png', '.png'
+ end
+
describe 'base64-encoded image' do
let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" }
let(:media) { Fabricate(:media_attachment, file: base64_attachment) }
@@ -169,51 +239,15 @@ RSpec.describe MediaAttachment, :attachment_processing do
end
describe 'animated gif' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) }
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.gif')) }
- it 'sets correct file metadata' do
- expect(media)
- .to have_attributes(
- type: eq('gifv'),
- file_content_type: eq('video/mp4')
- )
- expect(media_metadata)
- .to include(
- original: include(
- width: eq(128),
- height: eq(128)
- )
- )
- end
+ it_behaves_like 'animated 600x400 image'
end
- describe 'static gif' do
- fixtures = [
- { filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 },
- { filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 },
- ]
+ describe 'animated png' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.png')) }
- fixtures.each do |fixture|
- context fixture[:filename] do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture(fixture[:filename])) }
-
- it 'sets correct file metadata' do
- expect(media)
- .to have_attributes(
- type: eq('image'),
- file_content_type: eq('image/gif')
- )
- expect(media_metadata)
- .to include(
- original: include(
- width: eq(fixture[:width]),
- height: eq(fixture[:height]),
- aspect: eq(fixture[:aspect])
- )
- )
- end
- end
- end
+ it_behaves_like 'animated 600x400 image'
end
describe 'ogg with cover art' do
diff --git a/spec/models/mention_spec.rb b/spec/models/mention_spec.rb
index 3a9b9fddf2..67c22b5d1f 100644
--- a/spec/models/mention_spec.rb
+++ b/spec/models/mention_spec.rb
@@ -3,8 +3,14 @@
require 'rails_helper'
RSpec.describe Mention do
- describe 'validations' do
+ describe 'Associations' do
it { is_expected.to belong_to(:account).required }
it { is_expected.to belong_to(:status).required }
end
+
+ describe 'Validations' do
+ subject { Fabricate.build :mention }
+
+ it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:status_id) }
+ end
end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index e62b2e9094..0bee7dfed1 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -105,25 +105,32 @@ RSpec.describe Report do
describe 'history' do
subject(:action_logs) { report.history }
- let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id], created_at: 3.days.ago, updated_at: 1.day.ago) }
+ let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id]) }
let(:target_account) { Fabricate(:account) }
let(:status) { Fabricate(:status) }
let(:account_warning) { Fabricate(:account_warning, report_id: report.id) }
- before do
- Fabricate(:action_log, target_type: 'Report', account_id: target_account.id, target_id: report.id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'Account', account_id: target_account.id, target_id: report.target_account_id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'Status', account_id: target_account.id, target_id: status.id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'AccountWarning', account_id: target_account.id, target_id: account_warning.id, created_at: 2.days.ago)
- end
+ let!(:matched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning', target_id: account_warning.id) }
+ let!(:matched_type_account) { Fabricate(:action_log, target_type: 'Account', target_id: report.target_account_id) }
+ let!(:matched_type_report) { Fabricate(:action_log, target_type: 'Report', target_id: report.id) }
+ let!(:matched_type_status) { Fabricate(:action_log, target_type: 'Status', target_id: status.id) }
+
+ let!(:unmatched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning') }
+ let!(:unmatched_type_account) { Fabricate(:action_log, target_type: 'Account') }
+ let!(:unmatched_type_report) { Fabricate(:action_log, target_type: 'Report') }
+ let!(:unmatched_type_status) { Fabricate(:action_log, target_type: 'Status') }
it 'returns expected logs' do
expect(action_logs)
.to have_attributes(count: 4)
- .and include(have_attributes(target_type: 'Account'))
- .and include(have_attributes(target_type: 'AccountWarning'))
- .and include(have_attributes(target_type: 'Report'))
- .and include(have_attributes(target_type: 'Status'))
+ .and include(matched_type_account_warning)
+ .and include(matched_type_account)
+ .and include(matched_type_report)
+ .and include(matched_type_status)
+ .and not_include(unmatched_type_account_warning)
+ .and not_include(unmatched_type_account)
+ .and not_include(unmatched_type_report)
+ .and not_include(unmatched_type_status)
end
end
@@ -149,13 +156,13 @@ RSpec.describe Report do
end
end
- describe 'validations' do
+ describe 'Validations' do
let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
it 'is invalid if comment is longer than character limit and reporter is local' do
- report = Fabricate.build(:report, comment: comment_over_limit)
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:comment)
+ report = Fabricate.build(:report)
+
+ expect(report).to_not allow_value(comment_over_limit).for(:comment)
end
it 'is valid if comment is longer than character limit and reporter is not local' do
@@ -164,16 +171,16 @@ RSpec.describe Report do
end
it 'is invalid if it references invalid rules' do
- report = Fabricate.build(:report, category: :violation, rule_ids: [-1])
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:rule_ids)
+ report = Fabricate.build(:report, category: :violation)
+
+ expect(report).to_not allow_value([-1]).for(:rule_ids)
end
it 'is invalid if it references rules but category is not "violation"' do
rule = Fabricate(:rule)
- report = Fabricate.build(:report, category: :spam, rule_ids: rule.id)
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:rule_ids)
+ report = Fabricate.build(:report, category: :spam)
+
+ expect(report).to_not allow_value(rule.id).for(:rule_ids)
end
def comment_over_limit
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
index 18dd26be94..a1cc6a064f 100644
--- a/spec/models/tag_spec.rb
+++ b/spec/models/tag_spec.rb
@@ -5,7 +5,39 @@ require 'rails_helper'
RSpec.describe Tag do
include_examples 'Reviewable'
- describe 'validations' do
+ describe 'Validations' do
+ describe 'name' do
+ context 'with a new record' do
+ subject { Fabricate.build :tag, name: 'original' }
+
+ it { is_expected.to allow_value('changed').for(:name) }
+ end
+
+ context 'with an existing record' do
+ subject { Fabricate :tag, name: 'original' }
+
+ it { is_expected.to_not allow_value('changed').for(:name).with_message(previous_name_error_message) }
+ end
+ end
+
+ describe 'display_name' do
+ context 'with a new record' do
+ subject { Fabricate.build :tag, name: 'original', display_name: 'OriginalDisplayName' }
+
+ it { is_expected.to allow_value('ChangedDisplayName').for(:display_name) }
+ end
+
+ context 'with an existing record' do
+ subject { Fabricate :tag, name: 'original', display_name: 'OriginalDisplayName' }
+
+ it { is_expected.to_not allow_value('ChangedDisplayName').for(:display_name).with_message(previous_name_error_message) }
+ end
+ end
+
+ def previous_name_error_message
+ I18n.t('tags.does_not_match_previous_name')
+ end
+
it 'invalid with #' do
expect(described_class.new(name: '#hello_world')).to_not be_valid
end
diff --git a/spec/models/terms_of_service_spec.rb b/spec/models/terms_of_service_spec.rb
new file mode 100644
index 0000000000..d32ba4e642
--- /dev/null
+++ b/spec/models/terms_of_service_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe TermsOfService do
+ describe '#scope_for_notification' do
+ subject { terms_of_service.scope_for_notification }
+
+ let(:published_at) { Time.now.utc }
+ let(:terms_of_service) { Fabricate(:terms_of_service, published_at: published_at) }
+ let(:user_before) { Fabricate(:user, created_at: published_at - 2.days) }
+ let(:user_before_unconfirmed) { Fabricate(:user, created_at: published_at - 2.days, confirmed_at: nil) }
+ let(:user_before_suspended) { Fabricate(:user, created_at: published_at - 2.days) }
+ let(:user_after) { Fabricate(:user, created_at: published_at + 1.hour) }
+
+ before do
+ user_before_suspended.account.suspend!
+ user_before_unconfirmed
+ user_before
+ user_after
+ end
+
+ it 'includes only users created before the terms of service were published' do
+ expect(subject.pluck(:id)).to match_array(user_before.id)
+ end
+ end
+end
diff --git a/spec/policies/terms_of_service_policy_spec.rb b/spec/policies/terms_of_service_policy_spec.rb
new file mode 100644
index 0000000000..18345d9fd0
--- /dev/null
+++ b/spec/policies/terms_of_service_policy_spec.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe TermsOfServicePolicy do
+ subject { described_class }
+
+ let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
+ let(:john) { Fabricate(:account) }
+
+ permissions :index?, :create? do
+ it { is_expected.to permit(admin, TermsOfService) }
+ it { is_expected.to_not permit(john, TermsOfService) }
+ end
+
+ permissions :update?, :destroy? do
+ let(:terms) { Fabricate(:terms_of_service, published_at: published) }
+
+ context 'with an unpublished terms' do
+ let(:published) { nil }
+
+ it { is_expected.to permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+
+ context 'with a published terms' do
+ let(:published) { 5.days.ago }
+
+ it { is_expected.to_not permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+ end
+
+ permissions :distribute? do
+ let(:terms) { Fabricate(:terms_of_service, published_at: published, notification_sent_at: notification) }
+
+ context 'with notification already sent' do
+ let(:notification) { 3.days.ago }
+
+ context 'with published true' do
+ let(:published) { 5.days.ago }
+
+ it { is_expected.to_not permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+
+ context 'with published false' do
+ let(:published) { nil }
+
+ it { is_expected.to_not permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+ end
+
+ context 'with notification not yet sent' do
+ let(:notification) { nil }
+
+ context 'with published true' do
+ let(:published) { 5.days.ago }
+
+ it { is_expected.to permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+
+ context 'with published false' do
+ let(:published) { nil }
+
+ it { is_expected.to_not permit(admin, terms) }
+ it { is_expected.to_not permit(john, terms) }
+ end
+ end
+ end
+end
diff --git a/spec/requests/api/v1/instances/terms_of_services_spec.rb b/spec/requests/api/v1/instances/terms_of_services_spec.rb
new file mode 100644
index 0000000000..5feb49f48d
--- /dev/null
+++ b/spec/requests/api/v1/instances/terms_of_services_spec.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Terms of Service' do
+ describe 'GET /api/v1/instance/terms_of_service' do
+ before do
+ Fabricate(:terms_of_service)
+ end
+
+ it 'returns http success' do
+ get api_v1_instance_terms_of_service_path
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/json')
+
+ expect(response.parsed_body)
+ .to be_present
+ .and include(:content)
+ end
+ end
+end
diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb
index d7d0b92f11..3340e26b98 100644
--- a/spec/requests/api/v1/media_spec.rb
+++ b/spec/requests/api/v1/media_spec.rb
@@ -137,7 +137,7 @@ RSpec.describe 'Media' do
end
context 'with image/gif', :attachment_processing do
- let(:params) { { file: fixture_file_upload('attachment.gif', 'image/gif') } }
+ let(:params) { { file: fixture_file_upload('600x400.gif', 'image/gif') } }
it_behaves_like 'a successful media upload', 'image'
end
diff --git a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
index 95b4d7dcd2..a69e1c2776 100644
--- a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
+++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
@@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do
subject { serialized_record_json(record, described_class) }
- let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 }
+ let(:record) { Fabricate.build :account_relationship_severance_event, id: 123, created_at: DateTime.new(2024, 11, 28, 16, 20, 0) }
describe 'serialization' do
it 'returns expected values' do
@@ -15,4 +15,10 @@ RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do
)
end
end
+
+ context 'when created_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
end
diff --git a/spec/serializers/rest/account_serializer/field_serializer_spec.rb b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
new file mode 100644
index 0000000000..57f2b529c5
--- /dev/null
+++ b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AccountSerializer::FieldSerializer do
+ subject { serialized_record_json(field, described_class) }
+
+ let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
+ let(:user) { Fabricate(:user) }
+ let(:account) { user.account }
+
+ context 'when verified_at is populated' do
+ let(:field) { Account::Field.new(account, 'name' => 'Foo', 'value' => 'Bar', 'verified_at' => default_datetime) }
+
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['verified_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb
index 7daa0796a9..37c6a776b0 100644
--- a/spec/serializers/rest/account_serializer_spec.rb
+++ b/spec/serializers/rest/account_serializer_spec.rb
@@ -5,6 +5,7 @@ require 'rails_helper'
RSpec.describe REST::AccountSerializer do
subject { serialized_record_json(account, described_class) }
+ let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
let(:role) { Fabricate(:user_role, name: 'Role', highlighted: true) }
let(:user) { Fabricate(:user, role: role) }
let(:account) { user.account }
@@ -44,4 +45,24 @@ RSpec.describe REST::AccountSerializer do
expect(subject['memorial']).to be true
end
end
+
+ context 'when created_at is populated' do
+ before do
+ account.account_stat.update!(created_at: default_datetime)
+ end
+
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+
+ context 'when last_status_at is populated' do
+ before do
+ account.account_stat.update!(last_status_at: default_datetime)
+ end
+
+ it 'is serialized as yyyy-mm-dd' do
+ expect(subject['last_status_at']).to eq('2024-11-28')
+ end
+ end
end
diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb
index 0f335d1215..ea2e48fbb4 100644
--- a/spec/serializers/rest/account_warning_serializer_spec.rb
+++ b/spec/serializers/rest/account_warning_serializer_spec.rb
@@ -14,6 +14,7 @@ RSpec.describe REST::AccountWarningSerializer do
'id' => be_a(String).and(eq('123')),
'status_ids' => be_a(Array).and(eq(['456', '789']))
)
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
end
end
end
diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb
index 58f58a997b..ac7cec0bae 100644
--- a/spec/serializers/rest/admin/account_serializer_spec.rb
+++ b/spec/serializers/rest/admin/account_serializer_spec.rb
@@ -5,6 +5,14 @@ require 'rails_helper'
RSpec.describe REST::Admin::AccountSerializer do
subject { serialized_record_json(record, described_class) }
+ context 'when created_at is populated' do
+ let(:record) { Fabricate :account, user: Fabricate(:user) }
+
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+
describe 'created_by_application_id' do
context 'when account is application-created' do
let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) }
diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb
index ed6067c0d2..a2bd8fbfa2 100644
--- a/spec/serializers/rest/admin/cohort_serializer_spec.rb
+++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb
@@ -14,6 +14,8 @@ RSpec.describe REST::Admin::CohortSerializer do
'data' => be_a(Array),
'period' => /2024-01-01/
)
+ expect { DateTime.rfc3339(subject['period']) }.to_not raise_error
+ subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error }
end
end
end
diff --git a/spec/serializers/rest/admin/domain_allow_serializer_spec.rb b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
new file mode 100644
index 0000000000..39c013d31c
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::DomainAllowSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:domain_allow) }
+
+ context 'when created_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/domain_block_serializer_spec.rb b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
new file mode 100644
index 0000000000..5ab3ddc169
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::DomainBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:domain_block) }
+
+ context 'when created_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
new file mode 100644
index 0000000000..2a1501a158
--- /dev/null
+++ b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::EmailDomainBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:email_domain_block) }
+
+ context 'when created_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/ip_block_serializer_spec.rb b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
new file mode 100644
index 0000000000..c1239b5057
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::IpBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:ip_block) }
+
+ context 'when created_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+
+ context 'when expires_at is populated' do
+ let(:record) { Fabricate(:ip_block, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0)) }
+
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/ip_serializer_spec.rb b/spec/serializers/rest/admin/ip_serializer_spec.rb
new file mode 100644
index 0000000000..f93eada759
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::IpSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { UserIp.new(used_at: 3.days.ago) }
+
+ context 'when used_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['used_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/measure_serializer_spec.rb b/spec/serializers/rest/admin/measure_serializer_spec.rb
new file mode 100644
index 0000000000..08c7170a4a
--- /dev/null
+++ b/spec/serializers/rest/admin/measure_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::MeasureSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:start_at) { 2.days.ago }
+ let(:end_at) { Time.now.utc }
+ let(:params) { ActionController::Parameters.new({ instance_accounts: [123] }) }
+ let(:record) { Admin::Metrics::Measure::ActiveUsersMeasure.new(start_at, end_at, params) }
+
+ context 'when start_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error }
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/report_serializer_spec.rb b/spec/serializers/rest/admin/report_serializer_spec.rb
new file mode 100644
index 0000000000..c0f841d6bf
--- /dev/null
+++ b/spec/serializers/rest/admin/report_serializer_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::ReportSerializer do
+ subject { serialized_record_json(report, described_class) }
+
+ let(:report) { Fabricate(:report) }
+
+ context 'with created_at' do
+ it 'is serialized as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+
+ context 'with action_taken_at' do
+ let(:acting_account) { Fabricate(:account) }
+
+ before do
+ report.resolve!(acting_account)
+ end
+
+ it 'is serialized as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/announcement_serializer_spec.rb b/spec/serializers/rest/announcement_serializer_spec.rb
new file mode 100644
index 0000000000..6b746e5c2f
--- /dev/null
+++ b/spec/serializers/rest/announcement_serializer_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AnnouncementSerializer do
+ subject do
+ serialized_record_json(
+ announcement,
+ described_class,
+ options: {
+ scope: current_user,
+ scope_name: :current_user,
+ }
+ )
+ end
+
+ let(:current_user) { Fabricate(:user) }
+ let(:announcement) { Fabricate(:announcement, starts_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) }
+
+ context 'when date fields are populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['starts_at']) }.to_not raise_error
+ expect { DateTime.rfc3339(subject['ends_at']) }.to_not raise_error
+ expect { DateTime.rfc3339(subject['published_at']) }.to_not raise_error
+ expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb
index d7bd078e1d..dc6e86e909 100644
--- a/spec/serializers/rest/extended_description_serializer_spec.rb
+++ b/spec/serializers/rest/extended_description_serializer_spec.rb
@@ -5,9 +5,11 @@ require 'rails_helper'
RSpec.describe REST::ExtendedDescriptionSerializer do
subject { serialized_record_json(record, described_class) }
+ let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
+
describe 'serialization' do
context 'with text present' do
- let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) }
+ let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: default_datetime }
it 'returns expected values' do
expect(subject)
@@ -15,19 +17,19 @@ RSpec.describe REST::ExtendedDescriptionSerializer do
'content' => eq(<<~HTML),
Hello world
HTML - 'updated_at' => eq('2024-01-01') + 'updated_at' => eq('2024-11-28T16:20:00+00:00') ) end end context 'with text missing' do - let(:record) { ExtendedDescription.new text: nil, updated_at: Date.new(2024, 1, 1) } + let(:record) { ExtendedDescription.new text: nil, updated_at: default_datetime } it 'returns expected values' do expect(subject) .to include( 'content' => eq(''), - 'updated_at' => eq('2024-01-01') + 'updated_at' => eq('2024-11-28T16:20:00+00:00') ) end end diff --git a/spec/serializers/rest/featured_tag_serializer_spec.rb b/spec/serializers/rest/featured_tag_serializer_spec.rb new file mode 100644 index 0000000000..883fce1aa7 --- /dev/null +++ b/spec/serializers/rest/featured_tag_serializer_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::FeaturedTagSerializer do + subject do + serialized_record_json( + featured_tag, + described_class + ) + end + + let(:featured_tag) { Fabricate :featured_tag } + + context 'when last_status_at is populated' do + before do + featured_tag.increment(DateTime.new(2024, 11, 28, 16, 20, 0)) + end + + it 'is serialized as yyyy-mm-dd' do + expect(subject['last_status_at']).to eq('2024-11-28') + end + end +end diff --git a/spec/serializers/rest/filter_serializer_spec.rb b/spec/serializers/rest/filter_serializer_spec.rb new file mode 100644 index 0000000000..c2c0e1635a --- /dev/null +++ b/spec/serializers/rest/filter_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::FilterSerializer do + subject do + serialized_record_json( + filter, + described_class + ) + end + + let(:filter) { Fabricate :custom_filter, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0) } + + context 'when expires_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/marker_serializer_spec.rb b/spec/serializers/rest/marker_serializer_spec.rb new file mode 100644 index 0000000000..8b8285c9e8 --- /dev/null +++ b/spec/serializers/rest/marker_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::MarkerSerializer do + subject do + serialized_record_json( + marker, + described_class + ) + end + + let(:marker) { Fabricate :marker } + + context 'when updated_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/muted_account_serializer_spec.rb b/spec/serializers/rest/muted_account_serializer_spec.rb new file mode 100644 index 0000000000..2a6dd9fe17 --- /dev/null +++ b/spec/serializers/rest/muted_account_serializer_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::MutedAccountSerializer do + subject do + serialized_record_json( + mutee, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:account) { current_user.account } + let(:mutee) { Fabricate(:account, username: 'mutee') } + + context 'when mute_expires_at is populated and non-nil' do + before do + account.follow!(mutee) + account.mute!(mutee, duration: 1.day) + end + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['mute_expires_at']) }.to_not raise_error + end + end + + context 'when mute has no duration' do + before do + account.follow!(mutee) + account.mute!(mutee) + end + + it 'has a nil mute_expires_at' do + expect(subject['mute_expires_at']).to be_nil + end + end +end diff --git a/spec/serializers/rest/notification_group_serializer_spec.rb b/spec/serializers/rest/notification_group_serializer_spec.rb new file mode 100644 index 0000000000..2a1293292d --- /dev/null +++ b/spec/serializers/rest/notification_group_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationGroupSerializer do + subject do + serialized_record_json( + notification_group, + described_class + ) + end + + let(:notification_group) { NotificationGroup.new pagination_data: { latest_notification_at: 3.days.ago }, notification: Fabricate(:notification), sample_accounts: [] } + + context 'when latest_page_notification_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['latest_page_notification_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/notification_request_serializer_spec.rb b/spec/serializers/rest/notification_request_serializer_spec.rb new file mode 100644 index 0000000000..34332679d6 --- /dev/null +++ b/spec/serializers/rest/notification_request_serializer_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationRequestSerializer do + subject do + serialized_record_json( + notification_request, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:notification_request) { Fabricate :notification_request } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when updated_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/notification_serializer_spec.rb b/spec/serializers/rest/notification_serializer_spec.rb new file mode 100644 index 0000000000..7296c1b935 --- /dev/null +++ b/spec/serializers/rest/notification_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationSerializer do + subject do + serialized_record_json( + notification, + described_class + ) + end + + let(:notification) { Fabricate :notification } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/poll_serializer_spec.rb b/spec/serializers/rest/poll_serializer_spec.rb new file mode 100644 index 0000000000..71ed9deb3e --- /dev/null +++ b/spec/serializers/rest/poll_serializer_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::PollSerializer do + subject do + serialized_record_json( + poll, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:poll) { Fabricate :poll } + + context 'when expires_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/report_serializer_spec.rb b/spec/serializers/rest/report_serializer_spec.rb new file mode 100644 index 0000000000..5cbeb0fee0 --- /dev/null +++ b/spec/serializers/rest/report_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ReportSerializer do + subject do + serialized_record_json( + report, + described_class + ) + end + + let(:status) { Fabricate(:status) } + let(:report) { Fabricate(:report, status_ids: [status.id]) } + + context 'with created_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'with action_taken_at' do + let(:acting_account) { Fabricate(:account) } + + before do + report.resolve!(acting_account) + end + + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/scheduled_status_serializer_spec.rb b/spec/serializers/rest/scheduled_status_serializer_spec.rb new file mode 100644 index 0000000000..7d0d7c96bb --- /dev/null +++ b/spec/serializers/rest/scheduled_status_serializer_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ScheduledStatusSerializer do + subject do + serialized_record_json( + scheduled_status, + described_class + ) + end + + let(:account) { Fabricate(:account) } + let(:scheduled_status) { Fabricate.build(:scheduled_status, scheduled_at: 4.minutes.from_now, account: account) } + + context 'with scheduled_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['scheduled_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/status_edit_serializer_spec.rb b/spec/serializers/rest/status_edit_serializer_spec.rb new file mode 100644 index 0000000000..1f5ac54b7b --- /dev/null +++ b/spec/serializers/rest/status_edit_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::StatusEditSerializer do + subject do + serialized_record_json( + status_edit, + described_class + ) + end + + let(:status_edit) { Fabricate(:status_edit) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb index e96d1fbe67..ca0591eb69 100644 --- a/spec/serializers/rest/status_serializer_spec.rb +++ b/spec/serializers/rest/status_serializer_spec.rb @@ -51,5 +51,19 @@ RSpec.describe REST::StatusSerializer do expect(subject['favourites_count']).to eq(40) end end + + context 'with created_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when edited_at is populated' do + let(:status) { Fabricate.build :status, edited_at: 3.days.ago } + + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['edited_at']) }.to_not raise_error + end + end end end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index df0db9149e..238c49da75 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -38,7 +38,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do let(:media_attachments) { [] } before do - mentions.each { |a| Fabricate(:mention, status: status, account: a) } + mentions.each { |(account, silent)| Fabricate(:mention, status: status, account: account, silent: silent) } tags.each { |t| status.tags << t } media_attachments.each { |m| status.media_attachments << m } stub_request(:get, bogus_mention).to_raise(HTTP::ConnectionError) @@ -324,7 +324,19 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do end context 'when originally with mentions' do - let(:mentions) { [alice, bob] } + let(:mentions) { [[alice, false], [bob, false]] } + + before do + subject.call(status, json, json) + end + + it 'updates mentions' do + expect(status.active_mentions.reload.map(&:account_id)).to eq [alice.id] + end + end + + context 'when originally with silent mentions' do + let(:mentions) { [[alice, true], [bob, true]] } before do subject.call(status, json, json) diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb index 8f9d3cdfc9..ef24362fbc 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -109,7 +109,7 @@ RSpec.describe ReblogService do Status .where(id: reblog_of_id) .where(text: 'discard-status-text') - .update_all(deleted_at: Time.now.utc) + .touch_all(:deleted_at) end end end diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index 99eddf2f88..2a2bbd68b6 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -199,6 +199,14 @@ RSpec.describe UpdateStatusService do .to eq [bob.id] expect(status.mentions.pluck(:account_id)) .to contain_exactly(alice.id, bob.id) + + # Going back when a mention was switched to silence should still be possible + subject.call(status, status.account_id, text: 'Hello @alice') + + expect(status.active_mentions.pluck(:account_id)) + .to eq [alice.id] + expect(status.mentions.pluck(:account_id)) + .to contain_exactly(alice.id, bob.id) end end diff --git a/spec/support/matchers/model/model_have_error_on_field.rb b/spec/support/matchers/model/model_have_error_on_field.rb deleted file mode 100644 index 0f9c81a475..0000000000 --- a/spec/support/matchers/model/model_have_error_on_field.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -RSpec::Matchers.define :model_have_error_on_field do |expected| - match do |record| - record.valid? if record.errors.empty? - - record.errors.key?(expected) - end - - failure_message do |record| - keys = record.errors.attribute_names - - "expect record.errors(#{keys}) to include #{expected}" - end -end diff --git a/spec/system/admin/terms_of_service_spec.rb b/spec/system/admin/terms_of_service_spec.rb new file mode 100644 index 0000000000..d6ee1469d2 --- /dev/null +++ b/spec/system/admin/terms_of_service_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Terms of services' do + describe 'Viewing terms of services index page' do + let!(:terms) { Fabricate :terms_of_service, text: 'Test terms' } + + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'allows tags listing and editing' do + visit admin_terms_of_service_index_path + + expect(page) + .to have_title(I18n.t('admin.terms_of_service.title')) + + expect(page) + .to have_content(terms.text) + end + end +end diff --git a/spec/system/log_in_spec.rb b/spec/system/log_in_spec.rb index f8765e8e1c..10869fd240 100644 --- a/spec/system/log_in_spec.rb +++ b/spec/system/log_in_spec.rb @@ -34,7 +34,7 @@ RSpec.describe 'Log in' do it 'A unconfirmed user is able to log in' do fill_in_auth_details(email, password) - expect(subject).to have_css('div.admin-wrapper') + expect(subject).to have_css('.title', text: I18n.t('auth.setup.title')) end end diff --git a/spec/system/settings/verifications_spec.rb b/spec/system/settings/verifications_spec.rb new file mode 100644 index 0000000000..75be191c83 --- /dev/null +++ b/spec/system/settings/verifications_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings verification page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'Viewing the verification page' do + it 'shows the page and updates attribution' do + visit settings_verification_path + + expect(page) + .to have_content(verification_summary) + .and have_private_cache_control + + fill_in attribution_field, with: 'host.example' + + expect { click_on submit_button } + .to(change { user.account.reload.attribution_domains_as_text }) + expect(page) + .to have_content(success_message) + end + end + + def verification_summary + I18n.t('verification.website_verification') + end + + def attribution_field + I18n.t('simple_form.labels.account.attribution_domains_as_text') + end +end diff --git a/spec/system/terms_of_service_spec.rb b/spec/system/terms_of_service_spec.rb new file mode 100644 index 0000000000..0de12bae36 --- /dev/null +++ b/spec/system/terms_of_service_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Terms of Service page' do + it 'visits the about page and renders the web app' do + visit terms_of_service_path + + expect(page) + .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') + end +end diff --git a/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb b/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb new file mode 100644 index 0000000000..27ddfb28bc --- /dev/null +++ b/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::DistributeTermsOfServiceNotificationWorker do + let(:worker) { described_class.new } + + describe '#perform' do + context 'with missing record' do + it 'runs without error' do + expect { worker.perform(nil) }.to_not raise_error + end + end + + context 'with valid terms' do + let(:terms) { Fabricate(:terms_of_service) } + let!(:user) { Fabricate :user, confirmed_at: 3.days.ago } + + it 'sends the terms update via email', :inline_jobs do + emails = capture_emails { worker.perform(terms.id) } + + expect(emails.size) + .to eq(1) + expect(emails.first) + .to have_attributes( + to: [user.email], + subject: I18n.t('user_mailer.terms_of_service_changed.subject') + ) + end + end + end +end diff --git a/yarn.lock b/yarn.lock index 5d4bb6d3dc..2aab09edad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,6 +1944,15 @@ __metadata: languageName: node linkType: hard +"@csstools/stylelint-formatter-github@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/stylelint-formatter-github@npm:1.0.0" + peerDependencies: + stylelint: ^16.6.0 + checksum: 10c0/2052c4e4d89656b2b4176a6d07508ef73278d33c24a7408a3555d07f26ec853f85da95525590c51751fb3150a2ebb5e3083d8200dc6597af2cd8e93198695269 + languageName: node + linkType: hard + "@csstools/utilities@npm:^2.0.0": version: 2.0.0 resolution: "@csstools/utilities@npm:2.0.0" @@ -2213,15 +2222,15 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.3.11 - resolution: "@formatjs/cli@npm:6.3.11" + version: 6.3.14 + resolution: "@formatjs/cli@npm:6.3.14" peerDependencies: "@glimmer/env": ^0.1.7 - "@glimmer/reference": ^0.91.1 || ^0.92.0 - "@glimmer/syntax": ^0.92.0 - "@glimmer/validator": ^0.92.0 + "@glimmer/reference": ^0.91.1 || ^0.92.0 || ^0.93.0 + "@glimmer/syntax": ^0.92.0 || ^0.93.0 + "@glimmer/validator": ^0.92.0 || ^0.93.0 "@vue/compiler-core": ^3.4.0 - content-tag: ^2.0.1 + content-tag: ^2.0.1 || ^3.0.0 ember-template-recast: ^6.1.4 vue: ^3.4.0 peerDependenciesMeta: @@ -2243,7 +2252,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/31d5fac85314e97591c4c6a4793abf1d9c6fbf790fbbea779b2a4c0f742f1859804f290e77be06d128274468e44bc27992196aacb4cb6f2fbd141755ca79a98d + checksum: 10c0/b4c83ed7fdc8dcd48b2f48fa9cca65b52472fb096eb028517a872f8a71ed3964f4b0a6bbc607f821a9504f396fe7341ef4d9ad44a381a37f280ed7547de66f41 languageName: node linkType: hard @@ -2841,6 +2850,7 @@ __metadata: "@babel/preset-react": "npm:^7.22.3" "@babel/preset-typescript": "npm:^7.21.5" "@babel/runtime": "npm:^7.23.7" + "@csstools/stylelint-formatter-github": "npm:^1.0.0" "@dnd-kit/core": "npm:^6.1.0" "@dnd-kit/sortable": "npm:^10.0.0" "@dnd-kit/utilities": "npm:^3.2.2" @@ -2849,7 +2859,7 @@ __metadata: "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" "@hello-pangea/dnd": "npm:^17.0.0" - "@rails/ujs": "npm:7.1.500" + "@rails/ujs": "npm:7.1.501" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -2970,9 +2980,9 @@ __metadata: sass-loader: "npm:^10.2.0" stacktrace-js: "npm:^2.0.2" stringz: "npm:^2.1.0" - stylelint: "npm:^16.0.2" + stylelint: "npm:^16.11.0" stylelint-config-prettier-scss: "npm:^1.0.0" - stylelint-config-standard-scss: "npm:^13.0.0" + stylelint-config-standard-scss: "npm:^14.0.0" substring-trie: "npm:^1.0.2" terser-webpack-plugin: "npm:^4.2.3" tesseract.js: "npm:^2.1.5" @@ -3292,10 +3302,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.500": - version: 7.1.500 - resolution: "@rails/ujs@npm:7.1.500" - checksum: 10c0/365f9a3944454d64c83463de017d9be7064494d6376c1f4d8cbff38c0f278bac7d9ab85f19b31abb70f0e775f30b64ad682fd4545bc27b5d91baef3618642b9f +"@rails/ujs@npm:7.1.501": + version: 7.1.501 + resolution: "@rails/ujs@npm:7.1.501" + checksum: 10c0/b75a30f36ff219264e0926da1ffcd14c2a5d6aee5be29da4dc81f9a45843875da79ac19cf7ed9a3f11a39084398d0ae4a75a8edb28ba94907db3081572af62b0 languageName: node linkType: hard @@ -3630,22 +3640,22 @@ __metadata: linkType: hard "@testing-library/react@npm:^16.0.0": - version: 16.0.1 - resolution: "@testing-library/react@npm:16.0.1" + version: 16.1.0 + resolution: "@testing-library/react@npm:16.1.0" dependencies: "@babel/runtime": "npm:^7.12.5" peerDependencies: "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 - "@types/react-dom": ^18.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 10c0/67d05dec5ad5a2e6f92b6a3234af785435c7bb62bdbf12f3bfc89c9bca0c871a189e88c4ba023ed4cea504704c87c6ac7e86e24a3962df6c521ae89b62f48ff7 + checksum: 10c0/8451dcc76ba0d4f3504af78f2a4aacc13117691f4b7a3c279f3e047d5ea817ff686496ad53e7f65f6183112aef2be3f318af609b1f5d666eed42b1014d1c68d5 languageName: node linkType: hard @@ -4267,10 +4277,10 @@ __metadata: languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 10c0/82824c1051ba40a00e3d47964cdf4546a224e95f172e15a9c62aa3f118acee1c7518b627a34f3aa87298a2039f982e8509f92bfcc18bea7c255c189c293ba547 +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: 10c0/77c045a98f57488201f678b181cccd042279aff3da34540ad242f893acc52b358bd0a8207a321b8ac09adbcef36e3236944390e2df4fcedb556ce7bb2a88f2a8 languageName: node linkType: hard @@ -11477,13 +11487,6 @@ __metadata: languageName: node linkType: hard -"known-css-properties@npm:^0.29.0": - version: 0.29.0 - resolution: "known-css-properties@npm:0.29.0" - checksum: 10c0/f66e9992097b8f54e97dbe729943d4a11b8d3ba15f68dbb3deb8bb0122cb89c22c90c9221ecb1e3f2e236838fe3c0faae319b43908c81b6e254ac43cafde2906 - languageName: node - linkType: hard - "known-css-properties@npm:^0.35.0": version: 0.35.0 resolution: "known-css-properties@npm:0.35.0" @@ -11948,6 +11951,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:^2.12.2": + version: 2.13.0 + resolution: "mdn-data@npm:2.13.0" + checksum: 10c0/7f4cbba78ded58d63e28b7be68dc93a97cc4859d474b08e4570a9adb6cc57106c6b860a749b465a39be18eb8b010ad3b042b5d4d475f78fe1b3ea6156926bfa0 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -14143,7 +14153,7 @@ __metadata: languageName: node linkType: hard -"postcss-resolve-nested-selector@npm:^0.1.1, postcss-resolve-nested-selector@npm:^0.1.6": +"postcss-resolve-nested-selector@npm:^0.1.6": version: 0.1.6 resolution: "postcss-resolve-nested-selector@npm:0.1.6" checksum: 10c0/84213a2bccce481b1569c595a3c547b25c6ef1cca839fbd6c82c12ab407559966e968613c7454b573aa54f38cfd7e900c1fd603f0efc9f51939ab9f93f115455 @@ -14179,7 +14189,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": version: 6.1.2 resolution: "postcss-selector-parser@npm:6.1.2" dependencies: @@ -14315,11 +14325,11 @@ __metadata: linkType: hard "prettier@npm:^3.3.3": - version: 3.4.1 - resolution: "prettier@npm:3.4.1" + version: 3.4.2 + resolution: "prettier@npm:3.4.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 languageName: node linkType: hard @@ -14797,21 +14807,21 @@ __metadata: linkType: hard "react-redux@npm:^9.0.4, react-redux@npm:^9.1.2": - version: 9.1.2 - resolution: "react-redux@npm:9.1.2" + version: 9.2.0 + resolution: "react-redux@npm:9.2.0" dependencies: - "@types/use-sync-external-store": "npm:^0.0.3" - use-sync-external-store: "npm:^1.0.0" + "@types/use-sync-external-store": "npm:^0.0.6" + use-sync-external-store: "npm:^1.4.0" peerDependencies: - "@types/react": ^18.2.25 - react: ^18.0 + "@types/react": ^18.2.25 || ^19 + react: ^18.0 || ^19 redux: ^5.0.0 peerDependenciesMeta: "@types/react": optional: true redux: optional: true - checksum: 10c0/56ac98228e011b26e0202346af9c8dd408ad5ea8235d8761c8e05ea0953b8ca801cdf9d1f481fdec7b285d7f30ceef7238b46b3df7636ef77dd5c2ea8c5be5b2 + checksum: 10c0/00d485f9d9219ca1507b4d30dde5f6ff8fb68ba642458f742e0ec83af052f89e65cd668249b99299e1053cc6ad3d2d8ac6cb89e2f70d2ac5585ae0d7fa0ef259 languageName: node linkType: hard @@ -14867,8 +14877,8 @@ __metadata: linkType: hard "react-select@npm:^5.7.3": - version: 5.8.3 - resolution: "react-select@npm:5.8.3" + version: 5.9.0 + resolution: "react-select@npm:5.9.0" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -14878,11 +14888,11 @@ __metadata: memoize-one: "npm:^6.0.0" prop-types: "npm:^15.6.0" react-transition-group: "npm:^4.3.0" - use-isomorphic-layout-effect: "npm:^1.1.2" + use-isomorphic-layout-effect: "npm:^1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/25aaf0ad964a31dcf991be8b9eb478f94b2ff5dfd2e74a894f692c6dec9247f6ded6258fbf875984d2ada5aeb0ee742b85c6a94f58fae89112e913526cfd0577 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/f21f18ca41a8c866ab69f9c65253e86dcc5323477bbfc729bf6aa9d897e04e27cfffd13c07f10b70dc554e15ad1d238c1283e05e457bf4ead8526a1dd7fbc8b0 languageName: node linkType: hard @@ -14972,15 +14982,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.4.1": - version: 8.5.5 - resolution: "react-textarea-autosize@npm:8.5.5" + version: 8.5.6 + resolution: "react-textarea-autosize@npm:8.5.6" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/d708a31b39a409d0246cd8afbd956ce51db58ce0b6411b9d4e1dc876ce93c329d20875933ce5d337662fdcd3699596966dc630149236fee2835d74e302404c98 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/652d290d316c55a253507ecf65ca27f2162801dace10c715f2241203e81d82e9de6d282095b758b26c6bc9e1af9ca552cab5c3a361b230e5fcf25bec31e1bd25 languageName: node linkType: hard @@ -15653,8 +15663,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.82.0 - resolution: "sass@npm:1.82.0" + version: 1.83.0 + resolution: "sass@npm:1.83.0" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15665,7 +15675,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/7f86fe6ade4f6018862c448ed69d5c52f485b0125c9dab24e63f679739a04cc7c56562d588e3cf16b5efb4d2c4d0530e62740e1cfd273e2e3707d04d11011736 + checksum: 10c0/4415361229879a9041d77c953da85482e89032aa4321ba13250a9987d39c80fac6c88af3777f2a2d76a4e8b0c8afbd21c1970fdbe84e0b3ec25fb26741f92beb languageName: node linkType: hard @@ -16761,75 +16771,78 @@ __metadata: languageName: node linkType: hard -"stylelint-config-recommended-scss@npm:^14.0.0": - version: 14.0.0 - resolution: "stylelint-config-recommended-scss@npm:14.0.0" +"stylelint-config-recommended-scss@npm:^14.1.0": + version: 14.1.0 + resolution: "stylelint-config-recommended-scss@npm:14.1.0" dependencies: postcss-scss: "npm:^4.0.9" - stylelint-config-recommended: "npm:^14.0.0" - stylelint-scss: "npm:^6.0.0" + stylelint-config-recommended: "npm:^14.0.1" + stylelint-scss: "npm:^6.4.0" peerDependencies: postcss: ^8.3.3 - stylelint: ^16.0.2 + stylelint: ^16.6.1 peerDependenciesMeta: postcss: optional: true - checksum: 10c0/9ddc92e7a5fa131b41cee1ab1f69251934ca35c0e2803dc613329cdead7b8b27d8457048a63db29f61a1442e7cdef14207f88a3abce00ec53fdefe0d604f7de3 + checksum: 10c0/0a1c1bb6d9f7a21acea82e12fee1b36a195181ae1dd0d8b59145a56f76232a80d5b706269bc4ca4929680d36f10371bd8a7d0aeeee468fa9119a3b56410b052f languageName: node linkType: hard -"stylelint-config-recommended@npm:^14.0.0": - version: 14.0.0 - resolution: "stylelint-config-recommended@npm:14.0.0" - peerDependencies: - stylelint: ^16.0.0 - checksum: 10c0/4ad15c36e8c03291aa7bbe4b672ebfb0f46ab698e7580a0da8d29644046d102d7f31dbf00a2a6eab94b565c390c6fb0d5d528737b83ac3acf6dc2ef085a90b11 - languageName: node - linkType: hard - -"stylelint-config-standard-scss@npm:^13.0.0": - version: 13.1.0 - resolution: "stylelint-config-standard-scss@npm:13.1.0" - dependencies: - stylelint-config-recommended-scss: "npm:^14.0.0" - stylelint-config-standard: "npm:^36.0.0" - peerDependencies: - postcss: ^8.3.3 - stylelint: ^16.3.1 - peerDependenciesMeta: - postcss: - optional: true - checksum: 10c0/d07cae806ee8b3e77684f019a8b22cc32642373da8053e6ae7ed716f8ddbe6ea1f7323633a6a1bbc9aa08c6a3dceb1dcf053d83fdd10d076b5a01da6e86801ae - languageName: node - linkType: hard - -"stylelint-config-standard@npm:^36.0.0": - version: 36.0.0 - resolution: "stylelint-config-standard@npm:36.0.0" - dependencies: - stylelint-config-recommended: "npm:^14.0.0" +"stylelint-config-recommended@npm:^14.0.1": + version: 14.0.1 + resolution: "stylelint-config-recommended@npm:14.0.1" peerDependencies: stylelint: ^16.1.0 - checksum: 10c0/1fc9adddfc5cf0a1d7a443182a0731712a3950ace72a24081b4ede2b0bb6fc1eebd003c009f1d8d06c3a64ba9b31b0ed12512db2f91c8fa549238d8341580e4b + checksum: 10c0/a0a0ecd91f4d193bbe2cc3408228f8a2d8fcb2b2578d77233f86780c9247c796a04e16aad7a91d97cb918e2de34b6a8062bab66ee017c3835d855081d94f4828 languageName: node linkType: hard -"stylelint-scss@npm:^6.0.0": - version: 6.0.0 - resolution: "stylelint-scss@npm:6.0.0" +"stylelint-config-standard-scss@npm:^14.0.0": + version: 14.0.0 + resolution: "stylelint-config-standard-scss@npm:14.0.0" dependencies: - known-css-properties: "npm:^0.29.0" + stylelint-config-recommended-scss: "npm:^14.1.0" + stylelint-config-standard: "npm:^36.0.1" + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.11.0 + peerDependenciesMeta: + postcss: + optional: true + checksum: 10c0/b885f02d955060a8e0214fd8dc30bfc6d84cbdeb870d34ce0761b258914857bd22d537ac1c8ee9755bf4cd5b1f3b94f4ad0270c2ff4362df7d5eb8d95b35db5e + languageName: node + linkType: hard + +"stylelint-config-standard@npm:^36.0.1": + version: 36.0.1 + resolution: "stylelint-config-standard@npm:36.0.1" + dependencies: + stylelint-config-recommended: "npm:^14.0.1" + peerDependencies: + stylelint: ^16.1.0 + checksum: 10c0/7f9b954694358e77be5110418f31335be579ce59dd952bc3c6a9449265297db3170ec520e0905769253b48b99c3109a95c71f5b985bf402e48fd6c89b5364cb2 + languageName: node + linkType: hard + +"stylelint-scss@npm:^6.4.0": + version: 6.10.0 + resolution: "stylelint-scss@npm:6.10.0" + dependencies: + css-tree: "npm:^3.0.1" + is-plain-object: "npm:^5.0.0" + known-css-properties: "npm:^0.35.0" + mdn-data: "npm:^2.12.2" postcss-media-query-parser: "npm:^0.2.3" - postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-selector-parser: "npm:^6.0.13" + postcss-resolve-nested-selector: "npm:^0.1.6" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: stylelint: ^16.0.2 - checksum: 10c0/f5e971d19ef6879ae5c18cb8fba8033fe7928f241178e6afd80357cc080d2feddfd6f7fe564aaa696008aa10345df5885d9a4471c926b3e266088e015927782e + checksum: 10c0/9086109bc36b46ea5e62aef5c1793debbd973aaecb28ba65cadaaf6761a295db1e52f94e1a6bae7ee884e440fc36463e9686941fc652a5ce79045ee58cae5308 languageName: node linkType: hard -"stylelint@npm:^16.0.2": +"stylelint@npm:^16.11.0": version: 16.11.0 resolution: "stylelint@npm:16.11.0" dependencies: @@ -17787,15 +17800,15 @@ __metadata: languageName: node linkType: hard -"use-isomorphic-layout-effect@npm:^1.1.1, use-isomorphic-layout-effect@npm:^1.1.2": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" +"use-isomorphic-layout-effect@npm:^1.1.1, use-isomorphic-layout-effect@npm:^1.2.0": + version: 1.2.0 + resolution: "use-isomorphic-layout-effect@npm:1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d8deea8b85e55ac6daba237a889630bfdbf0ebf60e9e22b6a78a78c26fabe6025e04ada7abef1e444e6786227d921e648b2707db8b3564daf757264a148a6e23 + checksum: 10c0/2e4bdee68d65893b37e716ebdcc111550775189c80e662eda87d6f5b54dc431d3383a18914ea01a893ee5478902a878012713eaebcacbb6611ab88c463accb83 languageName: node linkType: hard @@ -17822,12 +17835,12 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.0.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" +"use-sync-external-store@npm:^1.4.0": + version: 1.4.0 + resolution: "use-sync-external-store@npm:1.4.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/ac4814e5592524f242921157e791b022efe36e451fe0d4fd4d204322d5433a4fc300d63b0ade5185f8e0735ded044c70bcf6d2352db0f74d097a238cebd2da02 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/ec011a5055962c0f6b509d6e78c0b143f8cd069890ae370528753053c55e3b360d3648e76cfaa854faa7a59eb08d6c5fb1015e60ffde9046d32f5b2a295acea5 languageName: node linkType: hard