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 95fcd56942..c1385bf789 100644
--- a/.github/workflows/lint-css.yml
+++ b/.github/workflows/lint-css.yml
@@ -40,4 +40,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/.github/workflows/lint-ruby.yml b/.github/workflows/lint-ruby.yml
index 277e456146..87f8aee24e 100644
--- a/.github/workflows/lint-ruby.yml
+++ b/.github/workflows/lint-ruby.yml
@@ -9,6 +9,7 @@ on:
- 'Gemfile*'
- '.rubocop*.yml'
- '.ruby-version'
+ - 'bin/rubocop'
- 'config/brakeman.ignore'
- '**/*.rb'
- '**/*.rake'
@@ -19,6 +20,7 @@ on:
- 'Gemfile*'
- '.rubocop*.yml'
- '.ruby-version'
+ - 'bin/rubocop'
- 'config/brakeman.ignore'
- '**/*.rb'
- '**/*.rake'
diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml
index 770cd72a1b..08b50e2680 100644
--- a/.github/workflows/test-ruby.yml
+++ b/.github/workflows/test-ruby.yml
@@ -166,7 +166,7 @@ jobs:
- name: Upload coverage reports to Codecov
if: matrix.ruby-version == '.ruby-version'
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
files: coverage/lcov/*.lcov
env:
@@ -252,7 +252,7 @@ jobs:
- name: Upload coverage reports to Codecov
if: matrix.ruby-version == '.ruby-version'
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
files: coverage/lcov/mastodon.lcov
env:
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 a6e51d6aee..552054898e 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
@@ -35,7 +35,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 b/Gemfile
index 6abb075c1c..b626b5511c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -105,7 +105,7 @@ gem 'opentelemetry-api', '~> 1.4.0'
group :opentelemetry do
gem 'opentelemetry-exporter-otlp', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-active_job', '~> 0.7.1', require: false
- gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.20.1', require: false
+ gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.21.0', require: false
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.21.2', require: false
gem 'opentelemetry-instrumentation-excon', '~> 0.22.0', require: false
gem 'opentelemetry-instrumentation-faraday', '~> 0.24.1', require: false
@@ -114,7 +114,7 @@ group :opentelemetry do
gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.25.0', require: false
- gem 'opentelemetry-instrumentation-rails', '~> 0.33.0', require: false
+ gem 'opentelemetry-instrumentation-rails', '~> 0.34.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.25.2', require: false
gem 'opentelemetry-sdk', '~> 1.4', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 8cbceae214..3367e04685 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
@@ -94,7 +94,7 @@ GEM
ast (2.4.2)
attr_required (1.0.2)
aws-eventstream (1.3.0)
- aws-partitions (1.1017.0)
+ aws-partitions (1.1025.0)
aws-sdk-core (3.214.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
@@ -103,13 +103,13 @@ 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)
aws-sigv4 (1.10.1)
aws-eventstream (~> 1, >= 1.0.2)
- azure-blob (0.5.3)
+ azure-blob (0.5.4)
rexml
base64 (0.2.0)
bcp47_spec (0.2.1)
@@ -168,15 +168,15 @@ GEM
bigdecimal
rexml
crass (1.0.6)
- css_parser (1.19.1)
+ css_parser (1.21.0)
addressable
- csv (3.3.0)
+ csv (3.3.1)
database_cleaner-active_record (2.2.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
- date (3.4.0)
- debug (1.9.2)
+ date (3.4.1)
+ debug (1.10.0)
irb (~> 1.10)
reline (>= 0.3.8)
debug_inspector (1.2.0)
@@ -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.7)
drb (2.2.1)
elasticsearch (7.17.11)
elasticsearch-api (= 7.17.11)
@@ -224,14 +224,14 @@ GEM
fabrication (2.31.0)
faker (3.5.1)
i18n (>= 1.8.11, < 2)
- faraday (2.12.0)
- faraday-net_http (>= 2.0, < 3.4)
+ faraday (2.12.2)
+ faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-httpclient (2.0.1)
httpclient (>= 2.2)
- faraday-net_http (3.3.0)
- net-http
+ faraday-net_http (3.4.0)
+ net-http (>= 0.5.0)
fast_blank (1.0.1)
fastimage (2.3.1)
ffi (1.17.0)
@@ -279,7 +279,7 @@ GEM
rainbow
rubocop (>= 1.0)
sysexits (~> 1.1)
- hashdiff (1.1.1)
+ hashdiff (1.1.2)
hashie (5.0.0)
hcaptcha (7.1.0)
json
@@ -294,7 +294,7 @@ GEM
http-cookie (~> 1.0)
http-form_data (~> 2.2)
llhttp-ffi (~> 0.5.0)
- http-cookie (1.0.5)
+ http-cookie (1.0.8)
domain_name (~> 0.5)
http-form_data (2.3.0)
http_accept_language (2.1.1)
@@ -318,8 +318,8 @@ GEM
inline_svg (1.10.0)
activesupport (>= 3.0)
nokogiri (>= 1.6)
- io-console (0.7.2)
- irb (1.14.1)
+ io-console (0.8.0)
+ irb (1.14.3)
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.1)
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.3)
lograge (0.14.0)
actionpack (>= 4)
activesupport (>= 4)
@@ -406,16 +406,16 @@ GEM
mime-types (3.6.0)
logger
mime-types-data (~> 3.2015)
- mime-types-data (3.2024.1105)
+ mime-types-data (3.2024.1203)
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)
net-http (0.5.0)
uri
- net-imap (0.5.1)
+ net-imap (0.5.2)
date
net-protocol
net-ldap (0.19.0)
@@ -426,10 +426,10 @@ 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)
+ oj (3.16.8)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (2.1.2)
@@ -460,7 +460,7 @@ GEM
validate_email
validate_url
webfinger (~> 1.2)
- openssl (3.2.0)
+ openssl (3.2.1)
openssl-signature_algorithm (1.3.0)
openssl (> 2.0)
opentelemetry-api (1.4.0)
@@ -475,29 +475,29 @@ GEM
opentelemetry-semantic_conventions
opentelemetry-helpers-sql-obfuscation (0.2.1)
opentelemetry-common (~> 0.21)
- opentelemetry-instrumentation-action_mailer (0.2.0)
+ opentelemetry-instrumentation-action_mailer (0.3.0)
opentelemetry-api (~> 1.0)
- opentelemetry-instrumentation-active_support (~> 0.1)
+ opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-action_pack (0.10.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-rack (~> 0.21)
- opentelemetry-instrumentation-action_view (0.7.3)
+ opentelemetry-instrumentation-action_view (0.8.0)
opentelemetry-api (~> 1.0)
- opentelemetry-instrumentation-active_support (~> 0.6)
+ opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_job (0.7.8)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
- opentelemetry-instrumentation-active_model_serializers (0.20.3)
+ opentelemetry-instrumentation-active_model_serializers (0.21.0)
opentelemetry-api (~> 1.0)
- opentelemetry-instrumentation-active_support (>= 0.6.0)
+ opentelemetry-instrumentation-active_support (>= 0.7.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_record (0.8.1)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
- opentelemetry-instrumentation-active_support (0.6.0)
+ opentelemetry-instrumentation-active_support (0.7.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-base (0.22.6)
@@ -510,7 +510,7 @@ GEM
opentelemetry-instrumentation-excon (0.22.5)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
- opentelemetry-instrumentation-faraday (0.24.7)
+ opentelemetry-instrumentation-faraday (0.24.8)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-http (0.23.5)
@@ -529,14 +529,14 @@ GEM
opentelemetry-instrumentation-rack (0.25.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
- opentelemetry-instrumentation-rails (0.33.1)
+ opentelemetry-instrumentation-rails (0.34.0)
opentelemetry-api (~> 1.0)
- opentelemetry-instrumentation-action_mailer (~> 0.2.0)
+ opentelemetry-instrumentation-action_mailer (~> 0.3.0)
opentelemetry-instrumentation-action_pack (~> 0.10.0)
- opentelemetry-instrumentation-action_view (~> 0.7.0)
+ opentelemetry-instrumentation-action_view (~> 0.8.0)
opentelemetry-instrumentation-active_job (~> 0.7.0)
opentelemetry-instrumentation-active_record (~> 0.8.0)
- opentelemetry-instrumentation-active_support (~> 0.6.0)
+ opentelemetry-instrumentation-active_support (~> 0.7.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-redis (0.25.7)
opentelemetry-api (~> 1.0)
@@ -579,7 +579,8 @@ GEM
activesupport (>= 7.0.0)
rack
railties (>= 7.0.0)
- psych (5.2.0)
+ psych (5.2.2)
+ 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)
@@ -633,15 +634,15 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
- rails-html-sanitizer (1.6.1)
+ rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
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)
@@ -655,7 +656,7 @@ GEM
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.7.0)
rdf (~> 3.3)
- rdoc (6.7.0)
+ rdoc (6.10.0)
psych (>= 4.0.0)
redcarpet (3.6.0)
redis (4.8.1)
@@ -663,15 +664,15 @@ 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.6.0)
io-console (~> 0.5)
- request_store (1.6.0)
+ request_store (1.7.0)
rack (>= 1.4)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
- rexml (3.3.9)
+ rexml (3.4.0)
rotp (6.3.0)
rouge (4.5.1)
rpam2 (4.0.2)
@@ -706,22 +707,22 @@ GEM
rspec-expectations (~> 3.0)
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
- rspec-support (3.13.1)
- rubocop (1.66.1)
+ rspec-support (3.13.2)
+ 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.37.0)
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)
@@ -743,8 +744,8 @@ GEM
ffi (~> 1.12)
logger
rubyzip (2.3.2)
- rufus-scheduler (3.9.1)
- fugit (~> 1.1, >= 1.1.6)
+ rufus-scheduler (3.9.2)
+ fugit (~> 1.1, >= 1.11.1)
safety_net_attestation (0.4.0)
jwt (~> 2.0)
sanitize (6.1.3)
@@ -753,14 +754,14 @@ GEM
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
- securerandom (0.3.2)
+ securerandom (0.4.1)
selenium-webdriver (4.27.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
- semantic_range (3.0.0)
+ semantic_range (3.1.0)
shoulda-matchers (6.4.0)
activesupport (>= 5.2.0)
sidekiq (6.5.12)
@@ -807,10 +808,10 @@ GEM
unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1)
climate_control
- test-prof (1.4.2)
+ test-prof (1.4.3)
thor (1.3.2)
tilt (2.4.0)
- timeout (0.4.2)
+ timeout (0.4.3)
tpm-key_attestation (0.12.1)
bindata (~> 2.4)
openssl (> 2.0)
@@ -836,8 +837,8 @@ GEM
unf_ext
unf_ext (0.0.9.1)
unicode-display_width (2.6.0)
- uri (0.13.1)
- useragent (0.16.10)
+ uri (1.0.2)
+ 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)
@@ -958,7 +959,7 @@ DEPENDENCIES
opentelemetry-api (~> 1.4.0)
opentelemetry-exporter-otlp (~> 0.29.0)
opentelemetry-instrumentation-active_job (~> 0.7.1)
- opentelemetry-instrumentation-active_model_serializers (~> 0.20.1)
+ opentelemetry-instrumentation-active_model_serializers (~> 0.21.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.21.2)
opentelemetry-instrumentation-excon (~> 0.22.0)
opentelemetry-instrumentation-faraday (~> 0.24.1)
@@ -967,7 +968,7 @@ DEPENDENCIES
opentelemetry-instrumentation-net_http (~> 0.22.4)
opentelemetry-instrumentation-pg (~> 0.29.0)
opentelemetry-instrumentation-rack (~> 0.25.0)
- opentelemetry-instrumentation-rails (~> 0.33.0)
+ opentelemetry-instrumentation-rails (~> 0.34.0)
opentelemetry-instrumentation-redis (~> 0.25.3)
opentelemetry-instrumentation-sidekiq (~> 0.25.2)
opentelemetry-sdk (~> 1.4)
@@ -1035,4 +1036,4 @@ RUBY VERSION
ruby 3.3.6p108
BUNDLED WITH
- 2.5.23
+ 2.6.1
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/api/v1/polls/votes_controller.rb b/app/controllers/api/v1/polls/votes_controller.rb
index ad1b82cb52..2833687a38 100644
--- a/app/controllers/api/v1/polls/votes_controller.rb
+++ b/app/controllers/api/v1/polls/votes_controller.rb
@@ -15,7 +15,7 @@ class Api::V1::Polls::VotesController < Api::BaseController
private
def set_poll
- @poll = Poll.attached.find(params[:poll_id])
+ @poll = Poll.find(params[:poll_id])
authorize @poll.status, :show?
rescue Mastodon::NotPermittedError
not_found
diff --git a/app/controllers/api/v1/polls_controller.rb b/app/controllers/api/v1/polls_controller.rb
index ffc70a8496..b4c25476e8 100644
--- a/app/controllers/api/v1/polls_controller.rb
+++ b/app/controllers/api/v1/polls_controller.rb
@@ -15,7 +15,7 @@ class Api::V1::PollsController < Api::BaseController
private
def set_poll
- @poll = Poll.attached.find(params[:id])
+ @poll = Poll.find(params[:id])
authorize @poll.status, :show?
rescue Mastodon::NotPermittedError
not_found
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 9d5a2e2478..e827834975 100644
--- a/app/helpers/formatting_helper.rb
+++ b/app/helpers/formatting_helper.rb
@@ -64,6 +64,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 516a7a7973..047cf11910 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]);
}
@@ -73,7 +71,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) {
@@ -83,15 +81,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 c09a3f442c..c2918ef8d5 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 } 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');
@@ -112,38 +109,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..7dd174e202
--- /dev/null
+++ b/app/javascript/mastodon/actions/search.ts
@@ -0,0 +1,148 @@
+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 }) =>
+ apiGetSearch({
+ q: url,
+ resolve: true,
+ 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.
'); + expect(emojify('💕 #foo test: foo.
')) + .toEqual('#foo test: foo.
'); }); }); }); diff --git a/app/javascript/mastodon/features/explore/components/search_section.jsx b/app/javascript/mastodon/features/explore/components/search_section.jsx deleted file mode 100644 index c84e3f7cef..0000000000 --- a/app/javascript/mastodon/features/explore/components/search_section.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import PropTypes from 'prop-types'; - -import { FormattedMessage } from 'react-intl'; - -export const SearchSection = ({ title, onClickMore, children }) => ( -{actionDescription}
{actionPrompt}
+
+
+
+
- {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 5253d2a65b..ab76b462ee 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -214,6 +214,7 @@ en:
enable_user: Enable User
memorialize_account: Memorialize Account
promote_user: Promote User
+ publish_terms_of_service: Publish Terms of Service
reject_appeal: Reject Appeal
reject_user: Reject User
remove_avatar_user: Remove Avatar
@@ -278,6 +279,7 @@ en:
enable_user_html: "%{name} enabled login for user %{target}"
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_user_html: "%{name} rejected sign-up from %{target}"
remove_avatar_user_html: "%{name} removed %{target}'s avatar"
@@ -925,6 +927,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
@@ -1132,7 +1163,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
@@ -1157,7 +1187,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
@@ -1166,7 +1196,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
@@ -1178,6 +1208,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
author_attribution:
example_title: Sample text
hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon.
@@ -1840,6 +1871,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)
@@ -1900,6 +1933,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..9bc416ef3e 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
@@ -278,6 +279,7 @@ eo:
enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}"
memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
promote_user_html: "%{name} plirangigis uzanton %{target}"
+ publish_terms_of_service_html: "%{name} publikigis ĝisdatigojn de la kondiĉoj de la servo"
reject_appeal_html: "%{name} malakceptis apelacion kontraŭ moderiga decido de %{target}"
reject_user_html: "%{name} malakceptis registriĝon de %{target}"
remove_avatar_user_html: "%{name} forigis la profilbildon de %{target}"
@@ -925,6 +927,26 @@ 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:
+ action: Generi
+ title: Agordo de kondiĉoj de uzado
+ no_history: Ankoraŭ ne estas registritaj ŝanĝoj de la kondiĉoj de la servo.
+ no_terms_of_service_html: Vi nuntempe ne havas iujn ajn kondiĉojn de la servo agordita. La kondiĉoj de la servo celas doni klarecon kaj protekti vin kontraŭ eblaj respondecoj en disputoj kun viaj uzantoj.
+ 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 +1154,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 +1178,7 @@ 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.
+ email_settings_hint_html: Alklaku la ligilon, kiun ni sendis al %{email} por komenci uzi Mastodon. Ni atendos ĝuste ĉi tie.
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 +1187,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 +1520,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 +1862,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 +1924,11 @@ 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:
+ sign_off: La teamo de %{domain}
+ subject: Ĝisdatigoj al niaj kondiĉoj de servo
+ subtitle: La kondiĉoj de la servo de %{domain} ŝanĝiĝas
+ 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..e02926963f 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}"
@@ -826,10 +828,10 @@ es-AR:
back_to_account: Volver a la página de la cuenta
back_to_report: Volver a la página de la denuncia
batch:
- add_to_report: 'Añadir al informe #%{id}'
+ add_to_report: Agregar a la denuncia N°%{id}
remove_from_report: Quitar de la denuncia
report: Denunciar
- contents: Contenidos
+ contents: Contenido
deleted: Eliminado
favourites: Favoritos
history: Historial de versiones
@@ -838,15 +840,15 @@ es-AR:
media:
title: Medios
metadata: Metadatos
- no_history: Esta publicación no ha sido editada
+ no_history: Este mensaje no ha sido editado
no_status_selected: No se cambió ningún mensaje, ya que ninguno fue seleccionado
open: Abrir mensaje
original_status: Mensaje original
reblogs: Adhesiones
- replied_to_html: Respondió a %{acct_link}
+ replied_to_html: Respondido a %{acct_link}
status_changed: Mensaje cambiado
- status_title: Publicación de @%{name}
- title: Publicaciones de la cuenta - @%{name}
+ status_title: Mensaje por @%{name}
+ title: Mensajes de cuenta - @%{name}
trending: En tendencia
view_publicly: Ver públicamente
visibility: Visibilidad
@@ -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..56f66609c3 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -223,6 +223,7 @@ ga:
enable_user: Cumasaigh Úsáideoir
memorialize_account: Cuntas Cuimhneacháin
promote_user: Úsáideoir a chur chun cinn
+ publish_terms_of_service: Foilsigh Téarmaí Seirbhíse
reject_appeal: Diúltaigh Achomharc
reject_user: Diúltaigh Úsáideoir
remove_avatar_user: Bain Abhatár
@@ -287,6 +288,7 @@ ga:
enable_user_html: "%{name} logáil isteach cumasaithe don úsáideoir %{target}"
memorialize_account_html: Rinne %{name} cuntas %{target} a iompú ina leathanach cuimhneacháin
promote_user_html: Chuir %{name} úsáideoir %{target} chun cinn
+ publish_terms_of_service_html: D'fhoilsigh %{name} nuashonruithe ar na téarmaí seirbhíse
reject_appeal_html: Dhiúltaigh %{name} achomharc ar chinneadh modhnóireachta ó %{target}
reject_user_html: Dhiúltaigh %{name} síniú suas ó %{target}
remove_avatar_user_html: Bhain %{name} avatar %{target}
@@ -967,6 +969,38 @@ ga:
search: Cuardach
title: Haischlibeanna
updated_msg: D'éirigh le socruithe hashtag a nuashonrú
+ terms_of_service:
+ back: Ar ais go téarmaí seirbhíse
+ changelog: Cad atá athraithe
+ create: Bain úsáid as do chuid féin
+ current: Reatha
+ draft: Dréacht
+ generate: Úsáid teimpléad
+ generates:
+ action: Gin
+ chance_to_review_html: "Ní fhoilseofar na téarmaí seirbhíse ginte go huathoibríoch. Beidh deis agat na torthaí a athbhreithniú. Líon isteach na sonraí riachtanacha le leanúint ar aghaidh."
+ explanation_html: Is chun críocha faisnéise amháin atá an teimpléad téarmaí seirbhíse a chuirtear ar fáil, agus níor cheart é a fhorléiriú mar chomhairle dlí ar aon ábhar. Téigh i gcomhairle le do chomhairle dlí féin maidir le do chás agus ceisteanna dlí ar leith atá agat.
+ title: Téarmaí Socrú Seirbhíse
+ history: Stair
+ live: Beo
+ no_history: Níl aon athruithe taifeadta ar théarmaí seirbhíse fós.
+ no_terms_of_service_html: Níl aon téarmaí seirbhíse cumraithe agat faoi láthair. Tá téarmaí seirbhíse i gceist le soiléireacht a sholáthar agus tú a chosaint ó dhliteanais ionchasacha i ndíospóidí le d’úsáideoirí.
+ notified_on_html: Cuireadh úsáideoirí ar an eolas ar %{date}
+ notify_users: Cuir úsáideoirí ar an eolas
+ preview:
+ explanation_html: 'Seolfar an ríomhphost chuig %{display_count} úsáideoir a chláraigh roimh %{date}. Beidh an téacs seo a leanas san áireamh sa ríomhphost:'
+ send_preview: Seol réamhamharc chuig %{email}
+ send_to_all:
+ few: Seol %{display_count} ríomhphost
+ many: Seol %{display_count} ríomhphost
+ one: Seol %{display_count} ríomhphost
+ other: Seol %{display_count} ríomhphost
+ two: Seol %{display_count} ríomhphost
+ title: Réamhamharc ar théarmaí an fhógra seirbhíse
+ publish: Foilsigh
+ published_on_html: Foilsithe ar %{date}
+ save_draft: Sábháil dréacht
+ title: Téarmaí Seirbhíse
title: Riar
trends:
allow: Ceadaigh
@@ -1186,7 +1220,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 +1244,7 @@ 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.
+ email_settings_hint_html: Cliceáil ar an nasc a sheolamar chuig %{email} chun tús a chur le Mastodon a úsáid. 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 +1253,7 @@ 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.
+ preamble: Agus cuntas agat ar an bhfreastalaí Mastodon seo, beidh tú in ann aon duine eile ar an bhfealsúnacht a leanúint, is cuma cá bhfuil a gcuntas á óstáil.
title: Déanaimis tú a shocrú ar %{domain}.
status:
account_status: Stádas cuntais
@@ -1232,6 +1265,7 @@ ga:
view_strikes: Féach ar stailceanna san am atá caite i gcoinne do chuntais
too_fast: Cuireadh an fhoirm isteach róthapa, triail arís.
use_security_key: Úsáid eochair shlándála
+ user_agreement_html: Léigh mé agus aontaím leis na téarmaí seirbhíse agus polasaí príobháideachais
author_attribution:
example_title: Téacs samplach
hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon.
@@ -1790,6 +1824,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
@@ -1964,6 +1999,8 @@ ga:
too_late: Tá sé ró-dhéanach achomharc a dhéanamh faoin stailc seo
tags:
does_not_match_previous_name: nach meaitseálann an t-ainm roimhe seo
+ terms_of_service:
+ title: Téarmaí Seirbhíse
themes:
contrast: Mastodon (Codarsnacht ard)
default: Mastodon (Dorcha)
@@ -2024,6 +2061,15 @@ ga:
further_actions_html: Mura tusa a bhí ann, molaimid duit %{action} a dhéanamh láithreach agus fíordheimhniú dhá fhachtóir a chumasú chun do chuntas a choinneáil slán.
subject: Fuarthas rochtain ar do chuntas ó sheoladh IP nua
title: Síniú isteach nua
+ terms_of_service_changed:
+ agreement: Má leanann tú ar aghaidh ag úsáid %{domain}, tá tú ag aontú leis na téarmaí seo. Mura n-aontaíonn tú leis na téarmaí nuashonraithe, is féidir leat do chomhaontú le %{domain} a fhoirceannadh am ar bith trí do chuntas a scriosadh.
+ changelog: 'Sracfhéachaint, seo é a chiallaíonn an nuashonrú seo duit:'
+ description: 'Tá an ríomhphost seo á fháil agat toisc go bhfuil roinnt athruithe á ndéanamh againn ar ár dtéarmaí seirbhíse ag %{domain}. Molaimid duit athbhreithniú iomlán a dhéanamh ar na téarmaí nuashonraithe anseo:'
+ description_html: Tá an ríomhphost seo á fháil agat toisc go bhfuil roinnt athruithe á ndéanamh againn ar ár dtéarmaí seirbhíse ag %{domain}. Molaimid duit athbhreithniú a dhéanamh ar na téarmaí nuashonraithe ina n-iomláine anseo.
+ sign_off: Foireann %{domain}
+ subject: Nuashonruithe ar ár dtéarmaí seirbhíse
+ subtitle: Tá téarmaí seirbhíse %{domain} ag athrú
+ title: Nuashonrú tábhachtach
warning:
appeal: Cuir achomharc isteach
appeal_description: Má chreideann tú gur earráid é seo, is féidir leat achomharc a chur isteach chuig foireann %{instance}.
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..e534362182 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -214,6 +214,7 @@ ia:
enable_user: Activar le usator
memorialize_account: Converter conto in memorial
promote_user: Promover usator
+ publish_terms_of_service: Publicar le conditiones de servicio
reject_appeal: Rejectar appello
reject_user: Rejectar usator
remove_avatar_user: Remover avatar
@@ -278,6 +279,7 @@ ia:
enable_user_html: "%{name} activava le apertura de session pro le usator %{target}"
memorialize_account_html: "%{name} converteva le conto de %{target} in un pagina commemorative"
promote_user_html: "%{name} promoveva le usator %{target}"
+ publish_terms_of_service_html: "%{name} ha actualisate le conditiones de servicio"
reject_appeal_html: "%{name} refusava le appello del decision de moderation de %{target}"
reject_user_html: "%{name} refusava le inscription de %{target}"
remove_avatar_user_html: "%{name} removeva le avatar de %{target}"
@@ -925,6 +927,35 @@ ia:
search: Cercar
title: Hashtags
updated_msg: Parametros de hashtag actualisate con successo
+ terms_of_service:
+ back: Retornar al conditiones de servicio
+ changelog: Lo que ha cambiate
+ create: Usar tu proprie
+ current: Actual
+ draft: Provisori
+ generate: Usar modello
+ generates:
+ action: Generar
+ chance_to_review_html: "Le conditiones de servicio generate non essera publicate automaticamente. Tu habera le opportunitate de revider le resultatos. Per favor completa le detalios necessari pro continuar."
+ explanation_html: Le modello de conditiones de servicio es fornite solmente pro fines informative e non debe esser interpretate como consilio juridic sur alcun subjecto. Per favor consulta tu proprie consiliero juridic pro omne questiones juridic concrete concernente tu situation.
+ title: Configuration del conditiones de servicio
+ history: Historia
+ live: In uso
+ no_history: Il non ha ancora modificationes registrate del conditiones de servicio.
+ no_terms_of_service_html: Tu non ha actualmente configurate alcun conditiones de servicio. Le conditiones de servicio es visate a fornir claritiate e a proteger te contra possibile responsabilitates in caso de litigios con tu usatores.
+ notified_on_html: Usatores notificate le %{date}
+ notify_users: Notificar usatores
+ preview:
+ explanation_html: 'Le message de e-mail essera inviate a %{display_count} usatores qui se ha inscribite ante le %{date}. Illo includera le sequente texto:'
+ send_preview: Inviar previsualisation a %{email}
+ send_to_all:
+ one: Inviar %{display_count} message de e-mail
+ other: Inviar %{display_count} messages de e-mail
+ title: Previsualisar le notification sur le conditiones de servicio
+ publish: Publicar
+ published_on_html: Publicate le %{date}
+ save_draft: Salvar version provisori
+ title: Conditiones de servicio
title: Administration
trends:
allow: Permitter
@@ -1132,7 +1163,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 +1187,7 @@ 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.
+ email_settings_hint_html: Clicca sur le ligamine que nos te ha inviate a %{email} pro comenciar a usar Mastodon. 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 +1196,7 @@ 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.
+ preamble: Con un conto sur iste servitor de Mastodon, tu potera sequer qualcunque altere persona sur le Fediverso, independentemente de ubi su conto es albergate.
title: Lassa nos installar tu conto sur %{domain}.
status:
account_status: Stato del conto
@@ -1178,6 +1208,7 @@ ia:
view_strikes: Examinar le sanctiones passate contra tu conto
too_fast: Formulario inviate troppo rapidemente. Tenta lo de novo.
use_security_key: Usar clave de securitate
+ user_agreement_html: Io ha legite e accepta le conditiones de servicio e le politica de confidentialitate
author_attribution:
example_title: Texto de exemplo
hint_html: Scribe tu articulos de novas o de blog foras de Mastodon? Controla le maniera in que tu recipe attribution quando on los condivide sur Mastodon.
@@ -1676,6 +1707,7 @@ ia:
scheduled_statuses:
over_daily_limit: Tu ha excedite le limite de %{limit} messages programmate pro hodie
over_total_limit: Tu ha excedite le limite de %{limit} messages programmate
+ too_soon: le data debe esser in le futuro
self_destruct:
lead_html: Infortunatemente, %{domain} tosto claudera permanentemente. Si tu habeva un conto illac, tu non potera continuar a usar lo, ma tu pote ancora requestar un copia de tu datos.
title: Iste servitor va clauder
@@ -1838,6 +1870,8 @@ ia:
too_late: Es troppo tarde pro appellar contra iste sanction
tags:
does_not_match_previous_name: non corresponde al nomine precedente
+ terms_of_service:
+ title: Conditiones de servicio
themes:
contrast: Mastodon (Alte contrasto)
default: Mastodon (Obscur)
@@ -1898,6 +1932,15 @@ ia:
further_actions_html: Si non se tractava de te, nos recommenda %{action} immediatemente e activar le authentication bifactorial pro mantener tu conto secur.
subject: Alcuno ha accedite a tu conto desde un nove adresse IP
title: Un nove apertura de session
+ terms_of_service_changed:
+ agreement: Si tu continua a usar %{domain}, tu accepta iste conditiones. Si tu non es de accordo con le conditiones actualisate, tu pote sempre eliminar tu conto pro terminar tu accordo con %{domain}.
+ changelog: 'In summario, ecce lo que iste actualisation significa pro te:'
+ description: 'Tu recipe iste message perque nos ha apportate alcun modificationes a nostre conditiones de servicio sur %{domain}. Nos te incoragia a revider le conditiones actualisate complete al sequente adresse:'
+ description_html: Tu recipe iste message perque nos ha apportate alcun modificationes a nostre conditiones de servicio sur %{domain}. Nos te incoragia a revider le conditiones actualisate complete.
+ sign_off: Le equipa de %{domain}
+ subject: Actualisationes de nostre conditiones de servicio
+ subtitle: Le conditiones de servicio de %{domain} ha cambiate
+ title: Actualisation importante
warning:
appeal: Submitter un appello
appeal_description: Si tu crede que se tracta de un error, tu pote presentar un appello al personal de %{instance}.
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..229cbb56bf 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,35 @@ 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."
+ explanation_html: Sniðmátið fyrir þjónustuskilmála sem hér fylgir er einungis hugsat til upplýsingar og ætti ekki að taska sem lögfræðilegt álit varðandi hin ýmsu efni. Þú skalt endilega ráðfæra þig við löglærða í þínu umdæmi varðandi þau atriði sem eiga við um stöðu þína auk annarra spurninga um lögfræðileg mál sem þú gætir haft.
+ 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 +1167,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 +1191,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 +1200,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 +1212,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 +1874,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 +1936,15 @@ 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:'
+ description: 'Þú færð þennan tölvupóst vegna þess að við erum að gera nokkrar breytingar á þjónustuskilmálum okkar á %{domain}. Við hvetjum þig til að yfirfara uppfærðu skilmálana í heild hér:'
+ description_html: Þú færð þennan tölvupóst vegna þess að við erum að gera nokkrar breytingar á þjónustuskilmálum okkar á %{domain}. Við hvetjum þig til að yfirfara uppfærðu skilmálana í heild hér:.
+ 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 +2049,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 7b992c743a..201bdc1a08 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -211,6 +211,7 @@ ja:
enable_user: ユーザーを有効化
memorialize_account: 追悼アカウント化
promote_user: ユーザーを昇格
+ publish_terms_of_service: サービス利用規約を公開
reject_appeal: 抗議を却下
reject_user: ユーザーを拒否
remove_avatar_user: アイコンを削除
@@ -275,6 +276,7 @@ ja:
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}さんのアイコンを削除しました"
@@ -911,6 +913,34 @@ ja:
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 @@ ja:
migrate_account: 別のアカウントに引っ越す
migrate_account_html: 引っ越し先を明記したい場合はこちらで設定できます。
or_log_in_with: または次のサービスでログイン
- privacy_policy_agreement_html: プライバシーポリシーを読み、同意します
progress:
confirm: メールアドレスの確認
details: ユーザー情報
@@ -1139,7 +1168,7 @@ ja:
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 @@ ja:
title: "%{domain}にログイン"
sign_up:
manual_review: "%{domain} への登録にはモデレーターによる承認が必要です。審査の参考になるように、簡単な自己紹介や %{domain} に登録したい理由などを記入してください。"
- preamble: この Mastodon サーバーのアカウントがあれば、ネットワーク上の他の人のアカウントがどこでホストされているかに関係なく、その人をフォローすることができます。
+ preamble: この Mastodon サーバーのアカウントがあれば、fediverse上の他の人のアカウントがどこでホストされているかに関係なく、その人をフォローすることができます。
title: さあ %{domain} でセットアップしましょう.
status:
account_status: アカウントの状態
@@ -1160,6 +1189,7 @@ ja:
view_strikes: 過去のストライクを表示
too_fast: フォームの送信が速すぎます。もう一度やり直してください。
use_security_key: セキュリティキーを使用
+ user_agreement_html: 利用規約 および プライバシーポリシーを読み、同意します。
author_attribution:
example_title: サンプルテキスト
hint_html: Mastodonの外でニュースやブログなどを執筆しているユーザーは、Mastodonで自分の記事が共有されたときに著者情報を表示させることができます。
@@ -1638,6 +1668,7 @@ ja:
scheduled_statuses:
over_daily_limit: その日予約できる投稿数 %{limit}を超えています
over_total_limit: 予約できる投稿数 %{limit}を超えています
+ too_soon: 日付は未来でなければなりません
self_destruct:
lead_html: 残念ながら、%{domain} は恒久的に閉鎖されます。ここにお持ちだったアカウントを今後使うことはできませんが、これまでのデータのバックアップを要求することはまだ可能です。
title: このサーバーは閉鎖されます
@@ -1796,6 +1827,8 @@ ja:
too_late: このストライクに抗議するには遅すぎます
tags:
does_not_match_previous_name: 以前の名前と一致しません
+ terms_of_service:
+ title: サービス利用規約
themes:
contrast: Mastodon (ハイコントラスト)
default: Mastodon (ダーク)
@@ -1856,6 +1889,15 @@ ja:
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/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..9619b26fe1 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 bijgewerkte gebruiksvoorwaarden"
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 de gelegenheid om de resultaten eerst 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 gebruiksvoorwaarden geconfigureerd. De gebruiksvoorwaarden zijn bedoeld om duidelijkheid te verschaffen en je te beschermen tegen mogelijke aansprakelijkheid als gevolg van geschillen met gebruikers.
+ notified_on_html: Gebruikers geïnformeerd 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 tonen van de melding over de 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 wel even.
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 in de fediverse volgen, 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 op %{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 op %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bestuderen.
+ sign_off: Het %{domain}-team
+ subject: Onze bijgewerkte gebruiksvoorwaarden
+ 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}.
@@ -1944,7 +1986,7 @@ nl:
feature_action: Meer informatie
feature_audience: Mastodon biedt je een unieke mogelijkheid om je publiek te beheren zonder tussenpersonen. Mastodon, geïmplementeerd in jouw eigen infrastructuur, stelt je in staat om elke andere Mastodon-server online te volgen en door hen gevolgd te worden, en staat onder controle van niemand, behalve die van jou.
feature_audience_title: Bouw jouw publiek in vertrouwen op
- feature_control: Je weet zelf het beste wat je op jouw tijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf.
+ feature_control: Je weet zelf het beste wat je op jouw starttijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf.
feature_control_title: Houd controle over je eigen tijdlijn
feature_creativity: Mastodon ondersteunt audio-, video- en fotoberichten, toegankelijkheidsbeschrijvingen, peilingen, inhoudswaarschuwingen, geanimeerde profielfoto's, aangepaste lokale emoji's, controle over het bijwerken van thumbnails en meer, om je te helpen jezelf online uit te drukken. Of je nu jouw kunst, jouw muziek of jouw podcast publiceert, Mastodon staat voor je klaar.
feature_creativity_title: Ongeëvenaarde creativiteit
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..0110fe540d 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -220,6 +220,7 @@ pl:
enable_user: Włącz użytkownika
memorialize_account: Upamiętnij konto
promote_user: Podnieś uprawnienia
+ publish_terms_of_service: Opublikuj Regulamin
reject_appeal: Odrzuć odwołanie
reject_user: Odrzuć użytkownika
remove_avatar_user: Usuń awatar
@@ -953,6 +954,8 @@ pl:
search: Szukaj
title: Hashtagi
updated_msg: Pomyślnie uaktualniono ustawienia hashtagów
+ terms_of_service:
+ draft: Szkic
title: Administracja
trends:
allow: Zezwól
@@ -1168,7 +1171,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 +1195,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 +1203,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
@@ -1690,6 +1690,7 @@ pl:
scheduled_statuses:
over_daily_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów na ten dzień
over_total_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów
+ too_soon: musi to być przyszła data
self_destruct:
lead_html: Niestety, %{domain} jest permanentnie zamykane. Konta z tego serwera nie będą dostępne, ale można jeszcze odzyskać kopię zapasową danych.
title: Ten serwer jest zamykany
@@ -1860,6 +1861,8 @@ pl:
too_late: Jest za późno na odwołanie się od tego ostrzeżenia
tags:
does_not_match_previous_name: nie pasuje do poprzedniej nazwy
+ terms_of_service:
+ title: Regulamin
themes:
contrast: Mastodon (Wysoki kontrast)
default: Mastodon (Ciemny)
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..f18f05640d 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -21,6 +21,7 @@ pt-PT:
one: Publicação
other: Publicações
posts_tab_heading: Publicações
+ self_follow_error: Não é permitido seguir a sua própria conta
admin:
account_actions:
action: Executar acção
@@ -86,7 +87,7 @@ pt-PT:
remote: Remoto
title: Local
login_status: Estado de início de sessão
- media_attachments: Anexos de media
+ media_attachments: Anexos multimédia
memorialize: Converter num memorial
memorialized: Em memória
memorialized_msg: Conta %{username} transformada com sucesso em memorial
@@ -186,6 +187,7 @@ pt-PT:
create_domain_block: Criar bloqueio de domínio
create_email_domain_block: Criar bloqueio de domínio de e-mail
create_ip_block: Criar regra de IP
+ create_relay: Criar retransmissor
create_unavailable_domain: Criar domínio indisponível
create_user_role: Criar função
demote_user: Despromover utilizador
@@ -197,18 +199,22 @@ pt-PT:
destroy_email_domain_block: Eliminar bloqueio de domínio de e-mail
destroy_instance: Purgar domínio
destroy_ip_block: Eliminar regra de IP
+ destroy_relay: Eliminar retransmissor
destroy_status: Eliminar publicação
destroy_unavailable_domain: Eliminar domínio indisponível
destroy_user_role: Eliminar função
disable_2fa_user: Desativar 2FA
disable_custom_emoji: Desativar emoji personalizado
+ disable_relay: Desativar retransmissor
disable_sign_in_token_auth_user: Desativar token de autenticação por e-mail para o utilizador
disable_user: Desativar utilizador
enable_custom_emoji: Ativar emoji personalizado
+ enable_relay: Ativar retransmissor
enable_sign_in_token_auth_user: Ativar token de autenticação por e-mail para o utilizador
enable_user: Ativar utilizador
memorialize_account: Transformar conta num memorial
promote_user: Promover utilizador
+ publish_terms_of_service: Publicar Termos de Serviço
reject_appeal: Rejeitar recurso
reject_user: Rejeitar utilizador
remove_avatar_user: Remover imagem de perfil
@@ -246,6 +252,7 @@ pt-PT:
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
create_ip_block_html: "%{name} criou uma regra para o IP %{target}"
+ create_relay_html: "%{name} criou o retransmissor %{target}"
create_unavailable_domain_html: "%{name} parou as entregas ao domínio %{target}"
create_user_role_html: "%{name} criou a função %{target}"
demote_user_html: "%{name} despromoveu o utilizador %{target}"
@@ -257,18 +264,22 @@ pt-PT:
destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
destroy_instance_html: "%{name} purgou o domínio %{target}"
destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}"
+ destroy_relay_html: "%{name} eliminou o retransmissor %{target}"
destroy_status_html: "%{name} removeu a publicação de %{target}"
destroy_unavailable_domain_html: "%{name} retomou as entregas ao domínio %{target}"
destroy_user_role_html: "%{name} eliminou a função %{target}"
disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
disable_custom_emoji_html: "%{name} desativou o emoji %{target}"
+ disable_relay_html: "%{name} desativou o retransmissor %{target}"
disable_sign_in_token_auth_user_html: "%{name} desativou o token de autenticação por e-mail para %{target}"
disable_user_html: "%{name} desativou o início de sessão para o utilizador %{target}"
enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
+ enable_relay_html: "%{name} ativou o retransmissor %{target}"
enable_sign_in_token_auth_user_html: "%{name} ativou o token de autenticação por e-mail para %{target}"
enable_user_html: "%{name} ativou o início de sessão para o utilizador %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
promote_user_html: "%{name} promoveu o utilizador %{target}"
+ publish_terms_of_service_html: "%{name} publicou atualizações dos termos de serviço"
reject_appeal_html: "%{name} rejeitou recurso da decisão de moderação de %{target}"
reject_user_html: "%{name} rejeitou a inscrição de %{target}"
remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}"
@@ -276,12 +287,12 @@ pt-PT:
resend_user_html: "%{name} reenviou e-mail de confirmação para %{target}"
reset_password_user_html: "%{name} restabeleceu a palavra-passe do utilizador %{target}"
resolve_report_html: "%{name} resolveu a denúncia %{target}"
- sensitive_account_html: "%{name} marcou a media de %{target} como sensível"
+ sensitive_account_html: "%{name} marcou a multimédia de %{target} como sensível"
silence_account_html: "%{name} silenciou a conta de %{target}"
suspend_account_html: "%{name} suspendeu a conta de %{target}"
unassigned_report_html: "%{name} desatribuiu a denúncia %{target}"
unblock_email_account_html: "%{name} desbloqueou o endereço de e-mail de %{target}"
- unsensitive_account_html: "%{name} desmarcou a media de %{target} como sensível"
+ unsensitive_account_html: "%{name} desmarcou a multimédia de %{target} como sensível"
unsilence_account_html: "%{name} desativou o silêncio de %{target}"
unsuspend_account_html: "%{name} desativou a suspensão de %{target}"
update_announcement_html: "%{name} atualizou o anúncio %{target}"
@@ -291,7 +302,7 @@ pt-PT:
update_report_html: "%{name} atualizou a denúncia %{target}"
update_status_html: "%{name} atualizou o estado de %{target}"
update_user_role_html: "%{name} alterou a função %{target}"
- deleted_account: conta apagada
+ deleted_account: conta eliminada
empty: Não foram encontrados registos.
filter_by_action: Filtrar por ação
filter_by_user: Filtrar por utilizador
@@ -302,7 +313,7 @@ pt-PT:
edit:
title: Editar comunicado
empty: Nenhum comunicado encontrado.
- live: Em direto
+ live: Em tempo real
new:
create: Criar comunicado
title: Novo comunicado
@@ -352,7 +363,7 @@ pt-PT:
dashboard:
active_users: utilizadores ativos
interactions: interações
- media_storage: Armazenamento de media
+ media_storage: Armazenamento de multimédia
new_users: novos utilizadores
opened_reports: denúncias abertas
pending_appeals_html:
@@ -393,7 +404,7 @@ pt-PT:
confirm: Suspender
permanent_action: Desfazer a suspensão não restaurará nenhum dado ou relacionamento.
preamble_html: Está prestes a suspender %{domain} e seus subdomínios.
- remove_all_data: Isto irá remover todo o conteúdo, media e dados de perfil para este domínio do seu servidor.
+ remove_all_data: Isto irá remover todo o conteúdo, multimédias e dados de perfil para este domínio do seu servidor.
stop_communication: O seu servidor irá parar de comunicar com esses servidores.
title: Confirmar o bloqueio de domínio para %{domain}
undo_relationships: Isto irá desfazer qualquer relação entre as contas desses servidores e as suas.
@@ -409,7 +420,7 @@ pt-PT:
create: Criar bloqueio
hint: O bloqueio do domínio não impedirá a criação de registos de contas na base de dados, mas aplicará retroativamente e automaticamente métodos de moderação específicos a essas contas.
severity:
- desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize Nenhum se apenas quiser rejeitar ficheiros media."
+ desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do seu servidor todo o conteúdo, multimédias e dados de perfil das contas deste domínio. Utilize Nenhum se apenas quiser rejeitar ficheiros multimédia."
noop: Nenhum
silence: Limitar
suspend: Suspender
@@ -422,8 +433,8 @@ pt-PT:
private_comment_hint: Comentário sobre essa limitação de domínio para uso interno pelos moderadores.
public_comment: Comentário público
public_comment_hint: Comentário sobre essa limitação de domínio para o público geral, se ativada a divulgação da lista de limitações de domínio.
- reject_media: Rejeitar ficheiros de media
- reject_media_hint: Remove ficheiros de media armazenados localmente, e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões
+ reject_media: Rejeitar ficheiros multimédia
+ reject_media_hint: Remove ficheiros multimédia armazenados localmente e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões
reject_reports: Rejeitar denúncias
reject_reports_hint: Ignorar todas as denúncias provenientes deste domínio. Sem pertinência para suspensões
undo: Anular o bloqueio por domínio
@@ -478,8 +489,8 @@ pt-PT:
view_all: Ver registos de auditoria completos
availability:
description_html:
- one: Se a transmissão ao domínio falhar ao final de %{count} dia(s), não será feita mais nenhuma tentativa de transmissão a menos que seja recebida uma transmissão proveniente desse domínio.
- other: Se a transmissão ao domínio falhar em %{count} dias diferentes sem sucesso, nenhuma tentativa de transmissão será feita a menos que uma transmissão proveniente do domínio seja recebida.
+ one: Se a entrega ao domínio falhar %{count} dia(s) sem sucesso, não serão efetuadas mais tentativas de entrega, a menos que seja recebida uma entrega do domínio.
+ other: Se a entrega ao domínio falhar %{count} dias diferentes sem sucesso, não serão efetuadas mais tentativas de entrega, a menos que seja recebida uma entrega do domínio.
failure_threshold_reached: Limite de falhas atingido em %{date}.
failures_recorded:
one: Tentativa falhada em %{count} dia.
@@ -497,7 +508,7 @@ pt-PT:
description_html: Pode definir políticas de conteúdo que serão aplicadas a todas as contas deste domínio e a qualquer um dos seus subdomínios.
limited_federation_mode_description_html: Pode escolher se deseja permitir a federação com este domínio.
policies:
- reject_media: Rejeitar media
+ reject_media: Rejeitar multimédia
reject_reports: Rejeitar denúncias
silence: Limitar
suspend: Suspender
@@ -510,7 +521,7 @@ pt-PT:
instance_followers_measure: nossos seguidores lá
instance_follows_measure: os seus seguidores aqui
instance_languages_dimension: Idiomas mais populares
- instance_media_attachments_measure: anexos de media armazenados
+ instance_media_attachments_measure: anexos multimédia armazenados
instance_reports_measure: denúncias sobre eles
instance_statuses_measure: publicações armazenadas
delivery:
@@ -541,7 +552,7 @@ pt-PT:
total_followed_by_them: Seguido(s) por eles
total_followed_by_us: Seguido(s) por nós
total_reported: Denúncias sobre eles
- total_storage: Anexos de media
+ total_storage: Anexos multimédia
totals_time_period_hint_html: Os totais exibidos abaixo incluem dados referentes ao tempo total.
unknown_instance: Atualmente não há registo deste domínio neste servidor.
invites:
@@ -597,7 +608,7 @@ pt-PT:
action_taken_by: Ação tomada por
actions:
delete_description_html: As publicações denunciadas serão eliminadas, e será registada uma reprimenda para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
- mark_as_sensitive_description_html: A media nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
+ mark_as_sensitive_description_html: A multimédia nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
other_description_html: Ver mais opções para controlar o comportamento da conta e personalizar a comunicação para a conta denunciada.
resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, não será registada nenhuma reprimenda, e a denúncia será fechada.
silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando fortemente o seu alcance. Pode sempre ser revertido. Encerrar todas as denúncias contra esta conta.
@@ -660,7 +671,7 @@ pt-PT:
suspend_html: 'Está prestes a suspender a conta de @%{acct}. Isto irá:'
actions:
delete_html: Excluir as publicações ofensivas
- mark_as_sensitive_html: Marcar a mídia dos posts ofensivos como sensível
+ mark_as_sensitive_html: Marcar a multimédia das publicações ofensivas como sensível
silence_html: Limitar firmemente o alcance de @%{acct}, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente no perfil
suspend_html: Suspender @%{acct}, tornando seu perfil e conteúdo inacessíveis e impossível de interagir
close_report: 'Marcar relatório #%{id} como resolvido'
@@ -726,7 +737,7 @@ pt-PT:
manage_taxonomies: Gerir taxonomias
manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag
manage_user_access: Gerir acesso de utilizador
- manage_user_access_description: Permite aos utilizadores desativar a autenticação de dois factores de outros utilizadores, alterar o seu e-mail e reiniciar a sua palavra-passe
+ manage_user_access_description: Permite aos utilizadores desativarem a autenticação de dois fatores de outros utilizadores, alterarem os seus endereços de correio eletrónico e redefinirem as suas palavras-passe
manage_users: Gerir utilizadores
manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles
manage_webhooks: Gerir webhooks
@@ -797,11 +808,11 @@ pt-PT:
federation_authentication: Imposição de autenticação da federação
title: Definições do servidor
site_uploads:
- delete: Eliminar arquivo carregado
+ delete: Eliminar ficheiro enviado
destroyed_msg: Envio do site eliminado com sucesso!
software_updates:
critical_update: Crítico — por favor, atualize rapidamente
- description: Recomenda-se que mantenha a sua instalação do Mastodon atualizada para beneficiar das últimas correções e funcionalidades. Além disso, é por vezes crítico atualizar o Mastodon de forma atempada para evitar problemas de segurança. Por estas razões, o Mastodon verifica se há actualizações a cada 30 minutos e notifica-o de acordo com as suas preferências de notificação por e-mail.
+ description: Recomenda-se que mantenha a sua instalação do Mastodon atualizada para beneficiar das últimas correções e funcionalidades. Além disso, é por vezes crítico atualizar o Mastodon de forma atempada para evitar problemas de segurança. Por estas razões, o Mastodon verifica as atualizações a cada 30 minutos e irá notificá-lo de acordo com as suas preferências de notificação por e-mail.
documentation_link: Saber mais
release_notes: Notas de lançamento
title: Atualizações disponíveis
@@ -817,24 +828,31 @@ pt-PT:
back_to_account: Voltar para página da conta
back_to_report: Voltar à página da denúncia
batch:
+ add_to_report: 'Adicionar ao relatório #%{id}'
remove_from_report: Remover da denúncia
report: Denúncia
+ contents: Conteúdo
deleted: Eliminado
- favourites: Marcadores
+ favourites: Favoritos
history: Histórico de versões
in_reply_to: A responder a
language: Idioma
media:
- title: Media
+ title: Multimédia
metadata: Metadados
+ no_history: Esta publicação não foi editada
no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado
open: Abrir publicação
original_status: Publicação original
- reblogs: Re-publicacões
+ reblogs: Reblogues
+ replied_to_html: Respondeu a %{acct_link}
status_changed: Publicação alterada
+ status_title: Publicado por @%{name}
+ title: Publicações da conta - @%{name}
trending: Em tendência
+ view_publicly: Visualizar publicamente
visibility: Visibilidade
- with_media: Com media
+ with_media: Com multimédia
strikes:
actions:
delete_statuses: "%{name} eliminou a publicação de %{target}"
@@ -849,7 +867,7 @@ pt-PT:
appeal_rejected: Recurso rejeitado
system_checks:
database_schema_check:
- message_html: Há migrações de base de dados pendentes. Queira executá-las, para garantir que a aplicação se comporta como o esperado
+ message_html: Existem migrações de bases de dados pendentes. Execute-as para garantir que a aplicação se comporta como esperado
elasticsearch_health_red:
message_html: O cluster elasticsearch não está de boa saúde (estado vermelho), as funcionalidades de pesquisa não estão disponíveis
elasticsearch_health_yellow:
@@ -874,6 +892,9 @@ pt-PT:
message_html: Não definiu nenhuma regra para a instância.
sidekiq_process_check:
message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq
+ software_version_check:
+ action: Ver atualizações disponíveis
+ message_html: Está disponível uma atualização do Mastodon.
software_version_critical_check:
action: Ver atualizações disponíveis
message_html: Está disponível uma atualização crítica do Mastodon. Por favor, atualize assim que possível.
@@ -904,8 +925,37 @@ pt-PT:
reset: Repor
review: Estado da revisão
search: Pesquisar
- title: Hashtags
+ title: Etiquetas
updated_msg: 'Definições de #etiquetas atualizadas com sucesso'
+ terms_of_service:
+ back: Voltar aos Termos do Serviço
+ changelog: O que mudou
+ create: Use o seu próprio
+ current: Atual
+ draft: Rascunho
+ generate: Utilizar modelo
+ generates:
+ action: Gerar
+ chance_to_review_html: "Os termos de serviço gerados não serão publicados automaticamente. Terá a possibilidade de rever os resultados. Por favor, preencha os detalhes necessários para prosseguir."
+ explanation_html: O modelo de termos de serviço fornecido destina-se apenas a fins informativos e não deve ser interpretado como aconselhamento jurídico sobre qualquer assunto. Consulte o seu próprio consultor jurídico sobre a sua situação e questões jurídicas específicas que tenha.
+ title: Configuração dos Termos de Serviço
+ history: Histórico
+ live: Em tempo real
+ no_history: Ainda não há nenhuma alteração registada nos termos de serviço.
+ no_terms_of_service_html: Atualmente, não tem quaisquer termos de serviço configurados. Os termos de serviço destinam-se a proporcionar clareza e a protegê-lo de potenciais responsabilidades em litígios com os seus utilizadores.
+ notified_on_html: Utilizadores notificados em %{date}
+ notify_users: Notificar utilizadores
+ preview:
+ explanation_html: 'O e-mail será enviado para %{display_count} utilizadores que se inscreveram antes de %{date}. O texto seguinte será incluído na mensagem de e-mail:'
+ send_preview: Enviar pré-visualização para %{email}
+ send_to_all:
+ one: Enviar %{display_count} e-mail
+ other: Enviar %{display_count} e-mails
+ title: Pré-visualizar termos de notificação de serviço
+ publish: Publicar
+ published_on_html: Publicado em %{date}
+ save_draft: Guardar rascunho
+ title: Termos de Serviço
title: Administração
trends:
allow: Permitir
@@ -947,14 +997,14 @@ pt-PT:
confirm_allow_account: Tem a certeza que pretende aceitar as contas selecionadas?
confirm_disallow: Tem a certeza que pretende rejeitar os estados selecionados?
confirm_disallow_account: Tem a certeza que pretende rejeitar as contas selecionadas?
- description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente.
+ description_html: Estas são publicações que o seu servidor conhece e que estão a ser muito partilhadas e adicionadas aos favoritos neste momento. Pode ajudar os seus utilizadores novos e antigos a encontrar mais pessoas para seguir. Nenhuma publicação é apresentada publicamente até que o autor seja aprovado e o autor permita que a sua conta seja sugerida a outros. Também pode permitir ou rejeitar mensagens individuais.
disallow: Não permitir publicação
disallow_account: Não permitir autor
no_status_selected: Não foram alteradas quaisquer publicações de tendências, uma vez que nenhuma foi selecionada
not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros
shared_by:
- one: Partilhado ou adicionado aos marcadores uma vez
- other: Partilhado e adicionado aos marcadores %{friendly_count} vezes
+ one: Partilhada ou adicionada aos favoritos uma vez
+ other: Partilhada ou adicionada aos favoritos %{friendly_count} vezes
title: Publicações em tendência
tags:
current_score: Pontuação atual %{score}
@@ -1054,7 +1104,7 @@ pt-PT:
remove: Desvincular pseudónimo
appearance:
advanced_web_interface: Interface web avançada
- advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: Página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.'
+ advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.'
animations_and_accessibility: Animações e acessibilidade
confirmation_dialogs: Caixas de confirmação
discovery: Descobrir
@@ -1078,7 +1128,7 @@ pt-PT:
regenerate_token: Regenerar token de acesso
token_regenerated: Token de acesso regenerado com sucesso
warning: Cuidado com estes dados. Não partilhar com ninguém!
- your_token: O teu token de acesso
+ your_token: O seu token de acesso
auth:
apply_for_account: Solicitar uma conta
captcha_confirmation:
@@ -1096,7 +1146,7 @@ pt-PT:
welcome_title: Bem-vindo(a), %{name}!
wrong_email_hint: Se este endereço de correio eletrónico não estiver correto, pode alterá-lo nas definições de conta.
delete_account: Eliminar conta
- delete_account_html: Se deseja eliminar a sua conta, pode continuar aqui. Uma confirmação será solicitada.
+ delete_account_html: Se pretender eliminar a sua conta, pode fazê-lo aqui. Ser-lhe-á pedida uma confirmação.
description:
prefix_invited_by_user: "@%{name} convidou-o a juntar-se a esta instância do Mastodon!"
prefix_sign_up: Inscreva-se hoje no Mastodon!
@@ -1105,15 +1155,14 @@ pt-PT:
dont_have_your_security_key: Não tem a sua chave de segurança?
forgot_password: Esqueceu-se da palavra-passe?
invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo.
- link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel, ou um código de recuperação
- link_to_webauth: Usa o teu dispositivo de chave de segurança
+ link_to_otp: Introduza um código de dois fatores do seu telemóvel ou um código de recuperação
+ link_to_webauth: Utilize o seu dispositivo de chave de segurança
log_in_with: Iniciar sessão com
login: Entrar
logout: Sair
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 +1187,7 @@ 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.
+ email_settings_hint_html: Clique na hiperligação que enviámos para %{email} para começar a utilizar o Mastodon. Estaremos à espera aqui mesmo.
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 +1196,7 @@ 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.
+ preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa no fediverso, independentemente do local onde a sua conta está alojada.
title: Vamos lá inscrevê-lo em %{domain}.
status:
account_status: Estado da conta
@@ -1159,10 +1208,14 @@ pt-PT:
view_strikes: Veja as reprimendas anteriores sobre a sua conta
too_fast: Formulário enviado demasiado rapidamente, tente novamente.
use_security_key: Usar chave de segurança
+ user_agreement_html: Eu li e concordo com os termos do serviço e política de privacidade
author_attribution:
example_title: Texto de exemplo
+ hint_html: Está a escrever notícias ou artigos de blogue fora do Mastodon? Controle a forma como é creditado quando estes são partilhados no Mastodon.
+ instructions: 'Certifique-se de que este código está no HTML do seu artigo:'
more_from_html: Mais de %{name}
- s_blog: Blog de %{name}
+ s_blog: Blogue de %{name}
+ then_instructions: Em seguida, adicione o nome de domínio da publicação no campo abaixo.
title: Atribuição de autor
challenge:
confirm: Continuar
@@ -1265,20 +1318,20 @@ pt-PT:
download: Descarregar o seu arquivo
hint_html: Pode pedir um arquivo das suas publicações e ficheiros de media carregados. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer programa compatível. Pode solicitar um arquivo a cada 7 dias.
in_progress: A compilar o seu arquivo...
- request: Peça o seu arquivo
+ request: Pedir o seu arquivo
size: Tamanho
blocks: Bloqueaste
bookmarks: Marcadores
csv: CSV
domain_blocks: Bloqueios de domínio
lists: Listas
- mutes: Tens em silêncio
- storage: Armazenamento de media
+ mutes: Que ocultou
+ storage: Armazenamento de multimédia
featured_tags:
add_new: Adicionar nova
errors:
- limit: Já destacou o número máximo de hashtags permitido
- hint_html: "O que são etiquetas em destaque? Exibidas de forma bem visível no seu perfil público, permitem que as pessoas consultem as suas publicações públicas especificamente sob essas etiquetas. São uma óptima ferramenta para dar seguimento a trabalhos criativos ou projectos de longo prazo."
+ limit: Já destacou o número máximo de etiquetas permitido
+ hint_html: "Coloque as etiquetas mais importantes no seu perfil. Uma excelente ferramenta para acompanhar os seus trabalhos criativos e projetos a longo prazo, as etiquetas em destaque são apresentadas de forma proeminente no seu perfil e permitem um acesso rápido às suas próprias publicações."
filters:
contexts:
account: Perfis
@@ -1344,7 +1397,7 @@ pt-PT:
today: hoje
validation_errors:
one: Algo não está correcto. Por favor analise o erro abaixo
- other: Algo não está bem. Queira analisar os %{count} erros abaixo
+ other: Algo ainda não está correto! Reveja os %{count} erros abaixo
imports:
errors:
empty: Ficheiro CSV vazio
@@ -1360,6 +1413,44 @@ pt-PT:
merge_long: Manter os registos existentes e adicionar novos registos
overwrite: Escrever por cima
overwrite_long: Substituir os registos atuais pelos novos
+ overwrite_preambles:
+ blocking_html:
+ one: Está prestes a substituir a sua lista de bloqueios com até conta%{count} de %{filename}.
+ other: Está prestes a substituir a sua lista de bloqueios com até %{count} contas de %{filename}.
+ bookmarks_html:
+ one: Está prestes a substituir os seus marcadores com até %{count} publicações de %{filename}.
+ other: Está prestes a substituir os seus marcadores com até %{count} publicação de %{filename}.
+ domain_blocking_html:
+ one: Está prestes a substituir a sua lista de bloqueios de domínio com até %{count} domínio de %{filename}.
+ other: Está prestes a substituir a sua lista de bloqueios de domínio com até %{count} domínios de %{filename}.
+ following_html:
+ one: Está prestes a seguir até %{count} conta de %{filename} e parar de seguir quaisquer outras contas.
+ other: Está prestes a seguir até %{count} contas de %{filename} e parar de seguir quaisquer outras contas.
+ lists_html:
+ one: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{count} conta serão adicionadas a novas listas.
+ other: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{count} contas serão adicionadas a novas listas.
+ muting_html:
+ one: Está prestes a substituir a sua lista de conta ocultada com até %{count} conta de %{filename}.
+ other: Está prestes a substituir a sua lista de contas ocultadas com até %{count} contas de %{filename}.
+ preambles:
+ blocking_html:
+ one: Está prestes a bloquear até %{count} conta de %{filename}.
+ other: Está prestes a bloquear até %{count} contas de %{filename}.
+ bookmarks_html:
+ one: Está prestes a adicionar até %{count} publicação de %{filename} aos seus marcadores.
+ other: Está prestes a adicionar até %{count} publicações de %{filename} aos seus marcadores.
+ domain_blocking_html:
+ one: Está prestes a bloquear até %{count} domínio de %{filename}.
+ other: Está prestes a bloquear até %{count} domínios de %{filename}.
+ following_html:
+ one: Está prestes a seguir até %{count} conta de %{filename}.
+ other: Está prestes a seguir até %{count} contas de %{filename}.
+ lists_html:
+ one: Está prestes a adicionar até %{count} conta do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar.
+ other: Está prestes a adicionar até %{count} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar.
+ muting_html:
+ one: Está prestes a ocultar até %{count} conta de %{filename}.
+ other: Está prestes a ocultar até %{count} contas de %{filename}.
preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas.
recent_imports: Importações recentes
states:
@@ -1368,7 +1459,7 @@ pt-PT:
scheduled: Agendado
unconfirmed: Não confirmado
status: Estado
- success: Os teus dados foram enviados correctamente e serão processados em breve
+ success: Os seus dados foram enviados correctamente e serão processados em breve
time_started: Iniciado em
titles:
blocking: Importando contas bloqueadas
@@ -1376,11 +1467,11 @@ pt-PT:
domain_blocking: Importando domínios bloqueados
following: Importando contas seguidas
lists: A importar listas
- muting: Importando contas silenciadas
+ muting: Importando contas ocultadas
type: Tipo de importação
type_groups:
constructive: Seguidores e marcadores
- destructive: Bloqueios e silenciamentos
+ destructive: Bloqueios e ocultados
types:
blocking: Lista de bloqueio
bookmarks: Marcadores
@@ -1388,7 +1479,7 @@ pt-PT:
following: Lista de pessoas que estás a seguir
lists: Listas
muting: Lista de utilizadores silenciados
- upload: Carregar
+ upload: Enviar
invites:
delete: Desativar
expired: Expirados
@@ -1405,23 +1496,23 @@ pt-PT:
invited_by: 'Foi convidado por:'
max_uses:
one: 1 uso
- other: "%{count} usos"
+ other: "%{count} utilizações"
max_uses_prompt: Sem limite
- prompt: Gerar e partilhar ligações com outras pessoas para permitir acesso a essa instância
+ prompt: Gerar e partilhar hiperligações com outras pessoas para permitir acesso a essa instância
table:
expires_at: Expira
- uses: Usos
+ uses: Utilizações
title: Convidar pessoas
lists:
errors:
limit: Atingiu o número máximo de listas permitido
login_activities:
authentication_methods:
- otp: aplicação de autenticação em duas etapas
+ otp: aplicação de autenticação de dois fatores
password: palavra-passe
sign_in_token: código de segurança de e-mail
webauthn: chaves de segurança
- description_html: Se vê atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação em duas etapas.
+ description_html: Se vir atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação de dois fatores.
empty: Sem histórico de autenticação disponível
failed_sign_in_html: Tentativa falhada de início de sessão com %{method} de %{ip} (%{browser})
successful_sign_in_html: Sessão correctamente iniciada com %{method} de %{ip} (%{browser})
@@ -1430,10 +1521,21 @@ pt-PT:
unsubscribe:
action: Sim, cancelar subscrição
complete: Subscrição Cancelada
+ confirmation_html: Tem a certeza que deseja cancelar a subscrição para receber %{type} pelo Mastodon em %{domain} no seu e-mail em %{email}? Pode sempre subscrever novamente nas suas definições de notificação por e-mail.
+ emails:
+ notification_emails:
+ favourite: e-mails de notificação de favoritos
+ follow: e-mails de notificação de seguidor
+ follow_request: e-mails de pedido de seguidor
+ mention: e-mails de notificação de menção
+ reblog: notificações por e-mail de impulsos
+ resubscribe_html: Se tiver anulado a subscrição por engano, pode voltar a subscrevê-la nas definições de notificação por e-mail.
+ success_html: Não receberá novamente %{type} do Mastodon em %{domain} para o seu e-mail em %{email}.
title: Cancelar subscrição
media_attachments:
validations:
images_and_video: Não é possível anexar um vídeo a uma publicação que já contém imagens
+ not_found: Multimédia %{ids} não encontrada ou já anexada a outra publicação
not_ready: Não é possível anexar ficheiros que ainda não acabaram de ser processados. Tente outra vez daqui a pouco!
too_many: Não é possível anexar mais de 4 ficheiros
migrations:
@@ -1449,7 +1551,7 @@ pt-PT:
on_cooldown: Você está no período de espera
followers_count: Seguidores no momento da migração
incoming_migrations: A migrar de uma conta diferente
- incoming_migrations_html: Para migrar de outra conta para esta, primeiro você precisa criar um pseudónimo.
+ incoming_migrations_html: Para passar de outra conta para esta, primeiro é necessário criar um pseudónimo de conta.
moved_msg: A sua conta está agora a ser redirecionada para %{acct} e os seus seguidores estão a ser transferidos.
not_redirecting: A sua conta não está atualmente a ser redirecionada para nenhuma outra conta.
on_cooldown: Migrou recentemente a sua conta. Esta função ficará disponível novamente em %{count} dias.
@@ -1471,7 +1573,7 @@ pt-PT:
title: Moderação
move_handler:
carry_blocks_over_text: Este utilizador migrou de %{acct}, que você tinha bloqueado.
- carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha silenciado.
+ carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha ocultado.
copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as suas notas anteriores sobre ele:'
navigation:
toggle_menu: Alternar o menu
@@ -1482,11 +1584,11 @@ pt-PT:
sign_up:
subject: "%{name} inscreveu-se"
favourite:
- body: 'A sua publicação foi adicionada aos marcadores por %{name}:'
- subject: "%{name} adicionou a sua publicação aos marcadores"
- title: Novo marcador
+ body: 'A sua publicação foi adicionada aos favoritos por %{name}:'
+ subject: "%{name} adicionou a sua publicação aos favoritos"
+ title: Novo favorito
follow:
- body: "%{name} é teu seguidor!"
+ body: "%{name} é seu seguidor!"
subject: "%{name} começou a seguir-te"
title: Novo seguidor
follow_request:
@@ -1502,14 +1604,16 @@ pt-PT:
poll:
subject: A sondagem de %{name} encerrou
reblog:
- body: 'A sua publicação foi reforçada por %{name}:'
- subject: "%{name} reforçou a sua publicação"
- title: Novo reforço
+ body: 'A sua publicação foi impulsionada por %{name}:'
+ subject: "%{name} impulsionou a sua publicação"
+ title: Novo impulso
status:
subject: "%{name} acabou de publicar"
update:
subject: "%{name} editou uma publicação"
notifications:
+ administration_emails: Notificações por e-mail do administrador
+ email_events: Eventos para notificações por e-mail
email_events_hint: 'Selecione os casos para os quais deseja receber notificações:'
number:
human:
@@ -1523,7 +1627,7 @@ pt-PT:
trillion: T
otp_authentication:
code_hint: Introduz o código gerado pela tua aplicação de autenticação para confirmar
- description_html: Se ativar a autenticação em duas etapas, para entrar na sua conta terá de ter consigo o seu telefone, que vai gerar os tokens necessários à validação do seu acesso.
+ description_html: Se ativar a autenticação de dois fatores utilizando uma aplicação de autenticação, para iniciar sessão terá de estar na posse do seu telemóvel, que gerará tokens para introduzir.
enable: Ativar
instructions_html: "Digitalize este código QR no Google Authenticator ou numa aplicação TOTP semelhante a partir do seu telemóvel. A partir desse momento, essa aplicação irá gerar tokens que terá que inserir para aceder à sua conta."
manual_instructions: 'Se não conseguir digitalizar o código QR e precisar de o inserir manualmente, eis o código por extenso:'
@@ -1603,6 +1707,7 @@ pt-PT:
scheduled_statuses:
over_daily_limit: Excedeste o limite de %{limit} publicações agendadas para esse dia
over_total_limit: Tu excedeste o limite de %{limit} publicações agendadas
+ too_soon: a data tem de ser no futuro
self_destruct:
lead_html: Infelizmente, %{domain} vai fechar definitivamente. Se lá tinha conta, não pode continuar a usá-la, mas ainda pode pedir uma cópia dos seus dados.
title: Este servidor vai fechar
@@ -1656,23 +1761,25 @@ pt-PT:
account: Conta
account_settings: Definições da conta
aliases: Pseudónimos da conta
- appearance: Aspecto
+ appearance: Aparência
authorized_apps: Aplicações autorizadas
back: Voltar ao Mastodon
delete: Eliminação da conta
development: Desenvolvimento
edit_profile: Editar perfil
+ export: Exportar
featured_tags: Etiquetas destacadas
import: Importar
import_and_export: Importar e exportar
migrate: Migração de conta
+ notifications: Notificações por e-mail
preferences: Preferências
profile: Perfil
relationships: Seguindo e seguidores
- severed_relationships: Relações cessadas
+ severed_relationships: Relações cortadas
statuses_cleanup: Remoção automática da publicação
strikes: Punições de moderação
- two_factor_authentication: Autenticação em duas etapas
+ two_factor_authentication: Autenticação de dois fatores
webauthn_authentication: Chaves de segurança
severed_relationships:
download: Transferir (%{count})
@@ -1697,7 +1804,7 @@ pt-PT:
video:
one: "%{count} vídeo"
other: "%{count} vídeos"
- boosted_from_html: Reforçado por %{acct_link}
+ boosted_from_html: Impulsionado por %{acct_link}
content_warning: 'Aviso de conteúdo: %{warning}'
default_language: Igual ao idioma da interface
disallowed_hashtags:
@@ -1711,7 +1818,7 @@ pt-PT:
direct: Publicações visíveis apenas para utilizadores mencionados não podem ser afixadas
limit: Já afixaste a quantidade máxima de publicações
ownership: Não podem ser afixadas publicações doutras pessoas
- reblog: Não pode afixar um reforço
+ reblog: Não é possível fixar um impulso
title: '%{name}: "%{quote}"'
visibilities:
direct: Direto
@@ -1726,22 +1833,22 @@ pt-PT:
enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um certo limite de tempo, a não ser que correspondam a uma das seguintes excepções
exceptions: Exceções
explanation: Como apagar publicações é uma operação custosa, isto é feito lentamente ao longo do tempo, quando o servidor não está ocupado. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade definido.
- ignore_favs: Ignorar marcadores
- ignore_reblogs: Ignorar reforços
+ ignore_favs: Ignorar favoritos
+ ignore_reblogs: Ignorar os impulsos
interaction_exceptions: Exceções baseadas em interações
- interaction_exceptions_explanation: Note que não há garantia de que as publicações sejam excluídas se ficarem abaixo do limite de favoritos ou partilhas após as ter verificado uma vez.
+ interaction_exceptions_explanation: Tenha em atenção que não há garantia de que as mensagens sejam eliminadas se ficarem abaixo do limite de favoritos ou de impulsionamento depois de os terem ultrapassado.
keep_direct: Manter mensagens diretas
keep_direct_hint: Não apaga nenhuma das suas mensagens diretas
keep_media: Manter publicações com anexos de multimédia
- keep_media_hint: Não apaga nenhuma das suas publicações com multimédia anexada
+ keep_media_hint: Não elimina nenhuma das suas publicações com multimédia anexada
keep_pinned: Manter publicações afixadas
keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas
keep_polls: Manter sondagens
keep_polls_hint: Não apaga nenhuma das suas sondagens
keep_self_bookmark: Manter as publicações que marcou
keep_self_bookmark_hint: Não elimina as suas próprias publicações se as tiver nos marcadores
- keep_self_fav: Manter as publicações que marcou
- keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado
+ keep_self_fav: Manter as publicações que adicionou aos favoritos
+ keep_self_fav_hint: Não elimina as suas próprias publicações se as tiver adicionado aos favoritos
min_age:
'1209600': 2 semanas
'15778476': 6 meses
@@ -1752,10 +1859,10 @@ pt-PT:
'63113904': 2 anos
'7889238': 3 meses
min_age_label: Limite de idade
- min_favs: Manter pelo menos as publicações dos marcadores
- min_favs_hint: Não elimina nenhuma das suas publicações que tenha recebido pelo menos este número de favoritos. Deixe em branco para eliminar publicações, independentemente do seu número de favoritos
- min_reblogs: Manter as publicações reforçadas mais de
- min_reblogs_hint: Não apaga nenhuma das suas publicações que tenha sido partilhada mais do que este número de vezes. Deixe em branco para apagar as publicações, independentemente do número de partilhas
+ min_favs: Manter publicações adicionadas aos favoritos pelos menos
+ min_favs_hint: Não elimina nenhuma das suas publicações que tenha sido adicionada aos favoritos este número de vezes. Deixe em branco para eliminar publicações, independentemente do número de vezes que tenham sido adicionadas aos favoritos
+ min_reblogs: Manter as publicações impulsionadas, pelo menos
+ min_reblogs_hint: Não elimina nenhuma das suas mensagens que tenha sido impulsionada pelo menos este número de vezes. Deixe em branco para apagar as mensagens independentemente do número de impulsionamentos
stream_entries:
sensitive_content: Conteúdo problemático
strikes:
@@ -1763,10 +1870,12 @@ pt-PT:
too_late: É tarde demais para recorrer desta reprimenda
tags:
does_not_match_previous_name: não coincide com o nome anterior
+ terms_of_service:
+ title: Termos de Serviço
themes:
- contrast: Mastodon (Elevado contraste)
- default: Mastodon (Escuro)
- mastodon-light: Mastodon (Claro)
+ contrast: Mastodon (alto contraste)
+ default: Mastodon (escuro)
+ mastodon-light: Mastodon (claro)
system: Automático (usar tema do sistema)
time:
formats:
@@ -1781,16 +1890,16 @@ pt-PT:
two_factor_authentication:
add: Adicionar
disable: Desactivar autenticação por dois factores (2FA)
- disabled_success: Autenticação em duas etapas correctamente desactivada
+ disabled_success: Autenticação de dois fatores desativada com sucesso
edit: Editar
- enabled: A autenticação em duas etapas está ativada
- enabled_success: Autenticação em duas etapas correctamente activada
+ enabled: A autenticação de dois fatores está ativada
+ enabled_success: Autenticação de dois fatores ativada com sucesso
generate_recovery_codes: Gerar códigos para recuperar conta
lost_recovery_codes: Os códigos de recuperação permitem que recupere o acesso à sua conta caso perca o seu telemóvel. Se perder os códigos de recuperação, pode criar uns novos aqui. Os seus códigos antigos serão revogados.
- methods: Métodos de autenticação em duas etapas
+ methods: Métodos de autenticação de dois fatores
otp: Aplicação de autenticação
recovery_codes: Cópia de segurança dos códigos de recuperação
- recovery_codes_regenerated: Códigos de recuperação foram correctamente gerados
+ recovery_codes_regenerated: Os códigos de recuperação foram corretamente gerados
recovery_instructions_html: Se perder o seu telemóvel, poderá usar um dos códigos de recuperação para voltar a ter acesso à sua conta. Guarde os códigos de recuperação em lugar seguro. Por exemplo, pode imprimi-los e guardá-los junto doutros documentos importantes.
webauthn: Chaves de segurança
user_mailer:
@@ -1808,12 +1917,12 @@ pt-PT:
backup_ready:
explanation: Pediu uma cópia completa da sua conta Mastodon.
extra: Está pronta para transferir!
- subject: O seu arquivo está pronto para descarregar
+ subject: O seu arquivo está pronto para ser descarregado
title: Arquivo de ficheiros
failed_2fa:
details: 'Aqui estão os detalhes da tentativa de entrada:'
- explanation: Alguém tentou entrar em sua conta mas forneceu um segundo fator de autenticação inválido.
- further_actions_html: Se não foi você, recomendamos que %{action} imediatamente, pois pode ter sido comprometido.
+ explanation: Alguém tentou iniciar sessão na sua conta, mas forneceu um segundo fator de autenticação inválido.
+ further_actions_html: Se não foi você, recomendamos que %{action} imediatamente, pois pode a sua conta pode ter sido comprometida.
subject: Falha na autenticação do segundo fator
title: Falha na autenticação do segundo fator
suspicious_sign_in:
@@ -1823,6 +1932,15 @@ pt-PT:
further_actions_html: Se não foi você, recomendamos que %{action} imediatamente e ative a autenticação de dois fatores para manter a sua conta segura.
subject: A sua conta foi acedida a partir dum endereço IP novo
title: Um início de sessão novo
+ terms_of_service_changed:
+ agreement: Ao continuar a utilizar %{domain}, concorda com estes termos. Se discordar dos termos atualizados, poderá rescindir o seu acordo com %{domain} a qualquer momento, eliminando a sua conta.
+ changelog: 'Em resumo, eis o que esta atualização significa para si:'
+ description: 'Está a receber esta mensagem de correio eletrónico porque estamos a fazer algumas alterações aos nossos termos de serviço em %{domain}. Recomendamos que reveja os termos atualizados na íntegra aqui:'
+ description_html: Está a receber esta mensagem de correio eletrónico porque estamos a fazer algumas alterações aos nossos termos de serviço em %{domain}. Recomendamos que reveja os termos atualizados na íntegra aqui.
+ sign_off: A equipa de %{domain}
+ subject: Atualizações dos nossos termos de serviço
+ subtitle: Os termos de serviço de %{domain} estão a mudar
+ title: Atualização importante
warning:
appeal: Submeter um recurso
appeal_description: Se acha que isso é um erro, pode submeter um recurso para a equipa de %{instance}.
@@ -1830,10 +1948,10 @@ pt-PT:
spam: Spam
violation: O conteúdo infringe as seguintes diretrizes da comunidade
explanation:
- delete_statuses: Algumas das suas publicações foram consideradas como infractoras duma ou mais diretrizes da comunidade, e subsequentemente removidas pelos moderadores de %{instance}.
- disable: Já não pode utilizar a sua conta, mas o seu perfil e outros dados permanecem intactos. Pode solicitar uma cópia dos seus dados, alterar as definições da conta, ou que a sua conta seja apagada.
- mark_statuses_as_sensitive: Algumas das suas publicações foram marcadas como problemáticos pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicar, lembre-se que pode você próprio marcar os media como problemáticos.
- sensitive: A partir de agora, todos os ficheiros de media que carregue serão marcados como problemáticos e escondidos sob um aviso pedido para tocar para os ver.
+ delete_statuses: Algumas das suas mensagens foram consideradas como violando uma ou mais diretrizes da comunidade e foram subsequentemente removidas pelos moderadores do %{instance}.
+ disable: Já não pode utilizar a sua conta, mas o seu perfil e outros dados permanecem intactos. Pode solicitar uma cópia de segurança dos seus dados, alterar as definições da conta ou eliminar a sua conta.
+ mark_statuses_as_sensitive: Algumas das suas publicações foram marcadas como problemáticas pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar/clicar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicar, lembre-se que pode você próprio marcar os elementos multimédia como problemáticos.
+ sensitive: A partir de agora, todos os ficheiros multimédia que enviar serão marcados como problemáticos e escondidos sob um aviso pedido para tocar/clicar para os ver.
silence: Pode ainda utilizar a sua conta mas apenas as pessoas que já o seguem poderão ver as suas mensagens neste servidor, e poderá ser excluído de várias funcionalidades de divulgação. No entanto, outros poderão ainda segui-lo manualmente.
suspend: Não pode mais utilizar a sua conta, e o seu perfil e outros dados já não se encontram acessíveis. Poderá ainda iniciar sessão para solicitar uma cópia dos seus dados até os mesmos serem totalmente removidos em cerca de 30 dias, porém reteremos alguns dados básicos para o impedir evitar a suspensão.
reason: 'Motivo:'
@@ -1862,21 +1980,21 @@ pt-PT:
checklist_subtitle: 'Vamos começar nesta nova fronteira social:'
checklist_title: Checklist de Boas-vindas
edit_profile_action: Personalizar
- edit_profile_step: Aumente suas interações tendo um perfil completo.
+ edit_profile_step: Aumente as suas interações com um perfil completo.
edit_profile_title: Personalize seu perfil
explanation: Aqui estão algumas dicas para começar
feature_action: Mais informações
feature_audience: O Mastodon oferece-lhe uma possibilidade única de gerir a sua audiência sem intermediários. O Mastodon implantado na sua própria infraestrutura permite-lhe seguir e ser seguido a partir de qualquer outro servidor Mastodon online e não está sob o controlo de ninguém a não ser o seu.
feature_audience_title: Construa seu público em confiança
- feature_control: Você sabe melhor o que quer ver no seu feed. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica e torne o seu canto da Internet um pouco mais parecido consigo.
+ feature_control: Você sabe melhor o que quer ver na cronologia da sua página inicial. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica, e torne o seu canto da Internet um pouco mais parecido consigo.
feature_control_title: Mantenha o controlo da sua própria cronologia
feature_creativity: O Mastodon suporta publicações de áudio, vídeo e imagens, descrições de acessibilidade, sondagens, avisos de conteúdo, avatares animados, emojis personalizados, controlo de corte de miniaturas e muito mais, para o ajudar a expressar-se online. Quer esteja a publicar a sua arte, a sua música ou o seu podcast, o Mastodon está lá para si.
feature_creativity_title: Criatividade inigualável
- feature_moderation: Mastodon coloca a tomada de decisões de volta em suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível na resposta às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais você concorda ou hospede as suas próprias.
+ feature_moderation: O Mastodon coloca a tomada de decisões de volta nas suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o o mais flexível para responder às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais concorda ou aloje o seu próprio servidor.
feature_moderation_title: Moderando como deve ser
follow_action: Seguir
follow_step: Seguir pessoas interessantes é do que trata Mastodon.
- follow_title: Personalize seu feed residencial
+ follow_title: Personalize a cronologia na sua página inicial
follows_subtitle: Siga contas bem conhecidas
follows_title: Quem seguir
follows_view_more: Veja mais pessoas para seguir
@@ -1889,7 +2007,7 @@ pt-PT:
post_action: Compor
post_step: Diga olá para o mundo com texto, fotos, vídeos ou sondagens.
post_title: Faça a sua primeira publicação
- share_action: Compartilhar
+ share_action: Partilhar
share_step: Diga aos seus amigos como te encontrar no Mastodon.
share_title: Compartilhe seu perfil de Mastodon
sign_in_action: Iniciar sessão
@@ -1898,17 +2016,19 @@ pt-PT:
users:
follow_limit_reached: Não pode seguir mais do que %{limit} pessoas
go_to_sso_account_settings: Ir para as definições de conta do seu fornecedor de identidade
- invalid_otp_token: Código de autenticação inválido
+ invalid_otp_token: Código de dois fatores inválido
otp_lost_help_html: Se perdeu o acesso a ambos, pode entrar em contacto com %{email}
rate_limited: Demasiadas tentativas de autenticação, tente novamente mais tarde.
+ seamless_external_login: A sessão foi iniciada através de um serviço externo, pelo que as definições de palavra-passe e e-mail não estão disponíveis.
signed_in_as: 'Registado como:'
verification:
- extra_instructions_html: Dica: A ligação no seu site pode ser invisível. A parte importante é rel="me"
que impede a personificação em sites com conteúdo gerado pelo utilizador. Pode até utilizar uma etiqueta link
no cabeçalho da página ao invés de a
, mas o HTML deve ser acessível sem executar JavaScript.
+ extra_instructions_html: Dica: a hiperligação no seu site pode ser invisível. A parte importante é rel="me"
que impede a falsificação de identidade em sítios na web com conteúdos gerados pelos utilizadores. Pode até utilizar uma etiqueta link
no cabeçalho da página ao invés de a
, mas o HTML deve ser acessível sem executar JavaScript.
here_is_how: Veja como
- hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma ligação para esse site, vamos verificar que o site tem uma ligação de volta para o seu perfil e mostrar um indicador visual."
+ hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma hiperligação para esse site, vamos verificar que o site tem uma hiperligação de volta para o seu perfil e mostrar um indicador visual."
instructions_html: Copie e cole o código abaixo no HTML do seu site. Em seguida, adicione o endereço do seu site num dos campos extras no seu perfil, na aba "Editar perfil" e guarde as alterações.
verification: Verificação
verified_links: As suas ligações verificadas
+ website_verification: Verificação do sítio web
webauthn_credentials:
add: Adicionar nova chave de segurança
create:
@@ -1924,5 +2044,5 @@ pt-PT:
nickname_hint: Introduza a alcunha da sua nova chave de segurança
not_enabled: Ainda não ativou o WebAuthn
not_supported: Este navegador não funciona com chaves de segurança
- otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação em duas etapas.
+ otp_required: Para utilizar chaves de segurança, ative primeiro a autenticação de dois fatores.
registered_on: Registado em %{date}
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 4a1dbb1dc1..ff35e13fa8 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -220,6 +220,7 @@ ru:
enable_user: Разморозка пользователей
memorialize_account: Присвоение пользователям статуса «мемориала»
promote_user: Повышение пользователей
+ publish_terms_of_service: Опубликование пользовательского соглашения
reject_appeal: Отклонение обжалований
reject_user: Отклонение регистраций
remove_avatar_user: Удаление аватаров
@@ -284,6 +285,7 @@ ru:
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,35 @@ ru:
search: Поиск
title: Хэштеги
updated_msg: Настройки хэштега обновлены
+ terms_of_service:
+ back: Назад к пользовательскому соглашению
+ changelog: Что изменилось
+ create: Использовать свой текст
+ current: Действующее
+ draft: Черновик
+ generate: Использовать шаблон
+ generates:
+ action: Генерировать
+ chance_to_review_html: "Сгенерированное пользовательское соглашение не будет опубликовано автоматически. У вас будет возможность просмотреть результат. Введите все необходимые сведения, чтобы продолжить."
+ title: Создание пользовательского соглашения
+ history: История
+ live: Действует
+ no_history: Нет зафиксированных изменений пользовательского соглашения.
+ notified_on_html: 'Дата уведомления пользователей: %{date}'
+ notify_users: Уведомить пользователей
+ preview:
+ explanation_html: 'Сообщение будет отравлено %{display_count} пользователям, которые зарегистрировались до %{date}. В теле письма будет указан следующий текст:'
+ send_preview: Отправить предпросмотр на %{email}
+ send_to_all:
+ few: Отправить %{display_count} сообщения
+ many: Отправить %{display_count} сообщений
+ one: Отправить %{display_count} сообщение
+ other: Отправить %{display_count} сообщений
+ title: Предпросмотр уведомления об изменении пользовательского соглашения
+ publish: Опубликовать
+ published_on_html: 'Дата публикации: %{date}'
+ save_draft: Сохранить черновик
+ title: Пользовательское соглашение
title: Администрирование
trends:
allow: Разрешить
@@ -1168,7 +1199,6 @@ ru:
migrate_account: Перенос учётной записи
migrate_account_html: Завели новую учётную запись? Перенаправьте подписчиков на неё — настройте перенаправление тут.
or_log_in_with: Или войти с помощью
- privacy_policy_agreement_html: Мной прочитана и принята политика конфиденциальности
progress:
confirm: Подтвердите электронную почту
details: Ваши данные
@@ -1193,7 +1223,7 @@ ru:
set_new_password: Задать новый пароль
setup:
email_below_hint_html: Проверьте папку "Спам" или запросите другую. Вы можете исправить свой адрес электронной почты, если он неправильный.
- email_settings_hint_html: Нажмите на ссылку, которую мы отправили вам для проверки %{email}. Мы будем ждать прямо здесь.
+ email_settings_hint_html: Чтобы начать пользоваться Mastodon, пройдите по ссылке, которую мы отправили на %{email}. А мы пока подождём тут.
link_not_received: Не получили ссылку?
new_confirmation_instructions_sent: Через несколько минут вы получите новое письмо со ссылкой для подтверждения!
title: Проверьте свой почтовый ящик
@@ -1202,7 +1232,7 @@ ru:
title: Войти в %{domain}
sign_up:
manual_review: Регистрация на %{domain} проходит через ручную проверку нашими модераторами. Чтобы помочь нам обработать вашу регистрацию, напишите немного о себе и о том, почему вы хотите получить аккаунт на %{domain}.
- preamble: С учётной записью на этом сервере Mastodon вы сможете следить за любым другим пользователем в сети, независимо от того, где размещён их аккаунт.
+ preamble: С учётной записью на этом сервере Mastodon вы сможете подписываться на всех других людей в федиверсе вне зависимости от того, где находятся их учётные записи.
title: Зарегистрируйтесь в %{domain}.
status:
account_status: Статус учётной записи
@@ -1214,6 +1244,7 @@ ru:
view_strikes: Просмотр предыдущих замечаний в адрес вашей учетной записи
too_fast: Форма отправлена слишком быстро, попробуйте еще раз.
use_security_key: Использовать ключ безопасности
+ user_agreement_html: Мной прочитаны и принятыпользовательское соглашение и политика конфиденциальности
author_attribution:
example_title: Образец текста
hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon.
@@ -1923,6 +1954,8 @@ ru:
too_late: Слишком поздно обжаловать это замечание
tags:
does_not_match_previous_name: не совпадает с предыдущим именем
+ terms_of_service:
+ title: Пользовательское соглашение
themes:
contrast: Mastodon (высококонтрастная)
default: Mastodon (тёмная)
@@ -1983,6 +2016,15 @@ ru:
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/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 e525051352..fee710113b 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 8691e34d0c..6a391502e3 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 1bd2d3075e..b1adc7cbbe 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 6a99684ba9..676f184f98 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 0659549c43..9182efc0e0 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-GB.yml b/config/locales/simple_form.en-GB.yml
index f5f56a64b0..d8bfd1122f 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -3,7 +3,7 @@ en-GB:
simple_form:
hints:
account:
- attribution_domainst: One per line. Protects from false attributions.
+ attribution_domains: One per line. Protects from false attributions.
discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users.
display_name: Your full name or your fun name.
fields: Your homepage, pronouns, age, anything you want.
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 774f87b092..696ccd35dc 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -130,6 +130,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.
@@ -319,6 +330,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 b78a1f4034..9c80e6fa3c 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 0c417e5ac4..55865587a0 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -130,6 +130,17 @@ 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:
+ admin_email: Los avisos legales incluyen devoluciones, órdenes judiciales, solicitudes de retiro y solicitudes de cumplimiento de la ley.
+ 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 +330,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 bc9a1b6b34..4ed442ae19 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 20c6c7769e..dd62884d68 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -130,6 +130,17 @@ 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:
+ admin_email: Los avisos legales incluyen devoluciones, órdenes judiciales, solicitudes de retiro y solicitudes de cumplimiento de la ley.
+ 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 +330,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 eaa633d028..a21781f772 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..d229808eae 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: 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: 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..eaa8026051 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: 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: 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 a0feb3a40e..ffe2f49ef4 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 b57a055f96..877f909ffd 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
@@ -129,6 +130,17 @@ ga:
show_application: Beidh tú in ann a fheiceáil i gcónaí cén aip a d’fhoilsigh do phostáil beag beann ar.
tag:
name: Ní féidir leat ach cásáil na litreacha a athrú, mar shampla, chun é a dhéanamh níos inléite
+ terms_of_service:
+ changelog: Is féidir é a struchtúrú le comhréir Markdown.
+ text: Is féidir é a struchtúrú le comhréir Markdown.
+ terms_of_service_generator:
+ admin_email: Áirítear le fógraí dlí frithfhógraí, orduithe cúirte, iarratais éirí anuas, agus iarratais forghníomhaithe dlí.
+ arbitration_address: D’fhéadfadh sé a bheith mar an gcéanna leis an seoladh fisiceach thuas, nó “N/B” má tá ríomhphost in úsáid agat
+ arbitration_website: D’fhéadfadh gur foirm ghréasáin í, nó “N/A” má tá ríomhphost in úsáid agat
+ dmca_address: Maidir le hoibreoirí SAM, bain úsáid as an seoladh atá cláraithe in Eolaire Gníomhairí Ainmnithe DMCA. A P.O. Tá liostú boscaí ar fáil ach é a iarraidh go díreach, bain úsáid as Iarratas Tarscaoilte Bosca Gníomhaire Ainmnithe DMCA chun ríomhphost a chur chuig an Oifig Cóipchirt agus déan cur síos gur modhnóir ábhar baile thú a bhfuil eagla ort díoltas nó aisíocaíocht a fháil mar gheall ar do ghníomhartha agus a dteastaíonn uait úsáid a bhaint as P.O. Bosca chun do sheoladh baile a bhaint den radharc poiblí.
+ dmca_email: Is féidir gurb é an ríomhphost céanna é a úsáidtear le haghaidh “Seoladh ríomhphoist le haghaidh fógraí dlí” thuas
+ domain: Aitheantas uathúil na seirbhíse ar líne atá á cur ar fáil agat.
+ jurisdiction: Liostaigh an tír ina bhfuil cónaí ar an té a íocann na billí. Más cuideachta nó aonán eile é, liostaigh an tír ina bhfuil sé corpraithe, agus an chathair, an réigiún, an chríoch nó an stát mar is cuí.
user:
chosen_languages: Nuair a dhéantar iad a sheiceáil, ní thaispeánfar ach postálacha i dteangacha roghnaithe in amlínte poiblí
role: Rialaíonn an ról na ceadanna atá ag an úsáideoir.
@@ -223,6 +235,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
@@ -317,6 +330,17 @@ ga:
name: Haischlib
trendable: Lig don haischlib seo a bheith le feiceáil faoi threochtaí
usable: Lig do phostálacha an hashchlib seo a úsáid go háitiúil
+ terms_of_service:
+ changelog: Cad atá athraithe?
+ text: Téarmaí Seirbhíse
+ terms_of_service_generator:
+ admin_email: Seoladh ríomhphoist le haghaidh fógraí dlí
+ arbitration_address: Seoladh fisiciúil le haghaidh fógraí eadrána
+ arbitration_website: An láithreán gréasáin chun fógraí eadrána a chur isteach
+ dmca_address: Seoladh fisiciúil le haghaidh fógraí DMCA/cóipchirt
+ dmca_email: Seoladh ríomhphoist le haghaidh fógraí DMCA/cóipchirt
+ domain: Fearann
+ jurisdiction: Dlínse dhlíthiúil
user:
role: Ról
time_zone: Crios ama
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 7941b24214..9b81d10822 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 846f21a6ec..0ce10c8617 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 037c2a9f60..df81f43fd9 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 6fb6b76ae0..47b81ed1a6 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,9 @@ 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_system_scrollbars_ui: Se applica solmente al navigatores de scriptorio basate sur Safari e Chrome
+ 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 +99,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.
@@ -129,6 +130,17 @@ ia:
show_application: In omne caso, tu potera sempre vider qual app ha publicate tu message.
tag:
name: Tu pote solmente cambiar le litteras inter majusculas e minusculas, per exemplo, pro render lo plus legibile
+ terms_of_service:
+ changelog: Pote esser structurate con le syntaxe Markdown.
+ text: Pote esser structurate con le syntaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Le avisos juridic include le contra-avisos, ordinantias judiciari, demandas de retiro e demandas de application del lege.
+ arbitration_address: Pote esser le mesme que le adresse physic supra, o “N/A” si se usa e-mail
+ arbitration_website: Pote esser un formulario web, o “N/A” si se usa e-mail
+ dmca_address: Pro operatores in le SUA, usa le adresse registrate in le Directorio de Agentes Designate pro le DMCA (DMCA Designated Agent Directory). Un adresse de cassa postal es disponibile per requesta directe; usa le Requesta de Exemption de Cassa Postal pro Agentes Designate del DMCA (DMCA Designated Agent Post Office Box Waiver Request) pro inviar un message electronic al Officio del Derecto de Autor (Copyright Office) e describer que tu es un moderator de contento que travalia de casa e qui time vengiantias o represalias pro tu actiones, necessitante le uso un cassa postal pro remover tu adresse personal del vista public.
+ dmca_email: Pote esser le mesme adresse de e-mail usate pro “Adresse de e-mail pro avisos juridic” supra
+ domain: Identification unic del servicio in linea que tu forni.
+ 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: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public
role: Le rolo controla qual permissos le usator ha.
@@ -181,7 +193,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 +205,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
@@ -223,6 +235,7 @@ ia:
setting_hide_network: Cela tu rete social
setting_reduce_motion: Reducer movimento in animationes
setting_system_font_ui: Usar typo de litteras predefinite del systema
+ setting_system_scrollbars_ui: Usar le barra de rolamento predefinite del systema
setting_theme: Thema de sito
setting_trends: Monstrar le tendentias de hodie
setting_unfollow_modal: Monstrar dialogo de confirmation ante cessar de sequer alcuno
@@ -311,12 +324,23 @@ 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
trendable: Permitter a iste hashtag de sub tendentias
usable: Permitter al messages usar iste hashtag localmente
+ terms_of_service:
+ changelog: Que ha cambiate?
+ text: Conditiones de servicio
+ terms_of_service_generator:
+ admin_email: Adresse de e-mail pro avisos juridic
+ arbitration_address: Adresse physic pro avisos de arbitration
+ arbitration_website: Sito web pro submitter avisos de arbitration
+ dmca_address: Adresse physic pro avisos DCMA/de derectos de autor
+ dmca_email: Adresse de e-mail pro avisos DCMA/de derectos de autor
+ domain: Dominio
+ jurisdiction: Jurisdiction
user:
role: Rolo
time_zone: Fuso horari
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 3e90f00d5b..106d2017d2 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -130,6 +130,17 @@ is:
show_application: Þú munt alltaf geta séð hvaða forrit birti færsluna þína.
tag:
name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra
+ terms_of_service:
+ changelog: Er hægt að sníða með Markdown-málskipan.
+ text: Er hægt að sníða með Markdown-málskipan.
+ terms_of_service_generator:
+ admin_email: Löglegar tilkynningar ná yfir andsvör, dómsúrskurði, lokunarbeiðnir og beiðnir frá lögregluembættum.
+ arbitration_address: Má vera það sama og raunverulegt heimilisfang eða “N/A” ef tölvupóstur er notaður
+ arbitration_website: Má vera innfyllingarform á vefsíðu eða “N/A” ef tölvupóstur er notaður
+ dmca_address: Fyrir rekstraraðila í BNA ætti að nota heimilisfang sem skráð er í DMCA Designated Agent Directory. Hægt er að verða sér úti um A P.O. pósthólfsskráningu með beinni beiðni; notaðu DMCA Designated Agent Post Office Box Waiver Request til að senda tölvupóst á Copyright Office og lýstu því yfir að þú sért heimavinnandi efnismiðlari (home-based content moderator) sem átt á hættu refsingar eða hefndir vegna þess sem þú miðlar og þurfir því á slíku pósthólfi að halda svo þitt eigið heimilisfang sé ekki gert opinbert.
+ dmca_email: Má vera sama tölvupóstfang og það sem notað er í “Tölvupóstfang vegna löglegra tilkynninga” hér að ofan
+ domain: Einstakt auðkenni á netþjónustunni sem þú býður.
+ jurisdiction: Settu inn landið þar sem sá býr sem borgar reikningana. Ef það er fyrirtæki eða samtök, skaltu hafa það landið þar sem lögheimili þess er, auk borgar, héraðs, svæðis eða fylkis eins og við á.
user:
chosen_languages: Þegar merkt er við þetta, birtast einungis færslur á völdum tungumálum á opinberum tímalínum
role: Hlutverk stýrir hvaða heimildir notandinn hefur.
@@ -319,6 +330,17 @@ 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 tilkynninga
+ arbitration_address: Raunverulegt heimilisfang fyrir tilkynningar um úrskurði
+ arbitration_website: Vefsvæði til að senda inn tilkynningar um úrskurði
+ dmca_address: Raunverulegt heimilisfang fyrir kröfur vegna DMCA/höfundarréttar
+ dmca_email: Tölvupóstfang tilkynninga vegna DMCA/höfundaréttar
+ 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 bac8f64ab6..62fe75e838 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.ja.yml b/config/locales/simple_form.ja.yml
index 53813ab07a..7e93de6e32 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -60,6 +60,7 @@ ja:
setting_display_media_default: 閲覧注意としてマークされたメディアは隠す
setting_display_media_hide_all: メディアを常に隠す
setting_display_media_show_all: メディアを常に表示する
+ setting_system_scrollbars_ui: Safari/Chromeベースのデスクトップブラウザーでのみ有効です
setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています
setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします
username: アルファベット大文字と小文字、数字、アンダーバー「_」が使えます
@@ -129,6 +130,17 @@ ja:
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 Designated Agent Directory(DMCA指定代理人ディレクトリ)に登録のある住所を使用してください。申請を行えば記載を私書箱とすることも可能で、その場合はDMCA Designated Agent Post Office Box Waiver Request(DMCA指定代理人の郵便私書箱による免除申請)によって著作権局にメールを送信し、あなたが個人のコンテンツ管理者であって、行った措置に対して報復を受けるおそれがあり、住所を非公開とするために私書箱を使用する必要がある旨を伝えてください。
+ dmca_email: 上記「法的通知を受け取るメールアドレス」と同じものでもかまいません。
+ domain: あなたの提供するこのオンラインサービスの識別名です。
+ jurisdiction: 運営責任者が居住する国を記載します。企業や他の団体である場合は、その組織の所在国に加えて、市・区・州などの地域を記載します。
user:
chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります
role: そのロールは、ユーザーが持つ権限を制御します。
@@ -223,6 +235,7 @@ ja:
setting_hide_network: 繋がりを隠す
setting_reduce_motion: アニメーションの動きを減らす
setting_system_font_ui: システムのデフォルトフォントを使う
+ setting_system_scrollbars_ui: システムのデフォルトのスクロールバーを使う
setting_theme: サイトテーマ
setting_trends: 本日のトレンドタグを表示する
setting_unfollow_modal: フォローを解除する前に確認ダイアログを表示する
@@ -317,6 +330,17 @@ ja:
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.ko.yml b/config/locales/simple_form.ko.yml
index 3d6b440cb6..a8017950c0 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 fd40600303..2ceb262c5a 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 d5c05025eb..771dc3d6ed 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 opgemaakt met Markdown.
+ text: Kan worden opgemaakt met Markdown.
+ terms_of_service_generator:
+ admin_email: Juridische mededelingen zijn o. a. counter-notices, gerechterlijke bevelen, takedown-requests en handhavingsverzoeken.
+ arbitration_address: Kan hetzelfde zijn als bovenstaand vestigingsadres 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 je een vanaf huis opererende inhoudsmoderator bent, die wraak of vergelding vreest voor je moderator-acties en daarom een postbus moet gebruiken om jouw huisadres uit het publieke domein te houden.'
+ dmca_email: Kan hetzelfde e-mailadres zijn dat gebruikt wordt voor "E-mailadres voor juridische berichten" hierboven
+ domain: Een unieke identificatie van de online dienst die je levert.
+ jurisdiction: Vermeld het land waar de persoon woont die de rekeningen betaalt. Is het een bedrijf of iets dergelijks, vermeld dan het land waar het ingeschreven staat en de stad, de regio, het grondgebied of de 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.
@@ -145,7 +156,7 @@ nl:
url: Waar gebeurtenissen naartoe worden verzonden
labels:
account:
- attribution_domains: Websites doe jou credit mogen geven
+ attribution_domains: Websites die jou credit mogen geven
discoverable: Jouw account en berichten laten uitlichten door Mastodon
fields:
name: Label
@@ -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: Vestigingsadres voor arbitrage-mededelingen
+ arbitration_website: Website voor het indienen van arbitrage-mededelingen
+ dmca_address: Vestigingsadres voor DMCA/auteursrecht-mededelingen
+ dmca_email: E-mailadres voor DMCA/auteursrecht-mededelingen
+ domain: Domein
+ jurisdiction: Jurisdictie
user:
role: Rol
time_zone: Tijdzone
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index 66c28aca7b..553c0bb7a2 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.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index ec2dc9e213..90b1db7d9b 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -130,6 +130,8 @@ pt-BR:
show_application: Você sempre conseguirá ver qual aplicativo realizou sua publicação independentemente disso.
tag:
name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível
+ terms_of_service_generator:
+ dmca_email: Pode ser o mesmo e-mail utilizado para "Endereço de e-mail para avisos legais" acima
user:
chosen_languages: Apenas as publicações dos idiomas selecionados serão exibidas nas linhas públicas
role: A função controla quais permissões o usuário tem.
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index a172ed2752..74c6496cfe 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -3,18 +3,20 @@ pt-PT:
simple_form:
hints:
account:
+ attribution_domains: Um por linha. Protege contra falsas atribuições.
discoverable: As suas publicações e perfil públicos podem ser destacados ou recomendados em várias áreas do Mastodon e o seu perfil pode ser sugerido a outros utilizadores.
display_name: O seu nome completo ou o seu nome divertido.
fields: A sua página inicial, os seus pronomes, idade e tudo o que quiser.
indexable: As suas mensagens públicas podem aparecer nos resultados da pesquisa no Mastodon. Independentemente disso, as pessoas que interagiram com as suas publicações podem ser capazes de as pesquisar.
- note: 'Pode @mencionar outras pessoas ou #hashtags.'
+ note: 'Pode @mencionar outras pessoas e usar #etiquetas.'
show_collections: As pessoas podem navegar pelas listas das pessoas que segue e dos seus seguidores. Independentemente disso, as pessoas que segue verão que você as segue.
+ unlocked: As pessoas poderão segui-lo sem pedir aprovação. Desmarque se pretender rever os pedidos de seguimento e escolha se pretende aceitar ou rejeitar novos seguidores.
account_alias:
acct: Especifique o utilizador@domínio da conta de onde você deseja migrar
account_migration:
acct: Especifique o utilizador@domínio da conta para onde você deseja migrar
account_warning_preset:
- text: Pode usar sintaxe de escrita, como URL, etiquetas, e referências
+ text: Pode usar sintaxe de publicações, como URL, etiquetas e referências
title: Opcional. Invisível para o destinatário
admin_account_action:
include_statuses: O utilizador verá quais as publicações que foram a razão da moderação ou advertência
@@ -24,7 +26,7 @@ pt-PT:
types:
disable: Impede o utilizador de usar a sua conta, mas não elimina ou oculta o seu conteúdo.
none: Use isto para enviar um aviso ao utilizador, sem espoletar nenhuma outra ação.
- sensitive: Força todos os anexos de media deste utilizador a serem sinalizados como problemáticos.
+ sensitive: Forçar todos os anexos multimédia deste utilizador a serem assinalados como sensíveis.
silence: Impede que o utilizador possa publicar com visibilidade pública, ocultando as suas publicações e notificações de pessoas que não o seguem. Encerra todas as denúncias contra esta conta.
suspend: Evita qualquer interação de ou para esta conta e elimina o seu conteúdo. Reversível num período de 30 dias. Encerra todas as denúncias contra esta conta.
warning_preset_id: Opcional. Tu ainda podes adicionar texto personalizado no fim do predefinido
@@ -52,14 +54,15 @@ pt-PT:
password: Use pelo menos 8 caracteres
phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação
scopes: Quais as API a que a aplicação terá permissão para aceder. Se selecionar um âmbito de nível superior, não precisa de selecionar âmbitos individuais.
- setting_aggregate_reblogs: Não mostrar novos reforços de publicações recentemente reforçadas (só afecta publicações acabadas de reforçar)
+ setting_aggregate_reblogs: Não mostrar os novos impulsos para publicações que tenham sido recentemente impulsionadas (apenas afeta os impulsos recentemente recebidos)
setting_always_send_emails: Normalmente as notificações por e-mail não serão enviadas quando estiver a utilizar ativamente o Mastodon
- setting_default_sensitive: Media problemática oculta por padrão, pode ser revelada com um clique
- setting_display_media_default: Esconder media marcada como problemática
- setting_display_media_hide_all: Esconder sempre toda a media
- setting_display_media_show_all: Mostrar sempre a media
+ setting_default_sensitive: Os multimédia sensíveis são ocultados por predefinição e podem ser revelados com um clique/toque
+ setting_display_media_default: Esconder multimédia marcada como problemática
+ setting_display_media_hide_all: Esconder sempre toda a multimédia
+ setting_display_media_show_all: Mostrar sempre a multimédia
+ setting_system_scrollbars_ui: Aplica-se apenas a navegadores de desktop baseados no Safari e Chrome
setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer pormenores
- setting_use_pending_items: Ocultar atualizações da cronologia por detrás dum clique, em vez de rolar automaticamente o fluxo
+ setting_use_pending_items: Ocultar as atualizações da cronologia após um clique em vez de percorrer automaticamente a cronologia
username: Pode utilizar letras, números e sublinhados
whole_word: Quando a palavra-chave ou expressão-chave é somente alfanumérica, ela só será aplicada se corresponder à palavra completa
domain_allow:
@@ -77,10 +80,10 @@ pt-PT:
form_admin_settings:
activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos
app_icon: WEBP, PNG, GIF ou JPG. Substitui o ícone padrão da aplicação em dispositivos móveis por um ícone personalizado.
- backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
+ backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas publicações para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
- content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado ou favoritado. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
+ content_cache_retention_period: Todas as mensagens de outros servidores (incluindo impulsos e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas mensagens. Isto inclui mensagens em que um utilizador local as tenha marcado ou adicionado aos favoritos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
favicon: WEBP, PNG, GIF ou JPG. Substitui o ícone de favorito padrão do Mastodon por um ícone personalizado.
mascot: Sobrepõe-se à ilustração na interface web avançada.
@@ -120,13 +123,24 @@ pt-PT:
hint: Opcional. Forneça mais detalhes sobre a regra
text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples
sessions:
- otp: 'Insira o código de autenticação em duas etapas gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:'
+ otp: 'Insira o código de autenticação de dois fatores gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:'
webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela.
settings:
indexable: A sua página de perfil pode aparecer nos resultados de pesquisa no Google, Bing e outros.
show_application: Independentemente disso será sempre capaz de ver em que aplicação publicou a sua mensagem.
tag:
name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis
+ terms_of_service:
+ changelog: Pode ser estruturado com sintaxe Markdown.
+ text: Pode ser estruturado com sintaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Os avisos legais incluem contra-avisos, ordens judiciais, pedidos de remoção e pedidos de aplicação da lei.
+ arbitration_address: Pode ser o mesmo que o endereço físico acima ou “N/A” se utilizar e-mail
+ arbitration_website: Pode ser um formulário web ou “N/A” se for utilizado o e-mail
+ dmca_address: Para operadores dos EUA, utilize o endereço registado no Diretório de Agentes Designados DMCA. A listagem de uma caixa postal está disponível mediante pedido direto. Utilize o DMCA Designated Agent Post Office Box Waiver Request para enviar uma mensagem de correio eletrónico ao Copyright Office e descreva que é um moderador de conteúdos baseado em casa que receia vingança ou represálias pelas suas acções e que necessita de utilizar uma caixa postal para retirar o seu endereço de casa da vista do público.
+ dmca_email: Pode ser o mesmo e-mail utilizado para “Endereço de e-mail para avisos legais” acima
+ domain: Identificação única do serviço online que está a prestar.
+ jurisdiction: Indique o país de residência de quem paga as contas. Se se tratar de uma empresa ou outra entidade, indique o país onde está constituída, bem como a cidade, região, território ou estado, consoante o caso.
user:
chosen_languages: Quando selecionado, só serão mostradas nas cronologias públicas as publicações nos idiomas escolhidos
role: A função controla as permissões que o utilizador tem.
@@ -142,6 +156,7 @@ pt-PT:
url: Para onde os eventos serão enviados
labels:
account:
+ attribution_domains: Sites autorizados a atribuir-lhe crédito
discoverable: Destacar perfil e publicações nos algoritmos de descoberta
fields:
name: Rótulo
@@ -177,7 +192,7 @@ pt-PT:
appeal:
text: Explique porque esta decisão deve ser revertida
defaults:
- autofollow: Convidar para seguir a tua conta
+ autofollow: Convidar para seguir a sua conta
avatar: Imagem de perfil
bot: Esta é uma conta robô
chosen_languages: Filtrar idiomas
@@ -198,32 +213,33 @@ pt-PT:
max_uses: Número máximo de utilizações
new_password: Nova palavra-passe
note: Biografia
- otp_attempt: Código de autenticação em duas etapas
+ otp_attempt: Código de autenticação de dois fatores
password: Palavra-passe
phrase: Palavra-chave ou frase
setting_advanced_layout: Ativar interface web avançada
- setting_aggregate_reblogs: Agrupar reforços em cronologias
- setting_always_send_emails: Enviar sempre notificações de email
+ setting_aggregate_reblogs: Agrupar impulsos em linhas de tempo
+ setting_always_send_emails: Enviar sempre notificações por e-mail
setting_auto_play_gif: Reproduzir GIF automaticamente
- setting_boost_modal: Solicitar confirmação antes de partilhar uma publicação
+ setting_boost_modal: Mostrar caixa de diálogo de confirmação antes de impulsionar
setting_default_language: Idioma de publicação
setting_default_privacy: Privacidade da publicação
- setting_default_sensitive: Marcar sempre os media como problemáticos
+ setting_default_sensitive: Marcar sempre os multimédia como problemáticos
setting_delete_modal: Solicitar confirmação antes de eliminar uma publicação
setting_disable_hover_cards: Desativar visualização de perfil ao passar o cursor
setting_disable_swiping: Desativar os movimentos de deslize
- setting_display_media: Visualização de media
+ setting_display_media: Visualização de multimédia
setting_display_media_default: Pré-definição
setting_display_media_hide_all: Esconder todos
setting_display_media_show_all: Mostrar todos
setting_expand_spoilers: Expandir sempre as publicações marcadas com avisos de conteúdo
setting_hide_network: Esconder a tua rede
- setting_reduce_motion: Reduz movimento em animações
+ setting_reduce_motion: Reduzir movimento em animações
setting_system_font_ui: Usar o tipo de letra padrão do sistema
+ setting_system_scrollbars_ui: Utilizar a barra de deslocação predefinida do sistema
setting_theme: Tema do sítio
setting_trends: Mostrar as tendências de hoje
setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém
- setting_use_blurhash: Mostrar gradientes coloridos para medias ocultas
+ setting_use_blurhash: Mostrar gradientes coloridos para multimédias ocultas
setting_use_pending_items: Modo lento
severity: Gravidade
sign_in_token_attempt: Código de segurança
@@ -250,7 +266,7 @@ pt-PT:
custom_css: CSS personalizado
favicon: Ícone de favoritos
mascot: Mascote personalizada (legado)
- media_cache_retention_period: Período de retenção de ficheiros de media em cache
+ media_cache_retention_period: Período de retenção de ficheiros multimédia em cache
peers_api_enabled: Publicar lista de servidores descobertos na API
profile_directory: Ativar o diretório de perfis
registrations_mode: Quem se pode inscrever
@@ -289,12 +305,12 @@ pt-PT:
notification_emails:
appeal: Alguém recorreu de uma decisão de moderação
digest: Enviar e-mails de resumo
- favourite: Alguém adicionou uma publicação sua aos marcadores
+ favourite: Quando alguém adiciona uma publicação sua aos favoritos
follow: Alguém começou a segui-lo
follow_request: Alguém pediu para ser seu seguidor
mention: Alguém o mencionou
pending_account: Uma nova conta aguarda aprovação
- reblog: Alguém reforçou uma publicação sua
+ reblog: Alguém impulsionou uma publicação sua
report: Uma nova denúncia foi submetida
software_updates:
all: Notificar todas as atualizações
@@ -313,7 +329,18 @@ pt-PT:
listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis
name: Etiqueta
trendable: Permitir que esta etiqueta apareça nas tendências
- usable: Permitir que as publicações usem esta hashtag localmente
+ usable: Permitir que as publicações usem esta etiqueta localmente
+ terms_of_service:
+ changelog: O que mudou?
+ text: Termos do serviço
+ terms_of_service_generator:
+ admin_email: Endereço de e-mail para avisos legais
+ arbitration_address: Endereço físico para avisos de arbitragem
+ arbitration_website: Website para enviar avisos de arbitragem
+ dmca_address: Endereço físico para avisos DMCA / direitos autorais
+ dmca_email: Endereço de e-mail para avisos DMCA/direitos autorais
+ domain: Domínio
+ jurisdiction: Jurisdição legal
user:
role: Função
time_zone: Fuso horário
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 6b6383cef0..6a1e6db3f2 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -130,6 +130,14 @@ ru:
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» в случае электронной почты
+ jurisdiction: Впишите страну, где находится лицо, оплачивающее счета. Если это компания либо организация, впишите страну инкорпорации, включая город, регион, территорию или штат, если это необходимо.
user:
chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках.
role: Роль определяет, какими правами обладает пользователь.
@@ -319,6 +327,17 @@ ru:
name: Хэштег
trendable: Разрешить показ хэштега в трендах
usable: Позволить этот хэштег в локальных сообщениях
+ terms_of_service:
+ changelog: Что изменилось?
+ text: Пользовательское соглашение
+ terms_of_service_generator:
+ admin_email: Адрес электронной почты для юридических уведомлений
+ arbitration_address: Почтовый адрес для уведомлений об арбитраже
+ arbitration_website: Вебсайт для подачи уведомления об арбитраже
+ dmca_address: Почтовый адрес для обращений правообладателей
+ dmca_email: Адрес электронной почты для обращений правообладателей
+ domain: Доменное имя
+ jurisdiction: Юрисдикция
user:
role: Роль
time_zone: Часовой пояс
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index a4972623f1..daaa5cdf2b 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.th.yml b/config/locales/simple_form.th.yml
index 99656dac84..e5b6399d06 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -223,6 +223,7 @@ th:
setting_hide_network: ซ่อนกราฟทางสังคมของคุณ
setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว
setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ
+ setting_system_scrollbars_ui: ใช้แถบเลื่อนเริ่มต้นของระบบ
setting_theme: ชุดรูปแบบไซต์
setting_trends: แสดงแนวโน้มของวันนี้
setting_unfollow_modal: แสดงกล่องโต้ตอบการยืนยันก่อนเลิกติดตามใครสักคน
@@ -317,6 +318,10 @@ th:
name: แฮชแท็ก
trendable: อนุญาตให้แฮชแท็กนี้ปรากฏภายใต้แนวโน้ม
usable: อนุญาตให้โพสต์ใช้แฮชแท็กนี้ในเซิร์ฟเวอร์
+ terms_of_service:
+ text: เงื่อนไขการให้บริการ
+ terms_of_service_generator:
+ domain: โดเมน
user:
role: บทบาท
time_zone: โซนเวลา
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index dccdcf15ab..74f508d0a5 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 44b118c0bf..4790c2e510 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 77cb78a7b0..3292211780 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 06f35fc7b9..d0becfb068 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 49fa28e9f4..1243807d77 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..aa2de7de32 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -925,6 +925,10 @@ sv:
search: Sök
title: Hashtaggar
updated_msg: Hashtagg-inställningarna har uppdaterats
+ terms_of_service:
+ draft: Utkast
+ publish: Publicera
+ title: Användarvillkor
title: Administration
trends:
allow: Tillåt
@@ -1132,7 +1136,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 +1160,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 +1168,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 +1839,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..b945ee8650 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -211,6 +211,7 @@ th:
enable_user: เปิดใช้งานผู้ใช้
memorialize_account: ทำให้บัญชีเป็นอนุสรณ์
promote_user: เลื่อนขั้นผู้ใช้
+ publish_terms_of_service: เผยแพร่เงื่อนไขการให้บริการ
reject_appeal: ปฏิเสธการอุทธรณ์
reject_user: ปฏิเสธผู้ใช้
remove_avatar_user: เอาภาพประจำตัวออก
@@ -911,6 +912,25 @@ th:
search: ค้นหา
title: แฮชแท็ก
updated_msg: อัปเดตการตั้งค่าแฮชแท็กสำเร็จ
+ terms_of_service:
+ back: กลับไปที่เงื่อนไขการให้บริการ
+ create: ใช้ของคุณเอง
+ current: ปัจจุบัน
+ draft: แบบร่าง
+ generate: ใช้แม่แบบ
+ generates:
+ action: สร้าง
+ history: ประวัติ
+ live: สด
+ notify_users: แจ้งเตือนผู้ใช้
+ preview:
+ send_preview: ส่งตัวอย่างไปยัง %{email}
+ send_to_all:
+ other: ส่ง %{display_count} อีเมล
+ publish: เผยแพร่
+ published_on_html: เผยแพร่เมื่อ %{date}
+ save_draft: บันทึกแบบร่าง
+ title: เงื่อนไขการให้บริการ
title: การดูแล
trends:
allow: อนุญาต
@@ -1114,7 +1134,6 @@ th:
migrate_account: ย้ายไปยังบัญชีอื่น
migrate_account_html: หากคุณต้องการเปลี่ยนเส้นทางบัญชีนี้ไปยังบัญชีอื่น คุณสามารถ กำหนดค่าบัญชีที่นี่
or_log_in_with: หรือเข้าสู่ระบบด้วย
- privacy_policy_agreement_html: ฉันได้อ่านและเห็นด้วยกับ นโยบายความเป็นส่วนตัว
progress:
confirm: ยืนยันอีเมล
details: รายละเอียดของคุณ
@@ -1139,7 +1158,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 +1166,6 @@ th:
title: เข้าสู่ระบบ %{domain}
sign_up:
manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้กลั่นกรองของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain}
- preamble: ด้วยบัญชีในเซิร์ฟเวอร์ Mastodon นี้ คุณจะสามารถติดตามบุคคลอื่นใดในเครือข่าย โดยไม่คำนึงถึงที่ซึ่งบัญชีของเขาได้รับการโฮสต์
title: มาตั้งค่าของคุณใน %{domain} กันเลย
status:
account_status: สถานะบัญชี
@@ -1638,6 +1655,7 @@ th:
scheduled_statuses:
over_daily_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit} สำหรับวันนี้แล้ว
over_total_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit} แล้ว
+ too_soon: วันที่ต้องอยู่ในอนาคต
self_destruct:
lead_html: น่าเสียดาย %{domain} กำลังปิดตัวลงอย่างถาวร หากคุณมีบัญชีที่นั่น คุณจะไม่สามารถใช้บัญชีต่อไปได้ แต่คุณยังคงสามารถขอข้อมูลสำรองของข้อมูลของคุณ
title: เซิร์ฟเวอร์นี้กำลังปิดตัวลง
@@ -1796,6 +1814,8 @@ th:
too_late: สายเกินไปที่จะอุทธรณ์การดำเนินการนี้
tags:
does_not_match_previous_name: ไม่ตรงกับชื่อก่อนหน้านี้
+ terms_of_service:
+ title: เงื่อนไขการให้บริการ
themes:
contrast: Mastodon (ความคมชัดสูง)
default: Mastodon (มืด)
@@ -1856,6 +1876,8 @@ th:
further_actions_html: หากนี่ไม่ใช่คุณ เราแนะนำให้คุณ %{action} ทันทีและเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยเพื่อรักษาบัญชีของคุณให้ปลอดภัย
subject: มีการเข้าถึงบัญชีของคุณจากที่อยู่ IP ใหม่
title: การลงชื่อเข้าใหม่
+ terms_of_service_changed:
+ sign_off: ทีม %{domain}
warning:
appeal: ส่งการอุทธรณ์
appeal_description: หากคุณเชื่อว่านี่เป็นข้อผิดพลาด คุณสามารถส่งการอุทธรณ์ไปยังพนักงานของ %{instance}
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 18e8dd1338..65ec6ef58a 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,35 @@ 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
+ send_to_all:
+ one: "%{display_count} e-posta gönder"
+ other: "%{display_count} e-posta 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 +1163,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 +1187,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 +1196,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 +1208,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 +1870,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 +1932,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 bdda569092..de9e530f58 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -66,6 +66,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 b4c9b6918b..3909dd1b77 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -201,8 +201,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 2afe570236..fd03b0d66d 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -33,6 +33,18 @@ namespace :admin do
resources :action_logs, only: [:index]
resources :warning_presets, except: [:new, :show]
+ 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 86e41a2abe..34a267b35d 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -116,6 +116,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 673a4c1be2..ba81fcb8c6 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -51,6 +51,7 @@ defaults: &defaults
require_invite_text: false
backups_retention_period: 7
captcha_enabled: false
+ allow_referer_origin: false
development:
<<: *defaults
diff --git a/config/storage.yml b/config/storage.yml
deleted file mode 100644
index e69de29bb2..0000000000
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
deleted file mode 100644
index 6f8b6cc60d..0000000000
--- a/db/migrate/.rubocop.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-inherit_from: ../../.rubocop.yml
-
-Naming/VariableNumber:
- CheckSymbols: false
-
-# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity
-Rails/CreateTableWithTimestamps:
- 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/20170112154826_migrate_settings.rb b/db/migrate/20170112154826_migrate_settings.rb
index d1faa81f5d..166d90eab7 100644
--- a/db/migrate/20170112154826_migrate_settings.rb
+++ b/db/migrate/20170112154826_migrate_settings.rb
@@ -17,7 +17,7 @@ class MigrateSettings < ActiveRecord::Migration[4.2]
t.remove_index [:thing_type, :thing_id, :var]
t.rename :thing_id, :target_id
t.rename :thing_type, :target_type
- t.column :target_id, :integer, null: false
+ t.column :target_id, :integer, null: false # rubocop:disable Rails/NotNullColumn
t.column :target_type, :string, null: false, default: ''
t.index [:target_type, :target_id, :var], unique: true
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/20240808124338_migrate_notifications_policy_v2.rb b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
index 2e0684826a..ed1642d6b8 100644
--- a/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
+++ b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
@@ -9,7 +9,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def up
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
- for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
+ for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END,
for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END,
for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END
SQL
@@ -18,7 +18,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def down
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END,
- filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END,
+ filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END,
filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END,
filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END
SQL
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/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb b/db/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb
new file mode 100644
index 0000000000..5bfa55bcc6
--- /dev/null
+++ b/db/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountConversationAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_conversations, 'account_id IS NOT NULL', name: 'account_conversations_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb b/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb
new file mode 100644
index 0000000000..0186559dc3
--- /dev/null
+++ b/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountConversationAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_conversations
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_conversations, name: 'account_conversations_account_id_null'
+ change_column_null :account_conversations, :account_id, false
+ remove_check_constraint :account_conversations, name: 'account_conversations_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_conversations, 'account_id IS NOT NULL', name: 'account_conversations_account_id_null', validate: false
+ change_column_null :account_conversations, :account_id, true
+ end
+end
diff --git a/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb b/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb
new file mode 100644
index 0000000000..e253a1b3e1
--- /dev/null
+++ b/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountConversationConversationColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_conversations, 'conversation_id IS NOT NULL', name: 'account_conversations_conversation_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb b/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb
new file mode 100644
index 0000000000..324e9180e2
--- /dev/null
+++ b/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountConversationConversationColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_conversations
+ WHERE conversation_id IS NULL
+ SQL
+
+ validate_check_constraint :account_conversations, name: 'account_conversations_conversation_id_null'
+ change_column_null :account_conversations, :conversation_id, false
+ remove_check_constraint :account_conversations, name: 'account_conversations_conversation_id_null'
+ end
+
+ def down
+ add_check_constraint :account_conversations, 'conversation_id IS NOT NULL', name: 'account_conversations_conversation_id_null', validate: false
+ change_column_null :account_conversations, :conversation_id, true
+ end
+end
diff --git a/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb b/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb
new file mode 100644
index 0000000000..85c10ace22
--- /dev/null
+++ b/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountNoteAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_notes, 'account_id IS NOT NULL', name: 'account_notes_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb b/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb
new file mode 100644
index 0000000000..50907ffe9d
--- /dev/null
+++ b/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountNoteAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_notes
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_notes, name: 'account_notes_account_id_null'
+ change_column_null :account_notes, :account_id, false
+ remove_check_constraint :account_notes, name: 'account_notes_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_notes, 'account_id IS NOT NULL', name: 'account_notes_account_id_null', validate: false
+ change_column_null :account_notes, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb b/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb
new file mode 100644
index 0000000000..9b389bfbff
--- /dev/null
+++ b/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountNoteTargetAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_notes, 'target_account_id IS NOT NULL', name: 'account_notes_target_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb b/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb
new file mode 100644
index 0000000000..2021a0eb50
--- /dev/null
+++ b/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountNoteTargetAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_notes
+ WHERE target_account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_notes, name: 'account_notes_target_account_id_null'
+ change_column_null :account_notes, :target_account_id, false
+ remove_check_constraint :account_notes, name: 'account_notes_target_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_notes, 'target_account_id IS NOT NULL', name: 'account_notes_target_account_id_null', validate: false
+ change_column_null :account_notes, :target_account_id, true
+ end
+end
diff --git a/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb b/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb
new file mode 100644
index 0000000000..9d08fd8964
--- /dev/null
+++ b/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToMarkerUserColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :markers, 'user_id IS NOT NULL', name: 'markers_user_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb b/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb
new file mode 100644
index 0000000000..37ec90eb9b
--- /dev/null
+++ b/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToMarkerUserColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM markers
+ WHERE user_id IS NULL
+ SQL
+
+ validate_check_constraint :markers, name: 'markers_user_id_null'
+ change_column_null :markers, :user_id, false
+ remove_check_constraint :markers, name: 'markers_user_id_null'
+ end
+
+ def down
+ add_check_constraint :markers, 'user_id IS NOT NULL', name: 'markers_user_id_null', validate: false
+ change_column_null :markers, :user_id, true
+ end
+end
diff --git a/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb b/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb
new file mode 100644
index 0000000000..827f146b5e
--- /dev/null
+++ b/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollVoteAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :poll_votes, 'account_id IS NOT NULL', name: 'poll_votes_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb b/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb
new file mode 100644
index 0000000000..4dfa5403c1
--- /dev/null
+++ b/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollVoteAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM poll_votes
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :poll_votes, name: 'poll_votes_account_id_null'
+ change_column_null :poll_votes, :account_id, false
+ remove_check_constraint :poll_votes, name: 'poll_votes_account_id_null'
+ end
+
+ def down
+ add_check_constraint :poll_votes, 'account_id IS NOT NULL', name: 'poll_votes_account_id_null', validate: false
+ change_column_null :poll_votes, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb b/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb
new file mode 100644
index 0000000000..6e8a2f4f67
--- /dev/null
+++ b/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollVotePollColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :poll_votes, 'poll_id IS NOT NULL', name: 'poll_votes_poll_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb b/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb
new file mode 100644
index 0000000000..9b71406548
--- /dev/null
+++ b/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollVotePollColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM poll_votes
+ WHERE poll_id IS NULL
+ SQL
+
+ validate_check_constraint :poll_votes, name: 'poll_votes_poll_id_null'
+ change_column_null :poll_votes, :poll_id, false
+ remove_check_constraint :poll_votes, name: 'poll_votes_poll_id_null'
+ end
+
+ def down
+ add_check_constraint :poll_votes, 'poll_id IS NOT NULL', name: 'poll_votes_poll_id_null', validate: false
+ change_column_null :poll_votes, :poll_id, true
+ end
+end
diff --git a/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb b/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb
new file mode 100644
index 0000000000..9ff5c2d8f3
--- /dev/null
+++ b/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :polls, 'account_id IS NOT NULL', name: 'polls_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb b/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb
new file mode 100644
index 0000000000..91e835359c
--- /dev/null
+++ b/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM polls
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :polls, name: 'polls_account_id_null'
+ change_column_null :polls, :account_id, false
+ remove_check_constraint :polls, name: 'polls_account_id_null'
+ end
+
+ def down
+ add_check_constraint :polls, 'account_id IS NOT NULL', name: 'polls_account_id_null', validate: false
+ change_column_null :polls, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb b/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb
new file mode 100644
index 0000000000..5c638c6af0
--- /dev/null
+++ b/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollStatusColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :polls, 'status_id IS NOT NULL', name: 'polls_status_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb b/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb
new file mode 100644
index 0000000000..b5985ce062
--- /dev/null
+++ b/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollStatusColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM polls
+ WHERE status_id IS NULL
+ SQL
+
+ validate_check_constraint :polls, name: 'polls_status_id_null'
+ change_column_null :polls, :status_id, false
+ remove_check_constraint :polls, name: 'polls_status_id_null'
+ end
+
+ def down
+ add_check_constraint :polls, 'status_id IS NOT NULL', name: 'polls_status_id_null', validate: false
+ change_column_null :polls, :status_id, true
+ end
+end
diff --git a/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb b/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb
new file mode 100644
index 0000000000..1a380cdef3
--- /dev/null
+++ b/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToTombstoneAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :tombstones, 'account_id IS NOT NULL', name: 'tombstones_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb b/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb
new file mode 100644
index 0000000000..5fefcca33d
--- /dev/null
+++ b/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToTombstoneAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM tombstones
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :tombstones, name: 'tombstones_account_id_null'
+ change_column_null :tombstones, :account_id, false
+ remove_check_constraint :tombstones, name: 'tombstones_account_id_null'
+ end
+
+ def down
+ add_check_constraint :tombstones, 'account_id IS NOT NULL', name: 'tombstones_account_id_null', validate: false
+ change_column_null :tombstones, :account_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/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
index eb0c909729..5daf646643 100644
--- a/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
+++ b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
@@ -9,7 +9,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def up
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
- for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
+ for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END,
for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END,
for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END
SQL
@@ -18,7 +18,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def down
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END,
- filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END,
+ filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END,
filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END,
filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END
SQL
diff --git a/db/schema.rb b/db/schema.rb
index 889e914aa6..49b10cb7bd 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_05_163118) do
+ActiveRecord::Schema[7.2].define(version: 2024_12_16_224825) 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
@@ -24,8 +24,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
end
create_table "account_conversations", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "conversation_id"
+ t.bigint "account_id", null: false
+ t.bigint "conversation_id", null: false
t.bigint "participant_account_ids", default: [], null: false, array: true
t.bigint "status_ids", default: [], null: false, array: true
t.bigint "last_status_id"
@@ -36,17 +36,17 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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
@@ -72,8 +72,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
end
create_table "account_notes", 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.text "comment", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@@ -82,8 +82,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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
@@ -213,7 +213,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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"
@@ -227,8 +227,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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
@@ -236,8 +236,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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
@@ -405,7 +405,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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
@@ -599,7 +599,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
end
create_table "markers", force: :cascade do |t|
- t.bigint "user_id"
+ t.bigint "user_id", null: false
t.string "timeline", default: "", null: false
t.bigint "last_read_id", default: 0, null: false
t.integer "lock_version", default: 0, null: false
@@ -767,8 +767,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
end
create_table "poll_votes", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "poll_id"
+ t.bigint "account_id", null: false
+ t.bigint "poll_id", null: false
t.integer "choice", default: 0, null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@@ -778,8 +778,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
end
create_table "polls", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "status_id"
+ t.bigint "account_id", null: false
+ t.bigint "status_id", null: false
t.datetime "expires_at", precision: nil
t.string "options", default: [], null: false, array: true
t.bigint "cached_tallies", default: [], null: false, array: true
@@ -915,7 +915,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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"
@@ -1103,8 +1103,17 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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.bigint "account_id", null: false
t.string "uri", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@@ -1121,7 +1130,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) 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/docker-compose.yml b/docker-compose.yml
index 6018b85a70..6048129318 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -59,7 +59,7 @@ services:
web:
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
- image: ghcr.io/mastodon/mastodon:v4.3.1
+ image: ghcr.io/mastodon/mastodon:v4.3.2
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@@ -83,7 +83,7 @@ services:
# build:
# dockerfile: ./streaming/Dockerfile
# context: .
- image: ghcr.io/mastodon/mastodon-streaming:v4.3.1
+ image: ghcr.io/mastodon/mastodon-streaming:v4.3.2
restart: always
env_file: .env.production
command: node ./streaming/index.js
@@ -101,7 +101,7 @@ services:
sidekiq:
build: .
- image: ghcr.io/mastodon/mastodon:v4.3.1
+ image: ghcr.io/mastodon/mastodon:v4.3.2
restart: always
env_file: .env.production
command: bundle exec sidekiq
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/mastodon/sidekiq_middleware.rb b/lib/mastodon/sidekiq_middleware.rb
index 8ce1124c69..4df22002c8 100644
--- a/lib/mastodon/sidekiq_middleware.rb
+++ b/lib/mastodon/sidekiq_middleware.rb
@@ -3,8 +3,10 @@
class Mastodon::SidekiqMiddleware
BACKTRACE_LIMIT = 3
- def call(*, &block)
- Chewy.strategy(:mastodon, &block)
+ def call(_worker_class, job, _queue, &block)
+ setup_query_log_tags(job) do
+ Chewy.strategy(:mastodon, &block)
+ end
rescue Mastodon::HostValidationError
# Do not retry
rescue => e
@@ -61,4 +63,14 @@ class Mastodon::SidekiqMiddleware
Thread.current[:statsd_socket]&.close
Thread.current[:statsd_socket] = nil
end
+
+ def setup_query_log_tags(job, &block)
+ if Rails.configuration.active_record.query_log_tags_enabled
+ # If `wrapped` is set, this is an `ActiveJob` which is already in the execution context
+ sidekiq_job_class = job['wrapped'].present? ? nil : job['class'].to_s
+ ActiveSupport::ExecutionContext.set(sidekiq_job_class: sidekiq_job_class, &block)
+ else
+ yield
+ end
+ end
end
diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb
index c264548eb5..36c11a8263 100644
--- a/lib/sanitize_ext/sanitize_config.rb
+++ b/lib/sanitize_ext/sanitize_config.rb
@@ -114,7 +114,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 e1e2dd8194..692fe0a507 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/lint-staged.config.js b/lint-staged.config.js
index 1ee6962c2a..63f5258a94 100644
--- a/lint-staged.config.js
+++ b/lint-staged.config.js
@@ -1,6 +1,6 @@
const config = {
'*': 'prettier --ignore-unknown --write',
- 'Capfile|Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a',
+ 'Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a',
'*.{js,jsx,ts,tsx}': 'eslint --fix',
'*.{css,scss}': 'stylelint --fix',
'*.haml': 'bin/haml-lint -a',
diff --git a/package.json b/package.json
index 529ddcabfb..3fd1b22c6f 100644
--- a/package.json
+++ b/package.json
@@ -42,13 +42,14 @@
"@babel/preset-react": "^7.22.3",
"@babel/preset-typescript": "^7.21.5",
"@babel/runtime": "^7.22.3",
+ "@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",
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@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",
@@ -190,9 +191,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/public/loading.gif b/public/loading.gif
new file mode 100755
index 0000000000..b3e1dbef8f
Binary files /dev/null and b/public/loading.gif differ
diff --git a/public/loading.png b/public/loading.png
new file mode 100755
index 0000000000..6a20cbfcb6
Binary files /dev/null and b/public/loading.png differ
diff --git a/spec/controllers/.rubocop.yml b/spec/controllers/.rubocop.yml
deleted file mode 100644
index 51d7c23de1..0000000000
--- a/spec/controllers/.rubocop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-inherit_from: ../../.rubocop.yml
-
-# Anonymous controllers in specs cannot access `described_class`, explanation:
-# https://github.com/rubocop/rubocop-rspec/blob/v2.26.1/lib/rubocop/cop/rspec/described_class.rb#L36-L56
-RSpec/DescribedClass:
- SkipBlocks: true
diff --git a/spec/controllers/admin/account_moderation_notes_controller_spec.rb b/spec/controllers/admin/account_moderation_notes_controller_spec.rb
deleted file mode 100644
index 5ea546f418..0000000000
--- a/spec/controllers/admin/account_moderation_notes_controller_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::AccountModerationNotesController do
- render_views
-
- let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- let(:target_account) { Fabricate(:account) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'POST #create' do
- subject { post :create, params: params }
-
- context 'when parameters are valid' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: 'test content' } } }
-
- it 'successfully creates a note' do
- expect { subject }.to change(AccountModerationNote, :count).by(1)
- expect(response).to redirect_to admin_account_path(target_account.id)
- end
- end
-
- context 'when the content is too short' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: '' } } }
-
- it 'fails to create a note' do
- expect { subject }.to_not change(AccountModerationNote, :count)
- expect(response).to render_template 'admin/accounts/show'
- end
- end
-
- context 'when the content is too long' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: 'test' * AccountModerationNote::CONTENT_SIZE_LIMIT } } }
-
- it 'fails to create a note' do
- expect { subject }.to_not change(AccountModerationNote, :count)
- expect(response).to render_template 'admin/accounts/show'
- end
- end
- end
-
- describe 'DELETE #destroy' do
- subject { delete :destroy, params: { id: note.id } }
-
- let!(:note) { Fabricate(:account_moderation_note, account: account, target_account: target_account) }
- let(:account) { Fabricate(:account) }
-
- it 'destroys note' do
- expect { subject }.to change(AccountModerationNote, :count).by(-1)
- expect(response).to redirect_to admin_account_path(target_account.id)
- end
- end
-end
diff --git a/spec/controllers/admin/custom_emojis_controller_spec.rb b/spec/controllers/admin/custom_emojis_controller_spec.rb
deleted file mode 100644
index 57c2a6d21b..0000000000
--- a/spec/controllers/admin/custom_emojis_controller_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::CustomEmojisController 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
- before do
- Fabricate(:custom_emoji)
- end
-
- it 'renders index page' do
- get :index
-
- expect(response).to have_http_status 200
- expect(response).to render_template :index
- end
- end
-
- describe 'GET #new' do
- it 'renders new page' do
- get :new
-
- expect(response).to have_http_status 200
- expect(response).to render_template :new
- end
- end
-
- describe 'POST #create' do
- subject { post :create, params: { custom_emoji: params } }
-
- let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
-
- context 'when parameter is valid' do
- let(:params) { { shortcode: 'test', image: image } }
-
- it 'creates custom emoji' do
- expect { subject }.to change(CustomEmoji, :count).by(1)
- end
- end
-
- context 'when parameter is invalid' do
- let(:params) { { shortcode: 't', image: image } }
-
- it 'renders new' do
- expect(subject).to render_template :new
- end
- end
- end
-end
diff --git a/spec/controllers/admin/domain_allows_controller_spec.rb b/spec/controllers/admin/domain_allows_controller_spec.rb
deleted file mode 100644
index 036d229091..0000000000
--- a/spec/controllers/admin/domain_allows_controller_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::DomainAllowsController do
- render_views
-
- before do
- sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
- end
-
- describe 'GET #new' do
- it 'assigns a new domain allow' do
- get :new
-
- expect(response).to have_http_status(200)
- end
- end
-
- describe 'POST #create' do
- it 'blocks the domain when succeeded to save' do
- post :create, params: { domain_allow: { domain: 'example.com' } }
-
- expect(flash[:notice]).to eq I18n.t('admin.domain_allows.created_msg')
- expect(response).to redirect_to(admin_instances_path)
- end
-
- it 'renders new when failed to save' do
- Fabricate(:domain_allow, domain: 'example.com')
-
- post :create, params: { domain_allow: { domain: 'example.com' } }
-
- expect(response).to render_template :new
- end
- end
-
- describe 'DELETE #destroy' do
- it 'disallows the domain' do
- service = instance_double(UnallowDomainService, call: true)
- allow(UnallowDomainService).to receive(:new).and_return(service)
- domain_allow = Fabricate(:domain_allow)
- delete :destroy, params: { id: domain_allow.id }
-
- expect(service).to have_received(:call).with(domain_allow)
- expect(flash[:notice]).to eq I18n.t('admin.domain_allows.destroyed_msg')
- expect(response).to redirect_to(admin_instances_path)
- end
- end
-end
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/ip_blocks_controller_spec.rb b/spec/controllers/admin/ip_blocks_controller_spec.rb
deleted file mode 100644
index 2e32db5a01..0000000000
--- a/spec/controllers/admin/ip_blocks_controller_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::IpBlocksController 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
-
- describe 'GET #new' do
- it 'returns http success and renders view' do
- get :new
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- describe 'POST #create' do
- context 'with valid data' do
- it 'creates a new ip block and redirects' do
- expect do
- post :create, params: { ip_block: { ip: '1.1.1.1', severity: 'no_access', expires_in: 1.day.to_i.to_s } }
- end.to change(IpBlock, :count).by(1)
-
- expect(response).to redirect_to(admin_ip_blocks_path)
- expect(flash.notice).to match(I18n.t('admin.ip_blocks.created_msg'))
- end
- end
-
- context 'with invalid data' do
- it 'does not create new a ip block and renders new' do
- expect do
- post :create, params: { ip_block: { ip: '1.1.1.1' } }
- end.to_not change(IpBlock, :count)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
- end
-end
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/admin/webhooks_controller_spec.rb b/spec/controllers/admin/webhooks_controller_spec.rb
deleted file mode 100644
index 4fe787c26c..0000000000
--- a/spec/controllers/admin/webhooks_controller_spec.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::WebhooksController 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
-
- describe 'GET #new' do
- it 'returns http success and renders view' do
- get :new
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- describe 'POST #create' do
- it 'creates a new webhook record with valid data' do
- expect do
- post :create, params: { webhook: { url: 'https://example.com/hook', events: ['account.approved'] } }
- end.to change(Webhook, :count).by(1)
-
- expect(response).to be_redirect
- end
-
- it 'does not create a new webhook record with invalid data' do
- expect do
- post :create, params: { webhook: { url: 'https://example.com/hook', events: [] } }
- end.to_not change(Webhook, :count)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- context 'with an existing record' do
- let!(:webhook) { Fabricate(:webhook, events: ['account.created', 'report.created']) }
-
- describe 'GET #show' do
- it 'returns http success and renders view' do
- get :show, params: { id: webhook.id }
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:show)
- end
- end
-
- describe 'GET #edit' do
- it 'returns http success and renders view' do
- get :edit, params: { id: webhook.id }
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:edit)
- end
- end
-
- describe 'PUT #update' do
- it 'updates the record with valid data' do
- put :update, params: { id: webhook.id, webhook: { url: 'https://example.com/new/location' } }
-
- expect(webhook.reload.url).to match(%r{new/location})
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
-
- it 'does not update the record with invalid data' do
- expect do
- put :update, params: { id: webhook.id, webhook: { url: '' } }
- end.to_not change(webhook, :url)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:edit)
- end
- end
-
- describe 'POST #enable' do
- it 'enables the webhook' do
- post :enable, params: { id: webhook.id }
-
- expect(webhook.reload).to be_enabled
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
- end
-
- describe 'POST #disable' do
- it 'disables the webhook' do
- post :disable, params: { id: webhook.id }
-
- expect(webhook.reload).to_not be_enabled
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
- end
-
- describe 'DELETE #destroy' do
- it 'destroys the record' do
- expect do
- delete :destroy, params: { id: webhook.id }
- end.to change(Webhook, :count).by(-1)
-
- expect(response).to redirect_to(admin_webhooks_path)
- end
- end
- end
-end
diff --git a/spec/controllers/concerns/account_controller_concern_spec.rb b/spec/controllers/concerns/account_controller_concern_spec.rb
index 384406a0ea..4a44fd3498 100644
--- a/spec/controllers/concerns/account_controller_concern_spec.rb
+++ b/spec/controllers/concerns/account_controller_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AccountControllerConcern do
controller(ApplicationController) do
- include AccountControllerConcern
+ include AccountControllerConcern # rubocop:disable RSpec/DescribedClass
def success
render plain: @account.username # rubocop:disable RSpec/InstanceVariable
diff --git a/spec/controllers/concerns/api/rate_limit_headers_spec.rb b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
index 6372c94e6c..74ed81f5da 100644
--- a/spec/controllers/concerns/api/rate_limit_headers_spec.rb
+++ b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Api::RateLimitHeaders do
controller(ApplicationController) do
- include Api::RateLimitHeaders
+ include Api::RateLimitHeaders # rubocop:disable RSpec/DescribedClass
def show
head 200
diff --git a/spec/controllers/concerns/challengable_concern_spec.rb b/spec/controllers/concerns/challengable_concern_spec.rb
index 169e2122f8..01f979ff4c 100644
--- a/spec/controllers/concerns/challengable_concern_spec.rb
+++ b/spec/controllers/concerns/challengable_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe ChallengableConcern do
controller(ApplicationController) do
- include ChallengableConcern
+ include ChallengableConcern # rubocop:disable RSpec/DescribedClass
before_action :require_challenge!
diff --git a/spec/controllers/concerns/localized_spec.rb b/spec/controllers/concerns/localized_spec.rb
index b1f805ae50..4798e8270c 100644
--- a/spec/controllers/concerns/localized_spec.rb
+++ b/spec/controllers/concerns/localized_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Localized do
controller(ApplicationController) do
- include Localized
+ include Localized # rubocop:disable RSpec/DescribedClass
def success
render plain: I18n.locale, status: 200
diff --git a/spec/controllers/concerns/preloading_concern_spec.rb b/spec/controllers/concerns/preloading_concern_spec.rb
index 795afbc45e..2cbccb411e 100644
--- a/spec/controllers/concerns/preloading_concern_spec.rb
+++ b/spec/controllers/concerns/preloading_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe PreloadingConcern do
controller(ApplicationController) do
- include PreloadingConcern
+ include PreloadingConcern # rubocop:disable RSpec/DescribedClass
def empty_array
render plain: preload_collection([], Status).size
diff --git a/spec/controllers/concerns/settings/export_controller_concern_spec.rb b/spec/controllers/concerns/settings/export_controller_concern_spec.rb
index 2c67991e3a..6c1a06114c 100644
--- a/spec/controllers/concerns/settings/export_controller_concern_spec.rb
+++ b/spec/controllers/concerns/settings/export_controller_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Settings::ExportControllerConcern do
controller(ApplicationController) do
- include Settings::ExportControllerConcern
+ include Settings::ExportControllerConcern # rubocop:disable RSpec/DescribedClass
def index
send_export_file
diff --git a/spec/controllers/concerns/user_tracking_concern_spec.rb b/spec/controllers/concerns/user_tracking_concern_spec.rb
index cc61e285cc..d67b0ef5e7 100644
--- a/spec/controllers/concerns/user_tracking_concern_spec.rb
+++ b/spec/controllers/concerns/user_tracking_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe UserTrackingConcern do
controller(ApplicationController) do
- include UserTrackingConcern
+ include UserTrackingConcern # rubocop:disable RSpec/DescribedClass
def show
render plain: 'show'
diff --git a/spec/controllers/filters_controller_spec.rb b/spec/controllers/filters_controller_spec.rb
deleted file mode 100644
index de043e8ae3..0000000000
--- a/spec/controllers/filters_controller_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe FiltersController do
- render_views
-
- describe 'GET #index' do
- context 'with signed out user' do
- before do
- get :index
- end
-
- it 'redirects' do
- expect(response).to be_redirect
- end
- end
-
- context 'with a signed in user' do
- before do
- sign_in(Fabricate(:user))
- get :index
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
-
- it 'returns private cache control headers' do
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
- end
-end
diff --git a/spec/controllers/settings/login_activities_controller_spec.rb b/spec/controllers/settings/login_activities_controller_spec.rb
deleted file mode 100644
index 3447620abb..0000000000
--- a/spec/controllers/settings/login_activities_controller_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::LoginActivitiesController do
- render_views
-
- let!(:user) { Fabricate(:user) }
- let!(:login_activity) { Fabricate :login_activity, user: user }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #index' do
- before do
- get :index
- end
-
- it 'returns http success with private cache control headers', :aggregate_failures do
- expect(response).to have_http_status(200)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- expect(response.body)
- .to include(login_activity.user_agent)
- .and include(login_activity.authentication_method)
- .and include(login_activity.ip.to_s)
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/appearance_controller_spec.rb b/spec/controllers/settings/preferences/appearance_controller_spec.rb
deleted file mode 100644
index 14f9b244ab..0000000000
--- a/spec/controllers/settings/preferences/appearance_controller_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::AppearanceController 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)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- subject { put :update, params: { user: { settings_attributes: { theme: 'contrast' } } } }
-
- it 'redirects correctly' do
- expect { subject }
- .to change { user.reload.settings.theme }.to('contrast')
-
- expect(response).to redirect_to(settings_preferences_appearance_path)
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/notifications_controller_spec.rb b/spec/controllers/settings/preferences/notifications_controller_spec.rb
deleted file mode 100644
index edfdea50e0..0000000000
--- a/spec/controllers/settings/preferences/notifications_controller_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::NotificationsController 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)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- it 'updates notifications settings' do
- user.settings.update('notification_emails.follow': false)
- user.save
-
- put :update, params: {
- user: {
- settings_attributes: {
- 'notification_emails.follow': '1',
- },
- },
- }
-
- expect(response).to redirect_to(settings_preferences_notifications_path)
- user.reload
- expect(user.settings['notification_emails.follow']).to be true
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/other_controller_spec.rb b/spec/controllers/settings/preferences/other_controller_spec.rb
deleted file mode 100644
index 117fdeea7c..0000000000
--- a/spec/controllers/settings/preferences/other_controller_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::OtherController do
- render_views
-
- let(:user) { Fabricate(:user, chosen_languages: []) }
-
- 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)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- it 'updates the user record' do
- put :update, params: { user: { locale: 'en', chosen_languages: ['es', 'fr', ''] } }
-
- expect(response).to redirect_to(settings_preferences_other_path)
- user.reload
- expect(user.locale).to eq 'en'
- expect(user.chosen_languages).to eq %w(es fr)
- end
-
- it 'updates user settings' do
- user.settings.update('web.reblog_modal': false, 'web.delete_modal': true)
- user.save
-
- put :update, params: {
- user: {
- settings_attributes: {
- 'web.reblog_modal': '1',
- 'web.delete_modal': '0',
- },
- },
- }
-
- expect(response).to redirect_to(settings_preferences_other_path)
- user.reload
- expect(user.settings['web.reblog_modal']).to be true
- expect(user.settings['web.delete_modal']).to be false
- end
- end
-end
diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
deleted file mode 100644
index e3197f0a6d..0000000000
--- a/spec/controllers/settings/profiles_controller_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::ProfilesController do
- render_views
-
- let!(:user) { Fabricate(:user) }
- let(:account) { user.account }
-
- 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)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- before do
- user.account.update(display_name: 'Old name')
- end
-
- it 'updates the user profile' do
- allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
- put :update, params: { account: { display_name: 'New name' } }
- expect(account.reload.display_name).to eq 'New name'
- expect(response).to redirect_to(settings_profile_path)
- expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
- end
- end
-
- describe 'PUT #update with new profile image' do
- it 'updates profile image' do
- allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
- expect(account.avatar.instance.avatar_file_name).to be_nil
-
- put :update, params: { account: { avatar: fixture_file_upload('avatar.gif', 'image/gif') } }
- expect(response).to redirect_to(settings_profile_path)
- expect(account.reload.avatar.instance.avatar_file_name).to_not be_nil
- expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
- 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/controllers/statuses_cleanup_controller_spec.rb b/spec/controllers/statuses_cleanup_controller_spec.rb
deleted file mode 100644
index 8a72621993..0000000000
--- a/spec/controllers/statuses_cleanup_controller_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe StatusesCleanupController 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' do
- expect(response).to have_http_status(200)
- end
-
- it 'returns private cache control headers' do
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- before do
- put :update, params: { account_statuses_cleanup_policy: { enabled: true, min_status_age: 2.weeks.seconds, keep_direct: false, keep_polls: true } }
- end
-
- it 'updates the account status cleanup policy' do
- expect(user.account.statuses_cleanup_policy.enabled).to be true
- expect(user.account.statuses_cleanup_policy.keep_direct).to be false
- expect(user.account.statuses_cleanup_policy.keep_polls).to be true
- end
-
- it 'redirects' do
- expect(response).to redirect_to(statuses_cleanup_path)
- end
- end
-end
diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb
index 121e4aa6c6..e14a7f6916 100644
--- a/spec/controllers/statuses_controller_spec.rb
+++ b/spec/controllers/statuses_controller_spec.rb
@@ -527,213 +527,4 @@ RSpec.describe StatusesController do
end
end
end
-
- describe 'GET #activity' do
- let(:account) { Fabricate(:account) }
- let(:status) { Fabricate(:status, account: account) }
-
- context 'when account is permanently suspended' do
- before do
- account.suspend!
- account.deletion_request.destroy
-
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http gone' do
- expect(response).to have_http_status(410)
- end
- end
-
- context 'when account is temporarily suspended' do
- before do
- account.suspend!
-
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http forbidden' do
- expect(response).to have_http_status(403)
- end
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when status is direct' do
- before do
- status.update(visibility: :direct)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when signed-in' do
- let(:user) { Fabricate(:user) }
-
- before do
- sign_in(user)
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- end
-
- context 'when user is authorized to see it' do
- before do
- user.account.follow!(account)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
-
- context 'when status is direct' do
- before do
- status.update(visibility: :direct)
- end
-
- context 'when user is authorized to see it' do
- before do
- Fabricate(:mention, account: user.account, status: status)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
- end
-
- context 'with signature' do
- let(:remote_account) { Fabricate(:account, domain: 'example.com') }
-
- before do
- allow(controller).to receive(:signed_request_actor).and_return(remote_account)
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- end
-
- context 'when user is authorized to see it' do
- before do
- remote_account.follow!(account)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
-
- context 'when status is direct' do
- before do
- status.update(visibility: :direct)
- end
-
- context 'when user is authorized to see it' do
- before do
- Fabricate(:mention, account: remote_account, status: status)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
- 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/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb
index 9482a30959..342da29028 100644
--- a/spec/lib/activitypub/activity/create_spec.rb
+++ b/spec/lib/activitypub/activity/create_spec.rb
@@ -160,10 +160,6 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when fetching' do
subject { described_class.new(json, sender) }
- before do
- subject.perform
- end
-
context 'when object publication date is below ISO8601 range' do
let(:object_json) do
{
@@ -175,6 +171,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with a valid creation date', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -195,6 +193,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with a valid creation date', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -216,6 +216,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with appropriate creation and edition dates', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -239,17 +241,13 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status and does not mark it as edited' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.text).to eq 'Lorem ipsum'
- end
-
- it 'does not mark status as edited' do
- status = sender.statuses.first
-
- expect(status).to_not be_nil
expect(status.edited?).to be false
end
end
@@ -264,7 +262,7 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'does not create a status' do
- expect(sender.statuses.count).to be_zero
+ expect { subject.perform }.to_not change(sender.statuses, :count)
end
end
@@ -278,6 +276,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -285,6 +285,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'missing to/cc defaults to direct privacy' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -303,6 +305,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -321,6 +325,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -339,6 +345,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -357,6 +365,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -375,6 +385,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -393,6 +405,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -411,6 +425,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -433,6 +449,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -452,15 +470,13 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status with a silent mention' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.visibility).to eq 'limited'
- end
-
- it 'creates silent mention' do
- status = sender.statuses.first
expect(status.mentions.first).to be_silent
end
end
@@ -482,6 +498,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -502,6 +520,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -530,6 +550,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -552,6 +574,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -579,6 +603,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with correctly-ordered media attachments' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -605,6 +631,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -630,6 +658,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -655,6 +685,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -678,6 +710,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -700,6 +734,42 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
+ status = sender.statuses.first
+
+ expect(status).to_not be_nil
+ expect(status.tags.map(&:name)).to include('test')
+ end
+ end
+
+ context 'with featured hashtags' do
+ let(:object_json) do
+ {
+ id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+ type: 'Note',
+ content: 'Lorem ipsum',
+ to: 'https://www.w3.org/ns/activitystreams#Public',
+ tag: [
+ {
+ type: 'Hashtag',
+ href: 'http://example.com/blah',
+ name: '#test',
+ },
+ ],
+ }
+ end
+
+ before do
+ sender.featured_tags.create!(name: 'test')
+ end
+
+ it 'creates status and updates featured tag' do
+ expect { subject.perform }
+ .to change(sender.statuses, :count).by(1)
+ .and change { sender.featured_tags.first.reload.statuses_count }.by(1)
+ .and change { sender.featured_tags.first.reload.last_status_at }.from(nil).to(be_within(0.1).of(Time.now.utc))
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -723,6 +793,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -745,6 +817,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -769,6 +843,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -795,6 +871,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -820,6 +898,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -841,6 +921,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -871,13 +953,13 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status with a poll' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.poll).to_not be_nil
- end
- it 'creates a poll' do
poll = sender.polls.first
expect(poll).to_not be_nil
expect(poll.status).to_not be_nil
@@ -900,6 +982,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'adds a vote to the poll with correct uri' do
+ expect { subject.perform }.to change(poll.votes, :count).by(1)
+
vote = poll.votes.first
expect(vote).to_not be_nil
expect(vote.uri).to eq object_json[:id]
@@ -909,9 +993,9 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when a vote to an expired local poll' do
let(:poll) do
- poll = Fabricate.build(:poll, options: %w(Yellow Blue), expires_at: 1.day.ago)
- poll.save(validate: false)
- poll
+ travel_to 2.days.ago do
+ Fabricate(:poll, options: %w(Yellow Blue), expires_at: 1.day.from_now)
+ end
end
let!(:local_status) { Fabricate(:status, poll: poll) }
@@ -925,6 +1009,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'does not add a vote to the poll' do
+ expect { subject.perform }.to_not change(poll.votes, :count)
+
expect(poll.votes.first).to be_nil
end
end
@@ -949,6 +1035,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'uses the counts from the created object' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status.untrusted_favourites_count).to eq 50
expect(status.untrusted_reblogs_count).to eq 100
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..533aa2e624 100644
--- a/spec/mailers/user_mailer_spec.rb
+++ b/spec/mailers/user_mailer_spec.rb
@@ -3,6 +3,17 @@
require 'rails_helper'
RSpec.describe UserMailer do
+ shared_examples 'delivery to memorialized user' do
+ context 'when the account is memorialized' do
+ before { receiver.account.update(memorial: true) }
+
+ it 'does not deliver mail' do
+ emails = capture_emails { mail.deliver_now }
+ expect(emails).to be_empty
+ end
+ end
+ end
+
let(:receiver) { Fabricate(:user) }
describe '#confirmation_instructions' do
@@ -21,6 +32,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.confirmation_instructions.subject',
instance: Rails.configuration.x.local_domain
+ include_examples 'delivery to memorialized user'
end
describe '#reconfirmation_instructions' do
@@ -39,6 +51,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.confirmation_instructions.subject',
instance: Rails.configuration.x.local_domain
+ include_examples 'delivery to memorialized user'
end
describe '#reset_password_instructions' do
@@ -55,6 +68,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.reset_password_instructions.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#password_change' do
@@ -70,6 +84,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.password_change.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#email_changed' do
@@ -85,6 +100,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.email_changed.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#warning' do
@@ -115,6 +131,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.webauthn_credential.deleted.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#suspicious_sign_in' do
@@ -186,6 +203,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_enabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_enabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#two_factor_disabled' do
@@ -197,6 +216,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_disabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_disabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_enabled' do
@@ -208,6 +229,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_enabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_enabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_disabled' do
@@ -219,6 +242,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_disabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_disabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#two_factor_recovery_codes_changed' do
@@ -230,6 +255,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_recovery_codes_changed.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_recovery_codes_changed.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_credential_added' do
@@ -242,6 +269,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_credential.added.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_credential.added.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#welcome' do
@@ -259,6 +288,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('user_mailer.welcome.subject')))
.and(have_body_text(I18n.t('user_mailer.welcome.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#backup_ready' do
@@ -271,5 +302,19 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('user_mailer.backup_ready.subject')))
.and(have_body_text(I18n.t('user_mailer.backup_ready.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
+ 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/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb
index 9bbbefa08e..548e1105a1 100644
--- a/spec/models/account_statuses_cleanup_policy_spec.rb
+++ b/spec/models/account_statuses_cleanup_policy_spec.rb
@@ -129,8 +129,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) }
it 'records the given id' do
- account_statuses_cleanup_policy.record_last_inspected(42)
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { account_statuses_cleanup_policy.record_last_inspected(42) }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(nil).to(42)
end
end
@@ -153,8 +153,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -164,8 +164,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -179,8 +179,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -190,8 +190,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -205,8 +205,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -216,8 +216,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -227,8 +227,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
let(:status) { Fabricate(:status, account: account) }
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
end
diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb
index 18b791a73a..168cbb7c91 100644
--- a/spec/models/custom_filter_spec.rb
+++ b/spec/models/custom_filter_spec.rb
@@ -3,23 +3,14 @@
require 'rails_helper'
RSpec.describe CustomFilter do
+ include_examples 'Expireable'
+
describe 'Validations' 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 e14ad6eca0..dd8fd35a05 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/invite_spec.rb b/spec/models/invite_spec.rb
index 4ad589f2c7..e85885a8d8 100644
--- a/spec/models/invite_spec.rb
+++ b/spec/models/invite_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe Invite do
+ include_examples 'Expireable'
+
describe '#valid_for_use?' do
it 'returns true when there are no limitations' do
invite = Fabricate(:invite, max_uses: nil, expires_at: nil)
diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb
index b85856780a..93ee72423b 100644
--- a/spec/models/ip_block_spec.rb
+++ b/spec/models/ip_block_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe IpBlock do
+ include_examples 'Expireable'
+
describe 'Validations' do
subject { Fabricate.build :ip_block }
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/mute_spec.rb b/spec/models/mute_spec.rb
new file mode 100644
index 0000000000..33aa4f15dc
--- /dev/null
+++ b/spec/models/mute_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Mute do
+ include_examples 'Expireable'
+
+ describe 'Associations' do
+ it { is_expected.to belong_to(:account).required }
+ it { is_expected.to belong_to(:target_account).required }
+ end
+
+ describe 'Validations' do
+ subject { Fabricate.build :mute }
+
+ it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:target_account_id) }
+ end
+end
diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb
index 66f521ab3f..3288119546 100644
--- a/spec/models/poll_spec.rb
+++ b/spec/models/poll_spec.rb
@@ -3,32 +3,7 @@
require 'rails_helper'
RSpec.describe Poll do
- describe 'Scopes' do
- let(:status) { Fabricate(:status) }
- let(:attached_poll) { Fabricate(:poll, status: status) }
- let(:not_attached_poll) do
- Fabricate(:poll).tap do |poll|
- poll.status = nil
- poll.save(validate: false)
- end
- end
-
- describe '.attached' do
- it 'finds the correct records' do
- results = described_class.attached
-
- expect(results).to eq([attached_poll])
- end
- end
-
- describe '.unattached' do
- it 'finds the correct records' do
- results = described_class.unattached
-
- expect(results).to eq([not_attached_poll])
- end
- end
- end
+ include_examples 'Expireable'
describe '#reset_votes!' do
let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 }
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/models/user_role_spec.rb b/spec/models/user_role_spec.rb
index 4ad7e04217..48768719a1 100644
--- a/spec/models/user_role_spec.rb
+++ b/spec/models/user_role_spec.rb
@@ -18,6 +18,14 @@ RSpec.describe UserRole do
end
end
+ describe 'position' do
+ subject { Fabricate.build :user_role }
+
+ let(:limit) { described_class::POSITION_LIMIT }
+
+ it { is_expected.to validate_numericality_of(:position).is_in(-limit..limit) }
+ end
+
describe 'color' do
it { is_expected.to allow_values('#112233', '#aabbcc', '').for(:color) }
it { is_expected.to_not allow_values('x', '112233445566', '#xxyyzz').for(:color) }
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/filters_spec.rb b/spec/requests/filters_spec.rb
new file mode 100644
index 0000000000..a7b2eddc1b
--- /dev/null
+++ b/spec/requests/filters_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Filters' do
+ describe 'GET /filters' do
+ context 'with signed out user' do
+ it 'redirects to sign in page' do
+ get filters_path
+
+ expect(response)
+ .to redirect_to(new_user_session_path)
+ end
+ end
+ end
+end
diff --git a/spec/requests/statuses/activity_spec.rb b/spec/requests/statuses/activity_spec.rb
new file mode 100644
index 0000000000..20837a63a6
--- /dev/null
+++ b/spec/requests/statuses/activity_spec.rb
@@ -0,0 +1,218 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Status Activity' do
+ describe 'GET /users/:account_username/statuses/:id/activity' do
+ let(:account) { Fabricate(:account) }
+ let(:status) { Fabricate(:status, account: account) }
+
+ context 'when signed out' do
+ subject { get activity_account_status_path(account.username, status) }
+
+ context 'when account is permanently suspended' do
+ before do
+ account.suspend!
+ account.deletion_request.destroy
+ end
+
+ it 'returns http gone' do
+ subject
+
+ expect(response)
+ .to have_http_status(410)
+ end
+ end
+
+ context 'when account is temporarily suspended' do
+ before { account.suspend! }
+
+ it 'returns http forbidden' do
+ subject
+
+ expect(response)
+ .to have_http_status(403)
+ end
+ end
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when signed in' do
+ subject { get activity_account_status_path(account.username, status) }
+
+ let(:user) { Fabricate(:user) }
+
+ before { sign_in(user) }
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ context 'when user is authorized to see it' do
+ before { user.account.follow!(account) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ context 'when user is authorized to see it' do
+ before { Fabricate(:mention, account: user.account, status: status) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+ end
+
+ context 'with signature' do
+ subject { get activity_account_status_path(account.username, status), headers: nil, sign_with: remote_account }
+
+ let(:remote_account) { Fabricate(:account, domain: 'example.com') }
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ context 'when user is authorized to see it' do
+ before { remote_account.follow!(account) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ context 'when user is authorized to see it' do
+ before { Fabricate(:mention, account: remote_account, status: status) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/accept_follow_serializer_spec.rb b/spec/serializers/activitypub/accept_follow_serializer_spec.rb
new file mode 100644
index 0000000000..0639e64b9d
--- /dev/null
+++ b/spec/serializers/activitypub/accept_follow_serializer_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::AcceptFollowSerializer do
+ subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate :follow_request }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ actor: eq(ActivityPub::TagManager.instance.uri_for(record.target_account)),
+ id: match("#accepts/follows/#{record.id}"),
+ object: include(type: 'Follow'),
+ type: 'Accept'
+ )
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/reject_follow_serializer_spec.rb b/spec/serializers/activitypub/reject_follow_serializer_spec.rb
new file mode 100644
index 0000000000..10d8749178
--- /dev/null
+++ b/spec/serializers/activitypub/reject_follow_serializer_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::RejectFollowSerializer do
+ subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate :follow_request }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ actor: eq(ActivityPub::TagManager.instance.uri_for(record.target_account)),
+ id: match("#rejects/follows/#{record.id}"),
+ object: include(type: 'Follow'),
+ type: 'Reject'
+ )
+ end
+ end
+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..909fde39b3 100644
--- a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
+++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
@@ -5,13 +5,14 @@ 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
expect(subject)
.to include(
- 'id' => be_a(String).and(eq('123'))
+ 'id' => be_a(String).and(eq('123')),
+ 'created_at' => match_api_datetime_format
)
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..6d97fa573e
--- /dev/null
+++ b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
@@ -0,0 +1,21 @@
+# 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(:account) { Fabricate.build :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(subject)
+ .to include(
+ 'verified_at' => match_api_datetime_format
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb
index 7daa0796a9..5fd4f8d706 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,27 @@ 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
+ 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..a7a9dc5f63 100644
--- a/spec/serializers/rest/account_warning_serializer_spec.rb
+++ b/spec/serializers/rest/account_warning_serializer_spec.rb
@@ -12,7 +12,8 @@ RSpec.describe REST::AccountWarningSerializer do
expect(subject)
.to include(
'id' => be_a(String).and(eq('123')),
- 'status_ids' => be_a(Array).and(eq(['456', '789']))
+ 'status_ids' => be_a(Array).and(eq(['456', '789'])),
+ 'created_at' => match_api_datetime_format
)
end
end
diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb
index 58f58a997b..5f617207a7 100644
--- a/spec/serializers/rest/admin/account_serializer_spec.rb
+++ b/spec/serializers/rest/admin/account_serializer_spec.rb
@@ -5,6 +5,17 @@ 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
+ 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..1305f901bb 100644
--- a/spec/serializers/rest/admin/cohort_serializer_spec.rb
+++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb
@@ -11,8 +11,10 @@ RSpec.describe REST::Admin::CohortSerializer do
it 'returns expected values' do
expect(subject)
.to include(
- 'data' => be_a(Array),
- 'period' => /2024-01-01/
+ 'data' => be_a(Array).and(
+ all(include('date' => match_api_datetime_format))
+ ),
+ 'period' => match(/2024-01-01/).and(match_api_datetime_format)
)
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..ace35176a7
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
@@ -0,0 +1,18 @@
+# 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
+ 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..37d658b1f7
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
@@ -0,0 +1,18 @@
+# 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
+ 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..e146040e24
--- /dev/null
+++ b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
@@ -0,0 +1,18 @@
+# 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
+ 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..8a68161fc2
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::IpBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ context 'when timestamps are 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(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format,
+ 'expires_at' => match_api_datetime_format
+ )
+ 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..5aabf74756
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_serializer_spec.rb
@@ -0,0 +1,18 @@
+# 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(subject)
+ .to include(
+ 'used_at' => match_api_datetime_format
+ )
+ 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..e158d9d9ba
--- /dev/null
+++ b/spec/serializers/rest/admin/measure_serializer_spec.rb
@@ -0,0 +1,23 @@
+# 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
+ expect(subject)
+ .to include(
+ 'data' => all(
+ include('date' => match_api_datetime_format)
+ )
+ )
+ 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..78d7d4f10a
--- /dev/null
+++ b/spec/serializers/rest/admin/report_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::ReportSerializer do
+ subject { serialized_record_json(report, described_class) }
+
+ context 'with timestamps' do
+ let(:report) { Fabricate(:report, action_taken_at: 3.days.ago) }
+
+ it 'is serialized as RFC 3339 datetime' do
+ expect(subject)
+ .to include(
+ 'action_taken_at' => match_api_datetime_format,
+ 'created_at' => match_api_datetime_format
+ )
+ 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..ee0acab981
--- /dev/null
+++ b/spec/serializers/rest/announcement_serializer_spec.rb
@@ -0,0 +1,31 @@
+# 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(subject)
+ .to include(
+ 'starts_at' => match_api_datetime_format,
+ 'ends_at' => match_api_datetime_format,
+ 'published_at' => match_api_datetime_format,
+ 'updated_at' => match_api_datetime_format
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/annual_report_event_serializer_spec.rb b/spec/serializers/rest/annual_report_event_serializer_spec.rb
new file mode 100644
index 0000000000..b595bf3e36
--- /dev/null
+++ b/spec/serializers/rest/annual_report_event_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AnnualReportEventSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate.build :generated_annual_report, year: 2024 }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ year: '2024'
+ )
+ 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..4d38a29acb --- /dev/null +++ b/spec/serializers/rest/filter_serializer_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::FilterSerializer do + subject do + serialized_record_json( + filter, + described_class + ) + end + + let(:filter) { Fabricate.build :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(subject) + .to include( + 'expires_at' => match_api_datetime_format + ) + 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..58266319eb --- /dev/null +++ b/spec/serializers/rest/marker_serializer_spec.rb @@ -0,0 +1,23 @@ +# 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(subject) + .to include( + 'updated_at' => match_api_datetime_format + ) + 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..2db3f7be95 --- /dev/null +++ b/spec/serializers/rest/muted_account_serializer_spec.rb @@ -0,0 +1,45 @@ +# 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(subject) + .to include( + 'mute_expires_at' => match_api_datetime_format + ) + 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..01fd8ce0a1 --- /dev/null +++ b/spec/serializers/rest/notification_group_serializer_spec.rb @@ -0,0 +1,23 @@ +# 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(subject) + .to include( + 'latest_page_notification_at' => match_api_datetime_format + ) + 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..6dc4b04f5c --- /dev/null +++ b/spec/serializers/rest/notification_request_serializer_spec.rb @@ -0,0 +1,29 @@ +# 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 timestampts are populated' do + it 'parses as RFC 3339 datetime' do + expect(subject) + .to include( + 'created_at' => match_api_datetime_format, + 'updated_at' => match_api_datetime_format + ) + 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..b833bcb6e1 --- /dev/null +++ b/spec/serializers/rest/notification_serializer_spec.rb @@ -0,0 +1,23 @@ +# 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(subject) + .to include( + 'created_at' => match_api_datetime_format + ) + 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..3837ac1984 --- /dev/null +++ b/spec/serializers/rest/poll_serializer_spec.rb @@ -0,0 +1,28 @@ +# 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.build :poll, expires_at: 5.days.from_now } + + context 'when expires_at is populated' do + it 'parses as RFC 3339 datetime' do + expect(subject) + .to include( + 'expires_at' => match_api_datetime_format + ) + 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..180cdbdb68 --- /dev/null +++ b/spec/serializers/rest/report_serializer_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ReportSerializer do + subject do + serialized_record_json( + report, + described_class + ) + end + + context 'with timestamps' do + let(:report) { Fabricate(:report, action_taken_at: 3.days.ago) } + + it 'is serialized as RFC 3339 datetime' do + expect(subject) + .to include( + 'created_at' => match_api_datetime_format, + 'action_taken_at' => match_api_datetime_format + ) + 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..08ad8a6f8a --- /dev/null +++ b/spec/serializers/rest/scheduled_status_serializer_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ScheduledStatusSerializer do + subject do + serialized_record_json( + scheduled_status, + described_class + ) + end + + let(:scheduled_status) { Fabricate.build(:scheduled_status, scheduled_at: 4.minutes.from_now, params: { application_id: 123 }) } + + describe 'serialization' do + it 'returns expected values and removes application_id from params' do + expect(subject.deep_symbolize_keys) + .to include( + scheduled_at: be_a(String).and(match_api_datetime_format), + params: not_include(:application_id) + ) + 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..95590d1f96 --- /dev/null +++ b/spec/serializers/rest/status_edit_serializer_spec.rb @@ -0,0 +1,23 @@ +# 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(subject) + .to include( + 'created_at' => match_api_datetime_format + ) + end + end +end diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb index e96d1fbe67..b6908aa414 100644 --- a/spec/serializers/rest/status_serializer_spec.rb +++ b/spec/serializers/rest/status_serializer_spec.rb @@ -51,5 +51,25 @@ 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(subject) + .to include( + 'created_at' => match_api_datetime_format + ) + 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(subject) + .to include( + 'edited_at' => match_api_datetime_format + ) + 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 498b3c8aa0..176af7d432 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -32,7 +32,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) @@ -256,16 +256,22 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do updated: '2021-09-08T22:39:25Z', tag: [ { type: 'Hashtag', name: 'foo' }, + { type: 'Hashtag', name: 'bar' }, ], } end before do - subject.call(status, json, json) + status.account.featured_tags.create!(name: 'bar') + status.account.featured_tags.create!(name: 'test') end - it 'updates tags' do - expect(status.tags.reload.map(&:name)).to eq %w(foo) + it 'updates tags and featured tags' do + expect { subject.call(status, json, json) } + .to change { status.tags.reload.pluck(:name) }.from(%w(test foo)).to(%w(foo bar)) + .and change { status.account.featured_tags.find_by(name: 'test').statuses_count }.by(-1) + .and change { status.account.featured_tags.find_by(name: 'bar').statuses_count }.by(1) + .and change { status.account.featured_tags.find_by(name: 'bar').last_status_at }.from(nil).to(be_within(0.1).of(Time.now.utc)) end end @@ -280,7 +286,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 f807536a2e..ca3ee3ccdf 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -46,7 +46,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 7c92adeffd..463605dd22 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -150,6 +150,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/examples/models/concerns/expireable.rb b/spec/support/examples/models/concerns/expireable.rb new file mode 100644 index 0000000000..098b98375a --- /dev/null +++ b/spec/support/examples/models/concerns/expireable.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'Expireable' do + subject { described_class.new(expires_at: expires_at) } + + let(:expires_at) { nil } + + describe 'Scopes' do + let!(:expired_record) do + travel_to 2.days.ago do + Fabricate factory_name, expires_at: 1.day.from_now + end + end + let!(:un_expired_record) { Fabricate factory_name, expires_at: 10.days.from_now } + + describe '.expired' do + it 'returns expired records' do + expect(described_class.expired) + .to include(expired_record) + .and not_include(un_expired_record) + end + end + end + + describe '#expires_in' do + context 'when expires at is nil' do + let(:expires_at) { nil } + + it 'returns nil' do + expect(subject.expires_in) + .to be_nil + end + end + end + + describe '#expires_in=' do + let(:record) { Fabricate.build factory_name } + + context 'when set to nil' do + it 'sets expires_at to nil' do + record.expires_in = nil + expect(record.expires_at) + .to be_nil + end + end + + context 'when set to empty' do + it 'sets expires_at to nil' do + record.expires_in = '' + expect(record.expires_at) + .to be_nil + end + end + + context 'when set to a value' do + it 'sets expires_at to expected future time' do + record.expires_in = 60 + expect(record.expires_at) + .to be_within(0.1).of(60.seconds.from_now) + end + end + end + + describe '#expired?' do + context 'when expires_at is nil' do + let(:expires_at) { nil } + + it { is_expected.to_not be_expired } + end + + context 'when expires_at is in the past' do + let(:expires_at) { 5.days.ago } + + it { is_expected.to be_expired } + end + + context 'when expires_at is in the future' do + let(:expires_at) { 5.days.from_now } + + it { is_expected.to_not be_expired } + end + + describe '#expire!' do + subject { Fabricate factory_name } + + it 'updates the timestamp' do + expect { subject.expire! } + .to change(subject, :expires_at) + end + end + + describe '#expires?' do + context 'when value is missing' do + let(:expires_at) { nil } + + it { is_expected.to_not be_expires } + end + + context 'when value is present' do + let(:expires_at) { 3.days.from_now } + + it { is_expected.to be_expires } + end + end + end + + def factory_name + described_class.name.underscore.to_sym + end +end diff --git a/spec/support/matchers/api_datetime_format.rb b/spec/support/matchers/api_datetime_format.rb new file mode 100644 index 0000000000..d19c909438 --- /dev/null +++ b/spec/support/matchers/api_datetime_format.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +RSpec::Matchers.define :match_api_datetime_format do + match(notify_expectation_failures: true) do |value| + expect { DateTime.rfc3339(value) } + .to_not raise_error + 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/account_moderation_notes_spec.rb b/spec/system/admin/account_moderation_notes_spec.rb new file mode 100644 index 0000000000..5d195143c2 --- /dev/null +++ b/spec/system/admin/account_moderation_notes_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin::AccountModerationNotes' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:target_account) { Fabricate(:account) } + + before { sign_in current_user } + + describe 'Managing account moderation note' do + it 'saves and then deletes a record' do + visit admin_account_path(target_account.id) + + fill_in 'account_moderation_note_content', with: '' + expect { submit_form } + .to not_change(AccountModerationNote, :count) + expect(page) + .to have_content(/error below/) + + fill_in 'account_moderation_note_content', with: 'Test message' + expect { submit_form } + .to change(AccountModerationNote, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.account_moderation_notes.created_msg')) + + expect { delete_note } + .to change(AccountModerationNote, :count).by(-1) + expect(page) + .to have_content(I18n.t('admin.account_moderation_notes.destroyed_msg')) + end + + def submit_form + click_on I18n.t('admin.account_moderation_notes.create') + end + + def delete_note + within('.report-notes__item__actions') do + click_on I18n.t('admin.reports.notes.delete') + end + end + end +end diff --git a/spec/system/admin/custom_emojis_spec.rb b/spec/system/admin/custom_emojis_spec.rb index e47f21f8a9..d597e30313 100644 --- a/spec/system/admin/custom_emojis_spec.rb +++ b/spec/system/admin/custom_emojis_spec.rb @@ -5,8 +5,43 @@ require 'rails_helper' RSpec.describe 'Admin::CustomEmojis' do let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - before do - sign_in current_user + before { sign_in current_user } + + describe 'Listing existing emoji' do + let!(:custom_emoji) { Fabricate :custom_emoji } + + it 'Shows records' do + visit admin_custom_emojis_path + + expect(page) + .to have_content(I18n.t('admin.custom_emojis.title')) + .and have_content(custom_emoji.shortcode) + end + end + + describe 'Creating a new emoji' do + it 'saves a new emoji record with valid attributes' do + visit new_admin_custom_emoji_path + expect(page) + .to have_content(I18n.t('admin.custom_emojis.title')) + + expect { submit_form } + .to_not change(CustomEmoji, :count) + expect(page) + .to have_content(/errors below/) + + fill_in I18n.t('admin.custom_emojis.shortcode'), + with: 'test' + attach_file 'custom_emoji_image', + Rails.root.join('spec', 'fixtures', 'files', 'emojo.png') + + expect { submit_form } + .to change(CustomEmoji, :count).by(1) + end + + def submit_form + click_on I18n.t('admin.custom_emojis.upload') + end end describe 'Performing batch updates' do diff --git a/spec/system/admin/domain_allows_spec.rb b/spec/system/admin/domain_allows_spec.rb new file mode 100644 index 0000000000..1c462ff7cc --- /dev/null +++ b/spec/system/admin/domain_allows_spec.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin::DomainAllows' do + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:domain) { 'host.example' } + + before do + Fabricate :account, domain: domain + Instance.refresh + sign_in user + end + + around do |example| + original = Rails.configuration.x.limited_federation_mode + Rails.configuration.x.limited_federation_mode = true + + example.run + + Rails.configuration.x.limited_federation_mode = original + end + + describe 'Managing domain allows' do + it 'saves and then deletes a record' do + # Visit new page + visit new_admin_domain_allow_path + click_on I18n.t('admin.domain_allows.add_new') + expect(page) + .to have_content(I18n.t('admin.domain_allows.add_new')) + + # Submit invalid with missing domain + fill_in 'domain_allow_domain', with: '' + expect { submit_form } + .to not_change(DomainAllow, :count) + expect(page) + .to have_content(/error below/) + + # Submit valid with domain present + fill_in 'domain_allow_domain', with: domain + expect { submit_form } + .to change(DomainAllow, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.domain_allows.created_msg')) + + # Visit instance page and delete the domain allow + visit admin_instance_path(domain) + expect { delete_domain_allow } + .to change(DomainAllow, :count).by(-1) + expect(page) + .to have_content(I18n.t('admin.domain_allows.destroyed_msg')) + end + + def submit_form + click_on I18n.t('admin.domain_allows.add_new') + end + + def delete_domain_allow + click_on I18n.t('admin.domain_allows.undo') + end + end +end diff --git a/spec/system/admin/ip_blocks_spec.rb b/spec/system/admin/ip_blocks_spec.rb index 9c03520277..c101b8e1c6 100644 --- a/spec/system/admin/ip_blocks_spec.rb +++ b/spec/system/admin/ip_blocks_spec.rb @@ -5,20 +5,46 @@ require 'rails_helper' RSpec.describe 'Admin::IpBlocks' do let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - before do - sign_in current_user + before { sign_in current_user } + + describe 'Creating an IP Block' do + it 'lists blocks and creates new ones' do + # Visit index page + visit admin_ip_blocks_path + expect(page) + .to have_content(I18n.t('admin.ip_blocks.title')) + + # Navigate to new + click_on I18n.t('admin.ip_blocks.add_new') + + # Invalid with missing IP + fill_in 'ip_block_ip', with: '' + expect { submit_form } + .to_not change(IpBlock, :count) + expect(page) + .to have_content(/error below/) + + # Valid with IP + fill_in 'ip_block_ip', with: '192.168.1.1' + expect { submit_form } + .to change(IpBlock, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.ip_blocks.created_msg')) + end + + def submit_form + click_on I18n.t('admin.ip_blocks.add_new') + end end describe 'Performing batch updates' do - before do - visit admin_ip_blocks_path - end - context 'without selecting any records' do it 'displays a notice about selection' do - click_on button_for_delete + visit admin_ip_blocks_path - expect(page).to have_content(selection_error_text) + click_on button_for_delete + expect(page) + .to have_content(selection_error_text) 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/admin/webhooks_spec.rb b/spec/system/admin/webhooks_spec.rb new file mode 100644 index 0000000000..69e8a7d69f --- /dev/null +++ b/spec/system/admin/webhooks_spec.rb @@ -0,0 +1,117 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Webhooks' do + describe 'Managing webhooks' do + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + describe 'Viewing webhooks' do + let!(:webhook) { Fabricate :webhook } + + it 'lists existing records' do + visit admin_webhooks_path + + expect(page) + .to have_content(I18n.t('admin.webhooks.title')) + .and have_content(webhook.url) + + click_on(webhook.url) + expect(page) + .to have_content(I18n.t('admin.webhooks.title')) + end + end + + describe 'Creating a new webhook' do + it 'creates new record with valid attributes' do + visit admin_webhooks_path + + # Visit new page + click_on I18n.t('admin.webhooks.add_new') + expect(page) + .to have_content(I18n.t('admin.webhooks.new')) + + # Invalid submission (missing url, no events selected) + fill_in 'webhook_url', with: '' + expect { submit_form } + .to_not change(Webhook, :count) + expect(page) + .to have_content(/errors below/) + + # Valid submission + fill_in 'webhook_url', with: 'https://host.example/hooks/123' + check Webhook::EVENTS.first + expect { submit_form } + .to change(Webhook, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.webhooks.title')) + end + + it 'fails to create with no events selected' do + visit new_admin_webhook_path + + fill_in 'webhook_url', with: 'https://host.example/hooks/123' + expect { submit_form } + .to_not change(Webhook, :count) + expect(page) + .to have_content(/errors below/) + end + + def submit_form + click_on I18n.t('admin.webhooks.add_new') + end + end + + describe 'Editing an existing webhook' do + let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first] } + + it 'updates with valid attributes' do + visit admin_webhook_path(webhook) + + # Invalid submission (missing url) + click_on I18n.t('admin.webhooks.edit') + fill_in 'webhook_url', with: '' + expect { submit_form } + .to_not change(webhook.reload, :updated_at) + + # Valid update + fill_in 'webhook_url', with: 'https://host.example/new/value/123' + expect { submit_form } + .to_not change(webhook.reload, :url) + end + + def submit_form + click_on I18n.t('generic.save_changes') + end + end + + describe 'Destroy a webhook' do + let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first] } + + it 'removes the record' do + visit admin_webhooks_path + + expect { click_on I18n.t('admin.webhooks.delete') } + .to change(Webhook, :count).by(-1) + expect { webhook.reload } + .to raise_error(ActiveRecord::RecordNotFound) + end + end + + describe 'Toggle state of webhook' do + let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first], enabled: true } + + it 'switches enabled and disabled as requested' do + visit admin_webhook_path(webhook) + + # Disable the initially enabled record + expect { click_on I18n.t('admin.webhooks.disable') } + .to change { webhook.reload.enabled? }.to(false) + + # Re-enable the record + expect { click_on I18n.t('admin.webhooks.enable') } + .to change { webhook.reload.enabled? }.to(true) + end + end + end +end diff --git a/spec/system/filters_spec.rb b/spec/system/filters_spec.rb index 64de384c00..e681c6940e 100644 --- a/spec/system/filters_spec.rb +++ b/spec/system/filters_spec.rb @@ -8,6 +8,18 @@ RSpec.describe 'Filters' do before { sign_in(user) } + describe 'Viewing existing filters' do + before { Fabricate :custom_filter, account: user.account, phrase: 'Photography' } + + it 'shows a list of user filters' do + visit filters_path + + expect(page) + .to have_content('Photography') + .and have_private_cache_control + end + end + describe 'Creating a filter' do it 'Populates a new filter from form' do navigate_to_filters @@ -16,12 +28,22 @@ RSpec.describe 'Filters' do fill_in_filter_form expect(page).to have_content(filter_title) end + + it 'Does not save with invalid values' do + navigate_to_filters + click_on I18n.t('filters.new.title') + + expect { click_on I18n.t('filters.new.save') } + .to_not change(CustomFilter, :count) + expect(page) + .to have_content("can't be blank") + end end describe 'Editing an existing filter' do let(:new_title) { 'Change title value' } - before { Fabricate :custom_filter, account: user.account, title: filter_title } + let!(:custom_filter) { Fabricate :custom_filter, account: user.account, title: filter_title } it 'Updates the saved filter' do navigate_to_filters @@ -33,6 +55,18 @@ RSpec.describe 'Filters' do expect(page).to have_content(new_title) end + + it 'Does not save with invalid values' do + navigate_to_filters + click_on filter_title + + fill_in filter_title_field, with: '' + + expect { click_on submit_button } + .to_not(change { custom_filter.reload.updated_at }) + expect(page) + .to have_content("can't be blank") + end end describe 'Destroying an existing filter' do 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/login_activities_spec.rb b/spec/system/settings/login_activities_spec.rb new file mode 100644 index 0000000000..ff89c3f37e --- /dev/null +++ b/spec/system/settings/login_activities_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Login activities page' do + let!(:user) { Fabricate :user } + let!(:login_activity) { Fabricate :login_activity, user: user } + + context 'when signed in' do + before { sign_in user } + + describe 'Viewing the login activities page' do + it 'shows the login activity history' do + visit edit_user_registration_path + + click_on I18n.t('sessions.view_authentication_history') + + expect(page) + .to have_content(browser_description) + .and have_content(login_activity.authentication_method) + .and have_content(login_activity.ip) + .and have_private_cache_control + end + + def browser_description + I18n.t( + 'sessions.description', + browser: I18n.t("sessions.browsers.#{login_activity.browser}", default: login_activity.browser), + platform: I18n.t("sessions.platforms.#{login_activity.platform}", default: login_activity.platform) + ) + end + end + end +end diff --git a/spec/system/settings/preferences/appearance_spec.rb b/spec/system/settings/preferences/appearance_spec.rb new file mode 100644 index 0000000000..0b6f1e4b15 --- /dev/null +++ b/spec/system/settings/preferences/appearance_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings preferences appearance page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + it 'Views and updates user prefs' do + visit settings_preferences_appearance_path + + expect(page) + .to have_private_cache_control + + select 'contrast', from: theme_selection_field + check confirm_reblog_field + uncheck confirm_delete_field + + expect { save_changes } + .to change { user.reload.settings.theme }.to('contrast') + .and change { user.reload.settings['web.reblog_modal'] }.to(true) + .and(change { user.reload.settings['web.delete_modal'] }.to(false)) + expect(page) + .to have_title(I18n.t('settings.appearance')) + end + + def save_changes + within('form') { click_on submit_button } + end + + def confirm_delete_field + I18n.t('simple_form.labels.defaults.setting_delete_modal') + end + + def confirm_reblog_field + I18n.t('simple_form.labels.defaults.setting_boost_modal') + end + + def theme_selection_field + I18n.t('simple_form.labels.defaults.setting_theme') + end +end diff --git a/spec/system/settings/preferences/notifications_spec.rb b/spec/system/settings/preferences/notifications_spec.rb new file mode 100644 index 0000000000..20ff549222 --- /dev/null +++ b/spec/system/settings/preferences/notifications_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings preferences notifications page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + it 'Views and updates user prefs' do + visit settings_preferences_notifications_path + + expect(page) + .to have_private_cache_control + + uncheck notifications_follow_field + + expect { click_on submit_button } + .to change { user.reload.settings['notification_emails.follow'] }.to(false) + expect(page) + .to have_title(I18n.t('settings.notifications')) + end + + def notifications_follow_field + I18n.t('simple_form.labels.notification_emails.follow') + end +end diff --git a/spec/system/settings/preferences/other_spec.rb b/spec/system/settings/preferences/other_spec.rb new file mode 100644 index 0000000000..7cc15f87a4 --- /dev/null +++ b/spec/system/settings/preferences/other_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings preferences other page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + it 'Views and updates user prefs' do + visit settings_preferences_other_path + + expect(page) + .to have_private_cache_control + + check language_field(:es) + check language_field(:fr) + check mark_sensitive_field + + expect { save_changes } + .to change { user.reload.chosen_languages }.to(%w(es fr)) + .and(change { user.reload.settings.default_sensitive }.to(true)) + expect(page) + .to have_title(I18n.t('settings.preferences')) + end + + def save_changes + within('form') { click_on submit_button } + end + + def mark_sensitive_field + I18n.t('simple_form.labels.defaults.setting_default_sensitive') + end + + def language_field(key) + LanguagesHelper::SUPPORTED_LOCALES[key].last + end +end diff --git a/spec/system/settings/profiles_spec.rb b/spec/system/settings/profiles_spec.rb new file mode 100644 index 0000000000..73a5751141 --- /dev/null +++ b/spec/system/settings/profiles_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings profile page' do + let(:user) { Fabricate :user } + let(:account) { user.account } + + before do + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + sign_in user + end + + it 'Views and updates profile information' do + visit settings_profile_path + + expect(page) + .to have_private_cache_control + + fill_in display_name_field, with: 'New name' + attach_file avatar_field, Rails.root.join('spec', 'fixtures', 'files', 'avatar.gif') + + expect { click_on submit_button } + .to change { account.reload.display_name }.to('New name') + .and(change { account.reload.avatar.instance.avatar_file_name }.from(nil).to(be_present)) + expect(ActivityPub::UpdateDistributionWorker) + .to have_received(:perform_async).with(account.id) + end + + def display_name_field + I18n.t('simple_form.labels.defaults.display_name') + end + + def avatar_field + I18n.t('simple_form.labels.defaults.avatar') + end +end diff --git a/spec/system/settings/verifications_spec.rb b/spec/system/settings/verifications_spec.rb new file mode 100644 index 0000000000..a4a9a38b80 --- /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 }) + 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') + end +end diff --git a/spec/system/statuses_cleanup_spec.rb b/spec/system/statuses_cleanup_spec.rb new file mode 100644 index 0000000000..524f710af7 --- /dev/null +++ b/spec/system/statuses_cleanup_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Automated post deletion settings' do + let(:user) { Fabricate :user } + let(:account) { user.account } + + describe 'Updating settings' do + before { sign_in user } + + it 'visits the page and updates the policy' do + visit statuses_cleanup_path + expect(page) + .to have_private_cache_control + + check I18n.t('statuses_cleanup.enabled') + submit_form + expect(account.reload.statuses_cleanup_policy) + .to be_enabled + + uncheck I18n.t('statuses_cleanup.keep_pinned') + expect { submit_form } + .to change { account.reload.statuses_cleanup_policy.keep_pinned? }.to(false) + expect(page) + .to have_content(I18n.t('settings.statuses_cleanup')) + end + + def submit_form + click_on submit_button + end + 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 f1ba5a5379..fe8446eb4d 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 @@ -2823,6 +2832,7 @@ __metadata: "@babel/preset-react": "npm:^7.22.3" "@babel/preset-typescript": "npm:^7.21.5" "@babel/runtime": "npm:^7.22.3" + "@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" @@ -2830,7 +2840,7 @@ __metadata: "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" - "@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" @@ -2951,9 +2961,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" @@ -3273,10 +3283,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 @@ -3611,22 +3621,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 @@ -4248,10 +4258,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 @@ -6720,16 +6730,16 @@ __metadata: languageName: node linkType: hard -"css-has-pseudo@npm:^7.0.1": - version: 7.0.1 - resolution: "css-has-pseudo@npm:7.0.1" +"css-has-pseudo@npm:^7.0.2": + version: 7.0.2 + resolution: "css-has-pseudo@npm:7.0.2" dependencies: "@csstools/selector-specificity": "npm:^5.0.0" postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/13789b08b70169204be786d652190356ace9313099d3656bd2fc38afbdd28f3d9620f0e0b07425480961b7a1ec789794961d0472f205b959d3f64c9a78ce511c + checksum: 10c0/456e9ce1eec8a535683c329956acfe53ce5a208345d7f2fcbe662626be8b3c98681e9041d7f4980316714397b0c1c3defde25653d629c396df17803d599c4edf languageName: node linkType: hard @@ -6865,10 +6875,10 @@ __metadata: languageName: node linkType: hard -"cssdb@npm:^8.2.1": - version: 8.2.1 - resolution: "cssdb@npm:8.2.1" - checksum: 10c0/d27d7db0a39e1105181aac119a98d6c92cd5ceba2e8bd349cdf2ba4a8d9ead149b685a1dba9542ca24f094cc70eca4a3e02973fe1f74c11a373b508606e5e1c0 +"cssdb@npm:^8.2.3": + version: 8.2.3 + resolution: "cssdb@npm:8.2.3" + checksum: 10c0/17c3ca6432ed02431db6b44bed74649ccef7d7b7b900ccbc7297525f030722c441dd67c71f28aef3cfa0814ba7b254a24adfb0dcd5728937da179ff437cdcd0c languageName: node linkType: hard @@ -7083,15 +7093,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.3.6": - version: 4.3.7 - resolution: "debug@npm:4.3.7" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" dependencies: ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de languageName: node linkType: hard @@ -9930,8 +9940,8 @@ __metadata: linkType: hard "ioredis@npm:^5.3.2": - version: 5.4.1 - resolution: "ioredis@npm:5.4.1" + version: 5.4.2 + resolution: "ioredis@npm:5.4.2" dependencies: "@ioredis/commands": "npm:^1.1.1" cluster-key-slot: "npm:^1.1.0" @@ -9942,7 +9952,7 @@ __metadata: redis-errors: "npm:^1.2.0" redis-parser: "npm:^3.0.0" standard-as-callback: "npm:^2.1.0" - checksum: 10c0/5d28b7c89a3cab5b76d75923d7d4ce79172b3a1ca9be690133f6e8e393a7a4b4ffd55513e618bbb5504fed80d9e1395c9d9531a7c5c5c84aa4c4e765cca75456 + checksum: 10c0/e59d2cceb43ed74b487d7b50fa91b93246e734e5d4835c7e62f64e44da072f12ab43b044248012e6f8b76c61a7c091a2388caad50e8ad69a8ce5515a730b23b8 languageName: node linkType: hard @@ -11449,13 +11459,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" @@ -11496,10 +11499,10 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^3.1.2, lilconfig@npm:~3.1.2": - version: 3.1.2 - resolution: "lilconfig@npm:3.1.2" - checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe +"lilconfig@npm:^3.1.2, lilconfig@npm:~3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc languageName: node linkType: hard @@ -11511,28 +11514,28 @@ __metadata: linkType: hard "lint-staged@npm:^15.0.0": - version: 15.2.10 - resolution: "lint-staged@npm:15.2.10" + version: 15.2.11 + resolution: "lint-staged@npm:15.2.11" dependencies: chalk: "npm:~5.3.0" commander: "npm:~12.1.0" - debug: "npm:~4.3.6" + debug: "npm:~4.4.0" execa: "npm:~8.0.1" - lilconfig: "npm:~3.1.2" - listr2: "npm:~8.2.4" + lilconfig: "npm:~3.1.3" + listr2: "npm:~8.2.5" micromatch: "npm:~4.0.8" pidtree: "npm:~0.6.0" string-argv: "npm:~0.3.2" - yaml: "npm:~2.5.0" + yaml: "npm:~2.6.1" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/6ad7b41f5e87a84fa2eb1990080ea3c68a2f2031b4e81edcdc2a458cc878538eedb310e6f98ffd878a1287e1a52ac968e540ee8a0e96c247e04b0cbc36421cdd + checksum: 10c0/28e2ad08b90460cc18398a023eaf93954d7753f958c2b889ead2d9305407d7b4ef0ee007875410d6ce1df758007fda77e079c82eb79c9ce684fba71e6f7d0452 languageName: node linkType: hard -"listr2@npm:~8.2.4": - version: 8.2.4 - resolution: "listr2@npm:8.2.4" +"listr2@npm:~8.2.5": + version: 8.2.5 + resolution: "listr2@npm:8.2.5" dependencies: cli-truncate: "npm:^4.0.0" colorette: "npm:^2.0.20" @@ -11540,7 +11543,7 @@ __metadata: log-update: "npm:^6.1.0" rfdc: "npm:^1.4.1" wrap-ansi: "npm:^9.0.0" - checksum: 10c0/df5b129e9767de1997973cec6103cd4bd6fc3b3367685b7c23048d12b61d5b7e44fecd8a3d3534c0e1c963bd5ac43ca501d14712f46fa101050037be323a5c16 + checksum: 10c0/f5a9599514b00c27d7eb32d1117c83c61394b2a985ec20e542c798bf91cf42b19340215701522736f5b7b42f557e544afeadec47866e35e5d4f268f552729671 languageName: node linkType: hard @@ -11920,6 +11923,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" @@ -14000,8 +14010,8 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.1.1 - resolution: "postcss-preset-env@npm:10.1.1" + version: 10.1.2 + resolution: "postcss-preset-env@npm:10.1.2" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.1" "@csstools/postcss-color-function": "npm:^4.0.6" @@ -14038,9 +14048,9 @@ __metadata: autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" css-blank-pseudo: "npm:^7.0.1" - css-has-pseudo: "npm:^7.0.1" + css-has-pseudo: "npm:^7.0.2" css-prefers-color-scheme: "npm:^10.0.0" - cssdb: "npm:^8.2.1" + cssdb: "npm:^8.2.3" postcss-attribute-case-insensitive: "npm:^7.0.1" postcss-clamp: "npm:^4.1.0" postcss-color-functional-notation: "npm:^7.0.6" @@ -14068,7 +14078,7 @@ __metadata: postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/99931117735a66827c7318be023ddb614990457617ccbe7fd2fdc1f10345554652df180d4842768d68d57e14fc0be4d86d0b413c65e77e02db5511e57ed07c4f + checksum: 10c0/bd40330867a525679d434ff9602efbf229da9e745a3759c2d0b3cff166dd0f17bf99b44673ebb316df1906c2bf2edef97aeef1840aa6be170b43a34404df396d languageName: node linkType: hard @@ -14115,7 +14125,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 @@ -14151,7 +14161,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: @@ -14287,11 +14297,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 @@ -14762,21 +14772,21 @@ __metadata: linkType: hard "react-redux@npm:^9.0.4": - 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 @@ -14832,8 +14842,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" @@ -14843,11 +14853,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 @@ -14937,15 +14947,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 @@ -15618,8 +15628,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" @@ -15630,7 +15640,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/7f86fe6ade4f6018862c448ed69d5c52f485b0125c9dab24e63f679739a04cc7c56562d588e3cf16b5efb4d2c4d0530e62740e1cfd273e2e3707d04d11011736 + checksum: 10c0/4415361229879a9041d77c953da85482e89032aa4321ba13250a9987d39c80fac6c88af3777f2a2d76a4e8b0c8afbd21c1970fdbe84e0b3ec25fb26741f92beb languageName: node linkType: hard @@ -16726,77 +16736,80 @@ __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": - version: 16.11.0 - resolution: "stylelint@npm:16.11.0" +"stylelint@npm:^16.11.0": + version: 16.12.0 + resolution: "stylelint@npm:16.12.0" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.4" "@csstools/css-tokenizer": "npm:^3.0.3" @@ -16834,11 +16847,11 @@ __metadata: string-width: "npm:^4.2.3" supports-hyperlinks: "npm:^3.1.0" svg-tags: "npm:^1.0.0" - table: "npm:^6.8.2" + table: "npm:^6.9.0" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/65638247fb4e5eacb032e3a98412a13ad8b343d2d58e22d61b96ada72808b5b7e736c845937b3bcfde04c0bfa2120383b507e530afe876dafe824a93c337258f + checksum: 10c0/d60bc6136f5bdc4e49ec22aee4d82130c4e9c94aa7d249da9dda315a862615e74acaefb24c560529b2102f8c27dde473b148ffcee861f5dab7b0225254765102 languageName: node linkType: hard @@ -16980,16 +16993,16 @@ __metadata: languageName: node linkType: hard -"table@npm:^6.8.2": - version: 6.8.2 - resolution: "table@npm:6.8.2" +"table@npm:^6.9.0": + version: 6.9.0 + resolution: "table@npm:6.9.0" dependencies: ajv: "npm:^8.0.1" lodash.truncate: "npm:^4.4.2" slice-ansi: "npm:^4.0.0" string-width: "npm:^4.2.3" strip-ansi: "npm:^6.0.1" - checksum: 10c0/f8b348af38ee34e419d8ce7306ba00671ce6f20e861ccff22555f491ba264e8416086063ce278a8d81abfa8d23b736ec2cca7ac4029b5472f63daa4b4688b803 + checksum: 10c0/35646185712bb65985fbae5975dda46696325844b78735f95faefae83e86df0a265277819a3e67d189de6e858c509b54e66ca3958ffd51bde56ef1118d455bf4 languageName: node linkType: hard @@ -17738,15 +17751,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 @@ -17764,12 +17777,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 @@ -18778,12 +18791,12 @@ __metadata: languageName: node linkType: hard -"yaml@npm:~2.5.0": - version: 2.5.0 - resolution: "yaml@npm:2.5.0" +"yaml@npm:~2.6.1": + version: 2.6.1 + resolution: "yaml@npm:2.6.1" bin: yaml: bin.mjs - checksum: 10c0/771a1df083c8217cf04ef49f87244ae2dd7d7457094425e793b8f056159f167602ce172aa32d6bca21f787d24ec724aee3cecde938f6643564117bd151452631 + checksum: 10c0/aebf07f61c72b38c74d2b60c3a3ccf89ee4da45bcd94b2bfb7899ba07a5257625a7c9f717c65a6fc511563d48001e01deb1d9e55f0133f3e2edf86039c8c1be7 languageName: node linkType: hard