diff --git a/.eslintrc.js b/.eslintrc.js index 93ff1d7b59..480b274fad 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -109,7 +109,7 @@ module.exports = defineConfig({ 'react/jsx-equals-spacing': 'error', 'react/jsx-no-bind': 'error', 'react/jsx-no-useless-fragment': 'error', - 'react/jsx-no-target-blank': 'off', + 'react/jsx-no-target-blank': ['error', { allowReferrer: true }], 'react/jsx-tag-spacing': 'error', 'react/jsx-uses-react': 'off', // not needed with new JSX transform 'react/jsx-wrap-multilines': 'error', diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml index f379c56112..ffab4880e1 100644 --- a/.github/workflows/lint-css.yml +++ b/.github/workflows/lint-css.yml @@ -43,4 +43,4 @@ jobs: uses: ./.github/actions/setup-javascript - name: Stylelint - run: yarn lint:css -f github + run: yarn lint:css --custom-formatter @csstools/stylelint-formatter-github diff --git a/.rubocop/style.yml b/.rubocop/style.yml index 03e35a70ac..7dd4299c3e 100644 --- a/.rubocop/style.yml +++ b/.rubocop/style.yml @@ -1,4 +1,7 @@ --- +Style/ArrayIntersect: + Enabled: false + Style/ClassAndModuleChildren: Enabled: false @@ -19,6 +22,16 @@ Style/HashSyntax: EnforcedShorthandSyntax: either EnforcedStyle: ruby19_no_mixed_keys +Style/IfUnlessModifier: + Exclude: + - '**/*.haml' + +Style/KeywordArgumentsMerging: + Enabled: false + +Style/MultipleComparison: + Enabled: false + Style/NumericLiterals: AllowedPatterns: - \d{4}_\d{2}_\d{2}_\d{6} @@ -37,6 +50,9 @@ Style/RedundantFetchBlock: Style/RescueStandardError: EnforcedStyle: implicit +Style/SafeNavigationChainLength: + Enabled: false + Style/SymbolArray: Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index cd5d365c67..d128d3f679 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp` -# using RuboCop version 1.66.1. +# using RuboCop version 1.69.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -39,7 +39,6 @@ Rails/OutputSafety: # Configuration parameters: AllowedVars. Style/FetchEnvVar: Exclude: - - 'app/lib/translation_service.rb' - 'config/environments/production.rb' - 'config/initializers/2_limited_federation_mode.rb' - 'config/initializers/3_omniauth.rb' diff --git a/CHANGELOG.md b/CHANGELOG.md index ebc166a48a..743cc36ef5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,48 @@ All notable changes to this project will be documented in this file. +## [4.3.2] - 2024-12-03 + +### Added + +- Add `tootctl feeds vacuum` (#33065 by @ClearlyClaire) +- Add error message when user tries to follow their own account (#31910 by @lenikadali) +- Add client_secret_expires_at to OAuth Applications (#30317 by @ThisIsMissEm) + +### Changed + +- Change design of Content Warnings and filters (#32543 by @ClearlyClaire) + +### Fixed + +- Fix processing incoming post edits with mentions to unresolvable accounts (#33129 by @ClearlyClaire) +- Fix error when including multiple instances of `embed.js` (#33107 by @YKWeyer) +- Fix inactive users' timelines being backfilled on follow and unsuspend (#33094 by @ClearlyClaire) +- Fix direct inbox delivery pushing posts into inactive followers' timelines (#33067 by @ClearlyClaire) +- Fix `TagFollow` records not being correctly handled in account operations (#33063 by @ClearlyClaire) +- Fix pushing hashtag-followed posts to feeds of inactive users (#33018 by @Gargron) +- Fix duplicate notifications in notification groups when using slow mode (#33014 by @ClearlyClaire) +- Fix posts made in the future being allowed to trend (#32996 by @ClearlyClaire) +- Fix uploading higher-than-wide GIF profile picture with libvips enabled (#32911 by @ClearlyClaire) +- Fix domain attribution field having autocorrect and autocapitalize enabled (#32903 by @ClearlyClaire) +- Fix titles being escaped twice (#32889 by @ClearlyClaire) +- Fix list creation limit check (#32869 by @ClearlyClaire) +- Fix error in `tootctl email_domain_blocks` when supplying `--with-dns-records` (#32863 by @mjankowski) +- Fix `min_id` and `max_id` causing error in search API (#32857 by @Gargron) +- Fix inefficiencies when processing removal of posts that use featured tags (#32787 by @ClearlyClaire) +- Fix alt-text pop-in not using the translated description (#32766 by @ClearlyClaire) +- Fix preview cards with long titles erroneously causing layout changes (#32678 by @ClearlyClaire) +- Fix embed modal layout on mobile (#32641 by @DismalShadowX) +- Fix and improve batch attachment deletion handling when using OpenStack Swift (#32637 by @hugogameiro) +- Fix blocks not being applied on link timeline (#32625 by @tribela) +- Fix follow counters being incorrectly changed (#32622 by @oneiros) +- Fix 'unknown' media attachment type rendering (#32613 and #32713 by @ThisIsMissEm and @renatolond) +- Fix tl language native name (#32606 by @seav) + +### Security + +- Update dependencies + ## [4.3.1] - 2024-10-21 ### Added diff --git a/Gemfile.lock b/Gemfile.lock index 8cbceae214..6d125f4a96 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,29 +10,29 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.2.2) - actionpack (= 7.2.2) - activesupport (= 7.2.2) + actioncable (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.2.2) - actionpack (= 7.2.2) - activejob (= 7.2.2) - activerecord (= 7.2.2) - activestorage (= 7.2.2) - activesupport (= 7.2.2) + actionmailbox (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) mail (>= 2.8.0) - actionmailer (7.2.2) - actionpack (= 7.2.2) - actionview (= 7.2.2) - activejob (= 7.2.2) - activesupport (= 7.2.2) + actionmailer (7.2.2.1) + actionpack (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activesupport (= 7.2.2.1) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.2) - actionview (= 7.2.2) - activesupport (= 7.2.2) + actionpack (7.2.2.1) + actionview (= 7.2.2.1) + activesupport (= 7.2.2.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4, < 3.2) @@ -41,15 +41,15 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (7.2.2) - actionpack (= 7.2.2) - activerecord (= 7.2.2) - activestorage (= 7.2.2) - activesupport (= 7.2.2) + actiontext (7.2.2.1) + actionpack (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.2.2) - activesupport (= 7.2.2) + actionview (7.2.2.1) + activesupport (= 7.2.2.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -59,22 +59,22 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.2.2) - activesupport (= 7.2.2) + activejob (7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.3.6) - activemodel (7.2.2) - activesupport (= 7.2.2) - activerecord (7.2.2) - activemodel (= 7.2.2) - activesupport (= 7.2.2) + activemodel (7.2.2.1) + activesupport (= 7.2.2.1) + activerecord (7.2.2.1) + activemodel (= 7.2.2.1) + activesupport (= 7.2.2.1) timeout (>= 0.4.0) - activestorage (7.2.2) - actionpack (= 7.2.2) - activejob (= 7.2.2) - activerecord (= 7.2.2) - activesupport (= 7.2.2) + activestorage (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activesupport (= 7.2.2.1) marcel (~> 1.0) - activesupport (7.2.2) + activesupport (7.2.2.1) base64 benchmark (>= 0.3) bigdecimal @@ -103,7 +103,7 @@ GEM aws-sdk-kms (1.96.0) aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.176.0) + aws-sdk-s3 (1.176.1) aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -175,7 +175,7 @@ GEM activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.4.0) + date (3.4.1) debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) @@ -199,9 +199,9 @@ GEM activerecord (>= 4.2, < 9.0) docile (1.4.1) domain_name (0.6.20240107) - doorkeeper (5.8.0) + doorkeeper (5.8.1) railties (>= 5) - dotenv (3.1.4) + dotenv (3.1.5) drb (2.2.1) elasticsearch (7.17.11) elasticsearch-api (= 7.17.11) @@ -319,7 +319,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.7.2) - irb (1.14.1) + irb (1.14.2) rdoc (>= 4.0.0) reline (>= 0.4.2) jd-paperclip-azure (3.0.0) @@ -327,7 +327,7 @@ GEM azure-blob (~> 0.5.2) hashie (~> 5.0) jmespath (1.6.2) - json (2.8.1) + json (2.9.0) json-canonicalization (1.0.0) json-jwt (1.15.3.1) activesupport (>= 4.2) @@ -384,7 +384,7 @@ GEM llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - logger (1.6.1) + logger (1.6.2) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -409,7 +409,7 @@ GEM mime-types-data (3.2024.1105) mini_mime (1.1.5) mini_portile2 (2.8.8) - minitest (5.25.2) + minitest (5.25.4) msgpack (1.7.5) multi_json (1.15.0) mutex_m (0.3.0) @@ -426,7 +426,7 @@ GEM net-smtp (0.5.0) net-protocol nio4r (2.7.4) - nokogiri (1.16.8) + nokogiri (1.17.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.7) @@ -579,7 +579,8 @@ GEM activesupport (>= 7.0.0) rack railties (>= 7.0.0) - psych (5.2.0) + psych (5.2.1) + date stringio public_suffix (6.0.1) puma (6.5.0) @@ -608,23 +609,23 @@ GEM rack (< 3) rack-test (2.1.0) rack (>= 1.3) - rackup (1.0.0) + rackup (1.0.1) rack (< 3) webrick - rails (7.2.2) - actioncable (= 7.2.2) - actionmailbox (= 7.2.2) - actionmailer (= 7.2.2) - actionpack (= 7.2.2) - actiontext (= 7.2.2) - actionview (= 7.2.2) - activejob (= 7.2.2) - activemodel (= 7.2.2) - activerecord (= 7.2.2) - activestorage (= 7.2.2) - activesupport (= 7.2.2) + rails (7.2.2.1) + actioncable (= 7.2.2.1) + actionmailbox (= 7.2.2.1) + actionmailer (= 7.2.2.1) + actionpack (= 7.2.2.1) + actiontext (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activemodel (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) bundler (>= 1.15.0) - railties (= 7.2.2) + railties (= 7.2.2.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -639,9 +640,9 @@ GEM rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.2.2) - actionpack (= 7.2.2) - activesupport (= 7.2.2) + railties (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -663,8 +664,8 @@ GEM redis (>= 4) redlock (1.3.2) redis (>= 3.0.0, < 6.0) - regexp_parser (2.9.2) - reline (0.5.11) + regexp_parser (2.9.3) + reline (0.5.12) io-console (~> 0.5) request_store (1.6.0) rack (>= 1.4) @@ -707,21 +708,21 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.13.1) - rubocop (1.66.1) + rubocop (1.69.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.4, < 3.0) - rubocop-ast (>= 1.32.2, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.36.2, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.32.3) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.36.2) parser (>= 3.3.1.0) rubocop-capybara (2.21.0) rubocop (~> 1.41) - rubocop-performance (1.22.1) + rubocop-performance (1.23.0) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) rubocop-rails (2.27.0) @@ -729,7 +730,7 @@ GEM rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.2.0) + rubocop-rspec (3.3.0) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) @@ -837,7 +838,7 @@ GEM unf_ext (0.0.9.1) unicode-display_width (2.6.0) uri (0.13.1) - useragent (0.16.10) + useragent (0.16.11) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) @@ -866,7 +867,7 @@ GEM rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - webrick (1.9.0) + webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) diff --git a/Vagrantfile b/Vagrantfile index 89f5536edc..ce456060cd 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -174,7 +174,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| if config.vm.networks.any? { |type, options| type == :private_network } config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'actimeo=1'] else - config.vm.synced_folder ".", "/vagrant" + config.vm.synced_folder ".", "/vagrant", type: "rsync", create: true, rsync__args: ["--verbose", "--archive", "--delete", "-z"] end # Otherwise, you can access the site at http://localhost:3000 and http://localhost:4000 , http://localhost:8080 diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index 48685db17a..3dca3a9614 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -8,6 +8,7 @@ module Admin layout 'admin' before_action :set_cache_headers + before_action :set_referrer_policy_header after_action :verify_authorized @@ -17,6 +18,10 @@ module Admin response.cache_control.replace(private: true, no_store: true) end + def set_referrer_policy_header + response.headers['Referrer-Policy'] = 'same-origin' + end + def set_user @user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound) end diff --git a/app/controllers/admin/terms_of_service/distributions_controller.rb b/app/controllers/admin/terms_of_service/distributions_controller.rb new file mode 100644 index 0000000000..c639b083dd --- /dev/null +++ b/app/controllers/admin/terms_of_service/distributions_controller.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::DistributionsController < Admin::BaseController + before_action :set_terms_of_service + + def create + authorize @terms_of_service, :distribute? + @terms_of_service.touch(:notification_sent_at) + Admin::DistributeTermsOfServiceNotificationWorker.perform_async(@terms_of_service.id) + redirect_to admin_terms_of_service_index_path + end + + private + + def set_terms_of_service + @terms_of_service = TermsOfService.find(params[:terms_of_service_id]) + end +end diff --git a/app/controllers/admin/terms_of_service/drafts_controller.rb b/app/controllers/admin/terms_of_service/drafts_controller.rb new file mode 100644 index 0000000000..5d32c0bd83 --- /dev/null +++ b/app/controllers/admin/terms_of_service/drafts_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::DraftsController < Admin::BaseController + before_action :set_terms_of_service + + def show + authorize :terms_of_service, :create? + end + + def update + authorize @terms_of_service, :update? + + @terms_of_service.published_at = Time.now.utc if params[:action_type] == 'publish' + + if @terms_of_service.update(resource_params) + log_action(:publish, @terms_of_service) if @terms_of_service.published? + redirect_to @terms_of_service.published? ? admin_terms_of_service_index_path : admin_terms_of_service_draft_path + else + render :show + end + end + + private + + def set_terms_of_service + @terms_of_service = TermsOfService.draft.first || TermsOfService.new(text: current_terms_of_service&.text) + end + + def current_terms_of_service + TermsOfService.live.first + end + + def resource_params + params.require(:terms_of_service).permit(:text, :changelog) + end +end diff --git a/app/controllers/admin/terms_of_service/generates_controller.rb b/app/controllers/admin/terms_of_service/generates_controller.rb new file mode 100644 index 0000000000..28037674a3 --- /dev/null +++ b/app/controllers/admin/terms_of_service/generates_controller.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::GeneratesController < Admin::BaseController + before_action :set_instance_presenter + + def show + authorize :terms_of_service, :create? + + @generator = TermsOfService::Generator.new( + domain: @instance_presenter.domain, + admin_email: @instance_presenter.contact.email + ) + end + + def create + authorize :terms_of_service, :create? + + @generator = TermsOfService::Generator.new(resource_params) + + if @generator.valid? + TermsOfService.create!(text: @generator.render) + redirect_to admin_terms_of_service_draft_path + else + render :show + end + end + + private + + def set_instance_presenter + @instance_presenter = InstancePresenter.new + end + + def resource_params + params.require(:terms_of_service_generator).permit(*TermsOfService::Generator::VARIABLES) + end +end diff --git a/app/controllers/admin/terms_of_service/histories_controller.rb b/app/controllers/admin/terms_of_service/histories_controller.rb new file mode 100644 index 0000000000..8f12341aea --- /dev/null +++ b/app/controllers/admin/terms_of_service/histories_controller.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::HistoriesController < Admin::BaseController + def show + authorize :terms_of_service, :index? + @terms_of_service = TermsOfService.published.all + end +end diff --git a/app/controllers/admin/terms_of_service/previews_controller.rb b/app/controllers/admin/terms_of_service/previews_controller.rb new file mode 100644 index 0000000000..0a1a966751 --- /dev/null +++ b/app/controllers/admin/terms_of_service/previews_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::PreviewsController < Admin::BaseController + before_action :set_terms_of_service + + def show + authorize @terms_of_service, :distribute? + @user_count = @terms_of_service.scope_for_notification.count + end + + private + + def set_terms_of_service + @terms_of_service = TermsOfService.find(params[:terms_of_service_id]) + end +end diff --git a/app/controllers/admin/terms_of_service/tests_controller.rb b/app/controllers/admin/terms_of_service/tests_controller.rb new file mode 100644 index 0000000000..e2483c1005 --- /dev/null +++ b/app/controllers/admin/terms_of_service/tests_controller.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class Admin::TermsOfService::TestsController < Admin::BaseController + before_action :set_terms_of_service + + def create + authorize @terms_of_service, :distribute? + UserMailer.terms_of_service_changed(current_user, @terms_of_service).deliver_later! + redirect_to admin_terms_of_service_preview_path(@terms_of_service) + end + + private + + def set_terms_of_service + @terms_of_service = TermsOfService.find(params[:terms_of_service_id]) + end +end diff --git a/app/controllers/admin/terms_of_service_controller.rb b/app/controllers/admin/terms_of_service_controller.rb new file mode 100644 index 0000000000..f70bfd2071 --- /dev/null +++ b/app/controllers/admin/terms_of_service_controller.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class Admin::TermsOfServiceController < Admin::BaseController + def index + authorize :terms_of_service, :index? + @terms_of_service = TermsOfService.live.first + end +end diff --git a/app/controllers/api/v1/instances/terms_of_services_controller.rb b/app/controllers/api/v1/instances/terms_of_services_controller.rb new file mode 100644 index 0000000000..e9e8e8ef55 --- /dev/null +++ b/app/controllers/api/v1/instances/terms_of_services_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Api::V1::Instances::TermsOfServicesController < Api::V1::Instances::BaseController + before_action :set_terms_of_service + + def show + cache_even_if_authenticated! + render json: @terms_of_service, serializer: REST::PrivacyPolicySerializer + end + + private + + def set_terms_of_service + @terms_of_service = TermsOfService.live.first! + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7a858ed059..1b071e8655 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -70,7 +70,13 @@ class ApplicationController < ActionController::Base end def require_functional! - redirect_to edit_user_registration_path unless current_user.functional? + return if current_user.functional? + + if current_user.confirmed? + redirect_to edit_user_registration_path + else + redirect_to auth_setup_path + end end def skip_csrf_meta_tags? diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 4d94c80158..34c7599553 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -142,4 +142,12 @@ class Auth::RegistrationsController < Devise::RegistrationsController def set_cache_headers response.cache_control.replace(private: true, no_store: true) end + + def is_flashing_format? # rubocop:disable Naming/PredicateName + if params[:action] == 'create' + false # Disable flash messages for sign-up + else + super + end + end end diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 249bb20a25..1d8ee43507 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -7,6 +7,7 @@ module WebAppControllerConcern vary_by 'Accept, Accept-Language, Cookie' before_action :redirect_unauthenticated_to_permalinks! + before_action :set_referer_header content_security_policy do |p| policy = ContentSecurityPolicy.new @@ -41,4 +42,10 @@ module WebAppControllerConcern end end end + + protected + + def set_referer_header + response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'origin' : 'same-origin') + end end diff --git a/app/controllers/terms_of_service_controller.rb b/app/controllers/terms_of_service_controller.rb new file mode 100644 index 0000000000..672fb07915 --- /dev/null +++ b/app/controllers/terms_of_service_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class TermsOfServiceController < ApplicationController + include WebAppControllerConcern + + skip_before_action :require_functional! + + def show + expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? + end +end diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb index 8ba2d7acd3..dc7442ac33 100644 --- a/app/helpers/formatting_helper.rb +++ b/app/helpers/formatting_helper.rb @@ -68,6 +68,10 @@ module FormattingHelper end end + def markdown(text) + Redcarpet::Markdown.new(Redcarpet::Render::HTML, escape_html: true, no_images: true).render(text).html_safe # rubocop:disable Rails/OutputSafety + end + private def wrapped_status_content_format(status) diff --git a/app/javascript/entrypoints/embed.tsx b/app/javascript/entrypoints/embed.tsx index f8c824d287..cb62727563 100644 --- a/app/javascript/entrypoints/embed.tsx +++ b/app/javascript/entrypoints/embed.tsx @@ -60,6 +60,10 @@ window.addEventListener('message', (e) => { const data = e.data; + // Only set overflow to `hidden` once we got the expected `message` so the post can still be scrolled if + // embedded without parent Javascript support + document.body.style.overflow = 'hidden'; + // We use a timeout to allow for the React page to render before calculating the height afterInitialRender(() => { window.parent.postMessage( diff --git a/app/javascript/hooks/useLinks.ts b/app/javascript/hooks/useLinks.ts index f08b9500da..c99f3f4199 100644 --- a/app/javascript/hooks/useLinks.ts +++ b/app/javascript/hooks/useLinks.ts @@ -2,6 +2,8 @@ import { useCallback } from 'react'; import { useHistory } from 'react-router-dom'; +import { isFulfilled, isRejected } from '@reduxjs/toolkit'; + import { openURL } from 'mastodon/actions/search'; import { useAppDispatch } from 'mastodon/store'; @@ -28,12 +30,22 @@ export const useLinks = () => { ); const handleMentionClick = useCallback( - (element: HTMLAnchorElement) => { - dispatch( - openURL(element.href, history, () => { + async (element: HTMLAnchorElement) => { + const result = await dispatch(openURL({ url: element.href })); + + if (isFulfilled(result)) { + if (result.payload.accounts[0]) { + history.push(`/@${result.payload.accounts[0].acct}`); + } else if (result.payload.statuses[0]) { + history.push( + `/@${result.payload.statuses[0].account.acct}/${result.payload.statuses[0].id}`, + ); + } else { window.location.href = element.href; - }), - ); + } + } else if (isRejected(result)) { + window.location.href = element.href; + } }, [dispatch, history], ); @@ -48,7 +60,7 @@ export const useLinks = () => { if (isMentionClick(target)) { e.preventDefault(); - handleMentionClick(target); + void handleMentionClick(target); } else if (isHashtagClick(target)) { e.preventDefault(); handleHashtagClick(target); diff --git a/app/javascript/mastodon/actions/importer/index.js b/app/javascript/mastodon/actions/importer/index.js index ebf58b761a..380190a910 100644 --- a/app/javascript/mastodon/actions/importer/index.js +++ b/app/javascript/mastodon/actions/importer/index.js @@ -1,10 +1,12 @@ +import { createPollFromServerJSON } from 'mastodon/models/poll'; + import { importAccounts } from '../accounts_typed'; -import { normalizeStatus, normalizePoll } from './normalizer'; +import { normalizeStatus } from './normalizer'; +import { importPolls } from './polls'; export const STATUS_IMPORT = 'STATUS_IMPORT'; export const STATUSES_IMPORT = 'STATUSES_IMPORT'; -export const POLLS_IMPORT = 'POLLS_IMPORT'; export const FILTERS_IMPORT = 'FILTERS_IMPORT'; function pushUnique(array, object) { @@ -25,10 +27,6 @@ export function importFilters(filters) { return { type: FILTERS_IMPORT, filters }; } -export function importPolls(polls) { - return { type: POLLS_IMPORT, polls }; -} - export function importFetchedAccount(account) { return importFetchedAccounts([account]); } @@ -77,7 +75,7 @@ export function importFetchedStatuses(statuses) { } if (status.poll?.id) { - pushUnique(polls, normalizePoll(status.poll, getState().getIn(['polls', status.poll.id]))); + pushUnique(polls, createPollFromServerJSON(status.poll, getState().polls.get(status.poll.id))); } if (status.card) { @@ -87,15 +85,9 @@ export function importFetchedStatuses(statuses) { statuses.forEach(processStatus); - dispatch(importPolls(polls)); + dispatch(importPolls({ polls })); dispatch(importFetchedAccounts(accounts)); dispatch(importStatuses(normalStatuses)); dispatch(importFilters(filters)); }; } - -export function importFetchedPoll(poll) { - return (dispatch, getState) => { - dispatch(importPolls([normalizePoll(poll, getState().getIn(['polls', poll.id]))])); - }; -} diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index d9e9fef0c6..b643cf5613 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -1,15 +1,12 @@ import escapeTextContentForBrowser from 'escape-html'; +import { makeEmojiMap } from 'mastodon/models/custom_emoji'; + import emojify from '../../features/emoji/emoji'; import { expandSpoilers, me } from '../../initial_state'; const domParser = new DOMParser(); -const makeEmojiMap = emojis => emojis.reduce((obj, emoji) => { - obj[`:${emoji.shortcode}:`] = emoji; - return obj; -}, {}); - export function searchTextFromRawStatus (status) { const spoilerText = status.spoiler_text || ''; const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(//g, '\n').replace(/<\/p>

/g, '\n\n'); @@ -140,38 +137,6 @@ export function normalizeStatusTranslation(translation, status) { return normalTranslation; } -export function normalizePoll(poll, normalOldPoll) { - const normalPoll = { ...poll }; - const emojiMap = makeEmojiMap(poll.emojis); - - normalPoll.options = poll.options.map((option, index) => { - const normalOption = { - ...option, - voted: poll.own_votes && poll.own_votes.includes(index), - titleHtml: emojify(escapeTextContentForBrowser(option.title), emojiMap), - }; - - if (normalOldPoll && normalOldPoll.getIn(['options', index, 'title']) === option.title) { - normalOption.translation = normalOldPoll.getIn(['options', index, 'translation']); - } - - return normalOption; - }); - - return normalPoll; -} - -export function normalizePollOptionTranslation(translation, poll) { - const emojiMap = makeEmojiMap(poll.get('emojis').toJS()); - - const normalTranslation = { - ...translation, - titleHtml: emojify(escapeTextContentForBrowser(translation.title), emojiMap), - }; - - return normalTranslation; -} - export function normalizeAnnouncement(announcement) { const normalAnnouncement = { ...announcement }; const emojiMap = makeEmojiMap(normalAnnouncement.emojis); diff --git a/app/javascript/mastodon/actions/importer/polls.ts b/app/javascript/mastodon/actions/importer/polls.ts new file mode 100644 index 0000000000..5bbe7d57d6 --- /dev/null +++ b/app/javascript/mastodon/actions/importer/polls.ts @@ -0,0 +1,7 @@ +import { createAction } from '@reduxjs/toolkit'; + +import type { Poll } from 'mastodon/models/poll'; + +export const importPolls = createAction<{ polls: Poll[] }>( + 'poll/importMultiple', +); diff --git a/app/javascript/mastodon/actions/polls.js b/app/javascript/mastodon/actions/polls.js deleted file mode 100644 index aa49341444..0000000000 --- a/app/javascript/mastodon/actions/polls.js +++ /dev/null @@ -1,61 +0,0 @@ -import api from '../api'; - -import { importFetchedPoll } from './importer'; - -export const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST'; -export const POLL_VOTE_SUCCESS = 'POLL_VOTE_SUCCESS'; -export const POLL_VOTE_FAIL = 'POLL_VOTE_FAIL'; - -export const POLL_FETCH_REQUEST = 'POLL_FETCH_REQUEST'; -export const POLL_FETCH_SUCCESS = 'POLL_FETCH_SUCCESS'; -export const POLL_FETCH_FAIL = 'POLL_FETCH_FAIL'; - -export const vote = (pollId, choices) => (dispatch) => { - dispatch(voteRequest()); - - api().post(`/api/v1/polls/${pollId}/votes`, { choices }) - .then(({ data }) => { - dispatch(importFetchedPoll(data)); - dispatch(voteSuccess(data)); - }) - .catch(err => dispatch(voteFail(err))); -}; - -export const fetchPoll = pollId => (dispatch) => { - dispatch(fetchPollRequest()); - - api().get(`/api/v1/polls/${pollId}`) - .then(({ data }) => { - dispatch(importFetchedPoll(data)); - dispatch(fetchPollSuccess(data)); - }) - .catch(err => dispatch(fetchPollFail(err))); -}; - -export const voteRequest = () => ({ - type: POLL_VOTE_REQUEST, -}); - -export const voteSuccess = poll => ({ - type: POLL_VOTE_SUCCESS, - poll, -}); - -export const voteFail = error => ({ - type: POLL_VOTE_FAIL, - error, -}); - -export const fetchPollRequest = () => ({ - type: POLL_FETCH_REQUEST, -}); - -export const fetchPollSuccess = poll => ({ - type: POLL_FETCH_SUCCESS, - poll, -}); - -export const fetchPollFail = error => ({ - type: POLL_FETCH_FAIL, - error, -}); diff --git a/app/javascript/mastodon/actions/polls.ts b/app/javascript/mastodon/actions/polls.ts new file mode 100644 index 0000000000..28f729394b --- /dev/null +++ b/app/javascript/mastodon/actions/polls.ts @@ -0,0 +1,40 @@ +import { apiGetPoll, apiPollVote } from 'mastodon/api/polls'; +import type { ApiPollJSON } from 'mastodon/api_types/polls'; +import { createPollFromServerJSON } from 'mastodon/models/poll'; +import { + createAppAsyncThunk, + createDataLoadingThunk, +} from 'mastodon/store/typed_functions'; + +import { importPolls } from './importer/polls'; + +export const importFetchedPoll = createAppAsyncThunk( + 'poll/importFetched', + (args: { poll: ApiPollJSON }, { dispatch, getState }) => { + const { poll } = args; + + dispatch( + importPolls({ + polls: [createPollFromServerJSON(poll, getState().polls.get(poll.id))], + }), + ); + }, +); + +export const vote = createDataLoadingThunk( + 'poll/vote', + ({ pollId, choices }: { pollId: string; choices: string[] }) => + apiPollVote(pollId, choices), + async (poll, { dispatch, discardLoadData }) => { + await dispatch(importFetchedPoll({ poll })); + return discardLoadData; + }, +); + +export const fetchPoll = createDataLoadingThunk( + 'poll/fetch', + ({ pollId }: { pollId: string }) => apiGetPoll(pollId), + async (poll, { dispatch }) => { + await dispatch(importFetchedPoll({ poll })); + }, +); diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js deleted file mode 100644 index bde17ae0db..0000000000 --- a/app/javascript/mastodon/actions/search.js +++ /dev/null @@ -1,215 +0,0 @@ -import { fromJS } from 'immutable'; - -import { searchHistory } from 'mastodon/settings'; - -import api from '../api'; - -import { fetchRelationships } from './accounts'; -import { importFetchedAccounts, importFetchedStatuses } from './importer'; - -export const SEARCH_CHANGE = 'SEARCH_CHANGE'; -export const SEARCH_CLEAR = 'SEARCH_CLEAR'; -export const SEARCH_SHOW = 'SEARCH_SHOW'; - -export const SEARCH_FETCH_REQUEST = 'SEARCH_FETCH_REQUEST'; -export const SEARCH_FETCH_SUCCESS = 'SEARCH_FETCH_SUCCESS'; -export const SEARCH_FETCH_FAIL = 'SEARCH_FETCH_FAIL'; - -export const SEARCH_EXPAND_REQUEST = 'SEARCH_EXPAND_REQUEST'; -export const SEARCH_EXPAND_SUCCESS = 'SEARCH_EXPAND_SUCCESS'; -export const SEARCH_EXPAND_FAIL = 'SEARCH_EXPAND_FAIL'; - -export const SEARCH_HISTORY_UPDATE = 'SEARCH_HISTORY_UPDATE'; - -export function changeSearch(value) { - return { - type: SEARCH_CHANGE, - value, - }; -} - -export function clearSearch() { - return { - type: SEARCH_CLEAR, - }; -} - -export function submitSearch(type) { - return (dispatch, getState) => { - const value = getState().getIn(['search', 'value']); - const signedIn = !!getState().getIn(['meta', 'me']); - - if (value.length === 0) { - dispatch(fetchSearchSuccess({ accounts: [], statuses: [], hashtags: [] }, '', type)); - return; - } - - dispatch(fetchSearchRequest(type)); - - api().get('/api/v2/search', { - params: { - q: value, - resolve: signedIn, - limit: 11, - type, - }, - }).then(response => { - if (response.data.accounts) { - dispatch(importFetchedAccounts(response.data.accounts)); - } - - if (response.data.statuses) { - dispatch(importFetchedStatuses(response.data.statuses)); - } - - dispatch(fetchSearchSuccess(response.data, value, type)); - dispatch(fetchRelationships(response.data.accounts.map(item => item.id))); - }).catch(error => { - dispatch(fetchSearchFail(error)); - }); - }; -} - -export function fetchSearchRequest(searchType) { - return { - type: SEARCH_FETCH_REQUEST, - searchType, - }; -} - -export function fetchSearchSuccess(results, searchTerm, searchType) { - return { - type: SEARCH_FETCH_SUCCESS, - results, - searchType, - searchTerm, - }; -} - -export function fetchSearchFail(error) { - return { - type: SEARCH_FETCH_FAIL, - error, - }; -} - -export const expandSearch = type => (dispatch, getState) => { - const value = getState().getIn(['search', 'value']); - const offset = getState().getIn(['search', 'results', type]).size - 1; - - dispatch(expandSearchRequest(type)); - - api().get('/api/v2/search', { - params: { - q: value, - type, - offset, - limit: 11, - }, - }).then(({ data }) => { - if (data.accounts) { - dispatch(importFetchedAccounts(data.accounts)); - } - - if (data.statuses) { - dispatch(importFetchedStatuses(data.statuses)); - } - - dispatch(expandSearchSuccess(data, value, type)); - dispatch(fetchRelationships(data.accounts.map(item => item.id))); - }).catch(error => { - dispatch(expandSearchFail(error)); - }); -}; - -export const expandSearchRequest = (searchType) => ({ - type: SEARCH_EXPAND_REQUEST, - searchType, -}); - -export const expandSearchSuccess = (results, searchTerm, searchType) => ({ - type: SEARCH_EXPAND_SUCCESS, - results, - searchTerm, - searchType, -}); - -export const expandSearchFail = error => ({ - type: SEARCH_EXPAND_FAIL, - error, -}); - -export const showSearch = () => ({ - type: SEARCH_SHOW, -}); - -export const openURL = (value, history, onFailure) => (dispatch, getState) => { - const signedIn = !!getState().getIn(['meta', 'me']); - - if (!signedIn) { - if (onFailure) { - onFailure(); - } - - return; - } - - dispatch(fetchSearchRequest()); - - api().get('/api/v2/search', { params: { q: value, resolve: true } }).then(response => { - if (response.data.accounts?.length > 0) { - dispatch(importFetchedAccounts(response.data.accounts)); - history.push(`/@${response.data.accounts[0].acct}`); - } else if (response.data.statuses?.length > 0) { - dispatch(importFetchedStatuses(response.data.statuses)); - history.push(`/@${response.data.statuses[0].account.acct}/${response.data.statuses[0].id}`); - } else if (onFailure) { - onFailure(); - } - - dispatch(fetchSearchSuccess(response.data, value)); - }).catch(err => { - dispatch(fetchSearchFail(err)); - - if (onFailure) { - onFailure(); - } - }); -}; - -export const clickSearchResult = (q, type) => (dispatch, getState) => { - const previous = getState().getIn(['search', 'recent']); - - if (previous.some(x => x.get('q') === q && x.get('type') === type)) { - return; - } - - const me = getState().getIn(['meta', 'me']); - const current = previous.add(fromJS({ type, q })).takeLast(4); - - searchHistory.set(me, current.toJS()); - dispatch(updateSearchHistory(current)); -}; - -export const forgetSearchResult = q => (dispatch, getState) => { - const previous = getState().getIn(['search', 'recent']); - const me = getState().getIn(['meta', 'me']); - const current = previous.filterNot(result => result.get('q') === q); - - searchHistory.set(me, current.toJS()); - dispatch(updateSearchHistory(current)); -}; - -export const updateSearchHistory = recent => ({ - type: SEARCH_HISTORY_UPDATE, - recent, -}); - -export const hydrateSearch = () => (dispatch, getState) => { - const me = getState().getIn(['meta', 'me']); - const history = searchHistory.get(me); - - if (history !== null) { - dispatch(updateSearchHistory(history)); - } -}; diff --git a/app/javascript/mastodon/actions/search.ts b/app/javascript/mastodon/actions/search.ts new file mode 100644 index 0000000000..7ee432f782 --- /dev/null +++ b/app/javascript/mastodon/actions/search.ts @@ -0,0 +1,151 @@ +import { createAction } from '@reduxjs/toolkit'; + +import { apiGetSearch } from 'mastodon/api/search'; +import type { ApiSearchType } from 'mastodon/api_types/search'; +import type { + RecentSearch, + SearchType as RecentSearchType, +} from 'mastodon/models/search'; +import { searchHistory } from 'mastodon/settings'; +import { + createDataLoadingThunk, + createAppAsyncThunk, +} from 'mastodon/store/typed_functions'; + +import { fetchRelationships } from './accounts'; +import { importFetchedAccounts, importFetchedStatuses } from './importer'; + +export const SEARCH_HISTORY_UPDATE = 'SEARCH_HISTORY_UPDATE'; + +export const submitSearch = createDataLoadingThunk( + 'search/submit', + async ({ q, type }: { q: string; type?: ApiSearchType }, { getState }) => { + const signedIn = !!getState().meta.get('me'); + + return apiGetSearch({ + q, + type, + resolve: signedIn, + limit: 11, + }); + }, + (data, { dispatch }) => { + if (data.accounts.length > 0) { + dispatch(importFetchedAccounts(data.accounts)); + dispatch(fetchRelationships(data.accounts.map((account) => account.id))); + } + + if (data.statuses.length > 0) { + dispatch(importFetchedStatuses(data.statuses)); + } + + return data; + }, + { + useLoadingBar: false, + }, +); + +export const expandSearch = createDataLoadingThunk( + 'search/expand', + async ({ type }: { type: ApiSearchType }, { getState }) => { + const q = getState().search.q; + const results = getState().search.results; + const offset = results?.[type].length; + + return apiGetSearch({ + q, + type, + limit: 11, + offset, + }); + }, + (data, { dispatch }) => { + if (data.accounts.length > 0) { + dispatch(importFetchedAccounts(data.accounts)); + dispatch(fetchRelationships(data.accounts.map((account) => account.id))); + } + + if (data.statuses.length > 0) { + dispatch(importFetchedStatuses(data.statuses)); + } + + return data; + }, + { + useLoadingBar: true, + }, +); + +export const openURL = createDataLoadingThunk( + 'search/openURL', + ({ url }: { url: string }, { getState }) => { + const signedIn = !!getState().meta.get('me'); + + return apiGetSearch({ + q: url, + resolve: signedIn, + limit: 1, + }); + }, + (data, { dispatch }) => { + if (data.accounts.length > 0) { + dispatch(importFetchedAccounts(data.accounts)); + } else if (data.statuses.length > 0) { + dispatch(importFetchedStatuses(data.statuses)); + } + + return data; + }, + { + useLoadingBar: true, + }, +); + +export const clickSearchResult = createAppAsyncThunk( + 'search/clickResult', + ( + { q, type }: { q: string; type?: RecentSearchType }, + { dispatch, getState }, + ) => { + const previous = getState().search.recent; + + if (previous.some((x) => x.q === q && x.type === type)) { + return; + } + + const me = getState().meta.get('me') as string; + const current = [{ type, q }, ...previous].slice(0, 4); + + searchHistory.set(me, current); + dispatch(updateSearchHistory(current)); + }, +); + +export const forgetSearchResult = createAppAsyncThunk( + 'search/forgetResult', + (q: string, { dispatch, getState }) => { + const previous = getState().search.recent; + const me = getState().meta.get('me') as string; + const current = previous.filter((result) => result.q !== q); + + searchHistory.set(me, current); + dispatch(updateSearchHistory(current)); + }, +); + +export const updateSearchHistory = createAction( + 'search/updateHistory', +); + +export const hydrateSearch = createAppAsyncThunk( + 'search/hydrate', + (_args, { dispatch, getState }) => { + const me = getState().meta.get('me') as string; + const history = searchHistory.get(me) as RecentSearch[] | null; + + if (history !== null) { + dispatch(updateSearchHistory(history)); + } + }, +); diff --git a/app/javascript/mastodon/api/instance.ts b/app/javascript/mastodon/api/instance.ts new file mode 100644 index 0000000000..ec9146fb34 --- /dev/null +++ b/app/javascript/mastodon/api/instance.ts @@ -0,0 +1,11 @@ +import { apiRequestGet } from 'mastodon/api'; +import type { + ApiTermsOfServiceJSON, + ApiPrivacyPolicyJSON, +} from 'mastodon/api_types/instance'; + +export const apiGetTermsOfService = () => + apiRequestGet('v1/instance/terms_of_service'); + +export const apiGetPrivacyPolicy = () => + apiRequestGet('v1/instance/privacy_policy'); diff --git a/app/javascript/mastodon/api/polls.ts b/app/javascript/mastodon/api/polls.ts new file mode 100644 index 0000000000..cb659986f5 --- /dev/null +++ b/app/javascript/mastodon/api/polls.ts @@ -0,0 +1,10 @@ +import { apiRequestGet, apiRequestPost } from 'mastodon/api'; +import type { ApiPollJSON } from 'mastodon/api_types/polls'; + +export const apiGetPoll = (pollId: string) => + apiRequestGet(`/v1/polls/${pollId}`); + +export const apiPollVote = (pollId: string, choices: string[]) => + apiRequestPost(`/v1/polls/${pollId}/votes`, { + choices, + }); diff --git a/app/javascript/mastodon/api/search.ts b/app/javascript/mastodon/api/search.ts new file mode 100644 index 0000000000..79b0385fe8 --- /dev/null +++ b/app/javascript/mastodon/api/search.ts @@ -0,0 +1,16 @@ +import { apiRequestGet } from 'mastodon/api'; +import type { + ApiSearchType, + ApiSearchResultsJSON, +} from 'mastodon/api_types/search'; + +export const apiGetSearch = (params: { + q: string; + resolve?: boolean; + type?: ApiSearchType; + limit?: number; + offset?: number; +}) => + apiRequestGet('v2/search', { + ...params, + }); diff --git a/app/javascript/mastodon/api_types/instance.ts b/app/javascript/mastodon/api_types/instance.ts new file mode 100644 index 0000000000..ead9774515 --- /dev/null +++ b/app/javascript/mastodon/api_types/instance.ts @@ -0,0 +1,9 @@ +export interface ApiTermsOfServiceJSON { + updated_at: string; + content: string; +} + +export interface ApiPrivacyPolicyJSON { + updated_at: string; + content: string; +} diff --git a/app/javascript/mastodon/api_types/polls.ts b/app/javascript/mastodon/api_types/polls.ts index 8181f7b813..275ca29fd7 100644 --- a/app/javascript/mastodon/api_types/polls.ts +++ b/app/javascript/mastodon/api_types/polls.ts @@ -18,6 +18,6 @@ export interface ApiPollJSON { options: ApiPollOptionJSON[]; emojis: ApiCustomEmojiJSON[]; - voted: boolean; - own_votes: number[]; + voted?: boolean; + own_votes?: number[]; } diff --git a/app/javascript/mastodon/api_types/search.ts b/app/javascript/mastodon/api_types/search.ts new file mode 100644 index 0000000000..795cbb2b41 --- /dev/null +++ b/app/javascript/mastodon/api_types/search.ts @@ -0,0 +1,11 @@ +import type { ApiAccountJSON } from './accounts'; +import type { ApiStatusJSON } from './statuses'; +import type { ApiHashtagJSON } from './tags'; + +export type ApiSearchType = 'accounts' | 'statuses' | 'hashtags'; + +export interface ApiSearchResultsJSON { + accounts: ApiAccountJSON[]; + statuses: ApiStatusJSON[]; + hashtags: ApiHashtagJSON[]; +} diff --git a/app/javascript/mastodon/components/attachment_list.jsx b/app/javascript/mastodon/components/attachment_list.jsx index c5ac046751..f97e22f2d4 100644 --- a/app/javascript/mastodon/components/attachment_list.jsx +++ b/app/javascript/mastodon/components/attachment_list.jsx @@ -36,7 +36,7 @@ export default class AttachmentList extends ImmutablePureComponent { return (

  • - + {compact && } {compact && ' ' } {displayUrl ? filename(displayUrl) : } diff --git a/app/javascript/mastodon/components/dropdown_menu.jsx b/app/javascript/mastodon/components/dropdown_menu.jsx index 4d1a47a2f5..f2b3cf90a2 100644 --- a/app/javascript/mastodon/components/dropdown_menu.jsx +++ b/app/javascript/mastodon/components/dropdown_menu.jsx @@ -124,7 +124,7 @@ class DropdownMenu extends PureComponent { return (
  • - + {text}
  • diff --git a/app/javascript/mastodon/components/error_boundary.jsx b/app/javascript/mastodon/components/error_boundary.jsx index 392a3ad61e..ca2f017f3b 100644 --- a/app/javascript/mastodon/components/error_boundary.jsx +++ b/app/javascript/mastodon/components/error_boundary.jsx @@ -98,7 +98,7 @@ export default class ErrorBoundary extends PureComponent { )}

    -

    Mastodon v{version} · ·

    +

    Mastodon v{version} · ·

    diff --git a/app/javascript/mastodon/components/follow_button.tsx b/app/javascript/mastodon/components/follow_button.tsx index 9bb89bf2b5..22eab04e86 100644 --- a/app/javascript/mastodon/components/follow_button.tsx +++ b/app/javascript/mastodon/components/follow_button.tsx @@ -92,7 +92,7 @@ export const FollowButton: React.FC<{ {label} diff --git a/app/javascript/mastodon/components/hashtag.tsx b/app/javascript/mastodon/components/hashtag.tsx index 8963e4a40d..f3d5cc1f2e 100644 --- a/app/javascript/mastodon/components/hashtag.tsx +++ b/app/javascript/mastodon/components/hashtag.tsx @@ -12,6 +12,7 @@ import { Sparklines, SparklinesCurve } from 'react-sparklines'; import { ShortNumber } from 'mastodon/components/short_number'; import { Skeleton } from 'mastodon/components/skeleton'; +import type { Hashtag as HashtagType } from 'mastodon/models/tags'; interface SilentErrorBoundaryProps { children: React.ReactNode; @@ -80,6 +81,22 @@ export const ImmutableHashtag = ({ hashtag }: ImmutableHashtagProps) => ( /> ); +export const CompatibilityHashtag: React.FC<{ + hashtag: HashtagType; +}> = ({ hashtag }) => ( + (day.uses as unknown as number) * 1) + .reverse()} + /> +); + export interface HashtagProps { className?: string; description?: React.ReactNode; diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index f81bfbc1da..396dfcf7b7 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -122,7 +122,7 @@ class Item extends PureComponent { if (attachment.get('type') === 'unknown') { return (
    - + record.get('emojis').reduce((obj, emoji) => { - obj[`:${emoji.get('shortcode')}:`] = emoji.toJS(); - return obj; -}, {}); - class Poll extends ImmutablePureComponent { static propTypes = { identity: identityContextPropShape, - poll: ImmutablePropTypes.map.isRequired, + poll: ImmutablePropTypes.record.isRequired, status: ImmutablePropTypes.map.isRequired, lang: PropTypes.string, intl: PropTypes.object.isRequired, @@ -150,7 +145,7 @@ class Poll extends ImmutablePureComponent { let titleHtml = option.getIn(['translation', 'titleHtml']) || option.get('titleHtml'); if (!titleHtml) { - const emojiMap = makeEmojiMap(poll); + const emojiMap = emojiMap(poll); titleHtml = emojify(escapeTextContentForBrowser(title), emojiMap); } diff --git a/app/javascript/mastodon/components/server_banner.jsx b/app/javascript/mastodon/components/server_banner.jsx index b6ea01997b..989ac7f006 100644 --- a/app/javascript/mastodon/components/server_banner.jsx +++ b/app/javascript/mastodon/components/server_banner.jsx @@ -42,7 +42,7 @@ class ServerBanner extends PureComponent { return (
    - {domain}, mastodon: Mastodon }} /> + {domain}, mastodon: Mastodon }} />
    diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 22f1a0ec75..9fdc966acb 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -302,7 +302,7 @@ class Status extends ImmutablePureComponent { if (e?.button === 0 && !(e?.ctrlKey || e?.metaKey)) { history.push(path); } else if (e?.button === 1 || (e?.button === 0 && (e?.ctrlKey || e?.metaKey))) { - window.open(path, '_blank', 'noreferrer noopener'); + window.open(path, '_blank', 'noopener'); } }; diff --git a/app/javascript/mastodon/containers/poll_container.js b/app/javascript/mastodon/containers/poll_container.js index db378cba7c..7ca840138d 100644 --- a/app/javascript/mastodon/containers/poll_container.js +++ b/app/javascript/mastodon/containers/poll_container.js @@ -9,14 +9,14 @@ import Poll from 'mastodon/components/poll'; const mapDispatchToProps = (dispatch, { pollId }) => ({ refresh: debounce( () => { - dispatch(fetchPoll(pollId)); + dispatch(fetchPoll({ pollId })); }, 1000, { leading: true }, ), onVote (choices) { - dispatch(vote(pollId, choices)); + dispatch(vote({ pollId, choices })); }, onInteractionModal (type, status) { @@ -32,7 +32,7 @@ const mapDispatchToProps = (dispatch, { pollId }) => ({ }); const mapStateToProps = (state, { pollId }) => ({ - poll: state.getIn(['polls', pollId]), + poll: state.polls.get(pollId), }); export default connect(mapStateToProps, mapDispatchToProps)(Poll); diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 08c8c6034a..359fb2ff7a 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -20,7 +20,7 @@ import Column from 'mastodon/components/column'; import { Icon } from 'mastodon/components/icon'; import { ServerHeroImage } from 'mastodon/components/server_hero_image'; import { Skeleton } from 'mastodon/components/skeleton'; -import LinkFooter from 'mastodon/features/ui/components/link_footer'; +import { LinkFooter} from 'mastodon/features/ui/components/link_footer'; const messages = defineMessages({ title: { id: 'column.about', defaultMessage: 'About' }, @@ -173,7 +173,7 @@ class About extends PureComponent {
    `${value} ${key.replace('@', '')}`).join(', ')} className='about__header__hero' />

    {isLoading ? : server.get('domain')}

    -

    Mastodon }} />

    +

    Mastodon }} />

    diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index f2fb646df8..4eef8081e8 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -6,6 +6,7 @@ import classNames from 'classnames'; import { Helmet } from 'react-helmet'; import { NavLink, withRouter } from 'react-router-dom'; +import { isFulfilled, isRejected } from '@reduxjs/toolkit'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; @@ -233,8 +234,20 @@ class Header extends ImmutablePureComponent { const link = e.currentTarget; - onOpenURL(link.href, history, () => { - window.location = link.href; + onOpenURL(link.href).then((result) => { + 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 = link.href; + } + } else if (isRejected(result)) { + window.location = link.href; + } + }).catch(() => { + // Nothing }); } }; @@ -450,7 +463,7 @@ class Header extends ImmutablePureComponent {
    - + diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx index 2535350208..56ad23b62f 100644 --- a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx +++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx @@ -174,8 +174,8 @@ const mapDispatchToProps = (dispatch) => ({ })); }, - onOpenURL (url, routerHistory, onFailure) { - dispatch(openURL(url, routerHistory, onFailure)); + onOpenURL (url) { + return dispatch(openURL({ url })); }, }); diff --git a/app/javascript/mastodon/features/compose/components/search.jsx b/app/javascript/mastodon/features/compose/components/search.jsx deleted file mode 100644 index 466487a5f6..0000000000 --- a/app/javascript/mastodon/features/compose/components/search.jsx +++ /dev/null @@ -1,405 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { defineMessages, injectIntl, FormattedMessage, FormattedList } from 'react-intl'; - -import classNames from 'classnames'; -import { withRouter } from 'react-router-dom'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; - -import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; -import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import SearchIcon from '@/material-icons/400-24px/search.svg?react'; -import { Icon } from 'mastodon/components/icon'; -import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; -import { domain, searchEnabled } from 'mastodon/initial_state'; -import { HASHTAG_REGEX } from 'mastodon/utils/hashtags'; -import { WithRouterPropTypes } from 'mastodon/utils/react_router'; - -const messages = defineMessages({ - placeholder: { id: 'search.placeholder', defaultMessage: 'Search' }, - placeholderSignedIn: { id: 'search.search_or_paste', defaultMessage: 'Search or paste URL' }, -}); - -const labelForRecentSearch = search => { - switch(search.get('type')) { - case 'account': - return `@${search.get('q')}`; - case 'hashtag': - return `#${search.get('q')}`; - default: - return search.get('q'); - } -}; - -class Search extends PureComponent { - static propTypes = { - identity: identityContextPropShape, - value: PropTypes.string.isRequired, - recent: ImmutablePropTypes.orderedSet, - submitted: PropTypes.bool, - onChange: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, - onOpenURL: PropTypes.func.isRequired, - onClickSearchResult: PropTypes.func.isRequired, - onForgetSearchResult: PropTypes.func.isRequired, - onClear: PropTypes.func.isRequired, - onShow: PropTypes.func.isRequired, - openInRoute: PropTypes.bool, - intl: PropTypes.object.isRequired, - singleColumn: PropTypes.bool, - ...WithRouterPropTypes, - }; - - state = { - expanded: false, - selectedOption: -1, - options: [], - }; - - defaultOptions = [ - { key: 'prompt-has', label: <>has: , action: e => { e.preventDefault(); this._insertText('has:'); } }, - { key: 'prompt-is', label: <>is: , action: e => { e.preventDefault(); this._insertText('is:'); } }, - { key: 'prompt-my', label: <>my: , action: e => { e.preventDefault(); this._insertText('my:'); } }, - { key: 'prompt-language', label: <>language: , action: e => { e.preventDefault(); this._insertText('language:'); } }, - { key: 'prompt-from', label: <>from: , action: e => { e.preventDefault(); this._insertText('from:'); } }, - { key: 'prompt-domain', label: <>domain: , action: e => { e.preventDefault(); this._insertText('domain:'); } }, - { key: 'prompt-before', label: <>before: , action: e => { e.preventDefault(); this._insertText('before:'); } }, - { key: 'prompt-during', label: <>during: , action: e => { e.preventDefault(); this._insertText('during:'); } }, - { key: 'prompt-after', label: <>after: , action: e => { e.preventDefault(); this._insertText('after:'); } }, - { key: 'prompt-in', label: <>in: , action: e => { e.preventDefault(); this._insertText('in:'); } }, - { key: 'prompt-order', label: <>order: , action: e => { e.preventDefault(); this._insertText('order:'); } }, - ]; - - setRef = c => { - this.searchForm = c; - }; - - handleChange = ({ target }) => { - const { onChange } = this.props; - - onChange(target.value); - - this._calculateOptions(target.value); - }; - - handleClear = e => { - const { value, submitted, onClear } = this.props; - - e.preventDefault(); - - if (value.length > 0 || submitted) { - onClear(); - this.setState({ options: [], selectedOption: -1 }); - } - }; - - handleKeyDown = (e) => { - const { selectedOption } = this.state; - const options = searchEnabled ? this._getOptions().concat(this.defaultOptions) : this._getOptions(); - - switch(e.key) { - case 'Escape': - e.preventDefault(); - this._unfocus(); - - break; - case 'ArrowDown': - e.preventDefault(); - - if (options.length > 0) { - this.setState({ selectedOption: Math.min(selectedOption + 1, options.length - 1) }); - } - - break; - case 'ArrowUp': - e.preventDefault(); - - if (options.length > 0) { - this.setState({ selectedOption: Math.max(selectedOption - 1, -1) }); - } - - break; - case 'Enter': - e.preventDefault(); - - if (selectedOption === -1) { - this._submit(); - } else if (options.length > 0) { - options[selectedOption].action(e); - } - - break; - case 'Delete': - if (selectedOption > -1 && options.length > 0) { - const search = options[selectedOption]; - - if (typeof search.forget === 'function') { - e.preventDefault(); - search.forget(e); - } - } - - break; - } - }; - - handleFocus = () => { - const { onShow, singleColumn } = this.props; - - this.setState({ expanded: true, selectedOption: -1 }); - onShow(); - - if (this.searchForm && !singleColumn) { - const { left, right } = this.searchForm.getBoundingClientRect(); - - if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) { - this.searchForm.scrollIntoView(); - } - } - }; - - handleBlur = () => { - this.setState({ expanded: false, selectedOption: -1 }); - }; - - handleHashtagClick = () => { - const { value, onClickSearchResult, history } = this.props; - - const query = value.trim().replace(/^#/, ''); - - history.push(`/tags/${query}`); - onClickSearchResult(query, 'hashtag'); - this._unfocus(); - }; - - handleAccountClick = () => { - const { value, onClickSearchResult, history } = this.props; - - const query = value.trim().replace(/^@/, ''); - - history.push(`/@${query}`); - onClickSearchResult(query, 'account'); - this._unfocus(); - }; - - handleURLClick = () => { - const { value, onOpenURL, history } = this.props; - - onOpenURL(value, history); - this._unfocus(); - }; - - handleStatusSearch = () => { - this._submit('statuses'); - }; - - handleAccountSearch = () => { - this._submit('accounts'); - }; - - handleRecentSearchClick = search => { - const { onChange, history } = this.props; - - if (search.get('type') === 'account') { - history.push(`/@${search.get('q')}`); - } else if (search.get('type') === 'hashtag') { - history.push(`/tags/${search.get('q')}`); - } else { - onChange(search.get('q')); - this._submit(search.get('type')); - } - - this._unfocus(); - }; - - handleForgetRecentSearchClick = search => { - const { onForgetSearchResult } = this.props; - - onForgetSearchResult(search.get('q')); - }; - - _unfocus () { - document.querySelector('.ui').parentElement.focus(); - } - - _insertText (text) { - const { value, onChange } = this.props; - - if (value === '') { - onChange(text); - } else if (value[value.length - 1] === ' ') { - onChange(`${value}${text}`); - } else { - onChange(`${value} ${text}`); - } - } - - _submit (type) { - const { onSubmit, openInRoute, value, onClickSearchResult, history } = this.props; - - onSubmit(type); - - if (value) { - onClickSearchResult(value, type); - } - - if (openInRoute) { - history.push('/search'); - } - - this._unfocus(); - } - - _getOptions () { - const { options } = this.state; - - if (options.length > 0) { - return options; - } - - const { recent } = this.props; - - return recent.toArray().map(search => ({ - key: `${search.get('type')}/${search.get('q')}`, - - label: labelForRecentSearch(search), - - action: () => this.handleRecentSearchClick(search), - - forget: e => { - e.stopPropagation(); - this.handleForgetRecentSearchClick(search); - }, - })); - } - - _calculateOptions (value) { - const { signedIn } = this.props.identity; - const trimmedValue = value.trim(); - const options = []; - - if (trimmedValue.length > 0) { - const couldBeURL = trimmedValue.startsWith('https://') && !trimmedValue.includes(' '); - - if (couldBeURL) { - options.push({ key: 'open-url', label: , action: this.handleURLClick }); - } - - const couldBeHashtag = (trimmedValue.startsWith('#') && trimmedValue.length > 1) || trimmedValue.match(HASHTAG_REGEX); - - if (couldBeHashtag) { - options.push({ key: 'go-to-hashtag', label: #{trimmedValue.replace(/^#/, '')} }} />, action: this.handleHashtagClick }); - } - - const couldBeUsername = trimmedValue.match(/^@?[a-z0-9_-]+(@[^\s]+)?$/i); - - if (couldBeUsername) { - options.push({ key: 'go-to-account', label: @{trimmedValue.replace(/^@/, '')} }} />, action: this.handleAccountClick }); - } - - const couldBeStatusSearch = searchEnabled; - - if (couldBeStatusSearch && signedIn) { - options.push({ key: 'status-search', label: {trimmedValue} }} />, action: this.handleStatusSearch }); - } - - const couldBeUserSearch = true; - - if (couldBeUserSearch) { - options.push({ key: 'account-search', label: {trimmedValue} }} />, action: this.handleAccountSearch }); - } - } - - this.setState({ options }); - } - - render () { - const { intl, value, submitted, recent } = this.props; - const { expanded, options, selectedOption } = this.state; - const { signedIn } = this.props.identity; - - const hasValue = value.length > 0 || submitted; - - return ( -
    - - -
    - - -
    - -
    - {options.length === 0 && ( - <> -

    - -
    - {recent.size > 0 ? this._getOptions().map(({ label, key, action, forget }, i) => ( - - - )) : ( -
    - -
    - )} -
    - - )} - - {options.length > 0 && ( - <> -

    - -
    - {options.map(({ key, label, action }, i) => ( - - ))} -
    - - )} - -

    - - {searchEnabled && signedIn ? ( -
    - {this.defaultOptions.map(({ key, label, action }, i) => ( - - ))} -
    - ) : ( -
    - {searchEnabled ? ( - - ) : ( - - )} -
    - )} -
    -
    - ); - } - -} - -export default withRouter(withIdentity(injectIntl(Search))); diff --git a/app/javascript/mastodon/features/compose/components/search.tsx b/app/javascript/mastodon/features/compose/components/search.tsx new file mode 100644 index 0000000000..3de51192ee --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/search.tsx @@ -0,0 +1,635 @@ +import { useCallback, useState, useRef } from 'react'; + +import { + defineMessages, + useIntl, + FormattedMessage, + FormattedList, +} from 'react-intl'; + +import classNames from 'classnames'; +import { useHistory } from 'react-router-dom'; + +import { isFulfilled } from '@reduxjs/toolkit'; + +import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import { + clickSearchResult, + forgetSearchResult, + openURL, +} from 'mastodon/actions/search'; +import { Icon } from 'mastodon/components/icon'; +import { useIdentity } from 'mastodon/identity_context'; +import { domain, searchEnabled } from 'mastodon/initial_state'; +import type { RecentSearch, SearchType } from 'mastodon/models/search'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; +import { HASHTAG_REGEX } from 'mastodon/utils/hashtags'; + +const messages = defineMessages({ + placeholder: { id: 'search.placeholder', defaultMessage: 'Search' }, + placeholderSignedIn: { + id: 'search.search_or_paste', + defaultMessage: 'Search or paste URL', + }, +}); + +const labelForRecentSearch = (search: RecentSearch) => { + switch (search.type) { + case 'account': + return `@${search.q}`; + case 'hashtag': + return `#${search.q}`; + default: + return search.q; + } +}; + +const unfocus = () => { + document.querySelector('.ui')?.parentElement?.focus(); +}; + +interface SearchOption { + key: string; + label: React.ReactNode; + action: (e: React.MouseEvent | React.KeyboardEvent) => void; + forget?: (e: React.MouseEvent | React.KeyboardEvent) => void; +} + +export const Search: React.FC<{ + singleColumn: boolean; + initialValue?: string; +}> = ({ singleColumn, initialValue }) => { + const intl = useIntl(); + const recent = useAppSelector((state) => state.search.recent); + const { signedIn } = useIdentity(); + const dispatch = useAppDispatch(); + const history = useHistory(); + const searchInputRef = useRef(null); + const [value, setValue] = useState(initialValue ?? ''); + const hasValue = value.length > 0; + const [expanded, setExpanded] = useState(false); + const [selectedOption, setSelectedOption] = useState(-1); + const [quickActions, setQuickActions] = useState([]); + const searchOptions: SearchOption[] = []; + + if (searchEnabled) { + searchOptions.push( + { + key: 'prompt-has', + label: ( + <> + has:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('has:'); + }, + }, + { + key: 'prompt-is', + label: ( + <> + is:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('is:'); + }, + }, + { + key: 'prompt-my', + label: ( + <> + my:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('my:'); + }, + }, + { + key: 'prompt-language', + label: ( + <> + language:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('language:'); + }, + }, + { + key: 'prompt-from', + label: ( + <> + from:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('from:'); + }, + }, + { + key: 'prompt-domain', + label: ( + <> + language:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('domain:'); + }, + }, + { + key: 'prompt-before', + label: ( + <> + before:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('before:'); + }, + }, + { + key: 'prompt-during', + label: ( + <> + during:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('during:'); + }, + }, + { + key: 'prompt-after', + label: ( + <> + after:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('after:'); + }, + }, + { + key: 'prompt-in', + label: ( + <> + in:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('in:'); + }, + }, + { + key: 'prompt-order', + label: ( + <> + order:{' '} + + + ), + action: (e) => { + e.preventDefault(); + insertText('order:'); + }, + }, + ); + } + + const recentOptions: SearchOption[] = recent.map((search) => ({ + key: `${search.type}/${search.q}`, + label: labelForRecentSearch(search), + action: () => { + setValue(search.q); + + if (search.type === 'account') { + history.push(`/@${search.q}`); + } else if (search.type === 'hashtag') { + history.push(`/tags/${search.q}`); + } else { + const queryParams = new URLSearchParams({ q: search.q }); + if (search.type) queryParams.set('type', search.type); + history.push({ pathname: '/search', search: queryParams.toString() }); + } + + unfocus(); + }, + forget: (e) => { + e.stopPropagation(); + void dispatch(forgetSearchResult(search.q)); + }, + })); + + const navigableOptions = hasValue + ? quickActions.concat(searchOptions) + : recentOptions.concat(quickActions, searchOptions); + + const insertText = (text: string) => { + setValue((currentValue) => { + if (currentValue === '') { + return text; + } else if (currentValue.endsWith(' ')) { + return `${currentValue}${text}`; + } else { + return `${currentValue} ${text}`; + } + }); + }; + + const submit = useCallback( + (q: string, type?: SearchType) => { + void dispatch(clickSearchResult({ q, type })); + const queryParams = new URLSearchParams({ q }); + if (type) queryParams.set('type', type); + history.push({ pathname: '/search', search: queryParams.toString() }); + unfocus(); + }, + [dispatch, history], + ); + + const handleChange = useCallback( + ({ target: { value } }: React.ChangeEvent) => { + setValue(value); + + const trimmedValue = value.trim(); + const newQuickActions = []; + + if (trimmedValue.length > 0) { + const couldBeURL = + trimmedValue.startsWith('https://') && !trimmedValue.includes(' '); + + if (couldBeURL) { + newQuickActions.push({ + key: 'open-url', + label: ( + + ), + action: async () => { + const result = await dispatch(openURL({ url: trimmedValue })); + + 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}`, + ); + } + } + + unfocus(); + }, + }); + } + + const couldBeHashtag = + (trimmedValue.startsWith('#') && trimmedValue.length > 1) || + trimmedValue.match(HASHTAG_REGEX); + + if (couldBeHashtag) { + newQuickActions.push({ + key: 'go-to-hashtag', + label: ( + #{trimmedValue.replace(/^#/, '')} }} + /> + ), + action: () => { + const query = trimmedValue.replace(/^#/, ''); + history.push(`/tags/${query}`); + void dispatch(clickSearchResult({ q: query, type: 'hashtag' })); + unfocus(); + }, + }); + } + + const couldBeUsername = /^@?[a-z0-9_-]+(@[^\s]+)?$/i.exec(trimmedValue); + + if (couldBeUsername) { + newQuickActions.push({ + key: 'go-to-account', + label: ( + @{trimmedValue.replace(/^@/, '')} }} + /> + ), + action: () => { + const query = trimmedValue.replace(/^@/, ''); + history.push(`/@${query}`); + void dispatch(clickSearchResult({ q: query, type: 'account' })); + unfocus(); + }, + }); + } + + const couldBeStatusSearch = searchEnabled; + + if (couldBeStatusSearch && signedIn) { + newQuickActions.push({ + key: 'status-search', + label: ( + {trimmedValue} }} + /> + ), + action: () => { + submit(trimmedValue, 'statuses'); + }, + }); + } + + newQuickActions.push({ + key: 'account-search', + label: ( + {trimmedValue} }} + /> + ), + action: () => { + submit(trimmedValue, 'accounts'); + }, + }); + } + + setQuickActions(newQuickActions); + }, + [dispatch, history, signedIn, setValue, setQuickActions, submit], + ); + + const handleClear = useCallback(() => { + setValue(''); + setQuickActions([]); + setSelectedOption(-1); + }, [setValue, setQuickActions, setSelectedOption]); + + const handleKeyDown = useCallback( + (e: React.KeyboardEvent) => { + switch (e.key) { + case 'Escape': + e.preventDefault(); + unfocus(); + + break; + case 'ArrowDown': + e.preventDefault(); + + if (navigableOptions.length > 0) { + setSelectedOption( + Math.min(selectedOption + 1, navigableOptions.length - 1), + ); + } + + break; + case 'ArrowUp': + e.preventDefault(); + + if (navigableOptions.length > 0) { + setSelectedOption(Math.max(selectedOption - 1, -1)); + } + + break; + case 'Enter': + e.preventDefault(); + + if (selectedOption === -1) { + submit(value); + } else if (navigableOptions.length > 0) { + navigableOptions[selectedOption]?.action(e); + } + + break; + case 'Delete': + if (selectedOption > -1 && navigableOptions.length > 0) { + const search = navigableOptions[selectedOption]; + + if (typeof search?.forget === 'function') { + e.preventDefault(); + search.forget(e); + } + } + + break; + } + }, + [navigableOptions, value, selectedOption, setSelectedOption, submit], + ); + + const handleFocus = useCallback(() => { + setExpanded(true); + setSelectedOption(-1); + + if (searchInputRef.current && !singleColumn) { + const { left, right } = searchInputRef.current.getBoundingClientRect(); + + if ( + left < 0 || + right > (window.innerWidth || document.documentElement.clientWidth) + ) { + searchInputRef.current.scrollIntoView(); + } + } + }, [setExpanded, setSelectedOption, singleColumn]); + + const handleBlur = useCallback(() => { + setExpanded(false); + setSelectedOption(-1); + }, [setExpanded, setSelectedOption]); + + return ( +
    + + + + +
    + {!hasValue && ( + <> +

    + +

    + +
    + {recentOptions.length > 0 ? ( + recentOptions.map(({ label, key, action, forget }, i) => ( + + + )) + ) : ( +
    + +
    + )} +
    + + )} + + {quickActions.length > 0 && ( + <> +

    + +

    + +
    + {quickActions.map(({ key, label, action }, i) => ( + + ))} +
    + + )} + +

    + +

    + + {searchEnabled && signedIn ? ( +
    + {searchOptions.map(({ key, label, action }, i) => ( + + ))} +
    + ) : ( +
    + {searchEnabled ? ( + + ) : ( + + )} +
    + )} +
    +
    + ); +}; diff --git a/app/javascript/mastodon/features/compose/components/search_results.jsx b/app/javascript/mastodon/features/compose/components/search_results.jsx deleted file mode 100644 index 986d78e8b1..0000000000 --- a/app/javascript/mastodon/features/compose/components/search_results.jsx +++ /dev/null @@ -1,93 +0,0 @@ -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; -import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; -import TagIcon from '@/material-icons/400-24px/tag.svg?react'; -import { expandSearch } from 'mastodon/actions/search'; -import { Account } from 'mastodon/components/account'; -import { Icon } from 'mastodon/components/icon'; -import { LoadMore } from 'mastodon/components/load_more'; -import { LoadingIndicator } from 'mastodon/components/loading_indicator'; -import { SearchSection } from 'mastodon/features/explore/components/search_section'; -import { useAppDispatch, useAppSelector } from 'mastodon/store'; - -import { ImmutableHashtag as Hashtag } from '../../../components/hashtag'; -import StatusContainer from '../../../containers/status_container'; - -const INITIAL_PAGE_LIMIT = 10; - -const withoutLastResult = list => { - if (list.size > INITIAL_PAGE_LIMIT && list.size % INITIAL_PAGE_LIMIT === 1) { - return list.skipLast(1); - } else { - return list; - } -}; - -export const SearchResults = () => { - const results = useAppSelector((state) => state.getIn(['search', 'results'])); - const isLoading = useAppSelector((state) => state.getIn(['search', 'isLoading'])); - - const dispatch = useAppDispatch(); - - const handleLoadMoreAccounts = useCallback(() => { - dispatch(expandSearch('accounts')); - }, [dispatch]); - - const handleLoadMoreStatuses = useCallback(() => { - dispatch(expandSearch('statuses')); - }, [dispatch]); - - const handleLoadMoreHashtags = useCallback(() => { - dispatch(expandSearch('hashtags')); - }, [dispatch]); - - let accounts, statuses, hashtags; - - if (results.get('accounts') && results.get('accounts').size > 0) { - accounts = ( - }> - {withoutLastResult(results.get('accounts')).map(accountId => )} - {(results.get('accounts').size > INITIAL_PAGE_LIMIT && results.get('accounts').size % INITIAL_PAGE_LIMIT === 1) && } - - ); - } - - if (results.get('hashtags') && results.get('hashtags').size > 0) { - hashtags = ( - }> - {withoutLastResult(results.get('hashtags')).map(hashtag => )} - {(results.get('hashtags').size > INITIAL_PAGE_LIMIT && results.get('hashtags').size % INITIAL_PAGE_LIMIT === 1) && } - - ); - } - - if (results.get('statuses') && results.get('statuses').size > 0) { - statuses = ( - }> - {withoutLastResult(results.get('statuses')).map(statusId => )} - {(results.get('statuses').size > INITIAL_PAGE_LIMIT && results.get('statuses').size % INITIAL_PAGE_LIMIT === 1) && } - - ); - } - - return ( -
    - {!accounts && !hashtags && !statuses && ( - isLoading ? ( - - ) : ( -
    - -
    - ) - )} - {accounts} - {hashtags} - {statuses} -
    - ); - -}; diff --git a/app/javascript/mastodon/features/compose/containers/search_container.js b/app/javascript/mastodon/features/compose/containers/search_container.js deleted file mode 100644 index 616b91369c..0000000000 --- a/app/javascript/mastodon/features/compose/containers/search_container.js +++ /dev/null @@ -1,59 +0,0 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { connect } from 'react-redux'; - -import { - changeSearch, - clearSearch, - submitSearch, - showSearch, - openURL, - clickSearchResult, - forgetSearchResult, -} from 'mastodon/actions/search'; - -import Search from '../components/search'; - -const getRecentSearches = createSelector( - state => state.getIn(['search', 'recent']), - recent => recent.reverse(), -); - -const mapStateToProps = state => ({ - value: state.getIn(['search', 'value']), - submitted: state.getIn(['search', 'submitted']), - recent: getRecentSearches(state), -}); - -const mapDispatchToProps = dispatch => ({ - - onChange (value) { - dispatch(changeSearch(value)); - }, - - onClear () { - dispatch(clearSearch()); - }, - - onSubmit (type) { - dispatch(submitSearch(type)); - }, - - onShow () { - dispatch(showSearch()); - }, - - onOpenURL (q, routerHistory) { - dispatch(openURL(q, routerHistory)); - }, - - onClickSearchResult (q, type) { - dispatch(clickSearchResult(q, type)); - }, - - onForgetSearchResult (q) { - dispatch(forgetSearchResult(q)); - }, - -}); - -export default connect(mapStateToProps, mapDispatchToProps)(Search); diff --git a/app/javascript/mastodon/features/compose/index.jsx b/app/javascript/mastodon/features/compose/index.jsx index 3a96ab49c3..660f08615b 100644 --- a/app/javascript/mastodon/features/compose/index.jsx +++ b/app/javascript/mastodon/features/compose/index.jsx @@ -9,8 +9,6 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import spring from 'react-motion/lib/spring'; - import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import LogoutIcon from '@/material-icons/400-24px/logout.svg?react'; @@ -26,11 +24,9 @@ import elephantUIPlane from '../../../images/elephant_ui_plane.svg'; import { changeComposing, mountCompose, unmountCompose } from '../../actions/compose'; import { mascot } from '../../initial_state'; import { isMobile } from '../../is_mobile'; -import Motion from '../ui/util/optional_motion'; -import { SearchResults } from './components/search_results'; +import { Search } from './components/search'; import ComposeFormContainer from './containers/compose_form_container'; -import SearchContainer from './containers/search_container'; const messages = defineMessages({ start: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, @@ -43,9 +39,8 @@ const messages = defineMessages({ compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new post' }, }); -const mapStateToProps = (state, ownProps) => ({ +const mapStateToProps = (state) => ({ columns: state.getIn(['settings', 'columns']), - showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : false, }); class Compose extends PureComponent { @@ -54,7 +49,6 @@ class Compose extends PureComponent { dispatch: PropTypes.func.isRequired, columns: ImmutablePropTypes.list.isRequired, multiColumn: PropTypes.bool, - showSearch: PropTypes.bool, intl: PropTypes.object.isRequired, }; @@ -88,7 +82,7 @@ class Compose extends PureComponent { }; render () { - const { multiColumn, showSearch, intl } = this.props; + const { multiColumn, intl } = this.props; if (multiColumn) { const { columns } = this.props; @@ -113,7 +107,7 @@ class Compose extends PureComponent { - {multiColumn && } + {multiColumn && }
    @@ -123,14 +117,6 @@ class Compose extends PureComponent {
    - - - {({ x }) => ( -
    - -
    - )} -
    ); diff --git a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js index 9d6ff5226a..022c9baaf7 100644 --- a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js +++ b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js @@ -90,8 +90,8 @@ describe('emoji', () => { }); it('keeps ordering as expected (issue fixed by PR 20677)', () => { - expect(emojify('

    💕 #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 }) => ( -
    -
    -

    {title}

    - {onClickMore && } -
    - - {children} -
    -); - -SearchSection.propTypes = { - title: PropTypes.node.isRequired, - onClickMore: PropTypes.func, - children: PropTypes.children, -}; \ No newline at end of file diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx deleted file mode 100644 index 83e5df22f8..0000000000 --- a/app/javascript/mastodon/features/explore/index.jsx +++ /dev/null @@ -1,114 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { Helmet } from 'react-helmet'; -import { NavLink, Switch, Route } from 'react-router-dom'; - -import { connect } from 'react-redux'; - -import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; -import SearchIcon from '@/material-icons/400-24px/search.svg?react'; -import Column from 'mastodon/components/column'; -import ColumnHeader from 'mastodon/components/column_header'; -import Search from 'mastodon/features/compose/containers/search_container'; -import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; -import { trendsEnabled } from 'mastodon/initial_state'; - -import Links from './links'; -import SearchResults from './results'; -import Statuses from './statuses'; -import Suggestions from './suggestions'; -import Tags from './tags'; - -const messages = defineMessages({ - title: { id: 'explore.title', defaultMessage: 'Explore' }, - searchResults: { id: 'explore.search_results', defaultMessage: 'Search results' }, -}); - -const mapStateToProps = state => ({ - layout: state.getIn(['meta', 'layout']), - isSearching: state.getIn(['search', 'submitted']) || !trendsEnabled, -}); - -class Explore extends PureComponent { - static propTypes = { - identity: identityContextPropShape, - intl: PropTypes.object.isRequired, - multiColumn: PropTypes.bool, - isSearching: PropTypes.bool, - }; - - handleHeaderClick = () => { - this.column.scrollTop(); - }; - - setRef = c => { - this.column = c; - }; - - render() { - const { intl, multiColumn, isSearching } = this.props; - const { signedIn } = this.props.identity; - - return ( - - - -
    - -
    - - {isSearching ? ( - - ) : ( - <> -
    - - - - - - - - - {signedIn && ( - - - - )} - - - - -
    - - - - - - - - - - - - {intl.formatMessage(messages.title)} - - - - )} -
    - ); - } - -} - -export default withIdentity(connect(mapStateToProps)(injectIntl(Explore))); diff --git a/app/javascript/mastodon/features/explore/index.tsx b/app/javascript/mastodon/features/explore/index.tsx new file mode 100644 index 0000000000..671d92d6b4 --- /dev/null +++ b/app/javascript/mastodon/features/explore/index.tsx @@ -0,0 +1,105 @@ +import { useCallback, useRef } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; +import { NavLink, Switch, Route } from 'react-router-dom'; + +import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; +import { Column } from 'mastodon/components/column'; +import type { ColumnRef } from 'mastodon/components/column'; +import { ColumnHeader } from 'mastodon/components/column_header'; +import { Search } from 'mastodon/features/compose/components/search'; +import { useIdentity } from 'mastodon/identity_context'; + +import Links from './links'; +import Statuses from './statuses'; +import Suggestions from './suggestions'; +import Tags from './tags'; + +const messages = defineMessages({ + title: { id: 'explore.title', defaultMessage: 'Explore' }, +}); + +const Explore: React.FC<{ multiColumn: boolean }> = ({ multiColumn }) => { + const { signedIn } = useIdentity(); + const intl = useIntl(); + const columnRef = useRef(null); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, []); + + return ( + + + +
    + +
    + +
    + + + + + + + + + {signedIn && ( + + + + )} + + + + +
    + + + + + + + + + + + + {intl.formatMessage(messages.title)} + + +
    + ); +}; + +// eslint-disable-next-line import/no-default-export +export default Explore; diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx deleted file mode 100644 index 00359b0e3d..0000000000 --- a/app/javascript/mastodon/features/explore/results.jsx +++ /dev/null @@ -1,232 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; - -import { Helmet } from 'react-helmet'; - -import { List as ImmutableList } from 'immutable'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { connect } from 'react-redux'; - -import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; -import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; -import TagIcon from '@/material-icons/400-24px/tag.svg?react'; -import { submitSearch, expandSearch } from 'mastodon/actions/search'; -import { Account } from 'mastodon/components/account'; -import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; -import { Icon } from 'mastodon/components/icon'; -import ScrollableList from 'mastodon/components/scrollable_list'; -import Status from 'mastodon/containers/status_container'; - -import { SearchSection } from './components/search_section'; - -const messages = defineMessages({ - title: { id: 'search_results.title', defaultMessage: 'Search for {q}' }, -}); - -const mapStateToProps = state => ({ - isLoading: state.getIn(['search', 'isLoading']), - results: state.getIn(['search', 'results']), - q: state.getIn(['search', 'searchTerm']), - submittedType: state.getIn(['search', 'type']), -}); - -const INITIAL_PAGE_LIMIT = 10; -const INITIAL_DISPLAY = 4; - -const hidePeek = list => { - if (list.size > INITIAL_PAGE_LIMIT && list.size % INITIAL_PAGE_LIMIT === 1) { - return list.skipLast(1); - } else { - return list; - } -}; - -const renderAccounts = accounts => hidePeek(accounts).map(id => ( - -)); - -const renderHashtags = hashtags => hidePeek(hashtags).map(hashtag => ( - -)); - -const renderStatuses = statuses => hidePeek(statuses).map(id => ( - -)); - -class Results extends PureComponent { - - static propTypes = { - results: ImmutablePropTypes.contains({ - accounts: ImmutablePropTypes.orderedSet, - statuses: ImmutablePropTypes.orderedSet, - hashtags: ImmutablePropTypes.orderedSet, - }), - isLoading: PropTypes.bool, - multiColumn: PropTypes.bool, - dispatch: PropTypes.func.isRequired, - q: PropTypes.string, - intl: PropTypes.object, - submittedType: PropTypes.oneOf(['accounts', 'statuses', 'hashtags']), - }; - - state = { - type: this.props.submittedType || 'all', - }; - - static getDerivedStateFromProps(props, state) { - if (props.submittedType !== state.type) { - return { - type: props.submittedType || 'all', - }; - } - - return null; - } - - handleSelectAll = () => { - const { submittedType, dispatch } = this.props; - - // If we originally searched for a specific type, we need to resubmit - // the query to get all types of results - if (submittedType) { - dispatch(submitSearch()); - } - - this.setState({ type: 'all' }); - }; - - handleSelectAccounts = () => { - const { submittedType, dispatch } = this.props; - - // If we originally searched for something else (but not everything), - // we need to resubmit the query for this specific type - if (submittedType !== 'accounts') { - dispatch(submitSearch('accounts')); - } - - this.setState({ type: 'accounts' }); - }; - - handleSelectHashtags = () => { - const { submittedType, dispatch } = this.props; - - // If we originally searched for something else (but not everything), - // we need to resubmit the query for this specific type - if (submittedType !== 'hashtags') { - dispatch(submitSearch('hashtags')); - } - - this.setState({ type: 'hashtags' }); - }; - - handleSelectStatuses = () => { - const { submittedType, dispatch } = this.props; - - // If we originally searched for something else (but not everything), - // we need to resubmit the query for this specific type - if (submittedType !== 'statuses') { - dispatch(submitSearch('statuses')); - } - - this.setState({ type: 'statuses' }); - }; - - handleLoadMoreAccounts = () => this._loadMore('accounts'); - handleLoadMoreStatuses = () => this._loadMore('statuses'); - handleLoadMoreHashtags = () => this._loadMore('hashtags'); - - _loadMore (type) { - const { dispatch } = this.props; - dispatch(expandSearch(type)); - } - - handleLoadMore = () => { - const { type } = this.state; - - if (type !== 'all') { - this._loadMore(type); - } - }; - - render () { - const { intl, isLoading, q, results } = this.props; - const { type } = this.state; - - // We request 1 more result than we display so we can tell if there'd be a next page - const hasMore = type !== 'all' ? results.get(type, ImmutableList()).size > INITIAL_PAGE_LIMIT && results.get(type).size % INITIAL_PAGE_LIMIT === 1 : false; - - let filteredResults; - - const accounts = results.get('accounts', ImmutableList()); - const hashtags = results.get('hashtags', ImmutableList()); - const statuses = results.get('statuses', ImmutableList()); - - switch(type) { - case 'all': - filteredResults = (accounts.size + hashtags.size + statuses.size) > 0 ? ( - <> - {accounts.size > 0 && ( - } onClickMore={this.handleLoadMoreAccounts}> - {accounts.take(INITIAL_DISPLAY).map(id => )} - - )} - - {hashtags.size > 0 && ( - } onClickMore={this.handleLoadMoreHashtags}> - {hashtags.take(INITIAL_DISPLAY).map(hashtag => )} - - )} - - {statuses.size > 0 && ( - } onClickMore={this.handleLoadMoreStatuses}> - {statuses.take(INITIAL_DISPLAY).map(id => )} - - )} - - ) : []; - break; - case 'accounts': - filteredResults = renderAccounts(accounts); - break; - case 'hashtags': - filteredResults = renderHashtags(hashtags); - break; - case 'statuses': - filteredResults = renderStatuses(statuses); - break; - } - - return ( - <> -
    - - - - -
    - -
    - } - bindToDocument - > - {filteredResults} - -
    - - - {intl.formatMessage(messages.title, { q })} - - - ); - } - -} - -export default connect(mapStateToProps)(injectIntl(Results)); diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.jsx b/app/javascript/mastodon/features/getting_started/components/announcements.jsx index 3c0b53b9e7..713ad9f069 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.jsx +++ b/app/javascript/mastodon/features/getting_started/components/announcements.jsx @@ -85,7 +85,7 @@ class ContentWithRouter extends ImmutablePureComponent { } link.setAttribute('target', '_blank'); - link.setAttribute('rel', 'noopener noreferrer'); + link.setAttribute('rel', 'noopener'); } } diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index 0b317eb049..ff3166da35 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -27,7 +27,7 @@ import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; -import LinkFooter from 'mastodon/features/ui/components/link_footer'; +import { LinkFooter } from 'mastodon/features/ui/components/link_footer'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions'; diff --git a/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx b/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx index 3075aff31b..65ccd7c276 100644 --- a/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx +++ b/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx @@ -28,7 +28,7 @@ export const RelationshipsSeveranceEvent = ({ type, target, followingCount, foll

    {intl.formatMessage(messages[type], { from: {domain}, target: {target}, followingCount, followersCount })}

    - +
    ); diff --git a/app/javascript/mastodon/features/notifications/components/report.jsx b/app/javascript/mastodon/features/notifications/components/report.jsx index 52d6bfee9d..ed043ae789 100644 --- a/app/javascript/mastodon/features/notifications/components/report.jsx +++ b/app/javascript/mastodon/features/notifications/components/report.jsx @@ -55,7 +55,7 @@ class Report extends ImmutablePureComponent {
    - {intl.formatMessage(messages.openReport)} + {intl.formatMessage(messages.openReport)}
    diff --git a/app/javascript/mastodon/features/notifications_v2/components/embedded_status.tsx b/app/javascript/mastodon/features/notifications_v2/components/embedded_status.tsx index ca0d1bc850..88e65c668b 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/embedded_status.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/embedded_status.tsx @@ -70,7 +70,7 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({ if (button === 0 && !(ctrlKey || metaKey)) { history.push(path); } else if (button === 1 || (button === 0 && (ctrlKey || metaKey))) { - window.open(path, '_blank', 'noreferrer noopener'); + window.open(path, '_blank', 'noopener'); } } diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_favourite.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_favourite.tsx index 49866540e5..23ead604ba 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_favourite.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_favourite.tsx @@ -33,6 +33,34 @@ const labelRenderer: LabelRenderer = (displayedName, total, seeMoreHref) => { ); }; +const privateLabelRenderer: LabelRenderer = ( + displayedName, + total, + seeMoreHref, +) => { + if (total === 1) + return ( + + ); + + return ( + + seeMoreHref ? {chunks} : chunks, + }} + /> + ); +}; + export const NotificationFavourite: React.FC<{ notification: NotificationGroupFavourite; unread: boolean; @@ -44,6 +72,10 @@ export const NotificationFavourite: React.FC<{ ?.acct, ); + const isPrivateMention = useAppSelector( + (state) => state.statuses.getIn([statusId, 'visibility']) === 'direct', + ); + return ( { - this.setState({ content: data.content, lastUpdated: data.updated_at, isLoading: false }); - }).catch(() => { - this.setState({ isLoading: false }); - }); - } - - render () { - const { intl, multiColumn } = this.props; - const { isLoading, content, lastUpdated } = this.state; - - return ( - -
    -
    -

    -

    : }} />

    -
    - -
    -
    - - - {intl.formatMessage(messages.title)} - - - - ); - } - -} - -export default injectIntl(PrivacyPolicy); diff --git a/app/javascript/mastodon/features/privacy_policy/index.tsx b/app/javascript/mastodon/features/privacy_policy/index.tsx new file mode 100644 index 0000000000..f0309c2712 --- /dev/null +++ b/app/javascript/mastodon/features/privacy_policy/index.tsx @@ -0,0 +1,90 @@ +import { useState, useEffect } from 'react'; + +import { + FormattedMessage, + FormattedDate, + useIntl, + defineMessages, +} from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { apiGetPrivacyPolicy } from 'mastodon/api/instance'; +import type { ApiPrivacyPolicyJSON } from 'mastodon/api_types/instance'; +import { Column } from 'mastodon/components/column'; +import { Skeleton } from 'mastodon/components/skeleton'; + +const messages = defineMessages({ + title: { id: 'privacy_policy.title', defaultMessage: 'Privacy Policy' }, +}); + +const PrivacyPolicy: React.FC<{ + multiColumn: boolean; +}> = ({ multiColumn }) => { + const intl = useIntl(); + const [response, setResponse] = useState(); + const [loading, setLoading] = useState(true); + + useEffect(() => { + apiGetPrivacyPolicy() + .then((data) => { + setResponse(data); + setLoading(false); + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, []); + + return ( + +
    +
    +

    + +

    +

    + + ) : ( + + ), + }} + /> +

    +
    + + {response && ( +
    + )} +
    + + + {intl.formatMessage(messages.title)} + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default PrivacyPolicy; diff --git a/app/javascript/mastodon/features/search/components/search_section.tsx b/app/javascript/mastodon/features/search/components/search_section.tsx new file mode 100644 index 0000000000..ae0c129676 --- /dev/null +++ b/app/javascript/mastodon/features/search/components/search_section.tsx @@ -0,0 +1,23 @@ +import { FormattedMessage } from 'react-intl'; + +export const SearchSection: React.FC<{ + title: React.ReactNode; + onClickMore?: () => void; + children: React.ReactNode; +}> = ({ title, onClickMore, children }) => ( +
    +
    +

    {title}

    + {onClickMore && ( + + )} +
    + + {children} +
    +); diff --git a/app/javascript/mastodon/features/search/index.tsx b/app/javascript/mastodon/features/search/index.tsx new file mode 100644 index 0000000000..d7fd3f9663 --- /dev/null +++ b/app/javascript/mastodon/features/search/index.tsx @@ -0,0 +1,304 @@ +import { useCallback, useEffect, useRef } from 'react'; + +import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSearchParam } from '@/hooks/useSearchParam'; +import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; +import { submitSearch, expandSearch } from 'mastodon/actions/search'; +import type { ApiSearchType } from 'mastodon/api_types/search'; +import { Account } from 'mastodon/components/account'; +import { Column } from 'mastodon/components/column'; +import type { ColumnRef } from 'mastodon/components/column'; +import { ColumnHeader } from 'mastodon/components/column_header'; +import { CompatibilityHashtag as Hashtag } from 'mastodon/components/hashtag'; +import { Icon } from 'mastodon/components/icon'; +import ScrollableList from 'mastodon/components/scrollable_list'; +import Status from 'mastodon/containers/status_container'; +import { Search } from 'mastodon/features/compose/components/search'; +import type { Hashtag as HashtagType } from 'mastodon/models/tags'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +import { SearchSection } from './components/search_section'; + +const messages = defineMessages({ + title: { id: 'search_results.title', defaultMessage: 'Search for "{q}"' }, +}); + +const INITIAL_PAGE_LIMIT = 10; +const INITIAL_DISPLAY = 4; + +const hidePeek = (list: T[]) => { + if ( + list.length > INITIAL_PAGE_LIMIT && + list.length % INITIAL_PAGE_LIMIT === 1 + ) { + return list.slice(0, -2); + } else { + return list; + } +}; + +const renderAccounts = (accountIds: string[]) => + hidePeek(accountIds).map((id) => ); + +const renderHashtags = (hashtags: HashtagType[]) => + hidePeek(hashtags).map((hashtag) => ( + + )); + +const renderStatuses = (statusIds: string[]) => + hidePeek(statusIds).map((id) => ( + // @ts-expect-error inferred props are wrong + + )); + +type SearchType = 'all' | ApiSearchType; + +const typeFromParam = (param?: string): SearchType => { + if (param && ['all', 'accounts', 'statuses', 'hashtags'].includes(param)) { + return param as SearchType; + } else { + return 'all'; + } +}; + +export const SearchResults: React.FC<{ multiColumn: boolean }> = ({ + multiColumn, +}) => { + const columnRef = useRef(null); + const intl = useIntl(); + const [q] = useSearchParam('q'); + const [type, setType] = useSearchParam('type'); + const isLoading = useAppSelector((state) => state.search.loading); + const results = useAppSelector((state) => state.search.results); + const dispatch = useAppDispatch(); + const mappedType = typeFromParam(type); + const trimmedValue = q?.trim() ?? ''; + + useEffect(() => { + if (trimmedValue.length > 0) { + void dispatch( + submitSearch({ + q: trimmedValue, + type: mappedType === 'all' ? undefined : mappedType, + }), + ); + } + }, [dispatch, trimmedValue, mappedType]); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, []); + + const handleSelectAll = useCallback(() => { + setType(null); + }, [setType]); + + const handleSelectAccounts = useCallback(() => { + setType('accounts'); + }, [setType]); + + const handleSelectHashtags = useCallback(() => { + setType('hashtags'); + }, [setType]); + + const handleSelectStatuses = useCallback(() => { + setType('statuses'); + }, [setType]); + + const handleLoadMore = useCallback(() => { + if (mappedType !== 'all') { + void dispatch(expandSearch({ type: mappedType })); + } + }, [dispatch, mappedType]); + + // We request 1 more result than we display so we can tell if there'd be a next page + const hasMore = + mappedType !== 'all' && results + ? results[mappedType].length > INITIAL_PAGE_LIMIT && + results[mappedType].length % INITIAL_PAGE_LIMIT === 1 + : false; + + let filteredResults; + + if (results) { + switch (mappedType) { + case 'all': + filteredResults = + results.accounts.length + + results.hashtags.length + + results.statuses.length > + 0 ? ( + <> + {results.accounts.length > 0 && ( + + + + + } + onClickMore={handleSelectAccounts} + > + {results.accounts.slice(0, INITIAL_DISPLAY).map((id) => ( + + ))} + + )} + + {results.hashtags.length > 0 && ( + + + + + } + onClickMore={handleSelectHashtags} + > + {results.hashtags.slice(0, INITIAL_DISPLAY).map((hashtag) => ( + + ))} + + )} + + {results.statuses.length > 0 && ( + + + + + } + onClickMore={handleSelectStatuses} + > + {results.statuses.slice(0, INITIAL_DISPLAY).map((id) => ( + // @ts-expect-error inferred props are wrong + + ))} + + )} + + ) : ( + [] + ); + break; + case 'accounts': + filteredResults = renderAccounts(results.accounts); + break; + case 'hashtags': + filteredResults = renderHashtags(results.hashtags); + break; + case 'statuses': + filteredResults = renderStatuses(results.statuses); + break; + } + } + + return ( + + + +
    + +
    + +
    + + + + +
    + +
    + 0 ? ( + + ) : ( + + ) + } + bindToDocument + > + {filteredResults} + +
    + + + {intl.formatMessage(messages.title, { q })} + + +
    + ); +}; + +// eslint-disable-next-line import/no-default-export +export default SearchResults; diff --git a/app/javascript/mastodon/features/standalone/status/index.tsx b/app/javascript/mastodon/features/standalone/status/index.tsx index d5cb7e7f40..3b68c5c176 100644 --- a/app/javascript/mastodon/features/standalone/status/index.tsx +++ b/app/javascript/mastodon/features/standalone/status/index.tsx @@ -61,7 +61,7 @@ const Embed: React.FC<{ id: string }> = ({ id }) => { className='embed__overlay' href={permalink} target='_blank' - rel='noreferrer noopener' + rel='noopener' aria-label='' />
    diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index 136a5568a4..f8d5a26aff 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -208,7 +208,7 @@ export default class Card extends PureComponent {
    - +
    ) : spoilerButton} @@ -219,7 +219,7 @@ export default class Card extends PureComponent { return ( ); } else if (card.get('image')) { @@ -239,7 +239,7 @@ export default class Card extends PureComponent { return ( <> - + {embed} {description} diff --git a/app/javascript/mastodon/features/terms_of_service/index.tsx b/app/javascript/mastodon/features/terms_of_service/index.tsx new file mode 100644 index 0000000000..05033bffec --- /dev/null +++ b/app/javascript/mastodon/features/terms_of_service/index.tsx @@ -0,0 +1,95 @@ +import { useState, useEffect } from 'react'; + +import { + FormattedMessage, + FormattedDate, + useIntl, + defineMessages, +} from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { apiGetTermsOfService } from 'mastodon/api/instance'; +import type { ApiTermsOfServiceJSON } from 'mastodon/api_types/instance'; +import { Column } from 'mastodon/components/column'; +import { Skeleton } from 'mastodon/components/skeleton'; +import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; + +const messages = defineMessages({ + title: { id: 'terms_of_service.title', defaultMessage: 'Terms of Service' }, +}); + +const TermsOfService: React.FC<{ + multiColumn: boolean; +}> = ({ multiColumn }) => { + const intl = useIntl(); + const [response, setResponse] = useState(); + const [loading, setLoading] = useState(true); + + useEffect(() => { + apiGetTermsOfService() + .then((data) => { + setResponse(data); + setLoading(false); + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, []); + + if (!loading && !response) { + return ; + } + + return ( + +
    +
    +

    + +

    +

    + + ) : ( + + ), + }} + /> +

    +
    + + {response && ( +
    + )} +
    + + + {intl.formatMessage(messages.title)} + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default TermsOfService; diff --git a/app/javascript/mastodon/features/ui/components/actions_modal.jsx b/app/javascript/mastodon/features/ui/components/actions_modal.jsx index 4e0879580b..851f828b4e 100644 --- a/app/javascript/mastodon/features/ui/components/actions_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/actions_modal.jsx @@ -24,7 +24,7 @@ export default class ActionsModal extends ImmutablePureComponent { return (
  • - + {icon && }
    {text}
    diff --git a/app/javascript/mastodon/features/ui/components/compose_panel.jsx b/app/javascript/mastodon/features/ui/components/compose_panel.jsx index 18321cbe63..e622c8859a 100644 --- a/app/javascript/mastodon/features/ui/components/compose_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/compose_panel.jsx @@ -5,12 +5,11 @@ import { connect } from 'react-redux'; import { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose'; import ServerBanner from 'mastodon/components/server_banner'; +import { Search } from 'mastodon/features/compose/components/search'; import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container'; -import SearchContainer from 'mastodon/features/compose/containers/search_container'; +import { LinkFooter } from 'mastodon/features/ui/components/link_footer'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; -import LinkFooter from './link_footer'; - class ComposePanel extends PureComponent { static propTypes = { identity: identityContextPropShape, @@ -42,7 +41,7 @@ class ComposePanel extends PureComponent { return (
    - + {!signedIn && ( <> diff --git a/app/javascript/mastodon/features/ui/components/link_footer.jsx b/app/javascript/mastodon/features/ui/components/link_footer.jsx deleted file mode 100644 index 49b21c2e48..0000000000 --- a/app/javascript/mastodon/features/ui/components/link_footer.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { FormattedMessage, injectIntl } from 'react-intl'; - -import { Link } from 'react-router-dom'; - -import { connect } from 'react-redux'; - -import { openModal } from 'mastodon/actions/modal'; -import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; -import { domain, version, source_url, statusPageUrl, profile_directory as profileDirectory } from 'mastodon/initial_state'; -import { PERMISSION_INVITE_USERS } from 'mastodon/permissions'; - -const mapDispatchToProps = (dispatch) => ({ - onLogout () { - dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT' })); - - }, -}); - -class LinkFooter extends PureComponent { - static propTypes = { - identity: identityContextPropShape, - multiColumn: PropTypes.bool, - onLogout: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - }; - - handleLogoutClick = e => { - e.preventDefault(); - e.stopPropagation(); - - this.props.onLogout(); - - return false; - }; - - render () { - const { signedIn, permissions } = this.props.identity; - const { multiColumn } = this.props; - - const canInvite = signedIn && ((permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS); - const canProfileDirectory = profileDirectory; - - const DividingCircle = {' · '}; - - return ( -
    -

    - {domain}: - {' '} - - {statusPageUrl && ( - <> - {DividingCircle} - - - )} - {canInvite && ( - <> - {DividingCircle} - - - )} - {canProfileDirectory && ( - <> - {DividingCircle} - - - )} - {DividingCircle} - -

    - -

    - Mastodon: - {' '} - - {DividingCircle} - - {DividingCircle} - - {DividingCircle} - - {DividingCircle} - v{version} -

    -
    - ); - } - -} - -export default injectIntl(withIdentity(connect(null, mapDispatchToProps)(LinkFooter))); diff --git a/app/javascript/mastodon/features/ui/components/link_footer.tsx b/app/javascript/mastodon/features/ui/components/link_footer.tsx new file mode 100644 index 0000000000..cbfb6a3114 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/link_footer.tsx @@ -0,0 +1,101 @@ +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { + domain, + version, + source_url, + statusPageUrl, + profile_directory as canProfileDirectory, + termsOfServiceEnabled, +} from 'mastodon/initial_state'; + +const DividingCircle: React.FC = () => {' · '}; + +export const LinkFooter: React.FC<{ + multiColumn: boolean; +}> = ({ multiColumn }) => { + return ( +
    +

    + {domain}:{' '} + + + + {statusPageUrl && ( + <> + + + + + + )} + {canProfileDirectory && ( + <> + + + + + + )} + + + + + {termsOfServiceEnabled && ( + <> + + + + + + )} +

    + +

    + Mastodon:{' '} + + + + + + + + + + + + + + + + + v{version} +

    +
    + ); +}; diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index ec51171a2c..80f100eab2 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -80,6 +80,7 @@ import { OnboardingProfile, OnboardingFollows, Explore, + Search, About, PrivacyPolicy, CommunityTimeline, @@ -89,6 +90,7 @@ import { CircleMembers, BookmarkCategoryEdit, ReactionDeck, + TermsOfService, } from './util/async-components'; import { ColumnsContextProvider } from './util/columns_context'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; @@ -217,6 +219,7 @@ class SwitchingColumnsArea extends PureComponent { + @@ -259,7 +262,8 @@ class SwitchingColumnsArea extends PureComponent { - + + diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 37b12de04a..d8a1641c07 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -230,6 +230,10 @@ export function Explore () { return import(/* webpackChunkName: "features/explore" */'../../explore'); } +export function Search () { + return import(/* webpackChunkName: "features/explore" */'../../search'); +} + export function FilterModal () { return import(/*webpackChunkName: "modals/filter_modal" */'../components/filter_modal'); } @@ -254,6 +258,10 @@ export function PrivacyPolicy () { return import(/*webpackChunkName: "features/privacy_policy" */'../../privacy_policy'); } +export function TermsOfService () { + return import(/*webpackChunkName: "features/terms_of_service" */'../../terms_of_service'); +} + export function NotificationRequests () { return import(/*webpackChunkName: "features/notifications/requests" */'../../notifications/requests'); } diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index ecb99f38d7..afe19366a9 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -69,6 +69,8 @@ * @property {boolean=} use_pending_items * @property {string} version * @property {string} sso_redirect + * @property {string} status_page_url + * @property {boolean} terms_of_service_enabled */ /** @@ -165,10 +167,9 @@ export const usePendingItems = getMeta('use_pending_items'); export const version = getMeta('version'); export const languages = initialState?.languages; export const criticalUpdatesPending = initialState?.critical_updates_pending; -// @ts-expect-error export const statusPageUrl = getMeta('status_page_url'); export const sso_redirect = getMeta('sso_redirect'); - +export const termsOfServiceEnabled = getMeta('terms_of_service_enabled'); /** * @returns {string | undefined} */ diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 4bba9976eb..1871befb66 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -152,7 +152,6 @@ "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", "empty_column.list": "Hierdie lys is nog leeg. Nuwe plasings deur lyslede sal voortaan hier verskyn.", "empty_column.notifications": "Jy het nog geen kennisgewings nie. Interaksie van ander mense met jou, sal hier vertoon.", - "explore.search_results": "Soekresultate", "explore.suggested_follows": "Mense", "explore.trending_links": "Nuus", "filter_modal.added.settings_link": "instellings bladsy", @@ -162,7 +161,6 @@ "footer.about": "Oor", "footer.directory": "Profielgids", "footer.get_app": "Kry die app", - "footer.invite": "Nooi ander", "footer.keyboard_shortcuts": "Kortpadsleutels", "footer.privacy_policy": "Privaatheidsbeleid", "footer.source_code": "Wys bronkode", @@ -259,9 +257,7 @@ "search.search_or_paste": "Soek of plak URL", "search_results.all": "Alles", "search_results.hashtags": "Hutsetiket", - "search_results.nothing_found": "Hierdie soekwoorde lewer niks op nie", "search_results.statuses": "Plasings", - "search_results.title": "Soek {q}", "server_banner.administered_by": "Administrasie deur:", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open hierdie plasing as moderator", diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index c0fc8bd9f1..3901f5f008 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -192,7 +192,6 @@ "error.unexpected_crash.next_steps_addons": "Intenta deshabilitar-los y recarga la pachina. Si ixo no aduya, podrías usar Mastodon a traviés d'un navegador web diferent u aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar lo seguimiento de pila en o portafuellas", "errors.unexpected_crash.report_issue": "Informar d'un problema/error", - "explore.search_results": "Resultaus de busqueda", "explore.title": "Explorar", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicacions", @@ -219,7 +218,6 @@ "footer.about": "Sobre", "footer.directory": "Directorio de perfils", "footer.get_app": "Obtener l'aplicación", - "footer.invite": "Convidar chent", "footer.keyboard_shortcuts": "Alcorces de teclau", "footer.privacy_policy": "Politica de privacidat", "footer.source_code": "Veyer codigo fuent", @@ -432,9 +430,7 @@ "search_popout.full_text_search_logged_out_message": "Nomás disponible iniciando la sesión.", "search_results.all": "Totz", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "No se podió trobar cosa pa estes termins de busqueda", "search_results.statuses": "Publicacions", - "search_results.title": "Buscar {q}", "server_banner.about_active_users": "Usuarios activos en o servidor entre los zaguers 30 días (Usuarios Activos Mensuals)", "server_banner.active_users": "usuarios activos", "server_banner.administered_by": "Administrau per:", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index e3183ac4ab..4b46ed6117 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -274,7 +274,6 @@ "error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", - "explore.search_results": "نتائج البحث", "explore.suggested_follows": "أشخاص", "explore.title": "استكشف", "explore.trending_links": "المُستجدّات", @@ -322,7 +321,6 @@ "footer.about": "عن", "footer.directory": "دليل الصفحات التعريفية", "footer.get_app": "احصل على التطبيق", - "footer.invite": "دعوة أشخاص", "footer.keyboard_shortcuts": "اختصارات لوحة المفاتيح", "footer.privacy_policy": "سياسة الخصوصية", "footer.source_code": "الاطلاع على الشفرة المصدرية", @@ -681,10 +679,8 @@ "search_results.accounts": "الصفحات التعريفية", "search_results.all": "الكل", "search_results.hashtags": "الوُسوم", - "search_results.nothing_found": "تعذر العثور على نتائج تتضمن هذه المصطلحات", "search_results.see_all": "رؤية الكل", "search_results.statuses": "المنشورات", - "search_results.title": "البحث عن {q}", "server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)", "server_banner.active_users": "مستخدم نشط", "server_banner.administered_by": "يُديره:", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index b453dfe0e6..af0a0b88ca 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -159,7 +159,6 @@ "error.unexpected_crash.explanation_addons": "Esta páxina nun se pudo amosar correutamente. Ye probable que dalgún complementu del restolador o dalguna ferramienta de traducción automática produxere esti error.", "error.unexpected_crash.next_steps": "Prueba a anovar la páxina. Si nun sirve, ye posible que tovía seyas a usar Mastodon pente otru restolador o una aplicación nativa.", "error.unexpected_crash.next_steps_addons": "Prueba a desactivalos y a anovar la páxina. Si nun sirve, ye posible que tovía seyas a usar Mastodon pente otru restolador o una aplicación nativa.", - "explore.search_results": "Resultaos de la busca", "explore.suggested_follows": "Perfiles", "explore.title": "Esploración", "explore.trending_links": "Noticies", @@ -196,7 +195,6 @@ "footer.about": "Tocante a", "footer.directory": "Direutoriu de perfiles", "footer.get_app": "Consiguir l'aplicación", - "footer.invite": "Convidar a persones", "footer.keyboard_shortcuts": "Atayos del tecláu", "footer.privacy_policy": "Política de privacidá", "footer.source_code": "Ver el códigu fonte", @@ -389,10 +387,8 @@ "search_results.accounts": "Perfiles", "search_results.all": "Too", "search_results.hashtags": "Etiquetes", - "search_results.nothing_found": "Nun se pudo atopar nada con esos términos de busca", "search_results.see_all": "Ver too", "search_results.statuses": "Artículos", - "search_results.title": "Busca de: {q}", "server_banner.server_stats": "Estadístiques del sirvidor:", "sign_in_banner.create_account": "Crear una cuenta", "sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/app/javascript/mastodon/locales/az.json @@ -0,0 +1 @@ +{} diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 4b85f982e5..1adbe147db 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -278,7 +278,6 @@ "error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і аднавіць старонку. Калі гэта не дапаможа, вы можаце карыстацца Мастадонт праз другі браўзер ці аплікацыю.", "errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену", "errors.unexpected_crash.report_issue": "Паведаміць аб праблеме", - "explore.search_results": "Вынікі пошуку", "explore.suggested_follows": "Людзі", "explore.title": "Агляд", "explore.trending_links": "Навіны", @@ -328,7 +327,6 @@ "footer.about": "Пра нас", "footer.directory": "Дырэкторыя профіляў", "footer.get_app": "Спампаваць праграму", - "footer.invite": "Запрасіць людзей", "footer.keyboard_shortcuts": "Спалучэнні клавіш", "footer.privacy_policy": "Палітыка прыватнасці", "footer.source_code": "Прагледзець зыходны код", @@ -686,10 +684,8 @@ "search_results.accounts": "Профілі", "search_results.all": "Усё", "search_results.hashtags": "Хэштэгі", - "search_results.nothing_found": "Па дадзенаму запыту нічога не знойдзена", "search_results.see_all": "Праглядзець усе", "search_results.statuses": "Допісы", - "search_results.title": "Пошук {q}", "server_banner.about_active_users": "Людзі, якія карыстаюцца гэтым сервера на працягу апошніх 30 дзён (Штомесячна Актыўныя Карыстальнікі)", "server_banner.active_users": "актыўныя карыстальнікі", "server_banner.administered_by": "Адміністратар:", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 141d20f16d..6cadc8cdab 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -108,7 +108,7 @@ "annual_report.summary.thanks": "Благодарим, че сте част от Mastodon!", "attachments_list.unprocessed": "(необработено)", "audio.hide": "Скриване на звука", - "block_modal.remote_users_caveat": "Ще поискаме сървърът {domain} да почита решението ви. Съгласието обаче не се гарантира откак някои сървъри могат да боравят с блоковете по различен начин. Обществените публикации още може да се виждат от невлезли в системата потребители.", + "block_modal.remote_users_caveat": "Ще приканим сървъра {domain} да уважава решението ви. За съжаление не можем да гарантираме това защото някои сървъри могат да третират блокиранията по различен начин. Публичните постове може да продължат да бъдат видими за потребители, които не са се регистрирали.", "block_modal.show_less": "Повече на показ", "block_modal.show_more": "По-малко на показ", "block_modal.they_cant_mention": "Те не могат да ви споменават или последват.", @@ -255,14 +255,14 @@ "domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.", "domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.", "domain_pill.server": "Сървър", - "domain_pill.their_handle": "Тяхната ръчка:", + "domain_pill.their_handle": "Техният адрес:", "domain_pill.their_server": "Цифровият им дом, където живеят всичките им публикации.", "domain_pill.their_username": "Неповторимият им идентификатор на сървъра им. Възможно е да се намерят потребители със същото потребителско име на други сървъри.", "domain_pill.username": "Потребителско име", - "domain_pill.whats_in_a_handle": "Какво е в ръчката?", - "domain_pill.who_they_are": "Откак ръчките казват кой кой е и къде е, то може да взаимодействате с хора през социаното уебпространство на .", - "domain_pill.who_you_are": "Тъй като вашата ръчка казва кои сте и къде сте, то може да взаимодействате с хора през социаното уебпространство на .", - "domain_pill.your_handle": "Вашата ръчка:", + "domain_pill.whats_in_a_handle": "Как се съставя адресът?", + "domain_pill.who_they_are": "Адресът показва за някой кой е той и къде се намира. Това ви позволява да общувате с всички в социалната мрежа от .", + "domain_pill.who_you_are": "Адресът ви показва кой сте и къде се намирате. Това ви позволява да общувате с всички в социалната мрежа от .", + "domain_pill.your_handle": "Вашият адрес:", "domain_pill.your_server": "Цифровият ви дом, където живеят всичките ви публикации. Не харесвате ли този? Прехвърляте се на сървъри по всяко време и докарвате последователите си също.", "domain_pill.your_username": "Неповторимият ви идентификатор на този сървър. Възможно е да се намерят потребители със същото потребителско име на други сървъри.", "embed.instructions": "Вградете публикацията в уебсайта си, копирайки кода долу.", @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Опитайте се да ги изключите и да опресните страницата. Ако това не помогне, то още може да използвате Mastodon чрез различен браузър или приложение.", "errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет", "errors.unexpected_crash.report_issue": "Сигнал за проблем", - "explore.search_results": "Резултати от търсенето", "explore.suggested_follows": "Хора", "explore.title": "Разглеждане", "explore.trending_links": "Новини", @@ -359,11 +358,11 @@ "footer.about": "Относно", "footer.directory": "Директория на профилите", "footer.get_app": "Вземане на приложението", - "footer.invite": "Поканване на хора", "footer.keyboard_shortcuts": "Клавишни комбинации", "footer.privacy_policy": "Политика за поверителност", "footer.source_code": "Преглед на изходния код", "footer.status": "Състояние", + "footer.terms_of_service": "Условия на услугата", "generic.saved": "Запазено", "getting_started.heading": "Първи стъпки", "hashtag.admin_moderation": "Отваряне на модериращия интерфейс за #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Преглед на #Wrapstodon", "notification.favourite": "{name} направи любима публикацията ви", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} направиха любима ваша публикация", + "notification.favourite_pm": "{name} хареса вашето лично споменаване", + "notification.favourite_pm.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} харесаха вашето частно споменаване", "notification.follow": "{name} ви последва", "notification.follow.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} ви последваха", "notification.follow_request": "{name} поиска да ви последва", @@ -781,10 +782,11 @@ "search_results.accounts": "Профили", "search_results.all": "Всичко", "search_results.hashtags": "Хаштагове", - "search_results.nothing_found": "Не може да се намери каквото и да било за тези термини при търсене", + "search_results.no_results": "Няма намерени резултати.", + "search_results.no_search_yet": "Опитайте да потърсите постове, профили или хаштагове.", "search_results.see_all": "Поглед на всички", "search_results.statuses": "Публикации", - "search_results.title": "Търсене за {q}", + "search_results.title": "Търсене на \"{q}\"", "server_banner.about_active_users": "Ползващите сървъра през последните 30 дни (дейните месечно потребители)", "server_banner.active_users": "дейни потребители", "server_banner.administered_by": "Администрира се от:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Промяна на абонираните езици за {target}", "tabs_bar.home": "Начало", "tabs_bar.notifications": "Известия", + "terms_of_service.title": "Условия на услугата", "time_remaining.days": "{number, plural, one {остава # ден} other {остават # дни}}", "time_remaining.hours": "{number, plural, one {остава # час} other {остават # часа}}", "time_remaining.minutes": "{number, plural, one {остава # минута} other {остават # минути}}", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 971d58b1fa..eb4394aa79 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -230,7 +230,6 @@ "error.unexpected_crash.next_steps_addons": "Klaskit azbevaat ar bajenn. Ma n'ez a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.", "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", - "explore.search_results": "Disoc'hoù an enklask", "explore.suggested_follows": "Tud", "explore.title": "Furchal", "explore.trending_links": "Keleier", @@ -263,7 +262,6 @@ "footer.about": "Diwar-benn", "footer.directory": "Kavlec'h ar profiloù", "footer.get_app": "Pellgargañ an arload", - "footer.invite": "Pediñ tud", "footer.keyboard_shortcuts": "Berradennoù klavier", "footer.privacy_policy": "Reolennoù prevezded", "footer.source_code": "Gwelet ar c'hod mammenn", @@ -524,10 +522,8 @@ "search_results.accounts": "Profiloù", "search_results.all": "Pep tra", "search_results.hashtags": "Hashtagoù", - "search_results.nothing_found": "Disoc'h ebet gant ar gerioù-se", "search_results.see_all": "Gwelet pep tra", "search_results.statuses": "Toudoù", - "search_results.title": "Klask {q}", "server_banner.active_users": "implijerien·ezed oberiant", "server_banner.administered_by": "Meret gant :", "server_banner.server_stats": "Stadegoù ar servijer :", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index b6344c45e8..ef4f9e3a93 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Prova de desactivar-los i actualitza la pàgina. Si això no serveix, és possible que encara puguis fer servir Mastodon amb un altre navegador o una aplicació nativa.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", - "explore.search_results": "Resultats de la cerca", "explore.suggested_follows": "Persones", "explore.title": "Explora", "explore.trending_links": "Notícies", @@ -359,11 +358,11 @@ "footer.about": "Quant a", "footer.directory": "Directori de perfils", "footer.get_app": "Aconsegueix l'app", - "footer.invite": "Convida persones", "footer.keyboard_shortcuts": "Dreceres de teclat", "footer.privacy_policy": "Política de privadesa", "footer.source_code": "Mostra el codi font", "footer.status": "Estat", + "footer.terms_of_service": "Condicions de servei", "generic.saved": "Desat", "getting_started.heading": "Primeres passes", "hashtag.admin_moderation": "Obre la interfície de moderació per a #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Visualitzeu #Wrapstodon", "notification.favourite": "{name} ha afavorit el teu tut", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# altre} other {# altres}} han afavorit la vostra publicació", + "notification.favourite_pm": "{name} ha afavorit la vostra menció privada", + "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {un altre} other {# altres}} han afavorit la vostra menció", "notification.follow": "{name} et segueix", "notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit", "notification.follow_request": "{name} ha sol·licitat de seguir-te", @@ -781,10 +782,11 @@ "search_results.accounts": "Perfils", "search_results.all": "Tots", "search_results.hashtags": "Etiquetes", - "search_results.nothing_found": "No s'ha pogut trobar res per a aquests termes de cerca", + "search_results.no_results": "Cap resultat.", + "search_results.no_search_yet": "Proveu de cercar publicacions, perfils o etiquetes.", "search_results.see_all": "Veure'ls tots", "search_results.statuses": "Tuts", - "search_results.title": "Cerca de {q}", + "search_results.title": "Cerca de “{q}”", "server_banner.about_active_users": "Gent que ha fet servir aquest servidor en els darrers 30 dies (Usuaris Actius Mensuals)", "server_banner.active_users": "usuaris actius", "server_banner.administered_by": "Administrat per:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Canvia les llengües subscrites per a {target}", "tabs_bar.home": "Inici", "tabs_bar.notifications": "Notificacions", + "terms_of_service.title": "Condicions de servei", "time_remaining.days": "{number, plural, one {# dia restant} other {# dies restants}}", "time_remaining.hours": "{number, plural, one {# hora restant} other {# hores restants}}", "time_remaining.minutes": "{number, plural, one {# minut restant} other {# minuts restants}}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index fe22cd661f..f4fee13cdb 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -226,7 +226,6 @@ "error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.", "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", - "explore.search_results": "ئەنجامەکانی گەڕان", "explore.suggested_follows": "خەڵک", "explore.title": "گەڕان", "explore.trending_links": "هەواڵەکان", @@ -262,7 +261,6 @@ "footer.about": "دەربارە", "footer.directory": "ڕابەری پەڕەی ناساندن", "footer.get_app": "بەرنامەکە بەدەست بێنە", - "footer.invite": "بانگهێشتکردنی خەڵک", "footer.keyboard_shortcuts": "کورتەڕێکانی تەختەکلیک", "footer.privacy_policy": "سیاسەتی تایبەتمەندێتی", "footer.source_code": "پیشاندانی کۆدی سەرچاوە", @@ -487,9 +485,7 @@ "search_results.accounts": "پرۆفایلەکان", "search_results.all": "هەموو", "search_results.hashtags": "هەشتاگ", - "search_results.nothing_found": "هیچ بۆ ئەم زاراوە گەڕانانە نەدۆزراوەتەوە", "search_results.statuses": "توتەکان", - "search_results.title": "گەڕان بەدوای {q}", "server_banner.about_active_users": "ئەو کەسانەی لە ماوەی ٣٠ ڕۆژی ڕابردوودا ئەم سێرڤەرە بەکاردەهێنن (بەکارهێنەرانی چالاک مانگانە)", "server_banner.active_users": "بەکارهێنەرانی چالاک", "server_banner.administered_by": "بەڕێوەبردن لەلایەن:", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index c8042a1259..5cd324953a 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -272,7 +272,6 @@ "error.unexpected_crash.next_steps_addons": "Zkuste je vypnout a stránku obnovit. Pokud to nepomůže, zkuste otevřít Mastodon v jiném prohlížeči nebo nativní aplikaci.", "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", - "explore.search_results": "Výsledky hledání", "explore.suggested_follows": "Lidé", "explore.title": "Objevit", "explore.trending_links": "Zprávy", @@ -320,7 +319,6 @@ "footer.about": "O aplikaci", "footer.directory": "Adresář profilů", "footer.get_app": "Získat aplikaci", - "footer.invite": "Pozvat lidi", "footer.keyboard_shortcuts": "Klávesové zkratky", "footer.privacy_policy": "Zásady ochrany osobních údajů", "footer.source_code": "Zobrazit zdrojový kód", @@ -652,10 +650,8 @@ "search_results.accounts": "Profily", "search_results.all": "Vše", "search_results.hashtags": "Hashtagy", - "search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno", "search_results.see_all": "Zobrazit vše", "search_results.statuses": "Příspěvky", - "search_results.title": "Hledat {q}", "server_banner.about_active_users": "Lidé používající tento server během posledních 30 dní (měsíční aktivní uživatelé)", "server_banner.active_users": "aktivní uživatelé", "server_banner.administered_by": "Spravováno:", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index a533230acd..73d2e615b2 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -103,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashnod a ddefnyddiwyd fwyaf", "annual_report.summary.most_used_hashtag.none": "Dim", "annual_report.summary.new_posts.new_posts": "postiadau newydd", + "annual_report.summary.percentile.text": "Mae hynny'n eich rhoi chi ar y brig o ddefnyddiwr {domain}.", "annual_report.summary.percentile.we_wont_tell_bernie": "Ni fyddwn yn dweud wrth Bernie.", "annual_report.summary.thanks": "Diolch am fod yn rhan o Mastodon!", "attachments_list.unprocessed": "(heb eu prosesu)", @@ -128,6 +129,7 @@ "bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Cau", + "bundle_modal_error.message": "Aeth rhywbeth o'i le wrth lwytho'r sgrin hon.", "bundle_modal_error.retry": "Ceisiwch eto", "closed_registrations.other_server_instructions": "Gan fod Mastodon yn ddatganoledig, gallwch greu cyfrif ar weinydd arall a dal i ryngweithio gyda hwn.", "closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.", @@ -203,6 +205,9 @@ "confirmations.edit.confirm": "Golygu", "confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?", "confirmations.edit.title": "Trosysgrifo'r postiad?", + "confirmations.follow_to_list.confirm": "Dilyn ac ychwanegu at y rhestr", + "confirmations.follow_to_list.message": "Mae angen i chi fod yn dilyn {name} i'w ychwanegu at restr.", + "confirmations.follow_to_list.title": "Dilyn defnyddiwr?", "confirmations.logout.confirm": "Allgofnodi", "confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?", "confirmations.logout.title": "Allgofnodi?", @@ -234,6 +239,10 @@ "disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.", "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.", "dismissable_banner.dismiss": "Cau", + "dismissable_banner.explore_links": "Y straeon newyddion hyn yw'r rhai sy'n cael eu rhannu fwyaf ar y ffederasiwn heddiw. Mae straeon newyddion mwy diweddar sy'n cael eu postio gan fwy o amrywiaeth o bobl yn cael eu graddio'n uwch.", + "dismissable_banner.explore_statuses": "Mae'r postiadau hyn o bob rhan o'r ffedysawd yn cael mwy o sylw heddiw. Mae postiadau mwy diweddar sydd â mwy o hybu a ffefrynnu'n cael eu graddio'n uwch.", + "dismissable_banner.explore_tags": "Mae'r hashnodau hyn ar gynnydd y ffedysawd heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o bobl amrywiol yn cael eu graddio'n uwch.", + "dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y ffedysawd y mae pobl ar {domain} yn eu dilyn.", "domain_block_modal.block": "Blocio gweinydd", "domain_block_modal.block_account_instead": "Blocio @{name} yn ei le", "domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.", @@ -300,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Ceisiwch eu hanalluogi ac adnewyddu'r dudalen. Os nad yw hynny'n helpu, efallai y byddwch yn dal i allu defnyddio Mastodon trwy borwr neu ap cynhenid arall.", "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", - "explore.search_results": "Canlyniadau chwilio", "explore.suggested_follows": "Pobl", "explore.title": "Darganfod", "explore.trending_links": "Newyddion", @@ -350,13 +358,14 @@ "footer.about": "Ynghylch", "footer.directory": "Cyfeiriadur proffiliau", "footer.get_app": "Lawrlwytho'r ap", - "footer.invite": "Gwahodd pobl", "footer.keyboard_shortcuts": "Bysellau brys", "footer.privacy_policy": "Polisi preifatrwydd", "footer.source_code": "Gweld y cod ffynhonnell", "footer.status": "Statws", + "footer.terms_of_service": "Telerau gwasanaeth", "generic.saved": "Wedi'i Gadw", "getting_started.heading": "Dechrau", + "hashtag.admin_moderation": "Agor rhyngwyneb cymedroli #{name}", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "neu {additional}", "hashtag.column_header.tag_mode.none": "heb {additional}", @@ -486,6 +495,7 @@ "lists.replies_policy.list": "Aelodau'r rhestr", "lists.replies_policy.none": "Neb", "lists.save": "Cadw", + "lists.search": "Chwilio", "lists.show_replies_to": "Cynhwyswch atebion gan aelodau'r rhestr i", "load_pending": "{count, plural, one {# eitem newydd} other {# eitem newydd}}", "loading_indicator.label": "Yn llwytho…", @@ -539,6 +549,7 @@ "notification.annual_report.view": "Gweld #Wrapstodon", "notification.favourite": "Ffafriodd {name} eich postiad", "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad", + "notification.favourite_pm": "Mae {name} wedi ffefrynnu eich cyfeiriad preifat", "notification.follow": "Dilynodd {name} chi", "notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# arall} two {# arall} few {# arall} many {# others} other {# arall}} nawr yn eich dilyn chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", @@ -770,10 +781,8 @@ "search_results.accounts": "Proffilau", "search_results.all": "Popeth", "search_results.hashtags": "Hashnodau", - "search_results.nothing_found": "Methu dod o hyd i unrhyw beth ar gyfer y termau chwilio hyn", "search_results.see_all": "Gweld y cyfan", "search_results.statuses": "Postiadau", - "search_results.title": "Chwilio am {q}", "server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)", "server_banner.active_users": "defnyddwyr gweithredol", "server_banner.administered_by": "Gweinyddir gan:", @@ -846,6 +855,7 @@ "subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}", "tabs_bar.home": "Cartref", "tabs_bar.notifications": "Hysbysiadau", + "terms_of_service.title": "Telerau Gwasanaeth", "time_remaining.days": "{number, plural, one {# diwrnod} other {# diwrnod}} ar ôl", "time_remaining.hours": "{number, plural, one {# awr} other {# awr}} ar ôl", "time_remaining.minutes": "{number, plural, one {# munud} other {# munud}} ar ôl", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index adf7c8386a..59d5123e78 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden browser eller app.", "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", "errors.unexpected_crash.report_issue": "Anmeld problem", - "explore.search_results": "Søgeresultater", "explore.suggested_follows": "Personer", "explore.title": "Udforsk", "explore.trending_links": "Nyheder", @@ -359,11 +358,11 @@ "footer.about": "Om", "footer.directory": "Profiloversigt", "footer.get_app": "Hent appen", - "footer.invite": "Invitér personer", "footer.keyboard_shortcuts": "Tastaturgenveje", "footer.privacy_policy": "Privatlivspolitik", "footer.source_code": "Vis kildekode", "footer.status": "Status", + "footer.terms_of_service": "Tjenestevilkår", "generic.saved": "Gemt", "getting_started.heading": "Startmenu", "hashtag.admin_moderation": "Åbn modereringsbrugerflade for #{name}", @@ -549,6 +548,8 @@ "notification.annual_report.view": "Vis #Wrapstodon", "notification.favourite": "{name} favoritmarkerede dit indlæg", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit", + "notification.favourite_pm": "{name} favoritmarkerede din private omtale", + "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} favoritmarkerede dit indlæg", "notification.follow": "{name} begyndte at følge dig", "notification.follow.name_and_others": "{name} og {count, plural, one {# andre} other {# andre}} begyndte at følge dig", "notification.follow_request": "{name} har anmodet om at følge dig", @@ -780,10 +781,11 @@ "search_results.accounts": "Profiler", "search_results.all": "Alle", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Ingen resultater for disse søgeord", + "search_results.no_results": "Ingen resultater.", + "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller hashtags.", "search_results.see_all": "Vis alle", "search_results.statuses": "Indlæg", - "search_results.title": "Søg efter {q}", + "search_results.title": "Søg efter \"{q}\"", "server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)", "server_banner.active_users": "aktive brugere", "server_banner.administered_by": "Håndteres af:", @@ -856,6 +858,7 @@ "subscribed_languages.target": "Skift abonnementssprog for {target}", "tabs_bar.home": "Hjem", "tabs_bar.notifications": "Notifikationer", + "terms_of_service.title": "Tjenestevilkår", "time_remaining.days": "{number, plural, one {# dag} other {# dage}} tilbage", "time_remaining.hours": "{number, plural, one {# time} other {# timer}} tilbage", "time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 52f297f604..2e3c0d2d19 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -71,7 +71,7 @@ "account.unmute": "Stummschaltung von @{name} aufheben", "account.unmute_notifications_short": "Stummschaltung der Benachrichtigungen aufheben", "account.unmute_short": "Stummschaltung aufheben", - "account_note.placeholder": "Notiz durch Klicken hinzufügen", + "account_note.placeholder": "Klicken, um Notiz hinzuzufügen", "admin.dashboard.daily_retention": "Verweildauer der Benutzer*innen pro Tag nach der Registrierung", "admin.dashboard.monthly_retention": "Verweildauer der Benutzer*innen pro Monat nach der Registrierung", "admin.dashboard.retention.average": "Durchschnitt", @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Versuche, das Add-on oder Übersetzungswerkzeug zu deaktivieren und lade die Seite anschließend neu. Sollte das Problem weiter bestehen, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du verwendest eine mobile (native) App.", "errors.unexpected_crash.copy_stacktrace": "Fehlerdiagnose in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Fehler melden", - "explore.search_results": "Suchergebnisse", "explore.suggested_follows": "Profile", "explore.title": "Entdecken", "explore.trending_links": "Neuigkeiten", @@ -359,11 +358,11 @@ "footer.about": "Über", "footer.directory": "Profilverzeichnis", "footer.get_app": "App herunterladen", - "footer.invite": "Leute einladen", "footer.keyboard_shortcuts": "Tastenkombinationen", "footer.privacy_policy": "Datenschutzerklärung", "footer.source_code": "Quellcode anzeigen", "footer.status": "Status", + "footer.terms_of_service": "Nutzungsbedingungen", "generic.saved": "Gespeichert", "getting_started.heading": "Auf gehts!", "hashtag.admin_moderation": "#{name} moderieren", @@ -550,6 +549,8 @@ "notification.annual_report.view": "#Wrapstodon ansehen", "notification.favourite": "{name} favorisierte deinen Beitrag", "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deinen Beitrag", + "notification.favourite_pm": "{name} favorisierte deine private Erwähnung", + "notification.favourite_pm.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deine private Erwähnung", "notification.follow": "{name} folgt dir", "notification.follow.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} folgen dir", "notification.follow_request": "{name} möchte dir folgen", @@ -781,10 +782,11 @@ "search_results.accounts": "Profile", "search_results.all": "Alles", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Nichts zu diesen Suchbegriffen gefunden", + "search_results.no_results": "Keine Ergebnisse.", + "search_results.no_search_yet": "Suche nach Beiträgen, Profilen oder Hashtags.", "search_results.see_all": "Alle ansehen", "search_results.statuses": "Beiträge", - "search_results.title": "Suchergebnisse für {q}", + "search_results.title": "Nach „{q}“ suchen", "server_banner.about_active_users": "Personen, die diesen Server in den vergangenen 30 Tagen verwendet haben (monatlich aktive Nutzer*innen)", "server_banner.active_users": "aktive Profile", "server_banner.administered_by": "Verwaltet von:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Abonnierte Sprachen für {target} ändern", "tabs_bar.home": "Startseite", "tabs_bar.notifications": "Benachrichtigungen", + "terms_of_service.title": "Nutzungsbedingungen", "time_remaining.days": "noch {number, plural, one {# Tag} other {# Tage}}", "time_remaining.hours": "noch {number, plural, one {# Stunde} other {# Stunden}}", "time_remaining.minutes": "noch {number, plural, one {# Minute} other {# Minuten}}", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index dcd6357493..8beda3388e 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.", "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", - "explore.search_results": "Αποτελέσματα αναζήτησης", "explore.suggested_follows": "Άτομα", "explore.title": "Εξερεύνηση", "explore.trending_links": "Νέα", @@ -359,7 +358,6 @@ "footer.about": "Σχετικά με", "footer.directory": "Κατάλογος προφίλ", "footer.get_app": "Αποκτήστε την εφαρμογή", - "footer.invite": "Προσκάλεσε άτομα", "footer.keyboard_shortcuts": "Συντομεύσεις πληκτρολογίου", "footer.privacy_policy": "Πολιτική απορρήτου", "footer.source_code": "Προβολή πηγαίου κώδικα", @@ -781,10 +779,8 @@ "search_results.accounts": "Προφίλ", "search_results.all": "Όλα", "search_results.hashtags": "Ετικέτες", - "search_results.nothing_found": "Δεν βρέθηκε τίποτα με αυτούς τους όρους αναζήτησης", "search_results.see_all": "Δες τα όλα", "search_results.statuses": "Αναρτήσεις", - "search_results.title": "Αναζήτηση για {q}", "server_banner.about_active_users": "Άτομα που χρησιμοποιούν αυτόν τον διακομιστή κατά τις τελευταίες 30 ημέρες (Μηνιαία Ενεργοί Χρήστες)", "server_banner.active_users": "ενεργοί χρήστες", "server_banner.administered_by": "Διαχειριστής:", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 8f00fe5b20..ef2ab61c17 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -300,7 +300,6 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", - "explore.search_results": "Search results", "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", @@ -350,7 +349,6 @@ "footer.about": "About", "footer.directory": "Profiles directory", "footer.get_app": "Get the app", - "footer.invite": "Invite people", "footer.keyboard_shortcuts": "Keyboard shortcuts", "footer.privacy_policy": "Privacy policy", "footer.source_code": "View source code", @@ -770,10 +768,8 @@ "search_results.accounts": "Profiles", "search_results.all": "All", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Could not find anything for these search terms", "search_results.see_all": "See all", "search_results.statuses": "Posts", - "search_results.title": "Search for {q}", "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 6b952e333a..8c14f50690 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -454,7 +454,6 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", - "explore.search_results": "Search results", "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", @@ -504,11 +503,11 @@ "footer.about": "About", "footer.directory": "Profiles directory", "footer.get_app": "Get the app", - "footer.invite": "Invite people", "footer.keyboard_shortcuts": "Keyboard shortcuts", "footer.privacy_policy": "Privacy policy", "footer.source_code": "View source code", "footer.status": "Status", + "footer.terms_of_service": "Terms of service", "generic.saved": "Saved", "getting_started.heading": "Getting started", "hashtag.admin_moderation": "Open moderation interface for #{name}", @@ -713,6 +712,8 @@ "notification.emoji_reaction.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} reacted your post with emoji", "notification.favourite": "{name} favorited your post", "notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your post", + "notification.favourite_pm": "{name} favorited your private mention", + "notification.favourite_pm.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your private mention", "notification.follow": "{name} followed you", "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", "notification.follow_request": "{name} has requested to follow you", @@ -969,10 +970,11 @@ "search_results.accounts": "Profiles", "search_results.all": "All", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Could not find anything for these search terms", + "search_results.no_results": "No results.", + "search_results.no_search_yet": "Try searching for posts, profiles or hashtags.", "search_results.see_all": "See all", "search_results.statuses": "Posts", - "search_results.title": "Search for {q}", + "search_results.title": "Search for \"{q}\"", "searchability.change": "Change post searchability", "searchability.direct.long": "Nobody can find, but you can", "searchability.direct.short": "Self only", @@ -1075,6 +1077,7 @@ "subscribed_languages.target": "Change subscribed languages for {target}", "tabs_bar.home": "Home", "tabs_bar.notifications": "Notifications", + "terms_of_service.title": "Terms of Service", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 17ca70548e..4b1ffa59ee 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -10,7 +10,7 @@ "about.domain_blocks.suspended.title": "Suspendita", "about.not_available": "Ĉi tiu informo ne estas disponebla ĉe ĉi tiu servilo.", "about.powered_by": "Malcentrigita socia retejo pere de {mastodon}", - "about.rules": "Regularo de la servilo", + "about.rules": "Reguloj de la servilo", "account.account_note_header": "Personaj notoj", "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", "account.badges.bot": "Aŭtomata", @@ -87,9 +87,14 @@ "alert.unexpected.title": "Aj!", "alt_text_badge.title": "Alt-teksto", "announcement.announcement": "Anonco", + "annual_report.summary.archetype.booster": "La Ĉasanto de Mojoso", + "annual_report.summary.archetype.lurker": "La vidanto", + "annual_report.summary.archetype.oracle": "La Orakolo", "annual_report.summary.archetype.pollster": "La balotenketisto", "annual_report.summary.archetype.replier": "La plej societema", "annual_report.summary.followers.followers": "sekvantoj", + "annual_report.summary.followers.total": "{count} tute", + "annual_report.summary.here_it_is": "Jen via resumo de {year}:", "annual_report.summary.highlighted_post.by_favourites": "plej ŝatata afiŝo", "annual_report.summary.highlighted_post.by_reblogs": "plej diskonigita afiŝo", "annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj", @@ -98,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "plej uzata kradvorto", "annual_report.summary.most_used_hashtag.none": "Nenio", "annual_report.summary.new_posts.new_posts": "novaj afiŝoj", + "annual_report.summary.percentile.text": "Tio metas vin en la plejde {domain} uzantoj.", "annual_report.summary.percentile.we_wont_tell_bernie": "Ni ne diros al Zamenhof.", "annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!", "attachments_list.unprocessed": "(neprilaborita)", @@ -233,8 +239,10 @@ "disabled_account_banner.text": "Via konto {disabledAccount} estas nune malvalidigita.", "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.", "dismissable_banner.dismiss": "Eksigi", + "dismissable_banner.explore_links": "Ĉi tiuj revuaĵoj plejkunhaviĝas en la fediverso hodiaŭ. Pli novaj revuaĵoj afiŝis de pli da homoj metis pli alte.", "dismissable_banner.explore_statuses": "Ĉi tiuj afiŝoj populariĝas sur la fediverso hodiaŭ. Pli novaj afiŝoj kun pli da diskonigoj kaj stemuloj estas rangigitaj pli alte.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvortoj populariĝas sur la fediverso hodiaŭ. Kradvortoj, kiuj estas uzataj de pli malsamaj homoj, estas rangigitaj pli alte.", + "dismissable_banner.public_timeline": "Ĉi tiuj estas la plej ĵusaj publikaj afiŝoj de homoj en la fediverso, kiujn la homoj en {domain} sekvas.", "domain_block_modal.block": "Bloki servilon", "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe", "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.", @@ -301,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Provu malaktivigi ilin kaj tiam refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.", "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", - "explore.search_results": "Serĉaj rezultoj", "explore.suggested_follows": "Homoj", "explore.title": "Esplori", "explore.trending_links": "Novaĵoj", @@ -351,13 +358,14 @@ "footer.about": "Pri", "footer.directory": "Profilujo", "footer.get_app": "Akiri la apon", - "footer.invite": "Inviti homojn", "footer.keyboard_shortcuts": "Fulmoklavoj", "footer.privacy_policy": "Politiko de privateco", "footer.source_code": "Montri fontkodon", "footer.status": "Stato", + "footer.terms_of_service": "Kondiĉoj de uzado", "generic.saved": "Konservita", "getting_started.heading": "Por komenci", + "hashtag.admin_moderation": "Malfermi fasadon de moderigado por #{name}", "hashtag.column_header.tag_mode.all": "kaj {additional}", "hashtag.column_header.tag_mode.any": "aŭ {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -442,7 +450,7 @@ "keyboard_shortcuts.notifications": "Malfermu la sciigajn kolumnon", "keyboard_shortcuts.open_media": "Malfermu plurmedion", "keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston", - "keyboard_shortcuts.profile": "Malfermu la profilon de aŭtoro", + "keyboard_shortcuts.profile": "Malfermu la profilon de aŭtoroprofilo", "keyboard_shortcuts.reply": "Respondu al afiŝo", "keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado", "keyboard_shortcuts.search": "Enfokusigi la serĉbreton", @@ -488,6 +496,7 @@ "lists.replies_policy.none": "Neniu", "lists.save": "Konservi", "lists.search": "Ŝerci", + "lists.show_replies_to": "Inkludi respondojn de listomembroj al", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", "loading_indicator.label": "Ŝargado…", "media_gallery.hide": "Kaŝi", @@ -536,9 +545,12 @@ "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", "notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton", + "notification.annual_report.message": "Via {year} #Wrapstodon atendas! Malkovru viajn bonaĵojn kaj memorindajn momentojn en Mastodon!", "notification.annual_report.view": "Vidu #Wrapstodon", - "notification.favourite": "{name} stelumis vian afiŝon", + "notification.favourite": "{name} ŝatis vian afiŝon", "notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon", + "notification.favourite_pm": "{name} ŝatis vian privatan mencion", + "notification.favourite_pm.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian privatan mencion", "notification.follow": "{name} eksekvis vin", "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", @@ -770,10 +782,8 @@ "search_results.accounts": "Profiloj", "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", - "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", "search_results.see_all": "Vidu ĉiujn", "search_results.statuses": "Afiŝoj", - "search_results.title": "Serĉ-rezultoj por {q}", "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", "server_banner.active_users": "aktivaj uzantoj", "server_banner.administered_by": "Administrata de:", @@ -846,6 +856,7 @@ "subscribed_languages.target": "Ŝanĝu abonitajn lingvojn por {target}", "tabs_bar.home": "Hejmo", "tabs_bar.notifications": "Sciigoj", + "terms_of_service.title": "Kondiĉoj de uzado", "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas", "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restas", "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index d8c97028e4..1da851413b 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", - "explore.search_results": "Resultados de búsqueda", "explore.suggested_follows": "Cuentas", "explore.title": "Explorá", "explore.trending_links": "Noticias", @@ -359,11 +358,11 @@ "footer.about": "Información", "footer.directory": "Directorio de perfiles", "footer.get_app": "Conseguí la aplicación", - "footer.invite": "Invitá a gente", "footer.keyboard_shortcuts": "Atajos de teclado", "footer.privacy_policy": "Política de privacidad", "footer.source_code": "Ver código fuente", "footer.status": "Estado", + "footer.terms_of_service": "Términos del servicio", "generic.saved": "Guardado", "getting_started.heading": "Inicio de Mastodon", "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito", + "notification.favourite_pm": "{name} ha marcado como favorita tu mención privada", + "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} han marcado como favorita tu mención privada", "notification.follow": "{name} te empezó a seguir", "notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo", "notification.follow_request": "{name} solicitó seguirte", @@ -781,10 +782,11 @@ "search_results.accounts": "Perfiles", "search_results.all": "Todos", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda", + "search_results.no_results": "Sin resultados.", + "search_results.no_search_yet": "Intenta buscar publicaciones, perfiles o etiquetas.", "search_results.see_all": "Ver todo", "search_results.statuses": "Mensajes", - "search_results.title": "Buscar {q}", + "search_results.title": "Búsqueda de \"{q}\"", "server_banner.about_active_users": "Personas usando este servidor durante los últimos 30 días (Usuarios Activos Mensuales)", "server_banner.active_users": "usuarios activos", "server_banner.administered_by": "Administrado por:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "tabs_bar.home": "Principal", "tabs_bar.notifications": "Notificaciones", + "terms_of_service.title": "Términos del servicio", "time_remaining.days": "{number, plural,one {queda # día} other {quedan # días}}", "time_remaining.hours": "{number, plural,one {queda # hora} other {quedan # horas}}", "time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index a433db023d..cc92c06de5 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", - "explore.search_results": "Resultados de búsqueda", "explore.suggested_follows": "Personas", "explore.title": "Descubrir", "explore.trending_links": "Noticias", @@ -359,11 +358,11 @@ "footer.about": "Acerca de", "footer.directory": "Directorio de perfiles", "footer.get_app": "Obtener la aplicación", - "footer.invite": "Invitar personas", "footer.keyboard_shortcuts": "Atajos de teclado", "footer.privacy_policy": "Política de privacidad", "footer.source_code": "Ver código fuente", "footer.status": "Estado", + "footer.terms_of_service": "Condiciones del servicio", "generic.saved": "Guardado", "getting_started.heading": "Primeros pasos", "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita", + "notification.favourite_pm": "{name} marcó como favorito tu mención privada", + "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron como favorito tu mención privada", "notification.follow": "{name} te empezó a seguir", "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te han seguido", "notification.follow_request": "{name} ha solicitado seguirte", @@ -781,10 +782,11 @@ "search_results.accounts": "Perfiles", "search_results.all": "Todos", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda", + "search_results.no_results": "Sin resultados.", + "search_results.no_search_yet": "Intenta buscar publicaciones, perfiles o etiquetas.", "search_results.see_all": "Ver todos", "search_results.statuses": "Publicaciones", - "search_results.title": "Buscar {q}", + "search_results.title": "Búsqueda de \"{q}\"", "server_banner.about_active_users": "Personas utilizando este servidor durante los últimos 30 días (Usuarios Activos Mensuales)", "server_banner.active_users": "usuarios activos", "server_banner.administered_by": "Administrado por:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "tabs_bar.home": "Inicio", "tabs_bar.notifications": "Notificaciones", + "terms_of_service.title": "Condiciones del servicio", "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}", "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 37a88c979b..e011902f6b 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", - "explore.search_results": "Resultados de búsqueda", "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Noticias", @@ -359,11 +358,11 @@ "footer.about": "Acerca de", "footer.directory": "Directorio de perfiles", "footer.get_app": "Obtener la aplicación", - "footer.invite": "Invitar personas", "footer.keyboard_shortcuts": "Atajos de teclado", "footer.privacy_policy": "Política de privacidad", "footer.source_code": "Ver código fuente", "footer.status": "Estado", + "footer.terms_of_service": "Términos del servicio", "generic.saved": "Guardado", "getting_started.heading": "Primeros pasos", "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita", + "notification.favourite_pm": "{name} ha marcado como favorita tu mención privada", + "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} han marcado como favorita tu mención privada", "notification.follow": "{name} te empezó a seguir", "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", "notification.follow_request": "{name} ha solicitado seguirte", @@ -781,10 +782,11 @@ "search_results.accounts": "Perfiles", "search_results.all": "Todos", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda", + "search_results.no_results": "Sin resultados.", + "search_results.no_search_yet": "Intenta buscar publicaciones, perfiles o etiquetas.", "search_results.see_all": "Ver todos", "search_results.statuses": "Publicaciones", - "search_results.title": "Buscar {q}", + "search_results.title": "Búsqueda de \"{q}\"", "server_banner.about_active_users": "Usuarios activos en el servidor durante los últimos 30 días (Usuarios Activos Mensuales)", "server_banner.active_users": "usuarios activos", "server_banner.administered_by": "Administrado por:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "tabs_bar.home": "Inicio", "tabs_bar.notifications": "Notificaciones", + "terms_of_service.title": "Términos del servicio", "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}", "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index a9c36101b9..460c354d04 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -305,7 +305,6 @@ "error.unexpected_crash.next_steps_addons": "Proovi need välja lülitada ja leht uuesti laadida. Kui sellest pole abi, võib siiski võimalik olla Mastodoni kasutada mõne teise lehitseja või rakendusega.", "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", - "explore.search_results": "Otsitulemused", "explore.suggested_follows": "Inimesed", "explore.title": "Avasta", "explore.trending_links": "Uudised", @@ -355,7 +354,6 @@ "footer.about": "Teave", "footer.directory": "Profiilikataloog", "footer.get_app": "Tõmba äpp", - "footer.invite": "Kutsu liituma", "footer.keyboard_shortcuts": "Kiirklahvid", "footer.privacy_policy": "Isikuandmete kaitse", "footer.source_code": "Lähtekood", @@ -752,10 +750,8 @@ "search_results.accounts": "Profiilid", "search_results.all": "Kõik", "search_results.hashtags": "Sildid", - "search_results.nothing_found": "Otsisõnadele vastavat sisu ei leitud", "search_results.see_all": "Vaata kõiki", "search_results.statuses": "Postitused", - "search_results.title": "{q} otsing", "server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)", "server_banner.active_users": "aktiivsed kasutajad", "server_banner.administered_by": "Administraator:", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 348f544c3a..d93f6e62cd 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -277,7 +277,6 @@ "error.unexpected_crash.next_steps_addons": "Saiatu desgaitu eta orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", - "explore.search_results": "Bilaketaren emaitzak", "explore.suggested_follows": "Jendea", "explore.title": "Arakatu", "explore.trending_links": "Berriak", @@ -326,7 +325,6 @@ "footer.about": "Honi buruz", "footer.directory": "Profil-direktorioa", "footer.get_app": "Eskuratu aplikazioa", - "footer.invite": "Gonbidatu jendea", "footer.keyboard_shortcuts": "Lasterbideak", "footer.privacy_policy": "Pribatutasun politika", "footer.source_code": "Ikusi iturburu kodea", @@ -710,10 +708,8 @@ "search_results.accounts": "Profilak", "search_results.all": "Guztiak", "search_results.hashtags": "Traolak", - "search_results.nothing_found": "Ez da emaitzarik aurkitu bilaketa-termino horientzat", "search_results.see_all": "Ikusi guztiak", "search_results.statuses": "Bidalketak", - "search_results.title": "Bilatu {q}", "server_banner.about_active_users": "Azken 30 egunetan zerbitzari hau erabili duen jendea (hilabeteko erabiltzaile aktiboak)", "server_banner.active_users": "erabiltzaile aktibo", "server_banner.administered_by": "Administratzailea(k):", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 469d42a00c..cd682f563b 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -87,7 +87,24 @@ "alert.unexpected.title": "ای وای!", "alt_text_badge.title": "متن جایگزین", "announcement.announcement": "اعلامیه", + "annual_report.summary.archetype.booster": "باحال‌یاب", + "annual_report.summary.archetype.lurker": "کم‌پیدا", + "annual_report.summary.archetype.oracle": "غیب‌گو", + "annual_report.summary.archetype.pollster": "نظرسنج", + "annual_report.summary.archetype.replier": "پاسخگو", "annual_report.summary.followers.followers": "دنبال کننده", + "annual_report.summary.followers.total": "در مجموع {count}", + "annual_report.summary.here_it_is": "بازبینی {year}تان:", + "annual_report.summary.highlighted_post.by_favourites": "پرپسندترین فرسته", + "annual_report.summary.highlighted_post.by_reblogs": "پرتقویت‌ترین فرسته", + "annual_report.summary.highlighted_post.by_replies": "پرپاسخ‌ترین فرسته", + "annual_report.summary.most_used_app.most_used_app": "پراستفاده‌ترین کاره", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "پراستفاده‌ترین برچسب", + "annual_report.summary.most_used_hashtag.none": "هیچ‌کدام", + "annual_report.summary.new_posts.new_posts": "فرستهٔ جدید", + "annual_report.summary.percentile.text": "بین کاربران {domain} جزوبرتر هستید.", + "annual_report.summary.percentile.we_wont_tell_bernie": "به برنی خبر نمی‌دهیم.", + "annual_report.summary.thanks": "سپاس که بخشی از ماستودون هستید!", "attachments_list.unprocessed": "(پردازش نشده)", "audio.hide": "نهفتن صدا", "block_modal.remote_users_caveat": "ما از کارساز {domain} خواهیم خواست که به تصمیم شما احترام بگذارد. با این حال، تضمینی برای رعایت آن وجود ندارد زیرا برخی کارسازها ممکن است بلوک‌ها را به‌طور متفاوتی مدیریت کنند. فرسته‌های عمومی ممکن است همچنان برای کاربران که وارد نشده قابل مشاهده باشند.", @@ -111,6 +128,7 @@ "bundle_column_error.routing.body": "صفحهٔ درخواستی پیدا نشد. مطمئنید که نشانی را درست وارد کرده‌اید؟", "bundle_column_error.routing.title": "۴۰۴", "bundle_modal_error.close": "بستن", + "bundle_modal_error.message": "هنگام بار کردن این صفحه، اشتباهی رخ داد.", "bundle_modal_error.retry": "تلاش دوباره", "closed_registrations.other_server_instructions": "از آن‌جا که ماستودون نامتمرکز است، می‌توانید حسابی روی کارسازی دیگر ساخته و همچنان با این‌یکی در تعامل باشید.", "closed_registrations_modal.description": "هم‌اکنون امکان ساخت حساب روی {domain} وجود ندارد؛ ولی لطفاً به خاطر داشته باشید که برای استفاده از ماستودون، نیازی به داشتن حساب روی {domain} نیست.", @@ -121,13 +139,16 @@ "column.blocks": "کاربران مسدود شده", "column.bookmarks": "نشانک‌ها", "column.community": "خط زمانی محلی", + "column.create_list": "ایجاد سیاهه", "column.direct": "اشاره‌های خصوصی", "column.directory": "مرور نمایه‌ها", "column.domain_blocks": "دامنه‌های مسدود شده", + "column.edit_list": "ویرایش سیاهه", "column.favourites": "برگزیده‌ها", "column.firehose": "خوراک‌های زنده", "column.follow_requests": "درخواست‌های پی‌گیری", "column.home": "خانه", + "column.list_members": "مدیریت اعضای سیاهه", "column.lists": "سیاهه‌ها", "column.mutes": "کاربران خموش", "column.notifications": "آگاهی‌ها", @@ -183,6 +204,9 @@ "confirmations.edit.confirm": "ویرایش", "confirmations.edit.message": "در صورت ویرایش، پیامی که در حال نوشتنش بودید از بین خواهد رفت. می‌خواهید ادامه دهید؟", "confirmations.edit.title": "رونویسی فرسته؟", + "confirmations.follow_to_list.confirm": "پی‌گیری و افزودن به سیاهه", + "confirmations.follow_to_list.message": "برای افزودن {name} به سیاهه باید پیش گرفته باشید.", + "confirmations.follow_to_list.title": "پی‌گیری کاربر؟", "confirmations.logout.confirm": "خروج از حساب", "confirmations.logout.message": "مطمئنید می‌خواهید خارج شوید؟", "confirmations.logout.title": "خروج؟", @@ -198,6 +222,7 @@ "confirmations.unfollow.title": "ناپی‌گیری کاربر؟", "content_warning.hide": "نهفتن فرسته", "content_warning.show": "در هر صورت نشان داده شود", + "content_warning.show_more": "نمایش بیش‌تر", "conversation.delete": "حذف گفتگو", "conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده", "conversation.open": "دیدن گفتگو", @@ -213,6 +238,10 @@ "disabled_account_banner.text": "حسابتان {disabledAccount} اکنون از کار افتاده.", "dismissable_banner.community_timeline": "این‌ها جدیدترین فرسته‌های عمومی از افرادیند که حساب‌هایشان به دست {domain} میزبانی می‌شود.", "dismissable_banner.dismiss": "دور انداختن", + "dismissable_banner.explore_links": "امروز این روایت‌های خبری بیش‌تر روی وب اجتماعی هم‌رسانی می‌شوند. روایت‌های خبری جدیدتری که به دست افراد بیش‌تری فرستاده شده‌اند، بالاتر قرار گرفته‌اند.", + "dismissable_banner.explore_statuses": "امروز این فرسته‌ها روی وب اجتماعی جذّابند. فرسته‌های جدیدتری که بیش‌تر برگزیده و تقویت شده باشند، بالاتر قرار گرفته‌اند.", + "dismissable_banner.explore_tags": "امروز این برچسب‌ها روی وب اجتماعی جذّابند. برچسب‌هایی که به دست افراد بیش‌تری استفاده شده باشند، بالاتر قرار گرفته‌اند.", + "dismissable_banner.public_timeline": "این‌ها جدیدترین فرسته‌های عمومی از افرادی روی وب اجتماعیند که اعضای {domain} پی می‌گیرندشان.", "domain_block_modal.block": "انسداد کارساز", "domain_block_modal.block_account_instead": "انسداد @{name} به جایش", "domain_block_modal.they_can_interact_with_old_posts": "افزارد روی این کراساز می‌توانند با فرسته‌های قدیمیتان تعامل داشته باشند.", @@ -270,6 +299,7 @@ "empty_column.home": "خط زمانی خانگیتان خالی است! برای پر کردنش، افراد بیشتری را پی بگیرید. {suggestions}", "empty_column.list": "هنوز چیزی در این سیاهه نیست. هنگامی که اعضایش فرسته‌های جدیدی بفرستند، این‌جا ظاهر خواهند شد.", "empty_column.mutes": "هنوز هیچ کاربری را خموش نکرده‌اید.", + "empty_column.notification_requests": "همه چیز تمیز است! هیچ‌چیزی این‌جا نیست. هنگامی که آگاهی‌های جدیدی دریافت کنید، بسته به تنظیماتتان این‌جا ظاهر خواهند شد.", "empty_column.notifications": "هنوز هیچ آگاهی‌آی ندارید. هنگامی که دیگران با شما برهم‌کنش داشته باشند،‌این‌حا خواهید دیدش.", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی‌گیری کنید تا این‌جا پُر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", @@ -278,7 +308,6 @@ "error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کاره‌ای بومی از ماستودون استفاده کنید.", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", - "explore.search_results": "نتایج جست‌وجو", "explore.suggested_follows": "افراد", "explore.title": "کاوش", "explore.trending_links": "اخبار", @@ -300,6 +329,7 @@ "filter_modal.select_filter.subtitle": "استفاده از یک دستهً موجود یا ایجاد دسته‌ای جدید", "filter_modal.select_filter.title": "پالایش این فرسته", "filter_modal.title.status": "پالایش یک فرسته", + "filter_warning.matches_filter": "مطابق با پالایهٔ «{title}»", "filtered_notifications_banner.pending_requests": "از {count, plural, =0 {هیچ‌کسی} one {فردی} other {# نفر}} که ممکن است بشناسید", "filtered_notifications_banner.title": "آگاهی‌های پالوده", "firehose.all": "همه", @@ -327,13 +357,13 @@ "footer.about": "درباره", "footer.directory": "فهرست نمایه‌ها", "footer.get_app": "گرفتن کاره", - "footer.invite": "دعوت دیگران", "footer.keyboard_shortcuts": "میان‌برهای صفحه‌کلید", "footer.privacy_policy": "سیاست محرمانگی", "footer.source_code": "نمایش کد مبدأ", "footer.status": "وضعیت", "generic.saved": "ذخیره شده", "getting_started.heading": "آغاز کنید", + "hashtag.admin_moderation": "گشودن میانای نظارت برای ‎#{name}", "hashtag.column_header.tag_mode.all": "و {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.none": "بدون {additional}", @@ -375,6 +405,7 @@ "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", "interaction_modal.description.reblog": "با حسابی روی ماستودون می‌توانید این فرسته را با پی‌گیران خودتان هم‌رسانی کنید.", "interaction_modal.description.reply": "با حسابی روی ماستودون می‌توانید به این فرسته پاسخ دهید.", + "interaction_modal.description.vote": "با حسابی روی ماستودون می‌توانید در این نظرسنجی شرکت کنید.", "interaction_modal.login.action": "رفتن به خانه", "interaction_modal.login.prompt": "دامنهٔ کارساز شخصیتان چون mastodon.social", "interaction_modal.no_account_yet": "در ماستودون نیست؟", @@ -386,6 +417,7 @@ "interaction_modal.title.follow": "پیگیری {name}", "interaction_modal.title.reblog": "تقویت فرستهٔ {name}", "interaction_modal.title.reply": "پاسخ به فرستهٔ {name}", + "interaction_modal.title.vote": "رأی دادن در نظرسنجی {name}", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}", @@ -433,13 +465,31 @@ "link_preview.author": "از {name}", "link_preview.more_from_author": "بیش‌تر از {name}", "link_preview.shares": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", + "lists.add_member": "افزودن", + "lists.add_to_list": "افزودن به سیاهه", + "lists.add_to_lists": "افزودن {name} به سیاهه‌ها", + "lists.create": "ایجاد", + "lists.create_a_list_to_organize": "ایحاد فهرستی جدید برای سازمان‌دهی خوراک خانگیتان", + "lists.create_list": "ایجاد سیاهه", "lists.delete": "حذف سیاهه", + "lists.done": "انجام شد", "lists.edit": "ویرایش سیاهه", + "lists.exclusive": "نهفتن اعضا در خانه", + "lists.exclusive_hint": "اگر کسی در این سیاهه باشد، در خوراک خانگیتان نهفته تا از نمایش دویارهٔ فرسته‌هایش خودداری شود.", + "lists.find_users_to_add": "یافتن کاربرانی برای افزودن", + "lists.list_members": "اعضای سیاهه", + "lists.list_members_count": "{count, plural,one {# عضو}other {# عضو}}", + "lists.list_name": "نام سیاهه", + "lists.new_list_name": "نام سیاههٔ جدید", + "lists.no_lists_yet": "هنوز هیچ سیاهه‌ای نیست.", + "lists.no_members_yet": "هنوز هیچ عضوی نیست.", + "lists.no_results_found": "هیچ نتیجه‌ای پیدا نشد.", "lists.remove_member": "حذف", "lists.replies_policy.followed": "هر کاربر پی‌گرفته", "lists.replies_policy.list": "اعضای سیاهه", "lists.replies_policy.none": "هیچ کدام", "lists.save": "ذخیره", + "lists.search": "جست‌وجو", "load_pending": "{count, plural, one {# مورد جدید} other {# مورد جدید}}", "loading_indicator.label": "در حال بارگذاری…", "media_gallery.hide": "نهفتن", @@ -485,6 +535,8 @@ "notification.admin.report_statuses_other": "{name}، {target} را گزارش داد", "notification.admin.sign_up": "{name} ثبت نام کرد", "notification.admin.sign_up.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} ثبت‌نام کردند", + "notification.annual_report.message": "آمار ‪#Wrapstodon‬ ‏{year}تان منتظر است! لحظه‌های به یاد ماندنی و نقاط پررنگ سال را روی ماستودون رونمایی کنید!", + "notification.annual_report.view": "دیدن ‪#Wrapstodon‬", "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.follow": "‫{name}‬ پی‌گیرتان شد", @@ -710,10 +762,8 @@ "search_results.accounts": "نمایه‌ها", "search_results.all": "همه", "search_results.hashtags": "برچسب‌ها", - "search_results.nothing_found": "چیزی برای این عبارت جست‌وجو یافت نشد", "search_results.see_all": "دیدن همه", "search_results.statuses": "فرسته‌ها", - "search_results.title": "جست‌وجو برای {q}", "server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کرده‌اند (کاربران فعّال ماهانه)", "server_banner.active_users": "کاربر فعّال", "server_banner.administered_by": "به مدیریت:", @@ -770,7 +820,7 @@ "status.sensitive_warning": "محتوای حساس", "status.share": "هم‌رسانی", "status.show_less_all": "نمایش کمتر همه", - "status.show_more_all": "نمایش بیشتر همه", + "status.show_more_all": "نمایش بیش‌تر همه", "status.show_original": "نمایش اصلی", "status.title.with_attachments": "{user} {attachmentCount, plural, one {یک پیوست} other {{attachmentCount} پیوست}} فرستاد", "status.translate": "ترجمه", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index d3c9849e83..299da014a0 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -308,7 +308,6 @@ "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä, ja virkistä sitten sivunlataus. Mikäli ongelma jatkuu, voit mahdollisesti käyttää Mastodonia eri selaimella tai natiivilla sovelluksella.", "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", - "explore.search_results": "Hakutulokset", "explore.suggested_follows": "Käyttäjät", "explore.title": "Selaa", "explore.trending_links": "Uutiset", @@ -358,11 +357,11 @@ "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", "footer.get_app": "Hanki sovellus", - "footer.invite": "Kutsu käyttäjiä", "footer.keyboard_shortcuts": "Pikanäppäimet", "footer.privacy_policy": "Tietosuojakäytäntö", "footer.source_code": "Näytä lähdekoodi", "footer.status": "Tila", + "footer.terms_of_service": "Käyttöehdot", "generic.saved": "Tallennettu", "getting_started.heading": "Näin pääset alkuun", "hashtag.admin_moderation": "Avaa tunnisteen #{name} moderointinäkymä", @@ -549,6 +548,8 @@ "notification.annual_report.view": "Näytä #Wrapstodon", "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät julkaisusi suosikkeihinsa", + "notification.favourite_pm": "{name} lisäsi yksityismainintasi suosikkeihinsa", + "notification.favourite_pm.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät yksityismainintasi suosikkeihinsa", "notification.follow": "{name} seurasi sinua", "notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua", "notification.follow_request": "{name} on pyytänyt lupaa seurata sinua", @@ -780,10 +781,11 @@ "search_results.accounts": "Profiilit", "search_results.all": "Kaikki", "search_results.hashtags": "Aihetunnisteet", - "search_results.nothing_found": "Hakusi ei tuottanut tuloksia", + "search_results.no_results": "Ei tuloksia.", + "search_results.no_search_yet": "Kokeile hakea julkaisuja, profiileja tai aihetunnisteita.", "search_results.see_all": "Näytä kaikki", "search_results.statuses": "Julkaisut", - "search_results.title": "Hae {q}", + "search_results.title": "Hae ”{q}”", "server_banner.about_active_users": "Palvelimen käyttäjät viimeisten 30 päivän ajalta (kuukauden aktiiviset käyttäjät)", "server_banner.active_users": "aktiivista käyttäjää", "server_banner.administered_by": "Ylläpitäjä:", @@ -856,6 +858,7 @@ "subscribed_languages.target": "Vaihda tilattuja kieliä käyttäjältä {target}", "tabs_bar.home": "Koti", "tabs_bar.notifications": "Ilmoitukset", + "terms_of_service.title": "Käyttöehdot", "time_remaining.days": "{number, plural, one {# päivä} other {# päivää}} jäljellä", "time_remaining.hours": "{number, plural, one {# tunti} other {# tuntia}} jäljellä", "time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index a7f2338329..666c493646 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -180,7 +180,6 @@ "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", "errors.unexpected_crash.report_issue": "Iulat ang isyu", - "explore.search_results": "Mga resulta ng paghahanap", "explore.suggested_follows": "Mga tao", "explore.title": "Tuklasin", "explore.trending_links": "Mga balita", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index aa2e78afe8..bae34aee16 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Royn at gera tey óvirkin og lesa síðuna inn av nýggjum. Hjálpir tað ikki, so kann vera, at tað ber til at brúka Mastodon við einum øðrum kaga ella við eini app.", "errors.unexpected_crash.copy_stacktrace": "Avrita stakkaslóðina til setiborðið", "errors.unexpected_crash.report_issue": "Fráboða trupulleika", - "explore.search_results": "Leitiúrslit", "explore.suggested_follows": "Fólk", "explore.title": "Rannsaka", "explore.trending_links": "Tíðindi", @@ -359,7 +358,6 @@ "footer.about": "Um", "footer.directory": "Vangaskrá", "footer.get_app": "Heinta appina", - "footer.invite": "Bjóða fólki", "footer.keyboard_shortcuts": "Knappasnarvegir", "footer.privacy_policy": "Privatlívspolitikkur", "footer.source_code": "Vís keldukotuna", @@ -550,6 +548,8 @@ "notification.annual_report.view": "Sí #Wrapstodon", "notification.favourite": "{name} dámdi postin hjá tær", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær", + "notification.favourite_pm": "{name} yndismerkti tína privatu umrøðu", + "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# annar yndismerkti} other {# onnur yndismerktu}} tína privatu umrøðu", "notification.follow": "{name} fylgdi tær", "notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær", "notification.follow_request": "{name} biður um at fylgja tær", @@ -781,10 +781,8 @@ "search_results.accounts": "Vangar", "search_results.all": "Alt", "search_results.hashtags": "Frámerki", - "search_results.nothing_found": "Hesi leitiorð góvu ongi úrslit", "search_results.see_all": "Sí øll", "search_results.statuses": "Postar", - "search_results.title": "Leita eftir {q}", "server_banner.about_active_users": "Fólk, sum hava brúkt hendan ambætaran seinastu 30 dagarnar (mánaðarligir virknir brúkarar)", "server_banner.active_users": "virknir brúkarar", "server_banner.administered_by": "Umsitari:", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 7c87a36e54..bf4baf3cb1 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -85,10 +85,13 @@ "alert.rate_limited.title": "Débit limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups!", - "alt_text_badge.title": "Texte Alt", + "alt_text_badge.title": "Texte alternatif", "announcement.announcement": "Annonce", + "annual_report.summary.archetype.booster": "Le chasseur de sang-froid", "annual_report.summary.archetype.lurker": "Le faucheur", "annual_report.summary.archetype.oracle": "L’oracle", + "annual_report.summary.archetype.pollster": "Le sondeur", + "annual_report.summary.archetype.replier": "Le papillon social", "annual_report.summary.followers.followers": "abonné·e·s", "annual_report.summary.followers.total": "{count} au total", "annual_report.summary.here_it_is": "Voici votre récap de {year} :", @@ -99,7 +102,8 @@ "annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée", "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé", "annual_report.summary.most_used_hashtag.none": "Aucun", - "annual_report.summary.new_posts.new_posts": "nouveaux posts", + "annual_report.summary.new_posts.new_posts": "nouveaux messages", + "annual_report.summary.percentile.text": "Cela vous place dans le topdes utilisateurs de {domain}.", "annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.", "annual_report.summary.thanks": "Merci de faire partie de Mastodon!", "attachments_list.unprocessed": "(non traité)", @@ -108,10 +112,10 @@ "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_cant_see_posts": "Il peut toujours voir vos messages, mais vous ne verrez pas les siens.", "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", - "block_modal.title": "Bloquer l'utilisateur·rice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "block_modal.title": "Bloquer le compte ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois", "boost_modal.reblog": "Booster le message ?", "boost_modal.undo_reblog": "Annuler le boost du message ?", @@ -125,6 +129,7 @@ "bundle_column_error.routing.body": "La page demandée est introuvable. Êtes-vous sûr que l’URL dans la barre d’adresse est correcte?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Fermer", + "bundle_modal_error.message": "Un problème s'est produit lors du chargement de cet écran.", "bundle_modal_error.retry": "Réessayer", "closed_registrations.other_server_instructions": "Puisque Mastodon est décentralisé, vous pouvez créer un compte sur un autre serveur et interagir quand même avec celui-ci.", "closed_registrations_modal.description": "Créer un compte sur {domain} est présentement impossible, néanmoins souvenez-vous que vous n'avez pas besoin d'un compte spécifiquement sur {domain} pour utiliser Mastodon.", @@ -191,7 +196,7 @@ "confirmations.block.confirm": "Bloquer", "confirmations.delete.confirm": "Supprimer", "confirmations.delete.message": "Voulez-vous vraiment supprimer cette publication?", - "confirmations.delete.title": "Supprimer la publication ?", + "confirmations.delete.title": "Supprimer le message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?", "confirmations.delete_list.title": "Supprimer la liste ?", @@ -200,6 +205,9 @@ "confirmations.edit.confirm": "Éditer", "confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", "confirmations.edit.title": "Remplacer le message ?", + "confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste", + "confirmations.follow_to_list.message": "Vous devez suivre {name} pour l'ajouter à une liste.", + "confirmations.follow_to_list.title": "Suivre l'utilisateur ?", "confirmations.logout.confirm": "Se déconnecter", "confirmations.logout.message": "Voulez-vous vraiment vous déconnecter?", "confirmations.logout.title": "Se déconnecter ?", @@ -214,8 +222,8 @@ "confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?", "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", - "content_warning.show": "Afficher quand même", - "content_warning.show_more": "Déplier", + "content_warning.show": "Montrer quand même", + "content_warning.show_more": "Montrer plus", "conversation.delete": "Supprimer cette conversation", "conversation.mark_as_read": "Marquer comme lu", "conversation.open": "Afficher cette conversation", @@ -231,15 +239,19 @@ "disabled_account_banner.text": "Votre compte {disabledAccount} est présentement désactivé.", "dismissable_banner.community_timeline": "Voici les publications publiques les plus récentes de personnes dont les comptes sont hébergés par {domain}.", "dismissable_banner.dismiss": "Rejeter", + "dismissable_banner.explore_links": "Ces nouvelles sont les plus partagées sur le fediverse aujourd'hui. Les nouvelles plus récentes postées par un plus grand nombre de personnes sont mieux classées.", + "dismissable_banner.explore_statuses": "Ces messages provenant de l'ensemble du fediverse gagnent en popularité aujourd'hui. Les messages les plus récents qui ont reçu le plus d'encouragements et de favoris sont mieux classés.", + "dismissable_banner.explore_tags": "Ces hashtags gagnent du terrain sur le fediverse aujourd'hui. Les hashtags qui sont utilisés par un plus grand nombre de personnes différentes sont mieux classés.", + "dismissable_banner.public_timeline": "Il s'agit des messages publics les plus récents publiés par des personnes sur le fediverse que les personnes sur {domain} suivent.", "domain_block_modal.block": "Bloquer le serveur", "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", - "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciens messages.", "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateur·rice·s de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les messages ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -297,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler un problème", - "explore.search_results": "Résultats", "explore.suggested_follows": "Personnes", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", @@ -347,13 +358,14 @@ "footer.about": "À propos", "footer.directory": "Annuaire des profils", "footer.get_app": "Télécharger l’application", - "footer.invite": "Inviter des gens", "footer.keyboard_shortcuts": "Raccourcis clavier", "footer.privacy_policy": "Politique de confidentialité", "footer.source_code": "Voir le code source", "footer.status": "État", + "footer.terms_of_service": "Conditions d’utilisation", "generic.saved": "Sauvegardé", "getting_started.heading": "Pour commencer", + "hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}", "hashtag.column_header.tag_mode.all": "et {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sans {additional}", @@ -472,6 +484,7 @@ "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.", "lists.find_users_to_add": "Trouver des utilisateurs à ajouter", "lists.list_members": "Lister les membres", + "lists.list_members_count": "{count, plural, one {# member} other {# members}}", "lists.list_name": "Nom de la liste", "lists.new_list_name": "Nom de la nouvelle liste", "lists.no_lists_yet": "Aucune liste pour l'instant.", @@ -482,6 +495,8 @@ "lists.replies_policy.list": "Membres de la liste", "lists.replies_policy.none": "Personne", "lists.save": "Enregistrer", + "lists.search": "Recherche", + "lists.show_replies_to": "Inclure les réponses des membres de la liste à", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", "loading_indicator.label": "Chargement…", "media_gallery.hide": "Masquer", @@ -530,9 +545,12 @@ "notification.admin.report_statuses_other": "{name} a signalé {target}", "notification.admin.sign_up": "{name} s'est inscrit·e", "notification.admin.sign_up.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont inscrit", + "notification.annual_report.message": "Votre {year} #Wrapstodon attend ! Dévoilez les moments forts et mémorables de votre année sur Mastodon !", "notification.annual_report.view": "Voir #Wrapstodon", "notification.favourite": "{name} a ajouté votre publication à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", + "notification.favourite_pm": "{name} a mis votre mention privée en favori", + "notification.favourite_pm.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre mention privée en favori", "notification.follow": "{name} vous suit", "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", @@ -641,6 +659,7 @@ "onboarding.follows.done": "Terminé", "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer de rechercher ou de parcourir la page \"Explorer\" pour trouver des personnes à suivre, ou réessayer plus tard.", "onboarding.follows.search": "Recherche", + "onboarding.follows.title": "Suivre des personnes pour commencer", "onboarding.profile.discoverable": "Rendre mon profil découvrable", "onboarding.profile.discoverable_hint": "Lorsque vous acceptez d'être découvert sur Mastodon, vos messages peuvent apparaître dans les résultats de recherche et les tendances, et votre profil peut être suggéré à des personnes ayant des intérêts similaires aux vôtres.", "onboarding.profile.display_name": "Nom affiché", @@ -763,10 +782,11 @@ "search_results.accounts": "Profils", "search_results.all": "Tout", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Aucun résultat avec ces mots-clés", + "search_results.no_results": "Aucun résultat.", + "search_results.no_search_yet": "Essayez de rechercher des messages, des profils ou des hashtags.", "search_results.see_all": "Afficher tout", "search_results.statuses": "Publications", - "search_results.title": "Rechercher {q}", + "search_results.title": "Résultat de Recherche pour \"{q}\"", "server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)", "server_banner.active_users": "comptes actifs", "server_banner.administered_by": "Administré par:", @@ -839,6 +859,7 @@ "subscribed_languages.target": "Changer les langues abonnées pour {target}", "tabs_bar.home": "Accueil", "tabs_bar.notifications": "Notifications", + "terms_of_service.title": "Conditions d'utilisation", "time_remaining.days": "{number, plural, one {# jour restant} other {# jours restants}}", "time_remaining.hours": "{number, plural, one {# heure restante} other {# heures restantes}}", "time_remaining.minutes": "{number, plural, one {# minute restante} other {# minutes restantes}}", @@ -860,6 +881,7 @@ "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.", "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index ea7850ab60..0e9b698ac8 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -85,10 +85,13 @@ "alert.rate_limited.title": "Nombre de requêtes limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups !", - "alt_text_badge.title": "Texte Alt", + "alt_text_badge.title": "Texte alternatif", "announcement.announcement": "Annonce", + "annual_report.summary.archetype.booster": "Le chasseur de sang-froid", "annual_report.summary.archetype.lurker": "Le faucheur", "annual_report.summary.archetype.oracle": "L’oracle", + "annual_report.summary.archetype.pollster": "Le sondeur", + "annual_report.summary.archetype.replier": "Le papillon social", "annual_report.summary.followers.followers": "abonné·e·s", "annual_report.summary.followers.total": "{count} au total", "annual_report.summary.here_it_is": "Voici votre récap de {year} :", @@ -99,7 +102,8 @@ "annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée", "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé", "annual_report.summary.most_used_hashtag.none": "Aucun", - "annual_report.summary.new_posts.new_posts": "nouveaux posts", + "annual_report.summary.new_posts.new_posts": "nouveaux messages", + "annual_report.summary.percentile.text": "Cela vous place dans le topdes utilisateurs de {domain}.", "annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.", "annual_report.summary.thanks": "Merci de faire partie de Mastodon!", "attachments_list.unprocessed": "(non traité)", @@ -108,10 +112,10 @@ "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_cant_see_posts": "Il peut toujours voir vos messages, mais vous ne verrez pas les siens.", "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", - "block_modal.title": "Bloquer l'utilisateur·rice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "block_modal.title": "Bloquer le compte ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "boost_modal.reblog": "Booster le message ?", "boost_modal.undo_reblog": "Annuler le boost du message ?", @@ -125,6 +129,7 @@ "bundle_column_error.routing.body": "La page demandée est introuvable. Êtes-vous sûr que l’URL dans la barre d’adresse est correcte ?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Fermer", + "bundle_modal_error.message": "Un problème s'est produit lors du chargement de cet écran.", "bundle_modal_error.retry": "Réessayer", "closed_registrations.other_server_instructions": "Puisque Mastodon est décentralisé, vous pouvez créer un compte sur un autre serveur et interagir quand même avec celui-ci.", "closed_registrations_modal.description": "Créer un compte sur {domain} est actuellement impossible, néanmoins souvenez-vous que vous n'avez pas besoin d'un compte spécifiquement sur {domain} pour utiliser Mastodon.", @@ -181,7 +186,7 @@ "compose_form.poll.switch_to_single": "Modifier le sondage pour autoriser qu'un seul choix", "compose_form.poll.type": "Style", "compose_form.publish": "Publier", - "compose_form.publish_form": "Nouvelle publication", + "compose_form.publish_form": "Nouveau message", "compose_form.reply": "Répondre", "compose_form.save_changes": "Mettre à jour", "compose_form.spoiler.marked": "Enlever l’avertissement de contenu", @@ -191,7 +196,7 @@ "confirmations.block.confirm": "Bloquer", "confirmations.delete.confirm": "Supprimer", "confirmations.delete.message": "Voulez-vous vraiment supprimer ce message ?", - "confirmations.delete.title": "Supprimer la publication ?", + "confirmations.delete.title": "Supprimer le message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?", "confirmations.delete_list.title": "Supprimer la liste ?", @@ -200,12 +205,15 @@ "confirmations.edit.confirm": "Modifier", "confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", "confirmations.edit.title": "Remplacer le message ?", + "confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste", + "confirmations.follow_to_list.message": "Vous devez suivre {name} pour l'ajouter à une liste.", + "confirmations.follow_to_list.title": "Suivre l'utilisateur ?", "confirmations.logout.confirm": "Se déconnecter", "confirmations.logout.message": "Voulez-vous vraiment vous déconnecter ?", "confirmations.logout.title": "Se déconnecter ?", "confirmations.mute.confirm": "Masquer", "confirmations.redraft.confirm": "Supprimer et ré-écrire", - "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire ? Ses partages ainsi que ses mises en favori seront perdus et ses réponses seront orphelines.", + "confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire ? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.", "confirmations.redraft.title": "Supprimer et réécrire le message ?", "confirmations.reply.confirm": "Répondre", "confirmations.reply.message": "Répondre maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", @@ -214,8 +222,8 @@ "confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name} ?", "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", - "content_warning.show": "Afficher quand même", - "content_warning.show_more": "Déplier", + "content_warning.show": "Montrer quand même", + "content_warning.show_more": "Montrer plus", "conversation.delete": "Supprimer la conversation", "conversation.mark_as_read": "Marquer comme lu", "conversation.open": "Afficher la conversation", @@ -231,15 +239,19 @@ "disabled_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé.", "dismissable_banner.community_timeline": "Voici les messages publics les plus récents des comptes hébergés par {domain}.", "dismissable_banner.dismiss": "Rejeter", + "dismissable_banner.explore_links": "Ces nouvelles sont les plus partagées sur le fediverse aujourd'hui. Les nouvelles plus récentes postées par un plus grand nombre de personnes sont mieux classées.", + "dismissable_banner.explore_statuses": "Ces messages provenant de l'ensemble du fediverse gagnent en popularité aujourd'hui. Les messages les plus récents qui ont reçu le plus d'encouragements et de favoris sont mieux classés.", + "dismissable_banner.explore_tags": "Ces hashtags gagnent du terrain sur le fediverse aujourd'hui. Les hashtags qui sont utilisés par un plus grand nombre de personnes différentes sont mieux classés.", + "dismissable_banner.public_timeline": "Il s'agit des messages publics les plus récents publiés par des personnes sur le fediverse que les personnes sur {domain} suivent.", "domain_block_modal.block": "Bloquer le serveur", "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", - "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciens messages.", "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateur·rice·s de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les messages ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -297,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", - "explore.search_results": "Résultats de la recherche", "explore.suggested_follows": "Personnes", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", @@ -347,13 +358,14 @@ "footer.about": "À propos", "footer.directory": "Annuaire des profils", "footer.get_app": "Télécharger l’application", - "footer.invite": "Inviter des personnes", "footer.keyboard_shortcuts": "Raccourcis clavier", "footer.privacy_policy": "Politique de confidentialité", "footer.source_code": "Voir le code source", "footer.status": "État", + "footer.terms_of_service": "Conditions d’utilisation", "generic.saved": "Sauvegardé", "getting_started.heading": "Pour commencer", + "hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}", "hashtag.column_header.tag_mode.all": "et {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sans {additional}", @@ -472,6 +484,7 @@ "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.", "lists.find_users_to_add": "Trouver des utilisateurs à ajouter", "lists.list_members": "Lister les membres", + "lists.list_members_count": "{count, plural, one {# member} other {# members}}", "lists.list_name": "Nom de la liste", "lists.new_list_name": "Nom de la nouvelle liste", "lists.no_lists_yet": "Aucune liste pour l'instant.", @@ -482,6 +495,8 @@ "lists.replies_policy.list": "Membres de la liste", "lists.replies_policy.none": "Personne", "lists.save": "Enregistrer", + "lists.search": "Recherche", + "lists.show_replies_to": "Inclure les réponses des membres de la liste à", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", "loading_indicator.label": "Chargement…", "media_gallery.hide": "Masquer", @@ -530,9 +545,12 @@ "notification.admin.report_statuses_other": "{name} a signalé {target}", "notification.admin.sign_up": "{name} s'est inscrit", "notification.admin.sign_up.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont inscrit", + "notification.annual_report.message": "Votre {year} #Wrapstodon attend ! Dévoilez les moments forts et mémorables de votre année sur Mastodon !", "notification.annual_report.view": "Voir #Wrapstodon", "notification.favourite": "{name} a ajouté votre message à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", + "notification.favourite_pm": "{name} a mis votre mention privée en favori", + "notification.favourite_pm.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre mention privée en favori", "notification.follow": "{name} vous suit", "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", @@ -641,6 +659,7 @@ "onboarding.follows.done": "Terminé", "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer d'utiliser la recherche ou parcourir la page de découverte pour trouver des personnes à suivre, ou réessayez plus tard.", "onboarding.follows.search": "Recherche", + "onboarding.follows.title": "Suivre des personnes pour commencer", "onboarding.profile.discoverable": "Rendre mon profil découvrable", "onboarding.profile.discoverable_hint": "Lorsque vous acceptez d'être découvert sur Mastodon, vos messages peuvent apparaître dans les résultats de recherche et les tendances, et votre profil peut être suggéré à des personnes ayant des intérêts similaires aux vôtres.", "onboarding.profile.display_name": "Nom affiché", @@ -733,7 +752,7 @@ "report.thanks.title": "Vous ne voulez pas voir cela ?", "report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.", "report.unfollow": "Ne plus suivre @{name}", - "report.unfollow_explanation": "Vous êtes abonné à ce compte. Pour ne plus voir ses publications dans votre fil principal, retirez-le de votre liste d'abonnements.", + "report.unfollow_explanation": "Vous êtes abonné à ce compte. Pour ne plus voir ses messages dans votre fil principal, retirez-le de votre liste d'abonnements.", "report_notification.attached_statuses": "{count, plural, one {{count} message lié} other {{count} messages liés}}", "report_notification.categories.legal": "Légal", "report_notification.categories.legal_sentence": "contenu illégal", @@ -750,7 +769,7 @@ "search.quick_action.go_to_account": "Aller au profil {x}", "search.quick_action.go_to_hashtag": "Aller au hashtag {x}", "search.quick_action.open_url": "Ouvrir l'URL dans Mastodon", - "search.quick_action.status_search": "Publications correspondant à {x}", + "search.quick_action.status_search": "Messages correspondant à {x}", "search.search_or_paste": "Rechercher ou saisir une URL", "search_popout.full_text_search_disabled_message": "Non disponible sur {domain}.", "search_popout.full_text_search_logged_out_message": "Disponible uniquement lorsque vous êtes connecté.", @@ -763,10 +782,11 @@ "search_results.accounts": "Profils", "search_results.all": "Tous les résultats", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Aucun résultat avec ces mots-clefs", + "search_results.no_results": "Aucun résultat.", + "search_results.no_search_yet": "Essayez de rechercher des messages, des profils ou des hashtags.", "search_results.see_all": "Afficher tout", "search_results.statuses": "Messages", - "search_results.title": "Rechercher {q}", + "search_results.title": "Résultat de Recherche pour \"{q}\"", "server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)", "server_banner.active_users": "comptes actifs", "server_banner.administered_by": "Administré par :", @@ -839,6 +859,7 @@ "subscribed_languages.target": "Changer les langues abonnées pour {target}", "tabs_bar.home": "Accueil", "tabs_bar.notifications": "Notifications", + "terms_of_service.title": "Conditions d'utilisation", "time_remaining.days": "{number, plural, one {# jour restant} other {# jours restants}}", "time_remaining.hours": "{number, plural, one {# heure restante} other {# heures restantes}}", "time_remaining.minutes": "{number, plural, one {# minute restante} other {# minutes restantes}}", @@ -860,6 +881,7 @@ "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.", "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 5d990090ca..8c5fd273e4 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -87,6 +87,13 @@ "alert.unexpected.title": "Oepsy!", "alt_text_badge.title": "Alternative tekst", "announcement.announcement": "Oankundiging", + "annual_report.summary.archetype.booster": "De cool-hunter", + "annual_report.summary.archetype.oracle": "It orakel", + "annual_report.summary.archetype.pollster": "De opinypeiler", + "annual_report.summary.archetype.replier": "De sosjale flinter", + "annual_report.summary.followers.followers": "folgers", + "annual_report.summary.followers.total": "totaal {count}", + "annual_report.summary.here_it_is": "Jo jieroersjoch foar {year}:", "attachments_list.unprocessed": "(net ferwurke)", "audio.hide": "Audio ferstopje", "block_modal.remote_users_caveat": "Wy freegje de server {domain} om jo beslút te respektearjen. It neilibben hjirfan is echter net garandearre, omdat guon servers blokkaden oars ynterpretearje kinne. Iepenbiere berjochten binne mooglik noch hieltyd sichtber foar net-oanmelde brûkers.", @@ -278,7 +285,6 @@ "error.unexpected_crash.next_steps_addons": "Probearje dizze út te skeakeljen en de side te fernijen. Wannear’t dit net helpt is it noch hieltyd mooglik om Mastodon yn in oare browser of mobile app te brûken.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace nei klamboerd kopiearje", "errors.unexpected_crash.report_issue": "Technysk probleem melde", - "explore.search_results": "Sykresultaten", "explore.suggested_follows": "Minsken", "explore.title": "Ferkenne", "explore.trending_links": "Nijs", @@ -328,7 +334,6 @@ "footer.about": "Oer", "footer.directory": "Profylmap", "footer.get_app": "App downloade", - "footer.invite": "Minsken útnûgje", "footer.keyboard_shortcuts": "Fluchtoetsen", "footer.privacy_policy": "Privacybelied", "footer.source_code": "Boarnekoade besjen", @@ -722,10 +727,8 @@ "search_results.accounts": "Profilen", "search_results.all": "Alles", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Dizze syktermen leverje gjin resultaat op", "search_results.see_all": "Alles besjen", "search_results.statuses": "Berjochten", - "search_results.title": "Nei {q} sykje", "server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)", "server_banner.active_users": "warbere brûkers", "server_banner.administered_by": "Beheard troch:", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 50b0c7d437..81b1647fcf 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -103,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag is mó a úsáidtear", "annual_report.summary.most_used_hashtag.none": "Dada", "annual_report.summary.new_posts.new_posts": "postanna nua", + "annual_report.summary.percentile.text": "Cuireann sé sin i mbarr úsáideoirí {domain}. thú", "annual_report.summary.percentile.we_wont_tell_bernie": "Ní inseoidh muid do Bernie.", "annual_report.summary.thanks": "Go raibh maith agat as a bheith mar chuid de Mastodon!", "attachments_list.unprocessed": "(neamhphróiseáilte)", @@ -204,6 +205,9 @@ "confirmations.edit.confirm": "Eagar", "confirmations.edit.message": "Má dhéanann tú eagarthóireacht anois, déanfar an teachtaireacht atá á cumadh agat faoi láthair a fhorscríobh. An bhfuil tú cinnte gur mhaith leat leanúint ar aghaidh?", "confirmations.edit.title": "Forscríobh postáil?", + "confirmations.follow_to_list.confirm": "Lean agus cuir leis an liosta", + "confirmations.follow_to_list.message": "Ní mór duit {name} a leanúint chun iad a chur le liosta.", + "confirmations.follow_to_list.title": "Lean an t-úsáideoir?", "confirmations.logout.confirm": "Logáil amach", "confirmations.logout.message": "An bhfuil tú cinnte gur mhaith leat logáil amach?", "confirmations.logout.title": "Logáil Amach?", @@ -305,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Déan iarracht iad a dhíchumasú agus an leathanach a athnuachan. Mura gcabhraíonn sé sin, seans go mbeidh tú fós in ann Mastodon a úsáid trí bhrabhsálaí nó aip dhúchais eile.", "errors.unexpected_crash.copy_stacktrace": "Cóipeáil rian cruachta go dtí an ghearrthaisce", "errors.unexpected_crash.report_issue": "Tuairiscigh deacracht", - "explore.search_results": "Torthaí cuardaigh", "explore.suggested_follows": "Daoine", "explore.title": "Féach thart", "explore.trending_links": "Nuacht", @@ -355,7 +358,6 @@ "footer.about": "Maidir le", "footer.directory": "Eolaire próifílí", "footer.get_app": "Faigh an aip", - "footer.invite": "Tabhair cuireadh do dhaoine", "footer.keyboard_shortcuts": "Aicearraí méarchláir", "footer.privacy_policy": "Polasaí príobháideachais", "footer.source_code": "Féach ar an gcód foinseach", @@ -492,6 +494,7 @@ "lists.replies_policy.list": "Baill an liosta", "lists.replies_policy.none": "Duine ar bith", "lists.save": "Sábháil", + "lists.search": "Cuardach", "lists.show_replies_to": "Cuir san áireamh freagraí ó bhaill an liosta go", "load_pending": "{count, plural, one {# mír nua} two {# mír nua} few {# mír nua} many {# mír nua} other {# mír nua}}", "loading_indicator.label": "Á lódáil…", @@ -776,10 +779,8 @@ "search_results.accounts": "Próifílí", "search_results.all": "Gach", "search_results.hashtags": "Haischlib", - "search_results.nothing_found": "Níorbh fhéidir aon rud a aimsiú do na téarmaí cuardaigh seo", "search_results.see_all": "Gach rud a fheicáil", "search_results.statuses": "Postálacha", - "search_results.title": "Cuardaigh ar thóir {q}", "server_banner.about_active_users": "Daoine a úsáideann an freastalaí seo le 30 lá anuas (Úsáideoirí Gníomhacha Míosúla)", "server_banner.active_users": "úsáideoirí gníomhacha", "server_banner.administered_by": "Arna riar ag:", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index a90a9b197d..d6893ccfff 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -296,7 +296,6 @@ "error.unexpected_crash.next_steps_addons": "Feuch an cuir thu à comas iad ’s gun ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.", "errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd", "errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas", - "explore.search_results": "Toraidhean an luirg", "explore.suggested_follows": "Daoine", "explore.title": "Rùraich", "explore.trending_links": "Naidheachdan", @@ -346,7 +345,6 @@ "footer.about": "Mu dhèidhinn", "footer.directory": "Eòlaire nam pròifil", "footer.get_app": "Faigh an aplacaid", - "footer.invite": "Thoir cuireadh", "footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir", "footer.privacy_policy": "Poileasaidh prìobhaideachd", "footer.source_code": "Seall am bun-tùs", @@ -742,10 +740,8 @@ "search_results.accounts": "Pròifilean", "search_results.all": "Na h-uile", "search_results.hashtags": "Tagaichean hais", - "search_results.nothing_found": "Cha do lorg sinn dad dha na h-abairtean-luirg seo", "search_results.see_all": "Seall na h-uile", "search_results.statuses": "Postaichean", - "search_results.title": "Lorg {q}", "server_banner.about_active_users": "Daoine a chleachd am frithealaiche seo rè an 30 latha mu dheireadh (Cleachdaichean gnìomhach gach mìos)", "server_banner.active_users": "cleachdaichean gnìomhach", "server_banner.administered_by": "Rianachd le:", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index e43ed157b3..fbf377be5d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", - "explore.search_results": "Resultados da busca", "explore.suggested_follows": "Persoas", "explore.title": "Descubrir", "explore.trending_links": "Novas", @@ -359,11 +358,11 @@ "footer.about": "Sobre", "footer.directory": "Directorio de perfís", "footer.get_app": "Descarga a app", - "footer.invite": "Convidar persoas", "footer.keyboard_shortcuts": "Atallos do teclado", "footer.privacy_policy": "Política de privacidade", "footer.source_code": "Ver código fonte", "footer.status": "Estado", + "footer.terms_of_service": "Termos do servizo", "generic.saved": "Gardado", "getting_started.heading": "Primeiros pasos", "hashtag.admin_moderation": "Abrir interface de moderación para ##{name}", @@ -413,7 +412,7 @@ "interaction_modal.description.reblog": "Cunha conta en Mastodon, poderás promover esta publicación para compartila con quen te siga.", "interaction_modal.description.reply": "Cunha conta en Mastodon, poderás responder a esta publicación.", "interaction_modal.description.vote": "Podes votar nesta enquisa se tes unha conta en Mastodon.", - "interaction_modal.login.action": "Lévame ao inicio", + "interaction_modal.login.action": "Seguir desde alá", "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social", "interaction_modal.no_account_yet": "Aínda non tes unha conta?", "interaction_modal.on_another_server": "Nun servidor diferente", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcou como favorita a túa publicación", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} favoreceron a túa publicación", + "notification.favourite_pm": "{name} favoreceu a túa mención privada", + "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {outra persoa} other {outras # persoas}} favoreceron a túa mención privada", "notification.follow": "{name} comezou a seguirte", "notification.follow.name_and_others": "{name} e {count, plural, one {# mais} other {# mais}} seguíronte", "notification.follow_request": "{name} solicitou seguirte", @@ -627,7 +628,7 @@ "notifications.filter.follows": "Seguimentos", "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", - "notifications.filter.statuses": "Actualizacións de xente á que segues", + "notifications.filter.statuses": "Actualizacións de persoas que segues", "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificacións", "notifications.mark_as_read": "Marcar todas as notificacións como lidas", @@ -684,7 +685,7 @@ "poll_button.remove_poll": "Eliminar enquisa", "privacy.change": "Axustar privacidade", "privacy.direct.long": "Todas as mencionadas na publicación", - "privacy.direct.short": "Persoas concretas", + "privacy.direct.short": "Persoas mencionadas", "privacy.private.long": "Só para seguidoras", "privacy.private.short": "Seguidoras", "privacy.public.long": "Para todas dentro e fóra de Mastodon", @@ -781,10 +782,11 @@ "search_results.accounts": "Perfís", "search_results.all": "Todo", "search_results.hashtags": "Cancelos", - "search_results.nothing_found": "Non atopamos nada con estes termos de busca", + "search_results.no_results": "Sen resultados.", + "search_results.no_search_yet": "Intenta buscando publicacións, perfís ou cancelos.", "search_results.see_all": "Ver todo", "search_results.statuses": "Publicacións", - "search_results.title": "Resultados para {q}", + "search_results.title": "Resultados para «{q}»", "server_banner.about_active_users": "Persoas que usaron este servidor nos últimos 30 días (Usuarias Activas Mensuais)", "server_banner.active_users": "usuarias activas", "server_banner.administered_by": "Administrada por:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Cambiar a subscrición a idiomas para {target}", "tabs_bar.home": "Inicio", "tabs_bar.notifications": "Notificacións", + "terms_of_service.title": "Termos do Servizo", "time_remaining.days": "Remata en {number, plural, one {# día} other {# días}}", "time_remaining.hours": "Remata en {number, plural, one {# hora} other {# horas}}", "time_remaining.minutes": "Remata en {number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a9bd632ec1..01f0bdca42 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "נסה/י להסיר אותם ולרענן את הדף. אם זה לא עוזר, אולי אפשר עדיין להשתמש במסטודון דרך דפדפן אחר או באמצעות אפליקציה ילידית.", "errors.unexpected_crash.copy_stacktrace": "להעתיק את הקוד ללוח הכתיבה", "errors.unexpected_crash.report_issue": "דווח על בעיה", - "explore.search_results": "תוצאות חיפוש", "explore.suggested_follows": "אנשים", "explore.title": "סיור", "explore.trending_links": "חדשות", @@ -359,11 +358,11 @@ "footer.about": "אודות", "footer.directory": "ספריית פרופילים", "footer.get_app": "להתקנת היישומון", - "footer.invite": "להזמין אנשים", "footer.keyboard_shortcuts": "קיצורי מקלדת", "footer.privacy_policy": "מדיניות פרטיות", "footer.source_code": "צפיה בקוד המקור", "footer.status": "מצב", + "footer.terms_of_service": "תנאי השירות", "generic.saved": "נשמר", "getting_started.heading": "בואו נתחיל", "hashtag.admin_moderation": "פתיחת ממשק פיקוח דיון עבור #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "לצפייה ב- #סיכומודון", "notification.favourite": "הודעתך חובבה על ידי {name}", "notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך", + "notification.favourite_pm": "{name} חיבב.ה איזכור שלך בהודעה פרטית", + "notification.favourite_pm.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו הודעתך הפרטית", "notification.follow": "{name} במעקב אחרייך", "notification.follow.name_and_others": "{name} ועוד {count, plural,one {מישהו} other {# אחרים}} החלו לעקוב אחריך", "notification.follow_request": "{name} ביקשו לעקוב אחריך", @@ -781,10 +782,8 @@ "search_results.accounts": "פרופילים", "search_results.all": "כל התוצאות", "search_results.hashtags": "תגיות", - "search_results.nothing_found": "לא נמצא דבר עבור תנאי חיפוש אלה", "search_results.see_all": "הראה הכל", "search_results.statuses": "הודעות", - "search_results.title": "חפש את: {q}", "server_banner.about_active_users": "משתמשים פעילים בשרת ב־30 הימים האחרונים (משתמשים פעילים חודשיים)", "server_banner.active_users": "משתמשים פעילים", "server_banner.administered_by": "מנוהל ע\"י:", @@ -857,6 +856,7 @@ "subscribed_languages.target": "שינוי רישום שפה עבור {target}", "tabs_bar.home": "פיד הבית", "tabs_bar.notifications": "התראות", + "terms_of_service.title": "תנאי השירות", "time_remaining.days": "נותרו {number, plural, one {# יום} other {# ימים}}", "time_remaining.hours": "נותרו {number, plural, one {# שעה} other {# שעות}}", "time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index ab7001f15c..b2e00e14b0 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -242,7 +242,6 @@ "error.unexpected_crash.next_steps_addons": "उन्हें अक्षम करने और पृष्ठ को ताज़ा करने का प्रयास करें। यदि वह मदद नहीं करता है, तो आप अभी भी मास्टोडन का उपयोग किसी भिन्न ब्राउज़र या नेटिव ऐप के माध्यम से कर सकते हैं।", "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", - "explore.search_results": "सर्च रिजल्ट्स", "explore.suggested_follows": "लोग", "explore.title": "एक्स्प्लोर", "explore.trending_links": "समाचार", @@ -275,7 +274,6 @@ "footer.about": "अबाउट", "footer.directory": "प्रोफाइल्स डायरेक्टरी", "footer.get_app": "अप्प प्राप्त करें", - "footer.invite": "लोगों को आमंत्रित करें", "footer.keyboard_shortcuts": "कीबोर्ड शॉर्टकट", "footer.privacy_policy": "प्राइवेसी पालिसी", "footer.source_code": "सोर्स कोड देखें", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index ebb15ed096..6e8a86989c 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -205,7 +205,6 @@ "error.unexpected_crash.next_steps_addons": "Pokušaj ih onemogućiti i osvježiti stranicu. Ako to ne pomogne, i dalje ćeš biti u mogućnosti koristiti Mastodon preko nekog drugog preglednika ili izvornog app-a.", "errors.unexpected_crash.copy_stacktrace": "Kopiraj stacktrace u međuspremnik", "errors.unexpected_crash.report_issue": "Prijavi problem", - "explore.search_results": "Rezultati pretrage", "explore.suggested_follows": "Ljudi", "explore.title": "Pretraži", "explore.trending_links": "Novosti", @@ -227,7 +226,6 @@ "footer.about": "O aplikaciji", "footer.directory": "Direktorij profila", "footer.get_app": "Preuzmi aplikaciju", - "footer.invite": "Pozovi ljude", "footer.keyboard_shortcuts": "Tipkovni prečaci", "footer.privacy_policy": "Pravila o zaštiti privatnosti", "footer.source_code": "Prikaz izvornog koda", @@ -413,10 +411,8 @@ "search_popout.user": "korisnik", "search_results.accounts": "Profili", "search_results.all": "Sve", - "search_results.nothing_found": "Nije pronađeno ništa za te ključne riječi", "search_results.see_all": "Prikaži sve", "search_results.statuses": "Toots", - "search_results.title": "Traži {q}", "server_banner.about_active_users": "Popis aktivnih korisnika prošli mjesec", "server_banner.active_users": "aktivni korisnici", "server_banner.administered_by": "Administrator je:", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 25f37c82a1..dbca2bb691 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", - "explore.search_results": "Keresési találatok", "explore.suggested_follows": "Emberek", "explore.title": "Felfedezés", "explore.trending_links": "Hírek", @@ -359,11 +358,11 @@ "footer.about": "Névjegy", "footer.directory": "Profiltár", "footer.get_app": "Alkalmazás beszerzése", - "footer.invite": "Emberek meghívása", "footer.keyboard_shortcuts": "Gyorsbillentyűk", "footer.privacy_policy": "Adatvédelmi szabályzat", "footer.source_code": "Forráskód megtekintése", "footer.status": "Állapot", + "footer.terms_of_service": "Felhasználási feltételek", "generic.saved": "Elmentve", "getting_started.heading": "Első lépések", "hashtag.admin_moderation": "Moderációs felület megnyitása a következőhöz: #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "#Wrapstodon Megtekintése", "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet", "notification.favourite.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a bejegyzésedet", + "notification.favourite_pm": "{name} kedvelte a privát említésedet", + "notification.favourite_pm.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a privát említésedet", "notification.follow": "{name} követ téged", "notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett", "notification.follow_request": "{name} követni szeretne téged", @@ -781,10 +782,11 @@ "search_results.accounts": "Profilok", "search_results.all": "Összes", "search_results.hashtags": "Hashtagek", - "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre", + "search_results.no_results": "Nincs találat.", + "search_results.no_search_yet": "Próbálj meg bejegyzések, profilok vagy címkék után keresni.", "search_results.see_all": "Összes megtekintése", "search_results.statuses": "Bejegyzések", - "search_results.title": "{q} keresése", + "search_results.title": "\"{q}\" keresése", "server_banner.about_active_users": "Az elmúlt 30 napban ezt a kiszolgálót használók száma (Havi aktív felhasználók)", "server_banner.active_users": "aktív felhasználó", "server_banner.administered_by": "Adminisztrátor:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Feliratkozott nyelvek módosítása {target} esetében", "tabs_bar.home": "Kezdőlap", "tabs_bar.notifications": "Értesítések", + "terms_of_service.title": "Felhasználási feltételek", "time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra", "time_remaining.hours": "{number, plural, one {# óra} other {# óra}} van hátra", "time_remaining.minutes": "{number, plural, one {# perc} other {# perc}} van hátra", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 55b32b2c38..235969ad6c 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -180,7 +180,6 @@ "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", - "explore.search_results": "Որոնման արդիւնքներ", "explore.suggested_follows": "Մարդիկ", "explore.title": "Բացայայտել", "explore.trending_links": "Նորութիւններ", @@ -201,7 +200,6 @@ "footer.about": "Մասին", "footer.directory": "Հաշիւների մատեան", "footer.get_app": "Ներբեռնիր յաւելուած", - "footer.invite": "Հրաւիրել մարդկանց", "footer.keyboard_shortcuts": "Ստեղնաշարի կարճատներ", "footer.privacy_policy": "Գաղտնիութեան քաղաքականութիւն", "footer.source_code": "Նայել ելակոդը", @@ -398,7 +396,6 @@ "search_results.hashtags": "Պիտակներ", "search_results.see_all": "Տեսնել բոլորը", "search_results.statuses": "Գրառումներ", - "search_results.title": "Որոնել {q}-ն", "server_banner.active_users": "ակտիւ մարդիկ", "server_banner.administered_by": "Կառաւարող", "server_banner.server_stats": "Սերուերի վիճակը", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 35f0461422..4155c6565b 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -85,7 +85,7 @@ "alert.rate_limited.title": "Excesso de requestas", "alert.unexpected.message": "Un error inexpectate ha occurrite.", "alert.unexpected.title": "Ups!", - "alt_text_badge.title": "Texto alt", + "alt_text_badge.title": "Texto alternative", "announcement.announcement": "Annuncio", "annual_report.summary.archetype.booster": "Le impulsator", "annual_report.summary.archetype.lurker": "Le lector", @@ -103,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus usate", "annual_report.summary.most_used_hashtag.none": "Necun", "annual_report.summary.new_posts.new_posts": "nove messages", + "annual_report.summary.percentile.text": "Isto te pone in le primeusatores de {domain}.", "annual_report.summary.percentile.we_wont_tell_bernie": "Tu es un primo inter pares.", "annual_report.summary.thanks": "Gratias pro facer parte de Mastodon!", "attachments_list.unprocessed": "(non processate)", @@ -143,10 +144,12 @@ "column.direct": "Mentiones private", "column.directory": "Navigar profilos", "column.domain_blocks": "Dominios blocate", + "column.edit_list": "Modificar lista", "column.favourites": "Favorites", "column.firehose": "Fluxos in directo", "column.follow_requests": "Requestas de sequimento", "column.home": "Initio", + "column.list_members": "Gerer le membros del lista", "column.lists": "Listas", "column.mutes": "Usatores silentiate", "column.notifications": "Notificationes", @@ -202,6 +205,9 @@ "confirmations.edit.confirm": "Modificar", "confirmations.edit.message": "Si tu modifica isto ora, le message in curso de composition essera perdite. Es tu secur de voler continuar?", "confirmations.edit.title": "Superscriber le message?", + "confirmations.follow_to_list.confirm": "Sequer e adder al lista", + "confirmations.follow_to_list.message": "Tu debe sequer {name} pro poter adder le/la a un lista.", + "confirmations.follow_to_list.title": "Sequer le usator?", "confirmations.logout.confirm": "Clauder session", "confirmations.logout.message": "Es tu secur que tu vole clauder le session?", "confirmations.logout.title": "Clauder session?", @@ -233,6 +239,9 @@ "disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.", "dismissable_banner.community_timeline": "Ecce le messages public le plus recente del personas con contos sur {domain}.", "dismissable_banner.dismiss": "Clauder", + "dismissable_banner.explore_links": "Iste articulos de novas se condivide le plus sur le fediverso hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.", + "dismissable_banner.explore_statuses": "Iste messages de tote le fediverso gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.", + "dismissable_banner.explore_tags": "Iste hashtags gania popularitate sur le fediverso hodie. Le hashtags usate per plus personas differente se classifica plus in alto.", "dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le fediverso que le gente sur {domain} seque.", "domain_block_modal.block": "Blocar le servitor", "domain_block_modal.block_account_instead": "Blocar @{name} in su loco", @@ -240,8 +249,8 @@ "domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.", "domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.", "domain_block_modal.title": "Blocar dominio?", - "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequace} other {{followersCountDisplay} sequaces}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.", - "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequaces e le personas que tu seque ab iste servitor.", + "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequitor} other {{followersCountDisplay} sequitores}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.", + "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequitores e personas que tu seque de iste servitor.", "domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.", "domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.", "domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.", @@ -300,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Tenta disactivar istes e refrescar le pagina. Si isto non remedia le problema, es possibile que tu pote totevia usar Mastodon per medio de un altere navigator o application native.", "errors.unexpected_crash.copy_stacktrace": "Copiar le traciamento del pila al area de transferentia", "errors.unexpected_crash.report_issue": "Reportar problema", - "explore.search_results": "Resultatos de recerca", "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Novas", @@ -323,7 +331,7 @@ "filter_modal.select_filter.title": "Filtrar iste message", "filter_modal.title.status": "Filtrar un message", "filter_warning.matches_filter": "Corresponde al filtro “{title}”", - "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nemo} one {un persona} other {# personas}} que tu pote cognoscer", + "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {necuno} one {un persona} other {# personas}} que tu pote cognoscer", "filtered_notifications_banner.title": "Notificationes filtrate", "firehose.all": "Toto", "firehose.local": "Iste servitor", @@ -350,13 +358,14 @@ "footer.about": "A proposito", "footer.directory": "Directorio de profilos", "footer.get_app": "Obtener le application", - "footer.invite": "Invitar personas", "footer.keyboard_shortcuts": "Accessos directe de claviero", "footer.privacy_policy": "Politica de confidentialitate", "footer.source_code": "Vider le codice fonte", "footer.status": "Stato", + "footer.terms_of_service": "Conditiones de servicio", "generic.saved": "Salvate", "getting_started.heading": "Prime passos", + "hashtag.admin_moderation": "Aperir le interfacie de moderation pro #{name}", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -372,9 +381,9 @@ "hashtag.follow": "Sequer hashtag", "hashtag.unfollow": "Non sequer plus le hashtag", "hashtags.and_other": "…e {count, plural, one {}other {# plus}}", - "hints.profiles.followers_may_be_missing": "Le sequaces pro iste profilo pote mancar.", - "hints.profiles.follows_may_be_missing": "Sequites pro iste profilo pote mancar.", - "hints.profiles.posts_may_be_missing": "Alcun messages ab iste profilo pote mancar.", + "hints.profiles.followers_may_be_missing": "Le sequitores de iste profilo pote mancar.", + "hints.profiles.follows_may_be_missing": "Le profilos sequite per iste profilo pote mancar.", + "hints.profiles.posts_may_be_missing": "Alcun messages de iste profilo pote mancar.", "hints.profiles.see_more_followers": "Vider plus de sequitores sur {domain}", "hints.profiles.see_more_follows": "Vider plus de sequites sur {domain}", "hints.profiles.see_more_posts": "Vider plus de messages sur {domain}", @@ -387,11 +396,11 @@ "home.pending_critical_update.link": "Vider actualisationes", "home.pending_critical_update.title": "Actualisation de securitate critic disponibile!", "home.show_announcements": "Monstrar annuncios", - "ignore_notifications_modal.disclaimer": "Mastodon non pote informar le usatores que tu ha ignorate lor avisos. Ignorar avisos non stoppara le messages mesme de esser inviate.", + "ignore_notifications_modal.disclaimer": "Mastodon non pote informar al usatores que tu ha ignorate lor notificationes. Ignorar le notificationes non impedira le invio del messages.", "ignore_notifications_modal.filter_instead": "Filtrar in vice", "ignore_notifications_modal.filter_to_act_users": "Tu ancora potera acceptar, rejectar, o reportar usatores", - "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta evitar confusion potential", - "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider avisos filtrate separatemente", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta a evitar confusion potential", + "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider separatemente le notificationes filtrate", "ignore_notifications_modal.ignore": "Ignorar le notificationes", "ignore_notifications_modal.limited_accounts_title": "Ignorar le notificationes de contos moderate?", "ignore_notifications_modal.new_accounts_title": "Ignorar le notificationes de nove contos?", @@ -455,8 +464,8 @@ "lightbox.close": "Clauder", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", - "lightbox.zoom_in": "Aggrandir a dimension actual", - "lightbox.zoom_out": "Aggrandir pro adaptar", + "lightbox.zoom_in": "Aggrandir al dimension real", + "lightbox.zoom_out": "Diminuer pro adaptar", "limited_account_hint.action": "Monstrar profilo in omne caso", "limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.", "link_preview.author": "Per {name}", @@ -466,13 +475,28 @@ "lists.add_to_list": "Adder al lista", "lists.add_to_lists": "Adder {name} al listas", "lists.create": "Crear", + "lists.create_a_list_to_organize": "Crear un nove lista pro organisar tu fluxo de initio", + "lists.create_list": "Crear lista", "lists.delete": "Deler lista", + "lists.done": "Facite", "lists.edit": "Modificar lista", + "lists.exclusive": "Celar memberos in Initio", + "lists.exclusive_hint": "Si alcuno es sur iste lista, celar iste persona in tu fluxo de initio pro evitar de vider su messages duo vices.", "lists.find_users_to_add": "Trovar usatores a adder", + "lists.list_members": "Membros del lista", + "lists.list_members_count": "{count, plural, one {# membro} other {# membros}}", + "lists.list_name": "Nomine del lista", "lists.new_list_name": "Nove nomine de lista", + "lists.no_lists_yet": "Necun lista ancora.", + "lists.no_members_yet": "Necun membro ancora.", + "lists.no_results_found": "Necun resultato trovate.", + "lists.remove_member": "Remover", "lists.replies_policy.followed": "Qualcunque usator sequite", "lists.replies_policy.list": "Membros del lista", "lists.replies_policy.none": "Nemo", + "lists.save": "Salvar", + "lists.search": "Cercar", + "lists.show_replies_to": "Includer responsas de membros del lista a", "load_pending": "{count, plural, one {# nove entrata} other {# nove entratas}}", "loading_indicator.label": "Cargante…", "media_gallery.hide": "Celar", @@ -520,11 +544,13 @@ "notification.admin.report_statuses": "{name} ha reportate {target} pro {category}", "notification.admin.report_statuses_other": "{name} ha reportate {target}", "notification.admin.sign_up": "{name} se ha inscribite", - "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere usator} other {altere # usatores}} se inscribeva", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere persona} other {# altere personas}} se ha inscribite", "notification.annual_report.message": "Tu summario #Wrapstodon pro {year} attende! Revela le momentos saliente e memorabile de tu anno sur Mastodon!", "notification.annual_report.view": "Visitar summario #Wrapstodon", "notification.favourite": "{name} ha marcate tu message como favorite", - "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} favoriva tu message", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha marcate tu message como favorite", + "notification.favourite_pm": "{name} ha marcate tu mention privte como favorite", + "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha marcate tu mention private como favorite", "notification.follow": "{name} te ha sequite", "notification.follow.name_and_others": "{name} e {count, plural, one {# other} other {# alteres}} te ha sequite", "notification.follow_request": "{name} ha requestate de sequer te", @@ -534,7 +560,7 @@ "notification.label.private_reply": "Responsa private", "notification.label.reply": "Responder", "notification.mention": "Mention", - "notification.mentioned_you": "{name} te mentionava", + "notification.mentioned_you": "{name} te ha mentionate", "notification.moderation-warning.learn_more": "Apprender plus", "notification.moderation_warning": "Tu ha recipite un advertimento de moderation", "notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.", @@ -547,7 +573,7 @@ "notification.own_poll": "Tu sondage ha finite", "notification.poll": "Un sondage in le qual tu ha votate ha finite", "notification.reblog": "{name} ha impulsate tu message", - "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} promoveva tu message", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha impulsate tu message", "notification.relationships_severance_event": "Connexiones perdite con {name}", "notification.relationships_severance_event.account_suspension": "Un administrator de {from} ha suspendiute {target}. Isto significa que tu non pote plus reciper actualisationes de iste persona o interager con ille.", "notification.relationships_severance_event.domain_block": "Un administrator de {from} ha blocate {target}, includente {followersCount} de tu sequitores e {followingCount, plural, one {# conto} other {# contos}} que tu seque.", @@ -556,19 +582,19 @@ "notification.status": "{name} ha justo ora publicate", "notification.update": "{name} ha modificate un message", "notification_requests.accept": "Acceptar", - "notification_requests.accept_multiple": "{count, plural, one {Accepta # requesta…} other {Accepta # requestas…}}", - "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accepta requesta} other {Accepta requestas}}", - "notification_requests.confirm_accept_multiple.message": "Tu acceptara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Desira tu vermente continuar?", + "notification_requests.accept_multiple": "{count, plural, one {Acceptar # requesta…} other {Acceptar # requestas…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptar le requesta} other {Acceptar le requestas}}", + "notification_requests.confirm_accept_multiple.message": "Tu es sur le puncto de acceptar {count, plural, one {un requesta de notification} other {# requestas de notification}}. Es tu secur de voler continuar?", "notification_requests.confirm_accept_multiple.title": "Acceptar petitiones de notification?", - "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar requesta} other {Rejectar requestas}}", - "notification_requests.confirm_dismiss_multiple.message": "Tu rejectara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Tu non potera facilemente acceder {count, plural, one {lo} other {los}} ancora. Desira tu vermente continuar?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar le requesta} other {Rejectar le requestas}}", + "notification_requests.confirm_dismiss_multiple.message": "Tu es sur le puncto de rejectar {count, plural, one {un requesta} other {# requestas}} de notification. Tu non potera facilemente acceder a {count, plural, one {illo} other {illos}} plus tarde. Es tu secur de voler continuar?", "notification_requests.confirm_dismiss_multiple.title": "Dimitter petitiones de notification?", "notification_requests.dismiss": "Clauder", "notification_requests.dismiss_multiple": "{count, plural, one {Rejectar # requesta…} other {Rejectar # requestas…}}", "notification_requests.edit_selection": "Modificar", "notification_requests.exit_selection": "Facite", - "notification_requests.explainer_for_limited_account": "Le avisos ab iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.", - "notification_requests.explainer_for_limited_remote_account": "Le avisos ab iste conto ha essite filtrate perque le conto o su servitor ha essite limitate per un moderator.", + "notification_requests.explainer_for_limited_account": "Le notificationes de iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.", + "notification_requests.explainer_for_limited_remote_account": "Le notificationes de iste conto ha essite filtrate perque le conto o su servitor ha essite limitate per un moderator.", "notification_requests.maximize": "Maximisar", "notification_requests.minimize_banner": "Minimisar le bandiera del avisos filtrate", "notification_requests.notifications_from": "Notificationes de {name}", @@ -629,6 +655,8 @@ "notifications_permission_banner.enable": "Activar notificationes de scriptorio", "notifications_permission_banner.how_to_control": "Pro reciper notificationes quando Mastodon non es aperte, activa le notificationes de scriptorio. Post lor activation, es possibile controlar precisemente qual typos de interaction genera notificationes de scriptorio per medio del button {icon} hic supra.", "notifications_permission_banner.title": "Non mancar jammais a un cosa", + "onboarding.follows.back": "Retro", + "onboarding.follows.done": "Facite", "onboarding.follows.empty": "Regrettabilemente, non es possibile monstrar resultatos al momento. Tu pote tentar usar le recerca o percurrer le pagina de exploration pro cercar personas a sequer, o tentar lo de novo plus tarde.", "onboarding.follows.search": "Cercar", "onboarding.follows.title": "Seque personas pro comenciar", @@ -754,10 +782,8 @@ "search_results.accounts": "Profilos", "search_results.all": "Toto", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Nihil trovate pro iste terminos de recerca", "search_results.see_all": "Vider toto", "search_results.statuses": "Messages", - "search_results.title": "Cercar {q}", "server_banner.about_active_users": "Personas que ha usate iste servitor in le ultime 30 dies (usatores active per mense)", "server_banner.active_users": "usatores active", "server_banner.administered_by": "Administrate per:", @@ -775,7 +801,7 @@ "status.bookmark": "Adder al marcapaginas", "status.cancel_reblog_private": "Disfacer impulso", "status.cannot_reblog": "Iste message non pote esser impulsate", - "status.continued_thread": "Argumento continuitate", + "status.continued_thread": "Continuation del discussion", "status.copy": "Copiar ligamine a message", "status.delete": "Deler", "status.detailed_status": "Vista detaliate del conversation", @@ -830,6 +856,7 @@ "subscribed_languages.target": "Cambiar le linguas subscribite pro {target}", "tabs_bar.home": "Initio", "tabs_bar.notifications": "Notificationes", + "terms_of_service.title": "Conditiones de servicio", "time_remaining.days": "{number, plural, one {# die} other {# dies}} restante", "time_remaining.hours": "{number, plural, one {# hora} other {# horas}} restante", "time_remaining.minutes": "{number, plural, one {# minuta} other {# minutas}} restante", @@ -847,11 +874,11 @@ "upload_error.poll": "Incargamento de files non permittite con sondages.", "upload_form.audio_description": "Describe lo pro le gente con difficultates auditive", "upload_form.description": "Describe lo pro le gente con difficultates visual", - "upload_form.drag_and_drop.instructions": "Pro colliger un annexo de medios, pressar Spatio o Inviar. Trahente lo, usar le claves flecha pro mover le annexo de medios in ulle direction date. De novo pressar Spatio o Inviar pro deponer le annexo de medios in su nove position, o pressar Escappar pro cancellar.", - "upload_form.drag_and_drop.on_drag_cancel": "Le extraction era cancellate. Le annexo de medios {item} era deponite.", - "upload_form.drag_and_drop.on_drag_end": "Le annexo de medios {item} era deponite.", - "upload_form.drag_and_drop.on_drag_over": "Le annexo de medios {item} era movite.", - "upload_form.drag_and_drop.on_drag_start": "Annexo de medios {item} colligite.", + "upload_form.drag_and_drop.instructions": "Pro prender un annexo multimedial, preme sur le barra de spatios o Enter. Trahente lo, usa le claves de flecha pro displaciar le annexo multimedial in un certe direction. Preme le barra de spatios o Enter de novo pro deponer le annexo multimedial in su nove position, o preme sur Escape pro cancellar.", + "upload_form.drag_and_drop.on_drag_cancel": "Le displaciamento ha essite cancellate. Le annexo multimedial {item} ha essite deponite.", + "upload_form.drag_and_drop.on_drag_end": "Le annexo de medios {item} ha essite deponite.", + "upload_form.drag_and_drop.on_drag_over": "Le annexo multimedial {item} ha essite displaciate.", + "upload_form.drag_and_drop.on_drag_start": "Le annexo multimedial {item} ha essite prendite.", "upload_form.edit": "Modificar", "upload_form.thumbnail": "Cambiar le miniatura", "upload_form.video_description": "Describe lo pro le gente con difficultates auditive o visual", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index ee5e888c39..dda0a8e43b 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -271,7 +271,6 @@ "error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika itu tidak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi asli.", "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", - "explore.search_results": "Hasil pencarian", "explore.suggested_follows": "Orang", "explore.title": "Jelajahi", "explore.trending_links": "Berita", @@ -315,7 +314,6 @@ "footer.about": "Tentang", "footer.directory": "Direktori profil", "footer.get_app": "Dapatkan aplikasi", - "footer.invite": "Undang orang", "footer.keyboard_shortcuts": "Pintasan papan ketik", "footer.privacy_policy": "Kebijakan privasi", "footer.source_code": "Lihat kode sumber", @@ -536,9 +534,7 @@ "search.search_or_paste": "Cari atau ketik URL", "search_results.all": "Semua", "search_results.hashtags": "Tagar", - "search_results.nothing_found": "Tidak dapat menemukan apa pun untuk istilah-istilah pencarian ini", "search_results.statuses": "Kiriman", - "search_results.title": "Cari {q}", "server_banner.about_active_users": "Orang menggunakan server ini selama 30 hari terakhir (Pengguna Aktif Bulanan)", "server_banner.active_users": "pengguna aktif", "server_banner.administered_by": "Dikelola oleh:", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index db144a3d79..aae8337d05 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -258,7 +258,6 @@ "error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", "errors.unexpected_crash.copy_stacktrace": "Copiar cumul-tracie a paperiere", "errors.unexpected_crash.report_issue": "Raportar un problema", - "explore.search_results": "Resultates de sercha", "explore.suggested_follows": "Gente", "explore.title": "Explorar", "explore.trending_links": "Novas", @@ -306,7 +305,6 @@ "footer.about": "Information", "footer.directory": "Profilarium", "footer.get_app": "Obtener li aplication", - "footer.invite": "Invitar gente", "footer.keyboard_shortcuts": "Rapid-tastes", "footer.privacy_policy": "Politica pri privatie", "footer.source_code": "Vider li fonte-code", @@ -626,10 +624,8 @@ "search_results.accounts": "Profiles", "search_results.all": "Omni", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Trovat se nullcos por ti término de sercha", "search_results.see_all": "Vider omni", "search_results.statuses": "Postas", - "search_results.title": "Sercha por {q}", "server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)", "server_banner.active_users": "activ usatores", "server_banner.administered_by": "Administrat de:", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 64c0f8ac9f..560e01ecaf 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -276,7 +276,6 @@ "error.unexpected_crash.next_steps_addons": "Probez desaktivigar e rifreshar pagino. Se to ne helpas, vu forsan ankore povas uzar Mastodon per diferenta vidilo o provizita softwaro.", "errors.unexpected_crash.copy_stacktrace": "Kopiez amastraso a klipplanko", "errors.unexpected_crash.report_issue": "Reportigez problemo", - "explore.search_results": "Trovuri", "explore.suggested_follows": "Personi", "explore.title": "Explorez", "explore.trending_links": "Novaji", @@ -325,7 +324,6 @@ "footer.about": "Pri co", "footer.directory": "Profilcheflisto", "footer.get_app": "Obtenez la softwaro", - "footer.invite": "Invitez personi", "footer.keyboard_shortcuts": "Kombini di klavi", "footer.privacy_policy": "Guidilo pri privateso", "footer.source_code": "Vidar la fontokodexo", @@ -714,10 +712,8 @@ "search_results.accounts": "Profili", "search_results.all": "Omna", "search_results.hashtags": "Hashtagi", - "search_results.nothing_found": "Ne povas ganar irgo per ca trovvorti", "search_results.see_all": "Videz omni", "search_results.statuses": "Posti", - "search_results.title": "Trovez {q}", "server_banner.about_active_users": "Personi quo uzas ca servilo dum antea 30 dii (monate aktiva uzanti)", "server_banner.active_users": "aktiva uzanti", "server_banner.administered_by": "Administresis da:", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 3f0ef723e9..20bf53a456 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", - "explore.search_results": "Leitarniðurstöður", "explore.suggested_follows": "Fólk", "explore.title": "Kanna", "explore.trending_links": "Fréttir", @@ -359,11 +358,11 @@ "footer.about": "Nánari upplýsingar", "footer.directory": "Notandasniðamappa", "footer.get_app": "Ná í forritið", - "footer.invite": "Bjóða fólki", "footer.keyboard_shortcuts": "Flýtileiðir á lyklaborði", "footer.privacy_policy": "Meðferð persónuupplýsinga", "footer.source_code": "Skoða frumkóða", "footer.status": "Staða", + "footer.terms_of_service": "Þjónustuskilmálar", "generic.saved": "Vistað", "getting_started.heading": "Komast í gang", "hashtag.admin_moderation": "Opna umsjónarviðmót fyrir #{name}", @@ -781,10 +780,8 @@ "search_results.accounts": "Notendasnið", "search_results.all": "Allt", "search_results.hashtags": "Myllumerki", - "search_results.nothing_found": "Gat ekki fundið neitt sem samsvarar þessum leitarorðum", "search_results.see_all": "Sjá allt", "search_results.statuses": "Færslur", - "search_results.title": "Leita að {q}", "server_banner.about_active_users": "Folk sem hefur notað þennan netþjón síðustu 30 daga (virkir notendur í mánuðinum)", "server_banner.active_users": "virkir notendur", "server_banner.administered_by": "Stýrt af:", @@ -857,6 +854,7 @@ "subscribed_languages.target": "Breyta tungumálum í áskrift fyrir {target}", "tabs_bar.home": "Heim", "tabs_bar.notifications": "Tilkynningar", + "terms_of_service.title": "Þjónustuskilmálar", "time_remaining.days": "{number, plural, one {# dagur} other {# dagar}} eftir", "time_remaining.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}} eftir", "time_remaining.minutes": "{number, plural, one {# mínúta} other {# mínútur}} eftir", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 5b4ad99565..1b82399a50 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e a ricaricare la pagina. Se ciò non aiuta, potresti ancora utilizzare Mastodon tramite un browser differente o un'app nativa.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala un problema", - "explore.search_results": "Risultati della ricerca", "explore.suggested_follows": "Persone", "explore.title": "Esplora", "explore.trending_links": "Notizie", @@ -359,11 +358,11 @@ "footer.about": "Info", "footer.directory": "Cartella dei profili", "footer.get_app": "Scarica l'app", - "footer.invite": "Invita persone", "footer.keyboard_shortcuts": "Scorciatoie da tastiera", "footer.privacy_policy": "Politica sulla privacy", "footer.source_code": "Visualizza il codice sorgente", "footer.status": "Stato", + "footer.terms_of_service": "Termini di servizio", "generic.saved": "Salvato", "getting_started.heading": "Per iniziare", "hashtag.admin_moderation": "Apri l'interfaccia di moderazione per #{name}", @@ -550,6 +549,8 @@ "notification.annual_report.view": "Visualizza #Wrapstodon", "notification.favourite": "{name} ha aggiunto il tuo post ai preferiti", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti", + "notification.favourite_pm": "{name} ha aggiunto ai preferiti la tua menzione privata", + "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# altro utente} other {# altri utenti}} hanno aggiunto ai preferiti la tua menzione privata", "notification.follow": "{name} ha iniziato a seguirti", "notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti", "notification.follow_request": "{name} ha richiesto di seguirti", @@ -781,10 +782,11 @@ "search_results.accounts": "Profili", "search_results.all": "Tutto", "search_results.hashtags": "Hashtag", - "search_results.nothing_found": "Impossibile trovare qualcosa per questi termini di ricerca", + "search_results.no_results": "Nessun risultato.", + "search_results.no_search_yet": "Prova a cercare post, profili o hashtag.", "search_results.see_all": "Mostra tutto", "search_results.statuses": "Post", - "search_results.title": "Cerca {q}", + "search_results.title": "Cerca \"{q}\"", "server_banner.about_active_users": "Persone che hanno utilizzato questo server negli ultimi 30 giorni (Utenti Attivi Mensilmente)", "server_banner.active_users": "utenti attivi", "server_banner.administered_by": "Amministrato da:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Modifica le lingue in cui sei iscritto per {target}", "tabs_bar.home": "Home", "tabs_bar.notifications": "Notifiche", + "terms_of_service.title": "Termini di Servizio", "time_remaining.days": "{number, plural, one {# giorno} other {# giorni}} left", "time_remaining.hours": "{number, plural, one {# ora} other {# ore}} left", "time_remaining.minutes": "{number, plural, one {# minuto} other {# minuti}} left", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index c8477c1b7f..bd9717eb26 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -113,7 +113,9 @@ "annual_report.summary.highlighted_post.possessive": "{name}の", "annual_report.summary.most_used_app.most_used_app": "最も使用されているアプリ", "annual_report.summary.most_used_hashtag.most_used_hashtag": "最も使用されたハッシュタグ", + "annual_report.summary.most_used_hashtag.none": "なし", "annual_report.summary.new_posts.new_posts": "新しい投稿", + "annual_report.summary.percentile.text": "{domain}で 上位に入ります!", "annual_report.summary.percentile.we_wont_tell_bernie": "バー二ーには秘密にしておくよ。", "annual_report.summary.thanks": "Mastodonの一員になってくれてありがとう!", "antennas.accounts": "{count} のアカウント", @@ -187,7 +189,7 @@ "bookmark_categories.status.add": "分類に追加", "bookmark_categories.status.remove": "分類から削除", "bookmark_categories.subheading": "あなたの分類", - "block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかしながら、ブロックの扱い方はサーバーによってさまざまで、相手のサーバーは必ずしもこのブロックを適切に取り扱うものではないことに留意が必要です。また、あなたの公開投稿はサーバーからログアウトすれば誰からも見ることができます。", + "block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかし、サーバーによってはブロック機能の扱いが異なる場合もありえるため、相手のサーバー側で求める通りの処理が行われる確証はありません。また、公開投稿はユーザーがログアウト状態であれば閲覧できる可能性があります。", "block_modal.show_less": "注意事項を閉じる", "block_modal.show_more": "注意事項", "block_modal.they_cant_mention": "相手はあなたへの返信やフォローができなくなります。", @@ -208,6 +210,7 @@ "bundle_column_error.routing.body": "要求されたページは見つかりませんでした。アドレスバーのURLは正しいですか?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "閉じる", + "bundle_modal_error.message": "画面の読み込み中に問題が発生しました。", "bundle_modal_error.retry": "再試行", "circles.account.add": "サークルに追加", "circles.account.remove": "サークルから外す", @@ -232,15 +235,24 @@ "column.bookmarks": "ブックマーク", "column.circles": "サークル", "column.community": "ローカルタイムライン", + "column.create_antenna": "アンテナを作成", + "column.create_bookmark_category": "分類を作成", + "column.create_circle": "サークルを作成", + "column.create_list": "リストを作成", "column.deep_local": "ディープ", "column.direct": "非公開の返信", "column.directory": "ディレクトリ", "column.domain_blocks": "ブロックしたドメイン", + "column.edit_antenna": "アンテナを編集", + "column.edit_bookmark_category": "分類を編集", + "column.edit_circle": "サークルを編集", + "column.edit_list": "リストを編集", "column.emoji_reactions": "絵文字リアクション", "column.favourites": "お気に入り", "column.firehose": "リアルタイムフィード", "column.follow_requests": "フォローリクエスト", "column.home": "ホーム", + "column.list_members": "リストのメンバーを管理", "column.lists": "リスト", "column.local": "ローカル", "column.mutes": "ミュートしたユーザー", @@ -255,6 +267,7 @@ "column_header.pin": "ピン留めする", "column_header.show_settings": "設定を表示", "column_header.unpin": "ピン留めを外す", + "column_search.cancel": "キャンセル", "column_subheading.settings": "設定", "community.column_settings.local_only": "ローカルのみ表示", "community.column_settings.media_only": "メディアのみ表示", @@ -311,6 +324,9 @@ "confirmations.edit.confirm": "編集", "confirmations.edit.message": "今編集すると現在作成中のメッセージが上書きされます。本当に実行しますか?", "confirmations.edit.title": "作成中の内容を上書きしようとしています", + "confirmations.follow_to_list.confirm": "フォローしてリストに追加", + "confirmations.follow_to_list.message": "リストに追加するには{name}さんをフォローしている必要があります。", + "confirmations.follow_to_list.title": "ユーザーをフォローしますか?", "confirmations.logout.confirm": "ログアウト", "confirmations.logout.message": "本当にログアウトしますか?", "confirmations.logout.title": "ログアウトしようとしています", @@ -342,6 +358,10 @@ "disabled_account_banner.text": "あなたのアカウント『{disabledAccount}』は現在無効になっています。", "dismissable_banner.community_timeline": "これらは{domain}がホストしている人たちの最新の公開投稿です。", "dismissable_banner.dismiss": "閉じる", + "dismissable_banner.explore_links": "Fediverseで今日話題になっているニュースです。記事が新しく、たくさんのユーザーから投稿があるものほど上位に表示されます。", + "dismissable_banner.explore_statuses": "Fediverse全体の投稿で今日特に注目が高まっているものです。投稿日時が新しく、ブーストやお気に入りが多いほど上位に表示されます。", + "dismissable_banner.explore_tags": "Fediverseで今日特に注目が高まっているハッシュタグです。たくさんのユーザーに使われたタグほど上位に表示されます。", + "dismissable_banner.public_timeline": "{domain}のユーザーがフォローしているFediverseユーザーによる最近の公開投稿です。", "domain_block_modal.block": "サーバーをブロック", "domain_block_modal.block_account_instead": "@{name} さんのみをブロック", "domain_block_modal.they_can_interact_with_old_posts": "あなたの今までの投稿は、引き続きこのサーバーのユーザーが閲覧できます。", @@ -351,17 +371,17 @@ "domain_block_modal.you_will_lose_num_followers": "「{followingCount, plural, other {{followingCountDisplay}フォロー}}」、「{followersCount, plural, other {{followersCountDisplay}フォロワー}}」を失うことになります。", "domain_block_modal.you_will_lose_relationships": "このサーバーにいるすべてのフォローとフォロワーを失うことになります。", "domain_block_modal.you_wont_see_posts": "このサーバーのユーザーからの投稿や通知が閲覧できなくなります。", - "domain_pill.activitypub_lets_connect": "Mastodonからほかのソーシャルアプリのユーザーへ、そのまた別のアプリのユーザーへと、それぞれが互いにつながり関わり合うことをこのActivityPubの仕組みが実現しています。", + "domain_pill.activitypub_lets_connect": "この仕組みによって、Mastodonはもちろん、他のさまざまなソーシャルアプリも含めたユーザーとのつながりや交流が実現しています。", "domain_pill.activitypub_like_language": "ActivityPubとは、Mastodonがほかのサーバーと会話をするときにしゃべる「言葉」のようなものです。", "domain_pill.server": "サーバー", - "domain_pill.their_handle": "このユーザーのユーザーID:", + "domain_pill.their_handle": "このユーザーのハンドル:", "domain_pill.their_server": "ユーザーの仮想の住所です。そのユーザーIDによるすべての投稿を保持しています。", "domain_pill.their_username": "ユーザーを識別する名前です。ユーザー名はひとつのサーバー内においては唯一無二の名前ですが、ほかのサーバーには同名のユーザーがいることもあります。", "domain_pill.username": "ユーザー名", - "domain_pill.whats_in_a_handle": "ユーザーIDについて", - "domain_pill.who_they_are": "そのユーザーが「誰であるか」「どこに住んでいるか」はユーザーIDから知ることができます。これによりの集まりからなるネットワークを介してそれぞれのユーザーと関わり合うことができます。", - "domain_pill.who_you_are": "ほかのユーザーはあなたが「誰であるか」「どこに住んでいるか」をユーザーIDから認識でき、これによりの集まりからなるネットワークを介してあなたと関わり合うことができます。", - "domain_pill.your_handle": "あなたのユーザーID:", + "domain_pill.whats_in_a_handle": "ユーザーハンドルについて", + "domain_pill.who_they_are": "ユーザーハンドルには相手の「名前」と「住所」の情報が書いてあるため、が連合してつくるソーシャルネットワークのユーザーであれば交流が可能です。", + "domain_pill.who_you_are": "ユーザーハンドルにはあなたの「名前」と「住所」の情報が書いてあるため、が連合してつくるソーシャルネットワークのユーザーであればあなたと交流が可能です。", + "domain_pill.your_handle": "あなたのハンドル:", "domain_pill.your_server": "あなたの仮想の住所です。投稿した内容はすべてここに保持されます。もし今いるサーバーが気に入っていない場合は、フォロワーを引き継いで別のサーバーに引っ越すこともできます。", "domain_pill.your_username": "あなたを識別する名前です。ユーザー名はひとつのサーバー内においては唯一無二の名前ですが、ほかのサーバーには同名のユーザーがいることもあります。", "embed.instructions": "下記のコードをコピーしてウェブサイトに埋め込みます。", @@ -415,7 +435,6 @@ "error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。", "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", - "explore.search_results": "検索結果", "explore.suggested_follows": "ユーザー", "explore.title": "探索する", "explore.trending_links": "ニュース", @@ -465,13 +484,13 @@ "footer.about": "概要", "footer.directory": "ディレクトリ", "footer.get_app": "アプリを入手", - "footer.invite": "新規ユーザーの招待", "footer.keyboard_shortcuts": "キーボードショートカット", "footer.privacy_policy": "プライバシーポリシー", "footer.source_code": "ソースコードを表示", "footer.status": "ステータス", "generic.saved": "保存しました", "getting_started.heading": "スタート", + "hashtag.admin_moderation": "#{name}のモデレーション画面を開く", "hashtag.column_header.tag_mode.all": "と{additional}", "hashtag.column_header.tag_mode.any": "か{additional}", "hashtag.column_header.tag_mode.none": "({additional} を除く)", @@ -578,17 +597,38 @@ "link_preview.author": "{name}", "link_preview.more_from_author": "{name}さんの投稿をもっと読む", "link_preview.shares": "{count, plural, other {{counter}件の投稿}}", + "lists.add_member": "追加", + "lists.add_to_list": "リストに追加", + "lists.add_to_lists": "{name}をリストに追加", "lists.antennas": "関連付けられたアンテナ", + "lists.create": "作成", + "lists.create_a_list_to_organize": "リストを作成するとホームタイムラインを見やすく整理できます", + "lists.create_list": "リストを作成", "lists.delete": "リストを削除", + "lists.done": "完了", "lists.edit": "リストを編集", + "lists.exclusive": "メンバーをホームに表示しない", + "lists.exclusive_hint": "リストにあるユーザーをホームタイムラインに表示しません。二重に表示させたくない場合に使用できます。", "lists.favourite": "お気に入りに登録", "lists.favourite_hint": "お気に入りに登録したリストは、PCのWebクライアントでナビゲーションに表示されます", + "lists.find_users_to_add": "追加するユーザーを探しましょう", + "lists.list_members": "リストのメンバー", + "lists.list_members_count": "{count, plural, other{#人のメンバー}}", + "lists.list_name": "リスト名", "lists.memo_related_antenna": "アンテナ: {title}", "lists.notify": "これらの投稿を通知する", + "lists.new_list_name": "新しいリスト名", + "lists.no_lists_yet": "まだリストがありません。", + "lists.no_members_yet": "まだメンバーがいません。", + "lists.no_results_found": "該当するものが見つかりませんでした。", + "lists.remove_member": "削除", "lists.replies_policy.followed": "フォロー中のユーザー全員", "lists.replies_policy.list": "リストのメンバー", "lists.replies_policy.none": "表示しない", + "lists.save": "保存", "lists.save_to_edit_member": "メンバーは、このリストを保存した後に編集できます", + "lists.search": "検索", + "lists.show_replies_to": "メンバーの返信投稿の表示基準", "load_pending": "{count}件の新着", "loading_indicator.label": "読み込み中…", "media_gallery.hide": "隠す", @@ -759,7 +799,11 @@ "notifications_permission_banner.enable": "デスクトップ通知を有効にする", "notifications_permission_banner.how_to_control": "Mastodonを閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", "notifications_permission_banner.title": "お見逃しなく", + "onboarding.follows.back": "戻る", + "onboarding.follows.done": "完了", "onboarding.follows.empty": "表示できる結果はありません。検索やエクスプローラーを使ったり、ほかのアカウントをフォローしたり、後でもう一度試しください。", + "onboarding.follows.search": "検索", + "onboarding.follows.title": "最初にフォローする人を選ぶ", "onboarding.profile.discoverable": "自分のプロフィールが見つけられるようにする", "onboarding.profile.discoverable_hint": "Mastodonの「見つける」機能にオプトインすると、あなたの投稿が検索結果やトレンドに表示されることがあります。また、あなたに似た関心を持つ人にプロフィールがおすすめされることがあります。", "onboarding.profile.display_name": "表示名", @@ -910,10 +954,8 @@ "search_results.accounts": "ユーザー", "search_results.all": "すべて", "search_results.hashtags": "ハッシュタグ", - "search_results.nothing_found": "この検索条件では何も見つかりませんでした", "search_results.see_all": "すべて表示", "search_results.statuses": "投稿", - "search_results.title": "『{q}』の検索結果", "server_banner.about_active_users": "過去30日間にこのサーバーを使用している人 (月間アクティブユーザー)", "server_banner.active_users": "人のアクティブユーザー", "server_banner.administered_by": "管理者", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 41c0ba6276..723ea01cb0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -221,7 +221,6 @@ "error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.", "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", - "explore.search_results": "Igemmaḍ n unadi", "explore.suggested_follows": "Imdanen", "explore.title": "Snirem", "explore.trending_links": "Isallen", @@ -251,7 +250,6 @@ "footer.about": "Ɣef", "footer.directory": "Akaram n imeɣna", "footer.get_app": "Awi-d asnas", - "footer.invite": "Ɛreḍ-d kra n yimdanen", "footer.keyboard_shortcuts": "Inegzumen n unasiw", "footer.privacy_policy": "Tasertit tabaḍnit", "footer.source_code": "Wali tangalt taɣbalut", @@ -539,7 +537,6 @@ "search_results.hashtags": "Ihacṭagen", "search_results.see_all": "Wali-ten akk", "search_results.statuses": "Tisuffaɣ", - "search_results.title": "Anadi ɣef {q}", "server_banner.active_users": "iseqdacen urmiden", "server_banner.administered_by": "Yettwadbel sɣur :", "server_banner.server_stats": "Tidaddanin n uqeddac:", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 87c2b38ec6..c5d781776c 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "그걸 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않으면, 다른 브라우저나 네이티브 앱으로 마스토돈을 이용해 보실 수 있습니다.", "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", - "explore.search_results": "검색 결과", "explore.suggested_follows": "사람들", "explore.title": "둘러보기", "explore.trending_links": "소식", @@ -359,11 +358,11 @@ "footer.about": "정보", "footer.directory": "프로필 책자", "footer.get_app": "앱 다운로드하기", - "footer.invite": "초대하기", "footer.keyboard_shortcuts": "키보드 단축키", "footer.privacy_policy": "개인정보처리방침", "footer.source_code": "소스코드 보기", "footer.status": "상태", + "footer.terms_of_service": "이용 약관", "generic.saved": "저장됨", "getting_started.heading": "시작하기", "hashtag.admin_moderation": "#{name}에 대한 중재화면 열기", @@ -492,8 +491,8 @@ "lists.no_members_yet": "아직 구성원이 없습니다.", "lists.no_results_found": "결과가 없습니다.", "lists.remove_member": "삭제", - "lists.replies_policy.followed": "팔로우 한 사용자 누구나", - "lists.replies_policy.list": "리스트의 구성원", + "lists.replies_policy.followed": "팔로우 한 사용자 누구나에게", + "lists.replies_policy.list": "리스트의 구성원에게", "lists.replies_policy.none": "모두 제외", "lists.save": "저장", "lists.search": "검색", @@ -550,6 +549,8 @@ "notification.annual_report.view": "#Wrapstodon 보기", "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다", + "notification.favourite_pm": "{name} 님이 내 개인 멘션을 마음에 들어합니다", + "notification.favourite_pm.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 개인 멘션을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", @@ -781,10 +782,8 @@ "search_results.accounts": "프로필", "search_results.all": "전부", "search_results.hashtags": "해시태그", - "search_results.nothing_found": "검색어에 대한 결과를 찾을 수 없습니다", "search_results.see_all": "모두 보기", "search_results.statuses": "게시물", - "search_results.title": "{q}에 대한 검색", "server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)", "server_banner.active_users": "활성 사용자", "server_banner.administered_by": "관리자:", @@ -857,6 +856,7 @@ "subscribed_languages.target": "{target}에 대한 구독 언어 변경", "tabs_bar.home": "홈", "tabs_bar.notifications": "알림", + "terms_of_service.title": "이용 약관", "time_remaining.days": "{number} 일 남음", "time_remaining.hours": "{number} 시간 남음", "time_remaining.minutes": "{number} 분 남음", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 0ef4bb8ced..f69cc488c7 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -196,7 +196,6 @@ "error.unexpected_crash.next_steps_addons": "Neçalakkirin û nûkirina rûpelê biceribîne. Ku ev bi kêr neyê, dibe ku te hîn jî bi riya gerokeke cuda an jî sepana xwecihî ya Mastodon bi kar bînî.", "errors.unexpected_crash.copy_stacktrace": "Şopa gemara (stacktrace) tûrikê ra jê bigire", "errors.unexpected_crash.report_issue": "Pirsgirêkekê ragihîne", - "explore.search_results": "Encamên lêgerînê", "explore.title": "Vekole", "explore.trending_links": "Nûçe", "explore.trending_statuses": "Şandî", @@ -223,7 +222,6 @@ "footer.about": "Derbar", "footer.directory": "Pelrêça profîlan", "footer.get_app": "Bernamokê bistîne", - "footer.invite": "Mirovan vexwîne", "footer.keyboard_shortcuts": "Kurteriyên klavyeyê", "footer.privacy_policy": "Peymana nepeniyê", "footer.source_code": "Koda çavkanî nîşan bide", @@ -447,9 +445,7 @@ "search_results.accounts": "Profîl", "search_results.all": "Hemû", "search_results.hashtags": "Hashtag", - "search_results.nothing_found": "Ji bo van peyvên lêgerînê tiştek nehate dîtin", "search_results.statuses": "Şandî", - "search_results.title": "Li {q} bigere", "server_banner.about_active_users": "Kesên ku di van 30 rojên dawî de vê rajekarê bi kar tînin (Bikarhênerên Çalak ên Mehane)", "server_banner.active_users": "bikarhênerên çalak", "server_banner.administered_by": "Tê bi rêvebirin ji aliyê:", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 5bb0f9ccaf..1371720676 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -274,7 +274,6 @@ "error.unexpected_crash.next_steps_addons": "Aprova inkapasitarlos i arefreskar la pajina. Si esto no te ayuda, es posivle ke ainda puedas kulanear Mastodon kon otro navigador u otra aplikasyon nativa.", "errors.unexpected_crash.copy_stacktrace": "Kopia stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Raporta problema", - "explore.search_results": "Rizultados de bushkeda", "explore.suggested_follows": "Djente", "explore.title": "Eksplora", "explore.trending_links": "Haberes", @@ -322,7 +321,6 @@ "footer.about": "Sovre mozotros", "footer.directory": "Katalogo de profiles", "footer.get_app": "Abasha aplikasyon", - "footer.invite": "Envita a djente", "footer.keyboard_shortcuts": "Akortamientos de klaviatura", "footer.privacy_policy": "Politika de privasita", "footer.source_code": "Ve kodiche fuente", @@ -679,10 +677,8 @@ "search_results.accounts": "Profiles", "search_results.all": "Todos", "search_results.hashtags": "Etiketas", - "search_results.nothing_found": "No se pudo topar niente para estos terminos de bushkeda", "search_results.see_all": "Ve todo", "search_results.statuses": "Publikasyones", - "search_results.title": "Bushka por {q}", "server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)", "server_banner.active_users": "utilizadores aktivos", "server_banner.administered_by": "Administrado por:", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index c6a9658f1c..107667f056 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -305,7 +305,6 @@ "error.unexpected_crash.next_steps_addons": "Pabandyk juos išjungti ir atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsi naudotis Mastodon per kitą naršyklę arba savąją programėlę.", "errors.unexpected_crash.copy_stacktrace": "Kopijuoti dėklo eigą į iškarpinę", "errors.unexpected_crash.report_issue": "Pranešti apie problemą", - "explore.search_results": "Paieškos rezultatai", "explore.suggested_follows": "Žmonės", "explore.title": "Naršyti", "explore.trending_links": "Naujienos", @@ -355,11 +354,11 @@ "footer.about": "Apie", "footer.directory": "Profilių katalogas", "footer.get_app": "Gauti programėlę", - "footer.invite": "Kviesti žmones", "footer.keyboard_shortcuts": "Spartieji klavišai", "footer.privacy_policy": "Privatumo politika", "footer.source_code": "Peržiūrėti šaltinio kodą", "footer.status": "Statusas", + "footer.terms_of_service": "Paslaugų sąlygos", "generic.saved": "Išsaugota", "getting_started.heading": "Kaip pradėti", "hashtag.admin_moderation": "Atverti prižiūrėjimo sąsają saitažodžiui #{name}", @@ -545,6 +544,7 @@ "notification.annual_report.message": "Jūsų laukia {year} #Wrapstodon! Atskleiskite savo metų svarbiausius įvykius ir įsimintinas akimirkas platformoje „Mastodon“.", "notification.annual_report.view": "Peržiūrėti #Wrapstodon", "notification.favourite": "{name} pamėgo tavo įrašą", + "notification.favourite_pm": "{name} pamėgo jūsų privatų paminėjimą", "notification.follow": "{name} seka tave", "notification.follow.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} seka tave", "notification.follow_request": "{name} paprašė tave sekti", @@ -769,10 +769,8 @@ "search_results.accounts": "Profiliai", "search_results.all": "Visi", "search_results.hashtags": "Saitažodžiai", - "search_results.nothing_found": "Nepavyko rasti nieko pagal šiuos paieškos terminus.", "search_results.see_all": "Žiūrėti viską", "search_results.statuses": "Įrašai", - "search_results.title": "Ieškoti {q}", "server_banner.about_active_users": "Žmonės, kurie naudojosi šiuo serveriu per pastarąsias 30 dienų (mėnesio aktyvūs naudotojai)", "server_banner.active_users": "aktyvūs naudotojai", "server_banner.administered_by": "Administruoja:", @@ -843,6 +841,7 @@ "subscribed_languages.target": "Keisti prenumeruojamas kalbas {target}", "tabs_bar.home": "Pagrindinis", "tabs_bar.notifications": "Pranešimai", + "terms_of_service.title": "Paslaugų sąlygos", "time_remaining.days": "liko {number, plural, one {# diena} few {# dienos} many {# dienos} other {# dienų}}", "time_remaining.hours": "liko {number, plural, one {# valanda} few {# valandos} many {# valandos} other {# valandų}}", "time_remaining.minutes": "liko {number, plural, one {# minutė} few {# minutės} many {# minutės} other {# minučių}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index bb6e3610e8..e1a0bfbfac 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -281,7 +281,6 @@ "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", - "explore.search_results": "Meklēšanas rezultāti", "explore.suggested_follows": "Cilvēki", "explore.title": "Izpētīt", "explore.trending_links": "Jaunumi", @@ -320,7 +319,6 @@ "footer.about": "Par", "footer.directory": "Profilu direktorija", "footer.get_app": "Iegūt lietotni", - "footer.invite": "Uzaicināt cilvēkus", "footer.keyboard_shortcuts": "Īsinājumtaustiņi", "footer.privacy_policy": "Privātuma politika", "footer.source_code": "Skatīt pirmkodu", @@ -636,10 +634,8 @@ "search_results.accounts": "Profili", "search_results.all": "Visi", "search_results.hashtags": "Tēmturi", - "search_results.nothing_found": "Nevarēja atrast neko, kas atbilstu šim meklēšanas vaicājumam", "search_results.see_all": "Skatīt visus", "search_results.statuses": "Ieraksti", - "search_results.title": "Meklēt {q}", "server_banner.about_active_users": "Cilvēki, kas izmantojuši šo serveri pēdējo 30 dienu laikā (aktīvie lietotāji mēnesī)", "server_banner.active_users": "aktīvi lietotāji", "server_banner.administered_by": "Pārvalda:", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4c1fa940a2..a067dc95ba 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -190,7 +190,6 @@ "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", - "explore.search_results": "തിരയൽ ഫലങ്ങൾ", "explore.suggested_follows": "ആൾക്കാർ", "explore.title": "പര്യവേക്ഷണം നടത്തുക", "explore.trending_links": "വാര്‍ത്ത", @@ -208,7 +207,6 @@ "followed_tags": "പിന്തുടരിയതു് ചർച്ചാവിഷയങ്ങൾ", "footer.directory": "രൂപരേഖ നാമഗൃഹസൂചി", "footer.get_app": "ഉപകരണം ലഭിക്കൂ", - "footer.invite": "ആളുകളെ ക്ഷണിക്കുക", "footer.privacy_policy": "സ്വകാര്യത്തനയം", "footer.source_code": "ഉറവിടസങ്കേതം കാണുക", "footer.status": "അവസ്ഥ", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 6a4209913d..fe8a724918 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -233,7 +233,6 @@ "error.unexpected_crash.next_steps_addons": "Cuba nyahdaya pemalam dan segarkan semula halaman. Jika itu tidak membantu, anda masih boleh menggunakan Mastodon dengan pelayar yang berlainan atau aplikasi natif.", "errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan", "errors.unexpected_crash.report_issue": "Laporkan masalah", - "explore.search_results": "Hasil carian", "explore.suggested_follows": "Orang", "explore.title": "Terokai", "explore.trending_links": "Baru", @@ -273,7 +272,6 @@ "footer.about": "Perihal", "footer.directory": "Direktori profil", "footer.get_app": "Dapatkan app", - "footer.invite": "Jemput kenalan", "footer.keyboard_shortcuts": "Pintasan papan kekunci", "footer.privacy_policy": "Dasar privasi", "footer.source_code": "Lihat kod sumber", @@ -546,10 +544,8 @@ "search_results.accounts": "Profil", "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", - "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", "search_results.see_all": "Lihat semua", "search_results.statuses": "Hantaran", - "search_results.title": "Mencari {q}", "server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)", "server_banner.active_users": "pengguna aktif", "server_banner.administered_by": "Ditadbir oleh:", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 359a17be5f..ade740e17f 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -219,7 +219,6 @@ "error.unexpected_crash.next_steps_addons": "၎င်းတို့ကို ပိတ်ပြီး စာမျက်နှာကို ပြန်လည်စတင်ကြည့်ပါ။ အဆင်မပြေပါက အခြားဘရောက်ဆာ သို့မဟုတ် မူရင်းအက်ပ်မှတစ်ဆင့် Mastodon ကို ဆက်ပြီးအသုံးပြုနိုင်ပါမည်။", "errors.unexpected_crash.copy_stacktrace": "stacktrace ကို ကလစ်ဘုတ်သို့ ကူးယူပါ", "errors.unexpected_crash.report_issue": "အဆင်မပြေမှုကို တိုင်ကြားရန်", - "explore.search_results": "ရှာဖွေမှုရလဒ်များ", "explore.suggested_follows": "လူများ", "explore.title": "စူးစမ်းရန်", "explore.trending_links": "သတင်းများ", @@ -251,7 +250,6 @@ "footer.about": "အကြောင်း", "footer.directory": "ပရိုဖိုင်များလမ်းညွှန်", "footer.get_app": "အက်ပ်ကို ရယူပါ", - "footer.invite": "လူများကို ဖိတ်ပါ", "footer.keyboard_shortcuts": "ကီးဘုတ်အမြန်ခလုတ်များ", "footer.privacy_policy": "ကိုယ်ရေးအချက်အလက်မူဝါဒ", "footer.source_code": "မူရင်းကုဒ်အားကြည့်ရှုမည်", @@ -521,10 +519,8 @@ "search_results.accounts": "စာမျက်နှာ", "search_results.all": "အားလုံး", "search_results.hashtags": "ဟက်ရှ်တက်များ", - "search_results.nothing_found": "ရှာဖွေလိုသောအရာမရှိပါ", "search_results.see_all": "အားလုံးကို ကြည့်ရန်", "search_results.statuses": "ပို့စ်တင်မယ်", - "search_results.title": "{q} ကို ရှာပါ", "server_banner.about_active_users": "ပြီးခဲ့သည့် ရက်ပေါင်း ၃၀ အတွင်း ဤဆာဗာကို အသုံးပြုသူများ (လအလိုက် လက်ရှိအသုံးပြုသူများ)", "server_banner.active_users": "လက်ရှိအသုံးပြုသူများ", "server_banner.administered_by": "မှ စီမံခန့်ခွဲသည် -", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index ad02aacc1b..4cbcad35bd 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -22,11 +22,28 @@ "account.cancel_follow_request": "取消跟tuè", "account.copy": "Khóo-pih kàu個人資料ê連結", "account.direct": "私人提起 @{name}", + "account.disable_notifications": "停止佇 {name} PO文ê時通知我", + "account.domain_blocked": "封鎖ê網域", + "account.edit_profile": "編輯個人資料", + "account.enable_notifications": "佇 {name} PO文ê時通知我", + "account.endorse": "用個人資料推薦對方", + "account.featured_tags.last_status_at": "頂kái tī {date} Po文", + "account.featured_tags.last_status_never": "無PO文", + "account.featured_tags.title": "{name} ê推薦hashtag", + "account.follow": "跟tuè", "account.follow_back": "Tuè tńg去", + "account.followers": "跟tuè lí ê", + "account.followers.empty": "Tsit ê用者iáu bô lâng跟tuè。", + "account.followers_counter": "Hōo {count, plural, other {{count} ê lâng}}跟tuè", + "account.following": "Lí跟tuè ê", + "account.following_counter": "Teh跟tuè {count,plural,other {{count} ê lâng}}", + "account.follows.empty": "Tsit ê用者iáu buē跟tuè別lâng。", "annual_report.summary.percentile.text": "Tse 予lí變做 {domain} ê用戶ê ", "block_modal.show_less": "看khah少", "compose.language.change": "換語言", "confirmations.follow_to_list.confirm": "跟tuè,加入kàu列單", + "notification.favourite_pm": "{name} kah意lí ê私人提起", + "notification.favourite_pm.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê私人提起", "search_popout.language_code": "ISO語言代碼", "status.translated_from_with": "用 {provider} 翻譯 {lang}" } diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 2384ef6ce3..c76c134bec 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", - "explore.search_results": "Zoekresultaten", "explore.suggested_follows": "Mensen", "explore.title": "Verkennen", "explore.trending_links": "Nieuws", @@ -359,11 +358,11 @@ "footer.about": "Over", "footer.directory": "Gebruikersgids", "footer.get_app": "App downloaden", - "footer.invite": "Mensen uitnodigen", "footer.keyboard_shortcuts": "Sneltoetsen", "footer.privacy_policy": "Privacybeleid", "footer.source_code": "Broncode bekijken", "footer.status": "Status", + "footer.terms_of_service": "Gebruiksvoorwaarden", "generic.saved": "Opgeslagen", "getting_started.heading": "Aan de slag", "hashtag.admin_moderation": "Moderatie-omgeving van #{name} openen", @@ -550,6 +549,8 @@ "notification.annual_report.view": "#Wrapstodon bekijken", "notification.favourite": "{name} markeerde jouw bericht als favoriet", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht als favoriet gemarkeerd", + "notification.favourite_pm": "{name} heeft je persoonlijke vermelding aan hun favorieten toegevoegd", + "notification.favourite_pm.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je persoonlijke vermelding aan hun favorieten toegevoegd", "notification.follow": "{name} volgt jou nu", "notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} volgen jou nou", "notification.follow_request": "{name} wil jou graag volgen", @@ -781,10 +782,11 @@ "search_results.accounts": "Accounts", "search_results.all": "Alles", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Deze zoektermen leveren geen resultaat op", + "search_results.no_results": "Geen resultaten.", + "search_results.no_search_yet": "Probeer te zoeken naar berichten, profielen of hashtags.", "search_results.see_all": "Alles bekijken", "search_results.statuses": "Berichten", - "search_results.title": "Naar {q} zoeken", + "search_results.title": "Zoeken naar \"{q}\"", "server_banner.about_active_users": "Aantal gebruikers tijdens de afgelopen 30 dagen (MAU)", "server_banner.active_users": "actieve gebruikers", "server_banner.administered_by": "Beheerd door:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "Getoonde talen voor {target} wijzigen", "tabs_bar.home": "Start", "tabs_bar.notifications": "Meldingen", + "terms_of_service.title": "Gebruiksvoorwaarden", "time_remaining.days": "{number, plural, one {# dag} other {# dagen}} te gaan", "time_remaining.hours": "{number, plural, one {# uur} other {# uur}} te gaan", "time_remaining.minutes": "{number, plural, one {# minuut} other {# minuten}} te gaan", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 2c06f9068a..21eafffe76 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -305,7 +305,6 @@ "error.unexpected_crash.next_steps_addons": "Prøv å skru dei av og last inn sida på nytt. Hjelper ikkje det kan du framleis bruka Mastodon i ein annan nettlesar eller app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", - "explore.search_results": "Søkeresultat", "explore.suggested_follows": "Folk", "explore.title": "Utforsk", "explore.trending_links": "Nytt", @@ -355,7 +354,6 @@ "footer.about": "Om", "footer.directory": "Profilmappe", "footer.get_app": "Få appen", - "footer.invite": "Inviter folk", "footer.keyboard_shortcuts": "Snøggtastar", "footer.privacy_policy": "Personvernsreglar", "footer.source_code": "Vis kjeldekode", @@ -751,10 +749,8 @@ "search_results.accounts": "Profiler", "search_results.all": "Alt", "search_results.hashtags": "Emneknaggar", - "search_results.nothing_found": "Kunne ikkje finne noko for desse søkeorda", "search_results.see_all": "Sjå alle", "search_results.statuses": "Tut", - "search_results.title": "Søk etter {q}", "server_banner.about_active_users": "Personar som har brukt denne tenaren dei siste 30 dagane (Månadlege Aktive Brukarar)", "server_banner.active_users": "aktive brukarar", "server_banner.administered_by": "Administrert av:", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 8ccb936f22..5ada8c6fe6 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -273,7 +273,6 @@ "error.unexpected_crash.next_steps_addons": "Prøv å deaktivere dem og laste siden på nytt. Hvis det ikke hjelper, kan du fremdeles bruke Mastodon via en annen nettleser eller en annen app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", - "explore.search_results": "Søkeresultater", "explore.suggested_follows": "Personer", "explore.title": "Utforsk", "explore.trending_links": "Nyheter", @@ -322,7 +321,6 @@ "footer.about": "Om", "footer.directory": "Profilkatalog", "footer.get_app": "Last ned appen", - "footer.invite": "Inviter folk", "footer.keyboard_shortcuts": "Hurtigtaster", "footer.privacy_policy": "Personvernregler", "footer.source_code": "Vis kildekode", @@ -657,10 +655,8 @@ "search_results.accounts": "Profiler", "search_results.all": "Alle", "search_results.hashtags": "Emneknagger", - "search_results.nothing_found": "Fant ikke noe for disse søkeordene", "search_results.see_all": "Se alle", "search_results.statuses": "Innlegg", - "search_results.title": "Søk etter {q}", "server_banner.about_active_users": "Personer som har brukt denne serveren i løpet av de siste 30 dagene (aktive brukere månedlig)", "server_banner.active_users": "aktive brukere", "server_banner.administered_by": "Administrert av:", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index be9df2abf3..5173fe4e7e 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -208,7 +208,6 @@ "error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", - "explore.search_results": "Resultats de recèrca", "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Novèlas", @@ -232,7 +231,6 @@ "footer.about": "A prepaus", "footer.directory": "Annuari de perfils", "footer.get_app": "Obténer l’aplicacion", - "footer.invite": "Convidar de monde", "footer.keyboard_shortcuts": "Acorchis clavièr", "footer.privacy_policy": "Politica de confidencialitat", "footer.source_code": "Veire lo còdi font", @@ -458,10 +456,8 @@ "search_results.accounts": "Perfils", "search_results.all": "Tot", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "Cap de resultat per aquestes tèrmes de recèrca", "search_results.see_all": "O veire tot", "search_results.statuses": "Tuts", - "search_results.title": "Recèrca : {q}", "server_banner.active_users": "utilizaires actius", "server_banner.administered_by": "Administrat per :", "server_banner.server_stats": "Estatisticas del servidor :", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index ec55387eed..6cc90059a1 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -197,7 +197,6 @@ "empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।", "empty_column.list": "ਇਸ ਸੂਚੀ ਵਿੱਚ ਹਾਲੇ ਕੁਝ ਵੀ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਇਸ ਸੂਚੀ ਦੇ ਮੈਂਬਰ ਨਵੀਆਂ ਪੋਸਟਾਂ ਪਾਉਂਦੇ ਹਨ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੀਆਂ।", "errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ", - "explore.search_results": "ਖੋਜ ਦੇ ਨਤੀਜੇ", "explore.suggested_follows": "ਲੋਕ", "explore.title": "ਪੜਚੋਲ ਕਰੋ", "explore.trending_links": "ਖ਼ਬਰਾਂ", @@ -224,7 +223,6 @@ "footer.about": "ਸਾਡੇ ਬਾਰੇ", "footer.directory": "ਪਰੋਫਾਇਲ ਡਾਇਰੈਕਟਰੀ", "footer.get_app": "ਐਪ ਲਵੋ", - "footer.invite": "ਲੋਕਾਂ ਨੂੰ ਸੱਦਾ ਭੇਜੋ", "footer.keyboard_shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", "footer.privacy_policy": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", "footer.source_code": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ", @@ -463,7 +461,6 @@ "search_results.hashtags": "ਹੈਸ਼ਟੈਗ", "search_results.see_all": "ਸਭ ਵੇਖੋ", "search_results.statuses": "ਪੋਸਟਾਂ", - "search_results.title": "{q} ਲਈ ਖੋਜ", "server_banner.active_users": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ", "sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ", "sign_in_banner.sign_in": "ਲਾਗਇਨ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 165b1b5637..5c1ef9d604 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -128,6 +128,7 @@ "bundle_column_error.routing.body": "Żądana strona nie została znaleziona. Czy na pewno adres URL w pasku adresu jest poprawny?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zamknij", + "bundle_modal_error.message": "Coś poszło nie tak podczas ładowania tego ekranu.", "bundle_modal_error.retry": "Spróbuj ponownie", "closed_registrations.other_server_instructions": "Ponieważ Mastodon jest zdecentralizowany, możesz założyć konto na innym serwerze i wciąż mieć możliwość wchodzenia w interakcję z tym serwerem.", "closed_registrations_modal.description": "Opcja tworzenia kont na {domain} jest aktualnie niedostępna, ale miej na uwadze to, że nie musisz mieć konta konkretnie na {domain} by używać Mastodona.", @@ -203,6 +204,9 @@ "confirmations.edit.confirm": "Edytuj", "confirmations.edit.message": "Edytowanie wpisu nadpisze wiadomość, którą obecnie piszesz. Czy na pewno chcesz to zrobić?", "confirmations.edit.title": "Nadpisać wpis?", + "confirmations.follow_to_list.confirm": "Zaobserwuj i dodaj do listy", + "confirmations.follow_to_list.message": "Musisz obserwować {name} by dodać to konto do listy.", + "confirmations.follow_to_list.title": "Zaobserwować użytkownika?", "confirmations.logout.confirm": "Wyloguj", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.logout.title": "Wylogować?", @@ -234,6 +238,10 @@ "disabled_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone.", "dismissable_banner.community_timeline": "To są najnowsze wpisy publiczne od osób, które mają założone konta na {domain}.", "dismissable_banner.dismiss": "Schowaj", + "dismissable_banner.explore_links": "Te wiadomości obecnie są komentowane przez osoby z tego serwera i pozostałych w fediwersum.", + "dismissable_banner.explore_statuses": "Obecnie te wpisy z tego serwera i pozostałych serwerów w fediwersum zyskują popularność na tym serwerze.", + "dismissable_banner.explore_tags": "Te hasztagi obecnie zyskują popularność wśród osób z tego serwera i pozostałych w fediwersum.", + "dismissable_banner.public_timeline": "Są to najnowsze publiczne wpisy osób w fediwersum, które obserwują ludzie w serwisie {domain}.", "domain_block_modal.block": "Blokuj serwer", "domain_block_modal.block_account_instead": "Zamiast tego zablokuj @{name}", "domain_block_modal.they_can_interact_with_old_posts": "Ludzie z tego serwera mogą wchodzić w interakcje z Twoimi starymi wpisami.", @@ -300,7 +308,6 @@ "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", - "explore.search_results": "Wyniki wyszukiwania", "explore.suggested_follows": "Ludzie", "explore.title": "Odkrywaj", "explore.trending_links": "Aktualności", @@ -350,13 +357,14 @@ "footer.about": "O serwerze", "footer.directory": "Katalog profilów", "footer.get_app": "Pobierz aplikację", - "footer.invite": "Zaproś znajomych", "footer.keyboard_shortcuts": "Skróty klawiszowe", "footer.privacy_policy": "Polityka prywatności", "footer.source_code": "Zobacz kod źródłowy", "footer.status": "Status", + "footer.terms_of_service": "Warunki korzystania z usługi", "generic.saved": "Zapisano", "getting_started.heading": "Rozpocznij", + "hashtag.admin_moderation": "Otwórz interfejs moderacyjny dla #{name}", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "lub {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -486,6 +494,7 @@ "lists.replies_policy.list": "Członkowie listy", "lists.replies_policy.none": "Nikt", "lists.save": "Zapisz", + "lists.search": "Szukaj", "lists.show_replies_to": "Pokaż odpowiedzi od członków listy do", "load_pending": "{count, plural, one {# nowa pozycja} other {nowe pozycje}}", "loading_indicator.label": "Ładowanie…", @@ -538,6 +547,8 @@ "notification.annual_report.view": "Zobacz #Wrapstodon", "notification.favourite": "{name} dodaje Twój wpis do ulubionych", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba polubiła twój wpis} few {# inne osoby polubiły twój wpis} other {# innych osób polubiło twój wpis}}", + "notification.favourite_pm": "{name} polubił(-a) twoją prywatną wzmiankę", + "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} polubiło twoją prywatną wzmiankę", "notification.follow": "{name} obserwuje Cię", "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}", "notification.follow_request": "{name} chce cię zaobserwować", @@ -646,6 +657,7 @@ "onboarding.follows.done": "Gotowe", "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.", "onboarding.follows.search": "Szukaj", + "onboarding.follows.title": "Zaobserwuj konta by zacząć", "onboarding.profile.discoverable": "Spraw mój profil odkrywalnym", "onboarding.profile.discoverable_hint": "Kiedy zapisujesz się do odkrywalności w Mastodonie, twoje wpisy mogą pokazywać się w wynikach wyszukiwania i trendach, a twój profil może być sugerowany użytkownikom o podobnych zainteresowaniach.", "onboarding.profile.display_name": "Nazwa wyświetlana", @@ -768,10 +780,11 @@ "search_results.accounts": "Profile", "search_results.all": "Wszystkie", "search_results.hashtags": "Hasztagi", - "search_results.nothing_found": "Nie znaleziono innych wyników dla tego wyszukania", + "search_results.no_results": "Brak wyników.", + "search_results.no_search_yet": "Spróbuj poszukać wpisów, profili, lub hasztagów.", "search_results.see_all": "Pokaż wszystkie", "search_results.statuses": "Wpisy", - "search_results.title": "Wyszukiwanie {q}", + "search_results.title": "Wyszukiwanie \"{q}\"", "server_banner.about_active_users": "Osoby korzystające z tego serwera w ciągu ostatnich 30 dni (Miesięcznie aktywni użytkownicy)", "server_banner.active_users": "aktywni użytkownicy", "server_banner.administered_by": "Zarządzana przez:", @@ -844,6 +857,7 @@ "subscribed_languages.target": "Zmień subskrybowane języki dla {target}", "tabs_bar.home": "Strona główna", "tabs_bar.notifications": "Powiadomienia", + "terms_of_service.title": "Warunki korzystania z usługi", "time_remaining.days": "{number, plural, one {Pozostał # dzień} few {Pozostały # dni} many {Pozostało # dni} other {Pozostało # dni}}", "time_remaining.hours": "{number, plural, one {Pozostała # godzina} few {Pozostały # godziny} many {Pozostało # godzin} other {Pozostało # godzin}}", "time_remaining.minutes": "{number, plural, one {Pozostała # minuta} few {Pozostały # minuty} many {Pozostało # minut} other {Pozostało # minut}}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 25387fc41c..b7221f5417 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -308,7 +308,6 @@ "error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar dados do erro para área de transferência", "errors.unexpected_crash.report_issue": "Reportar problema", - "explore.search_results": "Resultado da pesquisa", "explore.suggested_follows": "Pessoas", "explore.title": "Explorar", "explore.trending_links": "Notícias", @@ -358,11 +357,11 @@ "footer.about": "Sobre", "footer.directory": "Diretório de perfis", "footer.get_app": "Baixe o app", - "footer.invite": "Convidar pessoas", "footer.keyboard_shortcuts": "Atalhos de teclado", "footer.privacy_policy": "Política de privacidade", "footer.source_code": "Exibir código-fonte", "footer.status": "Status", + "footer.terms_of_service": "Termos de serviço", "generic.saved": "Salvo", "getting_started.heading": "Primeiros passos", "hashtag.admin_moderation": "Abrir interface de moderação para #{name}", @@ -780,10 +779,8 @@ "search_results.accounts": "Perfis", "search_results.all": "Tudo", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Não foi possível encontrar nada para estes termos de busca", "search_results.see_all": "Ver tudo", "search_results.statuses": "Toots", - "search_results.title": "Buscar {q}", "server_banner.about_active_users": "Pessoas usando este servidor durante os últimos 30 dias (Usuários ativos mensalmente)", "server_banner.active_users": "usuários ativos", "server_banner.administered_by": "Administrado por:", @@ -856,6 +853,7 @@ "subscribed_languages.target": "Alterar idiomas inscritos para {target}", "tabs_bar.home": "Página inicial", "tabs_bar.notifications": "Notificações", + "terms_of_service.title": "Termos de serviço", "time_remaining.days": "{number, plural, one {# dia restante} other {# dias restantes}}", "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 2da6baea81..04aec252b7 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -277,7 +277,6 @@ "error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, poderá ainda ser possível utilizar o Mastodon através de um navegador diferente ou de uma aplicação nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", - "explore.search_results": "Resultados da pesquisa", "explore.suggested_follows": "Pessoas", "explore.title": "Explorar", "explore.trending_links": "Notícias", @@ -326,7 +325,6 @@ "footer.about": "Sobre", "footer.directory": "Diretório de perfis", "footer.get_app": "Obtém a aplicação", - "footer.invite": "Convidar pessoas", "footer.keyboard_shortcuts": "Atalhos do teclado", "footer.privacy_policy": "Política de privacidade", "footer.source_code": "Ver código-fonte", @@ -713,10 +711,8 @@ "search_results.accounts": "Perfis", "search_results.all": "Tudo", "search_results.hashtags": "Etiquetas", - "search_results.nothing_found": "Não foi possível encontrar resultados para os termos pesquisados", "search_results.see_all": "Ver todos", "search_results.statuses": "Publicações", - "search_results.title": "Pesquisar por {q}", "server_banner.about_active_users": "Pessoas que utilizaram este servidor nos últimos 30 dias (Utilizadores Ativos Mensais)", "server_banner.active_users": "utilizadores ativos", "server_banner.administered_by": "Administrado por:", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 4ed227339e..81057871dd 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -219,7 +219,6 @@ "error.unexpected_crash.next_steps_addons": "Încearcă să le dezactivezi și să reîmprospătezi pagina. Dacă tot nu funcționează, poți accesa Mastodon dintr-un alt navigator sau dintr-o aplicație nativă.", "errors.unexpected_crash.copy_stacktrace": "Copiere stacktrace în clipboard", "errors.unexpected_crash.report_issue": "Raportează o problemă", - "explore.search_results": "Rezultatele căutării", "explore.suggested_follows": "Persoane", "explore.title": "Explorează", "explore.trending_links": "Noutăți", @@ -256,7 +255,6 @@ "footer.about": "Despre", "footer.directory": "Catalogul de profiluri", "footer.get_app": "Obține aplicația", - "footer.invite": "Invită persoane", "footer.keyboard_shortcuts": "Comenzi rapide de la tastatură", "footer.privacy_policy": "Politica de confidenţialitate", "footer.source_code": "Vizualizează codul sursă", @@ -497,10 +495,8 @@ "search_results.accounts": "Profiluri", "search_results.all": "Toate", "search_results.hashtags": "Hashtag-uri", - "search_results.nothing_found": "Nu am putut găsi nimic care să corespundă termenilor de căutare", "search_results.see_all": "Vezi tot", "search_results.statuses": "Postări", - "search_results.title": "Caută „{q}”", "server_banner.about_active_users": "Persoane care au folosit acest server în ultimele 30 de zile (Utilizatori Lunari Activi)", "server_banner.active_users": "utilizatori activi", "server_banner.administered_by": "Administrat de:", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 898c156d13..4e2b845c83 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.", "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", - "explore.search_results": "Результаты поиска", "explore.suggested_follows": "Люди", "explore.title": "Обзор", "explore.trending_links": "Новости", @@ -359,7 +358,6 @@ "footer.about": "О проекте", "footer.directory": "Каталог профилей", "footer.get_app": "Скачать приложение", - "footer.invite": "Пригласить людей", "footer.keyboard_shortcuts": "Сочетания клавиш", "footer.privacy_policy": "Политика конфиденциальности", "footer.source_code": "Исходный код", @@ -781,10 +779,8 @@ "search_results.accounts": "Профили", "search_results.all": "Все", "search_results.hashtags": "Хэштеги", - "search_results.nothing_found": "Ничего не найдено по этому запросу", "search_results.see_all": "Показать все", "search_results.statuses": "Посты", - "search_results.title": "Поиск {q}", "server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)", "server_banner.active_users": "активные пользователи", "server_banner.administered_by": "Управляется:", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 2ec006b7eb..1d0d91fc60 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -200,7 +200,6 @@ "error.unexpected_crash.next_steps_addons": "तानि निष्क्रियं कृत्वा पृष्ठं रिफ्रेशं कर्तुं यतस्व। यदि तत्परेऽपि कार्यं नाकार्षीत्तर्ह्यप्यन्यब्रौसरा उत नेटिवेपा मास्टोडोनुपयोक्तुं शक्नोषि।", "errors.unexpected_crash.copy_stacktrace": "स्तेक्त्रेसमनुलिपिं कुरु क्लिप्फलकं", "errors.unexpected_crash.report_issue": "दोषमावेदय", - "explore.search_results": "परिणामानविच्छ", "explore.suggested_follows": "जनाः", "explore.title": "अन्विच्छ", "explore.trending_links": "वार्ताः", @@ -229,7 +228,6 @@ "footer.about": "विषये", "footer.directory": "मुखपार्श्वविभागः", "footer.get_app": "एप् लभस्व", - "footer.invite": "जनं निमन्त्रय", "footer.keyboard_shortcuts": "कीफलकहर्स्वमार्गाः", "footer.privacy_policy": "गोपनीयतानीतिः", "footer.source_code": "स्रोतविद्यादेशं दर्शय", @@ -445,9 +443,7 @@ "search.search_or_paste": "URL अन्विच्छ वा लेपनं कुरु", "search_results.all": "सर्वम्", "search_results.hashtags": "प्रचलितवस्तूनि", - "search_results.nothing_found": "एतेभ्योऽन्वेषणपदेभ्यः किमपि न प्राप्तम्", "search_results.statuses": "पत्राणि", - "search_results.title": "{q} कृते अन्विष्य", "server_banner.about_active_users": "विगतेषु ३० दिनेषु सर्वरमिममुपयुज्यमाणा जनाः (मासिकसक्रियोपभोक्तारः)", "server_banner.active_users": "सक्रियोपभोक्तारः", "server_banner.administered_by": "इत्यनेन अधिकृतः : ", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 98f8ab49b5..0c26ab4046 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -263,7 +263,6 @@ "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Sinnala unu problema", - "explore.search_results": "Resurtados de sa chirca", "explore.suggested_follows": "Gente", "explore.title": "Esplora", "explore.trending_links": "Noas", @@ -303,7 +302,6 @@ "footer.about": "Informatziones", "footer.directory": "Diretòriu de profilos", "footer.get_app": "Otene s'aplicatzione", - "footer.invite": "Invita gente", "footer.keyboard_shortcuts": "Incurtzaduras de tecladu", "footer.privacy_policy": "Polìtica de riservadesa", "footer.source_code": "Ammustra su còdighe de orìgine", @@ -626,10 +624,8 @@ "search_results.accounts": "Profilos", "search_results.all": "Totus", "search_results.hashtags": "Etichetas", - "search_results.nothing_found": "Impossìbile agatare currispondèntzias pro custos tèrmines de chirca", "search_results.see_all": "Bide totu", "search_results.statuses": "Publicatziones", - "search_results.title": "Chirca {q}", "server_banner.about_active_users": "Gente chi at impreadu custu serbidore is ùrtimas 30 dies (Utentes cun Atividade a su Mese)", "server_banner.active_users": "utentes ativos", "server_banner.administered_by": "Amministradu dae:", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 5c5bd8d3f3..8b442d1ac8 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -191,7 +191,6 @@ "error.unexpected_crash.next_steps_addons": "Try oot pittin them aff an rejiggin the page. Gin thon disnae wirk, ye kin mibbie uise Mastodon on a different brooser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace tae yer clipboord", "errors.unexpected_crash.report_issue": "Sen in a issue", - "explore.search_results": "Seirch finnins", "explore.title": "Splore", "filter_modal.added.context_mismatch_explanation": "This filter caitegory disnae apply tae the context thit ye'v uised tae access this post. Gin ye'r wantin the post tae be filtert in this context tae, ye'll hae tae edit the filter.", "filter_modal.added.context_mismatch_title": "Context disnae match!", @@ -215,7 +214,6 @@ "footer.about": "Aboot", "footer.directory": "Profiles directory", "footer.get_app": "Get the app", - "footer.invite": "Invite fowk", "footer.keyboard_shortcuts": "Keyboord shortcuts", "footer.privacy_policy": "Privacy policy", "footer.source_code": "View the soorce code", @@ -427,9 +425,7 @@ "search.search_or_paste": "Seirch or paste URL", "search_results.all": "Aw", "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Cuidnae fin ocht fir thir seirch terms", "search_results.statuses": "Posts", - "search_results.title": "Seirch fir {q}", "server_banner.about_active_users": "Fowk uisin this server in the last 30 days (Monthly Active Uisers)", "server_banner.active_users": "active uisers", "server_banner.administered_by": "Administert bi:", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 08d24525f1..f2e290f040 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -172,7 +172,6 @@ "error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", - "explore.search_results": "සෙවුම් ප්‍රතිඵල", "explore.suggested_follows": "පුද්ගලයින්", "explore.title": "ගවේශනය", "explore.trending_links": "පුවත්", @@ -196,7 +195,6 @@ "footer.about": "පිළිබඳව", "footer.directory": "පැතිකඩ නාමාවලිය", "footer.get_app": "යෙදුම ගන්න", - "footer.invite": "ආරාධනා කරන්න", "footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං", "footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය", "footer.source_code": "මූලාශ්‍ර කේතය බලන්න", @@ -384,10 +382,8 @@ "search_popout.user": "පරිශ්‍රීලකයා", "search_results.accounts": "පැතිකඩ", "search_results.all": "සියල්ල", - "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", - "search_results.title": "{q} සොයන්න", "server_banner.active_users": "සක්‍රිය පරිශ්‍රීලකයින්", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 55248bc12d..7806104c9c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -87,8 +87,10 @@ "alert.unexpected.title": "Ups!", "alt_text_badge.title": "Alternatívny popis", "announcement.announcement": "Oznámenie", + "annual_report.summary.archetype.oracle": "Veštec", "annual_report.summary.followers.followers": "sledovatelia", "annual_report.summary.followers.total": "{count} celkovo", + "annual_report.summary.here_it_is": "Tu je tvoja {year} v zhrnutí:", "annual_report.summary.highlighted_post.by_favourites": "najviac obľúbený príspevok", "annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok", "annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami", @@ -137,6 +139,7 @@ "column.firehose": "Živé kanály", "column.follow_requests": "Žiadosti o sledovanie", "column.home": "Domov", + "column.list_members": "Spravuj členov zoznamu", "column.lists": "Zoznamy", "column.mutes": "Stíšené účty", "column.notifications": "Upozornenia", @@ -192,6 +195,9 @@ "confirmations.edit.confirm": "Upraviť", "confirmations.edit.message": "Úpravou prepíšete príspevok, ktorý máte rozpísaný. Určite chcete pokračovať?", "confirmations.edit.title": "Prepísať príspevok?", + "confirmations.follow_to_list.confirm": "Nasleduj a pridaj do zoznamu", + "confirmations.follow_to_list.message": "Musíš nasledovať {name} aby si ho/ju mohol/la pridať do zoznamu.", + "confirmations.follow_to_list.title": "Nasleduj užívateľa?", "confirmations.logout.confirm": "Odhlásiť sa", "confirmations.logout.message": "Určite sa chcete odhlásiť?", "confirmations.logout.title": "Odhlásiť sa?", @@ -278,7 +284,6 @@ "error.unexpected_crash.next_steps_addons": "Skúste ich vypnúť a stránku obnoviť. Ak to nepomôže, pravdepodobne budete stále môcť Mastodon používať cez iný prehliadač alebo natívnu aplikáciu.", "errors.unexpected_crash.copy_stacktrace": "Kopírovať stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásiť problém", - "explore.search_results": "Výsledky hľadania", "explore.suggested_follows": "Ľudia", "explore.title": "Objavovať", "explore.trending_links": "Správy", @@ -324,7 +329,6 @@ "footer.about": "Viac informácií", "footer.directory": "Adresár profilov", "footer.get_app": "Stiahnuť aplikáciu", - "footer.invite": "Pozvať ľudí", "footer.keyboard_shortcuts": "Klávesové skratky", "footer.privacy_policy": "Pravidlá ochrany súkromia", "footer.source_code": "Zobraziť zdrojový kód", @@ -429,8 +433,13 @@ "lists.add_member": "Pridaj", "lists.add_to_list": "Pridaj do zoznamu", "lists.add_to_lists": "Pridaj {name} do zoznamov", + "lists.create": "Vytvor", + "lists.create_a_list_to_organize": "Vytvor nový zoznam pre spravovanie tvojej domovskej osi", + "lists.create_list": "Vytvor zoznam", "lists.delete": "Vymazať zoznam", + "lists.done": "Hotovo", "lists.edit": "Upraviť zoznam", + "lists.find_users_to_add": "Nájdi užívateľov na pridanie", "lists.list_members": "Členovia zoznamu", "lists.list_name": "Názov zoznamu", "lists.new_list_name": "Názov nového zoznamu", @@ -442,6 +451,7 @@ "lists.replies_policy.list": "Členom zoznamu", "lists.replies_policy.none": "Nikomu", "lists.save": "Ulož", + "lists.search": "Hľadaj", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}", "loading_indicator.label": "Načítavanie…", "media_gallery.hide": "Skryť", @@ -484,6 +494,7 @@ "navigation_bar.security": "Zabezpečenie", "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, prihláste sa.", "notification.admin.report": "Účet {name} nahlásil {target}", + "notification.admin.report_statuses": "{name} nahlásil/a {target} za {category}", "notification.admin.report_statuses_other": "{name} nahlásil/a {target}", "notification.admin.sign_up": "Nová registráciu účtu {name}", "notification.favourite": "{name} hviezdičkuje váš príspevok", @@ -688,10 +699,8 @@ "search_results.accounts": "Profily", "search_results.all": "Všetky", "search_results.hashtags": "Hashtagy", - "search_results.nothing_found": "Pre tieto výrazy nebolo možné nič nájsť", "search_results.see_all": "Zobraziť všetky", "search_results.statuses": "Príspevky", - "search_results.title": "Hľadať {q}", "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (aktívni používatelia za mesiac)", "server_banner.active_users": "Aktívne účty", "server_banner.administered_by": "Správa servera:", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 84f4d4dda2..a297dd4a83 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -285,7 +285,6 @@ "error.unexpected_crash.next_steps_addons": "Poskusite jih onemogočiti in osvežiti stran. Če to ne pomaga, boste morda še vedno lahko uporabljali Mastodon prek drugega brskalnika ali z domorodno aplikacijo.", "errors.unexpected_crash.copy_stacktrace": "Kopiraj sledenje skladu na odložišče", "errors.unexpected_crash.report_issue": "Prijavi težavo", - "explore.search_results": "Rezultati iskanja", "explore.suggested_follows": "Ljudje", "explore.title": "Razišči", "explore.trending_links": "Novice", @@ -333,7 +332,6 @@ "footer.about": "O Mastodonu", "footer.directory": "Imenik profilov", "footer.get_app": "Prenesite aplikacijo", - "footer.invite": "Povabite osebe", "footer.keyboard_shortcuts": "Tipkovne bližnjice", "footer.privacy_policy": "Pravilnik o zasebnosti", "footer.source_code": "Pokaži izvorno kodo", @@ -707,10 +705,8 @@ "search_results.accounts": "Profili", "search_results.all": "Vse", "search_results.hashtags": "Ključniki", - "search_results.nothing_found": "Za ta iskalni niz ni zadetkov", "search_results.see_all": "Poglej vse", "search_results.statuses": "Objave", - "search_results.title": "Išči {q}", "server_banner.about_active_users": "Osebe, ki so uporabljale ta strežnik zadnjih 30 dni (dejavni uporabniki meseca)", "server_banner.active_users": "dejavnih uporabnikov", "server_banner.administered_by": "Upravlja:", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index b13f1af3a7..8da648e4ff 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -304,7 +304,6 @@ "error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.", "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", - "explore.search_results": "Përfundime kërkimi", "explore.suggested_follows": "Persona", "explore.title": "Eksploroni", "explore.trending_links": "Lajme", @@ -354,11 +353,11 @@ "footer.about": "Mbi", "footer.directory": "Drejtori profilesh", "footer.get_app": "Merreni aplikacionin", - "footer.invite": "Ftoni njerëz", "footer.keyboard_shortcuts": "Shkurtore tastiere", "footer.privacy_policy": "Rregulla privatësie", "footer.source_code": "Shihni kodin burim", "footer.status": "Gjendje", + "footer.terms_of_service": "Kushte shërbimi", "generic.saved": "U ruajt", "getting_started.heading": "Si t’ia fillohet", "hashtag.admin_moderation": "Hap ndërfaqe moderimi për #{name}", @@ -545,6 +544,8 @@ "notification.annual_report.view": "Shihni #Wrapstodon", "notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer", "notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer", + "notification.favourite_pm": "{name} i vuri shenjë si të parapëlqyer përmendjes tuaj private", + "notification.favourite_pm.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë si të parapëlqyer përmendjes tuaj private", "notification.follow": "{name} zuri t’ju ndjekë", "notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.follow_request": "{name} ka kërkuar t’ju ndjekë", @@ -776,10 +777,8 @@ "search_results.accounts": "Profile", "search_results.all": "Krejt", "search_results.hashtags": "Hashtag-ë", - "search_results.nothing_found": "S’u gjet gjë për këto terma kërkimi", "search_results.see_all": "Shihni krejt", "search_results.statuses": "Mesazhe", - "search_results.title": "Kërkoni për {q}", "server_banner.about_active_users": "Persona që përdorin këtë shërbyes gjatë 30 ditëve të fundit (Përdorues Mujorë Aktivë)", "server_banner.active_users": "përdorues aktivë", "server_banner.administered_by": "Administruar nga:", @@ -852,6 +851,7 @@ "subscribed_languages.target": "Ndryshoni gjuhë pajtimesh për {target}", "tabs_bar.home": "Kreu", "tabs_bar.notifications": "Njoftime", + "terms_of_service.title": "Kushte Shërbimi", "time_remaining.days": "Edhe {number, plural, one {# ditë} other {# ditë}}", "time_remaining.hours": "Edhe {number, plural, one {# orë} other {# orë}}", "time_remaining.minutes": "Edhe {number, plural, one {# minutë} other {# minuta}}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 3028019a9c..77d3ef7156 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -261,7 +261,6 @@ "error.unexpected_crash.next_steps_addons": "Pokušajte da ih onemogućite i osvežite stranicu. Ako to ne pomogne, možete da nastavite da koristite Mastodon korišćenjem drugog pregledača ili matične aplikacije.", "errors.unexpected_crash.copy_stacktrace": "Kopiraj „stacktrace” u klipbord", "errors.unexpected_crash.report_issue": "Prijavi problem", - "explore.search_results": "Rezultati pretrage", "explore.suggested_follows": "Ljudi", "explore.title": "Istraži", "explore.trending_links": "Vesti", @@ -309,7 +308,6 @@ "footer.about": "Osnovni podaci", "footer.directory": "Direktorijum profila", "footer.get_app": "Preuzmite aplikaciju", - "footer.invite": "Pozovi osobe", "footer.keyboard_shortcuts": "Tasterske prečice", "footer.privacy_policy": "Politika privatnosti", "footer.source_code": "Prikaži izvorni kod", @@ -631,10 +629,8 @@ "search_results.accounts": "Profili", "search_results.all": "Sve", "search_results.hashtags": "Heš oznake", - "search_results.nothing_found": "Nije moguće pronaći ništa za ove termine za pretragu", "search_results.see_all": "Vidi sve", "search_results.statuses": "Objave", - "search_results.title": "Traži {q}", "server_banner.about_active_users": "Ljudi koji su koristili ovaj server u prethodnih 30 dana (mesečno aktivnih korisnika)", "server_banner.active_users": "aktivnih korisnika", "server_banner.administered_by": "Administrira:", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 151453bcf5..06290cfcd7 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -261,7 +261,6 @@ "error.unexpected_crash.next_steps_addons": "Покушајте да их онемогућите и освежите страницу. Ако то не помогне, можете да наставите да користите Mastodon коришћењем другог прегледача или матичне апликације.", "errors.unexpected_crash.copy_stacktrace": "Копирај „stacktrace” у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", - "explore.search_results": "Резултати претраге", "explore.suggested_follows": "Људи", "explore.title": "Истражи", "explore.trending_links": "Вести", @@ -309,7 +308,6 @@ "footer.about": "Основни подаци", "footer.directory": "Директоријум профила", "footer.get_app": "Преузмите апликацију", - "footer.invite": "Позови особе", "footer.keyboard_shortcuts": "Тастерске пречице", "footer.privacy_policy": "Политика приватности", "footer.source_code": "Прикажи изворни код", @@ -631,10 +629,8 @@ "search_results.accounts": "Профили", "search_results.all": "Све", "search_results.hashtags": "Хеш ознаке", - "search_results.nothing_found": "Није могуће пронаћи ништа за ове термине за претрагу", "search_results.see_all": "Види све", "search_results.statuses": "Објаве", - "search_results.title": "Тражи {q}", "server_banner.about_active_users": "Људи који су користили овај сервер у претходних 30 дана (месечно активних корисника)", "server_banner.active_users": "активних корисника", "server_banner.administered_by": "Администрира:", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 805f75c078..2cd10bdb1f 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -103,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag", "annual_report.summary.most_used_hashtag.none": "Inga", "annual_report.summary.new_posts.new_posts": "nya inlägg", + "annual_report.summary.percentile.text": "Det placerar dig i toppbland {domain} användare.", "annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.", "annual_report.summary.thanks": "Tack för att du är en del av Mastodon!", "attachments_list.unprocessed": "(obehandlad)", @@ -128,6 +129,7 @@ "bundle_column_error.routing.body": "Den begärda sidan kunde inte hittas. Är du säker på att adressen angivits korrekt?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Stäng", + "bundle_modal_error.message": "Något gick fel när skärmen laddades.", "bundle_modal_error.retry": "Försök igen", "closed_registrations.other_server_instructions": "Eftersom Mastodon är decentraliserat kan du skapa ett konto på en annan server och fortfarande interagera med denna.", "closed_registrations_modal.description": "Det är för närvarande inte möjligt att skapa ett konto på {domain} men kom ihåg att du inte behöver ett konto specifikt på {domain} för att använda Mastodon.", @@ -138,13 +140,16 @@ "column.blocks": "Blockerade användare", "column.bookmarks": "Bokmärken", "column.community": "Lokal tidslinje", + "column.create_list": "Skapa lista", "column.direct": "Privata nämningar", "column.directory": "Bläddra bland profiler", "column.domain_blocks": "Blockerade domäner", + "column.edit_list": "Redigera lista", "column.favourites": "Favoriter", "column.firehose": "Direktflöden", "column.follow_requests": "Följarförfrågningar", "column.home": "Hem", + "column.list_members": "Hantera listmedlemmar", "column.lists": "Listor", "column.mutes": "Tystade användare", "column.notifications": "Notifikationer", @@ -157,6 +162,7 @@ "column_header.pin": "Fäst", "column_header.show_settings": "Visa inställningar", "column_header.unpin": "Ångra fäst", + "column_search.cancel": "Avbryt", "column_subheading.settings": "Inställningar", "community.column_settings.local_only": "Endast lokalt", "community.column_settings.media_only": "Endast media", @@ -199,6 +205,9 @@ "confirmations.edit.confirm": "Redigera", "confirmations.edit.message": "Om du svarar nu kommer det att ersätta meddelandet du håller på att skapa. Är du säker på att du vill fortsätta?", "confirmations.edit.title": "Skriva över inlägg?", + "confirmations.follow_to_list.confirm": "Följ och lägg till i listan", + "confirmations.follow_to_list.message": "Du måste följa {name} för att lägga till dem i en lista.", + "confirmations.follow_to_list.title": "Följ användare?", "confirmations.logout.confirm": "Logga ut", "confirmations.logout.message": "Är du säker på att du vill logga ut?", "confirmations.logout.title": "Logga ut?", @@ -296,7 +305,6 @@ "error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.", "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", - "explore.search_results": "Sökresultat", "explore.suggested_follows": "Personer", "explore.title": "Utforska", "explore.trending_links": "Nyheter", @@ -346,13 +354,14 @@ "footer.about": "Om", "footer.directory": "Profilkatalog", "footer.get_app": "Skaffa appen", - "footer.invite": "Bjud in personer", "footer.keyboard_shortcuts": "Tangentbordsgenvägar", "footer.privacy_policy": "Integritetspolicy", "footer.source_code": "Visa källkod", "footer.status": "Status", + "footer.terms_of_service": "Användarvillkor", "generic.saved": "Sparad", "getting_started.heading": "Kom igång", + "hashtag.admin_moderation": "Öppet modereringsgränssnittet för #{name}", "hashtag.column_header.tag_mode.all": "och {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "utan {additional}", @@ -458,8 +467,23 @@ "link_preview.author": "Av {name}", "link_preview.more_from_author": "Mer från {name}", "link_preview.shares": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}", + "lists.add_member": "Lägg till", + "lists.add_to_list": "Lägg till i lista", + "lists.add_to_lists": "Lägg till {name} i listor", + "lists.create": "Skapa", + "lists.create_a_list_to_organize": "Skapa en ny lista för att organisera ditt hemtidlinje", + "lists.create_list": "Skapa lista", "lists.delete": "Radera lista", + "lists.done": "Klar", "lists.edit": "Redigera lista", + "lists.exclusive_hint": "Om någon är med på den här listan, göm dem i ditt Hemtidlinje för att undvika att se deras inlägg två gånger.", + "lists.find_users_to_add": "Hitta användare att lägga till", + "lists.list_members": "Lista medlemmar", + "lists.list_members_count": "{count, plural, one {# medlem} other {# medlemmar}}", + "lists.list_name": "Listnamn", + "lists.new_list_name": "Nytt listnamn", + "lists.no_lists_yet": "Ännu inga listor.", + "lists.no_members_yet": "Inga medlemmar ännu.", "lists.replies_policy.followed": "Alla användare som följs", "lists.replies_policy.list": "Medlemmar i listan", "lists.replies_policy.none": "Ingen", @@ -742,10 +766,8 @@ "search_results.accounts": "Profiler", "search_results.all": "Alla", "search_results.hashtags": "Hashtaggar", - "search_results.nothing_found": "Kunde inte hitta något för dessa sökord", "search_results.see_all": "Visa alla", "search_results.statuses": "Inlägg", - "search_results.title": "Sök efter {q}", "server_banner.about_active_users": "Personer som använt denna server de senaste 30 dagarna (månatligt aktiva användare)", "server_banner.active_users": "aktiva användare", "server_banner.administered_by": "Administrerad av:", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index e0f55f562b..09b2ab38d4 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -295,7 +295,6 @@ "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือเหล่านั้นและรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ได้ผ่านเบราว์เซอร์อื่นหรือแอปเนทีฟ", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", - "explore.search_results": "ผลลัพธ์การค้นหา", "explore.suggested_follows": "ผู้คน", "explore.title": "สำรวจ", "explore.trending_links": "ข่าว", @@ -345,7 +344,6 @@ "footer.about": "เกี่ยวกับ", "footer.directory": "ไดเรกทอรีโปรไฟล์", "footer.get_app": "รับแอป", - "footer.invite": "เชิญผู้คน", "footer.keyboard_shortcuts": "แป้นพิมพ์ลัด", "footer.privacy_policy": "นโยบายความเป็นส่วนตัว", "footer.source_code": "ดูโค้ดต้นฉบับ", @@ -760,10 +758,8 @@ "search_results.accounts": "โปรไฟล์", "search_results.all": "ทั้งหมด", "search_results.hashtags": "แฮชแท็ก", - "search_results.nothing_found": "ไม่พบสิ่งใดสำหรับคำค้นหาเหล่านี้", "search_results.see_all": "ดูทั้งหมด", "search_results.statuses": "โพสต์", - "search_results.title": "ค้นหาสำหรับ {q}", "server_banner.about_active_users": "ผู้คนที่ใช้เซิร์ฟเวอร์นี้ในระหว่าง 30 วันที่ผ่านมา (ผู้ใช้ที่ใช้งานอยู่รายเดือน)", "server_banner.active_users": "ผู้ใช้ที่ใช้งานอยู่", "server_banner.administered_by": "ดูแลโดย:", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index bdd91a56af..f0661413bf 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -226,7 +226,6 @@ "empty_column.mutes": "jan ala li len tawa sina.", "error.unexpected_crash.explanation": "ilo li ken ala pana e lipu ni. ni li ken tan pakala mi tan pakala pi ilo sina.", "errors.unexpected_crash.report_issue": "o toki e pakala tawa lawa", - "explore.search_results": "ijo pi alasa ni", "explore.suggested_follows": "jan", "explore.title": "o alasa", "explore.trending_links": "sin", @@ -372,10 +371,8 @@ "search_results.accounts": "lipu jan", "search_results.all": "ale", "search_results.hashtags": "kulupu pi toki suli", - "search_results.nothing_found": "nimi alasa ni la mi lukin e ala", "search_results.see_all": "ale", "search_results.statuses": "toki", - "search_results.title": "o alasa e {q}", "server_banner.administered_by": "jan lawa:", "status.block": "o weka e @{name}", "status.cancel_reblog_private": "o pini e pana", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ae5285838a..49116eeaad 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -21,7 +21,7 @@ "account.blocked": "Engellendi", "account.cancel_follow_request": "Takip isteğini geri çek", "account.copy": "Gönderi bağlantısını kopyala", - "account.direct": "@{name} kullanıcısına özelden değin", + "account.direct": "@{name} kullanıcısına özel olarak değin", "account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat", "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", @@ -111,11 +111,11 @@ "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", "block_modal.show_less": "Daha az göster", "block_modal.show_more": "Daha fazla göster", - "block_modal.they_cant_mention": "Sizden bahsedemez veya sizi takip edemezler.", + "block_modal.they_cant_mention": "Size değinemez veya sizi takip edemezler.", "block_modal.they_cant_see_posts": "Onlar sizin gönderilerinizi görmeye devam edebilir, ancak siz onlarınkini göremezsiniz.", "block_modal.they_will_know": "Engellendiklerini görebiliyorlar.", "block_modal.title": "Kullanıcıyı engelle?", - "block_modal.you_wont_see_mentions": "Onlardan bahseden gönderiler göremezsiniz.", + "block_modal.you_wont_see_mentions": "Onlara değinen gönderileri göremezsiniz.", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "boost_modal.reblog": "Gönderiyi yeniden paylaş?", "boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?", @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.", "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", - "explore.search_results": "Arama sonuçları", "explore.suggested_follows": "Kullanıcılar", "explore.title": "Keşfet", "explore.trending_links": "Haberler", @@ -359,11 +358,11 @@ "footer.about": "Hakkında", "footer.directory": "Profil dizini", "footer.get_app": "Uygulamayı indir", - "footer.invite": "Kullacıları davet et", "footer.keyboard_shortcuts": "Klavye kısayolları", "footer.privacy_policy": "Gizlilik politikası", "footer.source_code": "Kaynak kodu görüntüle", "footer.status": "Durum", + "footer.terms_of_service": "Hizmet şartları", "generic.saved": "Kaydet", "getting_started.heading": "Başlarken", "hashtag.admin_moderation": "#{name} için denetim arayüzünü açın", @@ -550,6 +549,8 @@ "notification.annual_report.view": "#Wrapstodon'u Görüntüle", "notification.favourite": "{name} gönderinizi beğendi", "notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi", + "notification.favourite_pm": "{name} özel değininizi beğendi", + "notification.favourite_pm.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} özel değininizi beğendi", "notification.follow": "{name} seni takip etti", "notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", @@ -781,10 +782,8 @@ "search_results.accounts": "Profiller", "search_results.all": "Tümü", "search_results.hashtags": "Etiketler", - "search_results.nothing_found": "Bu arama seçenekleriyle bir sonuç bulunamadı", "search_results.see_all": "Tümünü gör", "search_results.statuses": "Gönderiler", - "search_results.title": "{q} araması", "server_banner.about_active_users": "Bu sunucuyu son 30 günde kullanan insanlar (Aylık Etkin Kullanıcılar)", "server_banner.active_users": "etkin kullanıcılar", "server_banner.administered_by": "Yönetici:", @@ -857,6 +856,7 @@ "subscribed_languages.target": "{target} abone olduğu dilleri değiştir", "tabs_bar.home": "Anasayfa", "tabs_bar.notifications": "Bildirimler", + "terms_of_service.title": "Hizmet Şartları", "time_remaining.days": "{number, plural, one {# gün} other {# gün}} kaldı", "time_remaining.hours": "{number, plural, one {# saat} other {# saat}} kaldı", "time_remaining.minutes": "{number, plural, one {# dakika} other {# dakika}} kaldı", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 6b0757f6ba..8c89e1ad00 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -16,6 +16,7 @@ "account.badges.group": "Төркем", "account.block": "@{name} кулланучыны блоклау", "account.block_domain": "{domain} доменын блоклау", + "account.block_short": "Блокла", "account.blocked": "Блокланган", "account.cancel_follow_request": "Киләсе сорау", "account.disable_notifications": "@{name} язулары өчен белдерүләр сүндерү", @@ -68,10 +69,14 @@ "alert.rate_limited.title": "Тариф чикләнгән", "alert.unexpected.message": "Көтелмәгән хата булды.", "alert.unexpected.title": "Абау!", + "alt_text_badge.title": "Альт текст", "announcement.announcement": "Игълан", "attachments_list.unprocessed": "(чимал)", "audio.hide": "Аудионы яшерү", + "block_modal.title": "Кулланучыны блокларгамы?", "boost_modal.combo": "Сез баса аласыз {combo} киләсе тапкыр моны сагыну өчен", + "boost_modal.reblog": "Язманы күтәрергәме?", + "boost_modal.undo_reblog": "Язманы күтәрмәскәме?", "bundle_column_error.copy_stacktrace": "Күчереп алу хата турында Отчет", "bundle_column_error.error.body": "Соралган бит күрсәтелә алмый. Бу безнең кодтагы хата яки браузерга туры килү проблемасы аркасында булырга мөмкин.", "bundle_column_error.error.title": "Әй, юк!", @@ -92,9 +97,11 @@ "column.blocks": "Блокланган кулланучылар", "column.bookmarks": "Кыстыргычлар", "column.community": "Локаль вакыт сызыгы", + "column.create_list": "Исемлек яса", "column.direct": "Хосусый искә алулар", "column.directory": "Профильләрне карау", "column.domain_blocks": "Блокланган доменнар", + "column.edit_list": "Исемлекне үзгәрт", "column.follow_requests": "Язылу сораулары", "column.home": "Баш бит", "column.lists": "Исемлекләр", @@ -182,7 +189,6 @@ "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "Хата турында белдерү", - "explore.search_results": "Эзләү нәтиҗәләре", "explore.suggested_follows": "Кешеләр", "explore.title": "Күзәтү", "explore.trending_links": "Яңалыклар", @@ -202,7 +208,6 @@ "footer.about": "Проект турында", "footer.directory": "Профильләр каталогы", "footer.get_app": "Кушымта алыгыз", - "footer.invite": "Кешеләрне чакырыгыз", "footer.keyboard_shortcuts": "Төймә комбинацияләре", "footer.privacy_policy": "Хосусыйлык сәясәте", "footer.source_code": "Чыганак кодын карау", @@ -367,7 +372,6 @@ "search_results.all": "Барысы да", "search_results.hashtags": "Хәштәгләр", "search_results.statuses": "Язмалар", - "search_results.title": "{q} өчен эзләү", "server_banner.administered_by": "Идарә итүче:", "server_banner.server_stats": "Сервер статистикасы:", "sign_in_banner.create_account": "Аккаунтны ясау", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index b96230d3e4..624de8cd69 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -303,7 +303,6 @@ "error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.", "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", - "explore.search_results": "Результати пошуку", "explore.suggested_follows": "Люди", "explore.title": "Огляд", "explore.trending_links": "Новини", @@ -353,11 +352,11 @@ "footer.about": "Про проєкт", "footer.directory": "Каталог профілів", "footer.get_app": "Завантажити застосунок", - "footer.invite": "Запросити людей", "footer.keyboard_shortcuts": "Комбінації клавіш", "footer.privacy_policy": "Політика приватності", "footer.source_code": "Перегляд програмного коду", "footer.status": "Статус", + "footer.terms_of_service": "Умови використання", "generic.saved": "Збережено", "getting_started.heading": "Розпочати", "hashtag.admin_moderation": "Відкрити інтерфейс модерації для #{name}", @@ -755,10 +754,11 @@ "search_results.accounts": "Профілі", "search_results.all": "Усі", "search_results.hashtags": "Хештеґи", - "search_results.nothing_found": "Нічого не вдалося знайти за цими пошуковими термінами", + "search_results.no_results": "Жодних результатів.", + "search_results.no_search_yet": "Спробуйте пошукати записи, профілі або хештеґи.", "search_results.see_all": "Показати все", "search_results.statuses": "Дописів", - "search_results.title": "Шукати {q}", + "search_results.title": "Шукати \"{q}\"", "server_banner.about_active_users": "Люди, які використовують цей сервер протягом останніх 30 днів (Щомісячні Активні Користувачі)", "server_banner.active_users": "активні користувачі", "server_banner.administered_by": "Адміністратор:", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index 53794af36d..4ea1191945 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -193,7 +193,6 @@ "error.unexpected_crash.next_steps_addons": "Ularni o'chirib ko'ring va sahifani yangilang. Agar bu yordam bermasa, siz boshqa brauzer yoki mahalliy ilova orqali Mastodondan foydalanishingiz mumkin.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ni vaqtinchalik xotiraga nusxalash", "errors.unexpected_crash.report_issue": "Muammo haqida xabar berish", - "explore.search_results": "Qidiruv natijalari", "explore.title": "Ko'rib chiqish", "explore.trending_links": "Yangiliklar", "explore.trending_statuses": "Postlar", @@ -221,7 +220,6 @@ "footer.about": "Haqida", "footer.directory": "Profillar katalogi", "footer.get_app": "Ilovani yuklab oling", - "footer.invite": "Odamlarni taklif qilish", "footer.keyboard_shortcuts": "Klaviatura yorliqlari", "footer.privacy_policy": "Maxfiylik siyosati", "footer.source_code": "Kodini ko'rish", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 316eae0aa6..9346b83e8c 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.", "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", - "explore.search_results": "Kết quả tìm kiếm", "explore.suggested_follows": "Mọi người", "explore.title": "Khám phá", "explore.trending_links": "Tin tức", @@ -359,11 +358,11 @@ "footer.about": "Giới thiệu", "footer.directory": "Cộng đồng", "footer.get_app": "Ứng dụng", - "footer.invite": "Mời bạn bè", "footer.keyboard_shortcuts": "Phím tắt", "footer.privacy_policy": "Bảo mật", "footer.source_code": "Mã nguồn", "footer.status": "Trạng thái", + "footer.terms_of_service": "Điều khoản dịch vụ", "generic.saved": "Đã lưu", "getting_started.heading": "Quản lý", "hashtag.admin_moderation": "Mở giao diện quản trị #{name}", @@ -548,8 +547,10 @@ "notification.admin.sign_up.name_and_others": "{name} và {count, plural, other {# người}} đã đăng ký", "notification.annual_report.message": "#Wrapstodon {year} của bạn có rồi đây! Hãy chia sẻ những điểm nhấn và khoảnh khắc đáng nhớ trên Mastodon của bạn trong năm qua!", "notification.annual_report.view": "Xem #Wrapstodon", - "notification.favourite": "{name} thích tút của bạn", + "notification.favourite": "{name} đã thích tút của bạn", "notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn", + "notification.favourite_pm": "{name} đã thích lượt nhắn riêng của bạn", + "notification.favourite_pm.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích lượt nhắn riêng của bạn", "notification.follow": "{name} theo dõi bạn", "notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} theo dõi bạn", "notification.follow_request": "{name} yêu cầu theo dõi bạn", @@ -781,10 +782,8 @@ "search_results.accounts": "Mọi người", "search_results.all": "Toàn bộ", "search_results.hashtags": "Hashtag", - "search_results.nothing_found": "Không tìm thấy gì", "search_results.see_all": "Xem tất cả", "search_results.statuses": "Tút", - "search_results.title": "Tìm kiếm {q}", "server_banner.about_active_users": "Những người ở máy chủ này trong 30 ngày qua (MAU)", "server_banner.active_users": "người hoạt động", "server_banner.administered_by": "Vận hành:", @@ -857,6 +856,7 @@ "subscribed_languages.target": "Đổi ngôn ngữ mong muốn cho {target}", "tabs_bar.home": "Trang chủ", "tabs_bar.notifications": "Thông báo", + "terms_of_service.title": "Điều khoản Dịch vụ", "time_remaining.days": "{number, plural, other {# ngày}}", "time_remaining.hours": "{number, plural, other {# giờ}}", "time_remaining.minutes": "{number, plural, other {# phút}}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 0634b3a498..666bb54e0b 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "复制堆栈跟踪信息到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", - "explore.search_results": "搜索结果", "explore.suggested_follows": "用户", "explore.title": "探索", "explore.trending_links": "新闻", @@ -359,11 +358,11 @@ "footer.about": "关于", "footer.directory": "用户列表", "footer.get_app": "获取应用", - "footer.invite": "邀请", "footer.keyboard_shortcuts": "快捷键", "footer.privacy_policy": "隐私政策", "footer.source_code": "查看源代码", "footer.status": "状态", + "footer.terms_of_service": "服务条款", "generic.saved": "已保存", "getting_started.heading": "开始使用", "hashtag.admin_moderation": "打开 #{name} 的管理界面", @@ -550,6 +549,8 @@ "notification.annual_report.view": "查看 #Wrapstodon 年度回顾", "notification.favourite": "{name} 喜欢了你的嘟文", "notification.favourite.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 喜欢了你的嘟文", + "notification.favourite_pm": "{name} 喜欢了你的私下提及", + "notification.favourite_pm.name_and_others_with_link": "{name} 和{count, plural, other {另外 # 人}}喜欢了你的私下提及", "notification.follow": "{name} 关注了你", "notification.follow.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 关注了你", "notification.follow_request": "{name} 向你发送了关注请求", @@ -781,10 +782,11 @@ "search_results.accounts": "用户", "search_results.all": "全部", "search_results.hashtags": "话题", - "search_results.nothing_found": "无法找到符合这些搜索词的任何内容", + "search_results.no_results": "未找到结果。", + "search_results.no_search_yet": "可以尝试搜索嘟文、账户或话题。", "search_results.see_all": "查看全部", "search_results.statuses": "嘟文", - "search_results.title": "搜索 {q}", + "search_results.title": "搜索 “{q}”", "server_banner.about_active_users": "过去 30 天内使用此服务器的人(月活跃用户)", "server_banner.active_users": "活跃用户", "server_banner.administered_by": "本站管理员:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "更改 {target} 的订阅语言", "tabs_bar.home": "主页", "tabs_bar.notifications": "通知", + "terms_of_service.title": "服务条款", "time_remaining.days": "剩余 {number, plural, other {# 天}}", "time_remaining.hours": "剩余 {number, plural, other {# 小时}}", "time_remaining.minutes": "剩余 {number, plural, other {# 分钟}}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 169e789f80..224bc88f26 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -268,7 +268,6 @@ "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", - "explore.search_results": "搜尋結果", "explore.suggested_follows": "使用者", "explore.title": "探索", "explore.trending_links": "最新消息", @@ -316,7 +315,6 @@ "footer.about": "關於", "footer.directory": "個人檔案目錄", "footer.get_app": "取得應用程式", - "footer.invite": "邀請他人", "footer.keyboard_shortcuts": "鍵盤快速鍵", "footer.privacy_policy": "私隱政策", "footer.source_code": "查看原始碼", @@ -637,10 +635,8 @@ "search_results.accounts": "個人檔案", "search_results.all": "全部", "search_results.hashtags": "標籤", - "search_results.nothing_found": "找不到與搜尋字詞相關的內容", "search_results.see_all": "顯示全部", "search_results.statuses": "文章", - "search_results.title": "搜尋 {q}", "server_banner.about_active_users": "在最近 30 天內內使用此伺服器的人 (月活躍用戶)", "server_banner.active_users": "活躍用戶", "server_banner.administered_by": "管理者:", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index c8e394cb8a..dbbfb51abf 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -309,7 +309,6 @@ "error.unexpected_crash.next_steps_addons": "請嘗試關閉它們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "回報問題", - "explore.search_results": "搜尋結果", "explore.suggested_follows": "使用者", "explore.title": "探索", "explore.trending_links": "最新消息", @@ -359,11 +358,11 @@ "footer.about": "關於", "footer.directory": "個人檔案目錄", "footer.get_app": "取得應用程式", - "footer.invite": "邀請朋友加入", "footer.keyboard_shortcuts": "鍵盤快速鍵", "footer.privacy_policy": "隱私權政策", "footer.source_code": "檢視原始碼", "footer.status": "狀態", + "footer.terms_of_service": "服務條款", "generic.saved": "已儲存", "getting_started.heading": "開始使用", "hashtag.admin_moderation": "開啟 #{name} 的管理介面", @@ -419,7 +418,7 @@ "interaction_modal.on_another_server": "於不同伺服器", "interaction_modal.on_this_server": "於此伺服器", "interaction_modal.sign_in": "您未登入於此伺服器。您的帳號是於何方託管呢?", - "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子信箱收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)", + "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子郵件收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)", "interaction_modal.title.favourite": "將 {name} 之嘟文加入最愛", "interaction_modal.title.follow": "跟隨 {name}", "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文", @@ -550,6 +549,8 @@ "notification.annual_report.view": "檢視 #Wrapstodon", "notification.favourite": "{name} 已將您的嘟文加入最愛", "notification.favourite.name_and_others_with_link": "{name} 與{count, plural, other {其他 # 個人}}已將您的嘟文加入最愛", + "notification.favourite_pm": "{name} 將您的私人提及加入最愛", + "notification.favourite_pm.name_and_others_with_link": "{name} 與{count, plural, other {其他 # 個人}}已將您的私人提及加入最愛", "notification.follow": "{name} 已跟隨您", "notification.follow.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已跟隨您", "notification.follow_request": "{name} 要求跟隨您", @@ -781,10 +782,11 @@ "search_results.accounts": "個人檔案", "search_results.all": "全部", "search_results.hashtags": "主題標籤", - "search_results.nothing_found": "無法找到符合搜尋條件之結果", + "search_results.no_results": "沒有結果。", + "search_results.no_search_yet": "嘗試搜尋嘟文、個人檔案或主題標籤。", "search_results.see_all": "檢視全部", "search_results.statuses": "嘟文", - "search_results.title": "搜尋:{q}", + "search_results.title": "搜尋「{q}」", "server_banner.about_active_users": "最近三十日內使用此伺服器的人(月活躍使用者)", "server_banner.active_users": "活躍使用者", "server_banner.administered_by": "管理者:", @@ -857,6 +859,7 @@ "subscribed_languages.target": "變更 {target} 的訂閱語言", "tabs_bar.home": "首頁", "tabs_bar.notifications": "通知", + "terms_of_service.title": "服務條款", "time_remaining.days": "剩餘 {number, plural, other {# 天}}", "time_remaining.hours": "剩餘{number, plural, other {# 小時}}", "time_remaining.minutes": "剩餘{number, plural, other {# 分鐘}}", diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts index 0df9e646f3..55dbbcbb34 100644 --- a/app/javascript/mastodon/models/account.ts +++ b/app/javascript/mastodon/models/account.ts @@ -10,12 +10,11 @@ import type { ApiAccountJSON, ApiServerFeaturesJSON, } from 'mastodon/api_types/accounts'; -import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji'; import emojify from 'mastodon/features/emoji/emoji'; import { unescapeHTML } from 'mastodon/utils/html'; -import { CustomEmojiFactory } from './custom_emoji'; -import type { CustomEmoji } from './custom_emoji'; +import { CustomEmojiFactory, makeEmojiMap } from './custom_emoji'; +import type { CustomEmoji, EmojiMap } from './custom_emoji'; // AccountField interface AccountFieldShape extends Required { @@ -136,15 +135,6 @@ export const accountDefaultValues: AccountShape = { const AccountFactory = ImmutableRecord(accountDefaultValues); -type EmojiMap = Record; - -function makeEmojiMap(emojis: ApiCustomEmojiJSON[]) { - return emojis.reduce((obj, emoji) => { - obj[`:${emoji.shortcode}:`] = emoji; - return obj; - }, {}); -} - function createAccountField( jsonField: ApiAccountFieldJSON, emojiMap: EmojiMap, diff --git a/app/javascript/mastodon/models/custom_emoji.ts b/app/javascript/mastodon/models/custom_emoji.ts index 96ab4bc612..0af38ffd7a 100644 --- a/app/javascript/mastodon/models/custom_emoji.ts +++ b/app/javascript/mastodon/models/custom_emoji.ts @@ -1,12 +1,12 @@ -import type { RecordOf } from 'immutable'; -import { Record } from 'immutable'; +import type { RecordOf, List as ImmutableList } from 'immutable'; +import { Record as ImmutableRecord, isList } from 'immutable'; import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji'; type CustomEmojiShape = Required; // no changes from server shape export type CustomEmoji = RecordOf; -export const CustomEmojiFactory = Record({ +export const CustomEmojiFactory = ImmutableRecord({ shortcode: '', static_url: '', url: '', @@ -18,3 +18,20 @@ export const CustomEmojiFactory = Record({ aliases: [], license: '', }); + +export type EmojiMap = Record; + +export function makeEmojiMap( + emojis: ApiCustomEmojiJSON[] | ImmutableList, +) { + if (isList(emojis)) { + return emojis.reduce((obj, emoji) => { + obj[`:${emoji.shortcode}:`] = emoji.toJS() as ApiCustomEmojiJSON; + return obj; + }, {}); + } else + return emojis.reduce((obj, emoji) => { + obj[`:${emoji.shortcode}:`] = emoji; + return obj; + }, {}); +} diff --git a/app/javascript/mastodon/models/poll.ts b/app/javascript/mastodon/models/poll.ts new file mode 100644 index 0000000000..b4ba38a9c6 --- /dev/null +++ b/app/javascript/mastodon/models/poll.ts @@ -0,0 +1,109 @@ +import type { RecordOf } from 'immutable'; +import { Record, List } from 'immutable'; + +import escapeTextContentForBrowser from 'escape-html'; + +import type { ApiPollJSON, ApiPollOptionJSON } from 'mastodon/api_types/polls'; +import emojify from 'mastodon/features/emoji/emoji'; + +import { CustomEmojiFactory, makeEmojiMap } from './custom_emoji'; +import type { CustomEmoji, EmojiMap } from './custom_emoji'; + +interface PollOptionTranslationShape { + title: string; + titleHtml: string; +} + +export type PollOptionTranslation = RecordOf; + +export const PollOptionTranslationFactory = Record({ + title: '', + titleHtml: '', +}); + +interface PollOptionShape extends Required { + voted: boolean; + titleHtml: string; + translation: PollOptionTranslation | null; +} + +export function createPollOptionTranslationFromServerJSON( + translation: { title: string }, + emojiMap: EmojiMap, +) { + return PollOptionTranslationFactory({ + ...translation, + titleHtml: emojify( + escapeTextContentForBrowser(translation.title), + emojiMap, + ), + }); +} + +export type PollOption = RecordOf; + +export const PollOptionFactory = Record({ + title: '', + votes_count: 0, + voted: false, + titleHtml: '', + translation: null, +}); + +interface PollShape + extends Omit { + emojis: List; + options: List; + own_votes?: List; +} +export type Poll = RecordOf; + +export const PollFactory = Record({ + id: '', + expires_at: '', + expired: false, + multiple: false, + voters_count: 0, + votes_count: 0, + voted: false, + emojis: List(), + options: List(), + own_votes: List(), +}); + +export function createPollFromServerJSON( + serverJSON: ApiPollJSON, + previousPoll?: Poll, +) { + const emojiMap = makeEmojiMap(serverJSON.emojis); + + return PollFactory({ + ...serverJSON, + emojis: List(serverJSON.emojis.map((emoji) => CustomEmojiFactory(emoji))), + own_votes: serverJSON.own_votes ? List(serverJSON.own_votes) : undefined, + options: List( + serverJSON.options.map((optionJSON, index) => { + const option = PollOptionFactory({ + ...optionJSON, + voted: serverJSON.own_votes?.includes(index) || false, + titleHtml: emojify( + escapeTextContentForBrowser(optionJSON.title), + emojiMap, + ), + }); + + const prevOption = previousPoll?.options.get(index); + if (prevOption?.translation && prevOption.title === option.title) { + const { translation } = prevOption; + + option.set( + 'translation', + createPollOptionTranslationFromServerJSON(translation, emojiMap), + ); + } + + return option; + }), + ), + }); +} diff --git a/app/javascript/mastodon/models/search.ts b/app/javascript/mastodon/models/search.ts new file mode 100644 index 0000000000..75a65bf99c --- /dev/null +++ b/app/javascript/mastodon/models/search.ts @@ -0,0 +1,21 @@ +import type { ApiSearchResultsJSON } from 'mastodon/api_types/search'; +import type { ApiHashtagJSON } from 'mastodon/api_types/tags'; + +export type SearchType = 'account' | 'hashtag' | 'accounts' | 'statuses'; + +export interface RecentSearch { + q: string; + type?: SearchType; +} + +export interface SearchResults { + accounts: string[]; + statuses: string[]; + hashtags: ApiHashtagJSON[]; +} + +export const createSearchResults = (serverJSON: ApiSearchResultsJSON) => ({ + accounts: serverJSON.accounts.map((account) => account.id), + statuses: serverJSON.statuses.map((status) => status.id), + hashtags: serverJSON.hashtags, +}); diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts index a425f89f7b..2c79c7eeab 100644 --- a/app/javascript/mastodon/reducers/index.ts +++ b/app/javascript/mastodon/reducers/index.ts @@ -30,11 +30,11 @@ import { notificationPolicyReducer } from './notification_policy'; import { notificationRequestsReducer } from './notification_requests'; import notifications from './notifications'; import { pictureInPictureReducer } from './picture_in_picture'; -import polls from './polls'; +import { pollsReducer } from './polls'; import push_notifications from './push_notifications'; import reaction_deck from './reaction_deck'; import { relationshipsReducer } from './relationships'; -import search from './search'; +import { searchReducer } from './search'; import server from './server'; import settings from './settings'; import status_lists from './status_lists'; @@ -64,7 +64,7 @@ const reducers = { server, contexts, compose, - search, + search: searchReducer, media_attachments, notifications, notificationGroups: notificationGroupsReducer, @@ -77,7 +77,7 @@ const reducers = { filters, conversations, suggestions: suggestionsReducer, - polls, + polls: pollsReducer, trends, markers: markersReducer, picture_in_picture: pictureInPictureReducer, diff --git a/app/javascript/mastodon/reducers/polls.js b/app/javascript/mastodon/reducers/polls.js deleted file mode 100644 index 5e8e775dac..0000000000 --- a/app/javascript/mastodon/reducers/polls.js +++ /dev/null @@ -1,45 +0,0 @@ -import { Map as ImmutableMap, fromJS } from 'immutable'; - -import { POLLS_IMPORT } from 'mastodon/actions/importer'; - -import { normalizePollOptionTranslation } from '../actions/importer/normalizer'; -import { STATUS_TRANSLATE_SUCCESS, STATUS_TRANSLATE_UNDO } from '../actions/statuses'; - -const importPolls = (state, polls) => state.withMutations(map => polls.forEach(poll => map.set(poll.id, fromJS(poll)))); - -const statusTranslateSuccess = (state, pollTranslation) => { - return state.withMutations(map => { - if (pollTranslation) { - const poll = state.get(pollTranslation.id); - - pollTranslation.options.forEach((item, index) => { - map.setIn([pollTranslation.id, 'options', index, 'translation'], fromJS(normalizePollOptionTranslation(item, poll))); - }); - } - }); -}; - -const statusTranslateUndo = (state, id) => { - return state.withMutations(map => { - const options = map.getIn([id, 'options']); - - if (options) { - options.forEach((item, index) => map.deleteIn([id, 'options', index, 'translation'])); - } - }); -}; - -const initialState = ImmutableMap(); - -export default function polls(state = initialState, action) { - switch(action.type) { - case POLLS_IMPORT: - return importPolls(state, action.polls); - case STATUS_TRANSLATE_SUCCESS: - return statusTranslateSuccess(state, action.translation.poll); - case STATUS_TRANSLATE_UNDO: - return statusTranslateUndo(state, action.pollId); - default: - return state; - } -} diff --git a/app/javascript/mastodon/reducers/polls.ts b/app/javascript/mastodon/reducers/polls.ts new file mode 100644 index 0000000000..9b9a5d2ff8 --- /dev/null +++ b/app/javascript/mastodon/reducers/polls.ts @@ -0,0 +1,67 @@ +import type { Reducer } from '@reduxjs/toolkit'; +import { Map as ImmutableMap } from 'immutable'; + +import { importPolls } from 'mastodon/actions/importer/polls'; +import { makeEmojiMap } from 'mastodon/models/custom_emoji'; +import { createPollOptionTranslationFromServerJSON } from 'mastodon/models/poll'; +import type { Poll } from 'mastodon/models/poll'; + +import { + STATUS_TRANSLATE_SUCCESS, + STATUS_TRANSLATE_UNDO, +} from '../actions/statuses'; + +const initialState = ImmutableMap(); +type PollsState = typeof initialState; + +const statusTranslateSuccess = ( + state: PollsState, + pollTranslation: Poll | undefined, +) => { + if (!pollTranslation) return state; + + return state.withMutations((map) => { + const poll = state.get(pollTranslation.id); + + if (!poll) return; + + const emojiMap = makeEmojiMap(poll.emojis); + + pollTranslation.options.forEach((item, index) => { + map.setIn( + [pollTranslation.id, 'options', index, 'translation'], + createPollOptionTranslationFromServerJSON(item, emojiMap), + ); + }); + }); +}; + +const statusTranslateUndo = (state: PollsState, id: string) => { + return state.withMutations((map) => { + const options = map.get(id)?.options; + + if (options) { + options.forEach((item, index) => + map.deleteIn([id, 'options', index, 'translation']), + ); + } + }); +}; + +export const pollsReducer: Reducer = ( + state = initialState, + action, +) => { + if (importPolls.match(action)) { + return state.withMutations((polls) => { + action.payload.polls.forEach((poll) => polls.set(poll.id, poll)); + }); + } else if (action.type === STATUS_TRANSLATE_SUCCESS) + return statusTranslateSuccess( + state, + (action.translation as { poll?: Poll }).poll, + ); + else if (action.type === STATUS_TRANSLATE_UNDO) + return statusTranslateUndo(state, action.pollId as string); + else return state; +}; diff --git a/app/javascript/mastodon/reducers/search.js b/app/javascript/mastodon/reducers/search.js deleted file mode 100644 index 7de1c65c07..0000000000 --- a/app/javascript/mastodon/reducers/search.js +++ /dev/null @@ -1,84 +0,0 @@ -import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; - -import { - COMPOSE_MENTION, - COMPOSE_REPLY, - COMPOSE_DIRECT, -} from '../actions/compose'; -import { - SEARCH_CHANGE, - SEARCH_CLEAR, - SEARCH_FETCH_REQUEST, - SEARCH_FETCH_FAIL, - SEARCH_FETCH_SUCCESS, - SEARCH_SHOW, - SEARCH_EXPAND_REQUEST, - SEARCH_EXPAND_SUCCESS, - SEARCH_EXPAND_FAIL, - SEARCH_HISTORY_UPDATE, -} from '../actions/search'; - -const initialState = ImmutableMap({ - value: '', - submitted: false, - hidden: false, - results: ImmutableMap(), - isLoading: false, - searchTerm: '', - type: null, - recent: ImmutableOrderedSet(), -}); - -export default function search(state = initialState, action) { - switch(action.type) { - case SEARCH_CHANGE: - return state.set('value', action.value); - case SEARCH_CLEAR: - return state.withMutations(map => { - map.set('value', ''); - map.set('results', ImmutableMap()); - map.set('submitted', false); - map.set('hidden', false); - map.set('searchTerm', ''); - map.set('type', null); - }); - case SEARCH_SHOW: - return state.set('hidden', false); - case COMPOSE_REPLY: - case COMPOSE_MENTION: - case COMPOSE_DIRECT: - return state.set('hidden', true); - case SEARCH_FETCH_REQUEST: - return state.withMutations(map => { - map.set('results', ImmutableMap()); - map.set('isLoading', true); - map.set('submitted', true); - map.set('type', action.searchType); - }); - case SEARCH_FETCH_FAIL: - case SEARCH_EXPAND_FAIL: - return state.set('isLoading', false); - case SEARCH_FETCH_SUCCESS: - return state.withMutations(map => { - map.set('results', ImmutableMap({ - accounts: ImmutableOrderedSet(action.results.accounts.map(item => item.id)), - statuses: ImmutableOrderedSet(action.results.statuses.map(item => item.id)), - hashtags: ImmutableOrderedSet(fromJS(action.results.hashtags)), - })); - - map.set('searchTerm', action.searchTerm); - map.set('type', action.searchType); - map.set('isLoading', false); - }); - case SEARCH_EXPAND_REQUEST: - return state.set('type', action.searchType).set('isLoading', true); - case SEARCH_EXPAND_SUCCESS: { - const results = action.searchType === 'hashtags' ? ImmutableOrderedSet(fromJS(action.results.hashtags)) : action.results[action.searchType].map(item => item.id); - return state.updateIn(['results', action.searchType], list => list.union(results)).set('isLoading', false); - } - case SEARCH_HISTORY_UPDATE: - return state.set('recent', ImmutableOrderedSet(fromJS(action.recent))); - default: - return state; - } -} diff --git a/app/javascript/mastodon/reducers/search.ts b/app/javascript/mastodon/reducers/search.ts new file mode 100644 index 0000000000..3f6b96fa07 --- /dev/null +++ b/app/javascript/mastodon/reducers/search.ts @@ -0,0 +1,74 @@ +import { createReducer, isAnyOf } from '@reduxjs/toolkit'; + +import type { ApiSearchType } from 'mastodon/api_types/search'; +import type { RecentSearch, SearchResults } from 'mastodon/models/search'; +import { createSearchResults } from 'mastodon/models/search'; + +import { + updateSearchHistory, + submitSearch, + expandSearch, +} from '../actions/search'; + +interface State { + recent: RecentSearch[]; + q: string; + type?: ApiSearchType; + loading: boolean; + results?: SearchResults; +} + +const initialState: State = { + recent: [], + q: '', + type: undefined, + loading: false, + results: undefined, +}; + +export const searchReducer = createReducer(initialState, (builder) => { + builder.addCase(submitSearch.fulfilled, (state, action) => { + state.q = action.meta.arg.q; + state.type = action.meta.arg.type; + state.results = createSearchResults(action.payload); + state.loading = false; + }); + + builder.addCase(expandSearch.fulfilled, (state, action) => { + const type = action.meta.arg.type; + const results = createSearchResults(action.payload); + + state.type = type; + state.results = { + accounts: state.results + ? [...state.results.accounts, ...results.accounts] + : results.accounts, + statuses: state.results + ? [...state.results.statuses, ...results.statuses] + : results.statuses, + hashtags: state.results + ? [...state.results.hashtags, ...results.hashtags] + : results.hashtags, + }; + state.loading = false; + }); + + builder.addCase(updateSearchHistory, (state, action) => { + state.recent = action.payload; + }); + + builder.addMatcher( + isAnyOf(expandSearch.pending, submitSearch.pending), + (state, action) => { + state.type = action.meta.arg.type; + state.loading = true; + }, + ); + + builder.addMatcher( + isAnyOf(expandSearch.rejected, submitSearch.rejected), + (state) => { + state.loading = false; + }, + ); +}); diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index f46160889a..1f3310877a 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -173,7 +173,9 @@ table + p { } .email-prose { - p { + p, + ul, + ol { color: #17063b; font-size: 14px; line-height: 20px; diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 21da3575f5..4ed0e676de 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -3,6 +3,12 @@ .simple_form .button.button-tertiary { color: $highlight-text-color; + + &:hover, + &:focus, + &:active { + color: $white; + } } .status-card__actions button, diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 6914474b09..03e3ccd643 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -21,7 +21,6 @@ $fluid-breakpoint: $maximum-width + 20px; .rules-list { font-size: 15px; line-height: 22px; - color: $primary-text-color; counter-reset: list-counter; li { @@ -82,6 +81,10 @@ $fluid-breakpoint: $maximum-width + 20px; } } + &__text { + color: $primary-text-color; + } + &__hint { font-size: 14px; font-weight: 400; diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index b9a9159577..8c6609b3d9 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -253,6 +253,10 @@ $content-width: 840px; .time-period { padding: 0 10px; } + + .back-link { + margin-bottom: 0; + } } h2 small { @@ -1947,3 +1951,76 @@ a.sparkline { } } } + +.admin { + &__terms-of-service { + &__container { + background: var(--surface-background-color); + border-radius: 8px; + border: 1px solid var(--background-border-color); + overflow: hidden; + + &__header { + padding: 16px; + font-size: 14px; + line-height: 20px; + color: $secondary-text-color; + display: flex; + align-items: center; + gap: 12px; + } + + &__body { + background: var(--background-color); + padding: 16px; + overflow-y: scroll; + height: 30vh; + } + } + + &__history { + & > li { + border-bottom: 1px solid var(--background-border-color); + + &:last-child { + border-bottom: 0; + } + } + + &__item { + padding: 16px 0; + padding-bottom: 8px; + + h5 { + font-size: 14px; + line-height: 20px; + font-weight: 600; + margin-bottom: 16px; + } + } + } + } +} + +.dot-indicator { + display: inline-flex; + align-items: center; + gap: 8px; + font-weight: 500; + + &__indicator { + display: inline-block; + width: 8px; + height: 8px; + border-radius: 50%; + background: $dark-text-color; + } + + &.success { + color: $valid-value-color; + + .dot-indicator__indicator { + background-color: $valid-value-color; + } + } +} diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index 678e48fc16..b7140fa6d6 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -136,13 +136,7 @@ body { &.embed { margin: 0; padding-bottom: 0; - - .container { - position: absolute; - width: 100%; - height: 100%; - overflow: hidden; - } + overflow: hidden; } &.admin { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 4566ce5e4d..87051a9025 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -108,7 +108,7 @@ &:disabled, &.disabled { - background-color: $ui-primary-color; + background-color: $ui-button-disabled-color; cursor: not-allowed; } @@ -148,14 +148,14 @@ &:disabled, &.disabled { opacity: 0.7; - border-color: $ui-primary-color; - color: $ui-primary-color; + border-color: $ui-button-disabled-color; + color: $ui-button-disabled-color; &:active, &:focus, &:hover { - border-color: $ui-primary-color; - color: $ui-primary-color; + border-color: $ui-button-disabled-color; + color: $ui-button-disabled-color; } } } @@ -2030,6 +2030,8 @@ body > [data-popper-placement] { } &__handle { + overflow: hidden; + text-overflow: ellipsis; user-select: all; } } @@ -3111,7 +3113,9 @@ $ui-header-logo-wordmark-width: 99px; .column > .scrollable, .tabs-bar__wrapper .column-header, - .tabs-bar__wrapper .column-back-button { + .tabs-bar__wrapper .column-back-button, + .explore__search-header, + .column-search-header { border-left: 0; border-right: 0; } @@ -3154,10 +3158,6 @@ $ui-header-logo-wordmark-width: 99px; } } -.explore__search-header { - display: none; -} - .explore__suggestions__card { padding: 12px 16px; gap: 8px; @@ -3231,10 +3231,6 @@ $ui-header-logo-wordmark-width: 99px; .columns-area__panels__pane--compositional { display: none; } - - .explore__search-header { - display: flex; - } } .icon-with-badge { @@ -5728,6 +5724,17 @@ a.status-card { } .search__icon { + background: transparent; + border: 0; + padding: 0; + position: absolute; + top: 12px + 2px; + cursor: default; + pointer-events: none; + margin-inline-start: 16px - 2px; + width: 20px; + height: 20px; + &::-moz-focus-inner { border: 0; } @@ -5739,17 +5746,14 @@ a.status-card { .icon { position: absolute; - top: 12px + 2px; - display: inline-block; + top: 0; + inset-inline-start: 0; opacity: 0; transition: all 100ms linear; transition-property: transform, opacity; width: 20px; height: 20px; color: $darker-text-color; - cursor: default; - pointer-events: none; - margin-inline-start: 16px - 2px; &.active { pointer-events: auto; @@ -8358,6 +8362,8 @@ noscript { text-overflow: ellipsis; span { + overflow: hidden; + text-overflow: ellipsis; user-select: all; } @@ -9085,10 +9091,13 @@ noscript { } .explore__search-header { - background: darken($ui-base-color, 4%); justify-content: center; align-items: center; - padding: 15px; + border: 1px solid var(--background-border-color); + border-top: 0; + border-bottom: 0; + padding: 16px; + padding-bottom: 8px; .search { width: 100%; @@ -9097,7 +9106,7 @@ noscript { .search__input { border: 1px solid var(--background-border-color); - padding: 10px; + padding: 12px; padding-inline-end: 30px; } @@ -9105,13 +9114,21 @@ noscript { border: 1px solid var(--background-border-color); } - .search .icon { - top: 9px; - inset-inline-end: 10px; + .search__icon { + top: 12px; + inset-inline-end: 12px; color: $dark-text-color; } } +.layout-single-column .explore__search-header { + display: none; + + @media screen and (max-width: $no-gap-breakpoint - 1px) { + display: flex; + } +} + .explore__search-results { flex: 1 1 auto; display: flex; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 208bbb141a..3cab5ff306 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -596,8 +596,9 @@ code { background-color: $ui-button-focus-background-color; } + &:disabled, &:disabled:hover { - background-color: $ui-primary-color; + background-color: $ui-button-disabled-color; } &.negative { @@ -611,16 +612,6 @@ code { } } - .button.button-tertiary { - padding: 9px; - - &:hover, - &:focus, - &:active { - padding: 10px; - } - } - select { appearance: none; box-sizing: border-box; @@ -1189,6 +1180,7 @@ code { align-items: center; padding-bottom: 30px; margin-bottom: 30px; + color: $white; li { flex: 0 0 auto; diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 9b00e88ac8..310d3def07 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -149,6 +149,14 @@ a.table-action-link { } .batch-table { + &--no-toolbar { + .batch-table__toolbar { + position: static; + height: 4px; + border-bottom: none; + } + } + &__toolbar, &__row { display: flex; diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 6cfcba4d76..6b1057605d 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -1,3 +1,5 @@ +@use 'sass:color'; + // Commonly used web colors $black: #000000; // Black $white: #ffffff; // White @@ -51,6 +53,11 @@ $ui-button-focus-background-color: $blurple-600 !default; $ui-button-focus-outline-color: $blurple-400 !default; $ui-button-focus-outline: solid 2px $ui-button-focus-outline-color !default; +$ui-button-disabled-color: color.adjust( + $ui-button-background-color, + $alpha: -0.3 +) !default; + $ui-button-secondary-color: $blurple-500 !default; $ui-button-secondary-border-color: $blurple-500 !default; $ui-button-secondary-focus-border-color: $blurple-300 !default; diff --git a/app/lib/request.rb b/app/lib/request.rb index a12e6e3747..3d2a0c0e31 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -261,7 +261,7 @@ class Request outer_e = nil port = args.first - addresses = [] + addresses = [] # rubocop:disable Lint/UselessAssignment # TODO: https://github.com/rubocop/rubocop/issues/13395 begin addresses = [IPAddr.new(host)] rescue IPAddr::InvalidAddressError diff --git a/app/lib/text_formatter.rb b/app/lib/text_formatter.rb index 309c9f3442..6ff4ea5651 100644 --- a/app/lib/text_formatter.rb +++ b/app/lib/text_formatter.rb @@ -7,7 +7,7 @@ class TextFormatter URL_PREFIX_REGEX = %r{\A(https?://(www\.)?|xmpp:)} - DEFAULT_REL = %w(nofollow noopener noreferrer).freeze + DEFAULT_REL = %w(nofollow noopener).freeze DEFAULT_OPTIONS = { multiline: true, @@ -71,6 +71,12 @@ class TextFormatter suffix = url[prefix.length + 30..] cutoff = url[prefix.length..].length > 30 + if suffix && suffix.length == 1 # revert truncation to account for ellipsis + display_url += suffix + suffix = nil + cutoff = false + end + tag.a href: url, target: '_blank', rel: rel.join(' '), translate: 'no' do tag.span(prefix, class: 'invisible') + tag.span(display_url, class: (cutoff ? 'ellipsis' : '')) + diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb index fda6405121..6e544486d6 100644 --- a/app/lib/video_metadata_extractor.rb +++ b/app/lib/video_metadata_extractor.rb @@ -48,7 +48,7 @@ class VideoMetadataExtractor @frame_rate ||= @r_frame_rate # If the video has not been re-encoded by ffmpeg, it may contain rotation information, # and we need to simulate applying it to the dimensions - @width, @height = @height, @width if video_stream[:side_data_list]&.any? { |x| x[:rotation].abs == 90 } + @width, @height = @height, @width if video_stream[:side_data_list]&.any? { |x| x[:rotation]&.abs == 90 } end if (audio_stream = audio_streams.first) diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 5c9e5c96d9..b02c462217 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -209,6 +209,16 @@ class UserMailer < Devise::Mailer end end + def terms_of_service_changed(user, terms_of_service) + @resource = user + @terms_of_service = terms_of_service + @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, escape_html: true, no_images: true) + + I18n.with_locale(locale) do + mail subject: default_i18n_subject + end + end + private def default_devise_subject diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb index 41623ddedb..af156f1497 100644 --- a/app/models/account_alias.rb +++ b/app/models/account_alias.rb @@ -5,11 +5,11 @@ # Table name: account_aliases # # id :bigint(8) not null, primary key -# account_id :bigint(8) # acct :string default(""), not null # uri :string default(""), not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null # class AccountAlias < ApplicationRecord diff --git a/app/models/account_deletion_request.rb b/app/models/account_deletion_request.rb index 7d0c346cc2..c65d2cc217 100644 --- a/app/models/account_deletion_request.rb +++ b/app/models/account_deletion_request.rb @@ -5,9 +5,9 @@ # Table name: account_deletion_requests # # id :bigint(8) not null, primary key -# account_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null # class AccountDeletionRequest < ApplicationRecord DELAY_TO_DELETION = 30.days.freeze diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb index 753935d6af..c3a8c49da0 100644 --- a/app/models/account_domain_block.rb +++ b/app/models/account_domain_block.rb @@ -5,10 +5,10 @@ # Table name: account_domain_blocks # # id :bigint(8) not null, primary key -# domain :string +# domain :string not null # created_at :datetime not null # updated_at :datetime not null -# account_id :bigint(8) +# account_id :bigint(8) not null # class AccountDomainBlock < ApplicationRecord diff --git a/app/models/account_pin.rb b/app/models/account_pin.rb index 6c78e8c446..dc05d3cd25 100644 --- a/app/models/account_pin.rb +++ b/app/models/account_pin.rb @@ -5,10 +5,10 @@ # Table name: account_pins # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# target_account_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# target_account_id :bigint(8) not null # class AccountPin < ApplicationRecord @@ -23,6 +23,6 @@ class AccountPin < ApplicationRecord private def validate_follow_relationship - errors.add(:base, I18n.t('accounts.pin_errors.following')) unless account.following?(target_account) + errors.add(:base, I18n.t('accounts.pin_errors.following')) unless account&.following?(target_account) end end diff --git a/app/models/admin/action_log.rb b/app/models/admin/action_log.rb index 49ae679809..b6834c4784 100644 --- a/app/models/admin/action_log.rb +++ b/app/models/admin/action_log.rb @@ -5,15 +5,15 @@ # Table name: admin_action_logs # # id :bigint(8) not null, primary key -# account_id :bigint(8) # action :string default(""), not null +# human_identifier :string +# permalink :string +# route_param :string # target_type :string -# target_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null -# human_identifier :string -# route_param :string -# permalink :string +# account_id :bigint(8) not null +# target_id :bigint(8) # class Admin::ActionLog < ApplicationRecord diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index 54a9ee8021..dff5fad088 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -59,6 +59,7 @@ class Admin::ActionLogFilter enable_relay: { target_type: 'Relay', action: 'enable' }.freeze, memorialize_account: { target_type: 'Account', action: 'memorialize' }.freeze, promote_user: { target_type: 'User', action: 'promote' }.freeze, + publish_terms_of_service: { target_type: 'TermsOfService', action: 'publish' }.freeze, remove_avatar_user: { target_type: 'User', action: 'remove_avatar' }.freeze, reopen_report: { target_type: 'Report', action: 'reopen' }.freeze, resend_user: { target_type: 'User', action: 'resend' }.freeze, diff --git a/app/models/announcement_mute.rb b/app/models/announcement_mute.rb index 46fda2f5d6..0f34a6a4dc 100644 --- a/app/models/announcement_mute.rb +++ b/app/models/announcement_mute.rb @@ -5,10 +5,10 @@ # Table name: announcement_mutes # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# announcement_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# announcement_id :bigint(8) not null # class AnnouncementMute < ApplicationRecord diff --git a/app/models/announcement_reaction.rb b/app/models/announcement_reaction.rb index f953402b7e..46d9fc290f 100644 --- a/app/models/announcement_reaction.rb +++ b/app/models/announcement_reaction.rb @@ -5,12 +5,12 @@ # Table name: announcement_reactions # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# announcement_id :bigint(8) # name :string default(""), not null -# custom_emoji_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# announcement_id :bigint(8) not null +# custom_emoji_id :bigint(8) # class AnnouncementReaction < ApplicationRecord diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 0e3e64fcf0..3cc0490380 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -5,17 +5,17 @@ # Table name: custom_filters # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# expires_at :datetime -# phrase :text default(""), not null -# context :string default([]), not null, is an Array -# created_at :datetime not null -# updated_at :datetime not null # action :integer default("warn"), not null +# context :string default([]), not null, is an Array # exclude_follows :boolean default(FALSE), not null # exclude_localusers :boolean default(FALSE), not null -# with_quote :boolean default(TRUE), not null +# expires_at :datetime +# phrase :text default(""), not null # with_profile :boolean default(FALSE), not null +# with_quote :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# account_id :bigint(8) not null # class CustomFilter < ApplicationRecord diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 49ff740884..11dc64083d 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -59,6 +59,7 @@ class MediaAttachment < ApplicationRecord ).freeze IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif image/heic image/heif image/webp image/avif).freeze + IMAGE_ANIMATED_MIME_TYPES = %w(image/png image/gif).freeze IMAGE_CONVERTIBLE_MIME_TYPES = %w(image/heic image/heif image/avif).freeze VIDEO_MIME_TYPES = %w(video/webm video/mp4 video/quicktime video/ogg).freeze VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze @@ -103,7 +104,7 @@ class MediaAttachment < ApplicationRecord 'preset' => 'veryfast', 'movflags' => 'faststart', # Move metadata to start of file so playback can begin before download finishes 'pix_fmt' => 'yuv420p', # Ensure color space for cross-browser compatibility - 'vf' => 'crop=floor(iw/2)*2:floor(ih/2)*2', # h264 requires width and height to be even. Crop instead of scale to avoid blurring + 'filter_complex' => 'drawbox=t=fill:c=white[bg];[bg][0]overlay,crop=trunc(iw/2)*2:trunc(ih/2)*2', # Remove transparency. h264 requires width and height to be even; crop instead of scale to avoid blurring 'c:v' => 'h264', 'c:a' => 'aac', 'b:a' => '192k', @@ -301,7 +302,7 @@ class MediaAttachment < ApplicationRecord private def file_styles(attachment) - if attachment.instance.file_content_type == 'image/gif' || VIDEO_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type) + if attachment.instance.animated_image? || VIDEO_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type) VIDEO_CONVERTED_STYLES elsif IMAGE_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type) IMAGE_CONVERTED_STYLES @@ -315,8 +316,8 @@ class MediaAttachment < ApplicationRecord end def file_processors(instance) - if instance.file_content_type == 'image/gif' - [:gif_transcoder, :blurhash_transcoder] + if instance.animated_image? + [:gifv_transcoder, :blurhash_transcoder] elsif VIDEO_MIME_TYPES.include?(instance.file_content_type) [:transcoder, :blurhash_transcoder, :type_corrector] elsif AUDIO_MIME_TYPES.include?(instance.file_content_type) @@ -327,6 +328,17 @@ class MediaAttachment < ApplicationRecord end end + def animated_image? + if processing_complete? + gifv? + elsif IMAGE_ANIMATED_MIME_TYPES.include?(file_content_type) + @animated_image = FastImage.animated?(file.queued_for_write[:original].path) unless defined?(@animated_image) + @animated_image + else + false + end + end + private def set_unknown_type diff --git a/app/models/mention.rb b/app/models/mention.rb index c802cb8faf..8b191e8c95 100644 --- a/app/models/mention.rb +++ b/app/models/mention.rb @@ -20,7 +20,7 @@ class Mention < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy - validates :account, uniqueness: { scope: :status } + validates :account_id, uniqueness: { scope: :status_id } scope :active, -> { where(silent: false) } scope :silent, -> { where(silent: true) } diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb index cb49e90705..1f4f04268d 100644 --- a/app/models/scheduled_status.rb +++ b/app/models/scheduled_status.rb @@ -5,9 +5,9 @@ # Table name: scheduled_statuses # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# scheduled_at :datetime # params :jsonb +# scheduled_at :datetime +# account_id :bigint(8) not null # class ScheduledStatus < ApplicationRecord diff --git a/app/models/terms_of_service.rb b/app/models/terms_of_service.rb new file mode 100644 index 0000000000..1f0832dc9a --- /dev/null +++ b/app/models/terms_of_service.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: terms_of_services +# +# id :bigint(8) not null, primary key +# changelog :text default(""), not null +# notification_sent_at :datetime +# published_at :datetime +# text :text default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# +class TermsOfService < ApplicationRecord + scope :published, -> { where.not(published_at: nil).order(published_at: :desc) } + scope :live, -> { published.limit(1) } + scope :draft, -> { where(published_at: nil).order(id: :desc).limit(1) } + + validates :text, presence: true + validates :changelog, presence: true, if: -> { published? } + + def published? + published_at.present? + end + + def notification_sent? + notification_sent_at.present? + end + + def scope_for_notification + User.confirmed.joins(:account).merge(Account.without_suspended).where(created_at: (..published_at)) + end +end diff --git a/app/models/terms_of_service/generator.rb b/app/models/terms_of_service/generator.rb new file mode 100644 index 0000000000..83c229720e --- /dev/null +++ b/app/models/terms_of_service/generator.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class TermsOfService::Generator + include ActiveModel::Model + + TEMPLATE = Rails.root.join('config', 'templates', 'terms-of-service.md').read + + VARIABLES = %i( + admin_email + arbitration_address + arbitration_website + dmca_address + dmca_email + domain + jurisdiction + ).freeze + + attr_accessor(*VARIABLES) + + validates(*VARIABLES, presence: true) + + def render + format(TEMPLATE, VARIABLES.index_with { |key| public_send(key) }) + end +end diff --git a/app/models/user.rb b/app/models/user.rb index 0c18735eb2..70e8ed2e87 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -373,7 +373,7 @@ class User < ApplicationRecord end def revoke_access! - Doorkeeper::AccessGrant.by_resource_owner(self).update_all(revoked_at: Time.now.utc) + Doorkeeper::AccessGrant.by_resource_owner(self).touch_all(:revoked_at) Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch| batch.touch_all(:revoked_at) diff --git a/app/models/user_invite_request.rb b/app/models/user_invite_request.rb index 9dd6775166..23b5428d48 100644 --- a/app/models/user_invite_request.rb +++ b/app/models/user_invite_request.rb @@ -5,10 +5,10 @@ # Table name: user_invite_requests # # id :bigint(8) not null, primary key -# user_id :bigint(8) # text :text # created_at :datetime not null # updated_at :datetime not null +# user_id :bigint(8) not null # class UserInviteRequest < ApplicationRecord diff --git a/app/policies/terms_of_service_policy.rb b/app/policies/terms_of_service_policy.rb new file mode 100644 index 0000000000..b4f0c71bc8 --- /dev/null +++ b/app/policies/terms_of_service_policy.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class TermsOfServicePolicy < ApplicationPolicy + def index? + role.can?(:manage_settings) + end + + def create? + role.can?(:manage_settings) + end + + def distribute? + record.published? && !record.notification_sent? && role.can?(:manage_settings) + end + + def update? + !record.published? && role.can?(:manage_settings) + end + + def destroy? + !record.published? && role.can?(:manage_settings) + end +end diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 62a7d5660b..a29ce33e03 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -147,6 +147,7 @@ class InitialStateSerializer < ActiveModel::Serializer trends_as_landing_page: Setting.trends_as_landing_page, trends_enabled: Setting.trends, version: instance_presenter.version, + terms_of_service_enabled: TermsOfService.live.exists?, } end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index 015951bd97..21fb3ae399 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -7,7 +7,7 @@ class REST::StatusSerializer < ActiveModel::Serializer attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id, :sensitive, :spoiler_text, :visibility, :visibility_ex, :limited_scope, :language, - :uri, :url, :replies_count, :reblogs_count, :searchability, :markdown, + :uri, :url, :replies_count, :reblogs_count, :searchability, :status_reference_ids, :status_references_count, :status_referred_by_count, :favourites_count, :emoji_reactions, :emoji_reactions_count, :reactions, :edited_at @@ -19,6 +19,7 @@ class REST::StatusSerializer < ActiveModel::Serializer attribute :reactions, if: :reactions? attribute :expires_at, if: :will_expire? attribute :quote_id, if: :quote? + attribute :markdown_opt, key: :markdown has_many :filtered, serializer: REST::FilterResultSerializer, if: :current_user? attribute :content, unless: :source_requested? @@ -118,6 +119,10 @@ class REST::StatusSerializer < ActiveModel::Serializer ActivityPub::TagManager.instance.url_for(object) end + def markdown_opt + object.markdown + end + def status_reference_ids @status_reference_ids = object.reference_objects.pluck(:target_status_id) end diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 3b69cadfce..7b6649d1ec 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -259,40 +259,30 @@ class ActivityPub::ProcessStatusUpdateService < BaseService end def update_mentions! - previous_mentions = @status.active_mentions.includes(:account).to_a - current_mentions = [] unresolved_mentions = [] - @raw_mentions.each do |href| + currently_mentioned_account_ids = @raw_mentions.filter_map do |href| next if href.blank? account = ActivityPub::TagManager.instance.uri_to_resource(href, Account) account ||= ActivityPub::FetchRemoteAccountService.new.call(href, request_id: @request_id) - next if account.nil? - - mention = previous_mentions.find { |x| x.account_id == account.id } - mention ||= account.mentions.new(status: @status) - - current_mentions << mention + account&.id rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS # Since previous mentions are about already-known accounts, # they don't try to resolve again and won't fall into this case. # In other words, this failure case is only for new mentions and won't # affect `removed_mentions` so they can safely be retried asynchronously unresolved_mentions << href + nil end - current_mentions.each do |mention| - mention.save if mention.new_record? - end + @status.mentions.upsert_all(currently_mentioned_account_ids.map { |id| { account_id: id, silent: false } }, unique_by: %w(status_id account_id)) # If previous mentions are no longer contained in the text, convert them # to silent mentions, since withdrawing access from someone who already # received a notification might be more confusing - removed_mentions = previous_mentions - current_mentions - - Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty? + @status.mentions.where.not(account_id: currently_mentioned_account_ids).update_all(silent: true) # Queue unresolved mentions for later unresolved_mentions.uniq.each do |uri| diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 31b0e56022..a8d95a53d7 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -15,7 +15,7 @@ class ProcessMentionsService < BaseService return unless @status.local? - @previous_mentions = @status.active_mentions.includes(:account).to_a + @previous_mentions = @status.mentions.includes(:account).to_a @current_mentions = [] Status.transaction do @@ -63,6 +63,8 @@ class ProcessMentionsService < BaseService mention ||= @current_mentions.find { |x| x.account_id == mentioned_account.id } mention ||= @status.mentions.new(account: mentioned_account) + mention.silent = false + @current_mentions << mention "@#{mentioned_account.acct}" @@ -87,7 +89,7 @@ class ProcessMentionsService < BaseService end @current_mentions.each do |mention| - mention.save if mention.new_record? && @save_records + mention.save if (mention.new_record? || mention.silent_changed?) && @save_records end # If previous mentions are no longer contained in the text, convert them @@ -95,7 +97,7 @@ class ProcessMentionsService < BaseService # received a notification might be more confusing removed_mentions = @previous_mentions - @current_mentions - Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty? + Mention.where(id: removed_mentions.map(&:id), silent: false).update_all(silent: true) unless removed_mentions.empty? end def mention_undeliverable?(mentioned_account) diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 8d5446f1a8..44210799f9 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -20,7 +20,7 @@ class SuspendAccountService < BaseService private def reject_remote_follows! - return if @account.local? || !@account.activitypub? + return if @account.local? || !@account.activitypub? || @account.suspension_origin_remote? # When suspending a remote account, the account obviously doesn't # actually become suspended on its origin server, i.e. unlike a diff --git a/app/validators/domain_validator.rb b/app/validators/domain_validator.rb index 718fd190f1..f975dc8ff2 100644 --- a/app/validators/domain_validator.rb +++ b/app/validators/domain_validator.rb @@ -4,7 +4,7 @@ class DomainValidator < ActiveModel::EachValidator MAX_DOMAIN_LENGTH = 256 MIN_LABEL_LENGTH = 1 MAX_LABEL_LENGTH = 63 - ALLOWED_CHARACTERS_RE = /^[a-z0-9\-]+$/i + ALLOWED_CHARACTERS_RE = /^[a-z0-9-]+$/i def validate_each(record, attribute, value) return if value.blank? diff --git a/app/views/.rubocop.yml b/app/views/.rubocop.yml deleted file mode 100644 index 4e268848c7..0000000000 --- a/app/views/.rubocop.yml +++ /dev/null @@ -1,5 +0,0 @@ -inherit_from: ../../.rubocop.yml - -# Disable for the `Rubocop` lints in haml-lint -Style/IfUnlessModifier: - Enabled: false diff --git a/app/views/admin/reports/_status.html.haml b/app/views/admin/reports/_status.html.haml index d20266aa2c..c1e47d5b32 100644 --- a/app/views/admin/reports/_status.html.haml +++ b/app/views/admin/reports/_status.html.haml @@ -44,7 +44,7 @@ = t("statuses.visibilities.#{status.visibility}") · - = link_to ActivityPub::TagManager.instance.url_for(status.proper), class: 'detailed-status__link', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status.proper), class: 'detailed-status__link', rel: 'noopener' do = t('admin.statuses.view_publicly') - if status.proper.sensitive? diff --git a/app/views/admin/reports/actions/preview.html.haml b/app/views/admin/reports/actions/preview.html.haml index 79c444453f..5a90bf1b8f 100644 --- a/app/views/admin/reports/actions/preview.html.haml +++ b/app/views/admin/reports/actions/preview.html.haml @@ -63,7 +63,7 @@ = material_symbol 'link' = media_attachment.file_file_name .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - unless status.application.nil? · diff --git a/app/views/admin/statuses/show.html.haml b/app/views/admin/statuses/show.html.haml index b008e17d27..f5bf98e7de 100644 --- a/app/views/admin/statuses/show.html.haml +++ b/app/views/admin/statuses/show.html.haml @@ -9,7 +9,7 @@ data: { confirm: t('admin.reports.are_you_sure') }, name: :report, type: :submit - = link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener noreferrer' + = link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener' %h3= t('admin.statuses.metadata') diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index be699e5ab2..cf265e22ad 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -29,7 +29,8 @@ %hr.spacer/ -.batch-table +.batch-table.batch-table--no-toolbar + .batch-table__toolbar .batch-table__body - if @tags.empty? = nothing_here 'nothing-here--under-tabs nothing-here--no-toolbar' diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index 462ca312a0..0c8b2eaec0 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -6,7 +6,7 @@ .time-period = date_range(@time_period) - = link_to t('admin.tags.open'), tag_url(@tag), class: 'button', target: '_blank', rel: 'noopener noreferrer' + = link_to t('admin.tags.open'), tag_url(@tag), class: 'button', target: '_blank', rel: 'noopener' - if current_user.can?(:view_dashboard) .dashboard @@ -17,7 +17,7 @@ label: t('admin.trends.tags.dashboard.tag_accounts_measure'), measure: 'tag_accounts', params: { id: @tag.id }, - rel: 'noopener noreferrer', + rel: 'noopener', start_at: @time_period.first, target: '_blank' .dashboard__item diff --git a/app/views/admin/terms_of_service/_links.html.haml b/app/views/admin/terms_of_service/_links.html.haml new file mode 100644 index 0000000000..aaf0f2c7b7 --- /dev/null +++ b/app/views/admin/terms_of_service/_links.html.haml @@ -0,0 +1,6 @@ +.content__heading__tabs + = render_navigation renderer: :links do |primary| + :ruby + primary.item :current, safe_join([material_symbol('description'), t('admin.terms_of_service.current')]), admin_terms_of_service_index_path + primary.item :draft, safe_join([material_symbol('description'), t('admin.terms_of_service.draft')]), admin_terms_of_service_draft_path + primary.item :previous, safe_join([material_symbol('history'), t('admin.terms_of_service.history')]), admin_terms_of_service_history_path diff --git a/app/views/admin/terms_of_service/drafts/show.html.haml b/app/views/admin/terms_of_service/drafts/show.html.haml new file mode 100644 index 0000000000..7a9a6fd3c4 --- /dev/null +++ b/app/views/admin/terms_of_service/drafts/show.html.haml @@ -0,0 +1,19 @@ +- content_for :page_title do + = t('admin.terms_of_service.title') + +- content_for :heading do + %h2= t('admin.terms_of_service.title') + = render partial: 'admin/terms_of_service/links' + += simple_form_for @terms_of_service, url: admin_terms_of_service_draft_path, method: :put do |form| + = render 'shared/error_messages', object: @terms_of_service + + .fields-group + = form.input :text, wrapper: :with_block_label, input_html: { rows: 8 } + + .fields-group + = form.input :changelog, wrapper: :with_block_label, input_html: { rows: 8 } + + .actions + = form.button :button, t('admin.terms_of_service.save_draft'), type: :submit, name: :action_type, value: :save_draft, class: 'button button-secondary' + = form.button :button, t('admin.terms_of_service.publish'), type: :submit, name: :action_type, value: :publish diff --git a/app/views/admin/terms_of_service/generates/show.html.haml b/app/views/admin/terms_of_service/generates/show.html.haml new file mode 100644 index 0000000000..46737e8355 --- /dev/null +++ b/app/views/admin/terms_of_service/generates/show.html.haml @@ -0,0 +1,41 @@ +- content_for :page_title do + = t('admin.terms_of_service.generates.title') + +- content_for :heading_actions do + .back-link + = link_to admin_terms_of_service_index_path do + = material_symbol 'chevron_left' + = t('admin.terms_of_service.back') + +%p.lead= t('admin.terms_of_service.generates.explanation_html') + +%p.lead= t('admin.terms_of_service.generates.chance_to_review_html') + +%hr.spacer/ + += simple_form_for @generator, url: admin_terms_of_service_generate_path, method: :post do |form| + = render 'shared/error_messages', object: @generator + + .fields-group + = form.input :domain, wrapper: :with_label + + .fields-group + = form.input :jurisdiction, wrapper: :with_label + + .fields-group + = form.input :admin_email, wrapper: :with_label + + .fields-group + = form.input :dmca_email, wrapper: :with_label + + .fields-group + = form.input :dmca_address, wrapper: :with_label + + .fields-group + = form.input :arbitration_address, wrapper: :with_label + + .fields-group + = form.input :arbitration_website, wrapper: :with_label + + .actions + = form.button :button, t('admin.terms_of_service.generates.action'), type: :submit diff --git a/app/views/admin/terms_of_service/histories/show.html.haml b/app/views/admin/terms_of_service/histories/show.html.haml new file mode 100644 index 0000000000..8b7b8eb82e --- /dev/null +++ b/app/views/admin/terms_of_service/histories/show.html.haml @@ -0,0 +1,16 @@ +- content_for :page_title do + = t('admin.terms_of_service.history') + +- content_for :heading do + %h2= t('admin.terms_of_service.title') + = render partial: 'admin/terms_of_service/links' + +- if @terms_of_service.empty? + %p= t('admin.terms_of_service.no_history') +- else + %ol.admin__terms-of-service__history + - @terms_of_service.each do |terms_of_service| + %li + .admin__terms-of-service__history__item + %h5= l(terms_of_service.published_at) + .prose= markdown(terms_of_service.changelog) diff --git a/app/views/admin/terms_of_service/index.html.haml b/app/views/admin/terms_of_service/index.html.haml new file mode 100644 index 0000000000..809d567674 --- /dev/null +++ b/app/views/admin/terms_of_service/index.html.haml @@ -0,0 +1,39 @@ +- content_for :page_title do + = t('admin.terms_of_service.title') + +- content_for :heading do + %h2= t('admin.terms_of_service.title') + = render partial: 'links' + +- if @terms_of_service.present? + .admin__terms-of-service__container + .admin__terms-of-service__container__header + .dot-indicator.success + .dot-indicator__indicator + %span= t('admin.terms_of_service.live') + · + %span + = t('admin.terms_of_service.published_on_html', date: tag.time(l(@terms_of_service.published_at.to_date), class: 'formatted', date: @terms_of_service.published_at.to_date.iso8601)) + · + - if @terms_of_service.notification_sent? + %span + = t('admin.terms_of_service.notified_on_html', date: tag.time(l(@terms_of_service.notification_sent_at.to_date), class: 'formatted', date: @terms_of_service.notification_sent_at.to_date.iso8601)) + - else + = link_to t('admin.terms_of_service.notify_users'), admin_terms_of_service_preview_path(@terms_of_service), class: 'link-button' + + .admin__terms-of-service__container__body + .prose + = markdown(@terms_of_service.text) + + %hr.spacer/ + + %h3= t('admin.terms_of_service.changelog') + + .prose + = markdown(@terms_of_service.changelog) +- else + %p.lead= t('admin.terms_of_service.no_terms_of_service_html') + + .content__heading__actions + = link_to t('admin.terms_of_service.create'), admin_terms_of_service_draft_path, class: 'button' + = link_to t('admin.terms_of_service.generate'), admin_terms_of_service_generate_path, class: 'button button-secondary' diff --git a/app/views/admin/terms_of_service/previews/show.html.haml b/app/views/admin/terms_of_service/previews/show.html.haml new file mode 100644 index 0000000000..48c94cb052 --- /dev/null +++ b/app/views/admin/terms_of_service/previews/show.html.haml @@ -0,0 +1,20 @@ +- content_for :page_title do + = t('admin.terms_of_service.preview.title') + +- content_for :heading_actions do + .back-link + = link_to admin_terms_of_service_index_path do + = material_symbol 'chevron_left' + = t('admin.terms_of_service.back') + +%p.lead + = t('admin.terms_of_service.preview.explanation_html', count: @user_count, display_count: number_with_delimiter(@user_count), date: l(@terms_of_service.published_at.to_date)) + +.prose + = markdown(@terms_of_service.changelog) + +%hr.spacer/ + +.content__heading__actions + = link_to t('admin.terms_of_service.preview.send_preview', email: current_user.email), admin_terms_of_service_test_path(@terms_of_service), method: :post, class: 'button button-secondary' + = link_to t('admin.terms_of_service.preview.send_to_all', count: @user_count, display_count: number_with_delimiter(@user_count)), admin_terms_of_service_distribution_path(@terms_of_service), method: :post, class: 'button', data: { confirm: t('admin.reports.are_you_sure') } diff --git a/app/views/admin/trends/statuses/_status.html.haml b/app/views/admin/trends/statuses/_status.html.haml index 09547ff036..aa09803ed5 100644 --- a/app/views/admin/trends/statuses/_status.html.haml +++ b/app/views/admin/trends/statuses/_status.html.haml @@ -6,7 +6,7 @@ .one-liner = admin_account_link_to status.account - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', class: 'emojify', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', class: 'emojify', rel: 'noopener' do = one_line_preview(status) - status.ordered_media_attachments.each do |media_attachment| diff --git a/app/views/admin/trends/tags/_tag.html.haml b/app/views/admin/trends/tags/_tag.html.haml index e0f9f39e47..1686c46652 100644 --- a/app/views/admin/trends/tags/_tag.html.haml +++ b/app/views/admin/trends/tags/_tag.html.haml @@ -8,7 +8,7 @@ %br/ - = link_to tag_path(tag), target: '_blank', rel: 'noopener noreferrer' do + = link_to tag_path(tag), target: '_blank', rel: 'noopener' do = t('admin.trends.tags.used_by_over_week', count: tag.history.reduce(0) { |sum, day| sum + day.accounts }) - if tag.trendable? diff --git a/app/views/application/_card.html.haml b/app/views/application/_card.html.haml index ae74f1dc63..c28e18522c 100644 --- a/app/views/application/_card.html.haml +++ b/app/views/application/_card.html.haml @@ -2,7 +2,7 @@ - compact ||= false .card.h-card - = link_to account_url, target: '_blank', rel: 'noopener noreferrer' do + = link_to account_url, target: '_blank', rel: 'noopener' do - unless compact .card__img = image_tag account.header.url, alt: '' diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index afa1d62243..f4a6e28474 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -37,7 +37,7 @@ required: true = f.input :password_confirmation, hint: false, - input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_password'), autocomplete: 'new-password' }, + input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_password'), autocomplete: 'new-password', maxlength: User.password_length.last }, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true = f.input :confirm_password, @@ -72,8 +72,8 @@ .fields-group = f.input :agreement, as: :boolean, - label: t('auth.privacy_policy_agreement_html', rules_path: about_more_path, privacy_policy_path: privacy_policy_path), - required: true, + label: t('auth.user_agreement_html', privacy_policy_path: privacy_policy_path, terms_of_service_path: terms_of_service_path), + required: false, wrapper: :with_label - if Setting.registration_button_message.present? @@ -82,5 +82,3 @@ .actions = f.button :button, @invite.present? ? t('auth.register') : sign_up_message, type: :submit - -.form-footer= render 'auth/shared/links' diff --git a/app/views/auth/registrations/rules.html.haml b/app/views/auth/registrations/rules.html.haml index 69459c0233..4b0159e862 100644 --- a/app/views/auth/registrations/rules.html.haml +++ b/app/views/auth/registrations/rules.html.haml @@ -27,5 +27,3 @@ - accept_path = @invite_code.present? ? public_invite_url(invite_code: @invite_code, accept: @accept_token) : new_user_registration_path(accept: @accept_token) = link_to t('auth.rules.accept'), accept_path, class: 'button' = link_to t('auth.rules.back'), root_path, class: 'button button-tertiary' - -.form-footer= render 'auth/shared/links' diff --git a/app/views/auth/setup/show.html.haml b/app/views/auth/setup/show.html.haml index 713f77470d..91654ca214 100644 --- a/app/views/auth/setup/show.html.haml +++ b/app/views/auth/setup/show.html.haml @@ -11,17 +11,17 @@ = render 'shared/error_messages', object: @user - %p.lead - %strong= t('auth.setup.link_not_received') - %p.lead= t('auth.setup.email_below_hint_html') + %details + %summary.lead + %strong= t('auth.setup.link_not_received') - .fields-group - = f.input :email, - hint: false, - input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'off' }, - required: true + %p.lead= t('auth.setup.email_below_hint_html') - .actions - = f.button :button, t('auth.resend_confirmation'), type: :submit, class: 'button timer-button', disabled: true + .fields-group + = f.input :email, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.email') }, + required: true -.form-footer= render 'auth/shared/links' + .actions + = f.button :button, t('auth.resend_confirmation'), type: :submit, class: 'button timer-button', disabled: true diff --git a/app/views/disputes/strikes/_card.html.haml b/app/views/disputes/strikes/_card.html.haml index 58965ad600..33e4099cf9 100644 --- a/app/views/disputes/strikes/_card.html.haml +++ b/app/views/disputes/strikes/_card.html.haml @@ -27,7 +27,7 @@ = material_symbol 'link' = media_attachment.file_file_name .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - unless status.application.nil? · diff --git a/app/views/filters/statuses/_status_filter.html.haml b/app/views/filters/statuses/_status_filter.html.haml index 3476869e60..9f4605a09c 100644 --- a/app/views/filters/statuses/_status_filter.html.haml +++ b/app/views/filters/statuses/_status_filter.html.haml @@ -19,11 +19,11 @@ = media_attachment.file_file_name .detailed-status__meta - = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'name-tag', target: '_blank', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'name-tag', target: '_blank', rel: 'noopener' do = image_tag(status.account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar') .username= status.account.acct · - = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', rel: 'noopener' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - if status.edited? · diff --git a/app/views/oauth/authorized_applications/index.html.haml b/app/views/oauth/authorized_applications/index.html.haml index eb544d079b..3745ed219f 100644 --- a/app/views/oauth/authorized_applications/index.html.haml +++ b/app/views/oauth/authorized_applications/index.html.haml @@ -9,7 +9,7 @@ - @applications.each do |application| .applications-list__item{ id: dom_id(application) } - if application.website.present? - = link_to application.name, application.website, target: '_blank', rel: 'noopener noreferrer', class: 'announcements-list__item__title' + = link_to application.name, application.website, target: '_blank', rel: 'noopener', class: 'announcements-list__item__title' - else %strong.announcements-list__item__title = application.name diff --git a/app/views/redirects/show.html.haml b/app/views/redirects/show.html.haml index aa0db350a8..984a70624b 100644 --- a/app/views/redirects/show.html.haml +++ b/app/views/redirects/show.html.haml @@ -11,4 +11,4 @@ .redirect__message %h1= t('redirects.title', instance: site_hostname) %p= t('redirects.prompt') - %p= link_to @redirect_path, @redirect_path, rel: 'noreferrer noopener' + %p= link_to @redirect_path, @redirect_path, rel: 'noopener' diff --git a/app/views/terms_of_service/show.html.haml b/app/views/terms_of_service/show.html.haml new file mode 100644 index 0000000000..f6ca023da7 --- /dev/null +++ b/app/views/terms_of_service/show.html.haml @@ -0,0 +1,6 @@ +- content_for :page_title, t('terms_of_service.title') + +- content_for :header_tags do + = render partial: 'shared/og' + += render 'shared/web_app' diff --git a/app/views/user_mailer/terms_of_service_changed.html.haml b/app/views/user_mailer/terms_of_service_changed.html.haml new file mode 100644 index 0000000000..95cc976418 --- /dev/null +++ b/app/views/user_mailer/terms_of_service_changed.html.haml @@ -0,0 +1,17 @@ += content_for :heading do + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/user.png'), + subtitle: t('user_mailer.terms_of_service_changed.subtitle', domain: site_hostname), + title: t('user_mailer.terms_of_service_changed.title') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t('user_mailer.terms_of_service_changed.description_html', path: terms_of_service_url, domain: site_hostname) + %p + %strong= t('user_mailer.terms_of_service_changed.changelog') + = markdown(@terms_of_service.changelog) + %p= t('user_mailer.terms_of_service_changed.agreement', domain: site_hostname) + %p= t('user_mailer.terms_of_service_changed.sign_off', domain: site_hostname) diff --git a/app/views/user_mailer/terms_of_service_changed.text.erb b/app/views/user_mailer/terms_of_service_changed.text.erb new file mode 100644 index 0000000000..8416572f0a --- /dev/null +++ b/app/views/user_mailer/terms_of_service_changed.text.erb @@ -0,0 +1,14 @@ +<%= t('user_mailer.terms_of_service_changed.title') %> + +=== + +<%= t('user_mailer.terms_of_service_changed.description', domain: site_hostname) %> + +=> <%= terms_of_service_url %> + +<%= t('user_mailer.terms_of_service_changed.changelog') %> + +<%= @terms_of_service.changelog %> +<%= t('user_mailer.terms_of_service_changed.agreement', domain: site_hostname) %> + +<%= t('user_mailer.terms_of_service_changed.sign_off', domain: site_hostname) %> diff --git a/app/workers/admin/distribute_terms_of_service_notification_worker.rb b/app/workers/admin/distribute_terms_of_service_notification_worker.rb new file mode 100644 index 0000000000..7370ee87e8 --- /dev/null +++ b/app/workers/admin/distribute_terms_of_service_notification_worker.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class Admin::DistributeTermsOfServiceNotificationWorker + include Sidekiq::Worker + + def perform(terms_of_service_id) + terms_of_service = TermsOfService.find(terms_of_service_id) + + terms_of_service.scope_for_notification.find_each do |user| + UserMailer.terms_of_service_changed(user, terms_of_service).deliver_later! + end + rescue ActiveRecord::RecordNotFound + true + end +end diff --git a/app/workers/mention_resolve_worker.rb b/app/workers/mention_resolve_worker.rb index 72dcd9633f..8c5938aeaf 100644 --- a/app/workers/mention_resolve_worker.rb +++ b/app/workers/mention_resolve_worker.rb @@ -16,7 +16,7 @@ class MentionResolveWorker return if account.nil? - status.mentions.create!(account: account, silent: false) + status.mentions.upsert({ account_id: account.id, silent: false }, unique_by: %w(status_id account_id)) rescue ActiveRecord::RecordNotFound # Do nothing rescue Mastodon::UnexpectedResponseError => e diff --git a/config/application.rb b/config/application.rb index e4e9680e66..59afafd5be 100644 --- a/config/application.rb +++ b/config/application.rb @@ -28,7 +28,7 @@ require_relative '../lib/redis/namespace_extensions' require_relative '../lib/paperclip/url_generator_extensions' require_relative '../lib/paperclip/attachment_extensions' -require_relative '../lib/paperclip/gif_transcoder' +require_relative '../lib/paperclip/gifv_transcoder' require_relative '../lib/paperclip/media_type_spoof_detector_extensions' require_relative '../lib/paperclip/transcoder' require_relative '../lib/paperclip/type_corrector' diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb index a40cd4e4c5..90217139a8 100644 --- a/config/initializers/opentelemetry.rb +++ b/config/initializers/opentelemetry.rb @@ -54,6 +54,9 @@ if ENV.keys.any? { |name| name.match?(/OTEL_.*_ENDPOINT/) } 'OpenTelemetry::Instrumentation::Sidekiq' => { span_naming: :job_class, # Use the job class as the span name, otherwise this is the queue name and not very helpful }, + 'OpenTelemetry::Instrumentation::Redis' => { + trace_root_spans: false, # don't start traces with Redis spans + }, }) prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon') diff --git a/config/locales/activerecord.az.yml b/config/locales/activerecord.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/activerecord.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml index 69139eba1d..fb95d40868 100644 --- a/config/locales/activerecord.fy.yml +++ b/config/locales/activerecord.fy.yml @@ -39,6 +39,11 @@ fy: attributes: data: malformed: hat de ferkearde opmaak + list_account: + attributes: + account_id: + taken: stiet al yn de list + must_be_following: moat in folge account wêze status: attributes: reblog: diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 21be8aa345..646da1ce9e 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -39,6 +39,8 @@ ja: attributes: data: malformed: は不正です + list_account: + must_be_following: フォローされているアカウントでなければなりません status: attributes: reblog: diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index ef08304c3d..262b8c5e77 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -54,16 +54,16 @@ zh-CN: blocked: 使用了被封禁的电子邮件提供商 unreachable: 似乎不存在 role_id: - elevated: 不能高于你现在的身份 + elevated: 不能高于你目前所处角色拥有的权限 user_role: attributes: permissions_as_keys: - dangerous: 包含对基本角色不安全的权限 + dangerous: 包含对基本角色而言不安全的权限 elevated: 不能包含你当前身份未有的权限 - own_role: 无权以你当前的身份更改 + own_role: 你当前的角色无权执行此更改 position: elevated: 不能高于你当前的角色 - own_role: 无权以你当前的身份更改 + own_role: 你当前的角色无权执行此更改 webhook: attributes: events: diff --git a/config/locales/an.yml b/config/locales/an.yml index 49033dc48e..6598ea3b90 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -919,7 +919,6 @@ an: migrate_account: Mudar-se a unatra cuenta migrate_account_html: Si deseyas reendrezar esta cuenta a unatra distinta, puetz configurar-lo aquí. or_log_in_with: U inicia sesión con - privacy_policy_agreement_html: He leyiu y accepto la politica de privacidat providers: cas: CAS saml: SAML @@ -935,7 +934,6 @@ an: preamble_html: Inicia sesión con as tuys credencials %{domain}. Si la tuya cuenta se troba en un servidor diferent, no podrás iniciar aquí una sesión. title: Iniciar sesión en %{domain} sign_up: - preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a qualsequier atra persona en o ret, independientment d'o servidor en o qual se trobe. title: Creyar cuenta de Mastodon en %{domain}. status: account_status: Estau d'a cuenta diff --git a/config/locales/ar.yml b/config/locales/ar.yml index a3f6675952..5eea1390ce 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1118,7 +1118,6 @@ ar: migrate_account: الانتقال إلى حساب مختلف migrate_account_html: إن كنت ترغب في تحويل هذا الحساب نحو حساب آخَر، يُمكِنُك إعداده هنا. or_log_in_with: أو قم بتسجيل الدخول بواسطة - privacy_policy_agreement_html: لقد قرأتُ وأوافق على سياسة الخصوصية progress: confirm: تأكيد عنوان البريد الإلكتروني details: تفاصيلك @@ -1143,7 +1142,6 @@ ar: set_new_password: إدخال كلمة مرور جديدة setup: email_below_hint_html: قم بفحص مجلد البريد المزعج الخاص بك، أو قم بطلب آخر. يمكنك تصحيح عنوان بريدك الإلكتروني إن كان خاطئا. - email_settings_hint_html: انقر على الرابط الذي أرسلناه لك للتحقق من %{email}. سننتظر هنا. link_not_received: ألم تحصل على رابط؟ new_confirmation_instructions_sent: سوف تتلقى رسالة بريد إلكتروني جديدة مع رابط التأكيد في غضون بضع دقائق! title: تحقَّق من بريدك الوارِد @@ -1152,7 +1150,6 @@ ar: title: تسجيل الدخول إلى %{domain} sign_up: manual_review: عمليات التسجيل في %{domain} تمر عبر المراجعة اليدوية من قبل مشرفينا. لمساعدتنا في معالجة إنشاء حسابك، اكتب نَبْذَة عن نفسك ولماذا تريد حسابًا على %{domain}. - preamble: مع حساب على خادم ماستدون هذا، ستتمكن من متابعة أي شخص آخر على الشبكة، بغض النظر عن المكان الذي يستضيف فيه حسابهم. title: دعنا نجهّز %{domain}. status: account_status: حالة الحساب diff --git a/config/locales/ast.yml b/config/locales/ast.yml index a3310f0d46..6c2ebbfd72 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -459,7 +459,6 @@ ast: logout: Zarrar la sesión migrate_account: Cambéu de cuenta migrate_account_html: Si quies redirixir esta cuenta a otra diferente, pues configurar esta opción equí. - privacy_policy_agreement_html: Lleí y acepto la política de privacidá providers: cas: CAS saml: SAML @@ -472,7 +471,6 @@ ast: setup: link_not_received: "¿Nun consiguiesti l'enllaz?" sign_up: - preamble: Con una cuenta nesti sirvidor de Mastodon vas ser a siguir a cualesquier perfil de la rede, independientemente del sirvidor onde s'agospie la so cuenta. title: 'Creación d''una cuenta en: %{domain}.' status: account_status: Estáu de la cuenta diff --git a/config/locales/az.yml b/config/locales/az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/be.yml b/config/locales/be.yml index 7ce89d9935..eaeb5aba43 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1134,7 +1134,6 @@ be: migrate_account: Пераехаць на іншы ўліковы запіс migrate_account_html: Калі вы хочаце перанакіраваць гэты ўліковы запіс на іншы, то можаце наладзіць яго тут. or_log_in_with: Або ўвайсці з дапамогай - privacy_policy_agreement_html: Я азнаёміўся і пагаджаюся з палітыкай канфідэнцыйнасці progress: confirm: Пацвердзіць email details: Вашы дадзеныя @@ -1159,7 +1158,6 @@ be: set_new_password: Прызначыць новы пароль setup: email_below_hint_html: Праверце папку са спамам або зрабіце новы запыт. Вы можаце выправіць свой email, калі ён няправільны. - email_settings_hint_html: Націсніце на спасылку, якую мы адправілі, каб спраўдзіць %{email}. Мы вас пачакаем тут. link_not_received: Не атрымалі спасылку? new_confirmation_instructions_sent: Праз некалькі хвілін вы атрымаеце новы ліст на email са спасылкай для пацверджання! title: Праверце вашу пошту @@ -1168,7 +1166,6 @@ be: title: Уваход у %{domain} sign_up: manual_review: Рэгістрацыі на %{domain} праходзяць ручную праверку нашымі мадэратарамі. Каб дапамагчы нам апрацаваць вашу рэгістрацыю, напішыце крыху пра сябе і чаму вы хочаце мець уліковы запіс на %{domain}. - preamble: Маючы ўліковы запіс на гэтым серверы Mastodon, вы будзеце мець магчымасць падпісацца на кожнага чалавека ў сетцы, незалежна ад таго, на якім серверы размешчаны ягоны ўліковы запіс. title: Наладзьма вас на %{domain}. status: account_status: Стан уліковага запісу diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 0e7ddeddc0..94a75c01f3 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -207,9 +207,11 @@ bg: disable_sign_in_token_auth_user: Изключване на удостоверяването с код по имейл за потребител disable_user: Изключване на потребител enable_custom_emoji: Включване на персонализирано емоджи + enable_sign_in_token_auth_user: Включване на аутентикацията на потребителя с имейл токен enable_user: Активиране на потребител memorialize_account: Възпоменаване на акаунта promote_user: Повишаване на потребител + publish_terms_of_service: Публикуване на условията за ползване reject_appeal: Отхвърляне на обжалването reject_user: Отхвърляне на потребителя remove_avatar_user: Премахване на аватара @@ -916,6 +918,29 @@ bg: search: Търсене title: Хаштагове updated_msg: Успешно осъвременени настройки на хаштага + terms_of_service: + back: Обратно към условията за ползване + changelog: Какво е променено + current: Текущо + draft: Чернова + generate: Употреба на шаблон + generates: + action: Пораждане + chance_to_review_html: "Пораждани условия на услугата няма да се публикуват самодейно. Ще имате възможност да видите предварително резултата. Попълнете необходимите подробности, за да продължите." + explanation_html: Предоставеният шаблон на условията за услугата е само за осведомителни цели и не трябва да се тълкува като правен съвет, по който и да е въпрос. Посъветвайте се със собствения си правен адвокат относно ситуацията ви и конкретни правни въпроси, които имате. + title: Настройка на условията за услугата + history: История + live: На живо + no_history: Още няма записани промени в условията на услугата. + notified_on_html: Потребители, известени на %{date} + preview: + explanation_html: 'Имейлът ще се изпрати до %{display_count} потребители, регистрирали се преди %{date}. Следният текст ще се включи в е-писмо:' + send_preview: Изпращане на предварителен преглед до %{email} + title: Предварителен преглед на известие за условията на услугата + publish: Публикуване + published_on_html: Публикувано на %{date} + save_draft: Запазване на чернова + title: Условия на услугата title: Администрация trends: allow: Позволяване @@ -1121,8 +1146,8 @@ bg: migrate_account: Преместване в различен акаунт migrate_account_html: Ако желаете да пренасочите този акаунт към друг, можете да настроите това тук. or_log_in_with: Или влизане с помощта на - privacy_policy_agreement_html: Прочетох и има съгласието ми за политиката за поверителност progress: + confirm: Потвърждаване на имейл details: Вашите подробности review: Нашият преглед rules: Приемане на правилата @@ -1145,7 +1170,7 @@ bg: 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: Проверете входящата си поща @@ -1154,7 +1179,7 @@ bg: title: Влизане в %{domain} sign_up: manual_review: Регистрирането в %{domain} преминава през ръчен преглед от модераторите ни. Напишете малко за себе си и защо искате акаунт в %{domain}, за да ни помогнете в процеса на регистрацията си. - preamble: С акаунт на този съвър в Mastodon ще може да последвате всекиго в мрежата, независимо къде се намира акаунтът му. + preamble: Имайки акаунт на този съвър в Mastodon, то ще може да последвате всекиго във федивселената, независимо къде се намира акаунтът му. title: Първоначални настройки за %{domain}. status: account_status: Състояние на акаунта @@ -1166,6 +1191,7 @@ bg: view_strikes: Преглед на предишните предупреждения против акаунта ви too_fast: Образецът подаден пребързо, опитайте пак. use_security_key: Употреба на ключ за сигурност + user_agreement_html: Прочетох и се съгласявам с условията на услугата и политиката за поверителност author_attribution: example_title: Примерен текст hint_html: Пишете ли новинарски статии или блогове извън Mastodon? Управлявайте как ви приписват авторството, когато са споделени в Mastodon. @@ -1789,6 +1815,8 @@ bg: too_late: Твърде късно е за обжалване на това предупреждение tags: does_not_match_previous_name: не съвпада с предишното име + terms_of_service: + title: Условия на услугата themes: contrast: Mastodon (висок контраст) default: Mastodon (тъмно) @@ -1849,6 +1877,15 @@ bg: 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/ca.yml b/config/locales/ca.yml index 07fcd8632c..6cb1085c8e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -214,6 +214,7 @@ ca: enable_user: Activa l'usuari memorialize_account: Memoritza el compte promote_user: Promou l'usuari + publish_terms_of_service: Publicar les condicions de servei reject_appeal: Rebutja l'apel·lació reject_user: Rebutja l'usuari remove_avatar_user: Eliminar avatar @@ -278,6 +279,7 @@ ca: enable_user_html: "%{name} ha activat l'accés del usuari %{target}" memorialize_account_html: "%{name} ha convertit el compte %{target} en una pàgina de memorial" promote_user_html: "%{name} ha promogut l'usuari %{target}" + publish_terms_of_service_html: "%{name} ha publicat actualitzacions a les condicions de servei" reject_appeal_html: "%{name} ha rebutjat l'apel·lació a la decisió de moderació de %{target}" reject_user_html: "%{name} ha rebutjat el registre de %{target}" remove_avatar_user_html: "%{name} ha eliminat l'avatar de %{target}" @@ -925,6 +927,19 @@ ca: search: Cerca title: Etiquetes updated_msg: Ajustaments d'etiquetes actualitzats amb èxit + terms_of_service: + back: Tornar a les condicions de servei + changelog: Què ha canviat + create: Feu servir el vostre + current: Actual + draft: Esborrany + generate: Fer servir la plantilla + generates: + action: Generar + chance_to_review_html: "Les condicions de servei generades no es publicaran automàticament. Tindreu l'oportunitat de revisar-ne els resultats. Empleneu els detalls necessaris per a procedir." + title: Configuració de les condicions de servei + history: Historial + live: En ús title: Administració trends: allow: Permet @@ -1132,7 +1147,6 @@ ca: migrate_account: Mou a un compte diferent migrate_account_html: Si vols redirigir aquest compte a un altre diferent, el pots configurar aquí. or_log_in_with: O inicia sessió amb - privacy_policy_agreement_html: He llegit i estic d'acord amb la política de privacitat progress: confirm: Confirmar email details: Els teus detalls @@ -1157,7 +1171,7 @@ ca: set_new_password: Estableix una contrasenya nova setup: email_below_hint_html: Verifiqueu la carpeta de correu brossa o demaneu-ne un altre. Podeu corregir l'adreça de correu-e si no és correcta. - email_settings_hint_html: Toca l'enllaç que t'hem enviat per a verificar %{email}. Esperarem aquí mateix. + email_settings_hint_html: Feu clic a l'enllaç que us hem enviat a %{email} per a començar a utilitzar Mastodon. Us esperem. link_not_received: No has rebut l'enllaç? new_confirmation_instructions_sent: Rebràs un nou correu amb l'enllaç de confirmació en pocs minuts! title: Comprova la teva safata d'entrada @@ -1166,7 +1180,7 @@ ca: title: Inicia sessió a %{domain} sign_up: manual_review: Els registres a %{domain} passen per una revisió manual dels nostres moderadors. Per ajudar-nos a processar el teu registre, escriu-nos quelcom sobre tu i perquè vols un compte a %{domain}. - preamble: Amb un compte en aquest servidor Mastodon podràs seguir qualsevol altra persona de la xarxa, independentment d'on tingui el compte. + preamble: Amb un compte en aquest servidor de Mastodon podreu seguir qualsevol altra persona al Fedivers, sense importar a quin servidor tingui el compte. title: Configurem-te a %{domain}. status: account_status: Estat del compte @@ -1801,6 +1815,8 @@ ca: too_late: És massa tard per a apel·lar aquesta acció tags: does_not_match_previous_name: no coincideix amb el nom anterior + terms_of_service: + title: Condicions de servei themes: contrast: Mastodon (alt contrast) default: Mastodon (fosc) @@ -1861,6 +1877,8 @@ ca: further_actions_html: Si no has estat tu, %{action} immediatament i activa l'autenticació de dos-factors per a mantenir el teu compte segur. subject: S'ha accedit al teu compte des d'una adreça IP nova title: Un inici de sessió nou + terms_of_service_changed: + title: Actualització important warning: appeal: Envia una apel·lació appeal_description: Si creus que això és un error, pots enviar una apel·lació a l'equip de %{instance}. diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 502e2fe0d8..3c5d6c9ded 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1099,7 +1099,6 @@ cs: migrate_account: Přesunout se na jiný účet migrate_account_html: Zde můžete nastavit přesměrování tohoto účtu na jiný. or_log_in_with: Nebo se přihlaste pomocí - privacy_policy_agreement_html: Četl jsem a souhlasím se zásadami ochrany osobních údajů progress: details: Vaše údaje review: Naše hodnocení @@ -1122,7 +1121,6 @@ cs: security: Zabezpečení set_new_password: Nastavit nové heslo setup: - email_settings_hint_html: Klikněte na odkaz, který jsme Vám poslali k ověření %{email}. Budeme zde čekat. link_not_received: Nedostali jste odkaz? title: Zkontrolujte doručenou poštu sign_in: @@ -1130,7 +1128,6 @@ cs: title: Přihlásit se k %{domain} sign_up: manual_review: Registrace na %{domain} procházejí manuálním hodnocením od našich moderátorů. Abyste nám pomohli zpracovat Vaši registraci, napište trochu o sobě a proč chcete účet na %{domain}. - preamble: S účtem na tomto serveru Mastodon budete moci sledovat jakoukoliv jinou osobu v síti bez ohledu na to, kde je jejich účet hostován. title: Pojďme vás nastavit na %{domain}. status: account_status: Stav účtu diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 2f2ae75e5d..c2cf685503 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -226,6 +226,7 @@ cy: enable_user: Galluogi Defnyddiwr memorialize_account: Cofadeilio Cyfrif promote_user: Dyrchafu Defnyddiwr + publish_terms_of_service: Cyhoeddi Telerau Gwasanaeth reject_appeal: Gwrthod Apêl reject_user: Gwrthod Defnyddiwr remove_avatar_user: Tynnu Afatar @@ -290,6 +291,7 @@ cy: enable_user_html: Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target} memorialize_account_html: Newidiodd %{name} gyfrif %{target} i dudalen memoriam promote_user_html: Mae %{name} wedi hyrwyddo defnyddiwr %{target} + publish_terms_of_service_html: Mae %{name} wedi cyhoeddi diweddariadau i'r telerau gwasanaeth reject_appeal_html: Mae %{name} wedi gwrthod apêl penderfyniad cymedroli %{target} reject_user_html: Mae %{name} wedi gwrthod cofrestriad gan %{target} remove_avatar_user_html: Mae %{name} wedi tynnu afatar %{target} @@ -981,6 +983,39 @@ cy: search: Chwilio title: Hashnodau updated_msg: Gosodiadau hashnodau wedi'i diweddaru'n llwyddiannus + terms_of_service: + back: Nôl i delerau gwasanaeth + changelog: Beth sydd wedi newid + create: Defnyddiwch eich un eich hun + current: Cyfredol + draft: Drafft + generate: Defnyddiwch dempled + generates: + action: Cynhyrchu + chance_to_review_html: "Ni fydd y telerau gwasanaeth sy'n cael eu cynhyrchu'n cael eu cyhoeddi'n awtomatig. Bydd cyfle i chi adolygu'r canlyniadau. Cwblhewch y manylion angenrheidiol i symud ymlaen." + explanation_html: Mae'r templed telerau gwasanaeth sy'n cael eu darparu at ddibenion gwybodaeth yn unig, ac ni ddylid ei ddehongli fel cyngor cyfreithiol ar unrhyw bwnc. Ymgynghorwch â'ch cyngor cyfreithiol eich hun ar eich sefyllfa ag unrhyw gwestiynau cyfreithiol penodol sydd gennych. + title: Telerau Gosod Gwasanaeth + history: Hanes + live: Byw + no_history: Nid oes unrhyw newidiadau i delerau gwasanaeth wedi'u cofnodi eto. + no_terms_of_service_html: Nid oes gennych unrhyw delerau gwasanaeth wedi'u ffurfweddu ar hyn o bryd. Bwriad telerau gwasanaeth yw darparu eglurder a'ch amddiffyn rhag rhwymedigaethau posibl mewn anghydfodau gyda'ch defnyddwyr. + notified_on_html: Hysbyswyd defnyddwyr ar %{date} + notify_users: Hysbysu defnyddwyr + preview: + explanation_html: 'Bydd yr e-bost yn cael ei anfon at %{display_count} o ddefnyddwyr sydd wedi cofrestru cyn %{date}. Bydd y testun canlynol yn cael ei gynnwys yn yr e-bost:' + send_preview: Anfon rhagolwg at %{email} + send_to_all: + few: Anfon %{display_count} e-bost + many: Anfon %{display_count} e-bost + one: Anfon %{display_count} e-bost + other: Anfon %{display_count} e-bost + two: Anfon %{display_count} e-bost + zero: Anfon %{display_count} e-bost + title: Darllenwcy yr hysbysiad telerau gwasanaeth + publish: Cyhoeddi + published_on_html: Cyhoeddwyd ar %{date} + save_draft: Cadw drafft + title: Telerau Gwasanaeth title: Gweinyddiaeth trends: allow: Caniatáu @@ -1204,7 +1239,6 @@ cy: migrate_account: Symud i gyfrif gwahanol migrate_account_html: Os hoffech chi ailgyfeirio'r cyfrif hwn at un gwahanol, mae modd ei ffurfweddu yma. or_log_in_with: Neu mewngofnodwch gyda - privacy_policy_agreement_html: Rwyf wedi darllen ac yn cytuno i'r polisi preifatrwydd progress: confirm: Cadarnhau'r e-bost details: Eich manylion @@ -1229,7 +1263,7 @@ cy: set_new_password: Gosod cyfrinair newydd setup: email_below_hint_html: Gwiriwch eich ffolder sbam, neu gofynnwch am un arall. Gallwch gywiro eich cyfeiriad e-bost os yw'n anghywir. - email_settings_hint_html: Cliciwch ar y ddolen a anfonwyd atoch i wirio %{email}. Byddwn yn aros yma amdanoch. + email_settings_hint_html: Cliciwch y ddolen anfonwyd at %{email} i ddechrau defnyddio Mastodon. Byddwn yn aros yn fan hyn. link_not_received: Heb gael dolen? new_confirmation_instructions_sent: Byddwch yn derbyn e-bost newydd gyda'r ddolen gadarnhau ymhen ychydig funudau! title: Gwiriwch eich blwch derbyn @@ -1238,7 +1272,7 @@ cy: title: Mewngofnodi i %{domain} sign_up: manual_review: Mae cofrestriadau ar %{domain} yn cael eu hadolygu â llaw gan ein cymedrolwyr. Er mwyn ein helpu i brosesu eich cofrestriad, ysgrifennwch ychydig amdanoch chi'ch hun a pham rydych chi eisiau cyfrif ar %{domain}. - preamble: Gyda chyfrif ar y gweinydd Mastodon hwn, byddwch yn gallu dilyn unrhyw berson arall ar y rhwydwaith, lle bynnag mae eu cyfrif yn cael ei gynnal. + preamble: Gyda chyfrif ar y gweinydd Mastodon hwn, byddwch chi'n gallu dilyn unrhyw berson arall ar y ffedysawd, waeth ble mae eu cyfrif yn cael ei gynnal. title: Gadewch i ni eich gosod ar %{domain}. status: account_status: Statws cyfrif @@ -1250,6 +1284,7 @@ cy: view_strikes: Gweld rybuddion y gorffennol yn erbyn eich cyfrif too_fast: Cafodd y ffurflen ei chyflwyno'n rhy gyflym, ceisiwch eto. use_security_key: Defnyddiwch allwedd diogelwch + user_agreement_html: Rwyf wedi darllen ac yn cytuno i delerau gwasanaeth a'r polisi preifatrwydd author_attribution: example_title: Testun enghreifftiol hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon. @@ -1828,6 +1863,7 @@ cy: scheduled_statuses: over_daily_limit: Rydych wedi mynd dros y terfyn o %{limit} postiad a drefnwyd ar gyfer heddiw over_total_limit: Rydych wedi mynd dros y terfyn o %{limit} postiad a drefnwyd + too_soon: rhaid i'r dyddiad fod yn y dyfodol self_destruct: lead_html: Yn anffodus mae %{domain} yn cau'n barhaol. Os oedd gennych gyfrif yno, ni fydd modd i chi barhau i'w ddefnyddio, ond mae dal modd gofyn i gael copi wrth gefn o'ch data. title: Mae'r gweinydd hwn yn cau @@ -2006,6 +2042,8 @@ cy: too_late: Mae'n rhy hwyr i apelio yn erbyn y rhybudd hwn tags: does_not_match_previous_name: ddim yn cyfateb i'r enw blaenorol + terms_of_service: + title: Telerau Gwasanaeth themes: contrast: Mastodon (Cyferbyniad uchel) default: Mastodon (Tywyll) @@ -2066,6 +2104,15 @@ cy: further_actions_html: Os nad chi oedd hwn, rydym yn argymell eich bod yn %{action} ar unwaith ac yn galluogi dilysu dau ffactor i gadw'ch cyfrif yn ddiogel. subject: Mae eich cyfrif wedi'i gyrchu o gyfeiriad IP newydd title: Mewngofnodiad newydd + terms_of_service_changed: + agreement: Drwy barhau i ddefnyddio %{domain}, rydych yn cytuno i'r telerau hyn. Os ydych yn anghytuno â'r telerau a ddiweddarwyd, gallwch derfynu eich cytundeb â %{domain} ar unrhyw adeg drwy ddileu eich cyfrif. + changelog: 'Yn fyr, dyma beth mae''r diweddariad hwn yn ei olygu i chi:' + description: 'Rydych yn derbyn yr e-bost hwn oherwydd ein bod yn gwneud rhai newidiadau i''n telerau gwasanaeth yn %{domain}. Rydym yn eich annog i adolygu''r telerau diweddaraf yn llawn yma:' + description_html: Rydych yn derbyn yr e-bost hwn oherwydd ein bod yn gwneud rhai newidiadau i'n telerau gwasanaeth yn %{domain}. Rydym yn eich annog i adolygu'r telerau diweddaraf yn llawn yma . + sign_off: Tîm %{domain} + subject: Diweddariadau i'n telerau gwasanaeth + subtitle: Mae telerau gwasanaeth %{domain} yn newid + title: Diweddariad pwysig warning: appeal: Cyflwyno apêl appeal_description: Os credwch fod hwn yn gamgymeriad, gallwch gyflwyno apêl i staff %{instance}. diff --git a/config/locales/da.yml b/config/locales/da.yml index 916dc931f9..c571c09902 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -214,6 +214,7 @@ da: enable_user: Aktivér bruger memorialize_account: Memoralisér konto promote_user: Forfrem bruger + publish_terms_of_service: Offentliggør Tjenestevilkår reject_appeal: Afvis appel reject_user: Afvis bruger remove_avatar_user: Fjern profilbillede @@ -278,6 +279,7 @@ da: enable_user_html: "%{name} aktiverede indlogning for brugeren %{target}" memorialize_account_html: "%{name} gjorde %{target}s konto til en mindeside" promote_user_html: "%{name} forfremmede brugeren %{target}" + publish_terms_of_service_html: "%{name} offentliggjorde opdateringer til tjenestevilkårene" reject_appeal_html: "%{name} afviste moderationsafgørelsesappellen fra %{target}" reject_user_html: "%{name} afviste tilmelding fra %{target}" remove_avatar_user_html: "%{name} fjernede %{target}s profilbillede" @@ -925,6 +927,35 @@ da: search: Søg title: Hashtags updated_msg: Hashtag-indstillinger opdateret + terms_of_service: + back: Tilbage til Tjenestevilkår + changelog: Hvad der er ændret + create: Brug egne + current: Nuværende + draft: Udkast + generate: Brug skabelon + generates: + action: Generér + chance_to_review_html: "De genererede Tjenestevilkår offentliggøres ikke automatisk. Man vil have mulighed for at gennemgå resultaterne. Udfyld venligst de nødvendige oplysninger for at fortsætte." + explanation_html: Tjenestevilkår-skabelonen er alene til orientering og bør ikke fortolkes som juridisk rådgivning om noget emne. Kontakt en juridiske rådgiver vedr. den aktuelle situation samt specifikke juridiske spørgsmål, man måtte have. + title: Opsætning af Tjenestevilkår + history: Historik + live: Live + no_history: Der er endnu ingen registrerede ændringer af vilkårene for tjenesten. + no_terms_of_service_html: Der er p.t. ingen opsatte Tjenestevilkår. Tjenestevilkår er beregnet til at give klarhed, så man er beskyttet mod potentielle ansvarspådragelser i tvister med sine brugere. + notified_on_html: Brugere underrettet pr. %{date} + notify_users: Underrret brugere + preview: + explanation_html: 'E-mailen sendes til %{display_count} brugere, som har tilmeldt sig før %{date}. Følgende tekst medtages i e-mailen:' + send_preview: Send forhåndsvisning til %{email} + send_to_all: + one: Send %{display_count} e-mail + other: Send %{display_count} e-mails + title: Forhåndsvis Tjenestevilkår-underretning + publish: Udgiv + published_on_html: Udgivet pr. %{date} + save_draft: Gem udkast + title: Tjenestevilkår title: Administration trends: allow: Tillad @@ -1132,7 +1163,6 @@ da: migrate_account: Flyt til en anden konto migrate_account_html: Ønsker du at omdirigere denne konto til en anden, kan du opsætte dette hér. or_log_in_with: Eller log ind med - privacy_policy_agreement_html: Jeg accepterer privatlivspolitikken progress: confirm: Bekræft e-mail details: Dine detaljer @@ -1157,7 +1187,7 @@ da: set_new_password: Opsæt ny adgangskode setup: email_below_hint_html: Tjek Spam-mappen eller anmod om et nyt link. Om nødvendigt kan e-mailadressen rettes. - email_settings_hint_html: Tryk på det tilsendte link for at bekræfte %{email}. + email_settings_hint_html: Klik på det link, der er sendt til %{email} for at begynde at bruge Mastodon. link_not_received: Intet link modtaget? new_confirmation_instructions_sent: Du bør om få minutter modtage en ny e-mail med bekræftelseslinket! title: Tjek indbakken @@ -1166,7 +1196,7 @@ da: title: Log ind på %{domain} sign_up: manual_review: Tilmeldinger på %{domain} undergår manuel moderatorgennemgang. For at hjælpe med behandlingen af tilmeldingen, så skriv en smule om dig selv, samt hvorfor du ønsker en konto på %{domain}. - preamble: Med en konto på denne Mastodon-server vil man kunne følge enhver anden person på netværket, uanset hvor vedkommendes konto hostes. + preamble: Man vil med en konto på denne Mastodon-server kunne følge enhver anden bruger i fediverset, uanset hvor vedkommendes konto hostes. title: Lad os få dig sat op på %{domain}. status: account_status: Kontostatus @@ -1178,6 +1208,7 @@ da: view_strikes: Se tidligere anmeldelser af din konto too_fast: Formularen indsendt for hurtigt, forsøg igen. use_security_key: Brug sikkerhedsnøgle + user_agreement_html: Jeg accepterer Tjenestevilkår og Fortrolighedspolitik author_attribution: example_title: Eksempeltekst hint_html: Skriver du nyheder eller blogartikler uden for Mastodon? Styr, hvordan man bliver krediteret, når disse deles på Mastodon. @@ -1839,6 +1870,8 @@ da: too_late: Det er for sent at appellere denne advarsel tags: does_not_match_previous_name: matcher ikke det foregående navn + terms_of_service: + title: Tjenestevilkår themes: contrast: Mastodon (høj kontrast) default: Mastodont (mørkt) @@ -1899,6 +1932,15 @@ da: further_actions_html: Hvis dette ikke var dig, anbefaler vi, at du %{action} med det samme og aktiverer to-faktor godkendelse for at holde din konto sikker. subject: Din konto er blevet tilgået fra en ny IP-adresse title: Ny indlogning + terms_of_service_changed: + agreement: Ved at fortsætte med at bruge %{domain}, accepteres disse vilkår. Kan du ikke acceptere de opdaterede vilkår, kan din aftale med %{domain} til enhver tid opsiges ved at slette din konto. + changelog: 'Med ét blik er her, hvad denne opdatering rent praktisk betyder:' + description: 'Man modtager denne e-mail, fordi der foretages nogle ændringer i vores Tjenestevilkår på %{domain}. Man opfordres til at gennemgå de opdaterede vilkår fuldt ud her:' + description_html: Man modtager denne e-mail, fordi der foretages nogle ændringer i vores Tjenestevilkår på %{domain}. Man opfordres til at gennemgå de opdaterede vilkår fuldt ud her. + sign_off: "%{domain}-teamet" + subject: Opdatering af Tjenestevilkår + subtitle: Tjenestevilkår for %{domain} ændres + title: Vigtig opdatering warning: appeal: Indgiv appel appeal_description: Mener du, at dette er en fejl, kan der indgives en appel til %{instance}-personalet. diff --git a/config/locales/de.yml b/config/locales/de.yml index 76b3c1f765..d1d557432b 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -214,6 +214,7 @@ de: enable_user: Benutzer*in aktivieren memorialize_account: Gedenkkonto promote_user: Benutzer*in hochstufen + publish_terms_of_service: Nutzungsbedingungen veröffentlichen reject_appeal: Einspruch ablehnen reject_user: Benutzer*in ablehnen remove_avatar_user: Profilbild entfernen @@ -278,6 +279,7 @@ de: enable_user_html: "%{name} aktivierte den Zugang für %{target}" memorialize_account_html: "%{name} wandelte das Konto von %{target} in eine Gedenkseite um" promote_user_html: "%{name} beförderte %{target}" + publish_terms_of_service_html: "%{name} aktualisierte die Nutzungsbedingungen" reject_appeal_html: "%{name} hat den Einspruch gegen eine Moderationsentscheidung von %{target} abgelehnt" reject_user_html: "%{name} hat die Registrierung von %{target} abgelehnt" remove_avatar_user_html: "%{name} entfernte das Profilbild von %{target}" @@ -925,6 +927,35 @@ de: search: Suchen title: Hashtags updated_msg: Hashtag-Einstellungen erfolgreich aktualisiert + terms_of_service: + back: Zurück zu den Nutzungsbedingungen + changelog: Was sich geändert hat + create: Eigene erstellen + current: Aktuell + draft: Entwurf + generate: Vorlage verwenden + generates: + action: Erstellen + chance_to_review_html: "Die durch diese Vorlage erstellten Nutzungsbedingungen werden nicht automatisch veröffentlicht. Du wirst alles noch einmal überprüfen können. Bitte fülle alle Felder mit den notwendigen Informationen aus, um fortzufahren." + explanation_html: Die Vorlage für die Nutzungsbedingungen dient ausschließlich zu Informationszwecken und sollte nicht als Rechtsberatung zu einem bestimmten Thema verstanden werden. Bei rechtlichen Fragen, konsultiere bitte deinen Rechtsbeistand. + title: Nutzungsbedingungen festlegen + history: Verlauf + live: Aktuell gültig + no_history: Es wurden noch keine Änderungen an den Nutzungsbedingungen aufgezeichnet. + no_terms_of_service_html: Du hast derzeit keine Nutzungsbedingungen bereitgestellt. Nutzungsbedingungen verschaffen Klarheit und schützen vor möglicher Haftung bei Streitigkeiten mit deinen Nutzer*innen. + notified_on_html: Nutzer*innen wurden am %{date} benachrichtigt + notify_users: Nutzer*innen benachrichtigen + preview: + explanation_html: 'Diese E-Mail wird an %{display_count} Nutzer*innen gesendet, die sich vor dem %{date} registriert haben. Der nachfolgende Text wird in der E-Mail enthalten sein:' + send_preview: Vorschau an %{email} senden + send_to_all: + one: "%{display_count} E-Mail senden" + other: "%{display_count} E-Mails senden" + title: Vorschau zu den neuen Nutzungsbedingungen + publish: Veröffentlichen + published_on_html: Veröffentlicht am %{date} + save_draft: Entwurf speichern + title: Nutzungsbedingungen title: Administration trends: allow: Erlauben @@ -1132,7 +1163,6 @@ de: migrate_account: Zu einem anderen Konto umziehen migrate_account_html: Wenn du dieses Konto auf ein anderes weiterleiten möchtest, kannst du es hier konfigurieren. or_log_in_with: Oder anmelden mit - privacy_policy_agreement_html: Ich habe die Datenschutzerklärung gelesen und stimme ihr zu progress: confirm: E-Mail bestätigen details: Deine Daten @@ -1157,7 +1187,7 @@ de: set_new_password: Neues Passwort einrichten setup: email_below_hint_html: Überprüfe deinen Spam-Ordner oder lass dir den Bestätigungslink erneut zusenden. Falls die angegebene E-Mail-Adresse falsch ist, kannst du sie auch korrigieren. - email_settings_hint_html: Klicke auf den Bestätigungslink, den wir an %{email} gesendet haben, um die Adresse zu verifizieren. Wir warten hier solange auf dich. + email_settings_hint_html: Klicke auf den Link, den wir an %{email} gesendet haben, um mit Mastodon loszulegen. Wir warten hier solange auf dich. link_not_received: Keinen Bestätigungslink erhalten? new_confirmation_instructions_sent: In wenigen Minuten wirst du eine neue E-Mail mit dem Bestätigungslink erhalten! title: Überprüfe dein E-Mail-Postfach @@ -1166,7 +1196,7 @@ de: title: Bei %{domain} anmelden sign_up: manual_review: Registrierungen für den Server %{domain} werden manuell durch unsere Moderator*innen überprüft. Um uns dabei zu unterstützen, schreibe etwas über dich und sage uns, weshalb du ein Konto auf %{domain} anlegen möchtest. - preamble: Mit einem Konto auf diesem Mastodon-Server kannst du jeder anderen Person im Netzwerk folgen, unabhängig davon, wo ihr Konto registriert ist. + preamble: Mit einem Konto auf diesem Mastodon-Server kannst du jeder anderen Person im Fediverse folgen, unabhängig davon, wo ihr Konto registriert ist. title: Lass uns dein Konto auf %{domain} einrichten. status: account_status: Kontostatus @@ -1178,6 +1208,7 @@ de: view_strikes: Vorherige Verstöße deines Kontos ansehen too_fast: Formular zu schnell übermittelt. Bitte versuche es erneut. use_security_key: Sicherheitsschlüssel verwenden + user_agreement_html: Ich stimme den Nutzungsbedingungen sowie der Datenschutzerklärung zu author_attribution: example_title: Beispieltext hint_html: Schreibst du außerhalb von Mastodon journalistische Artikel oder andere Texte, beispielsweise in einem Blog? Lege hier fest, wann auf dein Profil verwiesen werden soll, wenn Links zu deinen Werken auf Mastodon geteilt werden. @@ -1839,6 +1870,8 @@ de: too_late: Es ist zu spät, um gegen diese Maßnahme Einspruch zu erheben tags: does_not_match_previous_name: entspricht nicht dem vorherigen Namen + terms_of_service: + title: Nutzungsbedingungen themes: contrast: Mastodon (Hoher Kontrast) default: Mastodon (Dunkel) @@ -1899,6 +1932,15 @@ de: further_actions_html: Wenn du das nicht warst, empfehlen wir dir schnellstmöglich, %{action} und die Zwei-Faktor-Authentisierung für dein Konto zu aktivieren, um es abzusichern. subject: Es wurde auf dein Konto von einer neuen IP-Adresse zugegriffen title: Eine neue Anmeldung + terms_of_service_changed: + agreement: Wenn du %{domain} weiterhin verwendest, stimmst du den neuen Nutzungsbedingungen automatisch zu. Falls du mit diesen nicht einverstanden bist, kannst du die Vereinbarung mit %{domain} jederzeit widerrufen, indem du dein Konto dort löschst. + changelog: 'Hier siehst du, was sich geändert hat:' + description: 'Du erhältst diese E-Mail, weil wir einige Änderungen an unseren Nutzungsbedingungen für %{domain} vorgenommen haben. Wir empfehlen, die vollständig aktualisierte Fassung hier zu lesen:' + description_html: Du erhältst diese E-Mail, weil wir einige Änderungen an unseren Nutzungsbedingungen für %{domain} vorgenommen haben. Wir empfehlen, die vollständig aktualisierte Fassung hier zu lesen. + sign_off: Das Team von %{domain} + subject: Aktualisierungen unserer Nutzungsbedingungen + subtitle: Die Nutzungsbedingungen von %{domain} ändern sich + title: Wichtige Mitteilung warning: appeal: Einspruch erheben appeal_description: Wenn du glaubst, dass es sich um einen Fehler handelt, kannst du einen Einspruch an die Administration von %{instance} senden. diff --git a/config/locales/devise.an.yml b/config/locales/devise.an.yml index 4be18845cc..2d971d706a 100644 --- a/config/locales/devise.an.yml +++ b/config/locales/devise.an.yml @@ -84,11 +84,6 @@ an: updated_not_active: La tuya clau s'ha cambiau con exito. registrations: destroyed: Dica unatra! La tuya cuenta ha estau cancelada con exito. Asperamos veyer-te de nuevo luego. - signed_up: Bienveniu! T'has rechistrau correctament. - signed_up_but_inactive: T'has rechistrau con exito. Manimenos, no s'ha puesto iniciar sesión perque la tuya cuenta encara no ye activada. - signed_up_but_locked: T'has rechistrau con exito. Manimenos, no s'ha puesto iniciar sesión perque la tuya cuenta ye blocada. - signed_up_but_pending: Un mensache con un vinclo de confirmación ha estau ninviau a la tuya adreza de correu electronico. Dimpués de fer clic en o vinclo, revisaremos la tuya solicitut. Serás notificau si s'apreba. - signed_up_but_unconfirmed: Un mensache con un vinclo de confirmación ha estau ninviau a la tuya adreza de correu electronico. Per favor, sigue lo vinclo pa activar la tuya cuenta. Per favor, compreba la tuya carpeta de correu no deseyau si no recibes dito correu electronico. update_needs_confirmation: Has actualizau la tuya cuenta con exito, pero amenestemos verificar la tuya nueva adreza de correu electronico. Per favor, compreba lo tuyo correu electronico y sigue lo vinclo de confirmación pa confirmar la tuya nueva adreza de correu electronico. Per favor, compreba la tuya carpeta de correu no deseyau si no recibes dito correu electronico. updated: La tuya cuenta s'ha actualizau con exito. sessions: diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml index e8b6ff7d93..7b3f6462aa 100644 --- a/config/locales/devise.ar.yml +++ b/config/locales/devise.ar.yml @@ -94,11 +94,6 @@ ar: updated_not_active: تم تغيير كلمة المرور بنجاح. registrations: destroyed: إلى اللقاء! لقد تم إلغاء حسابك. نتمنى أن نراك مجددا. - signed_up: أهلا وسهلا! تم تسجيل دخولك بنجاح. - signed_up_but_inactive: لقد تمت عملية إنشاء حسابك بنجاح إلاّ أنه لا يمكننا تسجيل دخولك إلاّ بعد قيامك بتفعيله. - signed_up_but_locked: لقد تم تسجيل حسابك بنجاح إلّا أنه لا يمكنك تسجيل الدخول لأن حسابك مجمد. - signed_up_but_pending: لقد تم إرسال رسالة تحتوي على رابط للتفعيل إلى عنوان بريدك الإلكتروني. بالضغط على الرابط سوف نقوم بمراجعة طلبك. سنقوم بإشعارك إن حظيت بالموافقة. - signed_up_but_unconfirmed: لقد تم إرسال رسالة تحتوي على رابط للتفعيل إلى عنوان بريدك الإلكتروني. بالضغط على الرابط سوف يتم تفعيل حسابك. لذا يُرجى إلقاء نظرة على ملف الرسائل غير المرغوب فيها إنْ لم تَعثُر على الرسالة السالفة الذِكر. update_needs_confirmation: لقد قمت بتحديث حسابك بنجاح إلا أنه يجب علينا التأكد من صحة عنوان بريدك الإلكتروني الجديد. يرجى الإطلاع على بريدك و اتباع الرابط الذي تلقيتَه لتأكيد عنوان بريدك الإلكتروني الجديد. إن لم تتلقى تلك الرسالة ، ندعوك إلى تفقُّد مجلد البريد المزعج. updated: تم تحديث حسابك بنجاح. sessions: diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml index c353607043..8c2f2f8e73 100644 --- a/config/locales/devise.ast.yml +++ b/config/locales/devise.ast.yml @@ -72,11 +72,6 @@ ast: updated_not_active: La contraseña camudó correutamente. registrations: destroyed: "¡Ta llueu! La cuenta anulóse correutamente. Esperamos volver vete pronto." - signed_up: "¡Afáyate! Rexistréstite correutamente." - signed_up_but_inactive: Rexistréstite correutamente. Por embargu, nun se pudo aniciar la sesión porque la cuenta entá nun s'activó. - signed_up_but_locked: Rexistréstite correutamente. Por embargu, nun se pudo aniciar la sesión porque la cuenta ta bloquiada. - signed_up_but_pending: Unvióse un mensaxe a la direición de corréu electrónicu que contién un enllaz de confirmación. Darréu de calcar nel enllaz, vamos revisar la solicitú y si s'aprueba, avisámoste. - signed_up_but_unconfirmed: Unvióse un mensaxe de confirmación a la to direición de corréu electrónicu. Sigui l'enllaz p'activar la cuenta y revisa la carpeta Puxarra si nun recibiesti esti mensaxe. update_needs_confirmation: Anovesti la cuenta correutamente, mas tenemos de verificar la direición de corréu electrónicu nueva. Revisa'l to corréu electrónicu y sigui l'enllaz de confirmación pa confirmar esta direición. Si nun recibiesti'l mensaxe, revisa la carpeta Puxarra. updated: La cuenta anovóse correutamente. sessions: diff --git a/config/locales/devise.az.yml b/config/locales/devise.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/devise.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/devise.be.yml b/config/locales/devise.be.yml index 81f3120a88..5f03bf06b8 100644 --- a/config/locales/devise.be.yml +++ b/config/locales/devise.be.yml @@ -94,11 +94,6 @@ be: updated_not_active: Ваш пароль быў паспяхова зменены. registrations: destroyed: Пакуль! Ваш уліковы запіс быў паспяхова выдалены. Мы спадзяваемся хутка ўбачыць вас зноў. - signed_up: Вітаем! Вы былі паспяхова зарэгістраваны. - signed_up_but_inactive: Вы паспяхова зарэгістраваліся. Аднак, мы не змаглі вас аўтарызаваць, таму што ваш уліковы запіс пакуль што не актывізаваны. - signed_up_but_locked: Вы паспяхова зарэгістраваліся. Аднак, мы не змаглі вас аўтарызаваць, таму што ваш уліковы запіс заблакаваны. - signed_up_but_pending: Ліст са спасылкай для пацверджання быў высланы на вашу электронную пошту. Пасля таго, як вы націсніце на спасылку, мы разгледзім вашу заяўку. Калі яна будзе ўхвалена, вы будзеце праінфармаваны. - signed_up_but_unconfirmed: Ліст са спасылкай для пацверджання быў высланы на вашу электронную пошту. Калі ласка, перайдзіце па спасылцы для актывацыі вашага ўліковага запісу. Праверце вашу тэчку са спамам, калі вы не атрымалі такі ліст. update_needs_confirmation: Вы паспяхова абнавілі свой уліковы запіс, аднак, нам неабходна пацвердзіць ваш новы адрас электроннай пошты. Калі ласка, праверце вашу пошту і перайдзіце па спасылцы для пацверджання вашага новага адраса электроннай пошты. Праверце тэчку са спамам, калі вы не атрымалі такі ліст. updated: Ваш уліковы запіс быў паспяхова абноўлены. sessions: diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml index 116939762c..5cb41fa616 100644 --- a/config/locales/devise.bg.yml +++ b/config/locales/devise.bg.yml @@ -94,11 +94,6 @@ bg: updated_not_active: Паролата ви беше променена успешно. registrations: destroyed: Довиждане! Вашият акаунт беше успешно изтрит. Надяваме се скоро да ви видим пак. - signed_up: Добре дошли! Успешно се регистрирахте. - signed_up_but_inactive: Регистрирахте се успешно. Въпреки това, не може да влезете, тъй като акаунтът ви още не е задействан. - signed_up_but_locked: Регистрирахте се успешно. Въпреки това, не можете да влезете, тъй като акаунтът ви е заключен. - signed_up_but_pending: Изпратено е съобщение до адреса на имейла ви с връзка за потвърждение. След като щракнете върху линка, ние ще прегледаме заявлението ви. Ще бъдете уведомени при одобрение. - signed_up_but_unconfirmed: Е-писмо с връзка за потвърждение е изпратено до имейла ви. Последвайте връзката, за да задействате акаунта си. Проверете папката си за спам, ако не сте получили това е-писмо. update_needs_confirmation: Успешно осъвременихте акаунта си, но трябва да потвърдим новия ви адрес на имейл. Проверете имейла си и отворете връзката за потвърждаване на новия имейл адрес. Проверете папката си за спам, ако не сте получили това е-писмо. updated: Акаунтът ви е успешно осъвременен. sessions: diff --git a/config/locales/devise.bn.yml b/config/locales/devise.bn.yml index b046289039..897254ce2e 100644 --- a/config/locales/devise.bn.yml +++ b/config/locales/devise.bn.yml @@ -69,11 +69,6 @@ bn: updated_not_active: আপনার পাসওয়ার্ড সফলভাবে পরিবর্তন করা হয়েছে। registrations: destroyed: টাটা! আপনার অ্যাকাউন্ট সফলভাবে বাতিল করা হয়েছে। আশা করি শীঘ্রই আবার দেখা হবে তোমার সাথে। - signed_up: স্বাগতম! আপনার নিবন্ধনটি সঠিকভাবে হয়েছে। - signed_up_but_inactive: আপনি সফলভাবে সাইন আপ করেছেন। তবে আপনার অ্যাকাউন্টটি এখনও সক্রিয় না হওয়ার কারণে আমরা আপনাকে সাইন ইন করতে পারি নি। - signed_up_but_locked: আপনি সফলভাবে সাইন আপ করেছেন। তবে আপনার অ্যাকাউন্টটি লক থাকায় আমরা আপনাকে সাইন ইন করতে পারিনি। - signed_up_but_pending: আপনার ইমেল ঠিকানায় একটি নিশ্চিতকরণ লিঙ্ক সহ একটি বার্তা প্রেরণ করা হয়েছে। আপনি লিঙ্কটি ক্লিক করার পরে, আমরা আপনার আবেদন পর্যালোচনা করব। এটি অনুমোদিত হলে আপনাকে অবহিত করা হবে। - signed_up_but_unconfirmed: আপনার ইমেল ঠিকানায় একটি নিশ্চিতকরণ লিঙ্ক সহ একটি বার্তা প্রেরণ করা হয়েছে। আপনার অ্যাকাউন্টটি সক্রিয় করতে লিংকটি অনুসরণ করুন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। update_needs_confirmation: আপনি আপনার অ্যাকাউন্টটি সফলভাবে আপডেট করেছেন, তবে আমাদের আপনার নতুন ইমেল ঠিকানা যাচাই করা দরকার। আপনার নতুন ইমেল ঠিকানাটি নিশ্চিত করতে দয়া করে আপনার ইমেলটি দেখুন এবং নিশ্চিত লিঙ্কটি অনুসরণ করুন। আপনি এই ইমেলটি না পেয়ে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। updated: আপনার অ্যাকাউন্ট সফলভাবে আপডেট করা হয়েছে। sessions: diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml index cb406e5f5e..a936bcc05f 100644 --- a/config/locales/devise.br.yml +++ b/config/locales/devise.br.yml @@ -84,11 +84,6 @@ br: updated_not_active: Kemmet eo bet ho ker-tremen ent reizh. registrations: destroyed: Kenavo! Ho kont a zo bet nullet gant berzh. Emichañs e viot adwelet tuchant. - signed_up: Donemat ! Enskrivet oc'h. - signed_up_but_inactive: Enskrivet oc'h bet gant berzh. N'omp ket evit anavezadenniñ ac'hanoc'h alatao, rak ho kont n'eo ket aotreet c'hoazh. - signed_up_but_locked: Enskrivet oc'h bet gant berzh. N'omp ket evit anavezadenniñ ac'hanoc'h alatao, rak ho kont a zo prennet. - signed_up_but_pending: Ur c'hemennad gant ul lec'hienn kadarnaat a zo bet kaset d'ho chomlec'h-postel. Pa vo kliket al lec'hienn ganeoc'h e vo gwiriet hoc'h arload ganeomp. Ur gemennadenn a vo kaset deoc'h hag-eñ eo erbedet ho kont. - signed_up_but_unconfirmed: Ur ch'emennad gant ul lec'hienn kadarnaat a zo bet kaset d'ho chomlec'h-postel. Mar plij, heuliit al lec'hienn evit gweredekaat ho kont. Gwiriit ho restr strobel ma ne oa ket resevet ar postel-mañ ganeoc'h. update_needs_confirmation: Ho kont a zo bet hizivaet da benn, met ret eo deomp gwiriañ ho chomlec'h-postel nevez. Mar plij, gwiriit ho postelioù ha heuliit al lec'hienn evit kadarnaat ho chomlec'h-postel nevez. Gwiriit ho restr strobel ma ne oa ket resevet ar postel-mañ ganeoc'h. updated: Ho kont a zo bet hizivaet da benn. sessions: diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index 9b4ccccff7..f228843863 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -96,11 +96,6 @@ ca: updated_not_active: La contrasenya s'ha canviat correctament. registrations: destroyed: Adéu! el compte s'ha cancel·lat amb èxit. Desitgem veure't de nou ben aviat. - signed_up: Benvingut! T'has registrat. - signed_up_but_inactive: T'has registrat. Tanmateix, no podem iniciar la teva sessió perquè el compte encara no s'ha activat. - signed_up_but_locked: T'has registrat. Tanmateix, no podem iniciar la sessió perquè el compte està blocat. - signed_up_but_pending: S'ha enviat un missatge amb un enllaç de confirmació a la teva adreça de correu electrònic. Després que hagis fet clic a l'enllaç, revisarem la sol·licitud. Se't notificarà si s'aprova. - signed_up_but_unconfirmed: S'ha enviat per correu electrònic un missatge amb un enllaç de confirmació. Fes clic a l'enllaç per a activar el compte. Si us plau, verifica la teva carpeta de correu brossa si no el reps. update_needs_confirmation: Has actualitzat el teu compte amb èxit, però necessitem verificar la teva nova adreça de correu. Si us plau comprova el correu i segueixi l'enllaç per confirmar la nova adreça de correu. Si us plau verifica la teva carpeta de correu brossa si no reps aquest correu. updated: El teu compte ha estat actualitzat amb èxit. sessions: diff --git a/config/locales/devise.ckb.yml b/config/locales/devise.ckb.yml index f33959d76c..9a13e6cafa 100644 --- a/config/locales/devise.ckb.yml +++ b/config/locales/devise.ckb.yml @@ -84,11 +84,6 @@ ckb: updated_not_active: تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدرا. registrations: destroyed: خوات لەگەڵ! ئەژمێرەکەت بە سەرکەوتوویی هەڵوەشێنرایەوە. هیوادارین بەزوویی بتبینینەوە. - signed_up: بەخێربێیت! تۆ بە سەرکەوتوویی تۆمار کرای. - signed_up_but_inactive: تۆ بە سەرکەوتوویی تۆمارکرای. هەرچۆنێک بێت، نەمانتوانی چوونە ژوورەوەت بۆ بکەین لەبەرئەوەی هێشتا هەژمارەکەت کارا نەکراوە. - signed_up_but_locked: تۆ بە سەرکەوتوویی تۆمارکرای. هەرچۆنێک بێت، نەمانتوانی چوونە ژوورەوەت بۆ بکەین لەبەرئەوەی هێشتا هەژمارەکەت قوفڵ کراوە. - signed_up_but_pending: نامەیەک بە لینکی دووپاتکردنەوە نێردراوە بۆ ناونیشانی ئیمەیڵەکەت. دوای ئەوەی تۆ کرتە لەسەر لینکەکە دەکەیت، ئێمە پێداچوونەوە دەکەین بە بەرنامەکەتدا. ئاگادار دەکرێیت ئەگەر پەسەند کرا. - signed_up_but_unconfirmed: نامەیەک بە لینکی دووپاتکردنەوە نێردراوە بۆ ناونیشانی ئیمەیڵەکەت. تکایە دوای لینکەکە بکەوە بۆ کاراکردنی هەژمارەکەت. تکایە بوخچەی سپامەکەت بکەرەوە ئەگەر ئەم ئیمەیڵەت پێنەدرا. update_needs_confirmation: تۆ ئەژمێرەکەت بە سەرکەوتوویی نوێکردەوە، بەڵام پێویستە ئیمەیڵە نوێکەت بسەلمێنین. تکایە ئیمەیڵەکەت بپشکنە و دوای بەستەری دڵنیابوونەوە بکەوە بۆ دڵنیابوون لە ناونیشانی ئیمەیڵە نوێکەت. تکایە بوخچەی سپامەکەت بکەرەوە ئەگەر ئەم ئیمەیڵەت پێنەدرا. updated: هەژمارەکەت بە سەرکەوتوویی نوێکرایەوە. sessions: diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml index d661637875..daaed95f6d 100644 --- a/config/locales/devise.co.yml +++ b/config/locales/devise.co.yml @@ -84,11 +84,6 @@ co: updated_not_active: A vostra chjave d’accessu hè stata cambiata. registrations: destroyed: Avvedeci! U vostru contu hè statu sguassatu. Speremu di vi rivede da prestu. - signed_up: Benvinutu! Site cunnettatu·a. - signed_up_but_inactive: Site arregistratu·a, mà ùn pudete micca cunnettavi perchè u vostru contu deve esse attivatu. - signed_up_but_locked: Site arregistratu·a, mà ùn pudete micca cunnettavi perchè u vostru contu hè chjosu. - signed_up_but_pending: Un missaghju cù un ligame di cunfirmazione hè statu mandatu à u vostr'indirizzu e-mail. Dop'à avè cliccatu u ligame, avemu da rivede a vostra dumanda - sarete nutificatu·a s'ella hè appruvata. - signed_up_but_unconfirmed: Un missaghju cù un ligame di cunfirmazione hè statu mandatu à u vostru indirizzu e-mail. Aprite stu ligame pè attivà u vostru contu. Pensate à verificà u cartulare di spam s’ellu ùn c’hè nunda. update_needs_confirmation: U vostru contu hè statu messu à ghjornu mà duvemu verificà u vostru novu e-mail. Un missaghju cù un ligame di cunfirmazione hè statu mandatu. Pensate à verificà u cartulare di spam s’ellu ùn c’hè nunda. updated: U vostru contu hè statu messu à ghjornu. sessions: diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index 4dbc2e08bf..42ecc1d53e 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -94,11 +94,6 @@ cs: updated_not_active: Vaše heslo bylo úspěšně změněno. registrations: destroyed: Sbohem! Váš účet byl úspěšně zrušen. Doufáme, že vás opět brzy uvidíme. - signed_up: Vítejte! Vaše registrace proběhla úspěšně. - signed_up_but_inactive: Vaše registrace proběhla úspěšně. Nemohli jsme vás však přihlásit, protože váš účet ještě není aktivován. - signed_up_but_locked: Vaše registrace proběhla úspěšně. Nemohli jsme vás však přihlásit, protože váš účet je uzamčen. - signed_up_but_pending: Na vaši e-mailovou adresu byla poslána zpráva s odkazem pro potvrzení. Poté, co na odkaz kliknete, vaši žádost posoudíme. Pokud bude schválena, budeme vás informovat. - signed_up_but_unconfirmed: Na vaši e-mailovou adresu byla poslána zpráva s odkazem pro potvrzení. Pro aktivaci vašeho účtu prosím klepněte na v něm uvedený odkaz. Pokud tento e-mail neobdržíte, podívejte se prosím také do složky „spam“. update_needs_confirmation: Váš účet byl úspěšně aktualizován, ale je potřeba ověřit vaši novou e-mailovou adresu. Pokud tento e-mail neobdržíte, podívejte se prosím také do složky „spam“. updated: Váš účet byl úspěšně aktualizován. sessions: diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml index b41e12f85d..da383f70ae 100644 --- a/config/locales/devise.cy.yml +++ b/config/locales/devise.cy.yml @@ -94,11 +94,6 @@ cy: updated_not_active: Mae eich cyfrinair wedi ei newid yn llwyddiannus. registrations: destroyed: Hwyl fawr! Mae eich cyfrif wedi ei chanslo'n llwyddiannus. Gobeithiwn eich gweld chi eto'n fuan. - signed_up: Croeso! Rydych wedi cofrestru'n llwyddiannus. - signed_up_but_inactive: Yr ydych wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allwn eich mewngofnodi achos nid yw eich cyfrif wedi ei hagor eto. - signed_up_but_locked: Rydych chi wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allem eich mewngofnodi oherwydd bod eich cyfrif wedi'i gloi. - signed_up_but_pending: Mae neges gyda dolen cadarnhau wedi'i hanfon i'ch cyfeiriad e-bost. Ar ôl i chi glicio ar y ddolen, byddwn yn adolygu eich cais. Byddwch yn cael gwybod os caiff ei gymeradwyo. - signed_up_but_unconfirmed: Mae neges gyda dolen cadarnhau wedi ei anfon i'ch cyfeiriad e-bost. Dilynwch y ddolen er mwyn agor eich cyfrif. Edrychwch yn eich ffolder sbam os na dderbynioch chi'r e-bost hwn, os gwelwch yn dda. update_needs_confirmation: Rydych wedi diweddaru eich cyfrif yn llwyddiannus, ond mae angen i ni wirio'ch cyfeiriad e-bost newydd. Edrychwch ar eich e-byst a dilynwch y ddolen gadarnhau er mwyn cadarnhau eich cyfeiriad e-bost newydd. Edrychwch ar eich ffolder sbam os na dderbynioch chi yr e-bost hwn. updated: Mae eich cyfrif wedi ei ddiweddaru yn llwyddiannus. sessions: diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml index c472242ba7..d32cbbfd64 100644 --- a/config/locales/devise.da.yml +++ b/config/locales/devise.da.yml @@ -94,11 +94,6 @@ da: updated_not_active: Din adgangskode er skiftet. registrations: destroyed: Farvel! Din konto er nu annulleret. Vi håber snart at se dig igen. - signed_up: Velkommen! Du er nu tilmeldt. - signed_up_but_inactive: Du har nu oprettet dig. Da din konto endnu ikke er aktiveret, kan du dog ikke logge ind med det samme. - signed_up_but_locked: Du har nu oprettet dig. Da din konto er låst, kan du ikke logge ind med det samme. - signed_up_but_pending: Et bekræftelseslink er e-mailet til dig. Når du har klikket på linket, gennemgår vi din ansøgning, og du får besked, hvis den godkendes. - signed_up_but_unconfirmed: Et bekræftelseslink er e-mailet til dig. Følg linket for at aktivere din konto. Tjek spammappen, hvis e-mailen ikke dukker op i indbakken. update_needs_confirmation: Du har opdateret din konto. Din nye e-mailadresse skal nu bekræftes. Til dette formål er du blevet e-mailet et bekræftelseslink, så følg dette for at bekræfte den nye e-mailadresse. Ser du ikke e-mailen i din indbakke snarest, så tjek Spam-mappen. updated: Din konto er nu opdateret. sessions: diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index f22f834e61..706fdfbee1 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -94,11 +94,6 @@ de: updated_not_active: Dein Passwort wurde erfolgreich geändert. registrations: destroyed: Tschüss! Dein Konto wurde erfolgreich gelöscht. Wir hoffen, dich bald wiederzusehen. - signed_up: Herzlich willkommen! Du hast dich erfolgreich registriert. - signed_up_but_inactive: Du hast dich erfolgreich registriert. Allerdings ist dein Konto noch nicht aktiviert und du kannst dich daher noch nicht anmelden. - signed_up_but_locked: Du hast dich erfolgreich registriert. Allerdings ist dein Konto gesperrt und du kannst dich daher nicht anmelden. - signed_up_but_pending: Eine Nachricht mit einem Bestätigungslink wurde an deine E-Mail-Adresse gesendet. Nachdem du diesen Link angeklickt hast, werden wir deine Bewerbung überprüfen. Sobald sie genehmigt wurde, wirst du benachrichtigt. - signed_up_but_unconfirmed: Du hast dich erfolgreich registriert. Wir konnten dich noch nicht anmelden, da dein Konto noch nicht bestätigt ist. Du erhältst in Kürze eine E-Mail. Darin wird erklärt, wie du dein Konto freischalten kannst. update_needs_confirmation: Deine Daten wurden aktualisiert, aber du musst deine neue E-Mail-Adresse bestätigen. Du erhältst in wenigen Minuten eine E-Mail. Darin ist erklärt, wie du die Änderung deiner E-Mail-Adresse abschließen kannst. updated: Dein Konto wurde erfolgreich aktualisiert. sessions: diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml index 209dfe5bdf..3d3d4f87d9 100644 --- a/config/locales/devise.el.yml +++ b/config/locales/devise.el.yml @@ -94,11 +94,6 @@ el: updated_not_active: Το συνθηματικό σου άλλαξε. registrations: destroyed: Αντίο! Ο λογαριασμός σου ακυρώθηκε με επιτυχία. Ελπίζουμε να σε ξαναδούμε σύντομα. - signed_up: Καλώς ήρθες! Εγγράφηκες με επιτυχία. - signed_up_but_inactive: Εγγράφηκες με επιτυχία. Όμως δε μπορέσαμε να σε συνδέσουμε γιατί ο λογαριασμός σου δεν έχει ενεργοποιηθεί ακόμα. - signed_up_but_locked: Εγγράφηκες με επιτυχία. Όμως δε μπορέσαμε να σε συνδέσουμε γιατί ο λογαριασμός σου είναι κλειδωμένος. - signed_up_but_pending: Στάλθηκε στο email σου μήνυμα με ένα σύνδεσμο επιβεβαίωσης. Μόλις τον ακολουθήσεις θα ελέγξουμε την αίτηση σου. Θα ειδοποιήσεις εάν γίνει δεκτή. - signed_up_but_unconfirmed: Σου στείλαμε ένα μήνυμα με σύνδεσμο επιβεβαίωσης στη διεύθυνση email σου. Παρακαλούμε ακολούθησε το σύνδεσμο για να ενεργοποιήσεις το λογαριασμό σου. Παρακαλούμε έλεγξε το φάκελο με τα ανεπιθύμητα μηνύματα σου αν δεν το λάβεις. update_needs_confirmation: Ενημέρωσες το λογαριασμό σου με επιτυχία αλλά χρειαζόμαστε να επιβεβαιώσουμε τη νέα διεύθυνση email σου. Παρακαλούμε έλεγξε τα email σου και ακολούθησε το σύνδεσμο για να την επιβεβαιώσεις. Παρακαλούμε έλεγξε το φάκελο με τα ανεπιθύμητα μηνύματα σου αν δεν το λάβεις. updated: Ο λογαριασμός σου επιβεβαιώθηκε με επιτυχία. sessions: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index 3e8a534e1f..1127735ca0 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -94,11 +94,6 @@ en-GB: updated_not_active: Your password has been changed successfully. registrations: destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. - signed_up: Welcome! You have signed up successfully. - signed_up_but_inactive: You have signed up successfully. However, we could not log you in because your account is not yet activated. - signed_up_but_locked: You have signed up successfully. However, we could not log you in because your account is locked. - signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. - signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. updated: Your account has been updated successfully. sessions: diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml index 63a59229fe..dd7b0dcc92 100644 --- a/config/locales/devise.en.yml +++ b/config/locales/devise.en.yml @@ -95,11 +95,6 @@ en: registrations: destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. sign_up_failed_because_reach_limit: You cannot create account because reaching limit. - signed_up: Welcome! You have signed up successfully. - signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. - signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. - signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. - signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. updated: Your account has been updated successfully. sessions: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 754fa01550..063b8707e0 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -94,11 +94,6 @@ eo: updated_not_active: Via pasvorto estis sukcese ŝanĝita. registrations: destroyed: Ĝis! Via konto estis sukcese forigita. Ni esperas revidi vin baldaŭ. - signed_up: Bonvenon! Vi sukcese registriĝis. - signed_up_but_inactive: Vi sukcese registriĝis. Tamen, ni ne povis ensalutigi vin, ĉar via konto ankoraŭ ne estas konfirmita. - signed_up_but_locked: Vi sukcese registriĝis. Tamen, ni ne povis ensalutigi vin, ĉar via konto estas ŝlosita. - signed_up_but_pending: Mesaĝo kun konfirma ligilo estis sendita al via retpoŝta adreso. Post kiam vi alklakis la ligilon, ni revizios vian kandidatiĝon. Vi estos sciigita se ĝi estas aprobita. - signed_up_but_unconfirmed: Retmesaĝo kun konfirma ligilo estis sendita al via retadreso. Bonvolu sekvi la ligilon por aktivigi vian konton. Bonvolu kontroli vian spamujon, se vi ne ricevis ĉi tiun retmesaĝon. update_needs_confirmation: Vi sukcese ĝisdatigis vian konton, sed ni bezonas kontroli vian novan retadreson. Bonvolu kontroli viajn retmesaĝojn kaj sekvi la konfirman ligilon por konfirmi vian novan retadreson. Bonvolu kontroli vian spamujon, se vi ne ricevis ĉi tiun retmesaĝon. updated: Via konto estis sukcese ĝisdatigita. sessions: diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml index 6249294597..f71b8473ec 100644 --- a/config/locales/devise.es-AR.yml +++ b/config/locales/devise.es-AR.yml @@ -94,11 +94,6 @@ es-AR: updated_not_active: Se cambió exitosamente tu contraseña. registrations: destroyed: "¡Chauchas! Se canceló exitosamente tu cuenta. Esperamos verte pronto de nuevo." - signed_up: "¡Bienvenido! Te registraste exitosamente." - signed_up_but_inactive: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta todavía no está activada. - signed_up_but_locked: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta está bloqueada. - signed_up_but_pending: Se envió un correo electrónico a tu dirección de correo con un enlace de confirmación. Después que hagás clic en ese enlace, revisaremos tu pedido. Si sos aprobado, serás notificado. - signed_up_but_unconfirmed: Se envió un correo electrónico a tu dirección de correo con un enlace de confirmación. Por favor, seguí ese enlace para activar tu cuenta. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. update_needs_confirmation: Actualizaste tu cuenta exitosamente. Sin embargo, necesitamos verificar tu nueva dirección de correo electrónico. Por favor, revisá tu correo electrónico y seguí el enlace de confirmación. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. updated: Se actualizó exitosamente tu cuenta. sessions: diff --git a/config/locales/devise.es-MX.yml b/config/locales/devise.es-MX.yml index ac90412e85..2e8ddc2e40 100644 --- a/config/locales/devise.es-MX.yml +++ b/config/locales/devise.es-MX.yml @@ -94,11 +94,6 @@ es-MX: updated_not_active: Su contraseña ha sido cambiada con éxito. registrations: destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo." - signed_up: "¡Bienvenido! Se ha registrado con éxito." - signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía. - signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada. - signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada. - signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta. update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo. updated: su cuenta ha sido actualizada con éxito. sessions: diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml index 0fc329e0b6..ddfc1ba678 100644 --- a/config/locales/devise.es.yml +++ b/config/locales/devise.es.yml @@ -94,11 +94,6 @@ es: updated_not_active: Tu contraseña se ha cambiado con éxito. registrations: destroyed: "¡Hasta otra! Tu cuenta ha sido cancelada con éxito. Esperamos verte de nuevo pronto." - signed_up: "¡Bienvenido! Te has registrado correctamente." - signed_up_but_inactive: Te has registrado con éxito. Sin embargo, no se ha podido iniciar sesión porque tu cuenta aún no está activada. - signed_up_but_locked: Te has registrado con éxito. Sin embargo, no se ha podido iniciar sesión porque tu cuenta está bloqueada. - signed_up_but_pending: Un mensaje con un enlace de confirmación ha sido enviado a tu dirección de correo electrónico. Después de hacer clic en el enlace, revisaremos tu solicitud. Serás notificado si se aprueba. - signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a tu dirección de correo electrónico. Por favor, sigue el enlace para activar tu cuenta. Por favor, comprueba tu carpeta de correo no deseado si no recibes dicho correo electrónico. update_needs_confirmation: Has actualizado tu cuenta con éxito, pero necesitamos verificar tu nueva dirección de correo electrónico. Por favor, comprueba tu correo electrónico y sigue el enlace de confirmación para confirmar tu nueva dirección de correo electrónico. Por favor, comprueba tu carpeta de correo no deseado si no recibes dicho correo electrónico. updated: Tu cuenta se ha actualizado con éxito. sessions: diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml index 76fbf619cc..f09ad35b39 100644 --- a/config/locales/devise.et.yml +++ b/config/locales/devise.et.yml @@ -94,11 +94,6 @@ et: updated_not_active: Sinu salasõna muutmine õnnestus. registrations: destroyed: Nägemist! Sinu konto sulgemine õnnestus. Me loodame sind varsti taas näha. - signed_up: Tere tulemast! Sinu konto loomine õnnestus. - signed_up_but_inactive: Sinu konto loodi edukalt, kuid me ei saanud sind sisse logida, kuna konto pole veel aktiveeritud. - signed_up_but_locked: Sinu konto loodi edukalt, kuid me ei saanud sind sisse logida, kuna konto on lukustatud. - signed_up_but_pending: Kiri kinnituslingiga saadeti sinu e-postile. Pärast seda, kui oled vajutanud kinnituslingile, vaatame me taotluse üle. Saad teavituse, kui taotlus on vastu võetud. - signed_up_but_unconfirmed: Kiri kinnituslingiga saadeti sinu e-postile. Palun järgi linki, et oma konto aktiveerida. Palun kontrolli rämpspostikausta, kui selline kiri ei saabunud. update_needs_confirmation: Konto uuendamine õnnestus, kuid e-postiaadress tuleb veel kinnitada. Palun kontrolli oma e-posti ning järgi kirjas olevat kinnituslinki, et e-postiaadress kinnitada. Palun kontrolli rämpspostikausta, kui selline kiri ei saabunud. updated: Konto uuendamine õnnestus. sessions: diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml index 3e675659fe..4b3bbea8c6 100644 --- a/config/locales/devise.eu.yml +++ b/config/locales/devise.eu.yml @@ -94,11 +94,6 @@ eu: updated_not_active: Zure pasahitza ongi aldatu da. registrations: destroyed: Agur! Zure kontua ongi ezeztatu da. Ea laster berriro ikusten garen. - signed_up: Ongi etorri! Ongi hasi duzu saioa. - signed_up_but_inactive: Ongi eman duzu izena. Hala ere, ezin duzu saioa hasi zure kontua oraindik ez dagoelako aktibatuta. - signed_up_but_locked: Ongi eman duzu izena. Hala ere, ezin duzu saioa hasi zure kontua giltzapetuta dagoelako. - signed_up_but_pending: Berrespen esteka bat duen mezu bat bidali dizugu zure eposta helbidera. Behin esteka sakatzen duzula, zure eskaera berrikusiko da. Onartzen bada, jakinarazpena jasoko duzu. - signed_up_but_unconfirmed: Baieztapen esteka bat duen eposta bat bidali dizugu. Jarraitu esteka zure kontua aktibatzeko. Begiratu zure spam karpetan ez baduzu mezua jaso. update_needs_confirmation: Zure kontua ongi eguneratu duzu, baina zure eposta helbide berria egiaztatu behar dugu. Berrespen esteka bat duen mezua bidali dizugu, sartu estekan zure eposta helbide berria berresteko. Begiratu zure spam karpetan ez baduzu mezua jaso. updated: Zure kontua ongi eguneratu da. sessions: diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index c441e346a2..20d7ec7503 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -94,11 +94,6 @@ fa: updated_not_active: گذرواژه شما با موفقیت تغییر کرد. registrations: destroyed: بدرود! حساب شما با موفقیت لغو شد. امیدواریم دوباره شما را ببینیم. - signed_up: خوش آمدید! شما با موفقیت ثبت نام کردید. - signed_up_but_inactive: خوش آمدید! با موفقیت ثبت نام کردید. ولی هنوز وارد نشده‌اید؛ چرا که حسابتان هنوز فعال نشده است. - signed_up_but_locked: با موفّقیت ثبت‌نام کرده‌اید. با این حال نمی‌توان واردتان کرد؛ چرا که حسابتان قفل است. - signed_up_but_pending: پیامی با پیوند تأیید به نشانی رایانامه‌تان فرستاده شده. پس از زدن پیوند درخواستتان را بازبینی خواهیم کرد. در صورت پذیرش آگاه خواهید شد. - signed_up_but_unconfirmed: پیامی با پیوند تأیید به نشانی رایانامه‌تان فرستاده شده. لطفاً برای فعّال کردن حسابتان پیوند را بزنید. اگر این رایانامه را نگرفته‌اید شاخهٔ هرزنامه‌ها را بررسی کنید. update_needs_confirmation: حسابتان را با موفّقیت به‌روز کردید؛‌ ولی باید نشانی رایانامهٔ جدیتان را تأیید کنیم. لطفاً رایانامه‌تان را بررسی کرده و برای تأیید نشانی رایانهٔ جدیدتان پیوند را بزنید. اگر این رایانامه را نگرفته‌اید شاخهٔ هرزنامه‌ها را بررسی کنید. updated: حسابتان با موفّقیت به‌روز شد. sessions: diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 61d58981d8..d230da1f54 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -94,11 +94,6 @@ fi: updated_not_active: Salasanan vaihto onnistui. registrations: destroyed: Tilisi on poistettu. Näkemiin ja tervetuloa uudelleen. - signed_up: Tervetuloa! Rekisteröityminen onnistui. - signed_up_but_inactive: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä käyttäjätiliäsi ei ole vielä aktivoitu. - signed_up_but_locked: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä käyttäjätilisi on lukittuna. - signed_up_but_pending: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Sen avattuasi tarkistamme hakemuksesi, ja ilmoitamme hyväksynnästä. - signed_up_but_unconfirmed: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Aktivoi käyttäjätilisi seuraamalla linkkiä. Jos sitä ei kuulu, tarkista roskapostikansiosi. update_needs_confirmation: Tilin päivitys onnistui. Uusi sähköpostiosoite on kuitenkin vahvistettava. Tarkista saapuneet viestisi, ja vahvista uusi sähköpostiosoitteesi vahvistuslinkkiä seuraten. Jos viestiä ei kuulu, tarkista myös roskapostikansiosi. updated: Käyttäjätilisi tietojen päivittäminen onnistui. sessions: diff --git a/config/locales/devise.fil.yml b/config/locales/devise.fil.yml index 4084bf2f90..cc88d26023 100644 --- a/config/locales/devise.fil.yml +++ b/config/locales/devise.fil.yml @@ -1 +1,105 @@ +--- fil: + devise: + confirmations: + confirmed: Matagumpay na nakumpirma ang email address mo. + send_instructions: Makakatanggap ka ng email na may instruksiyon kung paano kumpirmahin ang email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng email na may instruksiyon kung paano kumpirmahin ang email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + failure: + already_authenticated: Naka-sign in ka na. + inactive: Hindi pa naa-activate ang account mo. + invalid: Invalid na %{authentication_keys} o password. + last_attempt: May isa ka pang attempt bago ma-lock ang account mo. + locked: Na-lock ang account mo. + not_found_in_database: Invalid na %{authentication_keys} o password. + omniauth_user_creation_failure: May error sa paggawa ng account para sa identidad na ito. + pending: Nire-review pa ang account mo. + timeout: Natapos na ang sesyon mo. Mag-login ulit para magpatuloy. + unauthenticated: Kailangan mong mag-login o mag-sign up bago magpatuloy. + unconfirmed: Kailangan mong kumpirmahin ang email address mo bago ka magpatuloy. + mailer: + confirmation_instructions: + action: Beripikahin ang email address + action_with_app: Kumpirmahin at bumalik sa %{app} + explanation: Nakagawa ka ng account sa %{host} gamit ang email address na ito. Isang click na lang para ma-activate ito. Kung hindi ikaw ito, balewalain ang email na ito. + explanation_when_pending: Nag-apply ka para sa imbitasyon sa %{host} gamit ang email address na ito. Kapag nakumpirma mo ang email address mo, rerebyuhin namin ang aplikasyon mo. Maaari kang mag-login para baguhin ang mga detalye mo o tanggalin ang iyong account, pero hindi mo maaakses ang karamihan sa mga function hanggang hindi naaaprubahan ang account mo. Kung tinanggihan ang aplikasyon mo, aalisin ang data mo, kaya wala ka nang ibang kailangang gawing aksiyon. Kung hindi ikaw ito, balewalain ang email na ito. + extra_html: Paki-check din ang mga tuntunin ng server at ang aming mga tuntunin sa serbisyo. + subject: 'Mastodon: Instruksiyon sa kumpirmasyon para sa %{instance}' + title: Beripikahin ang email address + email_changed: + explanation: 'Ang email address para sa account mo ay binabago sa:' + extra: Kung hindi mo binago ang email mo, malamang ay may nagkaroon ng akses sa account mo. Pakipalitan agad ang password mo o kontakin ang server admin kung na-lock out ka sa account mo. + subject: 'Mastodon: Napalitan ang email' + title: Bagong email address + password_change: + explanation: Nabago na ang password ng account mo. + extra: Kung hindi mo binago ang email mo, malamang ay may nagkaroon ng akses sa account mo. Pakipalitan agad ang password mo o kontakin ang server admin kung na-lock out ka sa account mo. + subject: 'Mastodon: Napalitan ang password' + title: Napalitan ang password + reconfirmation_instructions: + explanation: Kumpirmahin ang bagong address para baguhin ang email mo. + extra: Kung hindi ikaw ang gumawa ng pagbabagong ito, balewalain ang email na ito. Hindi mapapalitan ang email address para sa account sa Mastodon hanggang hindi mo napupuntahan ang link sa itaas. + subject: 'Mastodon: Kumpirmahin ang email para sa %{instance}' + title: Beripikahin ang email address + reset_password_instructions: + action: Palitan ang password + explanation: Humiling ka ng bagong passwird para sa account mo. + extra: Kung hindi mo hiniling ito, balewalain ang email na ito. Hindi mababago ang password mo hanggang hindi mo napupuntahan ang link sa itaas at nakakagawa ng bago. + subject: 'Mastodon: Instruksiyon sa pag-reset ng password' + title: Ang pasword nay nareset + two_factor_disabled: + explanation: Puwede nang mag-login gamit lang ang email address at password. + subject: 'Mastodon: Naka-disable ang two-factor authentication' + subtitle: Naka-disable ang two-factor authentication para sa account mo. + title: Naka-disable ang 2FA + two_factor_enabled: + explanation: Kakailanganin ang token na na-generate ng paired TOTP app para maka-login. + subject: 'Mastodon: Naka-enable ang two-factor authentication' + subtitle: Naka-enable ang two-factor authentication para sa account mo. + title: Naka-enable ang 2FA + two_factor_recovery_codes_changed: + explanation: Na-invalidate ang naunang mga recovery code at nakagawa na ng bago. + subject: 'Mastodon: Nakagawa ulit ng mga two-factor reecover code' + subtitle: Na-invalidate ang naunang mga recovery code at nakagawa na ng bago. + title: Nabago ang 2FA recovery codes + unlock_instructions: + subject: 'Mastodon: Buksan ang instruksiyon' + webauthn_credential: + added: + explanation: Naidagdag na sa account mo ang sumusunod na security key + subject: 'Mastodon: Bagong security key' + title: May naidagdag nang bagong security key + deleted: + explanation: Natanggal na sa account mo ang sumusunod na security key + subject: 'Mastodon: Na-delete ang security key' + title: Na-delete ang isa sa mga security key mo + webauthn_disabled: + explanation: Naka-disable ang authentication sa mga security key para sa account mo. + extra: Puwede nang mag-login gamit lang ang token na na-gennerate ng paired TOTP app. + subject: 'Mastodon: Naka-disable ang authentication sa mga security key' + title: Naka-disable ang mga security key + webauthn_enabled: + explanation: Naka-enable ang two-factor authentication para sa account mo. + extra: Magagamit na ngayon ang security key para maka-login. + subject: 'Mastodon: Naka-enable ang security key authentication' + title: Naka-enable ang mga security key + omniauth_callbacks: + failure: Hindi ka ma-authenticate mula sa %{kind} dahil “%{reason}”. + success: Matagumpay na na-aurthenticate mula sa %{kind} account. + passwords: + no_token: Hindi mo maaakses ang page na ito nang hindi nangaggaling sa password reset na email. Kung nangggaling ka sa password reset na email, siguruhin mong ginamit mo ang binigay na URL. + send_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng password recovery link ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng password recovery link sa email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + updated: Matagumpay na napalitan ang password mo. Naka-sign in ka na. + updated_not_active: Matagumpay na napalitan ang password mo. + registrations: + destroyed: Paalam! Matagumpay na nakansela ang account mo. Sana ay magkita ulit tayo sa hinaharap. + update_needs_confirmation: Na-update mo na ang account mo, pero kailangan naming beripikahin ang bago mong email address. Pakitingnan ang email mo at sundan ang confirm link para makumpirma ang bagong email address mo. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. + updated: Matagumpay na na-update ang account mo. + sessions: + already_signed_out: Matagumpay na naka-sign out. + signed_in: Matagumpay na naka-sign in. + signed_out: Matagumpay na naka-sign out. + unlocks: + send_instructions: Makakatanggap ka ng email na may instruksiyon kung paano i-unlock ang account mo sa ilang minuto. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung may account ka, makakatanggap ka ng email na may instruksiyon kung paano ito i-unlock sa ilang minuto. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. diff --git a/config/locales/devise.fo.yml b/config/locales/devise.fo.yml index 30f83ba0da..f9783f30cc 100644 --- a/config/locales/devise.fo.yml +++ b/config/locales/devise.fo.yml @@ -94,11 +94,6 @@ fo: updated_not_active: Loyniorðið er broytt. registrations: destroyed: Farvæl! Konta tín er gjørd óvirkin. Vit vóna at síggja teg aftur skjótt. - signed_up: Vælkomin! Tú er nú tilmeldað/ur. - signed_up_but_inactive: Tú er tilmeldað/ur. Vit kunnu tó ikki rita teg inn, tí konta tín er ikki gjørd virkin enn. - signed_up_but_locked: Tú er tilmeldað/ur. Vit kunnu tó ikki rita teg inn, tí konta tín er læst. - signed_up_but_pending: Eini boð við einum váttanarleinki er send til teldupoststaðin hjá tær. Tá tú hevur klikt á leinkið, so fara vit at eftirkanna umsókn tína. Tú fær boð, um hon verður játtað. - signed_up_but_unconfirmed: Eini boð við einum váttanarleinki eru send til teldupoststaðin hjá tær. Vinarliga fylg leinkinum fyri at gera kontu tína virkna. Vinarliga eftirkanna mappuna við ruskposti, um tú ikki móttók teldupostin. update_needs_confirmation: Tað eydnaðist tær at dagføra kontuna, men tað er neyðugt at vátta nýggja teldupoststaðin hjá tær. Vinarliga kanna teldupostin hjá tær og fylg váttanarleinkinum at vátta nýggja teldupostin. Vinarliga kanna mappuna við ruskposti, um tú ikki móttók teldubrævið. updated: Tað eydnaðist at dagføra kontu tína. sessions: diff --git a/config/locales/devise.fr-CA.yml b/config/locales/devise.fr-CA.yml index 69ee177e33..fbe549743c 100644 --- a/config/locales/devise.fr-CA.yml +++ b/config/locales/devise.fr-CA.yml @@ -94,11 +94,6 @@ fr-CA: updated_not_active: Votre mot de passe a été modifié avec succès. registrations: destroyed: Au revoir! Votre compte a été supprimé avec succès. Nous espérons vous revoir bientôt. - signed_up: Bienvenue! Vous êtes connecté·e. - signed_up_but_inactive: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte n’est pas encore activé. - signed_up_but_locked: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé. - signed_up_but_pending: Un message avec un lien de confirmation a été envoyé à votre adresse courriel. Après avoir cliqué sur le lien, nous examinerons votre demande. Vous serez informé·e si elle a été approuvée. - signed_up_but_unconfirmed: Un message contenant un lien de confirmation a été envoyé à votre adresse courriel. Ouvrez ce lien pour activer votre compte. Veuillez vérifier votre dossier de pourriels si vous n'avez pas reçu le courriel. update_needs_confirmation: Votre compte a été mis à jour avec succès, mais nous devons vérifier votre nouvelle adresse courriel. Merci de vérifier vos courriels et de cliquer sur le lien de confirmation pour valider votre nouvelle adresse. Veuillez vérifier votre dossier de pourriels si vous ne recevez pas le courriel. updated: Votre compte a été modifié avec succès. sessions: diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 631a2eee6f..10c49b22e6 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -94,11 +94,6 @@ fr: updated_not_active: Votre mot de passe a été modifié avec succès. registrations: destroyed: Au revoir ! Votre compte a été supprimé avec succès. Nous espérons vous revoir bientôt. - signed_up: Bienvenue ! Vous êtes connecté. - signed_up_but_inactive: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte n’est pas encore activé. - signed_up_but_locked: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé. - signed_up_but_pending: Un message avec un lien de confirmation a été envoyé à votre adresse courriel. Après avoir cliqué sur le lien, nous examinerons votre demande. Vous serez informé·e si elle a été approuvée. - signed_up_but_unconfirmed: Un message contenant un lien de confirmation a été envoyé à votre adresse de courriel. Ouvrez ce lien pour activer votre compte. Veuillez vérifier votre dossier d'indésirables si vous ne recevez pas le courriel. update_needs_confirmation: Votre compte a bien été mis à jour, mais nous devons vérifier votre nouvelle adresse de courriel. Merci de vérifier vos courriels et de cliquer sur le lien de confirmation pour finaliser la validation de votre nouvelle adresse. Si vous n'avez pas reçu le courriel, vérifiez votre dossier d’indésirables. updated: Votre compte a été modifié avec succès. sessions: diff --git a/config/locales/devise.fy.yml b/config/locales/devise.fy.yml index c8a04a7405..318d9beff1 100644 --- a/config/locales/devise.fy.yml +++ b/config/locales/devise.fy.yml @@ -96,11 +96,6 @@ fy: updated_not_active: Jo wachtwurd is mei sukses wizige. registrations: destroyed: Jo account is mei sukses fuortsmiten. Miskien oant sjen. - signed_up: Jo binne registrearre. - signed_up_but_inactive: Jo binne registrearre. Jo koene allinnich net automatysk oanmeld wurde, omdat jo account noch net aktivearre is. - signed_up_but_locked: Jo binne registrearre. Jo koene allinnich net automatysk oanmeld wurde, omdat jo account beskoattele is. - signed_up_but_pending: Der is in berjocht mei in befêstigingskeppeling nei jo e-mailadres ferstjoerd. Neidat jo op dizze keppeling klikt hawwe nimme wy jo oanfraach yn behanneling. Jo wurde op de hichte steld wannear’t dizze goedkard wurdt. - signed_up_but_unconfirmed: Jo ûntfange fia in e-mailberjocht ynstruksjes hoe’t jo jo account aktivearje kinne. Sjoch tusken jo net-winske wannear’t neat ûntfongen waard. update_needs_confirmation: Jo hawwe jo e-mailadres mei sukses wizige, mar wy moatte jo nije e-mailadres noch befêstigje. Kontrolearje jo Postfek YN en klik op de keppeling yn it e-mailberjocht om jo e-mailadres te befêstigjen. Sjoch tusken jo net-winske wannear’t neat ûntfongen waard. updated: Jo accountgegevens binne bewarre. sessions: diff --git a/config/locales/devise.ga.yml b/config/locales/devise.ga.yml index ca51bb9467..5d03c2a8e6 100644 --- a/config/locales/devise.ga.yml +++ b/config/locales/devise.ga.yml @@ -94,11 +94,6 @@ ga: updated_not_active: Athraíodh do phasfhocal go rathúil. registrations: destroyed: Slán! Cealaíodh do chuntas go rathúil. Tá súil againn tú a fheiceáil arís go luath. - signed_up: Fáilte romhat! D'éirigh leat síniú suas. - signed_up_but_inactive: D'éirigh leat síniú suas. Mar sin féin, níorbh fhéidir linn tú a shíniú isteach toisc nach bhfuil do chuntas gníomhachtaithe fós. - signed_up_but_locked: D'éirigh leat síniú suas. Mar sin féin, níorbh fhéidir linn tú a shíniú isteach toisc go bhfuil do chuntas glasáilte. - signed_up_but_pending: Tá teachtaireacht le nasc deimhnithe seolta chuig do sheoladh ríomhphoist. Tar éis duit an nasc a chliceáil, déanfaimid athbhreithniú ar d’iarratas. Cuirfear in iúl duit má cheadaítear é. - signed_up_but_unconfirmed: Tá teachtaireacht le nasc deimhnithe seolta chuig do sheoladh ríomhphoist. Lean an nasc chun do chuntas a ghníomhachtú. Seiceáil d'fhillteán turscair mura bhfuair tú an ríomhphost seo. update_needs_confirmation: D'éirigh leat do chuntas a nuashonrú, ach caithfimid do sheoladh ríomhphoist nua a fhíorú. Seiceáil do ríomhphost agus lean an nasc dearbhaithe chun do sheoladh ríomhphoist nua a dhearbhú. Seiceáil d'fhillteán turscair mura bhfuair tú an ríomhphost seo. updated: D'éirigh le do chuntas a nuashonrú. sessions: diff --git a/config/locales/devise.gd.yml b/config/locales/devise.gd.yml index ca9dcc4969..d110bc799b 100644 --- a/config/locales/devise.gd.yml +++ b/config/locales/devise.gd.yml @@ -94,11 +94,6 @@ gd: updated_not_active: Chaidh am facal-faire agad atharrachadh. registrations: destroyed: Soraidh slàn leat! Chaidh crìoch a chur air a’ chunntas agad. Tha sinn an dòchas nach bi thu fada gun tilleadh. - signed_up: Fàilte ort! Tha thu air clàradh leinn. - signed_up_but_inactive: Tha thu air clàradh leinn. Gidheadh, chan urrainn dhuinn do clàradh a-steach air sgàth ’s nach deach an cunntas agad a ghnìomhachadh fhathast. - signed_up_but_locked: Tha thu air clàradh leinn. Gidheadh, chan urrainn dhuinn do clàradh a-steach air sgàth ’s gu bheil an cunntas agad glaiste. - signed_up_but_pending: Chaidh teachdaireachd le ceangal dearbhaidh a chur dhan t-seòladh puist-d agad. Nuair a bhios tu air briogadh air a’ cheangal, nì sinn lèirmheas air d’ iarrtas. Leigidh sinn fios dhut ma thèid aontachadh ris. - signed_up_but_unconfirmed: Chaidh teachdaireachd le ceangal dearbhaidh a chur dhan t-seòladh puist-d agad. Lean air a’ cheangal ud a ghnìomhachadh a’ chunntais agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo. update_needs_confirmation: Chaidh an cunntas agad ùrachadh ach feumaidh sinn an seòladh puist-d ùr agad a dhearbhadh. Thoir sùil air a’ phost-d agad agus lean air a’ cheangal dearbhaidh a dhearbhadh an t-seòlaidh puist-d ùir agad. Thoir sùil air pasgan an spama agad mura faigh thu am post-d seo. updated: Chaidh an cunntas agad ùrachadh. sessions: diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index 00b1824808..689d78f307 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -94,11 +94,6 @@ gl: updated_not_active: O teu contrasinal foi mudado de xeito correcto. registrations: destroyed: Adeus! A túa conta foi cancelada de xeito correcto. Agardamos verte de novo. - signed_up: Benvido! Rexistrácheste de xeito correcto. - signed_up_but_inactive: A túa conta foi rexistada. Porén aínda non está activada. - signed_up_but_locked: A túa conta foi rexistada. Porén está bloqueada. - signed_up_but_pending: Acabamos de enviar unha mensaxe ao teu email cunha ligazón de confirmación. Após premer na ligazón, revisaremos a túa solicitude. Recibirás unha notificación se a túa conta é aprobada. - signed_up_but_unconfirmed: Enviouse unha mensaxe cunha ligazón de confirmación ao teu email. Por favor, preme nesa ligazón para activar a túa conta. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. update_needs_confirmation: Actualizaches a túa conta de xeito correcto, pero precisamos verificar o teu novo enderezo de email. Por favor, revisa o teu email e segue a ligazón para confirmar o teu novo enderezo de email. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. updated: A túa conta foi actualizada de xeito correcto. sessions: diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml index 02e307ae1c..91eb75f9d1 100644 --- a/config/locales/devise.he.yml +++ b/config/locales/devise.he.yml @@ -94,11 +94,6 @@ he: updated_not_active: סיסמתך שונתה בהצלחה. registrations: destroyed: בייוש! חשבונך בוטל בהצלחה. אנחנו מקווים לראות אותך שוב בקרוב. - signed_up: ברוכים הבאים! נרשמת בהצלחה. - signed_up_but_inactive: נרשמת בהצלחה. למרות זאת לא הצליחה הכניסה לחשבון מאחר וחשבונך עוד לא הופעל. - signed_up_but_locked: נרשמת בהצלחה. למרות זאת לא הצליחה הכניסה לחשבון מאחר וחשבונך נעול. - signed_up_but_pending: מסר עם קישורית אישור נשלח לכתובת הדוא"ל שלך. אחרי לחיצה על הקישורית, נבחן את בקשתך. הודעה תמסר אם בקשתך תתקבל. - signed_up_but_unconfirmed: דוא"ל עם קישורית לאימות נשלך לכתובתך. נא לעקוב אחר הקישורית על מנת להפעיל את החשבון. יש לבדוק את תיבת הספאם ליתר בטחון אם ההודעה לא הגיעה תוך דקות ספורות. update_needs_confirmation: עדכת את חשבונך בהצלחה, אך יש צורך לאמת את כתובת הדוא"ל החדשה שלך. נא לבדוק בחשבון הדוא"ל לקבלת קישורית אימות על מנת לאמת את הכתובת החדשה. יש לבדוק את תיבת הספאם ליתר בטחון אם ההודעה לא הגיעה תוך דקות ספורות. updated: חשבונך עודכן בהצלחה. sessions: diff --git a/config/locales/devise.hr.yml b/config/locales/devise.hr.yml index 89db8922e4..b7ecbbb90b 100644 --- a/config/locales/devise.hr.yml +++ b/config/locales/devise.hr.yml @@ -71,10 +71,6 @@ hr: updated_not_active: Vaša lozinka uspješno je promijenjena. registrations: destroyed: Zbogom! Vaš je račun uspješno otkazan. Nadamo se da ćemo Vas uskoro ponovno vidjeti. - signed_up: Dobro došli! Uspješno ste se prijavili. - signed_up_but_inactive: Uspješno ste se registrirali. No, ne možemo Vas prijaviti jer Vaš račun još nije aktiviran. - signed_up_but_locked: Uspješno ste se registrirali. No, ne možemo Vas prijaviti jer je Vaš račun zaključan. - signed_up_but_unconfirmed: Poruka s poveznicom za potvrđivanje poslana je na Vašu adresu e-pošte. Molimo slijedite poveznicu za aktivaciju Vašeg računa. Molimo provjerite mapu neželjene pošte, ako niste primili ovu e-poštu. update_needs_confirmation: Vaš račun uspješno je ažuriran, ali moramo potvrditi Vašu novu adresu e-pošte. Molimo provjerite Vašu e-poštu i slijedite poveznicu za potvrđivanje Vaše nove adrese e-pošte. Molimo provjerite mapu neželjene pošte, ako niste primili ovu e-poštu. updated: Vaš je račun uspješno ažuriran. sessions: diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index d8958d5fb0..5ea81bef0d 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -94,11 +94,6 @@ hu: updated_not_active: A jelszavad sikeresen megváltoztatásra került. registrations: destroyed: Viszlát! A fiókodat sikeresen töröltük. Reméljük hamarosan viszontláthatunk. - signed_up: Üdvözlünk! Sikeresen regisztráltál. - signed_up_but_inactive: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókodat még nem aktiválták. - signed_up_but_locked: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókod le van zárva. - signed_up_but_pending: Egy megerősítési hivatkozással ellátott üzenetet kiküldtünk az e-mail címedre. Ha kattintasz a hivatkozásra, átnézzük a kérelmedet. Értesítünk, ha jóváhagytuk. - signed_up_but_unconfirmed: Egy megerősítési hivatkozással ellátott üzenetet kiküldtünk az e-mail címedre. Kérjük használd a hivatkozást a fiókod aktiválásához. Ellenőrizd a spam mappádat, ha nem kaptad meg ezt a levelet. update_needs_confirmation: Sikeresen frissítetted a fiókodat, de szükségünk van az e-mail címed megerősítésére. Kérlek ellenőrizd az e-mailedet és kövesd a levélben szereplő megerősítési linket az e-mail címed megerősítéséhez. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet. updated: A fiókod sikeresen frissítésre került. sessions: diff --git a/config/locales/devise.hy.yml b/config/locales/devise.hy.yml index ee23163f51..25b6641ce6 100644 --- a/config/locales/devise.hy.yml +++ b/config/locales/devise.hy.yml @@ -84,11 +84,6 @@ hy: updated_not_active: Գաղտնաբառդ փոփոխուեց յաջողութեամբ։ registrations: destroyed: Ցը՜․ Քո հաշիւը յաջողութեամբ չեղարկուեց։ Յոյս ունենք քեզ կրկին տեսնել։ - signed_up: Ողջո՜յն։ Բարեյաջող գրանցուեցիր։ - signed_up_but_inactive: Բարեյաջող գրանցուեցիր։ Սակայն, դեռ չես կարող մուտք գործել, քանի որ հաշիւդ դեռ ակտիւ չէ։ - signed_up_but_locked: Բարեյաջող գրանցուեցիր։ Սակայն, դեռ չես կարող մուտք գործել, քանի որ հաշիւդ փակ է։ - signed_up_but_pending: Հաղորդագրութիւնը՝ հաստատման յղումով ուղարկուել է քո էլ․ փոստին։ Յղմանը կտտացնելուց յետոյ մենք կը վերանայենք քո դիմումը։ Հաստատումից յետոյ քեզ կը տեղեկացնենք։ - signed_up_but_unconfirmed: Հաղորդագրութիւնը՝ հաստատման յղումով ուղարկուել է քո էլ․ փոստին։ Խնդրում ենք հետեւիր յղմանը հաշիւդ ակտիւացնելու համար։ Խնդրում ենք, ստուգիր սպամ պանակը, եթէ չստանաս իմակ։ update_needs_confirmation: Բարեյաջող թարմացրիր հաշիւդ, բայց մենք պէտք է հաստատենք քո էլ․ հասցէն։ Խնդրում ենք, ստուգիր փոստդ եւ հետեւիր հաստատման յղմանը՝ նոր էլ․ հասցէդ հաստատելու համար։ Ստուգիր սպամ պանակը, իմակ չստանալու դէպքում։ updated: Հաշիւդ բարեյաջող թարմացուեց։ sessions: diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml index 8e073c9efb..eb580dde5d 100644 --- a/config/locales/devise.ia.yml +++ b/config/locales/devise.ia.yml @@ -94,11 +94,6 @@ ia: updated_not_active: Tu contrasigno ha essite cambiate. registrations: destroyed: A revider! Tu conto ha essite cancellate. Nos spera vider te de novo tosto. - signed_up: Benvenite! Tu te ha inscribite con successo. - signed_up_but_inactive: Tu te ha inscribite con successo. Nonobstante, nos non poteva aperir tu session perque tu conto non es ancora activate. - signed_up_but_locked: Tu te ha inscribite con successo. Nonobstante, nos non poteva aperir tu session perque tu conto es serrate. - signed_up_but_pending: Un message con un ligamine de confirmation ha essite inviate a tu adresse de email. Post que tu clicca sur le ligamine, nos revidera tu demanda. Tu essera notificate si illo es approbate. - signed_up_but_unconfirmed: Un message con un ligamine de confirmation ha essite inviate a tu adresse de e-mail. Per favor seque le ligamine pro activar tu conto. Consulta tu dossier de spam si tu non recipe iste e-mail. update_needs_confirmation: Tu ha actualisate tu conto con successo, ma nos debe verificar tu nove adresse de e-mail. Accede a tu e-mail e seque le ligamine de confirmation pro confirmar tu nove adresse de e-mail. Consulta tu dossier de spam si tu non recipe iste e-mail. updated: Tu conto ha essite actualisate con successo. sessions: diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml index c0dede95aa..7f87dea880 100644 --- a/config/locales/devise.id.yml +++ b/config/locales/devise.id.yml @@ -84,11 +84,6 @@ id: updated_not_active: Kata sandi anda berhasil diubah. registrations: destroyed: Selamat tinggal! Akun anda berhasil dibatalkan. Kami harap berjumpa lagi dengan anda dilain waktu. - signed_up: Selamat datang! Pendaftaran anda berhasil. - signed_up_but_inactive: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda belum diaktifkan. - signed_up_but_locked: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda dikunci. - signed_up_but_pending: Pesan dengan tautan konfirmasi telah dikirim ke alamat email Anda. Setelah Anda mengklik tautan, kami akan meninjau lamaran Anda. Anda akan diberitahu jika diterima. - signed_up_but_unconfirmed: Sebuah pesan berisi link konfirmasi telah dikirim ke alamat email anda. Silakan ikuti link tersebut untuk mengaktifkan akun anda. update_needs_confirmation: Akun anda telah berhasil diubah, tetapi kami harus memverifikasi alamat email anda yang baru. Mohon cek email anda dan ikuti link untuk mengkonfirmasi alamat email anda yang baru. updated: Akun anda berhasil diubah. sessions: diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml index 9c82bd4529..116fd3b5e0 100644 --- a/config/locales/devise.ie.yml +++ b/config/locales/devise.ie.yml @@ -94,11 +94,6 @@ ie: updated_not_active: Tui passa-parol ha esset changeat successosimen. registrations: destroyed: Adío! Tui conto ha esset anullat con successe. Noi espera revider te pos ne long. - signed_up: Benevenit! Tu ha successat registrar te. - signed_up_but_inactive: Tu ha registrat te con successe, támen noi ne posset far te intrar pro que tui conto ancor ne ha esset activat. - signed_up_but_locked: Tu ha registrat te con successe, támen noi ne posset far te intrar pro que tui conto es serrat. - signed_up_but_pending: Un missage con un ligament de confirmation ha esset inviat a tui adresse electronic. Pos har cliccat sur li ligament, noi va inspecter tui aplication. Tu va reciver un notification si it es aprobat. - signed_up_but_unconfirmed: Un missage con un ligament de confirmation ha esset inviat a tui adresse electronic. Ples sequer li ligament por activar tui conto, e confirmar tui spamiere si tu ne ha recivet li e-posta. update_needs_confirmation: Tu ha actualisat tui conto con successe, ma noi deve verificar tui nov adresse electronic. Ples confirmar tui e-postas e sequer li ligament de confirmation por confirmar li nov adresse, e inspecter tui spamiere si tu ne ha recivet li e-posta. updated: Tui conto ha esset actualisat successosimen. sessions: diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 49637579e4..feef32bf67 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -94,11 +94,6 @@ io: updated_not_active: Tua pasvorto redaktesis senprobleme. registrations: destroyed: Til! Tua konto efacesis senprobleme. Ni esperas rividar tu balde. - signed_up: Bonveno! Tu membreskis senprobleme. - signed_up_but_inactive: Tu bone membreskis, ma tu ankore ne povas enirar pro ke tua konto ne konfirmesis. - signed_up_but_locked: Tu bone membreskis, ma tu ne povas enirar pro ke tua konto extingesis. - signed_up_but_pending: Mesajo kun konfirmoligilo sendesis a vua retpostadreso. Pos vu kliktas la ligilo, ni kontrolos vua apliko. Vu notifikesos se ol aprobesas. - signed_up_but_unconfirmed: Retpost-mesajo kun tua ligilo por konfirmar tua konto sendesis a tua retpost-adreso. Voluntez uzar ta ligilo por konfirmar tua konto. update_needs_confirmation: Tu vone aktualigis tua konto, ma ni bezonas kontrolar tua nova retpost-adreso. Voluntez kontrolar tua retpost-mesaji ed uzar la ligilo por konfirmar tua nova retpost-adreso. updated: Tua konto aktualigesis senprobleme. sessions: diff --git a/config/locales/devise.is.yml b/config/locales/devise.is.yml index a045bdd80c..a22c6d468f 100644 --- a/config/locales/devise.is.yml +++ b/config/locales/devise.is.yml @@ -94,11 +94,6 @@ is: updated_not_active: Það tókst að breyta lykilorðinu þínu. registrations: destroyed: Bless! Hætt hefur verið við notandaaðganginn þinn. Við vonumst samt eftir að sjá þig fljótt aftur. - signed_up: Velkomin/n! Það tókst að nýskrá þig. - signed_up_but_inactive: Þér hefur tekist að nýskrá þig. Hinsvegar gátum við ekki skráð þig inn því notandaaðgangurinn þinn hefur ekki enn verið virkjaður. - signed_up_but_locked: Þér hefur tekist að nýskrá þig. Hinsvegar gátum við ekki skráð þig inn því notandaaðgangurinn þinn er læstur. - signed_up_but_pending: Skilaboð með staðfestingartengli hafa verið send á tölvupóstfangið þitt. Þegar þú smellir á þennan tengil munum við yfirfara og staðfesta umsóknina þína. Þú færð svo að vita hvort hún verður samþykkt. - signed_up_but_unconfirmed: Skilaboð með staðfestingartengli hafa verið send á tölvupóstfangið þitt. Smelltu á þennan tengil til að virkja notandaaðganginn þinn. Skoðaðu í ruslpóstmöppuna þína ef þú færð ekki þessi skilaboð. update_needs_confirmation: Þú uppfærðir notandaaðganginn þinn, en við þurfum að sannreyna nýja tölvupóstfangið þitt. Skoðaðu tölvupóstinn þinn og fylgdu tenglinum sem þangað á að berast til að staðfesta tölvupóstfangið þitt. Skoðaðu í ruslpóstmöppuna þína ef þú færð ekki þennan tölvupóst. updated: Það tókst að uppfæra notandaaðganginn þinn. sessions: diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml index 8aaea3c15b..8497b369be 100644 --- a/config/locales/devise.it.yml +++ b/config/locales/devise.it.yml @@ -94,11 +94,6 @@ it: updated_not_active: La tua password è stata modificata correttamente. registrations: destroyed: Addio! Il tuo profilo è stato eliminato correttamente. Speriamo di rivederti presto. - signed_up: Benvenuto! Ti sei registrato con successo. - signed_up_but_inactive: Ti sei registrato con successo. Tuttavia, non siamo riusciti a farti accedere perché il tuo profilo non è ancora stato attivato. - signed_up_but_locked: Ti sei registrato con successo. Tuttavia, non siamo riusciti a farti accedere perché il tuo profilo è bloccato. - signed_up_but_pending: Un messaggio con un link di conferma è stato inviato al tuo indirizzo email. Una volta che avrai cliccato il link, revisioneremo la tua richiesta. Sarai notificato, se verrà approvata. - signed_up_but_unconfirmed: Un messaggio con un link di conferma è stato inviato al tuo indirizzo email. Sei pregato di seguire il link per attivare il tuo profilo. Sei pregato di controllare la tua cartella dello spam, se non hai ricevuto quest'email. update_needs_confirmation: Hai aggiornato correttamente il tuo profilo, ma dobbiamo verificare il tuo nuovo indirizzo email. Sei pregato di controllare la tua email e di seguire il link di conferma, per confermare il tuo nuovo indirizzo email. Sei pregato di controllare la tua cartella dello spam, se non hai ricevuto quest'email. updated: Il tuo profilo è stato aggiornato con successo. sessions: diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index 40a42de587..5836e4e776 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -95,11 +95,6 @@ ja: registrations: destroyed: アカウントの作成はキャンセルされました。またのご利用をお待ちしています。 sign_up_failed_because_reach_limit: 制限に到達しているため、アカウントを作成できません。 - signed_up: アカウントの作成が完了しました。Mastodonへようこそ。 - signed_up_but_inactive: アカウントの作成が完了しました。しかし、アカウントが有効化されていないためログインできませんでした。 - signed_up_but_locked: アカウントの作成が完了しました。しかし、アカウントがロックされているためログインできませんでした。 - signed_up_but_pending: メールアドレスの確認用のリンクが入力したメールアドレスに送信されました。リンクをクリックした後、あなたの申請を審査します。承認されると通知されます。 - signed_up_but_unconfirmed: メールアドレスの確認用のリンクが入力したメールアドレスに送信されました。メール内のリンクをクリックしてアカウントを有効化してください。 update_needs_confirmation: アカウント情報の更新に成功しました。しかし、メールアドレスの確認が必要です。送信されたメール内のリンクをクリックしてメールアドレスを確認してください。 updated: アカウント情報の更新に成功しました。 sessions: diff --git a/config/locales/devise.ka.yml b/config/locales/devise.ka.yml index 3267eb22eb..abce3639d4 100644 --- a/config/locales/devise.ka.yml +++ b/config/locales/devise.ka.yml @@ -56,10 +56,6 @@ ka: updated_not_active: თქვენი პაროლი წარმატებით შეიცვალა. registrations: destroyed: ნახვამდის! თქვენი ანგარიში წარმატებით გაუქმდა. იმედი გვაქვს ისევ შევხვდებით. - signed_up: გამარჯობა! თქვენ წარმატებით დარეგისტრირდით. - signed_up_but_inactive: თქვენ წარმატებით დარეგისტრირდით. თუმცა, ავტორიზაცია ვერ შედგა, თქვენი ანგარიში ჯერ არაა გააქტიურებული. - signed_up_but_locked: თქვენ წარმატებით დარეგისტრირდით. თუმცა, აცტორიზაცია ვერ შედგა, თქვენი ანგარიში ჩაკეტილია. - signed_up_but_unconfirmed: წერილი დამოწმების ბმულით თქვენს ელ-ფოსტაზე გამოგზავნილია. გთხოვთ გაჰყევით ბმულს, რათა გაააქტიუროთ ანგარიში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს. update_needs_confirmation: თქვენი ანგარიში წარმატებით განახლდა, მაგრამ გვესაჭიროება თქვენი ელ-ფოსტის მისამართის დამოწმება. შეამოწმეთ ელ-ფოსტა და დასამოწმებლად გადადით მიღებულ ბმულზე. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს. updated: თქვენი ანგარიში წარმატებით განახლდა. sessions: diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 32a98a37c3..4638afc8e0 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -94,11 +94,6 @@ kab: updated_not_active: Awal-ik uffir yettwabeddel mebla ugur. registrations: destroyed: Ar timlilit! Amiḍan-ik yettwakkes mebla ugur. Nessaram ad k-nwali tikelt-nniḍen. - signed_up: Anṣuf! Aqla-k tkecmeḍ. - signed_up_but_inactive: Tjerdeḍ akken iwata. maca ur tezmireḍ ara ad teqneḍ akka tura acku amiḍan-ik·im mazal ur yermid ara. - signed_up_but_locked: Tjerdeḍ akken iwata. maca ur tezmireḍ ara ad teqneḍ akka tura acku amiḍan-ik·im ittwawḥel. - signed_up_but_pending: Aseɣwen n usentem ittwazen ɣer tensa-inen·inem n imayl. ticki tsenndeḍ ɣef useɣwen, ad nsenqed asnas-ik·im. ad ak·am-n-yaweḍ telɣut ma yella ittwaqbel. - signed_up_but_unconfirmed: Aseɣwen n usentem ittwazen ɣer tensa-inen·inem n imayl. Ttxil ḍfer aseɣwen i usentem n umiḍan-ik·im. Ttxil wali akaram n ispamen ma ur teṭṭifeḍ ara imayl-agi. update_needs_confirmation: Tleqmeḍ akken iwata amiḍan-ik·im, maca nesra ad nsenqed tansa-ik·im imayl tamaynut. Ttxil-k·m senqed imayl-k·m sakin ḍfer aseɣwen i usentem n n tansa imayl tamaynut. Ttxil senqed akaram n spam ma yella ur tufiḍ ara imayl-nni. updated: Amiḍan-ik·im yettwalqem akken iwata. sessions: diff --git a/config/locales/devise.kk.yml b/config/locales/devise.kk.yml index 06fad30aec..61e89f6245 100644 --- a/config/locales/devise.kk.yml +++ b/config/locales/devise.kk.yml @@ -69,11 +69,6 @@ kk: updated_not_active: Құпиясөзіңіз сәтті өзгертілді. registrations: destroyed: Сау! Аккаунтыңыз тоқтатылды. Қайтадан ораласыз деп сенеміз. - signed_up: Қош келдіңіз! Тіркелу сәтті өтті. - signed_up_but_inactive: Тіркелу сәтті аяқталды. Дегенмен, аккаунтыңыз әлі белсендірілмегендіктен, сізге сайтқа кіру мүмкін болмайды. - signed_up_but_locked: Тіркелу сәтті аяқталды. Дегенмен, аккаунтыңыз құлыпталғандықтан, сізге сайтқа кіру мүмкін болмайды. - signed_up_but_pending: Электрондық пошта мекенжайыңызға растау сілтемесі бар хабарлама жіберілді. Сілтемені басқаннан кейін біз сіздің өтінішіңізді қарастырамыз. Егер ол мақұлданса, сізге хабарланады. - signed_up_but_unconfirmed: Растау сілтемесі бар хат электрондық поштаыңызға жіберілді. Аккаунтыңызды белсендіру үшін сілтеме бойынша өтіңіз. Бұл хат келмесе, спам құтысын тексеріңіз. update_needs_confirmation: Аккаунтыыызды сәтті жаңарттыңыз, бірақ жаңа электрондық поштаны тексеру қажет. Электрондық поштаңызды тексеріп, жаңа электрондық пошта мекенжайыңызды растаңыз. Бұл электрондық поштаны алмасаңыз, спам қалтаңызды тексеріңіз. updated: Аккаунтыңыз сәтті жаңартылды. sessions: diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 7ba5ffb9c8..b57ef9684c 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -94,11 +94,6 @@ ko: updated_not_active: 암호를 잘 변경하였습니다. registrations: destroyed: 안녕히 가세요! 계정이 성공적으로 제거되었습니다. 다시 만나기를 희망합니다. - signed_up: 안녕하세요! 성공적으로 가입했습니다. - signed_up_but_inactive: 성공적으로 가입했습니다. 하지만 계정이 활성화되지 않았기 때문에 아직 로그인할 수 없습니다. - signed_up_but_locked: 성공적으로 가입했습니다. 하지만 계정이 잠겨있기 때문에 아직 로그인할 수 없습니다. - signed_up_but_pending: 확인 링크를 포함한 메일이 발송 되었습니다. 링크를 클릭한 이후, 우리가 당신의 신청양식을 검토합니다. 승인이 되면 알림을 발송합니다. - signed_up_but_unconfirmed: 확인 링크를 포함한 메일이 발송 되었습니다. 링크를 클릭해 계정을 활성화 하세요. 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. update_needs_confirmation: 계정 정보를 성공적으로 업데이트했으며, 새 이메일 주소에 대한 확인이 필요합니다. 이메일로 전달된 링크를 따라 새 이메일을 확인하세요. 메일을 받지 못하셨다면 스팸 폴더를 확인해 주세요. updated: 계정 정보가 성공적으로 업데이트 되었습니다. sessions: diff --git a/config/locales/devise.ku.yml b/config/locales/devise.ku.yml index 33a868a8a5..4072b1ae94 100644 --- a/config/locales/devise.ku.yml +++ b/config/locales/devise.ku.yml @@ -88,11 +88,6 @@ ku: updated_not_active: Borînpeyva te bi serkeftî hate guhertin. registrations: destroyed: Xatirê te! Ajimêra te bi serkeftî hate pûçkirin. Em hêvî dikin ku tu di nêzîk de te dîsa bibînin. - signed_up: Bi xêr hatî! Te bi serkeftî tomarkirin kir. - signed_up_but_inactive: Te bi serkeftî tomarkirin kir. lê piştî ku tu çalak bikî em dikarin ku tu têketinê bikî. - signed_up_but_locked: Te bi serkeftî tomarkirin kir. lê ajimêra te girtiye ber wê tu nikarî ku têketinê bikî. - signed_up_but_pending: Peyamek bi girêdana pejirandinê ji navnîşana e-nameya te re hate şandin. Piştî ku tu girêdanê bitikînî, em ê serlêdana te binirxînin. Ku were pejirandin tu yê bê agahdarkirin. - signed_up_but_unconfirmed: Peyamek bi girêdana pejirandinê ji navnîşana e-nameya te re hate şandin. Ji kerema xwe girêdanê bişopîne da ku tu ajimêra xwe çalak bikî. Ji kerema xwe ku te ev e-name nestand peldanka nexwestî (spam) ya xwe kontrol bike. update_needs_confirmation: Te ajimêra xwe bi awayekî serkeftî rojane kir, lê pêdiviya me bi kontrolkirina navnîşana e -nameya te ya nû heye. Ji kerema xwe e -nameya xwe kontrol bike û girêdana piştrastkirinê bişopîne da ku navnîşana e -nameya xwe ya nû piştrast bikî. Ji kerema xwe ku te ev e-name nestand peldanka nexwestî (spam) ya xwe kontrol bike. updated: Ajimêra te bi awayekî serkeftî hate rojanekirin. sessions: diff --git a/config/locales/devise.la.yml b/config/locales/devise.la.yml index a6fe5e1e4b..1ca297cf6a 100644 --- a/config/locales/devise.la.yml +++ b/config/locales/devise.la.yml @@ -5,4 +5,3 @@ la: send_instructions: Sī adresa tua epistularis in nostra basi datōrum exstat, vinculum ad recuperandam clavem adresa tua epistulari adferētur pauca momenta post. Sī autem hanc epistulam nōn recēpistī, rogāmus ut scrūtināriōnem spurcāriī tuī faciās. registrations: destroyed: Vale! Ratio tua succēssu cancellāta est. Spērāmus tē mox iterum vidēre. - signed_up_but_inactive: Te cōnscrīpsistī succēdāneē. At nōn potuimus tē introīre quod ratio* tua nōn adhūc est activāta.* diff --git a/config/locales/devise.lad.yml b/config/locales/devise.lad.yml index 7d447140f4..45e4750450 100644 --- a/config/locales/devise.lad.yml +++ b/config/locales/devise.lad.yml @@ -94,11 +94,6 @@ lad: updated_not_active: Tu kod se tiene trokado kon reushita. registrations: destroyed: Tu kuento a sido efasado kon reushita. Asperamos verte de muevo pronto. - signed_up: Bienvenido! Te tienes enrejistrado djustamente. - signed_up_but_inactive: Te tienes enrejistrado kon reushita. Entanto, no se pudio inisyar sesyon porke tu kuento ainda no esta aktivado. - signed_up_but_locked: Te tienes enrejistrado kon reushita. Entanto, no pudites konektarte kon tu kuento porke tu kuento esta blokado. - signed_up_but_pending: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Dempues de klikar en el atadijo, revizaremos tu solisitud. Seras avizado si se acheta. - signed_up_but_unconfirmed: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Por favor, sigue el atadijo para aktivar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. update_needs_confirmation: Tienes aktualizado tu kuento kon reushita, pero kale verifikar tu muevo adreso de posta elektronika. Por favor, komprova tu posta elektronika i sige el atadijo de konfirmasyon para konfirmar tu muevo adreso de posta elektronika. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika. updated: Tu kuento se aktualizo kon reushita. sessions: diff --git a/config/locales/devise.lt.yml b/config/locales/devise.lt.yml index 7c72543574..1eb5692494 100644 --- a/config/locales/devise.lt.yml +++ b/config/locales/devise.lt.yml @@ -94,11 +94,6 @@ lt: updated_not_active: Tavo slaptažodis buvo sėkmingai pakeistas. registrations: destroyed: Iki pasimatymo! Tavo paskyra sėkmingai atšaukta. Tikimės, kad netrukus vėl pamatysime tave. - signed_up: Sveiki! Tu sėkmingai užsiregistravai. - signed_up_but_inactive: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar nėra aktyvuota. - signed_up_but_locked: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar užrakinta. - signed_up_but_pending: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Paspaudęs (-usi) nuorodą, peržiūrėsime tavo paraišką. Tau bus pranešta, jei ji patvirtinta. - signed_up_but_unconfirmed: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Sek nuorodą, kad aktyvuotum savo paskyrą. Jei negavai šio el. laiško, patikrink šlamšto aplanką. update_needs_confirmation: Sėkmingai atnaujinai savo paskyrą, bet mums reikia patvirtinti naująjį el. pašto adresą. Patikrink savo el. paštą ir sek patvirtinimo nuorodą, kad patvirtintum savo naują el. pašto adresą. Jei negavai šio el. laiško, patikrink šlamšto aplanką. updated: Tavo paskyra buvo sėkmingai atnaujinta. sessions: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 5aaa23a731..9fbd99c0eb 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -94,11 +94,6 @@ lv: updated_not_active: Tava parole ir veiksmīgi nomainīta. registrations: destroyed: Visu labu! Tavs konts ir veiksmīgi atcelts. Mēs ceram tevi drīz atkal redzēt. - signed_up: Laipni lūdzam! Tu esi veiksmīgi reģistrējies. - signed_up_but_inactive: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts vēl nav aktivizēts. - signed_up_but_locked: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts ir slēgts. - signed_up_but_pending: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Pēc noklikšķināšanas uz saites mēs izskatīsim tavu pieteikumu. Tu tiksi informēts, ja tas tiks apstiprināts. - signed_up_but_unconfirmed: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Lūdzu, seko saitei, lai aktivizētu savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. update_needs_confirmation: Tu veiksmīgi atjaunināji savu kontu, taču mums ir jāverificē teva jaunā e-pasta adrese. Lūdzu, pārbaudi savu e-pastu un seko apstiprinājuma saitei, lai apstiprinātu savu jauno e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. updated: Tavs konts ir veiksmīgi atjaunināts. sessions: diff --git a/config/locales/devise.ms.yml b/config/locales/devise.ms.yml index da18d1896e..90d59798cb 100644 --- a/config/locales/devise.ms.yml +++ b/config/locales/devise.ms.yml @@ -84,11 +84,6 @@ ms: updated_not_active: Kata laluan anda telah berjaya ditukar. registrations: destroyed: Selamat tinggal! Akaun anda telah berjaya dibatalkan. Kami harap berjumpa lagi. - signed_up: Selamat datang! Anda telah berjaya mendaftar. - signed_up_but_inactive: Anda telah berjaya mendaftar. Namun, kami tidak dapat mendaftar masuk anda kerana akaun anda belum diaktifkan. - signed_up_but_locked: Anda telah berjaya mendaftar. Walau bagaimanapun, kami tidak dapat melog masuk anda kerana akaun anda dikunci. - signed_up_but_pending: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Selepas anda mengklik pautan, kami akan menyemak permohonan anda. Anda akan dimaklumkan jika ia diluluskan. - signed_up_but_unconfirmed: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Sila ikuti pautan untuk mengaktifkan akaun anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini. update_needs_confirmation: Anda berjaya mengemas kini akaun anda, tetapi kami perlu mengesahkan alamat e-mel baharu anda. Sila semak e-mel anda dan ikuti pautan pengesahan untuk mengesahkan alamat e-mel baharu anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini. updated: Akaun anda telah berjaya dikemas kini. sessions: diff --git a/config/locales/devise.my.yml b/config/locales/devise.my.yml index 126ecd7404..4eff1ddd6a 100644 --- a/config/locales/devise.my.yml +++ b/config/locales/devise.my.yml @@ -84,11 +84,6 @@ my: updated_not_active: သင့်စကားဝှက်ကို အောင်မြင်စွာ ပြောင်းလဲပြီးပါပြီ။ registrations: destroyed: တာ့တာ၊ သင့်အကောင့်ကို ပယ်ဖျက်လိုက်ပါပြီ။ မကြာခင် ပြန်တွေ့နိုင်ရန်မျှော်လင့်မိပါသည်။ - signed_up: ကြိုဆိုပါသည်။ သင်သည် အောင်မြင်စွာ စာရင်းသွင်းပြီးပါပြီ။ - signed_up_but_inactive: သင်သည် အောင်မြင်စွာ အကောင့်ဖွင့်ပြီးပါပြီ။ သို့သော်လည်း သင့်အကောင့် အတည်မပြုရသေးသောကြောင့် ဝင်၍မရနိုင်ပါ။ - signed_up_but_locked: သင်သည် အောင်မြင်စွာ အကောင့်ဖွင့်ပြီးပါပြီ။ သို့သော်လည်း သင့်အကောင့်လော့ခ်ချထားသောကြောင့် လက်မှတ်ထိုးဝင်၍မရနိုင်ပါ။ - signed_up_but_pending: အတည်ပြုချက်လင့်ခ်ပါရှိသော စာတိုတစ်စောင်ကို သင့်အီးမေးလ်လိပ်စာသို့ ပေးပို့လိုက်ပါပြီ။ လင့်ခ်ကို နှိပ်ပြီးနောက် သင့်အက်ပလီကေးရှင်းကို ကျွန်ုပ်တို့ ပြန်လည်စစ်ဆေးပါမည်။ အတည်ပြုပြီးပါက သင့်ထံ အကြောင်းကြားပါမည်။ - signed_up_but_unconfirmed: အကောင့်ဖွင့်ရန်အတွက် လင့်ခ်တစ်ခုကို ထောက်ခံချက်အီးမေးလ််နှင့်အတူပို့ပေးလိုက်ပါပြီ။ သင့်အကောင့်ဖွင့်နိုင်ရန် လင့်ခ်ကိုဝင်ရောက်ပေးပါ။ အီးမေးလ်မတွေ့ပါက စပမ်းဖိုင်တွဲထဲတွင်စစ်ကြည့်ပါ။ update_needs_confirmation: သင့်အကောင့်ကို မွမ်းမံပြင်ဆင်ထားသော်လည်း သင့်အီးမေးလ်လိပ်စာအသစ်ကို အတည်ပြုရန် လိုအပ်ပါသည်။ ကျေးဇူးပြု၍ သင့်အီးမေးလ်ကို စစ်ဆေးပြီး သင့်အီးမေးလ်လိပ်စာအသစ်ကို အတည်ပြုရန်အတွက် အတည်ပြုလင့်ခ်အား နှိပ်ပါ။ ဤအီးမေးလ်ကို မရရှိပါက သင်၏ Spam ဖိုင်ကို စစ်ဆေးပါ။ updated: သင့်အကောင့်အားအောင်မြင်စွာ ပြင်ဆင်ပြီးပါပြီ။ sessions: diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 662401a57a..a80b5a7bfa 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -94,11 +94,6 @@ nl: updated_not_active: Jouw wachtwoord is gewijzigd. registrations: destroyed: Jouw account is succesvol verwijderd. Wellicht tot ziens. - signed_up: Je bent geregistreerd. - signed_up_but_inactive: Je bent geregistreerd. Je kon alleen niet automatisch ingelogd worden omdat jouw account nog niet geactiveerd is. - signed_up_but_locked: Je bent ingeschreven. Je kon alleen niet automatisch ingelogd worden omdat jouw account is opgeschort. - signed_up_but_pending: Er is een bericht met een bevestigingslink naar jouw e-mailadres verzonden. Nadat je op deze link hebt geklikt nemen we jouw aanvraag in behandeling. Je wordt op de hoogte gesteld wanneer deze wordt goedgekeurd. - signed_up_but_unconfirmed: Je ontvangt via e-mail instructies hoe je jouw account kunt activeren. Kijk tussen je spam wanneer niks werd ontvangen. update_needs_confirmation: Je hebt je e-mailadres succesvol gewijzigd, maar we moeten je nieuwe mailadres nog bevestigen. Controleer jouw e-mail en klik op de link in de mail om jouw e-mailadres te bevestigen. Kijk tussen je spam wanneer niks werd ontvangen. updated: Jouw accountgegevens zijn opgeslagen. sessions: diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index e9e8e1f6e0..cdf358ce83 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -94,11 +94,6 @@ nn: updated_not_active: Passordet ditt er endra. registrations: destroyed: Ha det! Kontoen din er sletta. Me vonar å sjå deg igjen snart. - signed_up: Velkomen! No er du registrert. - signed_up_but_inactive: Du har registrert deg, men me kunne ikkje logga deg inn fordi kontoen din er ikkje aktivert enno. - signed_up_but_locked: Du har registrert deg, men me kunne ikkje logga deg inn fordi kontoen din er låst. - signed_up_but_pending: Ei melding med ei stadfestingslenke har vorte sendt til epostadressa di. Når du klikkar på lenka skal me sjå gjennom søknaden din. Du får ei melding om den vert godkjend. - signed_up_but_unconfirmed: Ei melding med ei lenke for å stadfeste kontoen har vorte sendt til epostadressa di. Klikk på lenka for å aktivere kontoen. Sjekk søppelpostmappa dersom du ikkje har fått eposten. update_needs_confirmation: Du har oppdatert kontoen din, men me må stadfesta den nye epostadressa. Sjekk innboksen og fylg lenka for å stadfeste adressa di. Sjekk søppelpostmappa dersom du ikkje har fått denne eposten. updated: Kontoen har vorte oppdatert. sessions: diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index 2cd433c6e0..b92e7e8aa3 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -94,11 +94,6 @@ updated_not_active: Passordet ditt er endret. registrations: destroyed: Ha det! Kontoen din er avsluttet. Vi håper å se deg igjen snart. - signed_up: Velkommen! Registreringen var vellykket. - signed_up_but_inactive: Registreringen var vellykket. Vi kunne dessverre ikke logge deg inn fordi kontoen din ennå ikke har blitt aktivert. - signed_up_but_locked: Registreringen var vellykket. Vi kunne dessverre ikke logge deg inn fordi kontoen din har blitt låst. - signed_up_but_pending: En melding med en bekreftelseslenke er sendt til din e-postadresse. Etter at du har klikket på lenken, vil vi gjennomgå søknaden din. Du vil bli varslet hvis den blir godkjent. - signed_up_but_unconfirmed: En melding med en bekreftelseslenke har blitt sendt til din e-postadresse. Klikk på lenken i e-posten for å aktivere kontoen din. Sjekk spam-mappen din hvis du ikke mottok e-posten. update_needs_confirmation: Du har oppdatert kontoen din, men vi må bekrefte din nye e-postadresse. Sjekk e-posten din og følg bekreftelseslenken for å bekrefte din nye e-postadresse. Sjekk spam-mappen din hvis du ikke mottok e-posten. updated: Kontoen din ble oppdatert. sessions: diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml index 2640777e00..a039975ef5 100644 --- a/config/locales/devise.oc.yml +++ b/config/locales/devise.oc.yml @@ -84,11 +84,6 @@ oc: updated_not_active: Vòstre senhal es ben estat cambiat. registrations: destroyed: Adieu-siatz ! Vòstra inscripcion es estada anullada amb succès. Esperem vos tornar veire lèu. - signed_up: La benvenguda ! Sètz ben marcat al malhum. - signed_up_but_inactive: Sètz ben marcat. Pasmens, avèm pas pogut vos connectar perque vòstre compte es pas encara validat. - signed_up_but_locked: Sètz ben marcat. Pasmens, avèm pas pogut vos connectar perque vòstre compte es pas encara blocat. - signed_up_but_pending: Un messatge amb un ligam de confirmacion es estat enviat a vòstra adreça electronica. Aprèp aver clicat lo ligam, revisarem vòstra demanda. Seretz avisat se’s aprovada. - signed_up_but_unconfirmed: Un messatge amb un ligam de confirmacion es estat enviat a vòstra adreça de corrièl. Clicatz sul ligam per activar vòstre compte. Mercés de verificar tanben vòstre dorsièr de corrièls indesirables. update_needs_confirmation: Avètz ben mes a jorn vòstre compte, mai nos cal verificar vòstra nòva adreça de corrièl. Mercés de verificar vòstres messatges e clicar sul ligam de confirmacion per confirmar vòstra nòva adreça de corrièl. Mercés de verificar tanben vòstre dorsièr de corrièls indesirables. updated: Vòstre compte es estat mes a jorn amb succès. sessions: diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml index f34fd04633..093ea6961d 100644 --- a/config/locales/devise.pl.yml +++ b/config/locales/devise.pl.yml @@ -94,11 +94,6 @@ pl: updated_not_active: Twoje hasło zostało zmienione. registrations: destroyed: Do zobaczenia! Twoje konto zostało zawieszone. Mamy jednak nadzieję, że do nas wrócisz. - signed_up: Witamy! Twoje konto zostało utworzone. - signed_up_but_inactive: Twoje konto zostało utworzone. Nie mogliśmy Cię jednak zalogować, ponieważ konto nie zostało jeszcze aktywowane. - signed_up_but_locked: Twoje konto zostało utworzone. Nie mogliśmy Cię jednak zalogować, ponieważ konto jest zablokowane. - signed_up_but_pending: Na Twój adres e-mail została wysłana wiadomosć z odnośnikiem potwierdzającym. Po kliknięciu w odnośnik, przejrzymy Twoje podanie. Zostaniesz poinformowany(-a), gdy zostanie ono przyjęte. - signed_up_but_unconfirmed: Na Twój adres e-mail została wysłana wiadomosć z odnośnikiem potwierdzającym. Kliknij w odnośnik, aby aktywować konto. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem. update_needs_confirmation: Konto zostało zaktualizowane, musimy jednak zweryfikować Twój nowy adres e-mail. Została na niego wysłana wiadomość z odnośnikiem potwierdzającym. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem. updated: Konto zostało zaktualizowane. sessions: diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 8f504362de..6c33d0e30a 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -94,11 +94,6 @@ pt-BR: updated_not_active: Sua senha foi alterada com sucesso. registrations: destroyed: Adeus! Sua conta foi cancelada. Talvez um dia possamos nos ver de novo. - signed_up: Boas vindas! Conta criada. - signed_up_but_inactive: Conta criada! Agora você deve confirmá-la. - signed_up_but_locked: Você se cadastrou com sucesso. Contudo, não pudemos entrar na sua conta porque ela está bloqueada. - signed_up_but_pending: Um e-mail com um link de confirmação foi enviado para o seu endereço de e-mail. Após você entrar no link, revisaremos sua solicitação e você será notificado caso seja aprovado. - signed_up_but_unconfirmed: Um e-mail com instruções para confirmar o seu endereço de e-mail foi enviado. Verifique sua caixa de spam caso ainda não o tenha recebido. update_needs_confirmation: Você alterou seu endereço de e-mail ou sua senha, porém é preciso confirmar a alteração. Entre no link que foi enviado para o seu novo endereço de e-mail e verifique sua caixa de spam caso ainda não o tenha recebido. updated: Sua conta foi alterada com sucesso. sessions: diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index edfb798509..1469e7403d 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -94,11 +94,6 @@ pt-PT: updated_not_active: A tua palavra-passe foi alterada. registrations: destroyed: Adeus! A sua conta foi cancelada com sucesso. Esperamos voltar a vê-lo em breve. - signed_up: Bem-vindo! A sua conta foi registada com sucesso. - signed_up_but_inactive: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta ainda não está ativada. - signed_up_but_locked: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta está bloqueada. - signed_up_but_pending: Foi enviada uma mensagem com uma hiperligação de confirmação para o seu endereço de e-mail. Depois de clicar na hiperligação, analisaremos a sua candidatura. Será notificado se for aprovado. - signed_up_but_unconfirmed: Foi enviada para o seu endereço de e-mail uma mensagem com uma hiperligação de confirmação. Siga a hiperligação para ativar a sua conta. Verifique a sua pasta de spam se não recebeu esta mensagem de e-mail. update_needs_confirmation: Atualizou a sua conta com sucesso, mas temos de verificar o seu novo endereço de e-mail. Verifique o seu e-mail e siga a hiperligação de confirmação para confirmar o seu novo endereço de e-mail. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico. updated: A sua conta foi corretamente atualizada. sessions: diff --git a/config/locales/devise.ro.yml b/config/locales/devise.ro.yml index f570f77e1d..1548dc36f3 100644 --- a/config/locales/devise.ro.yml +++ b/config/locales/devise.ro.yml @@ -94,11 +94,6 @@ ro: updated_not_active: Parola dvs. a fost schimbată cu succes. registrations: destroyed: La revedere! Contul dvs. a fost anulat cu succes. Sperăm să vă vedem din nou în curând. - signed_up: Bine ați venit! V-ați înregistrat cu succes. - signed_up_but_inactive: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. nu este încă activat. - signed_up_but_locked: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. este blocat. - signed_up_but_pending: Un mesaj cu un link de confirmare a fost trimis la adresa dvs. de e-mail. După ce faceți clic pe link, vă vom revizui cererea. Veți fi notificat dacă este aprobat. - signed_up_but_unconfirmed: Un mesaj cu un link de confirmare a fost trimis la adresa dvs. de e-mail. Vă rugăm să urmați link-ul pentru a vă activa contul. Vă rugăm să verificați folderul spam dacă nu ați primit acest e-mail. update_needs_confirmation: V-ați actualizat contul cu succes, dar trebuie să verificăm noua dvs. adresă de e-mail. Vă rugăm să verificați adresa de e-mail și să urmați link-ul de confirmare pentru a confirma noua dvs. adresă de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. updated: Contul dvs. a fost actualizat cu succes. sessions: diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index 9e7ace6433..853381801a 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -94,11 +94,6 @@ ru: updated_not_active: Ваш пароль был успешно изменен. registrations: destroyed: До свидания! Ваша учётная запись была успешно удалена. Мы надеемся скоро увидеть вас снова. - signed_up: Добро пожаловать! Вы успешно зарегистрировались. - signed_up_but_inactive: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать вас, поскольку ваша учётная запись еще не активирована. - signed_up_but_locked: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать вас, поскольку ваша учётная запись заблокирована. - signed_up_but_pending: На ваш e-mail адрес было отправлено письмо с ссылкой для подтверждения. После перехода по ней, мы начнём рассматривать вашу заявку. В случае подтверждения, мы вас оповестим. - signed_up_but_unconfirmed: Сообщение со ссылкой для подтверждения было выслано на ваш адрес e-mail. Пожалуйста, пройдите по ссылке для активации вашей учётной записи. update_needs_confirmation: Данные учётной записи обновлены, но нам необходимо подтвердить ваш новый e-mail адрес. Проверьте почту и перейдите по ссылке из письма. Если оно не приходит, проверьте папку «спам». updated: Ваша учётная запись успешно обновлена. sessions: diff --git a/config/locales/devise.sc.yml b/config/locales/devise.sc.yml index dde8fd229e..6926a85c42 100644 --- a/config/locales/devise.sc.yml +++ b/config/locales/devise.sc.yml @@ -84,11 +84,6 @@ sc: updated_not_active: Sa crae tua est istada mudada. registrations: destroyed: A si bìdere! Su contu tuo est istadu cantzelladu. Isperamus de ti torrare a bìdere chitzi. - signed_up: Registratzione curreta. Ti donamus sa benebènnida. - signed_up_but_inactive: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo no est ancora ativu. - signed_up_but_locked: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo est blocadu. - signed_up_but_pending: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. A pustis chi incarcas in su ligàmene, amus a revisionare sa dimanda tua. Si aprovada, t'at a arribare una notìfica. - signed_up_but_unconfirmed: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. Sighi su ligàmene pro ativare su contu tuo. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. update_needs_confirmation: Su contu tuo est istadu atualizadu, ma depimus verificare s'indiritzu tuo de posta eletrònica nou. Controlla sa posta eletrònica e sighi su ligàmene pro cunfirmare s'indiritzu nou de posta eletrònica. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. updated: Su contu tuo est istadu atualizadu. sessions: diff --git a/config/locales/devise.sco.yml b/config/locales/devise.sco.yml index 1db6bbe303..991101f778 100644 --- a/config/locales/devise.sco.yml +++ b/config/locales/devise.sco.yml @@ -84,11 +84,6 @@ sco: updated_not_active: Yer passwird haes been chynged successfully. registrations: destroyed: Cheerio! Yer accoont haes been successfully shut doon. We howp fir tae see ye again suin. - signed_up: Hullo! Ye'v signed up successfully. - signed_up_but_inactive: Ye'v signed up successfully. Hou an iver, we cuidnae sign ye in acause yer accoont isnae activatit yit. - signed_up_but_locked: Ye'v signed up successfully. Hou an iver, we cuidnae sign ye in acause yer accoont is snibbed. - signed_up_but_pending: A email wi a confirmation link haes been sent tae yer email address. Efter ye chap on the link, we'll luik ower yer application. Ye'll be sent a note gin it's approved. - signed_up_but_unconfirmed: A message wi a confirmation link haes been sent tae yer email address. Please follae the link fir tae activate yer accoont. Please check yer mince folder if ye didnae get this email. update_needs_confirmation: Ye updatit yer accoont successfully, but we need tae verify yer new email address. Please tak a deek at yer email an follae the confirm link fir tae confirm yer new email address. Please tak a deek at yer mince folder if ye didnae get this email. updated: Yer accoont haes been updatit successfully. sessions: diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index d0bfa719bc..354b6fc977 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -77,11 +77,6 @@ si: updated_not_active: ඔබගේ මුරපදය සාර්ථකව වෙනස් කර ඇත. registrations: destroyed: ආයුබෝවන්! ඔබගේ ගිණුම සාර්ථකව අවලංගු කර ඇත. ඉක්මනින්ම ඔබව නැවත හමුවීමට අපි බලාපොරොත්තු වෙමු. - signed_up: සාදරයෙන් පිළිගනිමු! ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. - signed_up_but_inactive: ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. කෙසේ වෙතත්, ඔබගේ ගිණුම තවමත් සක්‍රිය කර නොමැති නිසා අපට ඔබව පුරනය වීමට නොහැකි විය. - signed_up_but_locked: ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. කෙසේ වෙතත්, ඔබගේ ගිණුම අගුලු දමා ඇති නිසා අපට ඔබව පුරනය කිරීමට නොහැකි විය. - signed_up_but_pending: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබ සබැඳිය ක්ලික් කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. එය අනුමත වුවහොත් ඔබට දැනුම් දෙනු ලැබේ. - signed_up_but_unconfirmed: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබගේ ගිණුම සක්‍රිය කිරීමට කරුණාකර සබැඳිය අනුගමනය කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. update_needs_confirmation: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන වුවද අපට නව වි-තැපැල් ලිපිනය සත්‍යාපනය කර ගැනීමට වුවමනා කෙරේ. කරුණාකර ඔබගේ වි-තැපෑල පරීක්‍ෂා කර ඊට අදාළ සබැඳිය අනුගමනය කර ඔබගේ නව වි-තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම වි-තැපෑල නොලැබුණේ නම් කරුණාකර අයාචිත තැපැල් බහාලුම බලන්න. updated: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කර ඇත. sessions: diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index b36416b317..08e93456b0 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -94,11 +94,6 @@ sk: updated_not_active: Vaše heslo bolo úspešne zmenené. registrations: destroyed: Dovidenia! Váš účet bol úspešne zrušený. Dúfame ale, že vás tu opäť niekedy uvidíme. - signed_up: Vitajte! Vaša registrácia bola úspešná. - signed_up_but_inactive: Registrácia bola úspešná. Avšak váš účet ešte nebol aktivovaný, takže sa nemôžete prihlásiť. - signed_up_but_locked: Registrácia bola úspešná. Avšak váš účet je zamknutý, takže sa nemôžete prihlásiť. - signed_up_but_pending: Na váš e-mail bola odoslaná správa s odkazom na overenie. Po kliknutí na odkaz vašu prihlášku skontrolujeme. O jej schválení vás budeme informovať. - signed_up_but_unconfirmed: Na váš e-mail bola odoslaná správa s odkazom na overenie. Svoj účet aktivujte kliknutím na odkaz. Ak ste e-mail nedostali, skontrolujte svoj priečinok pre spam. update_needs_confirmation: Váš účet bol úspešne zmenený, ale ešte potrebujeme overiť vašu novú e-mailovú adresu. Overíte ju kliknutím na potvrdzovací odkaz zaslaný na váš e-mail. Ak ste e-mail nedostali, skontrolujte svoj priečinok pre spam. updated: Váš účet bol úspešne aktualizovaný. sessions: diff --git a/config/locales/devise.sl.yml b/config/locales/devise.sl.yml index 0eb9b6330a..8e708f4ebf 100644 --- a/config/locales/devise.sl.yml +++ b/config/locales/devise.sl.yml @@ -94,11 +94,6 @@ sl: updated_not_active: Vaše geslo je bilo uspešno spremenjeno. registrations: destroyed: Srečno! Vaš račun je bil uspešno preklican. Upamo, da vas bomo kmalu spet videli. - signed_up: Dobrodošli! Uspešno ste se vpisali. - signed_up_but_inactive: Uspešno ste se vpisali. Vendar vas nismo mogli prijaviti, ker vaš račun še ni aktiviran. - signed_up_but_locked: Uspešno ste se vpisali. Vendar vas nismo mogli prijaviti, ker je vaš račun zaklenjen. - signed_up_but_pending: Na vaš e-poštni naslov je bilo poslano sporočilo s povezavo za potrditev. Ko kliknete povezavo, bomo pregledali vašo prijavo. Obveščeni boste, če bo odobrena. - signed_up_but_unconfirmed: Na vaš e-poštni naslov je bilo poslano sporočilo s povezavo za potrditev. Sledite povezavi, da aktivirate svoj račun. Če niste prejeli te e-pošte, preverite mapo z neželeno pošto. update_needs_confirmation: Uspešno ste posodobili račun, vendar moramo potrditi vaš novi e-poštni naslov. Preverite svojo e-pošto in sledite povezavi za potrditev, da potrdite nov e-poštni naslov. Če niste prejeli te e-pošte, preverite mapo z neželeno pošto. updated: Vaš račun je bil uspešno posodobljen. sessions: diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml index 76dd493245..69ac7bd26d 100644 --- a/config/locales/devise.sq.yml +++ b/config/locales/devise.sq.yml @@ -94,11 +94,6 @@ sq: updated_not_active: Fjalëkalimi juaj u ndryshua me sukses. registrations: destroyed: Shëndet! Llogaria juaj u fshi me sukses. Shpresojmë t’ju rishohim së shpejti. - signed_up: Mirë se vini! U regjistruat me sukses. - signed_up_but_inactive: U regjistruat me sukses. Megjithatë, s’u bë dot hyrja juaj, ngaqë llogaria juaj s’është aktivizuar ende. - signed_up_but_locked: U regjistruat me sukses. Megjithatë, s’u bë dot hyrja juaj, ngaqë llogaria juaj është kyçur. - signed_up_but_pending: Te adresa juaj email është dërguar një mesazh me një lidhje ripohimi. Pasi të klikoni mbi lidhjen, do të shqyrtojmë aplikimin tuaj. Nëse miratohet, do të njoftoheni. - signed_up_but_unconfirmed: Te adresa juaj email u dërgua një mesazh me një lidhje ripohimi. Ju lutemi, që të aktivizoni llogarinë tuaj, ndiqni lidhjen. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email. update_needs_confirmation: E përditësuat me sukses llogarinë tuaj, por na duhet të verifikojmë adresën tuaj të re email. Ju lutemi, që të ripohoni adresën tuaj të re email, kontrolloni email-in tuaj dhe ndiqni lidhjen. Ju lutemi, kontrolloni dosjen e mesazheve të padëshiruar, nëse nuk e morët këtë email. updated: Llogaria juaj u përditësua me sukses. sessions: diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml index 3947b2d84f..00e8ac4538 100644 --- a/config/locales/devise.sr-Latn.yml +++ b/config/locales/devise.sr-Latn.yml @@ -94,11 +94,6 @@ sr-Latn: updated_not_active: Vaša lozinka nije uspešno promenjena. registrations: destroyed: Ćao! Vaš nalog je uspešno obrisan. Nadamo se da ćete se uskoro vratiti. - signed_up: Dobro došli! Uspešno ste se registrovali. - signed_up_but_inactive: Uspešno ste se registrovali. Nažalost ne možete se prijaviti zato što Vaš nalog još nije aktiviran. - signed_up_but_locked: Uspešno ste se registrovali. Nažalost ne možete se prijaviti zato što je Vaš nalog zaključan. - signed_up_but_pending: Na vaš imejl poslata je poruka sa vezom za potvrdu. Nakon što kliknete na vezu, pregledaćemo vašu prijavu. Bićete obavešteni ako bude odobreno. - signed_up_but_unconfirmed: Poruka za potvrdu Vašeg naloga je poslata na Vašu imejl adresu. Kliknite na vezu u imejlu da potvrdite svoj nalog. Molimo proverite i spam fasciklu ako niste primili poruku. update_needs_confirmation: Uspešno ste ažurirali svoj nalog, ali moramo da verifikujemo vašu novu adresu e-pošte. Proverite svoju e-poštu i pratite vezu za potvrdu da biste potvrdili novu adresu e-pošte. Proverite svoju fasciklu neželjene pošte ako niste primili ovu e-poštu. updated: Vaš nalog je uspešno ažuriran. sessions: diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml index a4c08dfaf0..a7e855fa68 100644 --- a/config/locales/devise.sr.yml +++ b/config/locales/devise.sr.yml @@ -94,11 +94,6 @@ sr: updated_not_active: Ваша лозинка није успешно промењена. registrations: destroyed: Ћао! Ваш налог је успешно обрисан. Надамо се да ћете се ускоро вратити. - signed_up: Добро дошли! Успешно сте се регистровали. - signed_up_but_inactive: Успешно сте се регистровали. Нажалост не можете се пријавити зато што Ваш налог још није активиран. - signed_up_but_locked: Успешно сте се регистровали. Нажалост не можете се пријавити зато што је Ваш налог закључан. - signed_up_but_pending: На ваш имејл послата је порука са везом за потврду. Након што кликнете на везу, прегледаћемо вашу пријаву. Бићете обавештени ако буде одобрено. - signed_up_but_unconfirmed: Порука за потврду Вашег налога је послата на Вашу имејл адресу. Кликните на везу у имејлу да потврдите свој налог. Молимо проверите и спам фасциклу ако нисте примили поруку. update_needs_confirmation: Успешно сте ажурирали свој налог, али морамо да верификујемо вашу нову адресу е-поште. Проверите своју е-пошту и пратите везу за потврду да бисте потврдили нову адресу е-поште. Проверите своју фасциклу нежељене поште ако нисте примили ову е-пошту. updated: Ваш налог је успешно ажуриран. sessions: diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml index 1e14a7de52..1808cfee5e 100644 --- a/config/locales/devise.sv.yml +++ b/config/locales/devise.sv.yml @@ -94,11 +94,6 @@ sv: updated_not_active: Ditt lösenord har ändrats. Du är nu inloggad. registrations: destroyed: Adjö! Ditt konto har blivit nedstängt. Vi hoppas att vi snart ses igen. - signed_up: Välkommen! Du har nu registrerat dig. - signed_up_but_inactive: Du har nu registrerat dig. Vi kunde dock inte logga in dig eftersom ditt konto ännu inte är aktiverat. - signed_up_but_locked: Du har nu registrerat dig. Vi kunde dock inte logga in eftersom ditt konto är låst. - signed_up_but_pending: Ett meddelande med en bekräftelselänk har skickats till din e-postadress. När du klickar på länken kommer vi att granska din ansökan. Du kommer att meddelas om den godkänns. - signed_up_but_unconfirmed: Ett meddelande med en bekräftelselänk har skickats till din e-postadress. Vänligen följ länken för att aktivera ditt konto. Kontrollera din skräppostmapp om du inte fick det här e-postmeddelandet. update_needs_confirmation: Du har uppdaterat ditt konto, men vi måste verifiera din nya e-postadress. Vänligen kolla din e-post och följ bekräfta-länken för att bekräfta din nya e-postadress. Kontrollera din skräppost om du inte fick e-postmeddelandet. updated: Ditt konto har uppdaterats utan problem. sessions: diff --git a/config/locales/devise.ta.yml b/config/locales/devise.ta.yml index a0e6187ec4..76fb45c7c1 100644 --- a/config/locales/devise.ta.yml +++ b/config/locales/devise.ta.yml @@ -69,11 +69,6 @@ ta: updated_not_active: உங்கள் கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது. registrations: destroyed: நன்றி! தங்கள் கணக்கு வெற்றிகரமாக ரத்து செய்யப்பட்டது. தங்கள் வருகையை மீண்டும் எதிர்நோக்கியிருக்கிறோம். - signed_up: வருக! நீங்கள் வெற்றிகரமாகப் பதிவுசெய்துவிட்டீர்கள். - signed_up_but_inactive: நீங்கள் வெற்றிகரமாகப் பதிவுசெய்துவிட்டீர்கள். ஆனால், உங்கள் கணக்கு இன்னும் செயல்படுத்தப்படாததால், உங்களை உள்நுழைக்க இயலவில்லை. - signed_up_but_locked: நீங்கள் வெற்றிகரமாகப் பதிவுசெய்துவிட்டீர்கள். ஆனால், உங்கள் கணக்கு பூட்டப்பட்டுள்ளதால், உங்களை உள்நுழைக்க இயலவில்லை. - signed_up_but_pending: உங்கள் மின்னஞ்சல் முகவரிக்கு ஒரு உறுதிபடுத்தும் சுட்டி அனுப்பப்பட்டுள்ளது. அந்த சுட்டியை நீங்கள் கிளிக் செய்தவுடன் உங்களின் விண்ணப்பத்தை நாங்கள் பரிசீலிப்போம். விண்ணப்பம் அங்கீகரிக்கப்பட்டால் உங்களுக்குத் தெரிவிக்கப்படும். - signed_up_but_unconfirmed: உங்கள் மின்னஞ்சல் முகவரிக்கு ஒரு உறுதிபடுத்தும் சுட்டி அனுப்பப்பட்டுள்ளது. உங்கள் கணக்கை செயல்படுத்த அந்த சுட்டியை தயவுசெய்து கிளிக் செய்யவும். மின்னஞ்சலை நீங்கள் பெறவில்லை எனில், தயைகூர்ந்து ஸ்பேம் பெட்டியில் பார்க்கவும். update_needs_confirmation: உங்கள் கணக்கு வெற்றிகரமாகத் திருத்தப்பட்டது. ஆனால், உங்கள் புதிய மின்னஞ்சல் முகவரியை நாங்கள் உறுதிசெய்ய வேண்டும். உங்கள் மின்னஞ்சல் முகவரிக்கு அனுப்பப்பட்டுள்ள உறுதிபடுத்தும் சுட்டியை தயவுசெய்து கிளிக் செய்யவும். மின்னஞ்சலை நீங்கள் பெறவில்லை எனில், தயைகூர்ந்து ஸ்பேம் பெட்டியில் பார்க்கவும். updated: உங்கள் கணக்கு வெற்றிகரமாகத் திருத்தப்பட்டது. sessions: diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index 50e2e4b29e..4909b50129 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -94,11 +94,6 @@ th: updated_not_active: เปลี่ยนรหัสผ่านของคุณสำเร็จ registrations: destroyed: ลาก่อน! ยกเลิกบัญชีของคุณสำเร็จ เราหวังว่าจะได้พบคุณอีกในเร็ว ๆ นี้ - signed_up: ยินดีต้อนรับ! คุณได้ลงทะเบียนสำเร็จ - signed_up_but_inactive: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตาม เราไม่สามารถลงชื่อคุณเข้าได้เนื่องจากยังไม่ได้เปิดใช้งานบัญชีของคุณ - signed_up_but_locked: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตาม เราไม่สามารถลงชื่อคุณเข้าได้เนื่องจากมีการล็อคบัญชีของคุณอยู่ - signed_up_but_pending: ส่งข้อความพร้อมลิงก์การยืนยันไปยังที่อยู่อีเมลของคุณแล้ว หลังจากคุณคลิกลิงก์ เราจะตรวจทานใบสมัครของคุณ คุณจะได้รับการแจ้งเตือนหากมีการอนุมัติใบสมัคร - signed_up_but_unconfirmed: ส่งข้อความพร้อมลิงก์การยืนยันไปยังที่อยู่อีเมลของคุณแล้ว โปรดไปตามลิงก์เพื่อเปิดใช้งานบัญชีของคุณ โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ update_needs_confirmation: คุณได้อัปเดตบัญชีของคุณสำเร็จ แต่เราจำเป็นต้องยืนยันที่อยู่อีเมลใหม่ของคุณ โปรดตรวจสอบอีเมลของคุณและไปตามลิงก์การยืนยันเพื่อยืนยันที่อยู่อีเมลใหม่ของคุณ โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ updated: อัปเดตบัญชีของคุณสำเร็จ sessions: diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index e709d3fff1..57162e8055 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -94,11 +94,6 @@ tr: updated_not_active: Parolanız başarıyla değiştirildi. registrations: destroyed: Görüşürüz! hesabın başarıyla iptal edildi. Umarız seni sonra tekrar görürüz. - signed_up: Hoş geldiniz! Başarılı bir şekilde oturum açtınız. - signed_up_but_inactive: Başarıyla kaydoldun. Ancak, seni içeri alamıyoruz çünkü hesabın henüz aktif değil. - signed_up_but_locked: Başarıyla kaydoldun. Ancak, seni içeri alamıyoruz çünkü hesabın kilitli. - signed_up_but_pending: Onay bağlantısına sahip bir mesaj e-posta adresinize gönderildi. Bağlantıyı tıkladıktan sonra başvurunuzu inceleyeceğiz. Onaylanması durumunda size bilgi verilecektir. - signed_up_but_unconfirmed: Onay bağlantısına sahip bir mesaj e-posta adresinize gönderildi. Lütfen hesabınızı etkinleştirmek için bağlantıyı takip edin. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. update_needs_confirmation: Hesabınızı başarıyla güncellediniz, ancak yeni e-posta adresinizi doğrulamamız gerekiyor. Lütfen e-postanızı kontrol edin ve yeni e-posta adresinizi onaylamak için onay bağlantısını izleyin. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. updated: Hesabınız başarıyla güncellendi. sessions: diff --git a/config/locales/devise.tt.yml b/config/locales/devise.tt.yml index 8757bcc033..b9ac2e09f6 100644 --- a/config/locales/devise.tt.yml +++ b/config/locales/devise.tt.yml @@ -16,7 +16,6 @@ tt: updated: Серсүзегез уңышлы үзгәртелде. Сез хәзер кердегез. updated_not_active: Серсүзегез уңышлы үзгәртелде. registrations: - signed_up: Рәхим итегез! Сез уңышлы теркәлдегез. updated: Хисабыгыз уңышлы яңартылды. sessions: already_signed_out: Уңышлы чыккансыз. diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml index 65e89a274f..7ede7a96c2 100644 --- a/config/locales/devise.uk.yml +++ b/config/locales/devise.uk.yml @@ -94,11 +94,6 @@ uk: updated_not_active: Ваш пароль було успішно змінено. registrations: destroyed: До побачення! Ваш обліковий запис було успішно видалено. Сподіваємось, Ви скоро повернетеся. - signed_up: Ласкаво просимо! Ви були успішно зареєстровані. - signed_up_but_inactive: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис ще не активовано. - signed_up_but_locked: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис заблокований. - signed_up_but_pending: Лист з посиланням для підтвердження було надіслано на вашу електронну пошту. Коли ви перейдете за цим посиланням, ми розглянемо ваш запит. Вас буде проінформовано, якщо запит буде схвалено. - signed_up_but_unconfirmed: Повідомлення з посиланням на підтвердження будо відправлено на вашу адресу електронної пошти. Будь ласка, перейдіть за посиланням, щоб активувати ваш обліковий запис. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. update_needs_confirmation: Ваш обліковий запис оновлено, але необхідно підтвердити нову адресу електронної пошти. Будь ласка, перевірте свою електронну скриньку і перейдіть за посиланням "Підтвердити", шоб завершити оновлення адреси електронної пошти. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. updated: Ваш обліковий запис було успішно оновлено. sessions: diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index 6ae78f83cc..28414fa485 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -94,11 +94,6 @@ vi: updated_not_active: Mật khẩu của bạn đã được thay đổi thành công. registrations: destroyed: Tạm biệt! Tài khoản của bạn đã bị hủy. Hi vọng chúng tôi sẽ sớm gặp lại bạn. - signed_up: Chúc mừng! Bạn đã đăng ký thành công. - signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, bạn cần phải kích hoạt tài khoản mới có thể đăng nhập. - signed_up_but_locked: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn bị khóa. - signed_up_but_pending: Một email xác minh đã được gửi đến địa chỉ email của bạn. Sau khi bạn nhấp vào liên kết, chúng tôi sẽ xem xét đơn đăng ký của bạn và thông báo nếu đơn được chấp thuận. - signed_up_but_unconfirmed: Một email xác minh đã được gửi đến địa chỉ email của bạn. Hãy nhấp vào liên kết trong email để kích hoạt tài khoản của bạn. Nếu không thấy, hãy kiểm tra mục thư rác. update_needs_confirmation: Bạn đã cập nhật tài khoản thành công, nhưng chúng tôi cần xác minh địa chỉ email mới của bạn. Vui lòng kiểm tra email và nhấp vào liên kết xác minh. Nếu bạn không thấy email, hãy kiểm tra trong thư rác. updated: Tài khoản của bạn đã được cập nhật thành công. sessions: diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index 1b5f364d08..77d8a404dc 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -23,7 +23,7 @@ zh-CN: action_with_app: 确认并返回%{app} explanation: 你在 %{host} 上使用此电子邮箱地址创建了一个账号。点击下面的链接即可激活账号。如果你没有创建账号,请忽略此邮件。 explanation_when_pending: 你用这个邮箱申请了在 %{host} 注册。在确认邮箱地址之后,我们会审核你的申请。在此之前,你不能登录。如果你的申请被驳回,你的数据会被移除,因此你无需再采取任何行动。如果申请人不是你,请忽略这封邮件。 - extra_html: 请记得阅读本实例的相关规定我们的使用条款。 + extra_html: 请记得阅读本实例的相关规定我们的服务条款。 subject: Mastodon:来自 %{instance} 的确认指引 title: 验证邮箱地址 email_changed: @@ -94,11 +94,6 @@ zh-CN: updated_not_active: 你的密码已修改成功。 registrations: destroyed: 再见!你的账户已成功注销。我们希望很快可以再见到你。 - signed_up: 欢迎!你已成功注册。 - signed_up_but_inactive: 你已成功注册,但我们无法让你登录,因为你的账户还没有激活。 - signed_up_but_locked: 你已成功注册,但我们无法让你登录,因为你的账户已被锁定。 - signed_up_but_pending: 一条带有确认链接的邮件已经发送到你的邮箱地址。在你点击该链接后,我们将会审核你的申请。如果申请被批准,你将收到通知。 - signed_up_but_unconfirmed: 一封带有确认链接的邮件已经发送至你的邮箱,请点击邮件中的链接以激活你的账户。如果没有,请检查你的垃圾邮件。 update_needs_confirmation: 账号信息更新成功,但我们需要验证你的新邮箱地址,请点击邮件中的链接以确认。如果没有收到邮件,请检查你的垃圾邮件文件夹。 updated: 账户资料更新成功。 sessions: diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml index a2620a8e4a..b9c5529d9f 100644 --- a/config/locales/devise.zh-HK.yml +++ b/config/locales/devise.zh-HK.yml @@ -94,11 +94,6 @@ zh-HK: updated_not_active: 你的密碼已經更新。 registrations: destroyed: 再見!你的帳號已被取消,希望日後能再見到你。 - signed_up: 歡迎你!你已經成功登記。 - signed_up_but_inactive: 你的登記已經成功,可是由於你的帳號還未被啟用,暫時還不能讓你登入。 - signed_up_but_locked: 你的登記已經成功,可是由於你的帳號已被鎖定,我們無法讓你登入。 - signed_up_but_pending: 確認連結已發送到你的電郵地址。在你點擊連結後,我們會審核你的申請。一旦通過審核,你將會收到進一步通知。 - signed_up_but_unconfirmed: 一條確認連結已經電郵到你的郵址。請使用讓連結啟用你的帳號。 update_needs_confirmation: 你的帳號已經更新,但我們需要確認你的電郵地址。請打開你的郵箱,使用確認電郵的連結來確認的地郵址。如果未能在收件箱找相關電郵指示,請檢查垃圾郵件箱。 updated: 你的帳號已經成功更新。 sessions: diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index fdbde86995..ca01b16591 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -94,11 +94,6 @@ zh-TW: updated_not_active: 您的密碼已成功變更。 registrations: destroyed: 再見!您的帳號已成功取消,期待再相逢。 - signed_up: 歡迎!您已成功註冊。 - signed_up_but_inactive: 您已註冊成功,但由於您的帳號尚未啟用,我們暫時無法讓您登入。 - signed_up_but_locked: 您已註冊成功,但由於您的帳號已被鎖定,我們無法讓您登入。 - signed_up_but_pending: 包含驗證連結的訊息已寄到您的電子郵件信箱。按下此連結後我們將審核您的申請。核准後將通知您。 - signed_up_but_unconfirmed: 包含驗證連結的訊息已寄至您的電子郵件信箱。請前往連結以啟用帳號。若未收到請檢查垃圾郵件資料夾。 update_needs_confirmation: 已成功更新您的帳號,但仍需驗證您的新電子郵件地址。請檢查電子郵件信箱並前往確認連結來確認新電子郵件地址。若未收到請檢查垃圾郵件資料夾。 updated: 您的帳號已成功更新。 sessions: diff --git a/config/locales/doorkeeper.az.yml b/config/locales/doorkeeper.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/doorkeeper.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/el.yml b/config/locales/el.yml index dd534d6b0b..44961b4b3e 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -962,6 +962,10 @@ el: statuses: allow: Να επιτρέπεται η ανάρτηση allow_account: Να επιτρέπεται ο συγγραφέας + confirm_allow: Σίγουρα θες να επιτρέψεις τις επιλεγμένες καταστάσεις; + confirm_allow_account: Σίγουρα θες να επιτρέψεις τους επιλεγμένους λογαριασμούς; + confirm_disallow: Σίγουρα θες να απορρίψεις τις επιλεγμένες καταστάσεις; + confirm_disallow_account: Σίγουρα θες να απορρίψεις τους επιλεγμένους λογαριασμούς; description_html: Αυτές είναι αναρτήσεις για τις οποίες ο διακομιστής σας γνωρίζει ότι κοινοποιούνται και αρέσουν πολύ αυτή τη περίοδο. Μπορεί να βοηθήσει νέους και χρήστες που επιστρέφουν, να βρουν περισσότερα άτομα να ακολουθήσουν. Καμία ανάρτηση δεν εμφανίζεται δημόσια μέχρι να εγκρίνεις τον συντάκτη και ο συντάκτης να επιτρέπει ο λογαριασμός του να προτείνεται και σε άλλους. Μπορείς επίσης να επιτρέψεις ή να απορρίψεις μεμονωμένες δημοσιεύσεις. disallow: Να μην επιτρέπεται η δημοσίευση disallow_account: Να μην επιτρέπεται ο συντάκτης @@ -1101,6 +1105,7 @@ el: hint_html: Και κάτι ακόμα! Πρέπει να επιβεβαιώσουμε ότι είσαι άνθρωπος (αυτό γίνεται για να κρατήσουμε μακριά το σπαμ!). Λύσε το CAPTCHA παρακάτω και κάνε κλικ "Συνέχεια". title: Ελεγχος ασφαλείας confirmations: + awaiting_review: Η διεύθυνση email σου επιβεβαιώθηκε! Το προσωπικό του %{domain} εξετάζει τώρα την εγγραφή σου. Θα λάβεις ένα email εάν εγκρίνουν τον λογαριασμό σου! awaiting_review_title: Η εγγραφή σου εξετάζεται clicking_this_link: κάνοντας κλικ σε αυτόν τον σύνδεσμο login_link: σύνδεση @@ -1108,6 +1113,7 @@ el: redirect_to_app_html: Θα πρέπει να μεταφέρθηκες στην εφαρμογή %{app_name}. Αν αυτό δεν συμβεί, δοκιμάσε το %{clicking_this_link} ή επέστρεψε χειροκίνητα στην εφαρμογή. registration_complete: Η εγγραφή σου στο %{domain} έχει πλέον ολοκληρωθεί! welcome_title: Καλώς ήρθες, %{name}! + wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού. delete_account: Διαγραφή λογαριασμού delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς να συνεχίσεις εδώ. Θα σου ζητηθεί επιβεβαίωση. description: @@ -1126,7 +1132,6 @@ el: migrate_account: Μεταφορά σε διαφορετικό λογαριασμό migrate_account_html: Αν θέλεις να ανακατευθύνεις αυτό τον λογαριασμό σε έναν διαφορετικό, μπορείς να το διαμορφώσεις εδώ. or_log_in_with: Ή συνδέσου με - privacy_policy_agreement_html: Έχω διαβάσει και συμφωνώ με την πολιτική απορρήτου progress: confirm: Επιβεβαίωση email details: Τα στοιχεία σας @@ -1150,19 +1155,21 @@ el: security: Ασφάλεια set_new_password: Ορισμός νέου συνθηματικού setup: - email_settings_hint_html: Πάτησε το σύνδεσμο που σου στείλαμε για να επαληθεύσεις το %{email}. Θα σε περιμένουμε εδώ. + email_below_hint_html: Έλεγξε τον φάκελο ανεπιθύμητης αλληλογραφίας ή ζήτα καινούργιο. Μπορείς να διορθώσεις τη διεύθυνση email σου αν είναι λάθος. link_not_received: Δεν έλαβες τον σύνδεσμο; + new_confirmation_instructions_sent: Θα λάβεις ένα νέο email με το σύνδεσμο επιβεβαίωσης σε λίγα λεπτά! title: Ελέγξτε τα εισερχόμενά σας sign_in: preamble_html: Συνδεθείτε με τα διαπιστευτήριά σας στον %{domain}. Αν ο λογαριασμός σας φιλοξενείται σε διαφορετικό διακομιστή, δε θα μπορείτε να συνδεθείτε εδώ. title: Συνδεθείτε στο %{domain} sign_up: manual_review: Οι εγγραφές στο %{domain} περνούν από χειροκίνητη αξιολόγηση από τους συντονιστές μας. Για να μας βοηθήσεις να επεξεργαστούμε την εγγραφή σου, γράψε λίγα λόγια για τον εαυτό σου και γιατί θέλεις έναν λογαριασμό στο %{domain}. - preamble: Με έναν λογαριασμό σ' αυτόν τον διακομιστή Mastodon, θα μπορείτε να ακολουθήσετε οποιοδήποτε άλλο άτομο στο δίκτυο, ανεξάρτητα από το πού φιλοξενείται ο λογαριασμός του. title: Ας ξεκινήσουμε τις ρυθμίσεις στο %{domain}. status: account_status: Κατάσταση λογαριασμού + confirming: Αναμονή για ολοκλήρωση επιβεβαίωσης του email. functional: Ο λογαριασμός σας είναι πλήρως λειτουργικός. + pending: Η εφαρμογή σου εκκρεμεί έγκρισης. Ίσως θα διαρκέσει κάποιο χρόνο. Θα λάβεις email αν εγκριθεί. redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}. self_destruct: Καθώς το %{domain} κλείνει, θα έχεις μόνο περιορισμένη πρόσβαση στον λογαριασμό σου. view_strikes: Προβολή προηγούμενων ποινών εναντίον του λογαριασμού σας @@ -1170,6 +1177,12 @@ el: use_security_key: Χρήση κλειδιού ασφαλείας author_attribution: example_title: Δείγμα κειμένου + hint_html: Γράφεις ειδήσεις ή blog άρθρα εκτός του Mastodon; Έλεγξε πώς μπορείς να πάρεις τα εύσημα όταν μοιράζονται στο Mastodon. + instructions: 'Βεβαιώσου ότι ο κώδικας αυτός είναι στο HTML του άρθρου σου:' + more_from_html: Περισσότερα από %{name} + s_blog: Ιστολόγιο του/της %{name} + then_instructions: Στη συνέχεια, πρόσθεσε το όνομα τομέα της δημοσίευσης στο παρακάτω πεδίο. + title: Αναφορά συγγραφέα challenge: confirm: Συνέχεια hint_html: "Συμβουλή: Δεν θα σου ζητήσουμε τον κωδικό ασφαλείας σου ξανά για την επόμενη ώρα." @@ -1206,6 +1219,9 @@ el: before: 'Πριν συνεχίσεις, παρακαλούμε να διαβάσεις τις παρακάτω σημειώσεις προσεκτικά:' caches: Περιεχόμενο που έχει αποθηκευτεί προσωρινά σε άλλους διακομιστές ίσως παραμείνει data_removal: Οι αναρτήσεις σου και άλλα δεδομένα θα διαγραφούν οριστικά + email_change_html: Μπορείς να αλλάξεις τη διεύθυνση email σου χωρίς να διαγράψεις το λογαριασμό σου + email_contact_html: Αν και πάλι δεν εμφανιστεί, μπορείς να στείλεις email στο %{email} για βοήθεια + email_reconfirmation_html: Αν δεν έχεις λάβει το email επιβεβαίωσης, μπορείς να το ζητήσεις ξανά irreversible: Δεν θα μπορείς να ανακτήσεις ή ενεργοποιήσεις ξανά το λογαριασμό σου more_details_html: Για περισσότερες πληροφορίες, δες την πολιτική απορρήτου. username_available: Το όνομα χρήστη σου θα γίνει ξανά διαθέσιμο @@ -1363,6 +1379,44 @@ el: merge_long: Διατήρηση των εγγράφων που υπάρχουν και προσθήκη των νέων overwrite: Αντικατάσταση overwrite_long: Αντικατάσταση των υπαρχόντων εγγράφων με τις καινούργιες + overwrite_preambles: + blocking_html: + one: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών με έως και %{count} λογαριασμό από το %{filename}. + other: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών με έως και %{count} λογαριασμούς από το %{filename}. + bookmarks_html: + one: Πρόκειται να αντικαταστήσεις τους σελιδοδείκτες σου με έως και %{count} ανάρτηση από το %{filename}. + other: Πρόκειται να αντικαταστήσεις τους σελιδοδείκτες σου με έως και %{count} αναρτήσεις από το %{filename}. + domain_blocking_html: + one: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών τομέων με έως και %{count} τομέα από το %{filename}. + other: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών τομέων με έως και %{count} τομείς από το %{filename}. + following_html: + one: Πρόκειται να ακολουθήσεις μέχρι %{count} λογαριασμό από το %{filename} και να σταματήσεις να ακολουθείς οποιονδήποτε άλλο. + other: Πρόκειται να ακολουθήσεις μέχρι %{count} λογαριασμούς από το %{filename} και να σταματήσεις να ακολουθείς οποιονδήποτε άλλο. + lists_html: + one: Πρόκειται να αντικαταστήσεις τις λίστες σου με περιεχόμενο του %{filename}. Μέχρι %{count} λογαριασμός θα προστεθεί σε νέες λίστες. + other: Πρόκειται να αντικαταστήσεις τις λίστες σου με περιεχόμενο του %{filename}. Μέχρι %{count} λογαριασμοί θα προστεθούν σε νέες λίστες. + muting_html: + one: Πρόκειται να αντικαταστήσεις τη λίστα λογαριασμών σε σίγαση με έως και %{count} λογαριασμό από το %{filename}. + other: Πρόκειται να αντικαταστήσεις τη λίστα λογαριασμών σε σίγαση με έως και %{count} λογαριασμούς από το %{filename}. + preambles: + blocking_html: + one: Πρόκειται να αποκλείσεις έως και %{count} λογαριασμό από το %{filename}. + other: Πρόκειται να αποκλείσεις έως και %{count} λογαριασμούς από το %{filename}. + bookmarks_html: + one: Πρόκειται να προσθέσεις μέχρι και %{count} ανάρτηση από το %{filename} στους σελιδοδείκτες σου. + other: Πρόκειται να προσθέσεις μέχρι και %{count} αναρτήσεις από το %{filename} στους σελιδοδείκτες σου. + domain_blocking_html: + one: Πρόκειται να αποκλείσεις έως και %{count} τόμεα από το %{filename}. + other: Πρόκειται να αποκλείσεις έως και %{count} τομείς από το %{filename}. + following_html: + one: Πρόκειται να ακολουθήσεις έως και %{count} λογαριασμό από το %{filename}. + other: Πρόκειται να ακολουθήσεις έως και %{count} λογαριασμούς από το %{filename}. + lists_html: + one: Πρόκειται να προσθέσεις μέχρι και %{count} λογαριασμό από το %{filename} στις λίστες σου. Θα δημιουργηθούν νέες λίστες αν δεν υπάρχει λίστα για προσθήκη. + other: Πρόκειται να προσθέσεις μέχρι και %{count} λογαριασμούς από το %{filename} στις λίστες σου. Θα δημιουργηθούν νέες λίστες αν δεν υπάρχει λίστα για προσθήκη. + muting_html: + one: Πρόκειται να κάνεις σίγαση σε έως και %{count} λογαριασμό από το %{filename}. + other: Πρόκειται να κάνεις σίγαση σε έως και %{count} λογαριασμούς από το %{filename}. preface: Μπορείς να εισάγεις τα δεδομένα που έχεις εξάγει από άλλο διακομιστή, όπως τη λίστα των ατόμων που ακολουθείς ή έχεις αποκλείσει. recent_imports: Πρόσφατες Εισαγωγές states: @@ -1379,8 +1433,10 @@ el: domain_blocking: Εισαγωγή αποκλεισμένων τομέων following: Εισαγωγή λογαριασμών που ακολουθείτε lists: Εισαγωγή λιστών + muting: Εισαγωγή λογαριασμών σε σίγαση type: Τύπος εισαγωγής type_groups: + constructive: Ακολουθείς & Σελιδοδείκτες destructive: Μπλοκ & σίγαση types: blocking: Λίστα αποκλεισμού @@ -1420,6 +1476,7 @@ el: authentication_methods: otp: εφαρμογή ταυτοποίησης δύο παραγόντων password: συνθηματικό + sign_in_token: κωδικός ασφαλείας email webauthn: κλειδιά ασφαλείας description_html: Αν δεις δραστηριότητα που δεν αναγνωρίζεις, σκεφτείς να αλλάξεις τον κωδικό πρόσβασής σου και να ενεργοποιήσεις τον έλεγχο ταυτότητας δύο παραγόντων. empty: Δεν υπάρχει διαθέσιμο ιστορικό ελέγχου ταυτότητας @@ -1430,10 +1487,21 @@ el: unsubscribe: action: Ναι, κατάργηση συνδρομής complete: Η συνδρομή καταργήθηκε + confirmation_html: Σίγουρα θες να καταργήσεις την εγγραφή σου για %{type} για το Mastodon στο %{domain} στο email σου %{email}; Μπορείς πάντα να εγγραφείς ξανά από τις ρυθμίσεις ειδοποιήσεων email. + emails: + notification_emails: + favourite: ειδοποιήσεις email για αγαπημένα + follow: ειδοποιήσεις email για ακολουθήσεις + follow_request: email για αιτήματα ακολούθησης + mention: ειδοποιήσεις email για επισημάνσεις + reblog: ειδοποιήσεις email για ενίσχυση + resubscribe_html: Αν έχεις καταργήσει την εγγραφή σου κατά λάθος, μπορείς να εγγραφείς εκ νέου από τις ρυθμίσεις ειδοποίησης email. + success_html: Δεν θα λαμβάνεις πλέον %{type} για το Mastodon στο %{domain} στο email σου στο %{email}. title: Κατάργηση συνδρομής media_attachments: validations: images_and_video: Δεν γίνεται να προσθέσεις βίντεο σε ανάρτηση που ήδη περιέχει εικόνες + not_found: Το πολυμέσο %{ids} δε βρέθηκε ή είναι ήδη συννημένο σε άλλη ανάρτηση not_ready: Δεν μπορούν να επισυναφθούν αρχεία για τα οποία δεν έχει τελειώσει η επεξεργασία. Προσπαθήστε ξανά σε λίγο! too_many: Δεν γίνεται να επισυνάψεις περισσότερα από 4 αρχεία migrations: @@ -1510,6 +1578,7 @@ el: update: subject: "%{name} επεξεργάστηκε μια ανάρτηση" notifications: + administration_emails: Ειδοποιήσεις email διαχειριστή email_events: Συμβάντα για ειδοποιήσεις μέσω email email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:' number: @@ -1545,6 +1614,7 @@ el: expired: Η δημοσκόπηση έχει ήδη λήξει invalid_choice: Αυτή η επιλογή ψήφου δεν υπάρχει over_character_limit: δε μπορεί να υπερβαίνει τους %{max} χαρακτήρες έκαστη + self_vote: Δεν μπορείς να ψηφίσεις στις δικές σου δημοσκοπήσεις too_few_options: πρέπει να έχει περισσότερες από μια επιλογές too_many_options: δεν μπορεί να έχει περισσότερες από %{max} επιλογές preferences: @@ -1552,8 +1622,14 @@ el: posting_defaults: Προεπιλογές ανάρτησης public_timelines: Δημόσιες ροές privacy: + hint_html: "Παραμετροποίησε πώς θες το προφίλ και οι αναρτήσεις σου να ανακαλύπτονται.. Μια ποικιλία δυνατοτήτων στο Mastodon μπορούν να σε βοηθήσουν να απευθυνθείς σε μεγαλύτερο κοινό όταν ενεργοποιηθούν. Αφιέρωσε μερικά λεπτά για να εξετάσεις τις ρυθμίσεις και να σιγουρευτείς ότι σου ταιριάζουν." privacy: Απόρρητο + privacy_hint_html: "'Έλεγξε πόσο θες να αποκαλύπτεις προς όφελος των άλλων. Οι άνθρωποι ανακαλύπτουν ενδιαφέροντα προφίλ και εφαρμογές με την περιήγηση των ακολούθων άλλων ατόμων και βλέποντας από ποιες εφαρμογές δημοσιεύουν, αλλά μπορεί να προτιμάς να το κρατάς κρυφό." + reach: Προσιτότητα + reach_hint_html: Έλεγξε αν θες να ανακαλύπτεσαι και να ακολουθείσαι από καινούρια άτομα. Θες οι αναρτήσεις σου να εμφανίζονται στην οθόνη Εξερεύνηση; Θες άλλα άτομα να σε βλέπουν στις προτάσεις ακολούθησής τους; Θες να αποδέχεσαι όλους τους νέους ακολούθους αυτόματα ή να έχεις εξονυχιστικό έλεγχο στο καθένα; search: Αναζήτηση + search_hint_html: Έλεγξε πώς θες να σε βρίσκουν. Θες οι χρήστες να σε βρουν από ό,τι έχεις αναρτήσει δημόσια; Θες άτομα εκτός Mastodon να βρουν το προφίλ σου κατά την αναζήτηση στο διαδίκτυο; Λάβε υπόψη ότι ο πλήρης αποκλεισμός από όλες τις μηχανές αναζήτησης δεν μπορεί να διασφαλιστεί για δημόσια ενημέρωση. + title: Ιδιωτικότητα και προσιτότητα privacy_policy: title: Πολιτική Απορρήτου reactions: @@ -1597,6 +1673,7 @@ el: scheduled_statuses: over_daily_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων για εκείνη τη μέρα over_total_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων + too_soon: η ημερομηνία πρέπει να είναι στο μέλλον self_destruct: lead_html: Δυστυχώς, το %{domain} κλείνει οριστικά. Αν είχατε λογαριασμό εκεί, δεν θα μπορείτε να συνεχίσετε τη χρήση του, αλλά μπορείτε ακόμα να ζητήσετε ένα αντίγραφο ασφαλείας των δεδομένων σας. title: Αυτός ο διακομιστής κλείνει οριστικά @@ -1665,6 +1742,7 @@ el: preferences: Προτιμήσεις profile: Προφίλ relationships: Ακολουθείς και σε ακολουθούν + severed_relationships: Αποκομμένες σχέσεις statuses_cleanup: Αυτοματοποιημένη διαγραφή αναρτήσεων strikes: Παραπτώματα από ομάδα συντονισμού two_factor_authentication: Πιστοποίηση 2 παραγόντων @@ -1674,6 +1752,11 @@ el: event_type: account_suspension: Αναστολή λογαριασμού (%{target_name}) domain_block: Αναστολή διακομιστή (%{target_name}) + user_domain_block: Απέκλεισες τον χρήστη %{target_name} + lost_followers: Χαμένοι ακόλουθοι + lost_follows: Χαμένες ακολουθήσεις + preamble: Μπορεί να χάσεις ακολουθήσεις και ακόλουθους όταν αποκλείεις έναν τομέα ή όταν οι συντονιστές σου αποφασίζουν να αναστείλουν έναν απομακρυσμένο διακομιστή. Όταν συμβεί αυτό, θα είσαι σε θέση να κατεβάσεις λίστες των αποκομμένων σχέσεων, για να επιθεωρούνται και ενδεχομένως να εισάγονται σε άλλο διακομιστή. + purged: Πληροφορίες σχετικά με αυτόν τον διακομιστή έχουν εκκαθαριστεί από τους διαχειριστές του διακομιστή σου. type: Συμβάν statuses: attached: @@ -1764,6 +1847,10 @@ el: month: "%b %Y" time: "%H:%M" with_time_zone: "%d %b %Y, %H:%M %Z" + translation: + errors: + quota_exceeded: Υπέρβαση του ορίου χρήσης για την υπηρεσία μετάφρασης για ολόκληρο τον διακομιστή. + too_many_requests: Υπήρξαν πάρα πολλά αιτήματα προς την υπηρεσία μετάφρασης τελευταία. two_factor_authentication: add: Προσθήκη disable: Απενεργοποίηση 2FA @@ -1797,6 +1884,9 @@ el: subject: Το αρχείο σου είναι έτοιμο για λήψη title: Λήψη εφεδρικού αρχείου failed_2fa: + details: 'Εδώ είναι οι λεπτομέρειες της προσπάθειας σύνδεσης:' + explanation: Κάποιος έχει προσπαθήσει να εισέλθει στον λογαριασμό σου, αλλά παρείχε έναν μη έγκυρο δεύτερο παράγοντα ελέγχου ταυτότητας. + further_actions_html: Αν δεν ήσουν εσύ, σου συνιστούμε να %{action} αμέσως, καθώς μπορεί να έχει εκτεθεί. subject: Αποτυχία ταυτοποίησης δεύτερου παράγοντα title: Αποτυχία ελέγχου ταυτότητας δεύτερου παράγοντα suspicious_sign_in: @@ -1851,8 +1941,29 @@ el: feature_action: Μάθε περισσότερα feature_audience: Το Mastodon σού παρέχει μια μοναδική δυνατότητα διαχείρισης του κοινού σου χωρίς μεσάζοντες. Το Mastodon όταν αναπτύσσεται στη δική σου υποδομή σού επιτρέπει να ακολουθείς και να ακολουθείσαι από οποιονδήποτε άλλο συνδεδεμένο διακομιστή Mastodon και κανείς δεν τον ελέγχει, εκτός από σένα. feature_audience_title: Χτίσε το κοινό σου με σιγουριά + feature_control: Εσύ ξέρεις καλύτερα τι θες να βλέπεις στην αρχική σου ροή. Δεν υπάρχουν αλγόριθμοι ή διαφημίσεις για να σπαταλάς το χρόνο σου. Ακολούθησε οποιονδήποτε σε οποιονδήποτε διακομιστή Mastodon από έναν λογαριασμό και δες τις αναρτήσεις τους με χρονολογική σειρά και κάνε τη δική σου γωνιά του ίντερνετ, λίγο πιο προσωπική. + feature_control_title: Διατήρησε τον έλεγχο της ροής σου + feature_creativity: Το Mastodon υποστηρίζει αναρτήσεις ήχου, βίντεο και εικόνας, περιγραφές για προσβασιμότητα, δημοσκοπήσεις, προειδοποιήσεις περιεχομένου, κινούμενα άβαταρ, προσαρμοσμένα εμότζι, έλεγχος περικοπής μικρογραφιών και πολλά άλλα, για να σε βοηθήσει να εκφραστείς στο διαδίκτυο. Είτε δημοσιεύεις την τέχνη σου, είτε τη μουσική σου, είτε το podcast σου, το Mastodon είναι εκεί για σένα. + feature_creativity_title: Ασύγκριτη δημιουργικότητα + feature_moderation: Το Mastodon δίνει την λήψη αποφάσεων πίσω σε σένα. Κάθε διακομιστής δημιουργεί τους δικούς του κανόνες και κανονισμούς, οι οποίοι επιβάλλονται τοπικά και όχι από πάνω προς τα κάτω όπως τα εταιρικά μέσα κοινωνικής δικτύωσης, καθιστώντας την πιο ευέλικτη στην ανταπόκριση στις ανάγκες των διαφορετικών ομάδων ανθρώπων. Γίνε μέλος σε έναν διακομιστή με τους κανόνες που συμφωνείς ή δημιούργησε τον δικό σου. + feature_moderation_title: Συντονισμός όπως θα έπρεπε + follow_action: Ακολούθησε + follow_step: Το να ακολουθείς ενδιαφέροντα άτομα είναι όλη η ουσία του Mastodon. + follow_title: Προσάρμοσε την αρχική ροή σου + follows_subtitle: Ακολουθήστε γνωστούς λογαριασμούς + follows_title: Ποιον να ακολουθήσεις + follows_view_more: Δες περισσότερα άτομα για να ακολουθήσεις + hashtags_recent_count: + one: "%{people} άτομο τις τελευταίες 2 ημέρες" + other: "%{people} άτομα τις τελευταίες 2 ημέρες" + hashtags_subtitle: Εξερεύνησε τις τάσεις των τελευταίων 2 ημερών + hashtags_title: Ετικέτες σε τάση + hashtags_view_more: Δες περισσότερες ετικέτες σε τάση post_action: Σύνθεση + post_step: Πες γεια στον κόσμο με κείμενο, φωτογραφίες, βίντεο ή δημοσκοπήσεις. + post_title: Κάνε την πρώτη σου ανάρτηση share_action: Κοινοποίηση + share_step: Πες στους φίλους σου πώς να σε βρουν στο Mastodon. share_title: Μοιραστείτε το προφίλ σας στο Mastodon sign_in_action: Σύνδεση subject: Καλώς ήρθες στο Mastodon @@ -1862,9 +1973,14 @@ el: go_to_sso_account_settings: Πήγαινε στις ρυθμίσεις λογαριασμού του παρόχου ταυτότητας σου invalid_otp_token: Άκυρος κωδικός πιστοποίησης 2 παραγόντων otp_lost_help_html: Αν χάσεις πρόσβαση και στα δύο, μπορείς να επικοινωνήσεις με %{email} + rate_limited: Πάρα πολλές προσπάθειες ελέγχου ταυτότητας, προσπάθησε ξανά αργότερα. + seamless_external_login: Επειδή έχεις συνδεθεί μέσω τρίτης υπηρεσίας, οι ρυθμίσεις συνθηματικού και email δεν είναι διαθέσιμες. signed_in_as: 'Έχεις συνδεθεί ως:' verification: + extra_instructions_html: Συμβουλή: Ο σύνδεσμος στην ιστοσελίδα σου μπορεί να είναι αόρατος. Το σημαντικό μέρος είναι το rel="me" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμη να χρησιμοποιήσεις μια ετικέτα συνδέσμου στην κεφαλίδα της σελίδας αντί για a, αλλά ο κώδικας HTML πρέπει να είναι προσβάσιμος χωρίς την εκτέλεση JavaScript. here_is_how: Δείτε πώς + hint_html: Η επαλήθευση της ταυτότητας στο Mastodon είναι για όλους. Βασισμένο σε ανοιχτά πρότυπα ιστού, τώρα και για πάντα δωρεάν. Το μόνο που χρειάζεσαι είναι μια προσωπική ιστοσελίδα που ο κόσμος να σε αναγνωρίζει από αυτή. Όταν συνδέεσαι σε αυτήν την ιστοσελίδα από το προφίλ σου, θα ελέγξουμε ότι η ιστοσελίδα συνδέεται πίσω στο προφίλ σου και θα δείξει μια οπτική ένδειξη σε αυτό. + instructions_html: Αντέγραψε και επικόλλησε τον παρακάτω κώδικα στην HTML της ιστοσελίδας σου. Στη συνέχεια, πρόσθεσε τη διεύθυνση της ιστοσελίδας σου σε ένα από τα επιπλέον πεδία στο προφίλ σου από την καρτέλα "Επεξεργασία προφίλ" και αποθήκευσε τις αλλαγές. verification: Πιστοποίηση verified_links: Οι επαληθευμένοι σύνδεσμοι σας website_verification: Επαλήθευση ιστοτόπου diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index b08ce82368..20f134c959 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1132,7 +1132,6 @@ en-GB: migrate_account: Move to a different account migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. or_log_in_with: Or log in with - privacy_policy_agreement_html: I have read and agree to the privacy policy progress: confirm: Confirm email details: Your details @@ -1157,7 +1156,6 @@ en-GB: set_new_password: Set new password setup: email_below_hint_html: Check your spam folder, or request another one. You can correct your email address if it's wrong. - email_settings_hint_html: Click the link we sent you to verify %{email}. We'll wait right here. link_not_received: Didn't get a link? new_confirmation_instructions_sent: You will receive a new email with the confirmation link in a few minutes! title: Check your inbox @@ -1166,7 +1164,6 @@ en-GB: title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status diff --git a/config/locales/en.yml b/config/locales/en.yml index 43db925d49..26697b5792 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -222,6 +222,7 @@ en: force_sensitive_status: Add Sensitive Flag to Post memorialize_account: Memorialize Account promote_user: Promote User + publish_terms_of_service: Publish Terms of Service reject_appeal: Reject Appeal reject_remote_account: Reject Remote Account reject_user: Reject User @@ -290,6 +291,7 @@ en: force_sensitive_status_html: "%{name} turned post by %{target} sensitive" memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page" promote_user_html: "%{name} promoted user %{target}" + publish_terms_of_service_html: "%{name} published updates to the terms of service" reject_appeal_html: "%{name} rejected moderation decision appeal from %{target}" reject_remote_account_html: "%{name} rejected %{target} join on this server" reject_user_html: "%{name} rejected sign-up from %{target}" @@ -1189,6 +1191,35 @@ en: search: Search title: Hashtags updated_msg: Hashtag settings updated successfully + terms_of_service: + back: Back to terms of service + changelog: What's changed + create: Use your own + current: Current + draft: Draft + generate: Use template + generates: + action: Generate + chance_to_review_html: "The generated terms of service will not be published automatically. You will have a chance to review the results. Please fill in the necessary details to proceed." + explanation_html: The terms of service template provided is for informational purposes only, and should not be construed as legal advice on any subject matter. Please consult with your own legal counsel on your situation and specific legal questions you have. + title: Terms of Service Setup + history: History + live: Live + no_history: There are no recorded changes of the terms of service yet. + no_terms_of_service_html: You don't currently have any terms of service configured. Terms of service are meant to provide clarity and protect you from potential liabilities in disputes with your users. + notified_on_html: Users notified on %{date} + notify_users: Notify users + preview: + explanation_html: 'The email will be sent to %{display_count} users who have signed up before %{date}. The following text will be included in the e-mail:' + send_preview: Send preview to %{email} + send_to_all: + one: Send %{display_count} email + other: Send %{display_count} emails + title: Preview terms of service notification + publish: Publish + published_on_html: Published on %{date} + save_draft: Save draft + title: Terms of Service title: Administration trends: allow: Allow @@ -1424,7 +1455,6 @@ en: migrate_account: Move to a different account migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. or_log_in_with: Or log in with - privacy_policy_agreement_html: I have read and agree to the privacy policy progress: confirm: Confirm email details: Your details @@ -1452,7 +1482,7 @@ en: set_new_password: Set new password setup: email_below_hint_html: Check your spam folder, or request another one. You can correct your email address if it's wrong. - email_settings_hint_html: Click the link we sent you to verify %{email}. We'll wait right here. + email_settings_hint_html: Click the link we sent to %{email} to begin using Mastodon. We'll wait right here. link_not_received: Didn't get a link? new_confirmation_instructions_sent: You will receive a new email with the confirmation link in a few minutes! title: Check your inbox @@ -1461,7 +1491,7 @@ en: title: Login to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted. + preamble: With an account on this Mastodon server, you'll be able to follow any other person on the fediverse, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status @@ -1473,6 +1503,7 @@ en: view_strikes: View past strikes against your account too_fast: Form submitted too fast, try again. use_security_key: Use security key + user_agreement_html: I have read and agree to the terms of service and privacy policy with_login_options: Will you disable your custom css? author_attribution: example_title: Sample text @@ -2208,6 +2239,8 @@ en: too_late: It is too late to appeal this strike tags: does_not_match_previous_name: does not match the previous name + terms_of_service: + title: Terms of Service themes: contrast: Mastodon (High contrast) default: Mastodon (Dark) @@ -2269,6 +2302,15 @@ en: further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure. subject: Your account has been accessed from a new IP address title: A new sign-in + terms_of_service_changed: + agreement: By continuing to use %{domain}, you are agreeing to these terms. If you disagree with the updated terms, you may terminate your agreement with %{domain} at any time by deleting your account. + changelog: 'At a glance, here is what this update means for you:' + description: 'You are receiving this e-mail because we''re making some changes to our terms of service at %{domain}. We encourage you to review the updated terms in full here:' + description_html: You are receiving this e-mail because we're making some changes to our terms of service at %{domain}. We encourage you to review the updated terms in full here. + sign_off: The %{domain} team + subject: Updates to our terms of service + subtitle: The terms of service of %{domain} are changing + title: Important update warning: appeal: Submit an appeal appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}. diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 7e454ddcf4..912de854c6 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -214,6 +214,7 @@ eo: enable_user: Ebligi uzanton memorialize_account: Memorigu Konton promote_user: Promocii Uzanton + publish_terms_of_service: Publikigi kondiĉojn de uzado reject_appeal: Malaprobi Apelacion reject_user: Malakcepti Uzanton remove_avatar_user: Forigi la profilbildon @@ -925,6 +926,23 @@ eo: search: Serĉi title: Kradvortoj updated_msg: Kradvorto agordoj ĝisdatigis sukcese + terms_of_service: + back: Reen al kondiĉoj de uzado + changelog: Kio ŝanĝiĝis + create: Uzu viajn proprajn + current: Nuna + draft: Malneto + generate: Uzi ŝablonon + generates: + title: Agordo de kondiĉoj de uzado + preview: + send_to_all: + one: Sendi %{display_count} retpoŝton + other: Sendi %{display_count} retpoŝtojn + publish: Publikigi + published_on_html: Publikigita je %{date} + save_draft: Konservi malneton + title: Kondiĉoj de uzado title: Administrado trends: allow: Permesi @@ -1132,7 +1150,6 @@ eo: migrate_account: Movi al alia konto migrate_account_html: Se vi deziras alidirekti ĉi tiun konton al alia, vi povas agordi ĝin ĉi tie. or_log_in_with: Aŭ saluti per - privacy_policy_agreement_html: Mi legis kaj konsentis pri privatpolitiko progress: confirm: Konfirmi retadreson details: Viaj detaloj @@ -1157,7 +1174,6 @@ eo: set_new_password: Elekti novan pasvorton setup: email_below_hint_html: Kontrolu vian spam-dosierujon aŭ petu novan. Se necese, vi povas korekti vian retadreson. - email_settings_hint_html: Enklaku la ligilon, ke ni sendis al vi por kontroli %{email}. Ni estos tien. link_not_received: Ĉu vi ne ricevis ligilon? new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj! title: Kontrolu vian retpoŝta enirkesto @@ -1166,7 +1182,7 @@ eo: title: Saluti en %{domain} sign_up: manual_review: Enskriboj en %{domain} havas manan superrigardon, farita de niaj moderistoj. Por helpi nin por procezi vian enskribon, skribu ion pri vi mem, kaj kial vi volas konton en %{domain}. - preamble: Per konto ĉe ĉi tiu Mastodon-servilo, vi povas sekvi ajn personojn en la reto. + preamble: Per konto ĉe ĉi tiu Mastodon-servilo, vi povos sekvi ajnan alian personon ĉe la fediverso, sendepende de kie ilia konto estas gastigita. title: Ni pretigu vin ĉe %{domain}. status: account_status: Statuso de la konto @@ -1499,7 +1515,7 @@ eo: follow: sciigoj retpoŝtaj de sekvoj follow_request: retpoŝtajn petoj de sekvado mention: sciigoj retpoŝtaj de mencioj - reblog: sciigoj retpoŝtaj de stimuloj + reblog: sciigoj retpoŝtaj de diskonigoj resubscribe_html: Se vi malabonis erare, vi povas reaboni de viaj retpoŝtaj sciigaj agordoj. success_html: Vi ne plu ricevos %{type} por Mastodon ĉe %{domain} al via retpoŝto ĉe %{email}. title: Malaboni @@ -1841,6 +1857,8 @@ eo: too_late: Estas tro malfrua por apelacii ĉi tiun admonon tags: does_not_match_previous_name: ne kongruas kun la antaŭa nomo + terms_of_service: + title: Kondiĉoj de uzado themes: contrast: Mastodon (Forta kontrasto) default: Mastodon (Malhela) @@ -1901,6 +1919,8 @@ eo: further_actions_html: Se ne estas vi, ni rekomendas ke vi %{action} tuj por sekurigi vian konton. subject: Via konto estas alirita de nova IP-adreso title: Nova saluto + terms_of_service_changed: + title: Grava ĝisdatigo warning: appeal: Sendi apelacion appeal_description: Se vi pensas ke ĉi tio estas eraro, vi povas sendi apelacion al la teamo de %{instance}. diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 5ea429f5cb..d9fa28a3a1 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -214,6 +214,7 @@ es-AR: enable_user: Habilitar usuario memorialize_account: Convertir en cuenta conmemorativa promote_user: Promover usuario + publish_terms_of_service: Publicar términos del servicio reject_appeal: Rechazar apelación reject_user: Rechazar usuario remove_avatar_user: Quitar avatar @@ -278,6 +279,7 @@ es-AR: enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa" promote_user_html: "%{name} promovió al usuario %{target}" + publish_terms_of_service_html: "%{name} ha publicado actualizaciones de los términos del servicio" reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}" reject_user_html: "%{name} rechazó el registro de %{target}" remove_avatar_user_html: "%{name} quitó el avatar de %{target}" @@ -925,6 +927,35 @@ es-AR: search: Buscar title: Etiquetas updated_msg: La configuración de la etiqueta se actualizó exitosamente + terms_of_service: + back: Volver a los términos del servicio + changelog: Qué ha cambiado + create: Usa los tuyos + current: Actual + draft: Borrador + generate: Usar plantilla + generates: + action: Generar + chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar." + explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas. + title: Configuración de términos del servicio + history: Historial + live: En vivo + no_history: Aún no se han registrado cambios en los términos del servicio. + no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios. + notified_on_html: Usuarios notificados el %{date} + notify_users: Notificar usuarios + preview: + explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:' + send_preview: Enviar vista previa a %{email} + send_to_all: + one: Enviar %{display_count} correo electrónico + other: Enviar %{display_count} correos electrónicos + title: Vista previa de la notificación de términos del servicios + publish: Publicar + published_on_html: Publicado el %{date} + save_draft: Guardar borrador + title: Términos del Servicio title: Administración trends: allow: Permitir @@ -1132,7 +1163,6 @@ es-AR: migrate_account: Mudarse a otra cuenta migrate_account_html: Si querés redireccionar esta cuenta a otra distinta, podés configurar eso acá. or_log_in_with: O iniciar sesión con - privacy_policy_agreement_html: Leí y acepto la política de privacidad progress: confirm: Confirmar correo electrónico details: Tus detalles @@ -1157,7 +1187,7 @@ es-AR: set_new_password: Establecer nueva contraseña setup: email_below_hint_html: Revisá tu carpeta de correo no deseado / spam, o solicitá otro enlace de confirmación. Podés corregir tu dirección de correo electrónico si está mal. - email_settings_hint_html: Hacé clic en el enlace que te enviamos para verificar %{email}. Te esperamos por acá. + email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo. link_not_received: "¿No recibiste un enlace?" new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisá tu bandeja de entrada @@ -1166,7 +1196,7 @@ es-AR: title: Iniciar sesión en %{domain} sign_up: manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribinos un poco sobre vos y contanos por qué querés una cuenta en %{domain}. - preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra cuenta en la red, independientemente de en qué servidor esté alojada esa cuenta. + preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en el fediverso, independientemente de dónde esté alojada su cuenta. title: Dejá que te preparemos en %{domain}. status: account_status: Estado de la cuenta @@ -1178,6 +1208,7 @@ es-AR: view_strikes: Ver incumplimientos pasados contra tu cuenta too_fast: Formulario enviado demasiado rápido, probá de nuevo. use_security_key: Usar la llave de seguridad + user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad author_attribution: example_title: Texto de ejemplo hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon." @@ -1839,6 +1870,8 @@ es-AR: too_late: Es demasiado tarde para apelar este incumplimiento tags: does_not_match_previous_name: no coincide con el nombre anterior + terms_of_service: + title: Términos del Servicio themes: contrast: Alto contraste default: Oscuro @@ -1899,6 +1932,15 @@ es-AR: further_actions_html: Si no fuiste vos, te recomendamos que %{action} inmediatamente y habilités la autenticación de dos factores para mantener tu cuenta segura. subject: Se accedió a tu cuenta desde una nueva dirección IP title: Un nuevo inicio de sesión + terms_of_service_changed: + agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta. + changelog: 'En resumen, esto es lo que esta actualización significa para ti:' + description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:' + description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí. + sign_off: El equipo de %{domain} + subject: Actualizaciones en nuestros términos del servicio + subtitle: Los términos del servicio de %{domain} están cambiando + title: Actualización importante warning: appeal: Enviar una apelación appeal_description: Si creés que esto es un error, podés enviar una apelación al equipo de %{instance}. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 3e0680aa61..6bdee869e7 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -214,6 +214,7 @@ es-MX: enable_user: Habilitar Usuario memorialize_account: Transformar en Cuenta Conmemorativa promote_user: Promover Usuario + publish_terms_of_service: Publicar condiciones del servicio reject_appeal: Rechazar apelación reject_user: Rechazar Usuario remove_avatar_user: Eliminar Avatar @@ -278,6 +279,7 @@ es-MX: enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" + publish_terms_of_service_html: "%{name} publicó actualizaciones de las condiciones del servicio" reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}" reject_user_html: "%{name} rechazó el registro de %{target}" remove_avatar_user_html: "%{name} eliminó el avatar de %{target}" @@ -925,6 +927,35 @@ es-MX: search: Buscar title: Etiquetas updated_msg: Etiquetas actualizadas exitosamente + terms_of_service: + back: Regresar a las condiciones del servicio + changelog: Lo que ha cambiado + create: Usa los tuyos + current: Actual + draft: Borrador + generate: Usar plantilla + generates: + action: Generar + chance_to_review_html: "Las condiciones de servicio generadas no se publicarán automáticamente. Tendrás la oportunidad de revisar los resultados. Por favor, rellena los datos necesarios para continuar." + explanation_html: La plantilla de condiciones de servicio que se proporciona tiene únicamente fines informativos y no debe interpretarse como asesoramiento jurídico sobre ningún tema. Por favor, consulte con su propio asesor legal sobre su situación y las cuestiones legales específicas que tenga. + title: Configuración de las condiciones del servicio + history: Historial + live: Actual + no_history: No se han registrado cambios en las condiciones del servicio hasta el momento. + no_terms_of_service_html: Actualmente, no tiene configuradas condiciones del servicio. Las condiciones del servicio están diseñadas para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios. + notified_on_html: Usuarios notificados el %{date} + notify_users: Notificar usuarios + preview: + explanation_html: 'El correo electrónico se enviará a %{display_count} usuarios que se hayan registrado antes de %{date}. En el correo electrónico se incluirá el siguiente texto:' + send_preview: Enviar vista previa a %{email} + send_to_all: + one: Enviar %{display_count} correo electrónico + other: Enviar %{display_count} correos electrónicos + title: Vista previa de la notificación de las condiciones del servicio + publish: Publicar + published_on_html: Publicado el %{date} + save_draft: Guardar borrador + title: Condiciones del servicio title: Administración trends: allow: Permitir @@ -1132,7 +1163,6 @@ es-MX: migrate_account: Mudarse a otra cuenta migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes configurarlo aquí. or_log_in_with: O inicia sesión con - privacy_policy_agreement_html: He leído y acepto la política de privacidad progress: confirm: Confirmar dirección de correo details: Tus detalles @@ -1157,7 +1187,7 @@ es-MX: set_new_password: Establecer nueva contraseña setup: email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal. - email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo. + email_settings_hint_html: Haz clic en el enlace que te enviamos a %{email} para comenzar a usar Mastodon. Te esperamos aquí. link_not_received: "¿No recibiste un enlace?" new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisa tu bandeja de entrada @@ -1166,7 +1196,7 @@ es-MX: title: Registrate en %{domain} sign_up: manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribe un poco sobre ti mismo y por qué quieres una cuenta en %{domain}. - preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en la red, independientemente del servidor en el que se encuentre. + preamble: Al tener una cuenta en este servidor de Mastodon, tendrás la oportunidad de seguir a cualquier persona en el fediverso, sin importar en qué plataforma esté alojada su cuenta. title: Crear cuenta de Mastodon en %{domain}. status: account_status: Estado de la cuenta @@ -1178,6 +1208,7 @@ es-MX: view_strikes: Ver amonestaciones pasadas contra tu cuenta too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo. use_security_key: Usar la clave de seguridad + user_agreement_html: He leído y acepto las condiciones del servicio y la política de privacidad author_attribution: example_title: Texto de ejemplo hint_html: "¿Estás escribiendo artículos de noticias o blogs fuera de Mastodon? Controla cómo te acreditan cuando se comparten en Mastodon." @@ -1839,6 +1870,8 @@ es-MX: too_late: Es demasiado tarde para apelar esta amonestación tags: does_not_match_previous_name: no coincide con el nombre anterior + terms_of_service: + title: Condiciones del servicio themes: contrast: Alto contraste default: Mastodon @@ -1899,6 +1932,15 @@ es-MX: further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. subject: Tu cuenta ha sido accedida desde una nueva dirección IP title: Un nuevo inicio de sesión + terms_of_service_changed: + agreement: Al seguir usando %{domain}, aceptas estas condiciones. Si no estás de acuerdo con las condiciones actualizadas, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta. + changelog: 'En pocas palabras, esto es lo que esta actualización implica para ti:' + description: 'Estás recibiendo este correo electrónico porque estamos realizando algunos cambios en nuestras condiciones del servicio en %{domain}. Te animamos a revisar las condiciones actualizadas en su totalidad aquí:' + description_html: Estás recibiendo este correo electrónico porque estamos realizando algunos cambios en nuestras condiciones del servicio en %{domain}. Te animamos a revisar las condiciones actualizadas en su totalidad aquí. + sign_off: El equipo de %{domain} + subject: Actualizaciones en nuestras condiciones del servicio + subtitle: Las condiciones del servicio de %{domain} han cambiado + title: Actualización importante warning: appeal: Enviar una apelación appeal_description: Si crees que esto es un error, puedes enviar una apelación al equipo de %{instance}. diff --git a/config/locales/es.yml b/config/locales/es.yml index 2984fbf2ad..5e3374ae8c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -214,6 +214,7 @@ es: enable_user: Habilitar Usuario memorialize_account: Transformar en Cuenta Conmemorativa promote_user: Promover Usuario + publish_terms_of_service: Publicar términos del servicio reject_appeal: Rechazar Apelación reject_user: Rechazar Usuario remove_avatar_user: Eliminar Avatar @@ -278,6 +279,7 @@ es: enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" + publish_terms_of_service_html: "%{name} ha publicado actualizaciones de los términos del servicio" reject_appeal_html: "%{name} rechazó la solicitud de moderación de %{target}" reject_user_html: "%{name} rechazó el registro de %{target}" remove_avatar_user_html: "%{name} eliminó el avatar de %{target}" @@ -925,6 +927,35 @@ es: search: Buscar title: Etiquetas updated_msg: La configuración de etiquetas se actualizó correctamente + terms_of_service: + back: Volver a los términos del servicio + changelog: Qué ha cambiado + create: Usa los tuyos + current: Actual + draft: Borrador + generate: Usar plantilla + generates: + action: Generar + chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar." + explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas. + title: Configuración de términos del servicio + history: Historial + live: En vivo + no_history: Aún no se han registrado cambios en los términos del servicio. + no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios. + notified_on_html: Usuarios notificados el %{date} + notify_users: Notificar usuarios + preview: + explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:' + send_preview: Enviar vista previa a %{email} + send_to_all: + one: Enviar %{display_count} correo electrónico + other: Enviar %{display_count} correos electrónicos + title: Vista previa de la notificación de términos del servicios + publish: Publicar + published_on_html: Publicado el %{date} + save_draft: Guardar borrador + title: Términos del Servicio title: Administración trends: allow: Permitir @@ -1132,7 +1163,6 @@ es: migrate_account: Mudarse a otra cuenta migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes configurarlo aquí. or_log_in_with: O inicia sesión con - privacy_policy_agreement_html: He leído y acepto la política de privacidad progress: confirm: Confirmar dirección de correo details: Tus detalles @@ -1157,7 +1187,7 @@ es: set_new_password: Establecer nueva contraseña setup: email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal. - email_settings_hint_html: Haz clic en el enlace que te hemos enviado para verificar %{email}. Te esperamos aquí. + email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo. link_not_received: "¿No recibiste un enlace?" new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisa tu bandeja de entrada @@ -1166,7 +1196,7 @@ es: title: Iniciar sesión en %{domain} sign_up: manual_review: Los registros en %{domain} pasan por la revisión manual de nuestros moderadores. Para ayudarnos a procesar tu registro, escribe un poco sobre ti mismo y por qué quieres una cuenta en %{domain}. - preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en la red, independientemente del servidor en el que se encuentre. + preamble: Con una cuenta en este servidor de Mastodon, podrás seguir a cualquier otra persona en el fediverso, independientemente de dónde esté alojada su cuenta. title: Crear cuenta de Mastodon en %{domain}. status: account_status: Estado de la cuenta @@ -1178,6 +1208,7 @@ es: view_strikes: Ver amonestaciones pasadas contra tu cuenta too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo. use_security_key: Usar la clave de seguridad + user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad author_attribution: example_title: Texto de ejemplo hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon." @@ -1839,6 +1870,8 @@ es: too_late: Es demasiado tarde para apelar esta amonestación tags: does_not_match_previous_name: no coincide con el nombre anterior + terms_of_service: + title: Términos del Servicio themes: contrast: Mastodon (alto contraste) default: Mastodon (oscuro) @@ -1899,6 +1932,15 @@ es: further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. subject: Tu cuenta ha sido accedida desde una nueva dirección IP title: Un nuevo inicio de sesión + terms_of_service_changed: + agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta. + changelog: 'En resumen, esto es lo que esta actualización significa para ti:' + description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:' + description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí. + sign_off: El equipo de %{domain} + subject: Actualizaciones en nuestros términos del servicio + subtitle: Los términos del servicio de %{domain} están cambiando + title: Actualización importante warning: appeal: Enviar una apelación appeal_description: Si crees que esto es un error, puedes enviar una apelación al personal de %{instance}. diff --git a/config/locales/et.yml b/config/locales/et.yml index ea4545ac42..2f182d08b2 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1117,7 +1117,6 @@ et: migrate_account: Teisele kontole ära kolimine migrate_account_html: Kui soovid konto siit ära kolida, saad seda teha siin. or_log_in_with: Või logi sisse koos - privacy_policy_agreement_html: Olen tutvunud isikuandmete kaitse põhimõtetega ja nõustun nendega progress: confirm: E-posti kinnitamine details: Sinu üksikasjad @@ -1142,7 +1141,6 @@ et: set_new_password: Uue salasõna määramine setup: email_below_hint_html: Kontrolli rämpsposti kausta või taotle uut. Saad oma e-posti aadressi parandada, kui see on vale. - email_settings_hint_html: Klõpsa linki, mis saadeti sulle, et kinnitada %{email}. Seni me ootame. link_not_received: Kas ei saanud linki? new_confirmation_instructions_sent: Saad mõne minuti pärast uue kinnituslingiga e-kirja! title: Kontrolli sisendkasti @@ -1151,7 +1149,6 @@ et: title: Logi sisse kohta %{domain} sign_up: manual_review: Liitumised kohas %{domain} vaadatakse meie moderaatorite poolt käsitsi läbi. Aitamaks meil sinu taotlust läbi vaadata, kirjuta palun natuke endast ja miks soovid kontot kohas %{domain}. - preamble: Selle kontoga saad jälgida ja suhelda kõigi teiste kasutajatega erinevates Mastodoni serverites. title: Loo konto serverisse %{domain}. status: account_status: Konto olek diff --git a/config/locales/eu.yml b/config/locales/eu.yml index c1e5ab1ee6..8ca53d492c 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1041,7 +1041,6 @@ eu: migrate_account: Migratu beste kontu batera migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, hemen konfiguratu dezakezu. or_log_in_with: Edo hasi saioa honekin - privacy_policy_agreement_html: Pribatutasun politika irakurri dut eta ados nago progress: details: Zure xehetasunak review: Gure berrikuspena @@ -1064,7 +1063,6 @@ eu: security: Segurtasuna set_new_password: Ezarri pasahitza berria setup: - email_settings_hint_html: Egin klik bidali dizugun estekan %{email} helbidea egiaztatzeko. Hementxe itxarongo zaitugu. link_not_received: Ez duzu estekarik jaso? title: Begiratu zure sarrera-ontzia sign_in: @@ -1072,7 +1070,6 @@ eu: title: "%{domain}-(e)an saioa hasi" sign_up: manual_review: "%{domain}-(e)n eginiko izen-emateak gure moderatzaileek eskuz aztertzen dituzte. Zure izen-ematea prozesatzen lagun gaitzazun, idatz ezazu zertxobait zuri buruz eta azaldu zergatik nahi duzun %{domain}-(e)n kontu bat." - preamble: Mastodon zerbitzari honetako kontu batekin, aukera izango duzu sareko edozein pertsona jarraitzeko, ez dio axola kontua non ostatatua dagoen. title: "%{domain} zerbitzariko kontua prestatuko dizugu." status: account_status: Kontuaren egoera diff --git a/config/locales/fa.yml b/config/locales/fa.yml index ad242ca503..341bb4cf54 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -978,7 +978,6 @@ fa: migrate_account: نقل مکان به یک حساب دیگر migrate_account_html: اگر می‌خواهید این حساب را به حساب دیگری منتقل کنید، این‌جا را کلیک کنید. or_log_in_with: یا ورود به وسیلهٔ - privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفته‌ام progress: confirm: تأیید رایانامه details: جزئیات شما @@ -999,7 +998,6 @@ fa: security: امنیت set_new_password: تعین گذرواژه جدید setup: - email_settings_hint_html: برای تأیید %{email}، روی پیوندی که برای شما ارسال کردیم ضربه بزنید. همین جا منتظر می‌مانیم. link_not_received: پیوندی نگرفتید؟ title: صندوق ورودیتان را بررسی کنید sign_in: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index eec42d0bfb..c4f9844679 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -214,6 +214,7 @@ fi: enable_user: Ota tili käyttöön memorialize_account: Muuta muistotiliksi promote_user: Ylennä käyttäjä + publish_terms_of_service: Julkaise käyttöehdot reject_appeal: Hylkää valitus reject_user: Hylkää käyttäjä remove_avatar_user: Poista profiilikuva @@ -278,6 +279,7 @@ fi: enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" + publish_terms_of_service_html: "%{name} julkaisi päivityksiä käyttöehtoihin" reject_appeal_html: "%{name} hylkäsi käyttäjän %{target} valituksen moderointipäätöksestä" reject_user_html: "%{name} hylkäsi käyttäjän %{target} rekisteröitymisen" remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" @@ -925,6 +927,35 @@ fi: search: Hae title: Aihetunnisteet updated_msg: Aihetunnisteiden asetusten päivitys onnistui + terms_of_service: + back: Takaisin käyttöehtoihin + changelog: Mikä on muuttunut + create: Käytä omiasi + current: Voimassa olevat + draft: Luonnos + generate: Käytä mallia + generates: + action: Luo + chance_to_review_html: "Luotuja käyttöehtoja ei julkaista automaattisesti. Sinulla on mahdollisuus tarkistaa lopputulos. Jatka täyttämällä tarvittavat tiedot." + explanation_html: Tarjottu käyttöehtomalli on tarkoitettu vain tiedoksi, eikä sitä pidä tulkita oikeudellisena neuvontana missään yhteydessä. Käänny oman oikeusavustajasi puoleen tilanteessasi ja erityisissä oikeudellisissa kysymyksissäsi. + title: Käyttöehtojen määritys + history: Historia + live: Julki + no_history: Käyttöehtoihin ei ole vielä tehty muutoksia. + no_terms_of_service_html: Sinulla ei ole tällä hetkellä määritettyjä käyttöehtoja. Käyttöehtojen tarkoituksena on antaa selvyyttä ja suojata sinua mahdollisilta vastuilta riitatilanteissa käyttäjiesi kanssa. + notified_on_html: Ilmoitettu käyttäjille %{date} + notify_users: Ilmoita käyttäjille + preview: + explanation_html: 'Sähköpostia lähetetään %{display_count} käyttäjälle, jotka ovat rekisteröityneet ennen %{date}. Sähköpostiviestissä on seuraava teksti:' + send_preview: Lähetä esikatselu osoitteeseen %{email} + send_to_all: + one: Lähetä %{display_count} sähköpostiviesti + other: Lähetä %{display_count} sähköpostiviestiä + title: Esikatsele käyttöehtojen ilmoitus + publish: Julkaise + published_on_html: Julkaistu %{date} + save_draft: Tallenna luonnos + title: Käyttöehdot title: Ylläpito trends: allow: Salli @@ -1132,7 +1163,6 @@ fi: migrate_account: Muuta toiseen tiliin migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit asettaa toisen tilin tästä. or_log_in_with: Tai käytä kirjautumiseen - privacy_policy_agreement_html: Olen lukenut ja hyväksyn tietosuojakäytännön progress: confirm: Vahvista sähköpostiosoite details: Omat tietosi @@ -1157,7 +1187,7 @@ fi: set_new_password: Aseta uusi salasana setup: email_below_hint_html: Tarkista roskapostikansiosi tai pyydä uusi viesti. Voit korjata sähköpostiosoitteesi tarvittaessa. - email_settings_hint_html: Napsauta lähettämäämme linkkiä vahvistaaksesi osoitteen %{email}. Odotamme täällä. + email_settings_hint_html: Jotta voit aloittaa Mastodonin käytön, napsauta linkkiä, jonka lähetimme osoitteeseen %{email}. Odotamme täällä. link_not_received: Etkö saanut linkkiä? new_confirmation_instructions_sent: Saat pian uuden vahvistuslinkin sisältävän sähköpostiviestin! title: Tarkista sähköpostilaatikkosi @@ -1166,7 +1196,7 @@ fi: title: Kirjaudu palvelimelle %{domain} sign_up: manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja siitä, miksi haluat luoda käyttäjätilin palvelimelle %{domain}. - preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia käyttäjiä riippumatta siitä, missä heidän tilinsä on. + preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita fediversumin käyttäjiä riippumatta siitä, missä heidän tilinsä on. title: Otetaan %{domain} käyttöösi. status: account_status: Tilin tila @@ -1178,6 +1208,7 @@ fi: view_strikes: Näytä aiemmat tiliäsi koskevat varoitukset too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen. use_security_key: Käytä suojausavainta + user_agreement_html: Olen lukenut ja hyväksyn käyttöehdot ja tietosuojakäytännön author_attribution: example_title: Esimerkkiteksti hint_html: Kirjoitatko uutisia tai blogitekstejä Mastodonin ulkopuolella? Määrää, kuinka tulet tunnustetuksi, kun niitä jaetaan Mastodonissa. @@ -1839,6 +1870,8 @@ fi: too_late: On liian myöhäistä vedota tähän varoitukseen tags: does_not_match_previous_name: ei vastaa edellistä nimeä + terms_of_service: + title: Käyttöehdot themes: contrast: Mastodon (suuri kontrasti) default: Mastodon (tumma) @@ -1899,6 +1932,15 @@ fi: further_actions_html: Jos tämä et ollut sinä, suosittelemme, että %{action} heti ja otat käyttöön kaksivaiheisen todennuksen pitääksesi tilisi turvassa. subject: Tiliäsi on käytetty uudesta IP-osoitteesta title: Uusi kirjautuminen + terms_of_service_changed: + agreement: Jatkamalla palvelun %{domain} käyttöä hyväksyt nämä ehdot. Jos et hyväksy päivitettyjä ehtoja, voit milloin tahansa päättää sopimuksesi palvelun %{domain} kanssa poistamalla tilisi. + changelog: 'Lyhyesti, mitä tämä päivitys tarkoittaa sinulle:' + description: 'Sait tämän sähköpostiviestin, koska teemme muutoksia palvelun %{domain} käyttöehtoihin. Kehotamme sinua tutustumaan päivitettyihin ehtoihin kokonaisuudessaan täällä:' + description_html: Sait tämän sähköpostiviestin, koska teemme muutoksia palvelun %{domain} käyttöehtoihin. Kehotamme sinua tutustumaan päivitettyihin ehtoihin kokonaisuudessaan täällä. + sign_off: Palvelimen %{domain} tiimi + subject: Käyttöehtojemme päivitykset + subtitle: Palvelimen %{domain} käyttöehdot muuttuvat + title: Tärkeä päivitys warning: appeal: Lähetä valitus appeal_description: Jos uskot, että tämä on virhe, voit hakea muutosta palvelimen %{instance} ylläpidolta. diff --git a/config/locales/fil.yml b/config/locales/fil.yml index 4084bf2f90..fc19d9fd31 100644 --- a/config/locales/fil.yml +++ b/config/locales/fil.yml @@ -1 +1,26 @@ +--- fil: + about: + about_mastodon_html: 'Ang social network ng hinaharap: Walang mga ad, walang corporate na pagmamanman, etikal na disenyo, at desentralisasyon! Sa iyo ang data mo sa Mastodon!' + contact_missing: Hindi naka-set + contact_unavailable: N/A + hosted_on: Mastodon hosted sa %{domain} + title: About + accounts: + following: Following + instance_actor_flash: Ang account na ito ay virtual actor na ginagamit para i-represent ang mismong server at hindi anumang indibidwal na user. Ginagamit ito para sa mga layunin ng pederasyon at hindi dapat i-suspend. + last_active: huling aktibo + link_verified_on: Ang pagmamay-ari ng link na ito ay huling na-check sa %{date} + nothing_here: Walang makikita rito! + pin_errors: + following: Dapat ay fina-follow mo na ang taong gusto mong i-endorse + posts_tab_heading: Mga Post + self_follow_error: Hindi puwede ang pag-follow sa sariling account + admin: + account_actions: + action: Gawin ang aksiyon + already_silenced: Nalimitahan na ang account na ito. + already_suspended: Nasuspinde na ang account na ito. + title: Gawin ang moderation na aksiyon sa %{acct} + account_moderation_notes: + create: Mag-iwan ng note diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 6f2f94242c..00ffed90bb 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1132,7 +1132,6 @@ fo: migrate_account: Flyt til eina aðra kontu migrate_account_html: Ynskir tú at víðaribeina hesa kontuna til eina aðra, so kanst tú seta tað upp her. or_log_in_with: Ella innrita við - privacy_policy_agreement_html: Eg havi lisið og taki undir við privatlívspolitikkinum progress: confirm: Vátta teldupost details: Tínir smálutir @@ -1157,7 +1156,6 @@ fo: set_new_password: Áset nýtt loyniorð setup: email_below_hint_html: Kekka mappuna við ruskposti ella bið um ein annan. Tú kanst rætta teldupostadressuna, um hon er skeiv. - email_settings_hint_html: Kekka leinkið, sum vit sendu tær at eftirkanna %{email}. Vit bíða beint her. link_not_received: Fekk tú einki leinki? new_confirmation_instructions_sent: Tú fer at móttaka eitt nýtt teldubræv við váttanarleinkinum um nakrar fáar minuttir! title: Kekka innbakkan hjá tær @@ -1166,7 +1164,6 @@ fo: title: Rita inn á %{domain} sign_up: manual_review: Tilmeldingar til %{domain} fara ígjøgnum eina manuella eftirkanning av okkara kjakleiðarum. Fyri at hjálpa okkum at skunda undir skrásetingina, skriva eitt sindur um teg sjálva/n og hví tú vil hava eina kontu á %{domain}. - preamble: Við eini kontu á hesum Mastodon ambætaranum ber til hjá tær at fylgja ein og hvønn annan persón á netverkinum, óansæð hvar teirra konta er hýst. title: Latum okkum fáa teg settan upp á %{domain}. status: account_status: Kontustøða diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 057dac582c..4fefee7ae0 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -187,6 +187,7 @@ fr-CA: create_domain_block: Créer un blocage de domaine create_email_domain_block: Création d'un blocage de domaine de courrier électronique create_ip_block: Créer une règle IP + create_relay: Créer un relais create_unavailable_domain: Créer un domaine indisponible create_user_role: Créer le rôle demote_user: Rétrograder l’utilisateur·ice @@ -198,18 +199,22 @@ fr-CA: destroy_email_domain_block: Supprimer le blocage de domaine de courriel destroy_instance: Purge du domaine destroy_ip_block: Supprimer la règle IP + destroy_relay: Supprimer le relais destroy_status: Supprimer le message destroy_unavailable_domain: Supprimer le domaine indisponible destroy_user_role: Détruire le rôle disable_2fa_user: Désactiver l’A2F disable_custom_emoji: Désactiver les émojis personnalisés + disable_relay: Désactiver le relais disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur disable_user: Désactiver le compte enable_custom_emoji: Activer les émojis personnalisées + enable_relay: Activer le relais enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur enable_user: Activer l’utilisateur memorialize_account: Ériger en mémorial promote_user: Promouvoir l’utilisateur + publish_terms_of_service: Publier les conditions d'utilisation reject_appeal: Rejeter l'appel reject_user: Rejeter l’utilisateur remove_avatar_user: Supprimer l’avatar @@ -247,6 +252,7 @@ fr-CA: create_domain_block_html: "%{name} a bloqué le domaine %{target}" create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}" create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}" + create_relay_html: "%{name} a créé un relais %{target}" create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" create_user_role_html: "%{name} a créé le rôle %{target}" demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}" @@ -258,18 +264,22 @@ fr-CA: destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}" destroy_instance_html: "%{name} a purgé le domaine %{target}" destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}" + destroy_relay_html: "%{name} a supprimé le relais %{target}" destroy_status_html: "%{name} a supprimé le message de %{target}" destroy_unavailable_domain_html: "%{name} a repris la livraison au domaine %{target}" destroy_user_role_html: "%{name} a supprimé le rôle %{target}" disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}" disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}" + disable_relay_html: "%{name} a désactivé le relais %{target}" disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}" disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}" enable_custom_emoji_html: "%{name} a activé l'émoji %{target}" + enable_relay_html: "%{name} a activé le relais %{target}" enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}" enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}" memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial" promote_user_html: "%{name} a promu l'utilisateur·rice %{target}" + publish_terms_of_service_html: "%{name} a publié des mises à jour des conditions d'utilisation" reject_appeal_html: "%{name} a rejeté l'appel de la décision de modération émis par %{target}" reject_user_html: "%{name} a rejeté l’inscription de %{target}" remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}" @@ -821,8 +831,10 @@ fr-CA: back_to_account: Retour à la page du compte back_to_report: Retour à la page du rapport batch: + add_to_report: 'Ajouter au rapport #%{id}' remove_from_report: Retirer du rapport report: Signalement + contents: Contenu deleted: Supprimé favourites: Favoris history: Historique de version @@ -831,12 +843,17 @@ fr-CA: media: title: Médias metadata: Metadonnés + no_history: Ce message n'a pas été édité no_status_selected: Aucun message n’a été modifié car aucun n’a été sélectionné open: Ouvrir le message original_status: Message original reblogs: Partages + replied_to_html: Répondu à %{acct_link} status_changed: Publication modifiée + status_title: Posté par @%{name} + title: Messages du compte - @%{name} trending: Tendances + view_publicly: Afficher de manière publique visibility: Visibilité with_media: Avec médias strikes: @@ -913,6 +930,35 @@ fr-CA: search: Recherche title: Hashtags updated_msg: Paramètres du hashtag mis à jour avec succès + terms_of_service: + back: Retour aux conditions d'utilisation + changelog: Nouveautés + create: Utilisez vos propres + current: Courant + draft: Brouillon + generate: Utiliser un modèle + generates: + action: Générer + chance_to_review_html: "Les conditions d'utilisation générées ne seront pas publiées automatiquement. Vous aurez la possibilité de vérifier les résultats. Veuillez remplir les informations nécessaires pour continuer." + explanation_html: Le modèle de conditions d'utilisation fourni l'est uniquement à titre informatif et ne doit pas être interprété comme un conseil juridique sur quelque sujet que ce soit. Veuillez consulter votre propre conseiller juridique sur votre situation et les questions juridiques spécifiques que vous vous posez. + title: Configuration des Conditions d'Utilisation + history: Historique + live: En cours d'utilisation + no_history: Il n'y a pas encore de modifications enregistrées des conditions d'utilisation. + no_terms_of_service_html: Vous n'avez actuellement aucune condition d'utilisation configurée. Les conditions d'utilisation ont pour but de clarifier les droits et obligations de chacun lors de l'utilisation du service et de vous protéger contre d'éventuelles responsabilités en cas de litige avec vos utilisateurs. + notified_on_html: Utilisateurs notifiés le `%{date}` + notify_users: Notifier les utilisateurs + preview: + explanation_html: 'L''e-mail sera envoyé aux utilisateurs %{display_count} qui se sont inscrits avant %{date}. Le texte suivant sera inclus dans l''e-mail :' + send_preview: Envoyer un aperçu à %{email} + send_to_all: + one: Envoyer %{display_count} email + other: Envoyer %{display_count} emails + title: Notification concernant l'aperçu des conditions d'utilisation + publish: Publier + published_on_html: Publié le %{date} + save_draft: Enregistrer le brouillon + title: Conditions d'utilisation title: Administration trends: allow: Autoriser @@ -1120,7 +1166,6 @@ fr-CA: migrate_account: Déménager vers un compte différent migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le configurer ici. or_log_in_with: Ou authentifiez-vous avec - privacy_policy_agreement_html: J’ai lu et j’accepte la politique de confidentialité progress: confirm: Confirmation de l'adresse mail details: Vos infos @@ -1145,7 +1190,7 @@ fr-CA: set_new_password: Définir le nouveau mot de passe setup: email_below_hint_html: Consultez votre dossier de courrier indésirable ou demandez-en un autre. Vous pouvez corriger votre adresse e-mail si elle est incorrecte. - email_settings_hint_html: Cliquez sur le lien que nous vous avons envoyé pour vérifier %{email}. Nous vous attendrons ici. + email_settings_hint_html: Cliquez sur le lien que nous avons envoyé à %{email} pour commencer à utiliser Mastodon. Nous vous attendrons ici. link_not_received: Vous n'avez pas reçu de lien? new_confirmation_instructions_sent: Vous allez recevoir un nouvel e-mail avec le lien de confirmation dans quelques minutes ! title: Vérifiez votre boîte de réception @@ -1154,7 +1199,7 @@ fr-CA: title: Se connecter à %{domain} sign_up: manual_review: Les inscriptions sur %{domain} passent par une revue manuelle de nos modérateurs. Pour les aider, écrivez un peu plus sur vous et pourquoi vous souhaitez créer un compte sur %{domain}. - preamble: Avec un compte sur ce serveur Mastodon, vous serez en mesure de suivre toute autre personne sur le réseau, quel que soit l’endroit où son compte est hébergé. + preamble: Avec un compte sur ce serveur Mastodon, vous pourrez suivre n'importe quelle autre personne du fediverse, quel que soit l'endroit où son compte est hébergé. title: Mettons les choses en place pour %{domain}. status: account_status: État du compte @@ -1166,10 +1211,14 @@ fr-CA: view_strikes: Voir les sanctions précédemment appliquées à votre compte too_fast: Formulaire envoyé trop rapidement, veuillez réessayer. use_security_key: Utiliser la clé de sécurité + user_agreement_html: J'ai lu et j'accepte les conditions d'utilisation et la politique de confidentialité author_attribution: example_title: Exemple de texte + hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon. + instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :' more_from_html: Plus via %{name} s_blog: Blog de %{name} + then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous. title: Attribution de l'auteur·e challenge: confirm: Continuer @@ -1661,6 +1710,7 @@ fr-CA: scheduled_statuses: over_daily_limit: Vous avez dépassé la limite de %{limit} messages planifiés par jour over_total_limit: Vous avez dépassé la limite de %{limit} messages planifiés + too_soon: la date doit se situer dans le futur self_destruct: lead_html: Malheureusement, %{domain} ferme définitivement. Si vous y aviez un compte, vous ne pourrez pas continuer à l’utiliser, mais vous pouvez toujours demander une sauvegarde de vos données. title: Ce serveur est en cours de fermeture @@ -1823,6 +1873,8 @@ fr-CA: too_late: Il est trop tard pour faire appel à cette sanction tags: does_not_match_previous_name: ne correspond pas au nom précédent + terms_of_service: + title: Conditions d'utilisation themes: contrast: Mastodon (Contraste élevé) default: Mastodon (Sombre) @@ -1883,6 +1935,15 @@ fr-CA: further_actions_html: Si ce n’était pas vous, nous vous recommandons de %{action} immédiatement et d’activer l’authentification à deux facteurs afin de garder votre compte sécurisé. subject: Votre compte a été accédé à partir d'une nouvelle adresse IP title: Une nouvelle connexion + terms_of_service_changed: + agreement: En continuant d'utiliser %{domain}, vous acceptez ces conditions. Si vous n'êtes pas d'accord avec les conditions mises à jour, vous pouvez résilier votre accord avec %{domain} à tout moment en supprimant votre compte. + changelog: 'En un coup d''œil, voici ce que cette mise à jour signifie pour vous :' + description: 'Vous recevez cet e-mail car nous apportons des modifications à nos conditions d''utilisation sur %{domain}. Nous vous encourageons à consulter l''intégralité des conditions mises à jour ici :' + description_html: Vous recevez cet e-mail car nous apportons des modifications à nos conditions d'utilisation sur %{domain}. Nous vous encourageons à consulter l'intégralité des conditions mises à jour ici. + sign_off: L'équipe %{domain} + subject: Mises à jour de nos conditions d'utilisation + subtitle: Les conditions d'utilisation de `%{domain}` changent + title: Mise à jour importante warning: appeal: Faire appel appeal_description: Si vous pensez qu'il s'agit d'une erreur, vous pouvez faire appel auprès de l'équipe de %{instance}. @@ -1928,7 +1989,7 @@ fr-CA: feature_action: En savoir plus feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. feature_audience_title: Construisez votre audience en toute confiance - feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble. feature_control_title: Gardez le contrôle de votre fil feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. feature_creativity_title: Créativité inégalée diff --git a/config/locales/fr.yml b/config/locales/fr.yml index e21e4f3e09..3000f9a4a9 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -187,6 +187,7 @@ fr: create_domain_block: Créer un blocage de domaine create_email_domain_block: Création d'un blocage de domaine de courrier électronique create_ip_block: Créer une règle IP + create_relay: Créer un relais create_unavailable_domain: Créer un domaine indisponible create_user_role: Créer le rôle demote_user: Rétrograder l’utilisateur·ice @@ -198,18 +199,22 @@ fr: destroy_email_domain_block: Supprimer le blocage de domaine de courriel destroy_instance: Purge du domaine destroy_ip_block: Supprimer la règle IP + destroy_relay: Supprimer le relais destroy_status: Supprimer le message destroy_unavailable_domain: Supprimer le domaine indisponible destroy_user_role: Détruire le rôle disable_2fa_user: Désactiver l’A2F disable_custom_emoji: Désactiver les émojis personnalisés + disable_relay: Désactiver le relais disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur disable_user: Désactiver le compte enable_custom_emoji: Activer les émojis personnalisées + enable_relay: Activer le relais enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur enable_user: Activer le compte memorialize_account: Ériger en mémorial promote_user: Promouvoir le compte + publish_terms_of_service: Publier les conditions d'utilisation reject_appeal: Rejeter l'appel reject_user: Rejeter le compte remove_avatar_user: Supprimer l’avatar @@ -247,6 +252,7 @@ fr: create_domain_block_html: "%{name} a bloqué le domaine %{target}" create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}" create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}" + create_relay_html: "%{name} a créé un relais %{target}" create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" create_user_role_html: "%{name} a créé le rôle %{target}" demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}" @@ -258,18 +264,22 @@ fr: destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}" destroy_instance_html: "%{name} a purgé le domaine %{target}" destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}" + destroy_relay_html: "%{name} a supprimé le relais %{target}" destroy_status_html: "%{name} a supprimé le message de %{target}" destroy_unavailable_domain_html: "%{name} a repris la livraison au domaine %{target}" destroy_user_role_html: "%{name} a supprimé le rôle %{target}" disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}" disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}" + disable_relay_html: "%{name} a désactivé le relais %{target}" disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}" disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}" enable_custom_emoji_html: "%{name} a activé l'émoji %{target}" + enable_relay_html: "%{name} a activé le relais %{target}" enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}" enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}" memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial" promote_user_html: "%{name} a promu l'utilisateur·rice %{target}" + publish_terms_of_service_html: "%{name} a publié des mises à jour des conditions d'utilisation" reject_appeal_html: "%{name} a rejeté l'appel de la décision de modération émis par %{target}" reject_user_html: "%{name} a rejeté l’inscription de %{target}" remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}" @@ -821,8 +831,10 @@ fr: back_to_account: Retour à la page du compte back_to_report: Retour à la page du rapport batch: + add_to_report: 'Ajouter au rapport #%{id}' remove_from_report: Retirer du rapport report: Signalement + contents: Contenu deleted: Supprimé favourites: Favoris history: Historique de version @@ -831,12 +843,17 @@ fr: media: title: Médias metadata: Metadonnés + no_history: Ce message n'a pas été édité no_status_selected: Aucun message n’a été modifié car aucun n’a été sélectionné open: Ouvrir le message original_status: Message original reblogs: Partages - status_changed: Publication modifiée + replied_to_html: Répondu à %{acct_link} + status_changed: Message modifié + status_title: Posté par @%{name} + title: Messages du compte - @%{name} trending: Tendances + view_publicly: Afficher de manière publique visibility: Visibilité with_media: Avec médias strikes: @@ -913,6 +930,35 @@ fr: search: Recherche title: Hashtags updated_msg: Paramètres du hashtag mis à jour avec succès + terms_of_service: + back: Retour aux conditions d'utilisation + changelog: Nouveautés + create: Utilisez vos propres + current: Courant + draft: Brouillon + generate: Utiliser un modèle + generates: + action: Générer + chance_to_review_html: "Les conditions d'utilisation générées ne seront pas publiées automatiquement. Vous aurez la possibilité de vérifier les résultats. Veuillez remplir les informations nécessaires pour continuer." + explanation_html: Le modèle de conditions d'utilisation fourni l'est uniquement à titre informatif et ne doit pas être interprété comme un conseil juridique sur quelque sujet que ce soit. Veuillez consulter votre propre conseiller juridique sur votre situation et les questions juridiques spécifiques que vous vous posez. + title: Configuration des Conditions d'Utilisation + history: Historique + live: En cours d'utilisation + no_history: Il n'y a pas encore de modifications enregistrées des conditions d'utilisation. + no_terms_of_service_html: Vous n'avez actuellement aucune condition d'utilisation configurée. Les conditions d'utilisation ont pour but de clarifier les droits et obligations de chacun lors de l'utilisation du service et de vous protéger contre d'éventuelles responsabilités en cas de litige avec vos utilisateurs. + notified_on_html: Utilisateurs notifiés le `%{date}` + notify_users: Notifier les utilisateurs + preview: + explanation_html: 'L''e-mail sera envoyé aux utilisateurs %{display_count} qui se sont inscrits avant %{date}. Le texte suivant sera inclus dans l''e-mail :' + send_preview: Envoyer un aperçu à %{email} + send_to_all: + one: Envoyer %{display_count} email + other: Envoyer %{display_count} emails + title: Notification concernant l'aperçu des conditions d'utilisation + publish: Publier + published_on_html: Publié le %{date} + save_draft: Enregistrer le brouillon + title: Conditions d'utilisation title: Administration trends: allow: Autoriser @@ -1120,7 +1166,6 @@ fr: migrate_account: Déménager vers un compte différent migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le configurer ici. or_log_in_with: Ou authentifiez-vous avec - privacy_policy_agreement_html: J’ai lu et j’accepte la politique de confidentialité progress: confirm: Confirmation de l'adresse mail details: Vos infos @@ -1145,7 +1190,7 @@ fr: set_new_password: Définir le nouveau mot de passe setup: email_below_hint_html: Consultez votre dossier de courrier indésirable ou demandez-en un autre. Vous pouvez corriger votre adresse e-mail si elle est incorrecte. - email_settings_hint_html: Cliquez sur le lien que nous vous avons envoyé pour vérifier l’adresse %{email}. Nous vous attendons ici. + email_settings_hint_html: Cliquez sur le lien que nous avons envoyé à %{email} pour commencer à utiliser Mastodon. Nous vous attendrons ici. link_not_received: Vous n'avez pas reçu de lien ? new_confirmation_instructions_sent: Vous allez recevoir un nouvel e-mail avec le lien de confirmation dans quelques minutes ! title: Vérifiez votre boîte de réception @@ -1154,7 +1199,7 @@ fr: title: Se connecter à %{domain} sign_up: manual_review: Les inscriptions sur %{domain} passent par une revue manuelle de nos modérateurs. Pour les aider, écrivez un peu plus sur vous et pourquoi vous souhaitez créer un compte sur %{domain}. - preamble: Avec un compte sur ce serveur Mastodon, vous serez en mesure de suivre toute autre personne sur le réseau, quel que soit l’endroit où son compte est hébergé. + preamble: Avec un compte sur ce serveur Mastodon, vous pourrez suivre n'importe quelle autre personne du fediverse, quel que soit l'endroit où son compte est hébergé. title: Mettons les choses en place pour %{domain}. status: account_status: État du compte @@ -1166,10 +1211,14 @@ fr: view_strikes: Voir les sanctions précédemment appliquées à votre compte too_fast: Formulaire envoyé trop rapidement, veuillez réessayer. use_security_key: Utiliser la clé de sécurité + user_agreement_html: J'ai lu et j'accepte les conditions d'utilisation et la politique de confidentialité author_attribution: example_title: Exemple de texte + hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon. + instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :' more_from_html: Plus via %{name} s_blog: Blog de %{name} + then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous. title: Attribution de l'auteur·e challenge: confirm: Continuer @@ -1285,7 +1334,7 @@ fr: add_new: Ajouter un nouveau hashtag errors: limit: Vous avez déjà mis en avant le nombre maximum de hashtags - hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres publications." + hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres messages." filters: contexts: account: Profils @@ -1296,7 +1345,7 @@ fr: edit: add_keyword: Ajouter un mot-clé keywords: Mots-clés - statuses: Publications individuelles + statuses: Messages individuels statuses_hint_html: Ce filtre s'applique à la sélection de messages individuels, qu'ils correspondent ou non aux mots-clés ci-dessous. Revoir ou supprimer des messages du filtre. title: Modifier le filtre errors: @@ -1315,8 +1364,8 @@ fr: one: "%{count} message" other: "%{count} messages" statuses_long: - one: "%{count} publication individuelle cachée" - other: "%{count} publications individuelles cachées" + one: "%{count} message individuel caché" + other: "%{count} messages individuels cachés" title: Filtres new: save: Enregistrer le nouveau filtre @@ -1661,6 +1710,7 @@ fr: scheduled_statuses: over_daily_limit: Vous avez dépassé la limite de %{limit} messages planifiés par jour over_total_limit: Vous avez dépassé la limite de %{limit} messages planifiés + too_soon: la date doit se situer dans le futur self_destruct: lead_html: Malheureusement, %{domain} ferme définitivement. Si vous y aviez un compte, vous ne pourrez pas continuer à l’utiliser, mais vous pouvez toujours demander une sauvegarde de vos données. title: Ce serveur est en cours de fermeture @@ -1758,7 +1808,7 @@ fr: one: "%{count} vidéo" other: "%{count} vidéos" boosted_from_html: Partagé depuis %{acct_link} - content_warning: 'Avertissement sur le contenu : %{warning}' + content_warning: 'Avertissement de contenu : %{warning}' default_language: Même langue que celle de l’interface disallowed_hashtags: one: 'contient un hashtag désactivé : %{tags}' @@ -1823,6 +1873,8 @@ fr: too_late: Il est trop tard pour faire appel à cette sanction tags: does_not_match_previous_name: ne correspond pas au nom précédent + terms_of_service: + title: Conditions d'utilisation themes: contrast: Mastodon (Contraste élevé) default: Mastodon (Sombre) @@ -1883,6 +1935,15 @@ fr: further_actions_html: Si ce n’était pas vous, nous vous recommandons de %{action} immédiatement et d’activer l’authentification à deux facteurs afin de garder votre compte sécurisé. subject: Une nouvelle adresse IP a accédé à votre compte title: Une nouvelle connexion + terms_of_service_changed: + agreement: En continuant d'utiliser %{domain}, vous acceptez ces conditions. Si vous n'êtes pas d'accord avec les conditions mises à jour, vous pouvez résilier votre accord avec %{domain} à tout moment en supprimant votre compte. + changelog: 'En un coup d''œil, voici ce que cette mise à jour signifie pour vous :' + description: 'Vous recevez cet e-mail car nous apportons des modifications à nos conditions d''utilisation sur %{domain}. Nous vous encourageons à consulter l''intégralité des conditions mises à jour ici :' + description_html: Vous recevez cet e-mail car nous apportons des modifications à nos conditions d'utilisation sur %{domain}. Nous vous encourageons à consulter l'intégralité des conditions mises à jour ici. + sign_off: L'équipe %{domain} + subject: Mises à jour de nos conditions d'utilisation + subtitle: Les conditions d'utilisation de `%{domain}` changent + title: Mise à jour importante warning: appeal: Faire appel appeal_description: Si vous pensez qu'il s'agit d'une erreur, vous pouvez faire appel auprès de l'équipe de %{instance}. @@ -1928,7 +1989,7 @@ fr: feature_action: En savoir plus feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. feature_audience_title: Construisez votre audience en toute confiance - feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble. feature_control_title: Gardez le contrôle de votre fil feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. feature_creativity_title: Créativité inégalée diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 088e49cb9d..2809019bf3 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -187,6 +187,7 @@ fy: create_domain_block: Domeinblokkade oanmeitsje create_email_domain_block: E-maildomeinblokkade oanmeitsje create_ip_block: IP-rigel oanmeitsje + create_relay: Relay oanmeitsje create_unavailable_domain: Net beskikber domein oanmeitsje create_user_role: Rol oanmeitsje demote_user: Brûker degradearje @@ -198,18 +199,22 @@ fy: destroy_email_domain_block: E-maildomeinblokkade fuortsmite destroy_instance: Domein folslein fuortsmite destroy_ip_block: IP-rigel fuortsmite + destroy_relay: Relay fuortsmite destroy_status: Toot fuortsmite destroy_unavailable_domain: Net beskikber domein fuortsmite destroy_user_role: Rol permanint fuortsmite disable_2fa_user: Twa-stapsferifikaasje útskeakelje disable_custom_emoji: Lokale emoji útskeakelje + disable_relay: Relay útskeakelje disable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker útskeakelje disable_user: Brûker útskeakelje enable_custom_emoji: Lokale emoji ynskeakelje + enable_relay: Relay ynskeakelje enable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker ynskeakelje enable_user: Brûker ynskeakelje memorialize_account: De account yn in Yn memoriam wizigje promote_user: Brûker promovearje + publish_terms_of_service: Algemiene gebrûksbetingsten publisearje reject_appeal: Beswier ôfwize reject_user: Brûker ôfwize remove_avatar_user: Profylfoto fuortsmite @@ -247,6 +252,7 @@ fy: create_domain_block_html: Domein %{target} is troch %{name} blokkearre create_email_domain_block_html: "%{name} hat it e-maildomein %{target} blokkearre" create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke" + create_relay_html: "%{name} hat in relay oanmakke %{target}" create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige" create_user_role_html: "%{name} hat de rol %{target} oanmakke" demote_user_html: Brûker %{target} is troch %{name} degradearre @@ -258,18 +264,22 @@ fy: destroy_email_domain_block_html: "%{name} hat it e-maildomein %{target} deblokkearre" destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten" destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten" + destroy_relay_html: "%{name} hat de relay %{target} fuortsmiten" destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten destroy_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} opnij starte" destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten" disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele + disable_relay_html: "%{name} hat de relay %{target} útskeakele" disable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail útskeakele foar %{target}" disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele + enable_relay_html: "%{name} hat de relay %{target} ynskeakele" enable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail ynskeakele foar %{target}" enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige promote_user_html: Brûker %{target} is troch %{name} promovearre + publish_terms_of_service_html: "%{name} publisearre updates fan de tsjinstbetingsten" reject_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} ôfwêzen" reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen" remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten" @@ -818,8 +828,10 @@ fy: back_to_account: Tebek nei accountside back_to_report: Tebek nei de rapportaazje batch: + add_to_report: 'Oan rapport #%{id} tafoegje' remove_from_report: Ut rapportaazje fuortsmite report: Rapportaazje + contents: Ynhâld deleted: Fuortsmiten favourites: Favoriten history: Ferzjeskiednis @@ -828,12 +840,17 @@ fy: media: title: Media metadata: Metagegevens + no_history: Dit berjocht is net bewurke no_status_selected: Der binne gjin berjochten wizige, omdat der gjin ien selektearre waard open: Berjocht toane original_status: Oarspronklik berjocht reblogs: Boosts + replied_to_html: Antwurde op %{acct_link} status_changed: Berjocht wizige + status_title: Berjocht fan @%{name} + title: Accountberjochten - @%{name} trending: Trending + view_publicly: Yn it iepenbier besjen visibility: Sichtberheid with_media: Mei media strikes: @@ -910,6 +927,35 @@ fy: search: Sykje title: Hashtags updated_msg: Hashtagynstellingen mei sukses bywurke + terms_of_service: + back: Tebek nei de gebrûksbetingsten + changelog: Wat is wizige + create: Brûk jo eigen + current: Aktuele + draft: Konsept + generate: Sjabloan brûke + generates: + action: Generearje + chance_to_review_html: "De generearre gebrûksbetingsten wurde net automatysk publisearre. Jo krije gelegenheid om de resultaten te besjen. Folje de nedige gegevens yn om troch te gean." + explanation_html: It sjabloan foar de gebrûksbetingsten is útslutend bedoeld foar ynformative doeleinen en mei net opfette wurde as juridysk advys oer hokker ûnderwerp dan ek. Freegje in eigen juridysk adviseur oer jo situaasje en foar spesifike juridyske fragen. + title: Gebrûksbetingsten ynstelle + history: Skiednis + live: Aktueel + no_history: Der binne noch gjin bewarre wizigingen fan de gebrûksbetingsten. + no_terms_of_service_html: Jo hawwe op dit stuit gjin servicebetingsten konfigurearre. De gebrûksbetingsten binne bedoeld om dúdlikheid te ferskaffen en jo te beskermjen tsjin mooglike ferplichtingen yn konflikten mei brûkers. + notified_on_html: Brûkers ynljochte op %{date} + notify_users: Brûkers ynformearje + preview: + explanation_html: 'It e-mailberjocht wurdt ferstjoerd nei %{display_count} brûkers dy’t harren oanmeld hawwe foar %{date}. De folgjende tekst sil yn it e-mailberjocht opnommen wurde:' + send_preview: Foarbyld ferstjoere nei %{email} + send_to_all: + one: "%{display_count} e-mailberjocht ferstjoere" + other: "%{display_count} e-mailberjochten ferstjoere" + title: Foarbyld fan Melding gebrûksbetingsten + publish: Publisearje + published_on_html: Publisearre op %{date} + save_draft: Konsept bewarje + title: Gebrûksbetingsten title: Behear trends: allow: Tastean @@ -1117,7 +1163,6 @@ fy: migrate_account: Nei in oar account ferhúzje migrate_account_html: Wannear’t jo dizze account nei in oare account trochferwize wolle, kinne jo dit hjir ynstelle. or_log_in_with: Of oanmelde mei - privacy_policy_agreement_html: Ik haw it privacybelied lêzen en gean dêrmei akkoard progress: confirm: E-mailadres werhelje details: Jo gegevens @@ -1142,7 +1187,7 @@ fy: set_new_password: Nij wachtwurd ynstelle setup: email_below_hint_html: Kontrolearje jo map Net-winske, of freegje in nije befêstigingskeppeling oan. Jo kinne jo e-mailadres wizigje as it ferkeard is. - email_settings_hint_html: Klik op de keppeling dy’t wy jo stjoerd hawwe om %{email} te ferifiearjen. Wy wachtsje wol even. + email_settings_hint_html: Klik op de keppeling dy’t wy nei %{email} stjoerd hawwe om Mastodon te brûken. Wy wachtsje hjir ôf. link_not_received: Gjin keppeling krigen? new_confirmation_instructions_sent: Jo ûntfange binnen inkelde minuten in nij e-mailberjocht mei de befêstigingskeppeling! title: Kontrolearje jo Postfek YN @@ -1151,7 +1196,7 @@ fy: title: Oanmelde op %{domain} sign_up: manual_review: Ynskriuwingen op %{domain} wurde hânmjittich troch de moderator beoardiele. Skriuw wat oer josels en wêrom jo in account wolle op %{domain} om ús te helpen jo registraasje te ferwurkjen. - preamble: Jo kinne mei in Mastodon-account elkenien yn it netwurk folgen, wêr’t dizze persoan ek in account hat. + preamble: Mei in account op dizze Mastodon-server kinne jo elkenien folgje op de fediverse, nettsjinsteande wêr’t dizze persoan in account hat. title: Litte wy jo account op %{domain} ynstelle. status: account_status: Accountsteat @@ -1163,6 +1208,7 @@ fy: view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dy’t jo makke hawwe too_fast: Formulier is te fluch yntsjinne. Probearje it nochris. use_security_key: Befeiligingskaai brûke + user_agreement_html: Ik haw de gebrûksbetingsten en it privacybelied lêzen en gean der mei akkoard author_attribution: example_title: Faorbyldtekst hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoe’t jo oahelle wurde as dizze dield wurde op Mastodon. @@ -1661,6 +1707,7 @@ fy: scheduled_statuses: over_daily_limit: Jo binne oer de limyt fan %{limit} yn te plannen berjochten foar hjoed over_total_limit: Jo binne oer de limyt fan %{limit} yn te plannen berjochten + too_soon: datum moat yn de takomst lizze self_destruct: lead_html: Spitigernôch sil %{domain} permanint ôfslute. As jo dêr in account hiene, kinne jo dizze net mear brûke, mar jo kinne noch hieltyd in reservekopy fan jo gegevens opfreegje. title: Deze server sil ôfslute @@ -1823,6 +1870,8 @@ fy: too_late: De perioade dat jo beswier meitsje kinne tsjin dizze skeining is ferrûn tags: does_not_match_previous_name: komt net oerien mei de foarige namme + terms_of_service: + title: Gebrûksbetingsten themes: contrast: Mastodon (heech kontrast) default: Mastodon (donker) @@ -1883,6 +1932,15 @@ fy: further_actions_html: Wannear’t jo dit net wiene, advisearje wy om daliks %{action} en om twa-stapsferifikaasje yn te skeakeljen, om sa jo account feilich te hâlden. subject: Jo account is fan in nij IP-adres ôf benadere title: In nije registraasje + terms_of_service_changed: + agreement: Troch %{domain} brûke te bliuwen, geane jo akkoard mei dizze betingsten. As jo it net iens binne mei de bywurke betingsten, kinne jo jo oerienkomst mei %{domain} op elk winske momint beëinigje troch jo account fuort te smiten. + changelog: 'Yn ien eachopslach betsjut dizze update foar jo:' + description: 'Jo ûntfange dit berjocht, omdat wy inkelde wizigingen oanbringe yn ús gebrûksbetingsten by %{domain}. Wy riede jo oan om de bywurke betingsten hjir folslein te besjen:' + description_html: Jo ûntfange dit berjocht, omdat wy inkelde wizigingen oanbringe yn ús gebrûksbetingsten by %{domain}. Wy riede jo oan om de bywurke betingsten hjir folslein te besjen. + sign_off: It %{domain}-team + subject: Aktualisaasje fan ús tsjinstbetingsten + subtitle: De gebrûksbetingsten fan %{domain} wizigje + title: Wichtige update warning: appeal: Beswier yntsjinje appeal_description: Wannear’t jo tinke dat dit in flater is, kinne jo in beswier yntsjinje by de meiwurkers fan %{instance}. diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 424302fc2e..1da40dc1c3 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1186,7 +1186,6 @@ ga: migrate_account: Bog chuig cuntas eile migrate_account_html: Más mian leat an cuntas seo a atreorú chuig ceann eile, is féidir leat é a chumrú anseo. or_log_in_with: Nó logáil isteach le - privacy_policy_agreement_html: Léigh mé agus aontaím leis an polasaí príobháideachais progress: confirm: Deimhnigh ríomhphost details: Do chuid sonraí @@ -1211,7 +1210,6 @@ ga: set_new_password: Socraigh pasfhocal nua setup: email_below_hint_html: Seiceáil d'fhillteán turscair, nó iarr ceann eile. Is féidir leat do sheoladh ríomhphoist a cheartú má tá sé mícheart. - email_settings_hint_html: Cliceáil ar an nasc a sheol muid chugat chun %{email} a fhíorú. Beidh muid ag fanacht ar dheis anseo. link_not_received: Nach bhfuair tú nasc? new_confirmation_instructions_sent: Gheobhaidh tú ríomhphost nua leis an nasc deimhnithe i gceann cúpla bomaite! title: Seiceáil do bhosca isteach @@ -1220,7 +1218,6 @@ ga: title: Logáil isteach go %{domain} sign_up: manual_review: Téann clárúcháin ar %{domain} trí athbhreithniú láimhe ag ár modhnóirí. Chun cabhrú linn do chlárúchán a phróiseáil, scríobh beagán fút féin agus cén fáth a bhfuil cuntas uait ar %{domain}. - preamble: Le cuntas ar an bhfreastalaí Mastodon seo, beidh tú in ann aon duine eile ar an líonra a leanúint, beag beann ar an áit a bhfuil a gcuntas á óstáil. title: Déanaimis tú a shocrú ar %{domain}. status: account_status: Stádas cuntais @@ -1790,6 +1787,7 @@ ga: scheduled_statuses: over_daily_limit: Tá an teorainn de %{limit} postáil sceidealaithe sáraithe agat don lá atá inniu ann over_total_limit: Tá an teorainn de %{limit} postáil sceidealaithe sáraithe agat + too_soon: caithfidh dáta a bheith sa todhchaí self_destruct: lead_html: Ar an drochuair, tá %{domain} ag dúnadh síos go buan. Má bhí cuntas agat ann, ní bheidh tú in ann leanúint ar aghaidh á úsáid, ach is féidir leat cúltaca de do shonraí a iarraidh fós. title: Tá an freastalaí seo ag dúnadh diff --git a/config/locales/gd.yml b/config/locales/gd.yml index ae714cddcf..850143567f 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1168,7 +1168,6 @@ gd: migrate_account: Imrich gu cunntas eile migrate_account_html: Nam bu mhiann leat an cunntas seo ath-stiùireadh gu fear eile, ’s urrainn dhut a rèiteachadh an-seo. or_log_in_with: No clàraich a-steach le - privacy_policy_agreement_html: Leugh mi is tha mi ag aontachadh ris a’ phoileasaidh prìobhaideachd progress: confirm: Dearbh am post-d details: Am fiosrachadh agad @@ -1193,7 +1192,6 @@ gd: set_new_password: Suidhich facal-faire ùr setup: email_below_hint_html: Thoir sùil air pasgan an spama agad no iarr fear eile. ’S urrainn dhut an seòladh puist-d agad a chur ceart ma tha e ceàrr. - email_settings_hint_html: Briog air a’ cheangal a chuir sinn thugad a dhearbhadh %{email}. Fuirichidh sinn ort an-seo. link_not_received: Nach d’fhuair thu ceangal? new_confirmation_instructions_sent: Gheibh thu post-d ùr le ceangal dearbhaidh an ceann corra mionaid! title: Thoir sùil air a’ bhogsa a-steach agad @@ -1202,7 +1200,6 @@ gd: title: Clàraich a-steach gu %{domain} sign_up: manual_review: Nì na maoir againn lèirmheas a làimh air clàraidhean air %{domain}. Airson ar cuideachadh le làimhseachadh do chlàraidh, sgrìobh beagan mu do dhèidhinn agus carson a tha thu ag iarraidh cunntas air %{domain}. - preamble: Le cunntas air an fhrithealaiche Mastodon seo, ’s urrainn dhut neach sam bith a leantainn air an lìonra, ge b’ e càit a bheil an cunntas aca-san ’ga òstadh. title: Suidhicheamaid %{domain} dhut. status: account_status: Staid a’ chunntais diff --git a/config/locales/gl.yml b/config/locales/gl.yml index cf5363196c..ac6581c8c9 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -214,6 +214,7 @@ gl: enable_user: Activar usuaria memorialize_account: Transformar en conta conmemorativa promote_user: Promover usuaria + publish_terms_of_service: Publicar os Termos do Servizo reject_appeal: Rexeitar apelación reject_user: Rexeitar Usuaria remove_avatar_user: Eliminar avatar @@ -278,6 +279,7 @@ gl: enable_user_html: "%{name} activou as credenciais para a usuaria %{target}" memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo" promote_user_html: "%{name} promocionou a usuaria %{target}" + publish_terms_of_service_html: "%{name} actualizou os termos do servizo" reject_appeal_html: "%{name} rexeitou a apelación da decisión da moderación de %{target}" reject_user_html: "%{name} rexeitou o rexistro de %{target}" remove_avatar_user_html: "%{name} eliminou o avatar de %{target}" @@ -925,6 +927,35 @@ gl: search: Buscar title: Cancelos updated_msg: Actualizaronse os axustes dos cancelos + terms_of_service: + back: Volver aos termos do servizo + changelog: Que cambios se fixeron + create: Usa os teus propios + current: Actuais + draft: Borrador + generate: Usar un modelo + generates: + action: Crear + chance_to_review_html: "Vanse publicar automaticamente os termos do servizo creados. Terás a oportunidade de revisar o resultado. Por favor completa os detalles precisos para continuar." + explanation_html: O modelo dos termos do servizo proporcionados é soamente informativo, e en ningún caso constitúe un consello legal. Por favor realiza unha consulta legal sobre a túa situación concreta e posibles cuestións legais que debas afrontar. + title: Configurar os Termos do Servizo + history: Historial + live: Actuais + no_history: Non hai rexistrados cambios nos termos do servizo. + no_terms_of_service_html: Actualmente non tes configurados ningúns termos do servizo. Os Termos do servizo están pensados para dar claridade e protexerte de responsabilidades potenciais nas disputas coas túas usuarias. + notified_on_html: Informouse ás usuarias o %{date} + notify_users: Informar ás usuarias + preview: + explanation_html: 'Vaise enviar un correo a %{display_count} usuarias que crearon a conta antes do %{date}. Incluirase o seguinte texto no correo:' + send_preview: Enviar vista previa a %{email} + send_to_all: + one: Enviar %{display_count} correo + other: Enviar %{display_count} correos + title: Vista previa da notificación sobre os termos do servizo + publish: Publicar + published_on_html: Publicados o %{date} + save_draft: Gardar borrador + title: Termos do Servizo title: Administración trends: allow: Permitir @@ -1132,7 +1163,6 @@ gl: migrate_account: Mover a unha conta diferente migrate_account_html: Se queres redirixir esta conta hacia outra diferente, podes facelo aquí. or_log_in_with: Ou accede con - privacy_policy_agreement_html: Lin e acepto a política de privacidade progress: confirm: Confirmar correo details: Detalles @@ -1157,7 +1187,7 @@ gl: set_new_password: Estabelecer novo contrasinal setup: email_below_hint_html: Mira no cartafol do spam, ou solicita outra. Podes cambiar o enderzo de correo se non é correcto. - email_settings_hint_html: Preme na ligazón que che enviamos para verificar %{email}. Agardamos por ti. + email_settings_hint_html: Preme na ligazón que enviamos a %{email} para comezar a usar Mastodon. Agardámoste. link_not_received: Non recibiches a ligazón? new_confirmation_instructions_sent: Nuns minutos recibirás un novo correo electrónico coa ligazón de confirmación! title: Mira a caixa de entrada @@ -1166,7 +1196,7 @@ gl: title: Accede a %{domain} sign_up: manual_review: As novas contas en %{domain} son comprobadas manualmente pola moderación. Para axudarnos a xestionar o teu rexistro, escribe algo acerca de ti e por que queres unha conta en %{domain}. - preamble: Cunha conta neste servidor Mastodon poderás seguir a calquera outra persoa na rede, independentemente de onde estivese hospedada esa conta. + preamble: Cunha conta neste servidor Mastodon poderás seguir a calquera outra persoa no fediverso, independentemente de onde estivese hospedada esa conta. title: Imos crear a túa conta en %{domain}. status: account_status: Estado da conta @@ -1178,6 +1208,7 @@ gl: view_strikes: Ver avisos anteriores respecto da túa conta too_fast: Formulario enviado demasiado rápido, inténtao outra vez. use_security_key: Usa chave de seguridade + user_agreement_html: Lin e acepto os termos do servizo e a política de privacidade author_attribution: example_title: Texto de mostra hint_html: Escribes novas ou artigos nun blog alleos a Mastodon? Xestiona o xeito en que podes dar crédito da túa autoría cando os compartes en Mastodon. @@ -1471,7 +1502,7 @@ gl: table: expires_at: Caduca uses: Usos - title: Convidar xente + title: Convidar a persoas lists: errors: limit: Xa acadaches o número máximo de listas @@ -1839,6 +1870,8 @@ gl: too_late: É demasiado tarde para recurrir este aviso tags: does_not_match_previous_name: non concorda co nome anterior + terms_of_service: + title: Termos do Servizo themes: contrast: Mastodon (Alto contraste) default: Mastodon (Escuro) @@ -1899,6 +1932,15 @@ gl: further_actions_html: Se non foches ti, aconsellámosche %{action} inmediatamente e activar o segundo factor de autenticación para manter conta segura. subject: Accedeuse á túa conta desde novos enderezos IP title: Novo acceso + terms_of_service_changed: + agreement: Se continúas a usar %{domain} aceptas estas condicións. Se non aceptas as condicións actualizadas podería rematar o acordo con %{domain} en calquera momento e eliminarse a túa conta. + changelog: 'Dunha ollada, aquí tes o que implican os cambios para ti:' + description: 'Recibes este correo porque fixemos cambios nos termos do servizo de %{domain}. Recomendámosche que leas as condicións actualizadas ao completo aquí:' + description_html: Recibes este correo porque fixemos cambios nos termos do servizo de %{domain}. Recomendámosche que leas as condicións actualizadas ao completo aquí. + sign_off: O equipo de %{domain} + subject: Actualización dos nosos termos do servizo + subtitle: Cambiaron os termos do servizo de %{domain} + title: Notificación importante warning: appeal: Enviar unha apelación appeal_description: Se cres que esto é un erro, podes enviar un recurso á administración de %{instance}. diff --git a/config/locales/he.yml b/config/locales/he.yml index 1c2796173b..eea4c63179 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -220,6 +220,7 @@ he: enable_user: אפשור משתמש memorialize_account: הנצחת חשבון promote_user: קידום משתמש + publish_terms_of_service: פרסום תנאי השירות reject_appeal: דחיית ערעור reject_user: דחיית משתמש remove_avatar_user: הסרת תמונת פרופיל @@ -284,6 +285,7 @@ he: enable_user_html: "%{name} אפשר/ה כניסה עבור המשתמש %{target}" memorialize_account_html: "%{name} הפך/ה את חשבונו של %{target} לדף הנצחה" promote_user_html: "%{name} העלה בדרגה את המשתמש %{target}" + publish_terms_of_service_html: "%{name} פירסמו עדכון לתנאי השירות" reject_appeal_html: "%{name} דחו ערעור על החלטת הנהלת הקהילה מ-%{target}" reject_user_html: "%{name} דחו הרשמה מ-%{target}" remove_avatar_user_html: "%{name} הסירו את תמונת הפרופיל של %{target}" @@ -953,6 +955,37 @@ he: search: חיפוש title: תגיות updated_msg: הגדרות תגיות עודכנו בהצלחה + terms_of_service: + back: חזרה אל תנאי השירות + changelog: מה נשתנה + create: הבאתי מהבית + current: גרסא נוכחית + draft: טיוטה + generate: שימוש בתבנית + generates: + action: לחולל + chance_to_review_html: "תנאי השירות שחוללו עצמונית לא יפורסמו אוטומטית. תהיה לך הזדמנות לעבור על התוצאה. יש למלא את הפרטים הבאים כדי להמשיך." + explanation_html: תבנית תנאי השירות סופקה לצרכי יידוע בלבד, ואין לראות בהם עצה חוקית על אף נושא. אנא התייעצו בעצמבם עם פרקליט לגבי מצבכם הייחודי ושאלות ספציפיות שעלולות להיות לכם. + title: הקמת מסמך תנאי השירות + history: גרסאות העבר + live: הגרסא החיה + no_history: עוד לא נרשמו שינויים בתנאי השירות. + no_terms_of_service_html: עוד לא הוקם מסמך תנאי השירות. מסמך תנאי השירות מיועד להבהיר ולהגן עליך מאחריות חוקית במקרה של אי הסכמות מול המשתמשים שלך. + notified_on_html: המשתמשים קיבלו הודעה בתאריך %{date} + notify_users: להודיע למשתמשים + preview: + explanation_html: 'הדואל ישלח אל %{display_count} משתמשיםות שנרשמו לפני %{date}. להלן המלל שישלח בדואל:' + send_preview: שליחת הצצה מוקדמת אל %{email} + send_to_all: + many: שליחת %{display_count} הודעות דואל + one: שליחת הודעת דואל + other: שליחת %{display_count} הודעות דואל + two: שליחת שתי הודעות דואל + title: צפייה מוקדמת בתנאי השירות + publish: לפרסם + published_on_html: פורסם ביום %{date} + save_draft: שמירת טיוטה + title: תנאי השירות title: ניהול trends: allow: לאפשר @@ -1168,7 +1201,6 @@ he: migrate_account: מעבר לחשבון אחר migrate_account_html: אם ברצונך להכווין את החשבון לעבר חשבון אחר, ניתן להגדיר זאת כאן. or_log_in_with: או התחבר באמצעות - privacy_policy_agreement_html: קראתי והסכמתי למדיניות הפרטיות progress: confirm: אימות כתובת הדואל details: הפרטים שלך @@ -1193,7 +1225,7 @@ he: set_new_password: סיסמה חדשה setup: email_below_hint_html: אנא בדקו בתיקיית הספאם, או בקשו קוד חדש. ניתן לתקן את הכתובת אם נפלה תקלדה. - email_settings_hint_html: לחצו על הקישור שנשלח כדי לאשר את הכתובת %{email}. אנו ממתינים פה. + email_settings_hint_html: יש ללחוץ על הקישורית ששלחנו אל %{email} כדי להתחיל להשתמש במסטודון. נמתין לך כאן. link_not_received: לא קיבלת קישור? new_confirmation_instructions_sent: אתם עומדים לקבל הודעת דואל חדשה עם קיש/ור אימות בדקות הקרובות! title: בדוק/בדקי את תיבת הדואר הנכנס שלך @@ -1202,7 +1234,7 @@ he: title: התחבר אל %{domain} sign_up: manual_review: פתיחת חשבון אצל %{domain} עוברת בדיקה ידנית על ידי הצוות שלנו. כדי לסייע בתהליך הרישום שלכןם, כתבו לנו על עצמכןם ולמה אתןם רוצותים חשבון בשרת %{domain}. - preamble: כיוון שמסטודון מבוזרת, תוכל/י להשתמש בחשבון שלך משרתי מסטודון או רשתות תואמות אחרות אם אין לך חשבון על שרת זה. + preamble: בעזרת חשבון על שרת מסטודון זה, ניתן לעקוב אחרי כל אדם בפידרציה, ולא משנה באיזה שרת נמצא החשבון שלהם. title: הבה ניצור לך חשבון בשרת %{domain}. status: account_status: מצב חשבון @@ -1214,6 +1246,7 @@ he: view_strikes: צפיה בעברות קודמות שנרשמו נגד חשבונך too_fast: הטופס הוגש מהר מדי, נסה/י שוב. use_security_key: שימוש במפתח אבטחה + user_agreement_html: קראתי וזו הסכמתי למסמך תנאי השירות ומדיניות הפרטיות author_attribution: example_title: טקסט לדוגמה hint_html: האם יש לך בלוג או טור חדשות שמתפרסם מחוץ למסטודון? ניתן לשלוט איך יוצג הקרדיט שלך כשמשתפים את הלינק במסטודון. @@ -1752,6 +1785,7 @@ he: scheduled_statuses: over_daily_limit: חרגת מהמספר המקסימלי של הודעות מתוזמנות להיום, שהוא %{limit} over_total_limit: חרגת מהמספר המקסימלי של הודעות מתוזמנות, שהוא %{limit} + too_soon: התאריך חייב להיות עתידי self_destruct: lead_html: לרוע המזל, %{domain} עומד לרדת באופן סופי. אם היה לך חשבון כאן, לא תהיה אפשרות להמשיך להשתמש בו, אבל ניתן לבקש גיבוי של כל המידע שלך. title: שרת זה בתהליכי סגירה @@ -1922,6 +1956,8 @@ he: too_late: מאוחר מדי להגיש ערעור tags: does_not_match_previous_name: לא תואם את השם האחרון + terms_of_service: + title: תנאי השירות themes: contrast: מסטודון (ניגודיות גבוהה) default: מסטודון (כהה) @@ -1982,6 +2018,15 @@ he: further_actions_html: אם לא את/ה התחברת, אנו ממליצים שתבצע/י %{action} מיידית ותאפשר/י אימות דו גורמי על מנת לשמור על החשבון בטוח. subject: נרשמה גישה לחשבונך מכתובת IP חדשה title: התחברות חדשה + terms_of_service_changed: + agreement: עם המשך השימוש בשרת %{domain} אתן מסכימות לתנאים הללו. אם אינכם מסכימים עם עדכוני תנאי השירות, אתן יכולות להפסיק את ההסכם עם %{domain} בכל עת על ידי מחיקת החשבון. + changelog: 'בקצרה, הנה משמעות העדכון עבורך:' + description: 'קיבלת הודעת דואל זו כיוון שאנו מבצעים שינויים במסמך תנאי השירות של %{domain}. אנו מעודדים אותך לעבור על השינויים במסמך המלא כאן:' + description_html: 'קיבלת הודעת דואל זו כיוון שאנו מבצעים שינויים במסמך תנאי השירות של %{domain}. אנו מעודדים אותך לעבור על השינויים במסמך המלא כאן:' + sign_off: צוות %{domain} + subject: עדכונים לתנאי השירות שלנו + subtitle: מסמך תנאי השירות של %{domain} עוברים שינויים + title: עדכון חשוב warning: appeal: הגשת ערעור appeal_description: אם את/ה מאמין/ה שזו טעות, ניתן להגיש ערעור לצוות של %{instance}. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index fccda994ea..da51e3b5a9 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -214,6 +214,7 @@ hu: enable_user: Felhasználó engedélyezése memorialize_account: Fiók emlékké nyilvánítása promote_user: Felhasználó előléptetése + publish_terms_of_service: Felhasználási feltételek közzététele reject_appeal: Fellebbezés elutasítása reject_user: Felhasználó Elutasítása remove_avatar_user: Profilkép eltávolítása @@ -278,6 +279,7 @@ hu: enable_user_html: "%{name} engedélyezte %{target} felhasználó bejelentkezését" memorialize_account_html: "%{name} emléket állított %{target} felhasználónak" promote_user_html: "%{name} előléptette %{target} felhasználót" + publish_terms_of_service_html: "%{name} frissítette a felhasználási feltételeket" reject_appeal_html: "%{name} visszautasított egy fellebbezést %{target} moderátori döntéséről" reject_user_html: "%{name} elutasította %{target} regisztrációját" remove_avatar_user_html: "%{name} törölte %{target} profilképét" @@ -925,6 +927,35 @@ hu: search: Keresés title: Hashtagek updated_msg: A hashtag beállításokat sikeresen frissítettük + terms_of_service: + back: Vissza a felhasználási feltételekhez + changelog: Mi változott + create: Saját használata + current: Jelenlegi + draft: Piszkozat + generate: Sablon használata + generates: + action: Előállítás + chance_to_review_html: "Az előállított felhasználási feltételek nem lesznek automatikusan közzétéve. Előtte áttekintheted az eredményt. A folytatáshoz töltsd ki a szükséges részleteket." + explanation_html: A felhasználási feltételek sablonja csak információs célokat szolgál, és semmilyen témában nem tekinthető jogi tanácsadásnak. Konzultálj a saját jogi tanácsadóddal a helyzetedről és a felmerülő konkrét jogi kérdésekről. + title: Felhasználási feltételek beállítása + history: Előzmények + live: Élő + no_history: Még nincsenek változtatások a szolgáltatási feltételekben. + no_terms_of_service_html: Még nincsenek felhasználási feltételek beállítva. A felhasználási feltételek célja, hogy egyértelműsítsen, és megvédjen a felelősségvállalásoktól a felhasználókkal szembeni lehetséges viták során. + notified_on_html: 'Felhasználók értesítve: %{date}' + notify_users: Felhasználók értesítése + preview: + explanation_html: 'Az e-mail %{display_count} felhasználónak lesz elküldve (akik %{date} előtt regisztráltak). A következő szöveg fog szerepelni a levélben:' + send_preview: 'Előnézet elküldése ide: %{email}' + send_to_all: + one: "%{display_count} e-mail elküldése" + other: "%{display_count} e-mail elküldése" + title: Felhasználási feltételek értesítésének előnézete + publish: Közzététel + published_on_html: 'Közzétéve: %{date}' + save_draft: Piszkozat mentése + title: Felhasználási feltételek title: Karbantartás trends: allow: Engedélyezés @@ -1132,7 +1163,6 @@ hu: migrate_account: Felhasználói fiók költöztetése migrate_account_html: Ha át szeretnéd irányítani ezt a fiókodat egy másikra, akkor itt állíthatod be. or_log_in_with: Vagy jelentkezz be ezzel - privacy_policy_agreement_html: Elolvastam és egyetértek az adatvédemi nyilatkozattal progress: confirm: E-mail megerősítése details: Saját adatok @@ -1157,7 +1187,7 @@ hu: set_new_password: Új jelszó beállítása setup: email_below_hint_html: Nézd meg a levélszemét mappát, vagy kérj egy újat. Módosíthatod az e-mail-címet, ha az hibás. - email_settings_hint_html: Kattints a hivatkozásra, melyet a(z) %{email} megerősítése céljából küldtünk. Addig várni fogunk. + email_settings_hint_html: A Mastodon használatának megkezdéséhez kattints a(z) %{email} címre küldött hivatkozásra. Itt fogunk várni. link_not_received: Nem kaptad meg a hivatkozást? new_confirmation_instructions_sent: Néhány perc múlva új e-mailt fogsz kapni a megerősítési hivatkozással. title: Bejövő postaláda ellenőrzése @@ -1166,7 +1196,7 @@ hu: title: 'Bejelentkezés ide: %{domain}' sign_up: manual_review: A(z) %{domain} regisztrációi a moderátorok kézi felülvizsgálatán mennek át. Hogy segítsd a regisztráció feldolgozását, írj röviden magadról, és hogy miért szeretnél fiókot a(z) %{domain} oldalon. - preamble: Egy fiókkal ezen a Mastodon-kiszolgálón követhetsz bárkit a hálózaton, függetlenül attól, hogy az illető fiókja melyik kiszolgálón található. + preamble: Egy fiókkal ezen a Mastodon kiszolgálón követhetsz bárkit a födiverzumban, függetlenül attól, hogy az illető fiókja melyik kiszolgálón található. title: Állítsuk be a fiókod a %{domain} kiszolgálón. status: account_status: Fiók állapota @@ -1178,6 +1208,7 @@ hu: view_strikes: Fiókod ellen felrótt korábbi vétségek megtekintése too_fast: Túl gyorsan küldted el az űrlapot, próbáld később. use_security_key: Biztonsági kulcs használata + user_agreement_html: Elolvastam és egyetértek a felhasználási feltételekkel és az adatvédelmi nyilatkozattal author_attribution: example_title: Mintaszöveg hint_html: Mastodonon kívül írsz híreket vagy blogbejegyzéseket? Szabályozd, hogyan tüntethetnek fel szerzőként, amikor Mastodonon osztják meg őket. @@ -1839,6 +1870,8 @@ hu: too_late: Túl késő, hogy fellebbezd ezt a felrótt vétséget tags: does_not_match_previous_name: nem illeszkedik az előző névvel + terms_of_service: + title: Felhasználási feltételek themes: contrast: Mastodon (nagy kontrasztú) default: Mastodon (sötét) @@ -1899,6 +1932,15 @@ hu: further_actions_html: Ha nem te voltál, akkor azt javasoljuk, hogy azonnal %{action} és engedélyezd a kétlépcsős hitelesítést, hogy biztonságban tudd a fiókodat. subject: A fiókodat egy új IP-címről érték el title: Új bejelentkezés + terms_of_service_changed: + agreement: A(z) %{domain} használatának folytatásával beleegyezel ezekbe a feltételekbe. Ha nem értesz egyet a frissített feltételekkel, akkor a fiókod törlésével megszakíthatod a(z) %{domain} weboldallal való megállapodásodat. + changelog: 'Dióhéjban ez a frissítés ezt jelenti számodra:' + description: 'Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt:' + description_html: Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt. + sign_off: A(z) %{domain} csapata + subject: A felhasználási feltételei frissítései + subtitle: A(z) %{domain} felhasználási feltételei megváltoznak + title: Fontos frissítés warning: appeal: Fellebbezés beküldése appeal_description: Ha azt gondolod, hogy ez hibás, beküldhetsz egy fellebbezést a(z) %{instance} szerver csapatának. diff --git a/config/locales/hy.yml b/config/locales/hy.yml index a6924c2b07..dfbbe73e2a 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -462,7 +462,6 @@ hy: logout: Դուրս գալ migrate_account: Տեղափոխուել այլ հաշիւ or_log_in_with: Կամ մուտք գործել օգտագործելով՝ - privacy_policy_agreement_html: Ես կարդացել եւ ընդունել եմ գաղնիութեան քաղաքականութիւնը progress: details: Ձեր տուեալները review: Վաւերացում @@ -482,7 +481,6 @@ hy: title: Մտնել %{domain} sign_up: manual_review: Գրանցումները %{domain}-ում վաւերացնում են մոդերատորնրը։ Մեզ օգնելու համար մի փոքր պատմէք ձեր մասին եւ թե ինչու էք ուզում գրանցուել։ - preamble: Այս հանգոյցում հաշիւ ունենալով դուք կարող էք հերտեւել դաշնեզերքի ցանկացած օգտատիրոջ, անկախ նրանից թե որտեղ է նրա հաշիւը տեղակայուած։ title: Ստեղծի՜ր հաշիւ %{domain}-ում status: account_status: Հաշուի կարգավիճակ diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 9914db1aec..2f8c3ee982 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1132,7 +1132,6 @@ ia: migrate_account: Migrar a un altere conto migrate_account_html: Si tu vole rediriger iste conto a un altere, tu pote configurar lo hic. or_log_in_with: O aperi session con - privacy_policy_agreement_html: Io ha legite e accepta le politica de confidentialitate progress: confirm: Confirmar e-mail details: Tu detalios @@ -1157,7 +1156,6 @@ ia: set_new_password: Definir un nove contrasigno setup: email_below_hint_html: Consulta tu dossier de spam, o requesta un altere ligamine de confirmation. Tu pote corriger tu adresse de e-mail si illo es errate. - email_settings_hint_html: Clicca sur le ligamine que nos te ha inviate pro verificar %{email}. Nos te attendera hic. link_not_received: Necun ligamine recipite? new_confirmation_instructions_sent: Tu recipera un nove e-mail con le ligamine de confirmation in poc minutas! title: Consulta tu cassa de entrata @@ -1166,7 +1164,6 @@ ia: title: Aperir session sur %{domain} sign_up: manual_review: Le inscriptiones sur %{domain} passa per un revision manual de nostre moderatores. Pro adjutar nos a processar tu inscription, per favor scribe un poco sur te e explica proque tu vole un conto sur %{domain}. - preamble: Con un conto sur iste servitor de Mastodon, tu potera sequer qualcunque altere persona sur le rete, independentemente de ubi su conto es albergate. title: Lassa nos installar tu conto sur %{domain}. status: account_status: Stato del conto diff --git a/config/locales/id.yml b/config/locales/id.yml index 60c2026667..03d25a6e53 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -903,7 +903,6 @@ id: migrate_account: Pindah ke akun berbeda migrate_account_html: Jika Anda ingin mengalihkan akun ini ke akun lain, Anda dapat mengaturnya di sini. or_log_in_with: Atau masuk dengan - privacy_policy_agreement_html: Saya telah membaca dan menerima kebijakan privasi providers: cas: CAS saml: SAML @@ -918,7 +917,6 @@ id: sign_in: title: Masuk ke %{domain} sign_up: - preamble: Dengan sebuah akun di server Mastodon ini, Anda akan dapat mengikuti orang lain dalam jaringan, di mana pun akun mereka berada. title: Mari kita siapkan Anda di %{domain}. status: account_status: Status akun diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 5dde082330..4e154b3114 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1039,7 +1039,6 @@ ie: migrate_account: Mover te a un conto diferent migrate_account_html: Si tu vole redirecter ti-ci conto a un altri, tu posse configurar it ci. or_log_in_with: O intrar med - privacy_policy_agreement_html: Yo leet e consenti li politica pri privatie progress: details: Tui detallies review: Nor revise @@ -1062,7 +1061,6 @@ ie: security: Securitá set_new_password: Establisser nov passa-parol setup: - email_settings_hint_html: Clicca li ligament quel noi inviat a te por verificar %{email}. Noi va atender ci. link_not_received: Recivet null ligament? title: Vider tui inbuxe sign_in: @@ -1070,7 +1068,6 @@ ie: title: Aperter session che %{domain} sign_up: manual_review: Adhesiones a %{domain} es tractat manualmen de nor moderatores. Por auxiliar nos tractar tui aplication, scri un poc pri te e pro quo tu vole un conto che %{domain}. - preamble: Med un conto che ti-ci Mastodon-servitor, tu va posser sequer quelcunc altri person in li retage, sin egarda a u logia su conto. title: Crear un conto che %{domain}. status: account_status: Statu del conto diff --git a/config/locales/io.yml b/config/locales/io.yml index c0e4ac6dc1..c89d920f30 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1014,7 +1014,6 @@ io: migrate_account: Transferez a diferanta konto migrate_account_html: Se vu volas ridirektar ca konto a diferanto, vu povas ajustar hike. or_log_in_with: O eniras per - privacy_policy_agreement_html: Me lektis e konsentis privatesguidilo progress: details: Vua detali review: Nia revuo @@ -1037,7 +1036,6 @@ io: security: Chanjar pasvorto set_new_password: Selektar nova pasvorto setup: - email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike. link_not_received: Ka vu ne recevis ligilo? title: Kontrolez vua retposti sign_in: @@ -1045,7 +1043,6 @@ io: title: Enirez a %{domain} sign_up: manual_review: Registragi che %{domain} es revuata da nia personaro. Por helpar ni traktar vua aplikajo, skribez kelko pri vu e pro quo vu volas konto che %{domain}. - preamble: Per konto en ca servilo di Mastodon, on povas sequar irga persono en ca reto, ne ye ube ona konto hostagisas. title: Ni komencigez vu en %{domain}. status: account_status: Kontostando diff --git a/config/locales/is.yml b/config/locales/is.yml index d606106421..f714409ff1 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -214,6 +214,7 @@ is: enable_user: Virkja notanda memorialize_account: Gera aðgang að minningargrein promote_user: Hækka notanda í tign + publish_terms_of_service: Birta þjónustuskilmála reject_appeal: Hafna áfrýjun reject_user: Hafna notanda remove_avatar_user: Fjarlægja auðkennismynd @@ -278,6 +279,7 @@ is: enable_user_html: "%{name} gerði innskráningu virka fyrir notandann %{target}" memorialize_account_html: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu" promote_user_html: "%{name} hækkaði notandann %{target} í tign" + publish_terms_of_service_html: "%{name} gaf út uppfærða þjónustuskilmála" reject_appeal_html: "%{name} hafnaði áfrýjun á ákvörðun umsjónarmanns frá %{target}" reject_user_html: "%{name} hafnaði nýskráningu frá %{target}" remove_avatar_user_html: "%{name} fjarlægði auðkennismynd af %{target}" @@ -927,6 +929,34 @@ is: search: Leita title: Myllumerki updated_msg: Það tókst að uppfæra stillingar myllumerkja + terms_of_service: + back: Til baka í þjónustuskilmála + changelog: Hvað breyttist + create: Notaðu þína eigin + current: Núverandi + draft: Drög + generate: Nota sniðmát + generates: + action: Útbúa + chance_to_review_html: "Sjálfvirkt útbúnu þjónustuskilmálarnir verða ekki birtir sjálfkrafa. Þú munt geta yfirfarið textann. Fylltu inn nauðsynlegar upplýsingar til að halda áfram to proceed." + title: Uppsetning þjónustuskilmála + history: Ferill + live: Í beinni + no_history: Það eru engar breytingar ennþá á þjónustuskilmálunum. + no_terms_of_service_html: Þú ert ekki með neina þjónustuskilmála stillta í augnablikinu. Þjónustuskilmálum er ætlað að gera ábyrgð ljósa og vernda þig fyrir mögulegum kröfum sem notendur gætu gert í ágreiningsmálum við þig. + notified_on_html: Notendur látnir vita þann %{date} + notify_users: Láta notendur vita + preview: + explanation_html: 'Tölvupósturinn verður sendur til %{display_count} notenda sem hafa skráð sig fyrir %{date}. Eftirfarandi texti verður hafður með í póstinum:' + send_preview: Senda forskoðun til %{email} + send_to_all: + one: Senda %{display_count} tölvupóst + other: Senda %{display_count} tölvupósta + title: Forskoða tilkynningu um breytingar á þjónustuskilmálum + publish: Birta + published_on_html: Gefið út þann %{date} + save_draft: Vista drög + title: Þjónustuskilmálar title: Stjórnendur trends: allow: Leyfa @@ -1136,7 +1166,6 @@ is: migrate_account: Færa á annan notandaaðgang migrate_account_html: Ef þú vilt endurbeina þessum aðgangi á einhvern annan, geturðu stillt það hér. or_log_in_with: Eða skráðu inn með - privacy_policy_agreement_html: Ég hef lesið og samþykkt persónuverndarstefnuna progress: confirm: Staðfesta tölvupóstfang details: Nánari upplýsingar þínar @@ -1161,7 +1190,7 @@ is: set_new_password: Stilla nýtt lykilorð setup: email_below_hint_html: Skoðaðu ruslpóstmöppuna þína, eða biddu um annan póst. Þú getur leiðrétt tölvupóstfangið þitt ef þörf er á. - email_settings_hint_html: Ýttu á tengilinn sem við sendum þér til að staðfesta %{email}. Við bíðum á meðan. + email_settings_hint_html: Smelltu á tengilinn sem við sendum á %{email} til að byrja að nota Mastodon. Við bíðum hér á meðan. link_not_received: Fékkstu ekki neinn tengil? new_confirmation_instructions_sent: Þú munt fá nýjan tölvupóst með staðfestingartengli innan skamms! title: Athugaðu pósthólfið þitt @@ -1170,7 +1199,7 @@ is: title: Skrá inn á %{domain} sign_up: manual_review: Nýskráningar á %{domain} fara í gegnum handvirka yfirferð hjá umsjónarfólkinu okkar. Til að flýta fyrir skráningarferlinu, ættirðu að skrifa smávegis um þig og ástæður þess að þú viljir skrá þig á %{domain}. - preamble: Með notandaaðgangi á þessum Mastodon-þjóni geturðu fylgst með hverjum sem er á netkerfinu, sama hvar notandaaðgangurinn þeirra er hýstur. + preamble: Með notandaaðgangi á þessum Mastodon-þjóni geturðu fylgst með hverjum sem er á sambandsnetinu, sama hvar notandaaðgangurinn þeirra er hýstur. title: Förum núna að setja þig upp á %{domain}. status: account_status: Staða notandaaðgangs @@ -1182,6 +1211,7 @@ is: view_strikes: Skoða fyrri bönn notandaaðgangsins þíns too_fast: Innfyllingarform sent inn of hratt, prófaðu aftur. use_security_key: Nota öryggislykil + user_agreement_html: Ég hef lesið og samþykkt þjónustuskilmálana og stefnuna um persónuvernd author_attribution: example_title: Sýnitexti hint_html: Ertu að skrifa fréttir eða bloggfærslur utan Mastodon? Stýrðu því hvernig vitnað er í þig þegar þeim er deilt á Mastodon. @@ -1843,6 +1873,8 @@ is: too_late: Það er orðið of sint að áfrýja þessari refsingu tags: does_not_match_previous_name: samsvarar ekki fyrra nafni + terms_of_service: + title: Þjónustuskilmálar themes: contrast: Mastodon (mikil birtuskil) default: Mastodon (dökkt) @@ -1903,6 +1935,13 @@ is: further_actions_html: Ef þetta varst ekki þú, þá mælum við með að þú %{action} strax og virkjir tveggja-þátta auðkenningu til að halda aðgangnum þínum öruggum. subject: Skráð hefur verið inn á aðganginn þinn frá nýju IP-vistfangi title: Ný innskráning + terms_of_service_changed: + agreement: Með því að halda áfram að nota %{domain}, ert þú þar með að samþykkja þessa skilmála. Ef þú ert ósammála þessum uppfærðu skilmálum, geturðu hvenær sem er sagt upp samþykki þínu gagnvart %{domain} með því að eyða notandaaðgangi þínum. + changelog: 'Í stuttu máli er það þetta sem þessi uppfærsla þýðir fyrir þig:' + sign_off: "%{domain}-teymið" + subject: Breytingar á þjónustuskilmálum okkar + subtitle: Þjónustuskilmálar eru að breytast á %{domain} + title: Mikilvæg uppfærsla warning: appeal: Senda inn áfrýjun appeal_description: Ef þú álítur að um mistök sé að ræða, geturðu sent áfrýjun til umsjónarmanna %{instance}. @@ -2007,4 +2046,4 @@ is: not_enabled: Þú hefur ennþá ekki virkjað WebAuthn not_supported: Þessi vafri styður ekki öryggislykla otp_required: Til að nota öryggislykla skaltu fyrst virkja tveggja-þátta auðkenningu. - registered_on: Nýskráður %{date} + registered_on: Skráði sig %{date} diff --git a/config/locales/it.yml b/config/locales/it.yml index f80728be0a..a561079f3a 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -214,6 +214,7 @@ it: enable_user: Abilita l'Utente memorialize_account: Commemora Profilo promote_user: Promuovi Utente + publish_terms_of_service: Pubblicare i Termini di Servizio reject_appeal: Rifiuta Ricorso reject_user: Rifiuta Utente remove_avatar_user: Rimuovi Avatar @@ -278,6 +279,7 @@ it: enable_user_html: "%{name} ha abilitato l'accesso per l'utente %{target}" memorialize_account_html: "%{name} ha trasformato il profilo di %{target} in una pagina commemorativa" promote_user_html: "%{name} ha promosso l'utente %{target}" + publish_terms_of_service_html: "%{name} ha pubblicato aggiornamenti ai termini di servizio" reject_appeal_html: "%{name} ha rifiutato il ricorso alla decisione di moderazione da %{target}" reject_user_html: "%{name} ha rifiutato l'iscrizione da %{target}" remove_avatar_user_html: "%{name} ha rimosso l'avatar di %{target}" @@ -925,6 +927,35 @@ it: search: Cerca title: Hashtag updated_msg: Impostazioni hashtag aggiornate con successo + terms_of_service: + back: Torna ai termini di servizio + changelog: Cosa è cambiato + create: Usa i tuoi + current: Attuale + draft: Bozza + generate: Usa il modello + generates: + action: Genera + chance_to_review_html: "I termini di servizio generati non verranno pubblicati automaticamente. Avrai la possibilità di esaminare i risultati. Si prega di inserire i dettagli necessari per procedere." + explanation_html: Il modello di termini di servizio fornito è solo a scopo informativo e non deve essere interpretato come consulenza legale su alcun argomento. Si prega di consultare il proprio consulente legale, in merito alla propria situazione e alle specifiche questioni legali che si hanno. + title: Impostazione dei Termini di Servizio + history: Cronologia + live: In uso + no_history: Non sono ancora state registrate modifiche ai termini di servizio. + no_terms_of_service_html: Al momento non hai configurato alcun termine di servizio. I termini di servizio sono pensati per fornire chiarezza e proteggerti da potenziali responsabilità in caso di controversie con i tuoi utenti. + notified_on_html: 'Utenti notificati in data: %{date}' + notify_users: Notifica gli utenti + preview: + explanation_html: 'L''email verrà inviata a %{display_count} utenti che si sono registrati prima del giorno %{date}. Il seguente testo sarà incluso nell''email:' + send_preview: Invia l'anteprima a %{email} + send_to_all: + one: Invia %{display_count} email + other: Invia %{display_count} email + title: Anteprima della notifica dei termini di servizio + publish: Pubblica + published_on_html: 'Pubblicati in data: %{date}' + save_draft: Salva la bozza + title: Termini di Servizio title: Amministrazione trends: allow: Consenti @@ -1134,7 +1165,6 @@ it: migrate_account: Sposta ad un account differente migrate_account_html: Se vuoi che questo account sia reindirizzato a uno diverso, puoi configurarlo qui. or_log_in_with: Oppure accedi con - privacy_policy_agreement_html: Ho letto e accetto l'informativa sulla privacy progress: confirm: Conferma l'e-mail details: I tuoi dettagli @@ -1159,7 +1189,7 @@ it: set_new_password: Imposta una nuova password setup: email_below_hint_html: Controlla la tua cartella spam o richiedine un'altra. Puoi correggere il tuo indirizzo e-mail, se è sbagliato. - email_settings_hint_html: Fai clic sul link che ti abbiamo inviato per verificare %{email}. Aspetteremo proprio qui. + email_settings_hint_html: Clicca sul collegamento che abbiamo inviato all'indirizzo %{email}, per iniziare a usare Mastodon. Ti aspettiamo qui. link_not_received: Non hai ricevuto un link? new_confirmation_instructions_sent: Riceverai una nuova e-mail con il link di conferma entro pochi minuti! title: Controlla la tua posta in arrivo @@ -1168,7 +1198,7 @@ it: title: Accedi a %{domain} sign_up: manual_review: Le registrazioni su %{domain} vengono sottoposte a revisione manuale da parte dei nostri moderatori. Per aiutarci a elaborare la tua registrazione, scrivi qualcosa su di te e sul motivo per cui desideri un account su %{domain}. - preamble: Con un account su questo server Mastodon, sarai in grado di seguire qualsiasi altra persona sulla rete, indipendentemente da dove sia ospitato il suo account. + preamble: Con un account su questo server Mastodon, potrai seguire qualsiasi altra persona sul fediverso, indipendentemente da dove sia ospitato il suo account. title: Lascia che ti configuriamo su %{domain}. status: account_status: Stato dell'account @@ -1180,6 +1210,7 @@ it: view_strikes: Visualizza le sanzioni precedenti prese nei confronti del tuo account too_fast: Modulo inviato troppo velocemente, riprova. use_security_key: Usa la chiave di sicurezza + user_agreement_html: Ho letto e accetto i termini di servizio e l'informativa sulla privacy author_attribution: example_title: Testo di esempio hint_html: Stai scrivendo notizie o articoli di blog al di fuori di Mastodon? Controlla come vieni accreditato quando vengono condivisi su Mastodon. @@ -1841,6 +1872,8 @@ it: too_late: È troppo tardi per fare appello contro questa sanzione tags: does_not_match_previous_name: non corrisponde al nome precedente + terms_of_service: + title: Termini di Servizio themes: contrast: Mastodon (contrasto elevato) default: Mastodon (scuro) @@ -1901,6 +1934,15 @@ it: further_actions_html: Se non eri tu, ti consigliamo di %{action} subito e di abilitare l'autenticazione a due fattori per mantenere il tuo account al sicuro. subject: C'è stato un accesso al tuo account da un nuovo indirizzo IP title: Un nuovo accesso + terms_of_service_changed: + agreement: Continuando a usare %{domain}, accetti questi termini. Se non sei d'accordo con i termini aggiornati, puoi terminare il tuo accordo con %{domain} in qualsiasi momento eliminando il tuo account. + changelog: 'Ecco, in sintesi, cosa significa per te questo aggiornamento:' + description: 'Stai ricevendo questa e-mail perché stiamo apportando alcune modifiche ai nostri termini di servizio su %{domain}. Ti invitiamo a leggere i termini aggiornati per intero qui:' + description_html: Stai ricevendo questa e-mail perché stiamo apportando alcune modifiche ai nostri termini di servizio su %{domain}. Ti invitiamo a leggere i termini aggiornati per intero qui. + sign_off: Il team di %{domain} + subject: Aggiornamenti ai nostri termini di servizio + subtitle: I termini di servizio di %{domain} stanno cambiando + title: Aggiornamento importante warning: appeal: Presenta un appello appeal_description: Se credi che si tratti di un errore, puoi presentare un appello allo staff di %{instance}. diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 51e7f0e05c..139a248858 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1404,7 +1404,6 @@ ja: migrate_account: 別のアカウントに引っ越す migrate_account_html: 引っ越し先を明記したい場合はこちらで設定できます。 or_log_in_with: または次のサービスでログイン - privacy_policy_agreement_html: プライバシーポリシーを読み、同意します progress: confirm: メールアドレスの確認 details: ユーザー情報 @@ -1432,7 +1431,6 @@ ja: set_new_password: 新しいパスワード setup: email_below_hint_html: 確認メールが迷惑メールフォルダに振り分けられていないか確認してください。メールアドレスを間違えた場合は、ここでメールアドレスの変更と確認メールの再送ができます。 - email_settings_hint_html: メールに記載のリンクを開いて %{email} を確認してください。 link_not_received: 確認メールを受信できない場合は new_confirmation_instructions_sent: 確認用のリンクを記載した新しいメールを送信しました title: 確認メールを送信しました @@ -1441,7 +1439,6 @@ ja: title: "%{domain}にログイン" sign_up: manual_review: "%{domain} への登録にはモデレーターによる承認が必要です。審査の参考になるように、簡単な自己紹介や %{domain} に登録したい理由などを記入してください。" - preamble: この Mastodon サーバーのアカウントがあれば、ネットワーク上の他の人のアカウントがどこでホストされているかに関係なく、その人をフォローすることができます。 title: さあ %{domain} でセットアップしましょう. status: account_status: アカウントの状態 @@ -1961,6 +1958,7 @@ ja: scheduled_statuses: over_daily_limit: その日予約できる投稿数 %{limit}を超えています over_total_limit: 予約できる投稿数 %{limit}を超えています + too_soon: 日付は未来でなければなりません self_destruct: lead_html: 残念ながら、%{domain} は恒久的に閉鎖されます。ここにお持ちだったアカウントを今後使うことはできませんが、これまでのデータのバックアップを要求することはまだ可能です。 title: このサーバーは閉鎖されます diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 1f5c5ded79..314029a89e 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -495,7 +495,6 @@ kab: logout: Ffeɣ migrate_account: Gujj ɣer umiḍan nniḍen or_log_in_with: Neɣ eqqen s - privacy_policy_agreement_html: Ɣriɣ yerna qebleɣ tasertit n tbaḍnit progress: confirm: Sentem imayl details: Isalli-inek @@ -518,13 +517,11 @@ kab: security: Taɣellist set_new_password: Egr-d awal uffir amaynut setup: - email_settings_hint_html: Sit ɣef useɣwen i ak-d-nceyyeε akken ad tesfeqdeḍ %{email}. Ad nerǧu da kan. link_not_received: Ur k-id-iṣaḥ ara wassaɣ ? sign_in: preamble_html: Kcem ar %{domain} s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya. title: Akeččum ɣer %{domain} sign_up: - preamble: S umiḍan deg uqeddac-a n Mastodon, ad tizmireḍ ad tḍefreḍ win i ak·kem-yehwan deg uẓeṭṭa, anida yebɣu yili umiḍan-nnsen. title: Iyya ad d-nessewjed tiɣawsiwin i %{domain}. status: account_status: Addad n umiḍan diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c7e12961b6..f7469ce25a 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -211,6 +211,7 @@ ko: enable_user: 사용자 활성화 memorialize_account: 고인의 계정으로 전환 promote_user: 사용자 승급 + publish_terms_of_service: 이용 약관 게시 reject_appeal: 이의 제기 거절 reject_user: 사용자 거부 remove_avatar_user: 아바타 지우기 @@ -275,6 +276,7 @@ ko: enable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 활성화했습니다" memorialize_account_html: "%{name} 님이 %{target}의 계정을 고인의 계정 페이지로 전환했습니다" promote_user_html: "%{name} 님이 사용자 %{target}를 승급시켰습니다" + publish_terms_of_service_html: "%{name} 님이 이용 약관을 업데이트했습니다" reject_appeal_html: "%{name} 님이 %{target}의 중재 결정에 대한 이의 제기를 거절했습니다" reject_user_html: "%{name} 님이 %{target} 님의 가입을 거부했습니다" remove_avatar_user_html: "%{name} 님이 %{target} 님의 아바타를 지웠습니다" @@ -913,6 +915,31 @@ ko: search: 검색 title: 해시태그 updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다 + terms_of_service: + back: 이용약관으로 돌아가기 + changelog: 변경사항 + create: 직접 사용 + current: 현재 + draft: 초안 + generate: 템플릿 사용 + generates: + action: 생성 + chance_to_review_html: "생성된 이용 약관은 자동으로 게시되지 않을 것입니다. 결과를 확인할 기회가 있습니다. 진행하려면 필요한 정보들을 입력하세요." + title: 이용 약관 설정 + history: 역사 + live: 활성 + notified_on_html: 사용자들이 %{date}에 알림을 받았습니다 + notify_users: 사용자들에게 알리기 + preview: + explanation_html: "%{date} 이전에 가입한 %{display_count} 명의 사용자에게 이메일이 발송됩니다. 다음 내용이 이메일에 포함됩니다:" + send_preview: 미리보기를 %{email}에 보내기 + send_to_all: + other: "%{display_count} 건의 메일 발송" + title: 이용 약관 알림 미리보기 + publish: 게시 + published_on_html: "%{date}에 게시됨" + save_draft: 초안 저장 + title: 이용 약관 title: 관리 trends: allow: 허용 @@ -1116,7 +1143,6 @@ ko: migrate_account: 계정 옮기기 migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 여기에서 설정할 수 있습니다. or_log_in_with: 다른 방법으로 로그인 하려면 - privacy_policy_agreement_html: 개인정보처리방침을 읽고 동의합니다 progress: confirm: 이메일 확인 details: 세부사항 @@ -1141,7 +1167,7 @@ ko: set_new_password: 새 암호 설정 setup: email_below_hint_html: 스팸 폴더를 체크해보거나, 새로 요청할 수 있습니다. 이메일을 잘못 입력한 경우 수정할 수 있습니다. - email_settings_hint_html: "%{email}을 인증하기 위해 우리가 보낸 링크를 누르세요. 여기서 기다리겠습니다." + email_settings_hint_html: "%{email}로 보낸 링크를 클릭해 마스토돈을 시작하세요. 기다리고 있겠습니다." link_not_received: 링크를 못 받으셨나요? new_confirmation_instructions_sent: 확인 링크가 담긴 이메일이 몇 분 안에 도착할것입니다! title: 수신함 확인하기 @@ -1150,7 +1176,7 @@ ko: title: "%{domain}에 로그인" sign_up: manual_review: "%{domain} 가입은 중재자들의 심사를 거쳐 진행됩니다. 가입 절차를 원활하게 하기 위해, 간단한 자기소개와 왜 %{domain}에 계정을 만들려고 하는지 적어주세요." - preamble: 이 마스토돈 서버의 계정을 통해, 네트워크에 속한 다른 사람들을, 그들이 어떤 서버에 있든 팔로우 할 수 있습니다. + preamble: 이 마스토돈 서버의 계정을 통해, 연합우주에 속한 다른 사람들을, 그들이 어떤 서버에 있든 팔로우 할 수 있습니다. title: "%{domain}에 가입하기 위한 정보들을 입력하세요." status: account_status: 계정 상태 @@ -1162,6 +1188,7 @@ ko: view_strikes: 내 계정에 대한 과거 중재 기록 보기 too_fast: 너무 빠르게 양식이 제출되었습니다, 다시 시도하세요. use_security_key: 보안 키 사용 + user_agreement_html: 이용 약관개인정보처리방침을 읽었고 동의합니다 author_attribution: example_title: 예시 텍스트 hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요. @@ -1799,6 +1826,8 @@ ko: too_late: 이의를 제기하기에 너무 늦었습니다 tags: does_not_match_previous_name: 이전 이름과 맞지 않습니다 + terms_of_service: + title: 이용 약관 themes: contrast: 마스토돈 (고대비) default: 마스토돈 (어두움) @@ -1859,6 +1888,15 @@ ko: further_actions_html: 직접 로그인한 것이 아니라면, 지금 바로 %{action}과 2단계 인증을 활성화하여 계정을 안전하게 보호하시길 권해드립니다. subject: 계정이 새로운 IP에서 접근됨 title: 새로운 로그인 + terms_of_service_changed: + agreement: "%{domain}을 계속 사용하는 것으로 약관에 동의하는 것으로 간주합니다. 약관에 동의하지 않는 경우 계정을 삭제함으로써 언제든 동의를 철회할 수 있습니다." + changelog: '이번 변경사항의 주요 내용입니다:' + description: "%{domain}의 이용 약관이 변경되었기 때문에 발송된 이메일입니다. 변경된 전체 약관을 확인하시길 권합니다:" + description_html: '%{domain}의 이용 약관이 변경되었기 때문에 발송된 이메일입니다. 변경된 전체 약관을 확인하시길 권합니다.' + sign_off: "%{domain} 팀" + subject: 변경된 이용 약관 + subtitle: "%{domain}의 이용 약관이 변경됩니다" + title: 중요한 알림 warning: appeal: 이의 제출하기 appeal_description: 이것이 오류라고 생각한다면, %{instance}의 중재자에게 이의신청을 할 수 있습니다. diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 77d14c6ca8..06f3e32f20 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -916,7 +916,6 @@ ku: migrate_account: Livandin bo ajimêreke din migrate_account_html: Ku tu dixwazî ev ajimêr li ajimêreke cuda beralî bikî, tu dikarî ji vir de saz bike. or_log_in_with: An têketinê bike bi riya - privacy_policy_agreement_html: Min Politîka taybetiyê xwend û dipejirînim providers: cas: CAS saml: SAML @@ -932,7 +931,6 @@ ku: preamble_html: Têketinê bike bi riya %{domain} xwe. Ku ajimêrê te li ser rajekareke cuda hatiye pêşkêşkirin, tu yê nikaribû têketinê bikî vir. title: Têkeve %{domain} sign_up: - preamble: Bi ajimêrekê li ser vê rajekarê Mastodon re, tu yê karîbî her keseke din li ser torê bişopînî, her ku ajimêrê wan li ku derê tê pêşkêşkirin. title: Ka em te bi rê bixin li ser %{domain}. status: account_status: Rewşa ajimêr diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 69bcd5b941..939a8826b2 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1097,7 +1097,6 @@ lad: migrate_account: Transferate a otro kuento migrate_account_html: Si keres readresar este kuento a otra distinta, puedes konfigurarlo aki. or_log_in_with: O konektate kon tu kuento kon - privacy_policy_agreement_html: Tengo meldado i acheto la politika de privasita progress: confirm: Konfirma posta details: Tus detalyos @@ -1122,7 +1121,6 @@ lad: set_new_password: Establese muevo kod setup: email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki. - email_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki. link_not_received: No risivites un atadijo? new_confirmation_instructions_sent: Resiviras un muevo mesaj de posta elektronika kon el atadjio de konfirmasyon en unos minutos! title: Reviza tu kuti de arivo @@ -1131,7 +1129,6 @@ lad: title: Konektate kon %{domain} sign_up: manual_review: Las enrejistrasyones en %{domain} pasan por la revizyon manuala de muestros moderadores. Para ayudarmos a prosesar tu enrejistrasyon, eskrive un poko sovre ti i por ke keres un kuento en %{domain}. - preamble: Kon un kuento en este sirvidor de Mastodon, podras segir a kualkier otra persona en la red, endependientemente del sirvidor en el ke se tope. title: Kriya kuento de Mastodon en %{domain}. status: account_status: Estado del kuento diff --git a/config/locales/lt.yml b/config/locales/lt.yml index e629373483..dbca48dd37 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -208,6 +208,7 @@ lt: enable_user: Įjungti naudotoją memorialize_account: Memorializuoti paskyrą promote_user: Paaukštinti naudotoją + publish_terms_of_service: Publikuoti paslaugų sąlygas reject_appeal: Atmesti apeliaciją reject_user: Atmesti naudotoją remove_avatar_user: Pašalinti avatarą @@ -264,6 +265,7 @@ lt: enable_user_html: "%{name} įjungė prisijungimą naudotojui %{target}" memorialize_account_html: "%{name} pavertė %{target} paskyrą į atminimo puslapį" promote_user_html: "%{name} paaukštino naudotoją %{target}" + publish_terms_of_service_html: "%{name} publikavo paslaugų sąlygų naujinimus" reject_appeal_html: "%{name} atmetė prižiūjimo veiksmo apeliaciją iš %{target}" reject_user_html: "%{name} atmetė registraciją iš %{target}" remove_avatar_user_html: "%{name} pašalino %{target} avatarą" @@ -643,6 +645,37 @@ lt: reset: Atkurti search: Paieška title: Saitažodžiai + terms_of_service: + back: Atgal į paslaugų sąlygas + changelog: Kas pasikeitė + create: Naudoti savo + current: Dabartinė + draft: Parengti iš naujo + generate: Naudoti šabloną + generates: + action: Generuoti + chance_to_review_html: "Sugeneruotos paslaugų sąlygos nebus publikuojamos automatiškai. Turėsite galimybę peržiūrėti rezultatus. Kad tęstumėte, užpildykite reikiamą informaciją." + explanation_html: Pateiktas paslaugų sąlygų šablonas yra tik informacinio pobūdžio ir neturėtų būti laikomas teisiniu patarimu bet kokiu klausimu. Dėl savo situacijos ir konkrečių teisinių klausimų pasitarkite su savo teisininku. + title: Paslaugų sąlygų sąranka + history: Istorija + live: Tiesioginis + no_history: Kol kas nėra įrašyta paslaugų sąlygų pakeitimų. + no_terms_of_service_html: Šiuo metu nesate sukonfigūravę jokių paslaugų sąlygų. Paslaugų sąlygos skirtos suteikti aiškumo ir apsaugoti jus nuo galimų įsipareigojimų ginčuose su naudotojais. + notified_on_html: Naudotojams pranešta %{date} + notify_users: Pranešti naudotojus + preview: + explanation_html: 'El. laiškas bus išsiųstas %{display_count} naudotojams, kurie užsiregistravo iki %{date}. Į el. laišką bus įtrauktas toks tekstas:' + send_preview: Siųsti peržiūrą į %{email} + send_to_all: + few: Siųsti %{display_count} el. laiškus + many: Siųsti %{display_count} el. laiško + one: Siųsti %{display_count} el. laišką + other: Siųsti %{display_count} el. laiškų + title: Peržiūrėti paslaugų sąlygų pranešimą + publish: Publikuoti + published_on_html: Publikuota %{date} + save_draft: Išsaugoti juodraštį + title: Paslaugų sąlygos title: Administracija trends: allow: Leisti @@ -795,7 +828,6 @@ lt: migrate_account: Persikelti prie kitos paskyros migrate_account_html: Jei nori šią paskyrą nukreipti į kitą, gali sukonfigūruoti ją čia. or_log_in_with: Arba prisijungti su - privacy_policy_agreement_html: Perskaičiau ir sutinku su privatumo politika progress: details: Tavo duomenys review: Mūsų peržiūra @@ -818,17 +850,20 @@ lt: security: Apsauga set_new_password: Nustatyti naują slaptažodį setup: - email_settings_hint_html: Spustelėk mūsų atsiųstą nuorodą, kad patikrintum %{email}. Mes lauksime čia. + email_settings_hint_html: Spustelėkite nuorodą, kurią atsiuntėme adresu %{email}, kad pradėtumėte naudoti „Mastodon“. Lauksime čia. link_not_received: Negavai nuorodos? title: Patikrinti pašto dėžutę sign_in: preamble_html: Prisijunk su savo %{domain} kredencialais. Jei tavo yra kitame serveryje, čia prisijungti negalėsi. title: Prisijungti prie %{domain} + sign_up: + preamble: Su šio „Mastodon“ serverio paskyra galėsite sekti bet kurį kitą fediversijoje esantį asmenį, nepriklausomai nuo to, kur yra jo paskyra. status: account_status: Paskyros būsena redirecting_to: Tavo paskyra yra neaktyvi, nes šiuo metu ji nukreipiama į %{acct}. self_destruct: Kadangi %{domain} uždaromas, turėsi tik ribotą prieigą prie savo paskyros. view_strikes: Peržiūrėti ankstesnius savo paskyros pažeidimus + user_agreement_html: Perskaičiau ir sutinku su paslaugų sąlygomis ir privatumo politika author_attribution: example_title: Teksto pavyzdys hint_html: Ar rašote naujienas ar tinklaraščio straipsnius už „Mastodon“ ribų? Valdykite, kaip būsite nurodomi, kai jais bus bendrinama platformoje „Mastodon“. @@ -1070,6 +1105,7 @@ lt: scheduled_statuses: over_daily_limit: Jūs pasieketė limitą (%{limit}) galimų toot'ų per dieną over_total_limit: Jūs pasieketė %{limit} limitą galimų toot'ų + too_soon: data turi būti ateityje. sessions: activity: Paskutinė veikla browser: Naršyklė @@ -1161,6 +1197,8 @@ lt: min_age_label: Amžiaus riba stream_entries: sensitive_content: Jautrus turinys + terms_of_service: + title: Paslaugų sąlygos themes: contrast: Mastodon (didelis kontrastas) default: Mastodon (tamsi) @@ -1198,6 +1236,15 @@ lt: title: Nepavyko atlikti dvigubo tapatybės nustatymo suspicious_sign_in: further_actions_html: Jei tai buvai ne tu, rekomenduojame nedelsiant %{action} ir įjungti dvigubą tapatybės nustatymą, kad tavo paskyra būtų saugi. + terms_of_service_changed: + agreement: Tęsiant naudojimąsi %{domain}, jūs sutinkate su šiomis sąlygomis. Jei nesutinkate su atnaujintomis sąlygomis, bet kuriuo metu galite nutraukti sutartį su %{domain} ištrindami savo paskyrą. + changelog: Trumpai apie tai, ką šis naujinimas reiškia jums + description: 'Šį el. laišką gaunate, nes mes keičiame savo paslaugų sąlygas serveryje %{domain}. Kviečiame susipažinti su visomis atnaujintomis sąlygomis čia:' + description_html: Šį el. laišką gaunate, nes mes keičiame savo paslaugų sąlygas serveryje %{domain}. Kviečiame susipažinti su visomis atnaujintomis sąlygomis čia. + sign_off: "%{domain} komanda" + subject: Paslaugų sąlygų atnaujinimai + subtitle: Keičiasi %{domain} paslaugų sąlygos + title: Svarbus naujinimas warning: categories: spam: Šlamštas diff --git a/config/locales/lv.yml b/config/locales/lv.yml index b49b57f27c..2102e84c99 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1110,7 +1110,6 @@ lv: migrate_account: Pāriešana uz citu kontu migrate_account_html: Ja vēlies novirzīt šo kontu uz citu, tu vari to konfigurēt šeit. or_log_in_with: Vai piesakies ar - privacy_policy_agreement_html: Esmu izlasījis un piekrītu privātuma politikai progress: confirm: Apstiprināt e-pasta adresi details: Tavi dati @@ -1135,7 +1134,6 @@ lv: set_new_password: Iestatīt jaunu paroli setup: email_below_hint_html: Jāpārbauda sava surogātpasta mape vai jāpieprasa vēl vienu! Savu e-pasta adresi var labot, ja tā ir nepareiza. - email_settings_hint_html: Noklikšķini uz saites, kuru mēs tev nosūtījām, lai apstiprinātu %{email}. Mēs tepat pagaidīsim. link_not_received: Vai nesaņēmi sati? new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pasta ziņojumu ar apstiprinājuma saiti. title: Pārbaudi savu iesūtni @@ -1144,7 +1142,6 @@ lv: title: Pieteikties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. - preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts viņa konts. title: Atļauj tevi iestatīt %{domain}. status: account_status: Konta statuss diff --git a/config/locales/ms.yml b/config/locales/ms.yml index d872c342cb..94cbca57fd 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1001,7 +1001,6 @@ ms: migrate_account: Pindah kepada akaun lain migrate_account_html: Jika anda ingin mengubah hala akaun ini kepada akaun lain, anda boleh konfigurasikannya di sini. or_log_in_with: Atau daftar masuk dengan - privacy_policy_agreement_html: Saya telah membaca dan bersetuju menerima dasar privasi progress: details: Maklumat anda review: Ulasan kami @@ -1024,7 +1023,6 @@ ms: security: Keselamatan set_new_password: Tetapkan kata laluan baharu setup: - email_settings_hint_html: Klik pautan yang kami hantar kepada anda untuk mengesahkan %{email}. Kami akan tunggu di sini. link_not_received: Tidak mendapat pautan? title: Semak peti masuk anda sign_in: @@ -1032,7 +1030,6 @@ ms: title: Log masuk ke %{domain} sign_up: manual_review: Pendaftaran pada %{domain} melalui semakan manual oleh penyederhana kami. Untuk membantu kami memproses pendaftaran anda, tulis sedikit tentang diri anda dan sebab anda mahukan akaun di %{domain}. - preamble: Dengan akaun pada server Mastodon ini, anda akan dapat mengikuti mana-mana orang lain di rangkaian, tidak kira di mana akaun mereka dihoskan. title: Mari sediakan anda pada %{domain}. status: account_status: Status akaun diff --git a/config/locales/my.yml b/config/locales/my.yml index 4c9573c2eb..cba06d15f4 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -994,7 +994,6 @@ my: migrate_account: အခြားအကောင့်တစ်ခုသို့ ရွှေ့ရန် migrate_account_html: ဤအကောင့်ကို အခြားအကောင့်သို့ ပြန်ညွှန်းလိုပါက ဤနေရာတွင် စီစဉ်သတ်မှတ်နိုင်သည်။ or_log_in_with: သို့မဟုတ် အကောင့်ဖြင့် ဝင်ရောက်ပါ - privacy_policy_agreement_html: ကိုယ်ရေးအချက်အလက်မူဝါဒ ကို ဖတ်ပြီး သဘောတူလိုက်ပါပြီ progress: details: သင့်အသေးစိတ်အချက်အလက်များ review: ကျွန်ုပ်တို့၏သုံးသပ်ချက် @@ -1017,7 +1016,6 @@ my: security: လုံခြုံရေး set_new_password: စကားဝှက်အသစ် သတ်မှတ်ပါ။ setup: - email_settings_hint_html: "%{email} အတည်ပြုရန် သင့်ထံပေးပို့သော လင့်ခ်ကို နှိပ်ပါ။ စောင့်နေပါမည်။" link_not_received: လင့်ခ် မရခဲ့ဘူးလား။ title: သင့်ဝင်စာပုံးကို စစ်ဆေးပါ sign_in: @@ -1025,7 +1023,6 @@ my: title: "%{domain} သို့ အကောင့်ဝင်ရန်" sign_up: manual_review: "%{domain} ၌ အကောင့်ဖွင့်ခြင်းများတွင် ကျွန်ုပ်တို့၏ ကြီးကြပ်သူများမှ ကိုယ်တိုင်သုံးသပ် လုပ်ဆောင်လျက်ရှိပါသည်။ သင့်အကြောင်းနှင့် %{domain} တွင် အကောင့်ဖွင့်လိုသည့်အကြောင်း အနည်းငယ်ရေးသားခြင်းဖြင့် သင့်အကောင့်စာရင်းသွင်းခြင်းမှာ ကျွန်ုပ်တို့ကို အကူအညီဖြစ်စေပါသည်။" - preamble: ဤ Mastodon အကောင့်တစ်ခုဖြင့် သင်သည် ကွန်ရက်ပေါ်ရှိ အခြားမည်သူ့မဆို မည်သည့်ဆာဗာတွင်ရှိစေကာမူ သင်စောင့်ကြည့်နိုင်မည်ဖြစ်ပါသည်။ title: "%{domain} တွင် ထည့်သွင်းရန်။" status: account_status: အကောင့်အခြေအနေ diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 86fc42527a..c41652ca0d 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -214,6 +214,7 @@ nl: enable_user: Gebruiker inschakelen memorialize_account: Het account in een In memoriam veranderen promote_user: Gebruiker promoveren + publish_terms_of_service: Algemene gebruiksvoorwaarden publiceren reject_appeal: Bezwaar afwijzen reject_user: Gebruiker afwijzen remove_avatar_user: Profielfoto verwijderen @@ -278,6 +279,7 @@ nl: enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd + publish_terms_of_service_html: "%{name} publiceerde updates van de servicevoorwaarden" reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatiemaatregel van %{target} afgewezen" reject_user_html: "%{name} heeft de registratie van %{target} afgewezen" remove_avatar_user_html: "%{name} verwijderde de profielfoto van %{target}" @@ -925,6 +927,35 @@ nl: search: Zoeken title: Hashtags updated_msg: Instellingen hashtag succesvol bijgewerkt + terms_of_service: + back: Terug naar de gebruiksvoorwaarden + changelog: Wat is veranderd + create: Gebruik je eigen + current: Huidige + draft: Concept + generate: Sjabloon gebruiken + generates: + action: Genereren + chance_to_review_html: "De gegenereerde gebruiksvoorwaarden worden niet automatisch gepubliceerd. Je krijgt gelegenheid om de resultaten te bekijken. Vul de benodigde gegevens in om verder te gaan." + explanation_html: Het sjabloon voor de gebruiksvoorwaarden is uitsluitend bedoeld voor informatieve doeleinden en mag niet worden opgevat als juridisch advies over welk onderwerp dan ook. Raadpleeg een eigen juridisch adviseur over jouw situatie en voor specifieke juridische vragen. + title: Gebruiksvoorwaarden instellen + history: Geschiedenis + live: Actueel + no_history: Er zijn nog geen opgeslagen wijzigingen van de gebruiksvoorwaarden. + no_terms_of_service_html: Je hebt momenteel geen servicevoorwaarden geconfigureerd. De gebruiksvoorwaarden zijn bedoeld om duidelijkheid te verschaffen en je te beschermen tegen mogelijke verplichtingen in geschillen met gebruikers. + notified_on_html: Gebruikers ingelicht op %{date} + notify_users: Gebruikers informeren + preview: + explanation_html: 'De e-mail wordt verzonden naar %{display_count} gebruikers die zich hebben aangemeld voor %{date}. De volgende tekst zal in de e-mail worden opgenomen:' + send_preview: Voorbeeld verzenden naar %{email} + send_to_all: + one: "%{display_count} e-mail verzenden" + other: "%{display_count} e-mails verzenden" + title: Voorbeeld van Melding gebruiksvoorwaarden + publish: Publiceren + published_on_html: Gepubliceerd op %{date} + save_draft: Concept opslaan + title: Gebruiksvoorwaarden title: Beheer trends: allow: Goedkeuren @@ -1132,7 +1163,6 @@ nl: migrate_account: Naar een ander account verhuizen migrate_account_html: Wanneer je dit account naar een ander account wilt doorverwijzen, kun je dit hier instellen. or_log_in_with: Of inloggen met - privacy_policy_agreement_html: Ik heb het privacybeleid gelezen en ga daarmee akkoord progress: confirm: E-mailadres bevestigen details: Jouw gegevens @@ -1157,7 +1187,7 @@ nl: set_new_password: Nieuw wachtwoord instellen setup: email_below_hint_html: Controleer je map met spam, of vraag een nieuwe bevestigingslink aan. Je kan je e-mailadres corrigeren als het verkeerd is. - email_settings_hint_html: Klik op de link die we je hebben gestuurd om %{email} te verifiëren. We wachten wel even. + email_settings_hint_html: Klik op de link die we naar %{email} hebben gestuurd om Mastodon te gebruiken. We wachten hier af. link_not_received: Geen link ontvangen? new_confirmation_instructions_sent: Je ontvangt binnen enkele minuten een nieuwe e-mail met de bevestigingslink! title: Kijk in je mailbox @@ -1166,7 +1196,7 @@ nl: title: Inloggen op %{domain} sign_up: manual_review: Inschrijvingen op %{domain} worden handmatig door onze moderatoren beoordeeld. Schrijf wat over jezelf en waarom je een account op %{domain} wilt. Hiermee help je ons om de aanvraag van jouw account goed te kunnen verwerken. - preamble: Je kunt met een Mastodon-account iedereen in het netwerk volgen, ongeacht waar deze persoon een account heeft. + preamble: Met een account op deze Mastodon-server kun je iedereen volgen op de fediverse, ongeacht waar deze persoon een account heeft. title: Laten we je account op %{domain} instellen. status: account_status: Accountstatus @@ -1178,6 +1208,7 @@ nl: view_strikes: Bekijk de eerder door moderatoren vastgestelde overtredingen die je hebt gemaakt too_fast: Formulier is te snel ingediend. Probeer het nogmaals. use_security_key: Beveiligingssleutel gebruiken + user_agreement_html: Ik heb de gebruiksvoorwaarden en het privacybeleid gelezen en ga ermee akkoord author_attribution: example_title: Voorbeeldtekst hint_html: Schrijf je nieuws- of blogartikelen buiten Mastodon? Bepaal hoe je geattribueerd wordt als deze gedeeld worden op Mastodon. @@ -1839,6 +1870,8 @@ nl: too_late: De periode dat je bezwaar kunt maken tegen deze overtreding is verstreken tags: does_not_match_previous_name: komt niet overeen met de vorige naam + terms_of_service: + title: Gebruiksvoorwaarden themes: contrast: Mastodon (hoog contrast) default: Mastodon (donker) @@ -1899,6 +1932,15 @@ nl: further_actions_html: Wanneer jij dit niet was, adviseren wij om onmiddellijk %{action} en om tweestapsverificatie in te schakelen, om zo je account veilig te houden. subject: Jouw account is vanaf een nieuw IP-adres benaderd title: Een nieuwe registratie + terms_of_service_changed: + agreement: Door %{domain} te blijven gebruiken, ga je akkoord met deze voorwaarden. Als je het niet eens bent met de bijgewerkte voorwaarden, kun je je overeenkomst met %{domain} op elk gewenst moment beëindigen door je account te verwijderen. + changelog: 'In een oogopslag betekent deze update voor jou:' + description: 'Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bekijken:' + description_html: Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier geheel te bestuderen. + sign_off: Het %{domain}-team + subject: Bijwerkingen van onze servicevoorwaarden + subtitle: De gebruiksvoorwaarden van %{domain} veranderen + title: Belangrijke update warning: appeal: Bezwaar indienen appeal_description: Wanneer je denkt dat dit een fout is, kun je een bezwaar indienen bij de medewerkers van %{instance}. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index c0b6aac8bd..5d3ead4290 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1132,7 +1132,6 @@ nn: migrate_account: Flytt til ein annan konto migrate_account_html: Om du vil visa denne kontoen til ein anna, kan du skipe det her. or_log_in_with: Eller logg inn med - privacy_policy_agreement_html: Jeg har lest og godtar retningslinjer for personvern progress: confirm: Stadfest e-post details: Opplysingane dine @@ -1157,7 +1156,6 @@ nn: set_new_password: Lag nytt passord setup: email_below_hint_html: Sjekk søppelpostmappa di, eller be om ein ny. Du kan endra e-postadressa di dersom ho er feil. - email_settings_hint_html: Klikk lenka me sende deg for å stadfesta %{email}. Me sit her og ventar. link_not_received: Fekk du ikkje lenka? new_confirmation_instructions_sent: Du vil få ein ny e-post med stadfestingslenke innan nokre minutt! title: Sjekk innboksen din @@ -1166,7 +1164,6 @@ nn: title: Logg inn på %{domain} sign_up: manual_review: Når du lagar ein konto på %{domain}, vil moderatorane våre gå gjennom påmeldinga di manuelt. For å hjelpa oss med påmeldinga di, er det fint om du skriv litt om deg sjølv og kvifor du vil ha ein konto på %{domain}. - preamble: Med ein konto på denne Mastodon-tenaren kan du fylgja andre folk på nettverket, uansett kvar dei har brukarkontoen sin. title: La oss få deg satt i gang på %{domain}. status: account_status: Kontostatus diff --git a/config/locales/no.yml b/config/locales/no.yml index 01672fe3b3..2529fafb4a 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1033,7 +1033,6 @@ migrate_account: Flytt til en annen konto migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du konfigurere det her. or_log_in_with: Eller logg inn med - privacy_policy_agreement_html: Jeg har lest og godtar retningslinjer for personvern progress: details: Dine opplysninger review: Vår gjennomgang @@ -1056,7 +1055,6 @@ security: Sikkerhet set_new_password: Angi nytt passord setup: - email_settings_hint_html: Klikk på lenken vi sendte deg for å bekrefte %{email}. Vi venter her. link_not_received: Fikk du ikke lenken? title: Sjekk innboksen din sign_in: @@ -1064,7 +1062,6 @@ title: Logg inn på %{domain} sign_up: manual_review: Registreringer på %{domain} krever manuell gjennomgang av moderatorene våre. For å hjelpe oss med å behandle registreringen din, skriv litt om deg selv og hvorfor du vil ha en konto på %{domain}. - preamble: Med en konto på denne Mastodon-tjeneren vil du kunne følge andre personer på nettverket, uansett hvor kontoen deres holder til. title: La oss få deg satt i gang på %{domain}. status: account_status: Kontostatus diff --git a/config/locales/oc.yml b/config/locales/oc.yml index a67f55c6b7..258348d41c 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -481,7 +481,6 @@ oc: migrate_account: Mudar endacòm mai migrate_account_html: Se volètz mandar los visitors d’aqueste compte a un autre, podètz o configurar aquí. or_log_in_with: O autentificatz-vos amb - privacy_policy_agreement_html: Ai legit e accepti la politica de confidencialitat providers: cas: CAS saml: SAML diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 32425d8844..f1dfbe4f7d 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1168,7 +1168,6 @@ pl: migrate_account: Przenieś konto migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz zrobić to tutaj. or_log_in_with: Lub zaloguj się z użyciem - privacy_policy_agreement_html: Przeczytałem/am i akceptuję politykę prywatności progress: confirm: Potwierdź adres e-mail details: Twoje dane @@ -1193,7 +1192,6 @@ pl: set_new_password: Ustaw nowe hasło setup: email_below_hint_html: Sprawdź folder ze spamem lub poproś o inny link potwierdzający. Możesz poprawić swój adres e-mail, jeśli jest niepoprawny. - email_settings_hint_html: Kliknij link, który wysłaliśmy do Ciebie w celu zweryfikowania %{email}. Poczekamy tutaj. link_not_received: Nie otrzymano linku? new_confirmation_instructions_sent: Za kilka minut otrzymasz nowy e-mail z linkiem potwierdzającym! title: Sprawdź swoją skrzynkę odbiorczą @@ -1202,7 +1200,6 @@ pl: title: Zaloguj się do %{domain} sign_up: manual_review: Rejestracja na %{domain} przechodzi przez ręczne sprawdzanie przez naszych moderatorów. Aby pomóc nam usprawnić ten proces, napisz coś o sobie oraz dlaczego chcesz założyć konto na %{domain}. - preamble: Z kontem na tym serwerze Mastodon będziesz mógł obserwować każdą inną osobę w sieci, niezależnie od miejsca przechowywania ich konta. title: Skonfigurujmy Twoje konto na %{domain}. status: account_status: Stan konta diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 23a3b61f9e..fe10dd6462 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -214,6 +214,7 @@ pt-BR: enable_user: Ativar usuário memorialize_account: Converter conta em memorial promote_user: Promover usuário + publish_terms_of_service: Publicar termos de serviço reject_appeal: Rejeitar revisão reject_user: Rejeitar usuário remove_avatar_user: Remover imagem de perfil @@ -278,6 +279,7 @@ pt-BR: enable_user_html: "%{name} ativou o login para %{target}" memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial" promote_user_html: "%{name} promoveu o usuário %{target}" + publish_terms_of_service_html: "%{name} publicou atualizações aos termos de serviço" reject_appeal_html: "%{name} rejeitou a revisão da decisão da moderação em %{target}" reject_user_html: "%{name} rejeitou a inscrição de %{target}" remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}" @@ -925,6 +927,16 @@ pt-BR: search: Buscar title: Hashtags updated_msg: Configurações de hashtag atualizadas + terms_of_service: + back: Voltar aos termos de serviço + changelog: O que há de novo + create: Usar o meu próprio + current: Atual + draft: Rascunho + generate: Usar modelo + generates: + action: Gerar + chance_to_review_html: "Os termos de serviço gerado não será publicado automaticamente.Você terá uma chance de revisar os resultados. Preencha os detalhes necessários para continuar" title: Administração trends: allow: Permitir @@ -1132,7 +1144,6 @@ pt-BR: migrate_account: Mudar-se para outra conta migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode configurar isso aqui. or_log_in_with: Ou entre com - privacy_policy_agreement_html: Eu li e concordo com a política de privacidade progress: confirm: Confirmar e-mail details: Suas informações @@ -1157,7 +1168,6 @@ pt-BR: set_new_password: Definir uma nova senha setup: email_below_hint_html: Verifique a sua pasta de spam, ou solicite outra. Você pode corrigir o seu endereço de e-mail se estiver errado. - email_settings_hint_html: Clique no link que te enviamos para verificar %{email}. Esperaremos aqui. link_not_received: Não recebeu um link? new_confirmation_instructions_sent: Você receberá um novo e-mail com o link de confirmação em alguns minutos! title: Verifique sua caixa de entrada @@ -1166,7 +1176,6 @@ pt-BR: title: Entrar em %{domain} sign_up: manual_review: Inscrições no %{domain} passam pela revisão manual dos nossos moderadores. Para nos ajudar a processar o seu cadastro, escreva um pouco sobre você e por que você quer uma conta no %{domain}. - preamble: Com uma conta neste servidor Mastodon, você poderá seguir qualquer outra pessoa na rede, independentemente de onde sua conta esteja hospedada. title: Então vamos lá criar uma conta em %{domain}. status: account_status: Status da conta diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index cdbed49a8d..f739c93394 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1113,7 +1113,6 @@ pt-PT: migrate_account: Mudar para uma conta diferente migrate_account_html: Se deseja redirecionar esta conta para uma outra pode configurar isso aqui. or_log_in_with: Ou iniciar sessão com - privacy_policy_agreement_html: Eu li e concordo com a política de privacidade progress: confirm: Confirmar e-mail details: Os seus dados @@ -1138,7 +1137,6 @@ pt-PT: set_new_password: Editar palavra-passe setup: email_below_hint_html: Verifique a sua pasta de spam ou solicite outra. Pode corrigir o seu endereço de e-mail se estiver errado. - email_settings_hint_html: Clique no link que enviamos para verificar %{email}. Esperaremos aqui. link_not_received: Não recebeu um link? new_confirmation_instructions_sent: Irá receber uma nova mensagem de e-mail com a ligação de confirmação dentro de alguns minutos! title: Verifique a caixa de entrada do seu e-mail @@ -1147,7 +1145,6 @@ pt-PT: title: Iniciar sessão em %{domain} sign_up: manual_review: Inscrições no %{domain} passam por uma revisão manual pelos nossos moderadores. Para nos ajudar a processar o seu pedido de inscrição, escreva um pouco sobre si e o porquê de quer uma conta no %{domain}. - preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa na rede, independentemente do servidor onde a conta esteja hospedada. title: Vamos lá inscrevê-lo em %{domain}. status: account_status: Estado da conta diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 4a1dbb1dc1..486d87f003 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1168,7 +1168,6 @@ ru: migrate_account: Перенос учётной записи migrate_account_html: Завели новую учётную запись? Перенаправьте подписчиков на неё — настройте перенаправление тут. or_log_in_with: Или войти с помощью - privacy_policy_agreement_html: Мной прочитана и принята политика конфиденциальности progress: confirm: Подтвердите электронную почту details: Ваши данные @@ -1193,7 +1192,6 @@ ru: set_new_password: Задать новый пароль setup: email_below_hint_html: Проверьте папку "Спам" или запросите другую. Вы можете исправить свой адрес электронной почты, если он неправильный. - email_settings_hint_html: Нажмите на ссылку, которую мы отправили вам для проверки %{email}. Мы будем ждать прямо здесь. link_not_received: Не получили ссылку? new_confirmation_instructions_sent: Через несколько минут вы получите новое письмо со ссылкой для подтверждения! title: Проверьте свой почтовый ящик @@ -1202,7 +1200,6 @@ ru: title: Войти в %{domain} sign_up: manual_review: Регистрация на %{domain} проходит через ручную проверку нашими модераторами. Чтобы помочь нам обработать вашу регистрацию, напишите немного о себе и о том, почему вы хотите получить аккаунт на %{domain}. - preamble: С учётной записью на этом сервере Mastodon вы сможете следить за любым другим пользователем в сети, независимо от того, где размещён их аккаунт. title: Зарегистрируйтесь в %{domain}. status: account_status: Статус учётной записи diff --git a/config/locales/sco.yml b/config/locales/sco.yml index be3383ea66..209b761851 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -909,7 +909,6 @@ sco: migrate_account: Uise a different accoont migrate_account_html: Gin ye'r wantin fir tae redireck this accoont tae a different ane, ye kin configure it here. or_log_in_with: Or log in wi - privacy_policy_agreement_html: A'v read an A agree tae the privacy policy providers: cas: CAS saml: SAML @@ -922,7 +921,6 @@ sco: security: Security set_new_password: Set new passwird sign_up: - preamble: Wi a accoont on this Mastodon server, ye'll be able tae follae onie ither person on the netwirk, regairdless o whaur their accoont is hostit. title: Let's get ye set up on %{domain}. status: account_status: Accoont status diff --git a/config/locales/simple_form.az.yml b/config/locales/simple_form.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/simple_form.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 2f9af21aeb..68386eded6 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -130,6 +130,11 @@ bg: show_application: Винаги ще може да видите кое приложение е публикувало публикацията ви независимо. tag: name: Можете да смените само употребата на големи/малки букви, например, за да е по-четимо + terms_of_service: + changelog: Може да се структурира със синтаксиса на Markdown. + text: Може да се структурира със синтаксиса на Markdown. + terms_of_service_generator: + jurisdiction: Впишете държавата, където живее всеки, който плаща сметките. Ако е дружество или друго образувание, то впишете държавата, в която е регистрирано, и градът, регионът, територията или щатът според случая. user: chosen_languages: Само публикации на отметнатите езици ще се показват в публичните часови оси role: Ролята управлява какви позволения има потребителят. @@ -319,6 +324,17 @@ bg: name: Хаштаг trendable: Показване на хаштага да се появява под нашумели usable: Позволяване на публикациите да употребяват този хаштаг локално + terms_of_service: + changelog: Какво е променено? + text: Условия на услугата + terms_of_service_generator: + admin_email: Имейл адрес за правни известия + arbitration_address: Физичен адрес за арбитражни известия + arbitration_website: Уебсайт за подаване на арбитражни известия + dmca_address: Физичен адрес за DMCA/бележки за авторски права + dmca_email: Адрес на е-поща за DMCA/бележки за авторски права + domain: Домейн + jurisdiction: Законова юрисдикция user: role: Роля time_zone: Часова зона diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index d2bf790c9e..2fecc78c79 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -319,6 +319,17 @@ ca: name: Etiqueta trendable: Permet que aquesta etiqueta aparegui en les tendències usable: Permet a les publicacions emprar aquesta etiqueta localment + terms_of_service: + changelog: Què ha canviat? + text: Condicions de servei + terms_of_service_generator: + admin_email: Adreça-e per a les notificacions legals + arbitration_address: Adreça física per a les notificacions d'arbitratge + arbitration_website: Lloc web per a enviar les notificacions d'arbitratge + dmca_address: Adreça física per a les notificacions de copyright/DMCA + dmca_email: Adreça-e per a les notificacions de copyright/DMCA + domain: Domini + jurisdiction: Jurisdicció user: role: Rol time_zone: Zona horària diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 6c21683b07..d5a785e387 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -60,6 +60,7 @@ cy: setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif setting_display_media_hide_all: Cuddio cyfryngau bob tro setting_display_media_show_all: Dangos cyfryngau bob tro + setting_system_scrollbars_ui: Yn berthnasol i borwyr bwrdd gwaith yn seiliedig ar Safari a Chrome yn unig setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maen nhw'n cuddio unrhyw fanylion setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio'n awtomatig username: Gallwch ddefnyddio nodau, rhifau a thanlinellau @@ -129,6 +130,17 @@ cy: show_application: Byddwch bob amser yn gallu gweld pa ap a gyhoeddodd eich postiad beth bynnag. tag: name: Dim ond er mwyn ei gwneud yn fwy darllenadwy y gallwch chi newid y llythrennau, er enghraifft + terms_of_service: + changelog: Mae modd ei strwythuro gyda chystrawen Markdown. + text: Mae modd ei strwythuro gyda chystrawen Markdown. + terms_of_service_generator: + admin_email: Mae hysbysiadau cyfreithiol yn cynnwys gwrth-hysbysiadau, gorchmynion llys, ceisiadau tynnu i lawr, a cheisiadau gorfodi'r gyfraith. + arbitration_address: Gall fod yr un peth â'r cyfeiriad ffisegol uchod, neu “D/A” os ydych chi'n defnyddio e-bost + arbitration_website: Gall fod yn ffurflen we, neu “D/A” os ydych chi'n defnyddio e-bost + dmca_address: Ar gyfer gweithredwyr yr Unol Daleithiau, defnyddiwch y cyfeiriad sydd wedi'i gofrestru yn Designated Agent Directory y DMCA. Mae rhestriad blychau post ar gael ar gais uniongyrchol, defnyddiwch gais Designated Agent Post Office Box Waiver Request y DMCA i anfon e-bost at y Swyddfa Hawlfraint a disgrifiwch eich bod yn gymedrolwr cynnwys yn y cartref sy'n ofni dial neu ddialedd am eich gweithredoedd ac sydd angen defnyddio Blwch P.O. i dynnu eich cyfeiriad cartref o olwg y cyhoedd. + dmca_email: Gall fod yr un e-bost sy'n cael ei ddefnyddio ar gyfer “Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol” uchod + domain: Dynodiad unigryw o'r gwasanaeth ar-lein rydych chi'n ei ddarparu. + jurisdiction: Rhestrwch y wlad lle mae pwy bynnag sy'n talu'r biliau yn byw. Os yw'n gwmni neu'n endid arall, rhestrwch y wlad lle mae wedi'i ymgorffori, a'r ddinas, rhanbarth, tiriogaeth neu wladwriaeth fel y bo'n briodol. user: chosen_languages: Wedi eu dewis, dim ond tŵtiau yn yr ieithoedd hyn bydd yn cael eu harddangos mewn ffrydiau cyhoeddus role: Mae'r rôl yn rheoli pa ganiatâd sydd gan y defnyddiwr. @@ -223,6 +235,7 @@ cy: setting_hide_network: Cuddio eich graff cymdeithasol setting_reduce_motion: Lleihau mudiant mewn animeiddiadau setting_system_font_ui: Defnyddio ffont rhagosodedig y system + setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system setting_theme: Thema'r wefan setting_trends: Dangos pynciau llosg heddiw setting_unfollow_modal: Dangos deialog cadarnhau cyn dad-ddilyn rhywun @@ -317,6 +330,17 @@ cy: name: Hashnod trendable: Caniatáu i'r hashnod hwn ymddangos o dan bynciau llosg usable: Caniatáu i bostiadau ddefnyddio'r hashnod hwn yn lleol + terms_of_service: + changelog: Beth sydd wedi newid? + text: Telerau Gwasanaeth + terms_of_service_generator: + admin_email: Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol + arbitration_address: Cyfeiriad ffisegol ar gyfer hysbysiadau cyflafareddu + arbitration_website: Gwefan ar gyfer cyflwyno hysbysiadau cyflafareddu + dmca_address: Cyfeiriad ffisegol ar gyfer DMCA/hysbysiadau hawlfraint + dmca_email: Cyfeiriad e-bost ar gyfer DMCA/hysbysiadau hawlfraint + domain: Parth + jurisdiction: Awdurdodaeth gyfreithiol user: role: Rôl time_zone: Cylchfa amser diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 78629c95ca..0ef8232dda 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -130,6 +130,17 @@ da: show_application: Du vil dog altid kunne se, hvilken app, der offentliggjorde dit indlæg. tag: name: Kun bogstavtyper (store/små) kan ændres, eksempelvis for at gøre det mere læsbart + terms_of_service: + changelog: Kan struktureres med Markdown-syntaks. + text: Kan struktureres med Markdown-syntaks. + terms_of_service_generator: + admin_email: Juridiske bekendtgørelser omfatter imødegåelsesbekendtgørelser, retskendelser, nedtagelses- og retshåndhævelsesanmodninger. + arbitration_address: Kan være den samme som Fysisk adresse ovenfor, eller “N/A” ved brug af e-mail + arbitration_website: Kan være en webformular, eller “N/A” ved brug af e-mail + dmca_address: For amerikanske operatører, brug den adresse, der er registreret i DMCA Designated Agent Directory. En Postboksliste er tilgængelig på direkte anmodning, brug den DMCA Designated Agent Post Office Box Waiver Request til at e-maile Ophavsretskontoret og beskrive, at man er en hjemmebaseret indholdsmoderator, der frygter hævn eller gengældelse for sine handlinger og behøver en Postboks for at fjerne hjemmeadressen fra den offentlige visning. + dmca_email: Kan være samme e-mail, som brugt til “E-mailadresse til juridiske meddelelser” ovenfor + domain: Unik identifikation af den onlinetjeneste, man leverer. + jurisdiction: Angiv landet, hvor betaleren af regningerne er bosiddende. Er det en virksomhed eller en anden entitet, angiv det land, hvor det er stiftet, og byen, regionen, området eller staten efter behov. user: chosen_languages: Når markeret, vil kun indlæg på de valgte sprog fremgå på offentlige tidslinjer role: Rollen styrer, hvilke tilladelser brugeren er tildelt. @@ -319,6 +330,17 @@ da: name: Hashtag trendable: Tillad visning af dette hashtag under trends usable: Tillad indlæg at benytte dette hashtag lokalt + terms_of_service: + changelog: Hvad der er ændret? + text: Tjenestevilkår + terms_of_service_generator: + admin_email: E-mailadresse til juridiske meddelelser + arbitration_address: Fysisk adresse til voldgiftsmeddelelser + arbitration_website: Websted til indsendelse af voldgiftsmeddelelser + dmca_address: Fysisk adresse til DMCA-/ophavsretsmeddelelser + dmca_email: E-mailadresse til DMCA-/ophavsretsmeddelelser + domain: Domæne + jurisdiction: Juridisk jurisdiktion user: role: Rolle time_zone: Tidszone diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 2ac7791273..201af831ad 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -130,6 +130,16 @@ de: show_application: Du wirst immer sehen können, über welche App dein Beitrag veröffentlicht wurde. tag: name: Du kannst nur die Groß- und Kleinschreibung der Buchstaben ändern, um es z. B. lesbarer zu machen + terms_of_service: + changelog: Kann mit der Markdown-Syntax formatiert werden. + text: Kann mit der Markdown-Syntax formatiert werden. + terms_of_service_generator: + admin_email: Rechtliche Hinweise umfassen Gegendarstellungen, Gerichtsbeschlüsse, Anfragen zum Herunternehmen von Inhalten und Anfragen von Strafverfolgungsbehörden. + arbitration_address: Kann wie die Anschrift hierüber sein oder „N/A“, falls eine E-Mail verwendet wird + arbitration_website: Kann ein Webformular sein oder „N/A“, falls eine E-Mail verwendet wird + dmca_email: Kann dieselbe E-Mail wie bei „E-Mail-Adresse für rechtliche Hinweise“ sein + domain: Einzigartige Identifizierung des angebotenen Online-Services. + jurisdiction: Gib das Land an, in dem die Person lebt, die alle Rechnungen bezahlt. Falls es sich dabei um ein Unternehmen oder eine andere Einrichtung handelt, gib das Land mit dem Sitz an, sowie die Stadt oder Region. user: chosen_languages: Wenn du hier eine oder mehrere Sprachen auswählst, werden ausschließlich Beiträge in diesen Sprachen in deinen öffentlichen Timelines angezeigt role: Die Rolle bestimmt, welche Berechtigungen das Konto hat. @@ -319,6 +329,17 @@ de: name: Hashtag trendable: Erlaube, dass dieser Hashtag in den Trends erscheint usable: Beiträge dürfen diesen Hashtag lokal verwenden + terms_of_service: + changelog: Was hat sich geändert? + text: Nutzungsbedingungen + terms_of_service_generator: + admin_email: E-Mail-Adresse für rechtliche Hinweise + arbitration_address: Anschrift für Schiedsverfahren + arbitration_website: Website zum Einreichen von Schiedsverfahren + dmca_address: Anschrift für Urheberrechtsverletzungen + dmca_email: E-Mail-Adresse für Urheberrechtsverletzungen + domain: Domain + jurisdiction: Gerichtsstand user: role: Rolle time_zone: Zeitzone diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index bdd9c5991c..3d04917561 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -165,6 +165,17 @@ en: show_application: You will always be able to see which app published your post regardless. tag: name: You can only change the casing of the letters, for example, to make it more readable + terms_of_service: + changelog: Can be structured with Markdown syntax. + text: Can be structured with Markdown syntax. + terms_of_service_generator: + admin_email: Legal notices include counternotices, court orders, takedown requests, and law enforcement requests. + arbitration_address: Can be the same as Physical address above, or “N/A” if using email + arbitration_website: Can be a web form, or “N/A” if using email + dmca_address: For US operators, use the address registered in the DMCA Designated Agent Directory. A P.O. Box listing is available upon direct request, use the DMCA Designated Agent Post Office Box Waiver Request to email the Copyright Office and describe that you are a home-based content moderator who fears revenge or retribution for your actions and need to use a P.O. Box to remove your home address from public view. + dmca_email: Can be the same email used for “Email address for legal notices” above + domain: Unique identification of the online service you are providing. + jurisdiction: List the country where whoever pays the bills lives. If it’s a company or other entity, list the country where it’s incorporated, and the city, region, territory or state as appropriate. user: chosen_languages: When checked, only posts in selected languages will be displayed in public timelines role: The role controls which permissions the user has. @@ -462,6 +473,17 @@ en: name: Hashtag trendable: Allow this hashtag to appear under trends usable: Allow posts to use this hashtag locally + terms_of_service: + changelog: What's changed? + text: Terms of Service + terms_of_service_generator: + admin_email: Email address for legal notices + arbitration_address: Physical address for arbitration notices + arbitration_website: Website for submitting arbitration notices + dmca_address: Physical address for DMCA/copyright notices + dmca_email: Email address for DMCA/copyright notices + domain: Domain + jurisdiction: Legal jurisdiction user: role: Role time_zone: Time zone diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 0c5c10d8bd..a741040477 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -183,7 +183,7 @@ eo: defaults: autofollow: Inviti al sekvi vian konton avatar: Rolfiguro - bot: Tio estas robota konto + bot: Ĉi tio estas aŭtomata konto chosen_languages: Filtri lingvojn confirm_new_password: Konfirmi novan pasvorton confirm_password: Konfirmi pasvorton @@ -319,6 +319,11 @@ eo: name: Kradvorto trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj usable: Permesi afiŝojn uzi ĉi tiun kradvorton loke + terms_of_service: + changelog: Kio ŝanĝiĝis? + text: Kondiĉoj de uzado + terms_of_service_generator: + domain: Domajno user: role: Rolo time_zone: Horzono diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 85dc47853c..1dfac9d043 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -130,6 +130,16 @@ es-AR: show_application: Sin embargo, siempre podrás ver desde qué aplicación se envió tu mensaje. tag: name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible + terms_of_service: + changelog: Se puede estructurar con sintaxis Markdown. + text: Se puede estructurar con sintaxis Markdown. + terms_of_service_generator: + arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico + arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico + dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública. + dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba + domain: Identificación única del servicio en línea que estás proporcionando. + jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda. user: chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas role: El rol controla qué permisos tiene el usuario. @@ -319,6 +329,17 @@ es-AR: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir que los mensajes usen esta etiqueta localmente + terms_of_service: + changelog: "¿Qué ha cambiado?" + text: Términos del servicio + terms_of_service_generator: + admin_email: Dirección de correo electrónico para avisos legales + arbitration_address: Dirección física para avisos de arbitraje + arbitration_website: Sitio web para enviar avisos de arbitraje + dmca_address: Dirección física para avisos de DMCA/derechos de autor + dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor + domain: Dominio + jurisdiction: Jurisdicción legal user: role: Rol time_zone: Zona horaria diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 2278fda6da..8dc1c4a3a6 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -25,7 +25,7 @@ es-MX: type_html: Elige qué hacer con %{acct} types: disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos. - none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción. + none: Usa esto para enviar una advertencia al usuario, sin desencadenar ninguna otra acción. sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles. silence: Evita que el usuario pueda publicar con visibilidad pública, y oculta sus publicaciones y notificaciones a personas que no lo siguen. Cierra todas las denuncias contra esta cuenta. suspend: Evita cualquier interacción desde o hacia esta cuenta y elimina su contenido. Reversible en 30 días. Cierra todas las denuncias contra esta cuenta. @@ -48,7 +48,7 @@ es-MX: digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia email: Se le enviará un correo de confirmación header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px - inbox_url: Copia la URL de la página principal del relés que quieres utilizar + inbox_url: Copia la URL de la página principal del relé que deseas usar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push password: Utiliza al menos 8 caracteres @@ -61,7 +61,7 @@ es-MX: setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible setting_system_scrollbars_ui: Solo se aplica a los navegadores de escritorio basados en Safari y Chrome - setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles + setting_use_blurhash: Los degradados se basan en los colores de los elementos visuales ocultos, pero ocultan cualquier detalle setting_use_pending_items: Ocultar las publicaciones de la línea de tiempo tras un clic en lugar de desplazar automáticamente el feed username: Puedes usar letras, números y guiones bajos whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra @@ -130,11 +130,22 @@ es-MX: show_application: Siempre podrás ver desde cuál aplicación realizaste una publicación. tag: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible + terms_of_service: + changelog: Puede estructurarse con la sintaxis Markdown. + text: Puede estructurarse con la sintaxis Markdown. + terms_of_service_generator: + admin_email: Las notificaciones legales incluyen contraavisos, órdenes judiciales, solicitudes de retirada y solicitudes de aplicación de la ley. + arbitration_address: Puede ser la misma que la dirección física anterior, o “N/A” si se utiliza el correo electrónico + arbitration_website: Puede ser un formulario web, o “N/A” si se utiliza el correo electrónico + dmca_address: Para los operadores de EE. UU., utilice la dirección registrada en el Directorio de Agentes Designados de la DMCA. Un listado de apartados de correos está disponible bajo petición directa, utilice la Solicitud de Renuncia de Apartado de Correos de Agente Designado de la DMCA para enviar un correo electrónico a la Oficina de Derechos de Autor y describa que usted es un moderador de contenidos desde su casa que teme venganza o represalias por sus acciones y necesita utilizar un apartado de correos para eliminar su dirección particular de la vista del público. + dmca_email: Puede ser la misma dirección de correo electrónico usada en “Dirección de correo electrónico para notificaciones legales” + domain: Identificación única del servicio en línea que presta. + jurisdiction: Indique el país de residencia de quien paga las facturas. Si se trata de una empresa u otra entidad, indique el país en el que está constituida y la ciudad, región, territorio o estado, según proceda. user: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas role: El rol controla qué permisos tiene el usuario. user_role: - color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal + color: Color que se usará para el rol en toda la interfaz de usuario, como RGB en formato hexadecimal highlighted: Esto hace que el rol sea públicamente visible name: Nombre público del rol, si el rol se establece para que se muestre como una insignia permissions_as_keys: Los usuarios con este rol tendrán acceso a... @@ -223,12 +234,12 @@ es-MX: setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido setting_hide_network: Ocultar tu red setting_reduce_motion: Reducir el movimiento de las animaciones - setting_system_font_ui: Utilizar la tipografía por defecto del sistema + setting_system_font_ui: Usar la fuente por defecto del sistema setting_system_scrollbars_ui: Usar la barra de desplazamiento por defecto del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien - setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto + setting_use_blurhash: Mostrar degradados de colores para contenidos multimedia ocultos setting_use_pending_items: Modo lento severity: Severidad sign_in_token_attempt: Código de seguridad @@ -319,6 +330,17 @@ es-MX: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a las publicaciones usar esta etiqueta localmente + terms_of_service: + changelog: "¿Qué es lo que ha cambiado?" + text: Condiciones del servicio + terms_of_service_generator: + admin_email: Dirección de correo electrónico para notificaciones legales + arbitration_address: Dirección física para notificaciones de arbitraje + arbitration_website: Sitio web para presentar notificaciones de arbitraje + dmca_address: Dirección física para avisos de DMCA/derechos de autor + dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor + domain: Dominio + jurisdiction: Jurisdicción legal user: role: Rol time_zone: Zona horaria diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index f83b4b1d1c..269fdb7091 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -130,6 +130,16 @@ es: show_application: Tú siempre podrás ver desde qué aplicación se ha publicado tu publicación. tag: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible + terms_of_service: + changelog: Se puede estructurar con sintaxis Markdown. + text: Se puede estructurar con sintaxis Markdown. + terms_of_service_generator: + arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico + arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico + dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública. + dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba + domain: Identificación única del servicio en línea que estás proporcionando. + jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda. user: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas role: El rol controla qué permisos tiene el usuario. @@ -319,6 +329,17 @@ es: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a las publicaciones usar esta etiqueta localmente + terms_of_service: + changelog: "¿Qué ha cambiado?" + text: Términos del servicio + terms_of_service_generator: + admin_email: Dirección de correo electrónico para avisos legales + arbitration_address: Dirección física para avisos de arbitraje + arbitration_website: Sitio web para enviar avisos de arbitraje + dmca_address: Dirección física para avisos de DMCA/derechos de autor + dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor + domain: Dominio + jurisdiction: Jurisdicción legal user: role: Rol time_zone: Zona horaria diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index ae3bbd5c9b..acd1eefca6 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -130,6 +130,17 @@ fi: show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin. tag: name: Voit esimerkiksi vaihtaa suur- ja pienaakkosten kesken helppolukuistaaksesi tekstiäsi + terms_of_service: + changelog: Voidaan jäsentää Markdown-syntaksilla. + text: Voidaan jäsentää Markdown-syntaksilla. + terms_of_service_generator: + admin_email: Oikeudellisiin ilmoituksiin kuuluvat vastailmoitukset, oikeuden määräykset, poistopyynnöt ja lainvalvontaviranomaisten pyynnöt. + arbitration_address: Voi olla sama kuin edellä oleva fyysinen osoite tai ”N/A”, jos käytät sähköpostia + arbitration_website: Voi olla verkkolomake tai ”N/A”, jos käytät sähköpostia + dmca_address: Yhdysvaltalaisten operaattoreiden on käytettävä DMCA Designated Agent Directory -luetteloon rekisteröityä osoitetta. Postilokeroluettelo on saatavissa suoralla pyynnöllä, joten käytä DMCA Designated Agent Post Office Box Waiver Request -lomaketta lähettääksesi sähköpostia tekijänoikeusvirastolle ja kuvaile, että olet kotona toimiva sisältömoderaattori, joka pelkää kostoa tai rangaistusta toimistaan ja tarvitsee postilokeroa pitääkseen kotiosoitteensa poissa julkisuudesta. + dmca_email: Voi olla sama sähköpostiosoite kuin edellä kohdassa ”Sähköpostiosoite oikeudellisia ilmoituksia varten” + domain: Tarjoamasi verkkopalvelun yksilöllinen tunniste. + jurisdiction: Mainitse valtio, jossa laskujen maksaja asuu. Jos kyseessä on yritys tai muu yhteisö, mainitse valtio, johon se on rekisteröity, ja tarvittaessa kaupunki, alue, territorio tai osavaltio. user: chosen_languages: Jos valitset kieliä oheisesta luettelosta, vain niidenkieliset julkaisut näkyvät sinulle julkisilla aikajanoilla role: Rooli määrää, millaiset käyttöoikeudet käyttäjällä on. @@ -319,6 +330,17 @@ fi: name: Aihetunniste trendable: Salli tämän aihetunnisteen näkyä trendeissä usable: Salli julkaisujen käyttää tätä aihetunnistetta paikallisesti + terms_of_service: + changelog: Mikä on muuttunut? + text: Käyttöehdot + terms_of_service_generator: + admin_email: Sähköpostiosoite oikeudellisille ilmoituksille + arbitration_address: Fyysinen osoite välimiesmenettelyn ilmoituksille + arbitration_website: Sähköpostiosoite välimiesmenettelyn ilmoituksille + dmca_address: Fyysinen osoite DMCA-/tekijänoikeusilmoituksille + dmca_email: Sähköpostiosoite DMCA-/tekijänoikeusilmoituksille + domain: Verkkotunnus + jurisdiction: Lainkäyttöalue user: role: Rooli time_zone: Aikavyöhyke diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index d38aeaa414..4f89eec5e6 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -3,12 +3,14 @@ fr-CA: simple_form: hints: account: + attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom cool. fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez. indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive. note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.' show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas. + unlocked: Les personnes pourront vous suivre sans en demander la permission. Décochez cette case si vous souhaitez examiner les demandes de suivi et choisir d'accepter ou de rejeter les nouveaux followers. account_alias: acct: Spécifiez l’identifiant@domaine du compte que vous souhaitez faire migrer account_migration: @@ -58,6 +60,7 @@ fr-CA: setting_display_media_default: Masquer les médias marqués comme sensibles setting_display_media_hide_all: Toujours masquer les médias setting_display_media_show_all: Toujours afficher les médias + setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas @@ -127,6 +130,17 @@ fr-CA: show_application: Vous pourrez toujours voir quelle application vous avez utilisé pour publier un message dans tous les cas. tag: name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible + terms_of_service: + changelog: Peut être structuré avec la syntaxe Markdown. + text: Peut être structuré avec la syntaxe Markdown. + terms_of_service_generator: + admin_email: Les avis juridiques comprennent les contre-avis, les ordonnances judiciaires, les demandes de retrait et les demandes des forces de l'ordre. + arbitration_address: Peut être la même que l'adresse physique ci-dessus, ou "N/A" si vous utilisez un e-mail + arbitration_website: Peut être un formulaire web, ou « N/A» si vous utilisez un e-mail + dmca_address: Pour les opérateurs américains, utilisez l'adresse enregistrée dans le répertoire des agents désignés du DMCA Designated Agent Directory. Une boîte postale est disponible sur demande directe. Utilisez le formulaire de demande de dérogation pour l'utilisation d'une boîte postale par un agent désigné du Designated Agent Post Office Box Waiver Request pour envoyer un e-mail au Bureau du droit d'auteur (Copyright Office) et expliquer que vous êtes un modérateur de contenu à domicile qui craint des représailles ou une vengeance pour ses actions et que vous avez besoin d'utiliser une boîte postale afin de masquer votre adresse personnelle au public. + dmca_email: Peut être la même adresse e-mail que celle utilisée pour « Adresse e-mail pour les mentions légales » ci-dessus + domain: Identification unique du service en ligne que vous offrez. + jurisdiction: Indiquez le pays dans lequel réside la personne qui paie les factures. S'il s'agit d'une entreprise ou d'une autre entité, indiquez le pays dans lequel elle est enregistrée, ainsi que la ville, la région, le territoire ou l'État, le cas échéant. user: chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics role: Le rôle définit quelles autorisations a l'utilisateur⋅rice. @@ -142,6 +156,7 @@ fr-CA: url: Là où les événements seront envoyés labels: account: + attribution_domains_as_text: Sites web autorisés à vous citer discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette @@ -220,6 +235,7 @@ fr-CA: setting_hide_network: Cacher votre réseau setting_reduce_motion: Réduire la vitesse des animations setting_system_font_ui: Utiliser la police par défaut du système + setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système setting_theme: Thème du site setting_trends: Afficher les tendances du jour setting_unfollow_modal: Afficher une fenêtre de confirmation avant de vous désabonner d’un compte @@ -314,6 +330,17 @@ fr-CA: name: Mot-clic trendable: Autoriser ce hashtag à apparaitre dans les tendances usable: Autoriser les messages à utiliser ce hashtag localement + terms_of_service: + changelog: Nouveautés? + text: Conditions d'utilisation + terms_of_service_generator: + admin_email: Adresse électronique pour les notifications légales + arbitration_address: Adresse physique pour les notifications d'arbitrage + arbitration_website: Site Web pour soumettre les notifications d'arbitrage + dmca_address: Adresse physique pour les avis DMCA/copyright + dmca_email: Adresse e-mail pour les avis DMCA/copyright + domain: Domaine + jurisdiction: Juridiction user: role: Rôle time_zone: Fuseau horaire diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index b601bf0b66..1b0469f7a3 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -3,12 +3,14 @@ fr: simple_form: hints: account: + attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom rigolo. fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez. indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive. note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.' show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas. + unlocked: Les personnes pourront vous suivre sans en demander la permission. Décochez cette case si vous souhaitez examiner les demandes de suivi et choisir d'accepter ou de rejeter les nouveaux followers. account_alias: acct: Spécifiez l’identifiant@domaine du compte à partir duquel vous souhaitez migrer account_migration: @@ -19,7 +21,7 @@ fr: admin_account_action: include_statuses: L’utilisateur·rice verra quels messages sont la source de l’action de modération ou de l’avertissement send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte - text_html: Facultatif. Vous pouvez utiliser la syntaxe des publications. Vous pouvez ajouter des présélections d'attention pour gagner du temps + text_html: Facultatif. Vous pouvez utiliser la syntaxe des messages. Vous pouvez ajouter des avertissements préconfigurés pour gagner du temps type_html: Choisir que faire avec %{acct} types: disable: Empêcher l’utilisateur·rice d’utiliser son compte, mais ne pas supprimer ou masquer son contenu. @@ -58,6 +60,7 @@ fr: setting_display_media_default: Masquer les médias marqués comme sensibles setting_display_media_hide_all: Toujours masquer les médias setting_display_media_show_all: Toujours afficher les médias + setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas @@ -99,7 +102,7 @@ fr: thumbnail: Une image d'environ 2:1 affichée à côté des informations de votre serveur. timeline_preview: Les utilisateur⋅rice⋅s déconnecté⋅e⋅s pourront parcourir les derniers messages publics disponibles sur le serveur. trendable_by_default: Ignorer l'examen manuel du contenu tendance. Des éléments individuels peuvent toujours être supprimés des tendances après coup. - trends: Les tendances montrent quelles publications, hashtags et actualités gagnent en ampleur sur votre serveur. + trends: Les tendances montrent quels messages, hashtags et actualités gagnent en popularité sur votre serveur. trends_as_landing_page: Afficher le contenu tendance au lieu d'une description de ce serveur pour les comptes déconnectés et les non-inscrit⋅e⋅s. Nécessite que les tendances soient activées. form_challenge: current_password: Vous entrez une zone sécurisée @@ -127,6 +130,17 @@ fr: show_application: Vous pourrez toujours voir quelle application vous avez utilisé pour publier un message dans tous les cas. tag: name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible + terms_of_service: + changelog: Peut être structuré avec la syntaxe Markdown. + text: Peut être structuré avec la syntaxe Markdown. + terms_of_service_generator: + admin_email: Les avis juridiques comprennent les contre-avis, les ordonnances judiciaires, les demandes de retrait et les demandes des forces de l'ordre. + arbitration_address: Peut être la même que l'adresse physique ci-dessus, ou "N/A" si vous utilisez un e-mail + arbitration_website: Peut être un formulaire web, ou « N/A» si vous utilisez un e-mail + dmca_address: Pour les opérateurs américains, utilisez l'adresse enregistrée dans le répertoire des agents désignés du DMCA Designated Agent Directory. Une boîte postale est disponible sur demande directe. Utilisez le formulaire de demande de dérogation pour l'utilisation d'une boîte postale par un agent désigné du Designated Agent Post Office Box Waiver Request pour envoyer un e-mail au Bureau du droit d'auteur (Copyright Office) et expliquer que vous êtes un modérateur de contenu à domicile qui craint des représailles ou une vengeance pour ses actions et que vous avez besoin d'utiliser une boîte postale afin de masquer votre adresse personnelle au public. + dmca_email: Peut être la même adresse e-mail que celle utilisée pour « Adresse e-mail pour les mentions légales » ci-dessus + domain: Identification unique du service en ligne que vous offrez. + jurisdiction: Indiquez le pays dans lequel réside la personne qui paie les factures. S'il s'agit d'une entreprise ou d'une autre entité, indiquez le pays dans lequel elle est enregistrée, ainsi que la ville, la région, le territoire ou l'État, le cas échéant. user: chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics role: Le rôle définit quelles autorisations a l'utilisateur⋅rice. @@ -142,6 +156,7 @@ fr: url: Là où les événements seront envoyés labels: account: + attribution_domains_as_text: Sites web autorisés à vous citer discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette @@ -220,6 +235,7 @@ fr: setting_hide_network: Cacher votre réseau setting_reduce_motion: Réduire la vitesse des animations setting_system_font_ui: Utiliser la police par défaut du système + setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système setting_theme: Thème du site setting_trends: Afficher les tendances du jour setting_unfollow_modal: Demander confirmation avant de vous désabonner d’un compte @@ -314,6 +330,17 @@ fr: name: Hashtag trendable: Autoriser ce hashtag à apparaitre dans les tendances usable: Autoriser les messages à utiliser ce hashtag localement + terms_of_service: + changelog: Nouveautés? + text: Conditions d'utilisation + terms_of_service_generator: + admin_email: Adresse électronique pour les notifications légales + arbitration_address: Adresse physique pour les notifications d'arbitrage + arbitration_website: Site Web pour soumettre les notifications d'arbitrage + dmca_address: Adresse physique pour les avis DMCA/copyright + dmca_email: Adresse e-mail pour les avis DMCA/copyright + domain: Domaine + jurisdiction: Juridiction user: role: Rôle time_zone: Fuseau horaire diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index 6a37a09201..3c8fef4e05 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -10,6 +10,7 @@ fy: indexable: Jo iepenbiere berjochten kinne ferskine yn de sykresultaten op Mastodon. Minsken dy’t reagearre hawwe op jo berjochten kinne se hoe dan ek trochsykje. note: 'Jo kinne oare minsken @fermelde of #hashtags brûke.' show_collections: Minsken kinne sjen wa’t jo folgje en wa’t jo folget. + unlocked: Minsken kinne jo folgje sûnder dêrfoar tastimming freegje te hoegen. Wannear’t jo nije folgers hânmjittich goedkarre wolle, moatte jo dizze opsje deselektearje. account_alias: acct: Fermeld de brûkersnamme@domein fan de account fan wêr’t jo ferhúzje wolle account_migration: @@ -59,6 +60,7 @@ fy: setting_display_media_default: As gefoelich markearre media ferstopje setting_display_media_hide_all: Media altyd ferstopje setting_display_media_show_all: Media altyd toane + setting_system_scrollbars_ui: Allinnich fan tapassing op desktopbrowsers basearre op Safari en Chromium setting_use_blurhash: Dizige kleuroergongen binne basearre op de kleuren fan de ferstoppe media, wêrmei elk detail ferdwynt setting_use_pending_items: De tiidline wurdt bywurke troch op it oantal nije items te klikken, yn stee fan dat dizze automatysk bywurke wurdt username: Jo kinne letters, sifers en ûnderstreekjes brûke @@ -128,6 +130,17 @@ fy: show_application: Jo kinne sels altyd sjen mei hokker app jo in berjocht pleatst hawwe. tag: name: Jo kinne elk wurd mei in haadletter begjinne, om sa bygelyks de tekst mear lêsber te meitsjen + terms_of_service: + changelog: Kin strukturearre wurde mei Markdown-syntaksis. + text: Kin strukturearre wurde mei Markdown-syntaksis. + terms_of_service_generator: + admin_email: Juridyske meidielingen binne û.o. tsjinoantekeningen, rjochterlike befelen, ferwiderfersiken en fersiken om wetshanthaving. + arbitration_address: Kin itselde wêze as boppesteande strjitteof ‘N/A’ by gebrûk fan e-mail + arbitration_website: Kin in webformulier wêze, of ‘N/A’ as e-mail brûkt wurdt + dmca_address: 'Brûk foar behearders yn de FS: it adres dat registrearre is yn de DMCA Designated Agent Directory. Op fersyk is der in postbuslist beskikber. Brûk it DMCA Designated Agent Post Office Box Waiver Request om it Copyright Office te e-mailen en te beskriuwen dat jo in thúsbasearre ynhâldsmoderator binne dy’t wraak of fergelding frezet foar jo dieden en in postbus brûke moat om jo húsadres út it publike domein te hâlden.' + dmca_email: Kin itselde e-mailadres wêze as ‘E-mailadres foar juridyske berjochten’ hjirboppe + domain: In unike identifikaasje fan de online tsjinst dy’t ferliend wurdt. + jurisdiction: Fermeld it lân wêr’t de persoan wennet dy’t de rekkeningen betellet. As it in bedriuw of in oare entiteit is, fermeld it lân wêr’t it opnommen is en de stêd, regio, grûngebiet of steat, foar safier fan tapassing. user: chosen_languages: Allinnich berjochten yn de selektearre talen wurde op de iepenbiere tiidline toand role: De rol bepaalt hokker rjochten in brûker hat. @@ -222,6 +235,7 @@ fy: setting_hide_network: Jo folgers en wa’t jo folget ferstopje setting_reduce_motion: Stadigere animaasjes setting_system_font_ui: Standertlettertype fan jo systeem brûke + setting_system_scrollbars_ui: Standert skowbalke fan jo systeem brûke setting_theme: Websitetema setting_trends: Trends fan hjoed toane setting_unfollow_modal: Freegje foar it ûntfolgjen fan ien in befêstiging @@ -316,6 +330,17 @@ fy: name: Hashtag trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is usable: Berjochten tastean dizze hashtag lokaal te brûken + terms_of_service: + changelog: Wat is wizige? + text: Gebrûksbetingsten + terms_of_service_generator: + admin_email: E-mailadres foar juridyske meldingen + arbitration_address: Strjitte foar arbitraazjemeldingen + arbitration_website: Website foar it yntsjinjen fan arbitraazjemeldingen + dmca_address: Strjitte foar DMCA/auteursrjocht-meidielingen + dmca_email: E-mailadres foar DMCA/auteursrjocht-meidielingen + domain: Domein + jurisdiction: Rjochtsgebiet user: role: Rol time_zone: Tiidsône diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index f8257a9da9..749efcb5b4 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -60,6 +60,7 @@ ga: setting_display_media_default: Folaigh meáin atá marcáilte mar íogair setting_display_media_hide_all: Folaigh meáin i gcónaí setting_display_media_show_all: Taispeáin meáin i gcónaí + setting_system_scrollbars_ui: Ní bhaineann sé ach le brabhsálaithe deisce bunaithe ar Safari agus Chrome setting_use_blurhash: Tá grádáin bunaithe ar dhathanna na n-amharcanna ceilte ach cuireann siad salach ar aon mhionsonraí setting_use_pending_items: Folaigh nuashonruithe amlíne taobh thiar de chlic seachas an fotha a scrollú go huathoibríoch username: Is féidir leat litreacha, uimhreacha, agus béim a úsáid @@ -223,6 +224,7 @@ ga: setting_hide_network: Folaigh do ghraf sóisialta setting_reduce_motion: Laghdú ar an tairiscint i beochan setting_system_font_ui: Úsáid cló réamhshocraithe an chórais + setting_system_scrollbars_ui: Bain úsáid as scrollbharra réamhshocraithe an chórais setting_theme: Téama suímh setting_trends: Taispeáin treochtaí an lae inniu setting_unfollow_modal: Taispeáin dialóg deimhnithe sula ndíleanfaidh tú duine éigin diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 3dc6ea28d2..6fdbe06d06 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -130,6 +130,17 @@ gl: show_application: Independentemente, ti sempre poderás ver a app coa que publicaches a túa publicación. tag: name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade + terms_of_service: + changelog: Pode usarse sintaxe Markdown. + text: Pode usarse sintaxe Markdown. + terms_of_service_generator: + admin_email: Os avisos legais inclúen ordes xudiciais, solicitudes de retirada de contido e requerimentos do cumprimento da lei. + arbitration_address: Pode ser o mesmo enderezo Físico de máis arriba, ou "N/A" se usas o correo electrónico + arbitration_website: Pode ser un formulario web ou "N/A" se usas o correo electrónico + dmca_address: Para operadores de USA, utiliza o mesmo enderezo rexistrado no DMCA Designated Agent Directory. Está dispoñible a opción de usar P.O. Box facendo a solicitude baixo a DMCA Designated Agent Post Office Box Waiver Request pedíndoa á Copyright Office e indicando que es un moderador de contidos na túa casa e temes ameazas ou violencia polas medidas que tomas e precisas usar un P.O. Box para que non sexa público o enderezo da túa casa. + dmca_email: Pode ser o mesmo enderezo de correo usado para "Enderezo para avisos legais" + domain: Identificador único do servizo en liña que proporcionas. + jurisdiction: Informa sobre o país onde vive quen paga as facturas. Se é unha empresa ou outra entidade, indica o país onde está establecida e é axeitado escribir a cidade, rexión, territorio ou estado. user: chosen_languages: Se ten marca, só as publicacións nos idiomas seleccionados serán mostrados en cronoloxías públicas role: Os roles establecen os permisos que ten a usuaria. @@ -319,6 +330,17 @@ gl: name: Cancelo trendable: Permitir que este cancelo apareza en tendencias usable: Permitir que as publicacións usen este cancelo localmente + terms_of_service: + changelog: Que cambios se fixeron? + text: Termos do Servizo + terms_of_service_generator: + admin_email: Enderezo de correo para avisos legais + arbitration_address: Enderezo físico para avisos de arbitraxe + arbitration_website: Páxina web para enviar avisos de arbitraxe + dmca_address: Enderezo físico para avisos sobre DMCA/copyright + dmca_email: Enderezo de correo electrónico para avisos sobre DMCA/copyright + domain: Dominio + jurisdiction: Xurisdición legal user: role: Rol time_zone: Fuso horario diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 1c82aa9d40..85e8cbc53e 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -130,6 +130,17 @@ he: show_application: תמיד ניתן לראות איזו אפליקציה פרסמה את הפוסט שלך בכל מקרה. tag: name: ניתן רק להחליף בין אותיות קטנות וגדולות, למשל כדי לשפר את הקריאות + terms_of_service: + changelog: ניתן לעצב בעזרת תחביר מארקדאון. + text: ניתן לעצב בעזרת תחביר מארקדאון. + terms_of_service_generator: + admin_email: מזכרים חוקיים כוללים הוראות בימ"ש, בקשות הסרה, תשובות להתראות ובקשות ציות לאכיפה. + arbitration_address: יכול להיות כתובת פיזית זהה לעיל, או “N/A” אם משתמשים בדואל + arbitration_website: יכול להיות טופס בדפדפן או “N/A” אם משתמשים בדואל + dmca_address: For US operators, use the address registered in the DMCA Designated Agent Directory. A P.O. Box listing is available upon direct request, use the DMCA Designated Agent Post Office Box Waiver Request to email the Copyright Office and describe that you are a home-based content moderator who fears revenge or retribution for your actions and need to use a P.O. Box to remove your home address from public view. + dmca_email: ניתן להשתמש באותה כתובת הדואל שעבור "כתובת דואל להודעות משפטיות" לעיל + domain: זיהוי ייחודי של השירות המקוון שאתה מספק. + jurisdiction: פרט את המדינה שבה גר משלם החשבונות. אם מדובר בחברה או גוף אחר, פרטו את המדינה שבה הוקם התאגיד, העיר, האזור, או המדינה בהתאם לצורך. user: chosen_languages: אם פעיל, רק הודעות בשפות הנבחרות יוצגו לפידים הפומביים role: התפקיד שולט על אילו הרשאות יש למשתמש. @@ -319,6 +330,17 @@ he: name: תגית trendable: הרשה/י לתגית זו להופיע תחת נושאים חמים usable: הרשה/י להודעות להכיל תגית זו באופן מקומי + terms_of_service: + changelog: מה נשתנה? + text: תנאי השירות + terms_of_service_generator: + admin_email: כתובת דוא"ל להודעות משפטיות + arbitration_address: כתובת פיזית להודעות גישור + arbitration_website: אתר רשת להגשת הודעות גישור + dmca_address: כתובת פיזית לשליחת התראות זכויות יוצרים/DMCA + dmca_email: כתובת דואל לשליחת התראות זכויות יוצרים/DMCA + domain: מתחם (דומיין) + jurisdiction: איזור השיפוט user: role: תפקיד time_zone: אזור זמן diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 2290440449..8a0f867f14 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -130,6 +130,14 @@ hu: show_application: Ettől függetlenül mindig láthatod, melyik alkalmazás tette közzé a bejegyzésedet. tag: name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen + terms_of_service: + changelog: Markdown szintaxissal adható meg. + text: Markdown szintaxissal adható meg. + terms_of_service_generator: + admin_email: A jogi közlemények közé tartoznak az ellenkeresetek, a bírósági végzések, az eltávolítási kérelmek és a bűnüldöző szervek kérelmei is. + arbitration_address: Lehet a fent használt valós cím, vagy e-mail használata esetén „N/A” + arbitration_website: Lehet webes űrlap, vagy e-mail használata esetén „N/A” + domain: A nyújtott online szolgáltatás egyedi azonosítója. user: chosen_languages: Ha aktív, csak a kiválasztott nyelvű bejegyzések jelennek majd meg a nyilvános idővonalon role: A szerep szabályozza, hogy a felhasználó milyen jogosultságokkal rendelkezik. @@ -319,6 +327,17 @@ hu: name: Hashtag trendable: A hashtag megjelenhet a felkapottak között usable: A helyi bejegyzések használhatják ezt a hashtaget + terms_of_service: + changelog: Mi változott? + text: Felhasználási feltételek + terms_of_service_generator: + admin_email: E-mail-cím a jogi nyilatkozatok benyújtásához + arbitration_address: Fizikai cím a békéltető testületi nyilatkozatok benyújtásához + arbitration_website: Weboldal a békéltető testületi nyilatkozatok benyújtásához + dmca_address: Fizikai cím a szerzői jogi nyilatkozatokhoz + dmca_email: E-mail-cím a szerzői jogi nyilatkozatokhoz + domain: Domain + jurisdiction: Joghatóság user: role: Szerep time_zone: Időzóna diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index 1a405980c0..113f55a2ba 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -40,14 +40,14 @@ ia: text: Tu pote solo appellar contra un sanction un vice defaults: autofollow: Le personas qui se inscribe per medio del invitation te sequera automaticamente - avatar: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px bot: Signala a alteres que le conto principalmente exeque actiones automatisate e poterea non esser surveliate context: Un o plure contextos ubi le filtro deberea applicar se current_password: Pro propositos de securitate insere le contrasigno del conto actual current_username: Pro confirmar, insere le nomine de usator del conto actual digest: Solo inviate post un longe periodo de inactivitate e solo si tu ha recipite alcun messages personal in tu absentia email: Te sera inviate un email de confirmation - header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px + header: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate @@ -60,8 +60,8 @@ ia: setting_display_media_default: Celar le medios marcate como sensibile setting_display_media_hide_all: Sempre celar le medios setting_display_media_show_all: Sempre monstrar le medios - setting_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios - setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo + setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios + setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo username: Tu pote usar litteras, numeros e tractos de sublineamento whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola domain_allow: @@ -98,7 +98,7 @@ ia: site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio. status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption theme: Thema que le visitatores disconnexe e le nove usatores vide. - thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor. + thumbnail: Un imagine de circa 2:1 monstrate al latere del informationes de tu servitor. timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor. trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto. trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor. @@ -181,7 +181,7 @@ ia: text: Explicar perque iste decision deberea esser revertite defaults: autofollow: Invitar a sequer tu conto - avatar: Pictura de profilo + avatar: Imagine de profilo bot: Isto es un conto automatisate chosen_languages: Filtrar linguas confirm_new_password: Confirmar nove contrasigno @@ -193,14 +193,14 @@ ia: email: Adresse de e-mail expires_in: Expira post fields: Campos extra - header: Imagine titulo + header: Imagine de titulo honeypot: "%{label} (non compilar)" inbox_url: URL del cassa de ingresso de repetitor irreversible: Declinar in vice que celar locale: Lingua de interfacie max_uses: Numero max de usos new_password: Nove contrasigno - note: Bio + note: Biographia otp_attempt: Codice a duo factores password: Contrasigno phrase: Parola o phrase clave @@ -311,7 +311,7 @@ ia: text: Regula settings: indexable: Includer pagina de profilo in le motores de recerca - show_application: Monstrar ab que app tu ha inviate un message + show_application: Monstrar desde qual app tu ha inviate un message tag: listable: Permitter a iste hashtag apparer in le recercas e suggestiones name: Hashtag diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 7c24ef80b1..2f113087e9 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -319,6 +319,14 @@ is: name: Myllumerki trendable: Leyfa þessu myllumerki að birtast undir vinsælu efni usable: Leyfa færslum að nota þetta myllumerki staðvært + terms_of_service: + changelog: Hvað breyttist? + text: Þjónustuskilmálar + terms_of_service_generator: + admin_email: Tölvupóstfang vegna löglegra fyrirvara + dmca_email: Tölvupóstfang tylfynninga vegna DMCA/höfundarétt + domain: Lén + jurisdiction: Lögsagnarumdæmi user: role: Hlutverk time_zone: Tímabelti diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 27c1a00370..97565f4b1a 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -130,6 +130,17 @@ it: show_application: Tu sarai sempre in grado di vedere quale app ha pubblicato il tuo post anche se hai attivato questa impostazione. tag: name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile + terms_of_service: + changelog: Può essere strutturato con la sintassi Markdown. + text: Può essere strutturato con la sintassi Markdown. + terms_of_service_generator: + admin_email: Gli avvisi legali includono controavvisi, ordinanze del tribunale, richieste di rimozione e richieste delle forze dell'ordine. + arbitration_address: Può essere lo stesso dell'indirizzo fisico sopra o "N/A" se si utilizza l'email + arbitration_website: Può essere un modulo web o "N/A" se si utilizza l'email + dmca_address: Per gli operatori statunitensi, utilizzare l'indirizzo registrato nella DMCA Designated Agent Directory. L'elenco delle caselle postali è disponibile su richiesta diretta, utilizzando il DMCA Designated Agent Post Office Box Waiver Request per inviare un'email al Copyright Office e descrivendo di essere un moderatore di contenuti che lavora da casa e che teme vendette o punizioni per le proprie azioni e che hai bisogno di usare una casella postale per rimuovere il tuo indirizzo di casa dalla vista pubblica. + dmca_email: Può essere lo stesso indirizzo email utilizzato per "Indirizzo email per avvisi legali" sopra + domain: Identificazione univoca del servizio online che stai fornendo. + jurisdiction: Indica il Paese in cui risiede il soggetto che paga le fatture. Se si tratta di un'azienda o di un altro ente, indicare il Paese in cui è costituito, nonché la città, la regione, il territorio o lo Stato, a seconda dei casi. user: chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate role: Il ruolo controlla quali permessi ha l'utente. @@ -319,6 +330,17 @@ it: name: Hashtag trendable: Permetti a questo hashtag di apparire nelle tendenze usable: Permetti ai post di utilizzare questo hashtag localmente + terms_of_service: + changelog: Cosa è cambiato? + text: Termini di Servizio + terms_of_service_generator: + admin_email: Indirizzo email per avvisi legali + arbitration_address: Indirizzo fisico per avvisi di arbitrato + arbitration_website: Sito web per l'invio di avvisi di arbitrato + dmca_address: Indirizzo fisico per gli avvisi DMCA/copyright + dmca_email: Indirizzo email per gli avvisi DMCA/copyright + domain: Dominio + jurisdiction: Giurisdizione legale user: role: Ruolo time_zone: Fuso orario diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 90c3d7f4b0..71af0b42fd 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -130,6 +130,12 @@ ko: show_application: 나 자신은 이 설정과 관계 없이 어떤 앱으로 게시물을 작성했는지 볼 수 있습니다. tag: name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다. + terms_of_service: + changelog: 마크다운 문법을 사용할 수 있습니다. + text: 마크다운 문법을 사용할 수 있습니다. + terms_of_service_generator: + arbitration_website: 웹 형태를 사용할 수 있습니다. 이메일을 사용한다면 "N/A"로 둘 수 있습니다 + dmca_email: 상단의 "법적 통지를 위한 이메일 주소"와 같은 주소를 사용할 수 있습니다 user: chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다 role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다. @@ -319,6 +325,17 @@ ko: name: 해시태그 trendable: 이 해시태그가 유행에 나타날 수 있도록 허용 usable: 이 해시태그를 로컬 게시물에서 사용 가능하도록 허용 + terms_of_service: + changelog: 무엇이 바뀌었나요? + text: 이용 약관 + terms_of_service_generator: + admin_email: 법적 조치를 위한 이메일 주소 + arbitration_address: 중재 통지를 위한 실제 주소 + arbitration_website: 중재 통지를 제출하기 위한 웹사이트 + dmca_address: DMCA/저작권 통지를 위한 실제 주소 + dmca_email: DMCA/저작권 통지를 위한 이메일 주소 + domain: 도메인 + jurisdiction: 법적 관할권 user: role: 역할 time_zone: 시간대 diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index b3885fb12b..865272c60e 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -103,6 +103,17 @@ lt: settings: indexable: Tavo profilio puslapis gali būti rodomas paieškos rezultatuose Google, Bing ir kituose. show_application: Neatsižvelgiant į tai, visada galėsi matyti, kuri programėlė paskelbė tavo įrašą. + terms_of_service: + changelog: Gali būti struktūrizuota su ženklinimo sintakse. + text: Gali būti struktūrizuota su ženklinimo sintakse. + terms_of_service_generator: + admin_email: Teisiniai pranešimai įtraukia priešpriešinius pranešimus, teismo įsakymus, pašalinimo prašymus ir teisėsaugos institucijų prašymus. + arbitration_address: Gali būti toks pat kaip aukščiau nurodytas fizinis adresas arba „N/A“ (netaikoma), jei naudojamas el. paštas. + arbitration_website: Gali būti interneto forma arba „N/A“ (netaikoma), jei naudojamas el. paštas. + dmca_address: JAV operatoriams naudokite DMCA paskirtojo agento kataloge užregistruotą adresą. Pašto dėžutės sąrašą galima sudaryti pateikus tiesioginį prašymą, naudokite DMCA paskirtojo agento pašto dėžutės atsisakymo prašymą, kad parašytumėte el. laišką Autorinių teisių tarnybai ir aprašytumėte, kad esate namuose įsikūręs turinio moderatorius, kuris baiminasi keršto ar bausmės už savo veiksmus ir kuriam reikia naudoti pašto dėžutę, kad jo namų adresas nebūtų viešai matomas. + dmca_email: Gali būti tas pats aukščiau nurodytas el. pašto adresas, naudojamas „El. pašto adresas, skirtas teisiniams pranešimams“. + domain: Unikalus jūsų teikiamos internetinės paslaugos identifikavimas. + jurisdiction: Nurodykite šalį, kurioje gyvena tas, kas apmoka sąskaitas. Jei tai bendrovė ar kita esybė, nurodykite šalį, kurioje jis įregistruotas, ir atitinkamai miestą, regioną, teritoriją ar valstiją. user: chosen_languages: Kai pažymėta, viešose laiko skalėse bus rodomi tik įrašai pasirinktomis kalbomis. role: Vaidmuo valdo, kokius leidimus naudotojas turi. @@ -215,6 +226,17 @@ lt: name: Saitažodis trendable: Leisti šį saitažodį rodyti pagal trendus usable: Leisti įrašams naudoti šį saitažodį vietoje + terms_of_service: + changelog: Kas pasikeitė? + text: Paslaugų sąlygos + terms_of_service_generator: + admin_email: El. pašto adresas, skirtas teisiniams pranešimams + arbitration_address: Fizinis adresas pranešimams apie arbitražą + arbitration_website: Svetainė pranešimams apie arbitražą + dmca_address: Fizinis adresas, skirtas DMCA / autorinių teisių pranešimams + dmca_email: El. pašto adresas, skirtas DMCA / autorinių teisių pranešimams + domain: Domenas + jurisdiction: Teisinis teismingumas user: role: Vaidmuo time_zone: Laiko juosta diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index b1d0927eda..d272ebef0d 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -130,6 +130,17 @@ nl: show_application: Je kunt zelf altijd zien met welke app je een bericht hebt geplaatst. tag: name: Je kunt elk woord met een hoofdletter beginnen, om zo bijvoorbeeld de tekst leesbaarder te maken + terms_of_service: + changelog: Kan worden gestructureerd met Markdown-syntaxis. + text: Kan worden gestructureerd met Markdown-syntaxis. + terms_of_service_generator: + admin_email: Juridische mededelingen zijn o.a. tegenaantekeningen, rechterlijke bevelen, verwijderingsverzoeken en verzoeken om wetshandhaving. + arbitration_address: Kan hetzelfde zijn als bovenstaande straatadres of "N/A" bij gebruik van e-mail + arbitration_website: Kan een webformulier zijn, of "N/A" als e-mail wordt gebruikt + dmca_address: 'Gebruik voor beheerders in de VS: het adres dat is geregistreerd in de DMCA Designated Agent Directory. Op verzoek is er een postbuslijst beschikbaar. Gebruik het DMCA Designated Agent Post Office Box Waiver Request om het Copyright Office te e-mailen en te beschrijven dat u een thuisgebaseerde inhoudsmoderator bent die wraak of vergelding vreest voor uw daden en een postbus moet gebruiken om uw huisadres uit het publieke domein te houden.' + dmca_email: Kan dezelfde e-mail worden gebruikt voor "E-mailadres voor juridische berichten" hierboven + domain: Een unieke identificatie van de online dienst die wordt verleend. + jurisdiction: Vermeldt het land waar de persoon woont die de rekeningen betaalt. Als het een bedrijf of een andere entiteit is, vermeldt het land waar het is opgenomen en de stad, regio, grondgebied of staat, voor zover van toepassing. user: chosen_languages: Alleen berichten in de aangevinkte talen worden op de openbare tijdlijnen getoond role: De rol bepaalt welke rechten de gebruiker heeft. @@ -319,6 +330,17 @@ nl: name: Hashtag trendable: Goedkeuren dat deze hashtag onder trends te zien valt usable: Berichten toestaan deze hashtag lokaal te gebruiken + terms_of_service: + changelog: Wat is veranderd? + text: Gebruiksvoorwaarden + terms_of_service_generator: + admin_email: E-mailadres voor juridische meldingen + arbitration_address: Straatadres voor arbitragemeldingen + arbitration_website: Website voor het indienen van arbitragemeldingen + dmca_address: Straatadres voor DMCA/auteursrecht-mededelingen + dmca_email: E-mailadres voor DMCA/auteursrecht-mededelingen + domain: Domein + jurisdiction: Rechtsgebied user: role: Rol time_zone: Tijdzone diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index cf09812382..6061ff44dc 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -319,6 +319,12 @@ pl: name: Hasztag trendable: Pozwól na wyświetlanie tego hashtagu w „Na czasie” usable: Pozwól na umieszczanie tego hashtagu w lokalnych wpisach + terms_of_service: + changelog: Co się zmieniło? + text: Warunki korzystania z usługi + terms_of_service_generator: + domain: Domena + jurisdiction: Jurysdykcja user: role: Rola time_zone: Strefa czasowa diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 5a605e9872..8e01c6264d 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -130,6 +130,16 @@ sq: show_application: Pavarësisht nga kjo, do të jeni përherë në gjendje të shihni cili aplikacion botoi postimin tuaj. tag: name: Mund të ndryshoni shkronjat vetëm nga të mëdha në të vogla ose anasjelltas, për shembull, për t’i bërë më të lexueshme + terms_of_service: + changelog: Mund të strukturohet me sintaksë Markdown. + text: Mund të strukturohet me sintaksë Markdown. + terms_of_service_generator: + admin_email: Njoftimet ligjore përfshijnë kundërnjoftime, vendime gjyqi, kërkesa për për nxjerrje sajti jashtë shërbimit dhe kërkesa nga organe ligjore. + arbitration_address: Mund të jetë e njëjtë me adresën Fizike më sipër, ose “N/A”, nëse përdoret email + arbitration_website: Mund të jetë një formular web, ose “N/A”, nëse përdoret email + dmca_email: Mund të jetë i njëjti email i përdorur për “Adresë email për njoftime ligjore” më sipëer + domain: Identifikues unik për shërbimin internetor që po ofroni. + jurisdiction: Vendosni vendin ku jeton cilido që paguan faturat. Nëse është një shoqëri apo tjetër njësi, vendosni vendin ku është regjistruar, si dhe qytetin, rajonin, territorin apo shtetin përkatës. user: chosen_languages: Në iu vëntë shenjë, te rrjedha kohore publike do të shfaqen vetëm mesazhe në gjuhët e përzgjedhura role: Roli kontrollon cilat leje ka përdoruesi. @@ -319,6 +329,17 @@ sq: name: Hashtag trendable: Lejoje këtë hashtag të shfaqet në prirje usable: Lejoji postimet të përdorin lokalisht këtë hashtag + terms_of_service: + changelog: Ç’ka ndryshuar? + text: Kushte Shërbimi + terms_of_service_generator: + admin_email: Adresë email për njoftime ligjore + arbitration_address: Adresë fizike për njoftime arbitrazhi + arbitration_website: Sajtin për parashtrim njoftime arbitrazhi + dmca_address: Adresë fizike për njoftime DMCA/të drejtash kopjimi + dmca_email: Adresë email për njoftime DMCA/të drejtash kopjimi + domain: Përkatësi + jurisdiction: Juridiksion ligjor user: role: Rol time_zone: Zonë kohore diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 599b63ea6a..26cade806e 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -130,6 +130,17 @@ tr: show_application: Ne olursa olsun gönderinizi yayınlayan uygulamayı her zaman görebileceksiniz. tag: name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz + terms_of_service: + changelog: Markdown sözdizimiyle yapılandırılabilir. + text: Markdown sözdizimiyle yapılandırılabilir. + terms_of_service_generator: + admin_email: Yasal bildirimler arasında karşı bildirimler, mahkeme kararları, yayından kaldırma talepleri ve kolluk kuvvetleri talepleri yer alır. + arbitration_address: Yukarıdaki fiziksel adresle aynı olabilir, veya e-posta kullanıyorsanız "N/A" + arbitration_website: Web formu olabilir, veya e-posta kullanıyorsanız "N/A" + dmca_address: ABD operatörleri için DMCA Atanmış Temsilci Dizininde kayıtlı adresi kullanın. Doğrudan taleple Posta Kutusu kullanımı mümkündür, Telif Hakkı Ofisine e-posta göndermek için DMCA Atanmış Temsilci Posta Kutusu Feragat Talebini kullanın ve eylemleriniz nedeniyle intikam veya cezalandırılmaktan çekinen ve herkese açık ev adresini kullanmamak için Posta Kutusu kullanması gereken ev tabanlı bir içerik moderatörü olduğunuzu açıklayın. + dmca_email: Yukarıdaki "Yasal bildirimler için e-posta adresi" için kullanılan e-posta ile aynı olabilir + domain: Sağladığınız çevrimiçi hizmetin benzersiz tanımlaması. + jurisdiction: Faturaları ödeyen kişinin yaşadığı ülkeyi listeleyin. Bir şirket veya başka bir kuruluş ise, kurulduğu ülkeyi ve uygun şekilde şehri, bölgeyi, yöreyi veya eyaleti listeleyin. user: chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki gönderiler genel zaman çizelgelerinde görüntülenir role: Rol, kullanıcıların sahip olduğu izinleri denetler. @@ -319,6 +330,17 @@ tr: name: Etiket trendable: Bu etiketin gündem altında görünmesine izin ver usable: Gönderilerin yerelde bu etiketi kullanmasına izin ver + terms_of_service: + changelog: Ne Değişti? + text: Hizmet Şartları + terms_of_service_generator: + admin_email: Yasal bildirimler için e-posta adresi + arbitration_address: Tahkim bildirimleri için fiziksel adres + arbitration_website: Tahkim bildirimlerini göndermek için website + dmca_address: DMCA/telif hakkı bildirimleri için fiziksel adres + dmca_email: DMCA/telif hakkı bildirimleri için e-posta adresi + domain: Alan adı + jurisdiction: Yasal yetki alanı user: role: Rol time_zone: Zaman dilimi diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 91b35ead32..49f191bcdd 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -319,6 +319,11 @@ uk: name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів usable: Дозволити дописам використовувати цей хештег локально + terms_of_service: + changelog: Що змінилося? + text: Умови використання + terms_of_service_generator: + domain: Домен user: role: Роль time_zone: Часовий пояс diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index c04e541f70..6d9a8c749e 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -130,6 +130,17 @@ vi: show_application: Bạn sẽ luôn có thể xem ứng dụng nào đã đăng tút của mình. tag: name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn + terms_of_service: + changelog: Có thể dùng cú pháp Markdown. + text: Có thể dùng cú pháp Markdown. + terms_of_service_generator: + admin_email: Thông báo pháp lý bao gồm thông báo phản đối, lệnh của tòa án, yêu cầu gỡ bỏ và yêu cầu của cơ quan thực thi pháp luật. + arbitration_address: Có thể giống với Địa chỉ liên hệ ở trên hoặc “N/A” nếu sử dụng email + arbitration_website: Có thể dùng biểu mẫu online, hoặc “N/A” nếu dùng email + dmca_address: Đối với các quản trị viên tại Hoa Kỳ, hãy sử dụng địa chỉ đã đăng ký trong Danh bạ đại lý được chỉ định của DMCA. Danh sách hộp thư bưu điện có sẵn khi yêu cầu trực tiếp, hãy sử dụng Yêu cầu miễn trừ hộp thư bưu điện của đại lý được chỉ định của DMCA để gửi email đến Văn phòng bản quyền và mô tả rằng bạn là người kiểm duyệt nội dung tại nhà, người sợ bị trả thù hoặc trừng phạt vì hành động của mình và cần sử dụng hộp thư bưu điện để xóa địa chỉ nhà của bạn khỏi chế độ xem công khai. + dmca_email: Có thể là cùng một email được sử dụng cho “Địa chỉ email để nhận thông báo pháp lý” ở trên + domain: Mã nhận dạng duy nhất của dịch vụ trực tuyến mà bạn đang cung cấp. + jurisdiction: Liệt kê quốc gia nơi người trả hóa đơn sinh sống. Nếu đó là công ty hoặc tổ chức khác, hãy liệt kê quốc gia nơi công ty được thành lập và thành phố, khu vực, lãnh thổ hoặc tiểu bang nếu phù hợp. user: chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ sau role: Vai trò kiểm soát những quyền mà người dùng có. @@ -319,6 +330,17 @@ vi: name: Hashtag trendable: Cho phép hashtag này lên xu hướng usable: Cho phép dùng hashtag này khi soạn tút + terms_of_service: + changelog: Điểm mới? + text: Điều khoản Dịch vụ + terms_of_service_generator: + admin_email: Địa chỉ email để nhận thông báo pháp lý + arbitration_address: Địa chỉ thực tế để nhận thông báo trọng tài + arbitration_website: Trang web để nộp thông báo trọng tài + dmca_address: Địa chỉ liên lạc để nhận thông báo DMCA/bản quyền + dmca_email: Địa chỉ email để nhận thông báo DMCA/bản quyền + domain: Tên miền + jurisdiction: Quyền tài phán pháp lý user: role: Vai trò time_zone: Múi giờ diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index cbbb1556ee..226ebfd0b8 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -130,13 +130,24 @@ zh-CN: show_application: 无论如何,你始终可以看到是哪个应用发布了你的嘟文。 tag: name: 你只能改变字母的大小写,让它更易读 + terms_of_service: + changelog: 可以使用 Markdown 语法。 + text: 可以使用 Markdown 语法。 + terms_of_service_generator: + admin_email: 法务通知包括反通知、法院命令、内容下架要求与执法机关的要求。 + arbitration_address: 可以与上面的实际地址相同,若使用邮箱,则填写“N/A” + arbitration_website: 可以为网页表单,若使用邮箱,则填写“N/A” + dmca_address: 如果你是位于美国的运营者,请使用在 DMCA 指定代表名录中注册的地址。如果你需要使用邮政信箱,可以直接申请。请使用 DMCA 指定代表邮政信箱豁免申请表,通过电子邮件联系版权办公室,并声明你是居家内容审核员,因担心审核操作会招致报复或打击报复,需要使用邮政信箱以避免公开家庭住址。 + dmca_email: 可使用与上方“法务通知接收邮箱地址”相同的邮箱地址。 + domain: 你所提供的在线服务的唯一标识。 + jurisdiction: 请列出支付运营费用者所在的国家/地区。如果为公司或其他实体,请列出其注册的国家/地区以及相应的城市、地区、领地或州。 user: chosen_languages: 仅选中语言的嘟文会出现在公共时间线上(全不选则显示所有语言的嘟文) role: 角色用于控制用户拥有的权限。 user_role: color: 在界面各处用于标记该角色的颜色,以十六进制 RGB 格式表示 highlighted: 使角色公开可见 - name: 角色的公开名称,将在设为展示徽章时使用 + name: 角色的公开名称,将在外显为徽章时使用 permissions_as_keys: 具有此角色的用户将有权访问... position: 用于在特定情况下处理决策冲突。一些特定操作只能对优先级更低的角色执行 webhook: @@ -319,14 +330,25 @@ zh-CN: name: 话题 trendable: 允许在热门下显示此话题 usable: 允许本站嘟文使用此话题 + terms_of_service: + changelog: 变更说明 + text: 服务条款 + terms_of_service_generator: + admin_email: 接收法务通知的邮箱地址 + arbitration_address: 仲裁通知的实际送达地址 + arbitration_website: 仲裁通知的在线提交入口 + dmca_address: 接收DMCA/版权通知的实际地址 + dmca_email: 接收DMCA/版权通知的邮箱地址 + domain: 域名 + jurisdiction: 法律管辖区 user: role: 角色 time_zone: 时区 user_role: color: 徽章颜色 - highlighted: 在用户资料中显示角色徽章 + highlighted: 在账户页显示角色徽章 name: 名称 - permissions_as_keys: 权限设置 + permissions_as_keys: 权限 position: 优先级 webhook: events: 已启用事件 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index c1a3a8d6d9..48a7941f76 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -130,6 +130,17 @@ zh-TW: show_application: 將總是顯示您發嘟文之應用程式 tag: name: 您只能變更大小寫,例如,以使其更易讀。 + terms_of_service: + changelog: 能以 Markdown 語法撰寫。 + text: 能以 Markdown 語法撰寫。 + terms_of_service_generator: + admin_email: 法律通知包含反駁通知、法院命令、刪除請求和執法單位請求。 + arbitration_address: 能與上述相同之實體地址,或「N/A」如使用 email + arbitration_website: 能為網路表單,或「N/A」如使用 email + dmca_address: 位於美國的運營團隊,請使用於 DMCA 指定代理目錄中註冊之地址。可直接請求 PO Box 清單,使用 DMCA 指定代理郵局信箱豁免請求向版權局發送電子郵件,並描述您是一名在家工作之內容管理員,擔心您的行為將遭報復,需要使用 PO Box 保護您的私人住址。 + dmca_email: 能使用上述用於「法律通知用途電子郵件」之相同電子郵件 + domain: 您所提供線上服務之唯一識別。 + jurisdiction: 列出帳單支付人之居住國家。若為公司或其他實體,請列出其註冊地所在的國家,及城市、地區、領土、或州別等。 user: chosen_languages: 當選取時,只有選取語言之嘟文會於公開時間軸中顯示 role: 角色控制使用者有哪些權限。 @@ -319,6 +330,17 @@ zh-TW: name: 主題標籤 trendable: 允許此主題標籤於熱門趨勢下顯示 usable: 允許嘟文使用此主題標籤 + terms_of_service: + changelog: 有何異動? + text: 服務條款 + terms_of_service_generator: + admin_email: 法律通知用途電子郵件 + arbitration_address: 仲裁通知之實體地址 + arbitration_website: 提交仲裁通知之網站 + dmca_address: DMCA 或版權通知之實體地址 + dmca_email: DMCA 或版權通知之電子郵件地址 + domain: 網域 + jurisdiction: 司法管轄區 user: role: 角色 time_zone: 時區 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 62d9eba758..72ff7af37f 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -182,11 +182,13 @@ sk: create_custom_emoji: Vytvor vlastné emotikony create_domain_allow: Vytvor povolenie pre doménu create_domain_block: Vytvor zákaz domény + create_email_domain_block: Vytvor zákaz emailovej domény create_ip_block: Vytvor IP pravidlo create_unavailable_domain: Vytvor nedostupnú doménu create_user_role: Vytvoriť rolu demote_user: Zniž užívateľskú rolu destroy_announcement: Vymaž oboznámenie + destroy_canonical_email_block: Zruš blokovanie emailu destroy_custom_emoji: Vymaž vlastné emotikony destroy_domain_allow: Zmaž povolenie pre doménu destroy_domain_block: Zruš blokovanie domény diff --git a/config/locales/sl.yml b/config/locales/sl.yml index b29808dc14..24aa67e7ae 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1141,7 +1141,6 @@ sl: migrate_account: Premakni se na drug račun migrate_account_html: Če želite ta račun preusmeriti na drugega, ga lahko nastavite tukaj. or_log_in_with: Ali se prijavite z - privacy_policy_agreement_html: Prebral_a sem in se strinjam s pravilnikom o zasebnosti. progress: confirm: Potrdi e-pošto details: Vaši podatki @@ -1166,7 +1165,6 @@ sl: set_new_password: Nastavi novo geslo setup: email_below_hint_html: Poglejte v mapo neželene pošte ali zaprosite za novega. Če ste podali napačen e-naslov, ga lahko popravite. - email_settings_hint_html: Kliknite povezavo, ki smo vam jo poslali, da overite %{email}. Počakali bomo. link_not_received: Ali ste prejeli povezavo? new_confirmation_instructions_sent: Čez nekaj minut boste prejeli novo e-sporočilo s potrditveno povezavo! title: Preverite svojo dohodno e-pošto @@ -1175,7 +1173,6 @@ sl: title: Vpiši se v %{domain} sign_up: manual_review: Registracije na %{domain} ročno pregledajo naši moderatorji. Da nam olajšate obdelavo vaše prijave, zapišite kaj o sebi in zakaj si želite račun na %{domain}. - preamble: Z računom na strežniku Mastodon boste lahko sledili vsem drugim v tem omrežju, ne glede na to, kje gostuje njihov račun. title: Naj vas namestimo na %{domain}. status: account_status: Stanje računa diff --git a/config/locales/sq.yml b/config/locales/sq.yml index afce58503d..4ac12b67a4 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -214,6 +214,7 @@ sq: enable_user: Aktivizo Përdorues memorialize_account: Bëje Llogari Përkujtimore promote_user: Promovojeni Përdoruesin + publish_terms_of_service: Boto Kushte Shërbimi reject_appeal: Hidheni Poshtë Apelimin reject_user: Hidhe Poshtë Përdoruesin remove_avatar_user: Hiqe Avatarin @@ -278,6 +279,7 @@ sq: enable_user_html: "%{name} aktivizoi hyrje për përdoruesin %{target}" memorialize_account_html: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore" promote_user_html: "%{name} gradoi përdoruesin %{target}" + publish_terms_of_service_html: "%{name} botoi përditësime të kushteve të shërbimit" reject_appeal_html: "%{name} hodhi poshtë apelim vendimi moderimi nga %{target}" reject_user_html: "%{name} hodhi poshtë regjistrimin nga %{target}" remove_avatar_user_html: "%{name} hoqi avatarin e %{target}" @@ -920,6 +922,35 @@ sq: search: Kërkim title: Hashtag-ë updated_msg: Rregullimet për hashtag-ët u përditësuan me sukses + terms_of_service: + back: Mbrapsht te kushte shërbimi + changelog: Ç’ka ndryshuar + create: Përdorni tuajat + current: Të tanishmet + draft: Skicë + generate: Përdorni gjedhe + generates: + action: Prodhoji + chance_to_review_html: "Termat e shërbimit të prodhuar s’do të botohen automatikisht. Do të keni një mundësi të shqyrtoni përfundimet. Ju lutemi, që të vazhdohet, plotësoni hollësitë e nevojshme." + explanation_html: Gjedhja e dhënë për kushtet e shërbimit është vetëm për qëllime njohjeje dhe s’duhet marrë si këshillë ligjore, për çfarëdo çështje. Ju lutemi, për situatën tuaj dhe pyetje specifike ligjore, lidhuni me juristin tuaj. + title: Ujdisje Termash Shërbimi + history: Historik + live: Drejtpërdrejt + no_history: Ende s’ka ndryshime të regjistruara të kushteve të shërbimit. + no_terms_of_service_html: Aktualisht s’keni të formësuar terma shërbimit. Termat e shërbimit janë menduar të japin qartësi dhe t’ju mbrojnë nga penalitete potenciale në çështje gjyqësore me përdoruesit tuaj. + notified_on_html: Përdoruesi u njoftuan më %{date} + notify_users: Njoftoji përdoruesit + preview: + explanation_html: 'Email-i do t’u dërgohet %{display_count} përdoruesve që janë regjistruar para %{date}. Te email-i do të përfshihet teksti vijues:' + send_preview: Dërgo paraparje te %{email} + send_to_all: + one: Dërgo %{display_count} email + other: Dërgo %{display_count} email-e + title: Bëni paraparje të njoftimit të shërbimt + publish: Botoje + published_on_html: Botuar më %{date} + save_draft: Ruaje skicën + title: Kushte Shërbimi title: Administrim trends: allow: Lejojeni @@ -1126,7 +1157,6 @@ sq: migrate_account: Kaloni në një tjetër llogari migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund ta formësoni këtu. or_log_in_with: Ose bëni hyrjen me - privacy_policy_agreement_html: I kam lexuar dhe pajtohem me rregullat e privatësisë progress: confirm: Ripohoni email-in details: Hollësitë tuaja @@ -1151,7 +1181,7 @@ sq: set_new_password: Caktoni fjalëkalim të ri setup: email_below_hint_html: Shihni te dosja juaj e të padëshiruarve, ose kërkoni një tjetër. Mundeni të saktësoni adresën tuaj email, nëse është gabim. - email_settings_hint_html: Që të verifikoni %{email}, klikoni lidhjen që ju dërguam. Do të presim këtu. + email_settings_hint_html: Që të filloni të përdorni Mastodon-in, klikoni mbi lidhjen që dërguam te%{email}. Do të presim këtu. link_not_received: S’morët lidhje? new_confirmation_instructions_sent: Brenda pak mintuash do të merrni një email të ri me lidhjen e ripohimit! title: Shihni te email-et tuaj @@ -1160,7 +1190,7 @@ sq: title: Bëni hyrjen te %{domain} sign_up: manual_review: Regjistrimet te %{domain} kalojnë një shqyrtim dorazi nga moderatorët tanë. Që të na ndihmoni të përfundojmë regjistrimin tuaj, na shkruani pakëz mbi veten dhe pse doni një llogari në %{domain}. - preamble: Me një llogari në këtë shërbyes Mastodon, do të jeni në gjendje të ndiqni cilindo person tjetër në rrjet, pavarësisht se ku strehohet llogaria e tyre. + preamble: Me një llogari te ky shërbyes Mastodon do të jeni në gjendje të ndiqni cilindo person në fedivers, pavarësisht se ku strehohet llogaria e tij. title: Le të ujdisim llogarinë tuaj në %{domain}. status: account_status: Gjendje llogarie @@ -1172,6 +1202,7 @@ sq: view_strikes: Shihni paralajmërime të dikurshme kundër llogarisë tuaj too_fast: Formulari u parashtrua shumë shpejt, riprovoni. use_security_key: Përdor kyç sigurie + user_agreement_html: I kam lexuar dhe pajtohen me kushtet e shërbimit dhe rregullat e privatësisë author_attribution: example_title: Tekst shembull hint_html: Shkruani lajme, apo artikuj blogu jashtë Mastodon-it? Kontrolloni se si ju jepet hakë, kur ndahen me të tjerët në Mastodon. @@ -1833,6 +1864,8 @@ sq: too_late: Është shumë vonë për apelim të këtij paralajmërimi tags: does_not_match_previous_name: s’përputhet me emrin e mëparshëm + terms_of_service: + title: Kushte Shërbimi themes: contrast: Mastodon (Me shumë kontrast) default: Mastodon (I errët) @@ -1893,6 +1926,15 @@ sq: further_actions_html: Nëse s’ishit ju, këshillojmë të %{action} menjëherë dhe të aktivizoni mirëfilltësim dyfaktorësh, për ta mbajtur llogarinë tuaj të sigurt. subject: Llogaria juaj është përdorur që nga një adresë e re IP title: Hyrje e re + terms_of_service_changed: + agreement: Duke vazhduar të përdorni %{domain}, pajtoheni më këto terma. Nëse s’pajtoheni me termat e përditësuar, mund të përfundoni pajtimin tuaj me %{domain} në çfarëdo kohe, përmes fshirjes së llogarisë tuaj. + changelog: 'Me një vështrim, ja se ç’do të thotë ky përditësim për ju:' + description: 'Po e merrni këtë email ngaqë po bëjmë disa ndryshime te kushtet tona të shërbimit në %{domain}. Ju nxisim të shqyrtoni termat e përditësuar të plotë këtu:' + description_html: Po e merrni këtë email ngaqë po bëjmë disa ndryshime në kushtet tona të shërbimit te %{domain}. Ju nxisim të shqyrtoni termat e përditësuar të plotë këtu. + sign_off: Ekipi i %{domain} + subject: Përditësime të termave tanë të shërbimit + subtitle: Termat e shërbimit të %{domain} po ndryshojnë + title: Përditësim i rëndësishëm warning: appeal: Parashtroni një apelim appeal_description: Nëse besoni se është gabim, mund t’i parashtroni një apelim stafit të %{instance}. diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 37c531b207..700e588550 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1060,7 +1060,6 @@ sr-Latn: migrate_account: Premeštanje u drugi nalog migrate_account_html: Ako želite da preusmerite ovaj nalog na neki drugi, možete to podesiti ovde. or_log_in_with: Ili se prijavite sa - privacy_policy_agreement_html: Pročitao/-la sam i saglasan/-a sam sa politikom privatnosti progress: details: Vaši detalji review: Naš pregled @@ -1083,7 +1082,6 @@ sr-Latn: security: Bezbednost set_new_password: Postavi novu lozinku setup: - email_settings_hint_html: Kliknite na vezu koji smo vam poslali da verifikujete %{email}. Čekaćemo ovde. link_not_received: Niste dobili vezu? title: Proverite svoje prijemno sanduče sign_in: @@ -1091,7 +1089,6 @@ sr-Latn: title: Prijavite se na %{domain} sign_up: manual_review: Naši moderatori ručno pregledaju registracije na %{domain}. Da biste nam pomogli da obradimo vašu registraciju, napišite nešto o sebi i zašto želite nalog na %{domain}. - preamble: Sa nalogom na ovom Mastodon serveru, moći ćete da pratite bilo koga sa mreže, bez obzira na to na kom serveru se njegov/njen nalog nalazi. title: Hajde da Vam namestimo nalog na %{domain}. status: account_status: Status naloga diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 7a8469d645..28abe3b46e 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1090,7 +1090,6 @@ sr: migrate_account: Премештање у други налог migrate_account_html: Ако желите да преусмерите овај налог на неки други, можете то подесити овде. or_log_in_with: Или се пријавите са - privacy_policy_agreement_html: Прочитао/-ла сам и сагласан/-а сам са политиком приватности progress: details: Ваши детаљи review: Наш преглед @@ -1113,7 +1112,6 @@ sr: security: Безбедност set_new_password: Постави нову лозинку setup: - email_settings_hint_html: Кликните на везу који смо вам послали да верификујете %{email}. Чекаћемо овде. link_not_received: Нисте добили везу? title: Проверите своје пријемно сандуче sign_in: @@ -1121,7 +1119,6 @@ sr: title: Пријавите се на %{domain} sign_up: manual_review: Наши модератори ручно прегледају регистрације на %{domain}. Да бисте нам помогли да обрадимо вашу регистрацију, напишите нешто о себи и зашто желите налог на %{domain}. - preamble: Са налогом на овом Mastodon серверу, моћи ћете да пратите било кога са мреже, без обзира на то на ком серверу се његов/њен налог налази. title: Хајде да Вам наместимо налог на %{domain}. status: account_status: Статус налога diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 8d4aa7f7da..0eee797fec 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1132,7 +1132,6 @@ sv: migrate_account: Flytta till ett annat konto migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du konfigurera det här. or_log_in_with: Eller logga in med - privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn progress: confirm: Bekräfta e-postadress details: Dina uppgifter @@ -1157,7 +1156,6 @@ sv: set_new_password: Skriv in nytt lösenord setup: email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel. - email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här. link_not_received: Fick du ingen länk? new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter! title: Kolla din inkorg @@ -1166,7 +1164,6 @@ sv: title: Logga in på %{domain} sign_up: manual_review: Registreringar på %{domain} går igenom manuell granskning av våra moderatorer. För att hjälpa oss att hantera din registrering, skriv lite om dig själv och varför du vill ha ett konto på %{domain}. - preamble: Med ett konto på denna Mastodon-server kan du följa alla andra personer på nätverket, oavsett vilken server deras konto tillhör. title: Låt oss få igång dig på %{domain}. status: account_status: Kontostatus @@ -1838,6 +1835,8 @@ sv: too_late: Det är för sent att överklaga denna strejk tags: does_not_match_previous_name: matchar inte det föregående namnet + terms_of_service: + title: Användarvillkor themes: contrast: Mastodon (Hög kontrast) default: Mastodon (Mörk) diff --git a/config/locales/th.yml b/config/locales/th.yml index d0590d19ef..4f0a6e98bd 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1114,7 +1114,6 @@ th: migrate_account: ย้ายไปยังบัญชีอื่น migrate_account_html: หากคุณต้องการเปลี่ยนเส้นทางบัญชีนี้ไปยังบัญชีอื่น คุณสามารถ กำหนดค่าบัญชีที่นี่ or_log_in_with: หรือเข้าสู่ระบบด้วย - privacy_policy_agreement_html: ฉันได้อ่านและเห็นด้วยกับ นโยบายความเป็นส่วนตัว progress: confirm: ยืนยันอีเมล details: รายละเอียดของคุณ @@ -1139,7 +1138,6 @@ th: set_new_password: ตั้งรหัสผ่านใหม่ setup: email_below_hint_html: ตรวจสอบโฟลเดอร์สแปมของคุณ หรือขออีเมลอื่น คุณสามารถแก้ไขที่อยู่อีเมลของคุณหากที่อยู่อีเมลผิด - email_settings_hint_html: คลิกลิงก์ที่เราส่งถึงคุณเพื่อยืนยัน %{email} เราจะรออยู่ตรงนี้ link_not_received: ไม่ได้รับลิงก์? new_confirmation_instructions_sent: คุณจะได้รับอีเมลใหม่พร้อมลิงก์การยืนยันในไม่กี่นาที! title: ตรวจสอบกล่องขาเข้าของคุณ @@ -1148,7 +1146,6 @@ th: title: เข้าสู่ระบบ %{domain} sign_up: manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้กลั่นกรองของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain} - preamble: ด้วยบัญชีในเซิร์ฟเวอร์ Mastodon นี้ คุณจะสามารถติดตามบุคคลอื่นใดในเครือข่าย โดยไม่คำนึงถึงที่ซึ่งบัญชีของเขาได้รับการโฮสต์ title: มาตั้งค่าของคุณใน %{domain} กันเลย status: account_status: สถานะบัญชี diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 18e8dd1338..7c4840be60 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -214,6 +214,7 @@ tr: enable_user: Kullanıcıyı Etkinleştir memorialize_account: Hesabı Anıtlaştır promote_user: Kullanıcıyı Yükselt + publish_terms_of_service: Hizmet Şartlarını Yayınla reject_appeal: İtirazı Reddet reject_user: Kullanıcıyı Reddet remove_avatar_user: Profil Resmini Kaldır @@ -278,6 +279,7 @@ tr: enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi" memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü" promote_user_html: "%{name}, %{target} kullanıcısını yükseltti" + publish_terms_of_service_html: "%{name} hizmet şartları güncellemelerini yayınladı" reject_appeal_html: "%{name}, %{target} kullanıcısının yönetim kararına itirazını reddetti" reject_user_html: "%{name}, %{target} konumundan kaydı reddetti" remove_avatar_user_html: "%{name}, %{target} kullanıcısının avatarını kaldırdı" @@ -925,6 +927,32 @@ tr: search: Ara title: Etiketler updated_msg: Etiket ayarları başarıyla güncellendi + terms_of_service: + back: Hizmet şartlarına dön + changelog: Ne Değişti + create: Kendinizinkini kullanın + current: Şimdiki + draft: Taslak + generate: Şablon kullan + generates: + action: Oluştur + chance_to_review_html: "Üretilmiş hizmet şartları otomatik olarak yayınlanmayacaktır. Sonucu gözden geçirme şansınız olacaktır. Devam etmek için lütfen gerekli ayrıntıları doldurun." + explanation_html: Sağlanan hizmet şartları şablonu yalnızca bilgilendirme amaçlıdır ve herhangi bir konuda yasal tavsiye olarak yorumlanmamalıdır. Lütfen durumunuz ve belirli yasal sorularınız hakkında kendi hukuk müşavirinize danışın. + title: Hizmet Şartları Kurulumu + history: Tarihçe + live: Canlı + no_history: Henüz kaydedilmiş hizmet şartları değişikliği yok. + no_terms_of_service_html: Şu anda yapılandırılmış herhangi bir hizmet şartınız yok. Hizmet şartları, kullanıcılarınızla olan anlaşmazlıklarda netlik sağlamak ve sizi olası yükümlülüklerden korumak içindir. + notified_on_html: Kullanıcılar %{date} tarihinde bilgilendirildi + notify_users: Kullanıcılara bildir + preview: + explanation_html: 'E-posta, %{date} tarihinden önce kaydolan %{display_count} kullanıcıya gönderilecektir. E-posta içerisinde aşağıdaki metin yer alacaktır:' + send_preview: Ön izlemeyi %{email} adresine gönder + title: Hizmet şartları bildirimini öz izle + publish: Yayınla + published_on_html: "%{date} tarihinde yayınlandı" + save_draft: Taslağı kaydet + title: Hizmet Şartları title: Yönetim trends: allow: İzin ver @@ -1132,7 +1160,6 @@ tr: migrate_account: Farklı bir hesaba taşıyın migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsan, buradan yapılandırabilirsin. or_log_in_with: 'Veya şununla oturum açın:' - privacy_policy_agreement_html: Gizlilik politikasını okudum ve kabul ettim progress: confirm: E-postanızı onaylayın details: Ayrıntılarınız @@ -1157,7 +1184,7 @@ tr: set_new_password: Yeni parola belirle setup: email_below_hint_html: İstenmeyenler dizininize bakın veya başka bir onay bağlantısı isteyin. Eğer yanlışsa e-posta adresinizi de düzeltebilirsiniz. - email_settings_hint_html: "%{email} adresinizi doğrulamak için size gönderdiğimiz bağlantıya tıklayın. Biz burada bekliyoruz." + email_settings_hint_html: Mastodon kullanmaya başlamak %{email} adresine gönderdiğimiz bağlantıya tıklayın. Sizi burada bekliyoruz. link_not_received: Bağlantı gelmedi mi? new_confirmation_instructions_sent: Birkaç dakika içerisinde onaylama bağlantısını içeren yeni bir e-posta alacaksınız! title: Gelen kutunuzu kontrol edin @@ -1166,7 +1193,7 @@ tr: title: "%{domain} giriş yapın" sign_up: manual_review: "%{domain} kayıtları moderatörler tarafından manuel olarak inceleniyor. Kaydınızı işlememizi kolaylaştırmak için kendiniz ve %{domain} sunucusundan neden hesap istediğiniz hakkında biraz bilgi verin." - preamble: Bu Mastodon sunucusu üzerinden bir hesap ile ağdaki herhangi bir kişiyi, hesabı hangi sunucuda saklanırsa saklansın, takip edebilirsiniz. + preamble: Bu Mastodon sunucusu üzerinden bir hesap ile fediverseteki herhangi bir kişiyi, hangi sunucuda olursa olsun, takip edebilirsiniz. title: "%{domain} için kurulumunuzu yapalım." status: account_status: Hesap durumu @@ -1178,6 +1205,7 @@ tr: view_strikes: Hesabınıza yönelik eski eylemleri görüntüleyin too_fast: Form çok hızlı gönderildi, tekrar deneyin. use_security_key: Güvenlik anahtarını kullan + user_agreement_html: hizmet şartları ve gizlilik politikasını okudum ve kabul ediyorum author_attribution: example_title: Örnek metin hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin. @@ -1839,6 +1867,8 @@ tr: too_late: Bu eyleme itiraz etmek için çok geç tags: does_not_match_previous_name: önceki adla eşleşmiyor + terms_of_service: + title: Hizmet Şartları themes: contrast: Mastodon (Yüksek karşıtlık) default: Mastodon (Karanlık) @@ -1899,6 +1929,15 @@ tr: further_actions_html: Eğer oturum açan siz değildiyseniz, hesabınızı güvenli tutmanız için hemen %{action} yapmanızı ve iki aşamalı yetkilendirmeyi etkinleştirmenizi öneriyoruz. subject: Hesabınıza yeni bir IP adresinden erişim oldu title: Yeni bir oturum açma + terms_of_service_changed: + agreement: "%{domain} sunucusunu kullanmaya devam ederek bu şartları kabul etmiş olursunuz. Güncellenen şartları kabul etmiyorsanız, %{domain} ile olan sözleşmenizi istediğiniz zaman hesabınızı silerek feshedebilirsiniz." + changelog: 'Bir bakışta, bu güncellemenin sizin için anlamı şudur:' + description: 'Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Aşağıda tümü yer alan güncellenen şartları incelemenizi öneriyoruz:' + description_html: Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Tüm güncellenen şartları buraya tıklayarak incelemenizi öneririz. + sign_off: "%{domain} Ekibi" + subject: Şimdiki hizmet şartlarımıza güncellemeler + subtitle: "%{domain} adresindeki hizmet şartları değişiyor" + title: Önemli güncelleme warning: appeal: Bir itiraz gönder appeal_description: Bunun bir hata olduğunu düşünüyorsanız, %{instance} sunucusunun personeline bir itiraz gönderebilirsiniz. diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 40127b8917..0478ce6d3b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1153,7 +1153,6 @@ uk: migrate_account: Переїхати на інший обліковий запис migrate_account_html: Якщо ви бажаєте переспрямувати цей обліковий запис на інший, ви можете налаштувати це тут. or_log_in_with: Або увійдіть з - privacy_policy_agreement_html: Мною прочитано і я погоджуюся з політикою приватності progress: confirm: Підтвердити електронну адресу details: Ваші дані @@ -1178,7 +1177,7 @@ uk: set_new_password: Встановити новий пароль setup: email_below_hint_html: Перевірте теку "Спам", або зробіть ще один запит. Ви можете виправити свою електронну адресу, якщо вона неправильна. - email_settings_hint_html: Натисніть на посилання, яке ми надіслали вам, щоб підтвердити %{email}. Ми чекатимемо прямо тут. + email_settings_hint_html: Натисніть посилання, надіслане на %{email} щоб почати використання Mastodon. Ми чекатимемо тут. link_not_received: Не отримали посилання? new_confirmation_instructions_sent: Ви отримаєте новий лист із посиланням для підтвердження протягом кількох хвилин! title: Перевірте вашу поштову скриньку @@ -1187,7 +1186,6 @@ uk: title: Увійти до %{domain} sign_up: manual_review: Реєстрація на %{domain} проходить через ручний розгляд нашими модераторами. Щоб допомогти нам завершити вашу реєстрацію, напишіть трохи про себе і чому ви хочете зареєструватися на %{domain}. - preamble: За допомогою облікового запису на цьому сервері Mastodon, ви зможете слідкувати за будь-якою іншою людиною в мережі, не зважаючи на те, де розміщений обліковий запис. title: Налаштуймо вас на %{domain}. status: account_status: Стан облікового запису diff --git a/config/locales/vi.yml b/config/locales/vi.yml index b226c44701..33c743188d 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -211,6 +211,7 @@ vi: enable_user: Cho phép đăng nhập memorialize_account: Gán tưởng niệm promote_user: Nâng vai trò + publish_terms_of_service: Đăng Điều khoản Dịch vụ reject_appeal: Từ chối khiếu nại reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện @@ -275,6 +276,7 @@ vi: enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}" memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" promote_user_html: "%{name} đã nâng vai trò của %{target}" + publish_terms_of_service_html: "%{name} đã cập nhật điều khoản dịch vụ" reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}" reject_user_html: "%{name} đã từ chối đăng ký từ %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" @@ -911,6 +913,34 @@ vi: search: Tìm kiếm title: Hashtag updated_msg: Hashtag đã được cập nhật thành công + terms_of_service: + back: Trở về điều khoản dịch vụ + changelog: Điểm mới + create: Dùng của bạn + current: Hiện tại + draft: Bản nháp + generate: Dùng mẫu + generates: + action: Tạo + chance_to_review_html: "Các điều khoản dịch vụ đã tạo sẽ không được tự động công bố. Bạn sẽ cần xem lại trước. Vui lòng điền thông tin cần thiết để tiếp tục." + explanation_html: Mẫu điều khoản dịch vụ được cung cấp chỉ nhằm mục đích cung cấp thông tin và không được hiểu là tư vấn pháp lý về bất kỳ vấn đề nào. Vui lòng tham khảo ý kiến ​​cố vấn pháp lý của riêng bạn về tình huống của bạn và các câu hỏi pháp lý cụ thể mà bạn có. + title: Thiết lập Điều khoản Dịch vụ + history: Lịch sử + live: Đang hiển thị + no_history: Hiện tại chưa có ghi nhận thay đổi nào về các điều khoản dịch vụ. + no_terms_of_service_html: Hiện tại bạn chưa cấu hình bất kỳ điều khoản dịch vụ nào. Điều khoản dịch vụ nhằm mục đích cung cấp sự rõ ràng và bảo vệ bạn khỏi các trách nhiệm pháp lý tiềm ẩn trong các tranh chấp với người dùng của bạn. + notified_on_html: Đã thông báo tới thành viên vào %{date} + notify_users: Thông báo tới thành viên + preview: + explanation_html: 'Gửi email tới %{display_count} thành viên đã đăng ký trước %{date}. Nội dung sau đây sẽ được đưa vào email:' + send_preview: Gửi bản xem thử tới %{email} + send_to_all: + other: Gửi tới %{display_count} email + title: Xem trước thông báo về điều khoản dịch vụ + publish: Đăng + published_on_html: Đăng vào %{date} + save_draft: Lưu bản nháp + title: Điều khoản Dịch vụ title: Quản trị trends: allow: Cho phép @@ -1114,7 +1144,6 @@ vi: migrate_account: Chuyển sang tài khoản khác migrate_account_html: Nếu bạn muốn bỏ tài khoản này để dùng một tài khoản khác, bạn có thể thiết lập tại đây. or_log_in_with: Hoặc đăng nhập bằng - privacy_policy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật progress: confirm: Xác nhận email details: Điền thông tin @@ -1139,7 +1168,7 @@ vi: set_new_password: Đặt mật khẩu mới setup: email_below_hint_html: Kiểm tra hộp thư rác hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. - email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn. + email_settings_hint_html: Nhấn vào link được gửi đến %{email} để bắt đầu dùng Mastodon. Chúng tôi đợi bạn. link_not_received: Không nhận được mã? new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác minh sau vài phút! title: Kiểm tra email của bạn @@ -1148,7 +1177,7 @@ vi: title: Đăng nhập %{domain} sign_up: manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}." - preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào thuộc các máy chủ khác. + preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu. title: Đang đăng ký trên %{domain}. status: account_status: Trạng thái tài khoản @@ -1160,6 +1189,7 @@ vi: view_strikes: Xem những lần cảnh cáo cũ too_fast: Nghi vấn đăng ký spam, xin thử lại. use_security_key: Dùng khóa bảo mật + user_agreement_html: Tôi đã đọc và đồng ý với điều khoản dịch vụchính sách bảo mật author_attribution: example_title: Văn bản mẫu hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon. @@ -1797,6 +1827,8 @@ vi: too_late: Đã quá trễ để khiếu nại tags: does_not_match_previous_name: không khớp với tên trước + terms_of_service: + title: Điều khoản Dịch vụ themes: contrast: Mastodon (Tương phản) default: Mastodon (Tối) @@ -1857,6 +1889,15 @@ vi: further_actions_html: Nếu đây không phải là bạn, hãy %{action} lập tức và bật xác minh hai bước để giữ tài khoản được an toàn. subject: Đăng nhập tài khoản từ địa chỉ IP mới title: Lần đăng nhập mới + terms_of_service_changed: + agreement: Tiếp tục sử dụng %{domain}, đồng nghĩa bạn đồng ý điều khoản dịch vụ. Nếu bạn không đồng ý với các điều khoản đã cập nhật, hãy xóa tài khoản %{domain} của bạn. + changelog: 'Nhìn sơ qua, bản cập nhật này:' + description: 'Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản đã cập nhật tại đây:' + description_html: Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản được cập nhật ở đây. + sign_off: Đội ngũ %{domain} + subject: Cập nhật điều khoản dịch vụ + subtitle: Điều khoản dịch vụ tại %{domain} đã thay đổi + title: Cập nhật quan trọng warning: appeal: Gửi khiếu nại appeal_description: Nếu bạn nghĩ đây chỉ là nhầm lẫn, hãy gửi một khiếu nại cho %{instance}. diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 7ce3eab939..2249875b6d 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -102,7 +102,7 @@ zh-CN: most_recent_ip: 最后活跃IP no_account_selected: 因为没有选中任何账号,所以没有更改 no_limits_imposed: 无限制 - no_role_assigned: 未定角色 + no_role_assigned: 未指派角色 not_subscribed: 未订阅 pending: 待审核 perform_full_suspension: 封禁 @@ -199,7 +199,7 @@ zh-CN: destroy_relay: 删除中继站 destroy_status: 删除嘟文 destroy_unavailable_domain: 删除不可用域名 - destroy_user_role: 销毁角色 + destroy_user_role: 删除角色 disable_2fa_user: 停用双因素认证 disable_custom_emoji: 禁用自定义表情符号 disable_relay: 禁用中继站 @@ -211,6 +211,7 @@ zh-CN: enable_user: 启用用户 memorialize_account: 设为追悼账户 promote_user: 指派管理员 + publish_terms_of_service: 发布服务条款 reject_appeal: 驳回申诉 reject_user: 拒绝用户 remove_avatar_user: 移除头像 @@ -250,7 +251,7 @@ zh-CN: create_ip_block_html: "%{name} 为 IP %{target} 创建了规则" create_relay_html: "%{name} 添加了中继站 %{target}" create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递" - create_user_role_html: "%{name} 创建了 %{target} 角色" + create_user_role_html: "%{name} 创建了角色 %{target}" demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限" destroy_announcement_html: "%{name} 删除了公告 %{target}" destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址" @@ -263,7 +264,7 @@ zh-CN: destroy_relay_html: "%{name} 删除了中继站 %{target}" destroy_status_html: "%{name} 删除了 %{target} 的嘟文" destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递" - destroy_user_role_html: "%{name} 删除了 %{target} 角色" + destroy_user_role_html: "%{name} 删除了角色 %{target}" disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证" disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}" disable_relay_html: "%{name} 停用了中继站 %{target}" @@ -275,6 +276,7 @@ zh-CN: enable_user_html: "%{name} 将用户 %{target} 设置为允许登录" memorialize_account_html: "%{name} 将 %{target} 设置为追悼账户" promote_user_html: "%{name} 将用户 %{target} 设为管理员" + publish_terms_of_service_html: "%{name} 更新了服务条款" reject_appeal_html: "%{name} 驳回了 %{target} 对审核结果的申诉" reject_user_html: "%{name} 拒绝了用户 %{target} 的注册" remove_avatar_user_html: "%{name} 删除了 %{target} 的头像" @@ -296,7 +298,7 @@ zh-CN: update_ip_block_html: "%{name} 修改了对 IP %{target} 的规则" update_report_html: "%{name} 更新了举报 %{target}" update_status_html: "%{name} 刷新了 %{target} 的嘟文" - update_user_role_html: "%{name} 更改了 %{target} 角色" + update_user_role_html: "%{name} 更改了角色 %{target}" deleted_account: 账号已注销 empty: 没有找到日志 filter_by_action: 根据操作筛选 @@ -677,61 +679,61 @@ zh-CN: roles: add_new: 添加角色 assigned_users: - other: "%{count} 用户" + other: "%{count} 名用户" categories: administration: 管理 devops: 开发运维 invites: 邀请 - moderation: 监察 + moderation: 审核 special: 特殊 delete: 刪除 - description_html: 使用 用户角色,你可以自定义你的用户可以访问的功能和区域。 - edit: 编辑 '%{name}' 角色 + description_html: 使用 用户角色,你可以自定义你的用户可以访问的 Mastodon 功能和区域。 + edit: 编辑角色 '%{name}' everyone: 默认权限 - everyone_full_description_html: 这是影响到 所有用户基础角色,包括未指定角色的用户。 其他所有的角色都继承着它的权限。 + everyone_full_description_html: 该角色是基础角色,会影响所有用户,包括未指定角色的用户。 其他所有的角色都继承该角色的权限。 permissions_count: - other: "%{count} 权限" + other: "%{count} 个权限" privileges: administrator: 管理员 - administrator_description: 拥有此权限的用户将绕过每个权限 + administrator_description: 拥有此权限的用户将绕过所有权限限制。 delete_user_data: 删除用户数据 delete_user_data_description: 允许用户立即删除其他用户的数据 invite_users: 邀请用户 - invite_users_description: 允许用户邀请新人加入服务器 + invite_users_description: 允许用户邀请新人加入站点 manage_announcements: 管理公告 - manage_announcements_description: 允许用户管理服务器上的通知 + manage_announcements_description: 允许用户管理站点上的公告 manage_appeals: 管理申诉 - manage_appeals_description: 允许用户审阅针对管理操作的申诉 - manage_blocks: 管理地址段 - manage_blocks_description: 允许用户屏蔽邮箱提供商和IP地址 + manage_appeals_description: 允许用户复核针对管理操作的申诉 + manage_blocks: 管理地址屏蔽列表 + manage_blocks_description: 允许用户屏蔽邮箱域名与IP地址 manage_custom_emojis: 管理自定义表情 - manage_custom_emojis_description: 允许用户管理服务器上的自定义表情 + manage_custom_emojis_description: 允许用户管理站点上的自定义表情 manage_federation: 管理联合 manage_federation_description: 允许用户禁止或允许本站同其他站点的联合,并控制消息投递能力 manage_invites: 管理邀请 - manage_invites_description: 允许用户浏览和停用邀请链接 + manage_invites_description: 允许用户浏览与停用邀请链接 manage_reports: 管理举报 manage_reports_description: 允许用户审核举报并执行管理操作 manage_roles: 管理角色 - manage_roles_description: 允许用户管理和分配比他们权限低的角色 + manage_roles_description: 允许用户管理与指派比自己权限低的角色 manage_rules: 管理规则 - manage_rules_description: 允许用户更改服务器规则 + manage_rules_description: 允许用户修改站点规则 manage_settings: 管理设置 manage_settings_description: 允许用户更改站点设置 - manage_taxonomies: 管理分类 - manage_taxonomies_description: 允许用户查看热门内容并更新标签设置 - manage_user_access: 管理访问 - manage_user_access_description: 允许用户禁用其它用户的双因素身份验证,更改他们的邮箱地址,以及重置他们的密码。 + manage_taxonomies: 管理热门与话题 + manage_taxonomies_description: 允许用户审核热门内容并更新话题设置 + manage_user_access: 管理用户身份验证信息 + manage_user_access_description: 允许用户允许用户为其他用户关闭双因素身份验证、修改邮箱并重置密码。 manage_users: 管理用户 manage_users_description: 允许用户查看其他用户的信息并执行管理操作 manage_webhooks: 管理 Webhooks manage_webhooks_description: 允许用户为管理事件配置 Webhook view_audit_log: 查看审核日志 - view_audit_log_description: 允许用户查看此服务器上的管理操作记录 - view_dashboard: 查看仪表板 - view_dashboard_description: 允许用户访问仪表盘和各种指标 + view_audit_log_description: 允许用户查看此站点上的管理操作记录 + view_dashboard: 查看信息面板 + view_dashboard_description: 允许用户访问信息面板和各种指标 view_devops: 开发运维 - view_devops_description: 允许用户访问 Sidekiq 和 pgHero 仪表板 + view_devops_description: 允许用户访问 Sidekiq 和 pgHero 控制面板 title: 角色 rules: add_new: 添加规则 @@ -911,6 +913,34 @@ zh-CN: search: 搜索 title: 话题 updated_msg: 话题设置更新成功 + terms_of_service: + back: 返回服务条款页 + changelog: 变更说明 + create: 自定义 + current: 当前版本 + draft: 草稿 + generate: 使用模板 + generates: + action: 生成 + chance_to_review_html: "服务条款生成后不会自动发布。你可以审核生成的草稿,填写必要的信息后继续操作。" + explanation_html: 此服务条款模板仅供参考,不构成法律意见。如有任何法律问题,请咨询法律顾问。 + title: 设置服务条款 + history: 历史记录 + live: 生效中 + no_history: 尚无服务条款变更记录。 + no_terms_of_service_html: 你还没有设置任何服务条款。设置服务条款可以清晰地界定责任,并在与用户发生争议时有效保护您的权益。 + notified_on_html: 已于 %{date} 通知用户 + notify_users: 通知用户 + preview: + explanation_html: 即将向在 %{date} 注册之前的 %{display_count} 名用户发送邮件。下述文本将会包含在邮件中: + send_preview: 向 %{email} 发送预览 + send_to_all: + other: 发送 %{display_count} 封邮件 + title: 服务条款变更通知预览 + publish: 发布 + published_on_html: 发表于 %{date} + save_draft: 保存草稿 + title: 服务条款 title: 管理 trends: allow: 允许 @@ -1114,7 +1144,6 @@ zh-CN: migrate_account: 迁移到另一个账户 migrate_account_html: 如果你希望引导他人关注另一个账号,请点击这里进行设置。 or_log_in_with: 或通过外部服务登录 - privacy_policy_agreement_html: 我已阅读并同意 隐私政策 progress: confirm: 确认邮箱 details: 你的详细信息 @@ -1139,7 +1168,7 @@ zh-CN: set_new_password: 设置新密码 setup: email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求重新发送邮件。如果你填写的邮箱地址有误,请更正。 - email_settings_hint_html: 请点击我们发送给 %{email} 地址中的确认链接。我在这儿等着你。 + email_settings_hint_html: 点击发送到 %{email} 的链接,即可开始使用 Mastodon。 link_not_received: 没有收到链接? new_confirmation_instructions_sent: 你将在几分钟内收到一封带有确认链接的新邮件! title: 请检查你的收件箱 @@ -1148,7 +1177,7 @@ zh-CN: title: 登录到 %{domain} sign_up: manual_review: 你在 %{domain} 上的注册需要经由管理人员手动审核。 为了帮助我们处理你的注册,请简要说明你为什么想在 %{domain} 上注册。 - preamble: 有了这个Mastodon服务器上的账户,你就可以关注Mastodon网络上的任何其他人,无论他们的账户在哪里。 + preamble: 在这个 Mastodon 站点上注册一个账户,你就可以关注联邦宇宙中的任何人,无论他们的账户在哪里。 title: 让我们在 %{domain} 上开始。 status: account_status: 账户状态 @@ -1160,6 +1189,7 @@ zh-CN: view_strikes: 查看针对你账号的处罚记录 too_fast: 表单提交过快,请重试。 use_security_key: 使用安全密钥 + user_agreement_html: 我已阅读并同意 服务条款隐私政策 author_attribution: example_title: 示例文本 hint_html: 你是否在 Mastodon 之外撰写新闻或博客文章?控制它们被分享到 Mastodon 时的署名方式。 @@ -1797,6 +1827,8 @@ zh-CN: too_late: 已来不及对此次处罚提出申诉 tags: does_not_match_previous_name: 和之前的名称不匹配 + terms_of_service: + title: 服务条款 themes: contrast: Mastodon (高对比度) default: Mastodon (暗色) @@ -1857,6 +1889,15 @@ zh-CN: further_actions_html: 如果不是你本人操作,我们建议你立即 %{action} 并启用双因素认证,以确保账号安全。 subject: 已有新 IP 地址访问了你的账号 title: 一次新登录 + terms_of_service_changed: + agreement: 继续使用你在 %{domain} 的账户即表示您同意这些条款。如果你不同意更新后的条款,你可以随时删除账户以终止与 %{domain} 的协议。 + changelog: 本次更新的要点如下: + description: 你收到此邮件是因为我们更新了 %{domain} 的服务条款。我们建议你在此查看变更后的服务条款: + description_html: 你收到此邮件是因为我们更新了 %{domain} 的服务条款。我们建议你在此查看变更后的服务条款。 + sign_off: "%{domain} 运营团队" + subject: 服务条款变更 + subtitle: "%{domain} 更新了服务条款" + title: 重要变更 warning: appeal: 提交申诉 appeal_description: 如果你认为此结果有误,可以向 %{instance} 的工作人员提交申诉。 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index cff96797ee..7278058dce 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1021,7 +1021,6 @@ zh-HK: migrate_account: 轉移到另一個帳號 migrate_account_html: 想要將這個帳號指向另一個帳號可到這裡設定。 or_log_in_with: 或登入於 - privacy_policy_agreement_html: 我已閱讀且同意私隱政策 progress: details: 你的資料 review: 我們的審核 @@ -1044,7 +1043,6 @@ zh-HK: security: 登入資訊 set_new_password: 設定新密碼 setup: - email_settings_hint_html: 請點擊我們發送給你的連結來驗證 %{email}。我們會等着你。 link_not_received: 收不到連結嗎? title: 檢查你的信箱 sign_in: @@ -1052,7 +1050,6 @@ zh-HK: title: 登入 %{domain} sign_up: manual_review: "%{domain} 的註冊均需要我們的管理員手動審核。為了幫助我們處理你的註冊,請填寫一些關於你的資訊,以及為何想在 %{domain} 上開設帳號。" - preamble: 有了這個 Mastodon 伺服器的帳號,無論將帳號託管在何處,你都可以追蹤網絡上任何人。 title: 讓我為你在 %{domain} 上設定好。 status: account_status: 帳戶文章 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 6de2e0fd52..cf215240e9 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -211,6 +211,7 @@ zh-TW: enable_user: 啓用帳號 memorialize_account: 設定成追悼帳號 promote_user: 將用戶升級 + publish_terms_of_service: 發佈服務條款 reject_appeal: 駁回申訴 reject_user: 回絕使用者 remove_avatar_user: 刪除大頭貼 @@ -275,6 +276,7 @@ zh-TW: enable_user_html: "%{name} 將使用者 %{target} 設定為允許登入" memorialize_account_html: "%{name} 將 %{target} 設定為追悼帳號" promote_user_html: "%{name} 對使用者 %{target} 已進行晉級操作" + publish_terms_of_service_html: "%{name} 已發佈服務條款更新" reject_appeal_html: "%{name} 已回絕來自 %{target} 的審核決定申訴" reject_user_html: "%{name} 已回絕自 %{target} 而來的註冊" remove_avatar_user_html: "%{name} 已移除 %{target} 的大頭貼" @@ -913,6 +915,34 @@ zh-TW: search: 搜尋 title: 主題標籤 updated_msg: 成功更新主題標籤設定 + terms_of_service: + back: 回到服務條款 + changelog: 有何異動 + create: 使用您自己的 + current: 目前 + draft: 草稿 + generate: 使用模板 + generates: + action: 產生 + chance_to_review_html: "所產生之服務條款將不會自動發佈。 您將能檢視所產生之結果。請填寫必要細節以繼續。" + explanation_html: 提供之服務條款模板僅供參考資訊使用,不應將其作為任何法律建議。請依照您的具體情形與特定法律議題諮詢您的法律顧問。 + title: 設定服務條款 + history: 歷史 + live: 目前版本 + no_history: 未有任何服務條款變更紀錄。 + no_terms_of_service_html: 您目前尚未設定任何服務條款。服務條款旨在提供明確性,並保護您與使用者的爭議中免受潛在責任。 + notified_on_html: 於 %{date} 通知之使用者 + notify_users: 通知使用者 + preview: + explanation_html: 此 email 將寄至於 %{date} 前註冊之 %{display_count} 名使用者。以下文字將被包含於 e-mail 中: + send_preview: 將預覽寄至 %{email} + send_to_all: + other: 寄出 %{display_count} 封 email + title: 預覽服務條款通知 + publish: 發佈 + published_on_html: 發佈於 %{date} + save_draft: 儲存草稿 + title: 服務條款 title: 管理介面 trends: allow: 允許 @@ -1116,7 +1146,6 @@ zh-TW: migrate_account: 轉移至另一個帳號 migrate_account_html: 如果您希望引導他人跟隨另一個帳號,請至這裡設定。 or_log_in_with: 或透過其他方式登入 - privacy_policy_agreement_html: 我已閱讀且同意 隱私權政策 progress: confirm: 驗證電子郵件地址 details: 您的個人資料 @@ -1141,7 +1170,7 @@ zh-TW: set_new_password: 設定新密碼 setup: email_below_hint_html: 請檢查您的垃圾郵件資料夾,或是請求另一封驗證信。若不正確,您可以更正您的電子郵件地址。 - email_settings_hint_html: 請點擊我們寄給您連結以驗證 %{email}。我們將於此稍候。 + email_settings_hint_html: 請點擊我們寄至 %{email} 之連結以開始使用 Mastodon。我們將於此稍候。 link_not_received: 無法取得連結嗎? new_confirmation_instructions_sent: 您將於幾分鐘之內收到新的包含驗證連結之電子郵件! title: 請檢查您的收件匣 @@ -1150,7 +1179,7 @@ zh-TW: title: 登入 %{domain} sign_up: manual_review: "%{domain} 上的註冊由我們的管理員進行人工審核。為協助我們處理您的註冊,請寫一些關於您自己的資訊以及您欲於 %{domain} 上註冊帳號之原因。" - preamble: 若於此 Mastodon 伺服器擁有帳號,您將能跟隨聯邦宇宙網路中任何一份子,無論他們的帳號託管於何處。 + preamble: 若於此 Mastodon 伺服器擁有帳號,您將能跟隨聯邦宇宙中任何一份子,無論他們的帳號託管於何處。 title: 讓我們一起設定 %{domain} 吧! status: account_status: 帳號狀態 @@ -1162,6 +1191,7 @@ zh-TW: view_strikes: 檢視針對您帳號過去的警示 too_fast: 送出表單的速度太快跟不上,請稍後再試。 use_security_key: 使用安全金鑰 + user_agreement_html: 我已閱讀並同意 服務條款隱私權政策 author_attribution: example_title: 範例文字 hint_html: 您是否正於 Mastodon 之外撰寫新聞或部落格文章?控制當它們於 Mastodon 上分享時您如何獲得信譽。 @@ -1799,6 +1829,8 @@ zh-TW: too_late: 您太晚申訴這個警示了 tags: does_not_match_previous_name: 與先前的名稱不吻合 + terms_of_service: + title: 服務條款 themes: contrast: Mastodon(高對比) default: Mastodon(深色) @@ -1859,6 +1891,15 @@ zh-TW: further_actions_html: 如果這個不是您,我們建議您立即 %{action} ,並且啟用二階段驗證 (2FA) 以確保帳號安全。 subject: 您的帳號已被新 IP 位址存取 title: 新登入 + terms_of_service_changed: + agreement: 透過繼續使用 %{domain},您將同意這些條款。若您不同意此條款異動,您能隨時終止與 %{domain} 之協議並刪除您的帳號。 + changelog: 簡而言之,此次更新對您將意味著: + description: 您收到此 e-mail 係因我們正在更新 %{domain} 之服務條款。我們鼓勵您審視此處之服務條款更新全文: + description_html: 您收到此 e-mail 係因我們正在更新 %{domain} 之服務條款。我們鼓勵您審視 此處之服務條款更新全文。 + sign_off: "%{domain} 團隊" + subject: 我們的服務條款更新 + subtitle: "%{domain} 之服務條款正在悄悄發生變化" + title: 重要更新 warning: appeal: 遞交申訴 appeal_description: 若您認為這是錯誤,您可以向 %{instance} 的工作人員提出申訴。 diff --git a/config/navigation.rb b/config/navigation.rb index de0673426b..ff327ec07a 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -75,6 +75,7 @@ SimpleNavigation::Configuration.run do |navigation| n.item :admin, safe_join([material_symbol('manufacturing'), t('admin.title')]), nil, if: -> { current_user.can?(:view_dashboard, :manage_settings, :manage_rules, :manage_announcements, :manage_custom_emojis, :manage_webhooks, :manage_federation) && !self_destruct } do |s| s.item :dashboard, safe_join([material_symbol('speed'), t('admin.dashboard.title')]), admin_dashboard_path, if: -> { current_user.can?(:view_dashboard) } s.item :settings, safe_join([material_symbol('manufacturing'), t('admin.settings.title')]), admin_settings_path, if: -> { current_user.can?(:manage_settings) }, highlights_on: %r{/admin/settings} + s.item :terms_of_service, safe_join([material_symbol('description'), t('admin.terms_of_service.title')]), admin_terms_of_service_index_path, highlights_on: %r{/admin/terms_of_service}, if: -> { current_user.can?(:manage_rules) } s.item :rules, safe_join([material_symbol('gavel'), t('admin.rules.title')]), admin_rules_path, highlights_on: %r{/admin/rules}, if: -> { current_user.can?(:manage_rules) } s.item :warning_presets, safe_join([material_symbol('warning'), t('admin.warning_presets.title')]), admin_warning_presets_path, highlights_on: %r{/admin/warning_presets}, if: -> { current_user.can?(:manage_settings) } s.item :roles, safe_join([material_symbol('contact_mail'), t('admin.roles.title')]), admin_roles_path, highlights_on: %r{/admin/roles}, if: -> { current_user.can?(:manage_roles) } diff --git a/config/routes.rb b/config/routes.rb index ad6aba50fc..f7171bb930 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -205,8 +205,9 @@ Rails.application.routes.draw do get '/about', to: 'about#show' get '/about/more', to: redirect('/about') - get '/privacy-policy', to: 'privacy#show', as: :privacy_policy - get '/terms', to: redirect('/privacy-policy') + get '/privacy-policy', to: 'privacy#show', as: :privacy_policy + get '/terms-of-service', to: 'terms_of_service#show', as: :terms_of_service + get '/terms', to: redirect('/terms-of-service') match '/', via: [:post, :put, :patch, :delete], to: 'application#raise_not_found', format: false match '*unmatched_route', via: :all, to: 'application#raise_not_found', format: false diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 0802be319b..f6a0c88048 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -48,6 +48,18 @@ namespace :admin do resource :special_instances, only: [:show, :create] resource :special_domains, only: [:show, :create] + namespace :terms_of_service do + resource :generate, only: [:show, :create] + resource :history, only: [:show] + resource :draft, only: [:show, :update] + end + + resources :terms_of_service, only: [:index] do + resource :preview, only: [:show], module: :terms_of_service + resource :test, only: [:create], module: :terms_of_service + resource :distribution, only: [:create], module: :terms_of_service + end + resources :announcements, except: [:show] do member do post :publish diff --git a/config/routes/api.rb b/config/routes/api.rb index 1985268f36..d8193ab96d 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -128,6 +128,7 @@ namespace :api, format: false do resources :rules, only: [:index] resources :domain_blocks, only: [:index] resource :privacy_policy, only: [:show] + resource :terms_of_service, only: [:show] resource :extended_description, only: [:show] resource :translation_languages, only: [:show] resource :languages, only: [:show] diff --git a/config/settings.yml b/config/settings.yml index 8e64018736..2d8b75148f 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -69,6 +69,7 @@ defaults: &defaults stranger_mention_from_local_ng: false enable_local_timeline: true emoji_reaction_disallow_domains: [] + allow_referer_origin: false development: <<: *defaults diff --git a/config/templates/terms-of-service.md b/config/templates/terms-of-service.md new file mode 100644 index 0000000000..cb81a22e84 --- /dev/null +++ b/config/templates/terms-of-service.md @@ -0,0 +1,276 @@ +## Introduction + +These terms of service (the "Terms") cover your access and use of Server +Operator's ("Administrator", "we", or "us") instance, located at %{domain} (the +"Instance"). These Terms apply solely to your use of the Instance as operated +by the Administrator. Please note that we have no affiliation with Mastodon +gGmbH (“Mastodon”) and these Terms do not contain any representations or +warranties or other promises from Mastodon about your use of the Instance. If +you would like to contact us for any reason, please direct all questions, +comments, concerns and notices to us by following the instructions provided in +the Notice section below. + +Please read these Terms carefully before using the Instance as they contain +important information about your interactions with the Instance. We may have +other policies that apply to your use of the Instance and that are incorporated +into these Terms. You should also read these policies before using the Instance. + +## Age Requirements and Responsibility of Parents and Legal Guardians + +By accessing the Instance, you signify that you are at least thirteen years old +and that you meet the minimum age required by the laws in your country. If you +are old enough to access the Instance in your country, but are not old enough to +have the legal authority to consent to our Terms, please ask your parent or +legal guardian to read these Terms with you, as they must agree to the Terms on +your behalf. If you are a parent or legal guardian who has accepted these terms +on your child's behalf, these terms apply to you and you are responsible for +your child's activities on the Instance. + +## Prohibited Uses + +You are fully responsible for your activities while using the Instance, +including any content, information or other materials you post or upload to the +Instance, and you bear all risks associated with use of the Instance. By +agreeing to these Terms, you agree to comply with all applicable federal, state, +and local laws and regulations in connection with your use of the Instance. You +also agree not to use the Instance to engage in any prohibited conduct, or to +assist any other person or entity in engaging in any prohibited conduct. + +We reserve the right (but do not have the obligation) in our sole discretion to: +(1) monitor the Instance for violations of these Terms; (2) take appropriate +legal action against anyone who uses or accesses the Instance in a manner that +we believe violates the law or these Terms, including without limitation, +reporting such user to law enforcement authorities; (3) deny access to the +Instance or any features of the Instance to anyone who violates these Terms or +who we believe interferes with the ability of others to enjoy our Instance or +infringes the rights of others; and (4) otherwise manage the Instance in a +manner designed to protect our rights and property and to facilitate the proper +functioning of the Instance. + +You are prohibited from using the Instance for the commission of harmful or +illegal activities. Accordingly, you may not, or assist any other person to (or +attempt to): + +- Violate these Terms or other policies and terms posted on, or otherwise + applicable to, the Instance; +- Upload any material, program, or software that contains any virus, worm, + spyware, Trojan horse or other program or code designed to interrupt, destroy + or limit the functionality of the Instance, launch a denial of service attack, + or in any other way attempt to interfere with the functioning and availability + of the Instance; +- Except as may be the result of standard search engine or Internet browser + usage, use, launch, develop, or distribute any automated system, including + without limitation, any spider, robot, cheat utility, scraper, offline reader, + or any data mining or similar data gathering extraction tools to access the + Instance, or use or launch any unauthorized script or other software; +- Interfere with, disable, vandalize or disrupt the Instance or servers or + networks connected to the Instance; +- Hack into, penetrate, disable, or otherwise circumvent the security measures + of the Instance or servers or networks connected to the Instance; +- or otherwise use the Instance in any way that violates any applicable + national, federal, state, local or international law or regulation. + +## Intellectual Property + +The Instance contains content provided by its users, including you, such as +text, photos, videos, audio, links, and streams (“Content”). When you submit +Content to the Instance, you represent and warrant that you have all of the +rights, power, and authority necessary to grant the rights to the Content +contained within these Terms. Because you alone are responsible for the Content +that you submit to the Instance, you may expose yourself to liability from third +parties if you post or share such Content without all necessary rights. + +You retain all ownership rights you have in the Content that you submit to the +Instance, but you grant us a limited, non-exclusive, irrevocable, transferable, +royalty-free, perpetual license to use, copy, store, display, share, distribute, +communicate and transfer the Content in ways that are consistent with your use +of the Instance. To the fullest extent possible, you agree to waive or promise +not to assert against the Administrator all moral rights you may have in the +Content to the extent those rights are necessary for the Administrator to host +the Content on the Instance. + +## DMCA Copyright Infringement Notice + +We have implemented the procedures described in the Digital Millennium Copyright +Act of 1998 ("DMCA"), 17 U.S.C. § 512 , regarding the reporting of alleged +copyright infringement and the removal of or disabling access to infringing +material. If you have a good faith belief that copyrighted material on the +Instance is being used in a way that infringes a copyright over which you are +authorized to act, you may make a Notice of Infringing Material. If you have a +good faith belief that copyrighted material that was removed or access to which +was disabled was a result of a mistake or misidentification, then you may make a +Notice of Counter-Notification. + +Before serving a Notice of Infringing Material or Counter-Notification, you may +wish to contact a lawyer to better understand your rights and obligations under +the DMCA and other applicable laws. For example, if your Notice or +Counter-Notifications fails to comply with all requirements of sections +512(c)(3) or 512(g)(3), respectively, your Notice or Counter-Notification may +not be effective. + +### Termination of Repeat Infringers + +We will terminate or disable your use of the Instance in appropriate +circumstances if you are deemed by us to be a repeat copyright infringer. + +### Notices and Counter-Notifications must be sent to: + +DMCA Agent: Copyright Manager + +Address: %{dmca_address} + +Email: %{dmca_email} + +## Disclaimer + +Administrator reserves the right in our sole discretion to modify or +discontinue, temporarily or permanently, the Instance (or any part thereof) with +or without notice to you. You agree that Administrator will not be liable to +you or to any third party for any modification or discontinuance of the +Instance, except as set forth in the "Limitation of Liability" section below. + +You understand that we are not responsible for any activities or legal +consequences of your use of the Instance. Users are responsible for using the +Instance in compliance with all applicable laws and regulations of the +jurisdictions in which such users are domiciled, reside, or are located at the +time of such access or use, as well as these Terms. Any violation of these +Terms may result in the suspension or termination by us, in our sole discretion, +of your access to and use of the Instance. + +## Limitation of Liability + +In no event will Administrator's total liability to you for all damages, losses, +or causes of action exceed one hundred dollars ($100). If you are dissatisfied +with the Instance or with these Terms, your sole remedy is to discontinue your +use of the Instance. + +## Links to and From Other Websites + +You may gain access to other websites and Instances via links on the Instance. +These Terms apply to the Instance only and do not apply to Mastodon, other +Instances, or other parties' websites. Similarly, you may have come to the +Instance via a link from another website or Instance. The terms of use of other +websites and Instances do not apply to the Instance. Administrator assumes no +responsibility for any terms of use or material outside of the Instance accessed +via any link. You are free to establish a hypertext link to the Instance so +long as the link does not state or imply any sponsorship of your website, +instance or service by Administrator or the Instance. Unless expressly agreed +to by us in writing, reference to any of our products, services, processes or +other information, by trade name, trademark, logo, or otherwise by you or any +third party does not constitute or imply endorsement, sponsorship or +recommendation thereof by us. You may not, without our prior written +permission, scrape the Instance or incorporate into another website or other +service any of our material, content or intellectual property, unless you are +otherwise permitted by us to do so in accordance with a license or subject to +separate terms. + +## Dispute Resolution by Binding Arbitration + +### Agreement to Arbitrate: + +This Dispute Resolution by Binding Arbitration section is referred to in these +Terms as the “Arbitration Agreement.” You and the Instance agree that any and +all disputes, claims, demands, or causes of action (“Claims”) that have arisen +or may arise between you and us, whether arising out of or relating to these +Terms, the website, or any aspect of the relationship or transactions between +us, will be resolved exclusively through final and binding arbitration before a +neutral arbitrator, rather than in a court by a judge or jury, in accordance +with the terms of this Arbitration Agreement, except that, where available, you +or we may (but are not required to) assert individual Claims in small claims +court if such Claims are within the scope of such court's jurisdiction. Further, +this Arbitration Agreement does not preclude you from bringing issues to the +attention of federal, state/provincial, or local agencies, and such agencies +can, if the law allows, seek relief against us on your behalf. You agree that, +by entering into these Terms, you and we are each waiving the right to a trial +by jury or to participate in a class action and that our respective rights will +be determined by a neutral arbitrator, not a judge or jury. + +### Prohibition of Class and Representative Actions and Non-Individualized + +### Relief + +You and we agree that each of us may bring claims against the other only on an +individual basis and not as a plaintiff or class member in any purported class +or representative action or proceeding. + +### Pre-Arbitration Dispute Resolution + +Before commencing any arbitration (or suit in small claims court, if available), +you agree to provide the Instance with a written notice of Claim, and the +Instance agrees to provide you with a written notice of Claim to the extent +reasonably possible based on the availability of your contact information to the +Instance (“Notice”). The Notice to the Instance shall be sent to +%{arbitration_website} with a paper copy to %{arbitration_address}. Where the +Instance has your contact information, the Instance will send its Notice to you +using the last email address we have on file for you if you have provided us +with an email address (each, a “Notice Address”). The Notice must (i) describe +the nature and basis of the Claim in sufficient detail to evaluate the merits of +the claiming party's Claim and (ii) set forth the specific relief sought, +including the amount of money (if any) that is demanded and the means by which +the demanding party calculated the claimed amount. Both parties agree that they +will attempt to resolve a Claim through informal negotiation within sixty (60) +calendar days from the date the Notice is received. If the Claim is not resolved +within sixty (60) calendar days after the Notice is received, you or we may +commence an arbitration proceeding. Each party agrees that %{jurisdiction} +courts may enter injunctive relief to enforce the pre-filing requirements of +this paragraph, including an injunction to stay an arbitration that has been +commenced in violation of this paragraph. + +### Arbitration Procedures + +The relevant arbitration rules of %{jurisdiction} fully applies to the +Arbitration Agreement. The arbitration will be conducted by a neutral arbitrator +in accordance with %{jurisdiction} rules (the “Rules”), as modified by this +Arbitration Agreement. If there is any inconsistency between any term of the +Rules and any term of this Arbitration Agreement, the applicable terms of this +Arbitration Agreement will control. The arbitrator must also follow the +provisions of these Terms as a court would. Except as set forth above, all +issues are for the arbitrator to decide, including, but not limited to, +threshold issues relating to the scope, enforceability, and arbitrability of +this Arbitration Agreement and issues relating to (a) whether the terms of these +Terms (or any aspect thereof) are enforceable, unconscionable, or illusory and +(b) any defense to arbitration, including waiver, delay, laches, or estoppel. +Regardless of the manner in which the arbitration is conducted, the arbitrator +will issue a reasoned written decision sufficient to explain the essential +findings and conclusions on which the award is based. Payment of all filing, +administration and arbitrator fees (collectively, the “Arbitration Fees”) will +be governed by the Rules unless otherwise provided in this Arbitration +Agreement. + +### Small Claims Court + +Subject to applicable jurisdictional requirements, either party may elect to +pursue a Claim in a local small claims court rather than through arbitration so +long as the matter remains in a small claims court and proceeds only on an +individual basis. + +## Choice of Law + +Any and all claims related to or arising out of your use of, or access to the +Instance shall be governed by internal substantive laws of New York in all +respects, without regard for the jurisdiction or forum in which you are +domiciled, reside, or located at the time of such access or use. + +## Waiver and Severability + +If you do not comply with a portion of these Terms and we do not take action +right away, this does not mean we are giving up any of our rights under these +Terms. If any part of these Terms is determined to be invalid or unenforceable +by a court of competent jurisdiction or arbitrator, the remainder of the Terms +shall be enforced to the maximum extent permitted by law. + +## Notices + +All notices to Administrator under these Terms, unless otherwise specified shall +be sent to %{admin_email}. Service of any notice will be deemed given on the +date of receipt delivered by email. + +## Changes to these Terms + +We may change or modify these Terms by posting a revised version on the +Instance, or by otherwise providing notice to you, and will state at the top of +the revised Terms the date they were last revised. Changes will not apply +retroactively and will become effective no earlier than fourteen (14) calendar +days after they are posted, except for changes addressing changes made for legal +reasons, which will be effective immediately. Your continued use of the +Instance after any change means you agree to the new Terms. diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml index 6f8b6cc60d..f594b8799a 100644 --- a/db/migrate/.rubocop.yml +++ b/db/migrate/.rubocop.yml @@ -1,9 +1,16 @@ inherit_from: ../../.rubocop.yml -Naming/VariableNumber: - CheckSymbols: false +# Below are all enabled as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity +# TODO: Delete this file and move above config to base naming config -# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity Rails/CreateTableWithTimestamps: Include: - '*.rb' + +Rails/ThreeStateBooleanColumn: + Include: + - '*.rb' + +Rails/ReversibleMigration: + Include: + - '*.rb' diff --git a/db/migrate/20160325130944_add_admin_to_users.rb b/db/migrate/20160325130944_add_admin_to_users.rb index 6b701ebcc8..a78d08a156 100644 --- a/db/migrate/20160325130944_add_admin_to_users.rb +++ b/db/migrate/20160325130944_add_admin_to_users.rb @@ -2,6 +2,6 @@ class AddAdminToUsers < ActiveRecord::Migration[4.2] def change - add_column :users, :admin, :boolean, default: false + add_column :users, :admin, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20161123093447_add_sensitive_to_statuses.rb b/db/migrate/20161123093447_add_sensitive_to_statuses.rb index 7487b2ee33..93388126e9 100644 --- a/db/migrate/20161123093447_add_sensitive_to_statuses.rb +++ b/db/migrate/20161123093447_add_sensitive_to_statuses.rb @@ -2,6 +2,6 @@ class AddSensitiveToStatuses < ActiveRecord::Migration[5.0] def change - add_column :statuses, :sensitive, :boolean, default: false + add_column :statuses, :sensitive, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb index 5282602ce9..d05be7673e 100644 --- a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb +++ b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb @@ -2,6 +2,6 @@ class AddRejectMediaToDomainBlocks < ActiveRecord::Migration[5.0] def change - add_column :domain_blocks, :reject_media, :boolean + add_column :domain_blocks, :reject_media, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb index 0f60758d3b..5e29e2f003 100644 --- a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb +++ b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb @@ -7,7 +7,7 @@ class AddDeviseTwoFactorToUsers < ActiveRecord::Migration[5.0] t.column :encrypted_otp_secret_iv, :string t.column :encrypted_otp_secret_salt, :string t.column :consumed_timestep, :integer - t.column :otp_required_for_login, :boolean + t.column :otp_required_for_login, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end end diff --git a/db/migrate/20170205175257_remove_devices.rb b/db/migrate/20170205175257_remove_devices.rb index 643e196bf3..d4af5ab613 100644 --- a/db/migrate/20170205175257_remove_devices.rb +++ b/db/migrate/20170205175257_remove_devices.rb @@ -1,7 +1,11 @@ # frozen_string_literal: true class RemoveDevices < ActiveRecord::Migration[5.0] - def change + def up drop_table :devices if table_exists?(:devices) end + + def down + raise ActiveRecord::IrreversibleMigration + end end diff --git a/db/migrate/20170209184350_add_reply_to_statuses.rb b/db/migrate/20170209184350_add_reply_to_statuses.rb index ffef97609d..030ceb4db0 100644 --- a/db/migrate/20170209184350_add_reply_to_statuses.rb +++ b/db/migrate/20170209184350_add_reply_to_statuses.rb @@ -2,7 +2,7 @@ class AddReplyToStatuses < ActiveRecord::Migration[5.0] def up - add_column :statuses, :reply, :boolean, nil: false, default: false + add_column :statuses, :reply, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn Status.unscoped.update_all('reply = (in_reply_to_id IS NOT NULL)') end diff --git a/db/migrate/20170304202101_add_type_to_media_attachments.rb b/db/migrate/20170304202101_add_type_to_media_attachments.rb index e49d87fc74..8f863fba40 100644 --- a/db/migrate/20170304202101_add_type_to_media_attachments.rb +++ b/db/migrate/20170304202101_add_type_to_media_attachments.rb @@ -3,7 +3,7 @@ class AddTypeToMediaAttachments < ActiveRecord::Migration[5.0] class MigrationMediaAttachment < ApplicationRecord self.table_name = :media_attachments - enum type: [:image, :gifv, :video] + enum :type, [:image, :gifv, :video] IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze end diff --git a/db/migrate/20170330163835_create_imports.rb b/db/migrate/20170330163835_create_imports.rb index 6bd9e28b5b..7548a376d4 100644 --- a/db/migrate/20170330163835_create_imports.rb +++ b/db/migrate/20170330163835_create_imports.rb @@ -5,7 +5,7 @@ class CreateImports < ActiveRecord::Migration[5.0] create_table :imports do |t| t.integer :account_id, null: false t.integer :type, null: false - t.boolean :approved + t.boolean :approved # rubocop:disable Rails/ThreeStateBooleanColumn t.timestamps end diff --git a/db/migrate/20170711225116_fix_null_booleans.rb b/db/migrate/20170711225116_fix_null_booleans.rb index 12cc9b8b86..7b0ee32293 100644 --- a/db/migrate/20170711225116_fix_null_booleans.rb +++ b/db/migrate/20170711225116_fix_null_booleans.rb @@ -3,10 +3,10 @@ class FixNullBooleans < ActiveRecord::Migration[5.1] def change safety_assured do - change_column_default :domain_blocks, :reject_media, false + change_column_default :domain_blocks, :reject_media, false # rubocop:disable Rails/ReversibleMigration change_column_null :domain_blocks, :reject_media, false, false - change_column_default :imports, :approved, false + change_column_default :imports, :approved, false # rubocop:disable Rails/ReversibleMigration change_column_null :imports, :approved, false, false change_column_null :statuses, :sensitive, false, false @@ -14,7 +14,7 @@ class FixNullBooleans < ActiveRecord::Migration[5.1] change_column_null :users, :admin, false, false - change_column_default :users, :otp_required_for_login, false + change_column_default :users, :otp_required_for_login, false # rubocop:disable Rails/ReversibleMigration change_column_null :users, :otp_required_for_login, false, false end end diff --git a/db/migrate/20170905165803_add_local_to_statuses.rb b/db/migrate/20170905165803_add_local_to_statuses.rb index cb6307c265..90f01cb373 100644 --- a/db/migrate/20170905165803_add_local_to_statuses.rb +++ b/db/migrate/20170905165803_add_local_to_statuses.rb @@ -2,6 +2,6 @@ class AddLocalToStatuses < ActiveRecord::Migration[5.1] def change - add_column :statuses, :local, :boolean, null: true, default: nil + add_column :statuses, :local, :boolean, null: true, default: nil # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb index 4c3a25e838..34b7951551 100644 --- a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb +++ b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb @@ -5,7 +5,7 @@ class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migrat def change safety_assured do - add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 + add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber end remove_index :statuses, [:account_id, :id], name: :index_statuses_on_account_id_id end diff --git a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb index 242ae74107..317c48bb69 100644 --- a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb +++ b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb @@ -5,7 +5,7 @@ class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecor def change safety_assured do - add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106') + add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106') # rubocop:disable Naming/VariableNumber end # These index may not exists (see migration 20180514130000) diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb index d879fd88a2..643b3d46c4 100644 --- a/db/migrate/20181024224956_migrate_account_conversations.rb +++ b/db/migrate/20181024224956_migrate_account_conversations.rb @@ -21,7 +21,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] belongs_to :account, class_name: 'MigrationAccount' has_many :mentions, dependent: :destroy, inverse_of: :status, class_name: 'MigrationMention', foreign_key: :status_id scope :local, -> { where(local: true).or(where(uri: nil)) } - enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility + enum :visibility, { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, suffix: :visibility has_many :active_mentions, -> { active }, class_name: 'MigrationMention', inverse_of: :status, foreign_key: :status_id end diff --git a/db/migrate/20181203021853_add_discoverable_to_accounts.rb b/db/migrate/20181203021853_add_discoverable_to_accounts.rb index 16576aa043..333a2ce210 100644 --- a/db/migrate/20181203021853_add_discoverable_to_accounts.rb +++ b/db/migrate/20181203021853_add_discoverable_to_accounts.rb @@ -2,6 +2,6 @@ class AddDiscoverableToAccounts < ActiveRecord::Migration[5.2] def change - add_column :accounts, :discoverable, :boolean + add_column :accounts, :discoverable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb index 656cd0af58..8dfa4cca4a 100644 --- a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb +++ b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb @@ -2,6 +2,6 @@ class AddByModeratorToTombstone < ActiveRecord::Migration[5.2] def change - add_column :tombstones, :by_moderator, :boolean + add_column :tombstones, :by_moderator, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb index cbb5fc67b4..37812f2b54 100644 --- a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb +++ b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb @@ -7,7 +7,7 @@ class AddSilencedAtSuspendedAtToAccounts < ActiveRecord::Migration[5.2] class DomainBlock < ApplicationRecord # Dummy class, to make migration possible across version changes - enum severity: [:silence, :suspend, :noop] + enum :severity, [:silence, :suspend, :noop] has_many :accounts, foreign_key: :domain, primary_key: :domain end diff --git a/db/migrate/20190805123746_add_capabilities_to_tags.rb b/db/migrate/20190805123746_add_capabilities_to_tags.rb index 949938bb1e..628617cb7e 100644 --- a/db/migrate/20190805123746_add_capabilities_to_tags.rb +++ b/db/migrate/20190805123746_add_capabilities_to_tags.rb @@ -4,9 +4,11 @@ class AddCapabilitiesToTags < ActiveRecord::Migration[5.2] def change safety_assured do change_table(:tags, bulk: true) do |t| + # rubocop:disable Rails/ThreeStateBooleanColumn t.column :usable, :boolean t.column :trendable, :boolean t.column :listable, :boolean + # rubocop:enable Rails/ThreeStateBooleanColumn t.column :reviewed_at, :datetime t.column :requested_review_at, :datetime end diff --git a/db/migrate/20190820003045_update_statuses_index.rb b/db/migrate/20190820003045_update_statuses_index.rb index df9ce0638f..4bd9c156db 100644 --- a/db/migrate/20190820003045_update_statuses_index.rb +++ b/db/migrate/20190820003045_update_statuses_index.rb @@ -4,12 +4,12 @@ class UpdateStatusesIndex < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 } - remove_index :statuses, name: :index_statuses_20180106 + safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 } # rubocop:disable Naming/VariableNumber + remove_index :statuses, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber end def down - safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 } - remove_index :statuses, name: :index_statuses_20190820 + safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 } # rubocop:disable Naming/VariableNumber + remove_index :statuses, name: :index_statuses_20190820 # rubocop:disable Naming/VariableNumber end end diff --git a/db/migrate/20190823221802_add_local_index_to_statuses.rb b/db/migrate/20190823221802_add_local_index_to_statuses.rb index b5baa30287..5cab5547e5 100644 --- a/db/migrate/20190823221802_add_local_index_to_statuses.rb +++ b/db/migrate/20190823221802_add_local_index_to_statuses.rb @@ -4,10 +4,10 @@ class AddLocalIndexToStatuses < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' + add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber end def down - remove_index :statuses, name: :index_statuses_local_20190824 + remove_index :statuses, name: :index_statuses_local_20190824 # rubocop:disable Naming/VariableNumber end end diff --git a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb index d6740f19b8..0cf1e9fee7 100644 --- a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb +++ b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb @@ -2,6 +2,6 @@ class AddHideCollectionsToAccounts < ActiveRecord::Migration[5.2] def change - add_column :accounts, :hide_collections, :boolean + add_column :accounts, :hide_collections, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20200119112504_add_public_index_to_statuses.rb b/db/migrate/20200119112504_add_public_index_to_statuses.rb index 6451b9254e..21a361d5b6 100644 --- a/db/migrate/20200119112504_add_public_index_to_statuses.rb +++ b/db/migrate/20200119112504_add_public_index_to_statuses.rb @@ -4,10 +4,10 @@ class AddPublicIndexToStatuses < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' + add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber end def down - remove_index :statuses, name: :index_statuses_public_20200119 + remove_index :statuses, name: :index_statuses_public_20200119 # rubocop:disable Naming/VariableNumber end end diff --git a/db/migrate/20200309150742_add_forwarded_to_reports.rb b/db/migrate/20200309150742_add_forwarded_to_reports.rb index 60db0167e3..ba835ded3a 100644 --- a/db/migrate/20200309150742_add_forwarded_to_reports.rb +++ b/db/migrate/20200309150742_add_forwarded_to_reports.rb @@ -2,6 +2,6 @@ class AddForwardedToReports < ActiveRecord::Migration[5.2] def change - add_column :reports, :forwarded, :boolean + add_column :reports, :forwarded, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20210609202149_create_login_activities.rb b/db/migrate/20210609202149_create_login_activities.rb index f2da335997..4add47a725 100644 --- a/db/migrate/20210609202149_create_login_activities.rb +++ b/db/migrate/20210609202149_create_login_activities.rb @@ -6,7 +6,7 @@ class CreateLoginActivities < ActiveRecord::Migration[6.1] t.belongs_to :user, null: false, foreign_key: { on_delete: :cascade } t.string :authentication_method t.string :provider - t.boolean :success + t.boolean :success # rubocop:disable Rails/ThreeStateBooleanColumn t.string :failure_reason t.inet :ip t.string :user_agent diff --git a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb index 8c5d9c368a..eaeba54473 100644 --- a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb +++ b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb @@ -2,6 +2,6 @@ class AddSkipSignInTokenToUsers < ActiveRecord::Migration[6.1] def change - add_column :users, :skip_sign_in_token, :boolean + add_column :users, :skip_sign_in_token, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20211031031021_create_preview_card_providers.rb b/db/migrate/20211031031021_create_preview_card_providers.rb index 83255614b6..577cfc53b8 100644 --- a/db/migrate/20211031031021_create_preview_card_providers.rb +++ b/db/migrate/20211031031021_create_preview_card_providers.rb @@ -5,7 +5,7 @@ class CreatePreviewCardProviders < ActiveRecord::Migration[6.1] create_table :preview_card_providers do |t| t.string :domain, null: false, default: '', index: { unique: true } t.attachment :icon - t.boolean :trendable + t.boolean :trendable # rubocop:disable Rails/ThreeStateBooleanColumn t.datetime :reviewed_at t.datetime :requested_review_at t.timestamps diff --git a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb index 21fc4ecf46..561a4d91c0 100644 --- a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb +++ b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb @@ -2,6 +2,6 @@ class AddTrendableToPreviewCards < ActiveRecord::Migration[6.1] def change - add_column :preview_cards, :trendable, :boolean + add_column :preview_cards, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20220202200743_add_trendable_to_accounts.rb b/db/migrate/20220202200743_add_trendable_to_accounts.rb index 539717b751..ad97e1fd1e 100644 --- a/db/migrate/20220202200743_add_trendable_to_accounts.rb +++ b/db/migrate/20220202200743_add_trendable_to_accounts.rb @@ -4,7 +4,7 @@ class AddTrendableToAccounts < ActiveRecord::Migration[6.1] def change safety_assured do change_table(:accounts, bulk: true) do |t| - t.column :trendable, :boolean + t.column :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn t.column :reviewed_at, :datetime t.column :requested_review_at, :datetime end diff --git a/db/migrate/20220202200926_add_trendable_to_statuses.rb b/db/migrate/20220202200926_add_trendable_to_statuses.rb index 5d101132b8..3eaf2d0bb0 100644 --- a/db/migrate/20220202200926_add_trendable_to_statuses.rb +++ b/db/migrate/20220202200926_add_trendable_to_statuses.rb @@ -2,6 +2,6 @@ class AddTrendableToStatuses < ActiveRecord::Migration[6.1] def change - add_column :statuses, :trendable, :boolean + add_column :statuses, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end diff --git a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb index 55567d62e1..c3dfc786a5 100644 --- a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb +++ b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb @@ -7,7 +7,7 @@ class AddOrderedMediaAttachmentIdsToStatusEdits < ActiveRecord::Migration[6.1] t.column :ordered_media_attachment_ids, :bigint, array: true t.column :media_descriptions, :text, array: true t.column :poll_options, :string, array: true - t.column :sensitive, :boolean + t.column :sensitive, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn end end end diff --git a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb index e794824afc..b3b5ed3894 100644 --- a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb +++ b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb @@ -2,6 +2,6 @@ class ChangeCanonicalEmailBlocksNullable < ActiveRecord::Migration[6.1] def change - safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil } + safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil } # rubocop:disable Rails/ReversibleMigration end end diff --git a/db/migrate/20240312105620_create_severed_relationships.rb b/db/migrate/20240312105620_create_severed_relationships.rb index 1ed911cd55..3269298e80 100644 --- a/db/migrate/20240312105620_create_severed_relationships.rb +++ b/db/migrate/20240312105620_create_severed_relationships.rb @@ -14,8 +14,10 @@ class CreateSeveredRelationships < ActiveRecord::Migration[7.0] t.integer :direction, null: false # Those attributes are carried over from the `follows` table + # rubocop:disable Rails/ThreeStateBooleanColumn t.boolean :show_reblogs t.boolean :notify + # rubocop:enable Rails/ThreeStateBooleanColumn t.string :languages, array: true t.timestamps diff --git a/db/migrate/20241123224956_create_terms_of_services.rb b/db/migrate/20241123224956_create_terms_of_services.rb new file mode 100644 index 0000000000..dda2b0647c --- /dev/null +++ b/db/migrate/20241123224956_create_terms_of_services.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class CreateTermsOfServices < ActiveRecord::Migration[7.2] + def change + create_table :terms_of_services do |t| + t.text :text, null: false, default: '' + t.text :changelog, null: false, default: '' + t.datetime :published_at + t.datetime :notification_sent_at + + t.timestamps + end + end +end diff --git a/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb new file mode 100644 index 0000000000..69b5b4a025 --- /dev/null +++ b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AddNotNullToAccountPinAccountColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM account_pins + WHERE account_id IS NULL + OR target_account_id IS NULL + SQL + + safety_assured do + change_column_null :account_pins, :account_id, false + change_column_null :account_pins, :target_account_id, false + end + end + + def down + safety_assured do + change_column_null :account_pins, :account_id, true + change_column_null :account_pins, :target_account_id, true + end + end +end diff --git a/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb new file mode 100644 index 0000000000..cd57f3b2fa --- /dev/null +++ b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToAccountAliasColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM account_aliases + WHERE account_id IS NULL + SQL + + safety_assured { change_column_null :account_aliases, :account_id, false } + end + + def down + safety_assured { change_column_null :account_aliases, :account_id, true } + end +end diff --git a/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb new file mode 100644 index 0000000000..80c57b1e39 --- /dev/null +++ b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToAccountDeletionRequestColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM account_deletion_requests + WHERE account_id IS NULL + SQL + + safety_assured { change_column_null :account_deletion_requests, :account_id, false } + end + + def down + safety_assured { change_column_null :account_deletion_requests, :account_id, true } + end +end diff --git a/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb new file mode 100644 index 0000000000..38ab6b9ad4 --- /dev/null +++ b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AddNotNullToAccountDomainBlockColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM account_domain_blocks + WHERE account_id IS NULL + OR domain IS NULL + SQL + + safety_assured do + change_column_null :account_domain_blocks, :account_id, false + change_column_null :account_domain_blocks, :domain, false + end + end + + def down + safety_assured do + change_column_null :account_domain_blocks, :account_id, true + change_column_null :account_domain_blocks, :domain, true + end + end +end diff --git a/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb new file mode 100644 index 0000000000..092ad00e85 --- /dev/null +++ b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToAdminActionLogColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM admin_action_logs + WHERE account_id IS NULL + SQL + + safety_assured { change_column_null :admin_action_logs, :account_id, false } + end + + def down + safety_assured { change_column_null :admin_action_logs, :account_id, true } + end +end diff --git a/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb new file mode 100644 index 0000000000..052f0300a9 --- /dev/null +++ b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AddNotNullToAnnouncementMuteColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM announcement_mutes + WHERE account_id IS NULL + OR announcement_id IS NULL + SQL + + safety_assured do + change_column_null :announcement_mutes, :account_id, false + change_column_null :announcement_mutes, :announcement_id, false + end + end + + def down + safety_assured do + change_column_null :announcement_mutes, :account_id, true + change_column_null :announcement_mutes, :announcement_id, true + end + end +end diff --git a/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb new file mode 100644 index 0000000000..a877eccb3a --- /dev/null +++ b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AddNotNullToAnnouncementReactionColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM announcement_reactions + WHERE account_id IS NULL + OR announcement_id IS NULL + SQL + + safety_assured do + change_column_null :announcement_reactions, :account_id, false + change_column_null :announcement_reactions, :announcement_id, false + end + end + + def down + safety_assured do + change_column_null :announcement_reactions, :account_id, true + change_column_null :announcement_reactions, :announcement_id, true + end + end +end diff --git a/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb new file mode 100644 index 0000000000..5eeb5f942a --- /dev/null +++ b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToCustomFilterColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM custom_filters + WHERE account_id IS NULL + SQL + + safety_assured { change_column_null :custom_filters, :account_id, false } + end + + def down + safety_assured { change_column_null :custom_filters, :account_id, true } + end +end diff --git a/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb new file mode 100644 index 0000000000..141b95b63a --- /dev/null +++ b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToScheduledStatusColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM scheduled_statuses + WHERE account_id IS NULL + SQL + + safety_assured { change_column_null :scheduled_statuses, :account_id, false } + end + + def down + safety_assured { change_column_null :scheduled_statuses, :account_id, true } + end +end diff --git a/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb new file mode 100644 index 0000000000..7066f69691 --- /dev/null +++ b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddNotNullToUserInviteRequestColumns < ActiveRecord::Migration[7.2] + def up + connection.execute(<<~SQL.squish) + DELETE FROM user_invite_requests + WHERE user_id IS NULL + SQL + + safety_assured { change_column_null :user_invite_requests, :user_id, false } + end + + def down + safety_assured { change_column_null :user_invite_requests, :user_id, true } + end +end diff --git a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb index 7788431cd5..ff4012ffa1 100644 --- a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb +++ b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb @@ -7,7 +7,7 @@ class RemoveSuspendedSilencedAccountFields < ActiveRecord::Migration[5.2] class DomainBlock < ApplicationRecord # Dummy class, to make migration possible across version changes - enum severity: [:silence, :suspend, :noop] + enum :severity, [:silence, :suspend, :noop] has_many :accounts, foreign_key: :domain, primary_key: :domain end diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb index b00f9df533..0bf9dbff03 100644 --- a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb +++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb @@ -6,7 +6,7 @@ class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2] class MigrationAccount < ApplicationRecord self.table_name = :accounts scope :suspended, -> { where.not(suspended_at: nil) } - enum suspension_origin: { local: 0, remote: 1 }, _prefix: true + enum :suspension_origin, { local: 0, remote: 1 }, prefix: true end def up diff --git a/db/schema.rb b/db/schema.rb index 70f2795235..7b9065f20c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do +ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "account_aliases", force: :cascade do |t| - t.bigint "account_id" + t.bigint "account_id", null: false t.string "acct", default: "", null: false t.string "uri", default: "", null: false t.datetime "created_at", precision: nil, null: false @@ -36,17 +36,17 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "account_deletion_requests", force: :cascade do |t| - t.bigint "account_id" + t.bigint "account_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.index ["account_id"], name: "index_account_deletion_requests_on_account_id" end create_table "account_domain_blocks", force: :cascade do |t| - t.string "domain" + t.string "domain", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false - t.bigint "account_id" + t.bigint "account_id", null: false t.index ["account_id", "domain"], name: "index_account_domain_blocks_on_account_id_and_domain", unique: true end @@ -82,8 +82,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "account_pins", force: :cascade do |t| - t.bigint "account_id" - t.bigint "target_account_id" + t.bigint "account_id", null: false + t.bigint "target_account_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.index ["account_id", "target_account_id"], name: "index_account_pins_on_account_id_and_target_account_id", unique: true @@ -220,7 +220,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "admin_action_logs", force: :cascade do |t| - t.bigint "account_id" + t.bigint "account_id", null: false t.string "action", default: "", null: false t.string "target_type" t.bigint "target_id" @@ -234,8 +234,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "announcement_mutes", force: :cascade do |t| - t.bigint "account_id" - t.bigint "announcement_id" + t.bigint "account_id", null: false + t.bigint "announcement_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.index ["account_id", "announcement_id"], name: "index_announcement_mutes_on_account_id_and_announcement_id", unique: true @@ -243,8 +243,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "announcement_reactions", force: :cascade do |t| - t.bigint "account_id" - t.bigint "announcement_id" + t.bigint "account_id", null: false + t.bigint "announcement_id", null: false t.string "name", default: "", null: false t.bigint "custom_emoji_id" t.datetime "created_at", precision: nil, null: false @@ -542,7 +542,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "custom_filters", force: :cascade do |t| - t.bigint "account_id" + t.bigint "account_id", null: false t.datetime "expires_at", precision: nil t.text "phrase", default: "", null: false t.string "context", default: [], null: false, array: true @@ -1236,7 +1236,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "scheduled_statuses", force: :cascade do |t| - t.bigint "account_id" + t.bigint "account_id", null: false t.datetime "scheduled_at", precision: nil t.jsonb "params" t.index ["account_id"], name: "index_scheduled_statuses_on_account_id" @@ -1474,6 +1474,15 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do t.index "lower((name)::text) text_pattern_ops", name: "index_tags_on_name_lower_btree", unique: true end + create_table "terms_of_services", force: :cascade do |t| + t.text "text", default: "", null: false + t.text "changelog", default: "", null: false + t.datetime "published_at" + t.datetime "notification_sent_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "tombstones", force: :cascade do |t| t.bigint "account_id" t.string "uri", null: false @@ -1492,7 +1501,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_232829) do end create_table "user_invite_requests", force: :cascade do |t| - t.bigint "user_id" + t.bigint "user_id", null: false t.text "text" t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false diff --git a/lib/mastodon/cli/progress_helper.rb b/lib/mastodon/cli/progress_helper.rb index da9527ffd7..a0cfec69cf 100644 --- a/lib/mastodon/cli/progress_helper.rb +++ b/lib/mastodon/cli/progress_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -dev_null = Logger.new('/dev/null') +dev_null = Logger.new(File::NULL) Rails.logger = dev_null ActiveRecord::Base.logger = dev_null diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb index b4ff4a12a0..fe58d1bce1 100644 --- a/lib/paperclip/blurhash_transcoder.rb +++ b/lib/paperclip/blurhash_transcoder.rb @@ -23,7 +23,7 @@ module Paperclip image = Vips::Image.thumbnail(@file.path, 100) [image.width, image.height, image.colourspace(:srgb).extract_band(0, n: 3).to_a.flatten] else - pixels = convert(':source -depth 8 RGB:-', source: File.expand_path(@file.path)).unpack('C*') + pixels = convert(':source -flatten -depth 8 -compress none RGB:-', source: File.expand_path(@file.path)).unpack('C*') geometry = options.fetch(:file_geometry_parser).from_file(@file) [geometry.width, geometry.height, pixels] end diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb deleted file mode 100644 index 32bdb8a863..0000000000 --- a/lib/paperclip/gif_transcoder.rb +++ /dev/null @@ -1,126 +0,0 @@ -# frozen_string_literal: true - -class GifReader - attr_reader :animated - - EXTENSION_LABELS = [0xf9, 0x01, 0xff].freeze - GIF_HEADERS = %w(GIF87a GIF89a).freeze - - class GifReaderException < StandardError; end - - class UnknownImageType < GifReaderException; end - - class CannotParseImage < GifReaderException; end - - def self.animated?(path) - new(path).animated - rescue GifReaderException - false - end - - def initialize(path, max_frames = 2) - @path = path - @nb_frames = 0 - - File.open(path, 'rb') do |s| - raise UnknownImageType unless GIF_HEADERS.include?(s.read(6)) - - # Skip to "packed byte" - s.seek(4, IO::SEEK_CUR) - - # "Packed byte" gives us the size of the GIF color table - packed_byte, = s.read(1).unpack('C') - - # Skip background color and aspect ratio - s.seek(2, IO::SEEK_CUR) - - if packed_byte & 0x80 != 0 - # GIF uses a global color table, skip it - s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR) - end - - # Now read data - while @nb_frames < max_frames - separator = s.read(1) - - case separator - when ',' # Image block - @nb_frames += 1 - - # Skip to "packed byte" - s.seek(8, IO::SEEK_CUR) - packed_byte, = s.read(1).unpack('C') - - if packed_byte & 0x80 != 0 - # Image uses a local color table, skip it - s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR) - end - - # Skip lzw min code size - raise InvalidValue unless s.read(1).unpack1('C') >= 2 - - # Skip image data sub-blocks - skip_sub_blocks!(s) - when '!' # Extension block - skip_extension_block!(s) - when ';' # Trailer - break - else - raise CannotParseImage - end - end - end - - @animated = @nb_frames > 1 - end - - private - - def skip_extension_block!(file) - if EXTENSION_LABELS.include?(file.read(1).unpack1('C')) - block_size, = file.read(1).unpack('C') - file.seek(block_size, IO::SEEK_CUR) - end - - # Read until extension block end marker - skip_sub_blocks!(file) - end - - # Skip sub-blocks up until block end marker - def skip_sub_blocks!(file) - loop do - size, = file.read(1).unpack('C') - - break if size.zero? - - file.seek(size, IO::SEEK_CUR) - end - end -end - -module Paperclip - # This transcoder is only to be used for the MediaAttachment model - # to convert animated GIFs to videos - - class GifTranscoder < Paperclip::Processor - def make - return File.open(@file.path) unless needs_convert? - - final_file = Paperclip::Transcoder.make(file, options, attachment) - - if options[:style] == :original - attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4" - attachment.instance.file_content_type = 'video/mp4' - attachment.instance.type = MediaAttachment.types[:gifv] - end - - final_file - end - - private - - def needs_convert? - GifReader.animated?(file.path) - end - end -end diff --git a/lib/paperclip/gifv_transcoder.rb b/lib/paperclip/gifv_transcoder.rb new file mode 100644 index 0000000000..4bb27e3b75 --- /dev/null +++ b/lib/paperclip/gifv_transcoder.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Paperclip + # This transcoder is only to be used for the MediaAttachment model + # to convert animated GIFs and PNGs to videos + + class GifvTranscoder < Paperclip::Processor + def make + final_file = Paperclip::Transcoder.make(file, options, attachment) + + if options[:style] == :original + attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4" + attachment.instance.file_content_type = 'video/mp4' + attachment.instance.type = MediaAttachment.types[:gifv] + end + + final_file + end + end +end diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb index bdac85da50..7815d9ed52 100644 --- a/lib/sanitize_ext/sanitize_config.rb +++ b/lib/sanitize_ext/sanitize_config.rb @@ -137,7 +137,7 @@ class Sanitize add_attributes: { 'a' => { - 'rel' => 'nofollow noopener noreferrer', + 'rel' => 'nofollow noopener', 'target' => '_blank', }, }, diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index 948a18ab98..b72c6387f7 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -592,7 +592,7 @@ namespace :mastodon do end def disable_log_stdout! - dev_null = Logger.new('/dev/null') + dev_null = Logger.new(File::NULL) Rails.logger = dev_null ActiveRecord::Base.logger = dev_null diff --git a/package.json b/package.json index 6751e62960..40fefd551c 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@babel/preset-react": "^7.22.3", "@babel/preset-typescript": "^7.21.5", "@babel/runtime": "^7.23.7", + "@csstools/stylelint-formatter-github": "^1.0.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -53,7 +54,7 @@ "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", "@hello-pangea/dnd": "^17.0.0", - "@rails/ujs": "7.1.500", + "@rails/ujs": "7.1.501", "@reduxjs/toolkit": "^2.0.1", "@svgr/webpack": "^5.5.0", "arrow-key-navigation": "^1.2.0", @@ -195,9 +196,9 @@ "lint-staged": "^15.0.0", "prettier": "^3.3.3", "react-test-renderer": "^18.2.0", - "stylelint": "^16.0.2", + "stylelint": "^16.11.0", "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-standard-scss": "^13.0.0", + "stylelint-config-standard-scss": "^14.0.0", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3" }, diff --git a/public/emoji/sheet_13.png b/public/emoji/sheet_13.png index 1ba12b6191..ade4077719 100644 Binary files a/public/emoji/sheet_13.png and b/public/emoji/sheet_13.png differ diff --git a/spec/controllers/admin/export_domain_allows_controller_spec.rb b/spec/controllers/admin/export_domain_allows_controller_spec.rb index 0a2e342620..0a56394193 100644 --- a/spec/controllers/admin/export_domain_allows_controller_spec.rb +++ b/spec/controllers/admin/export_domain_allows_controller_spec.rb @@ -32,15 +32,16 @@ RSpec.describe Admin::ExportDomainAllowsController do it 'allows imported domains' do post :import, params: { admin_import: { data: fixture_file_upload('domain_allows.csv') } } - expect(response).to redirect_to(admin_instances_path) + expect(response) + .to redirect_to(admin_instances_path) - # Header should not be imported - expect(DomainAllow.where(domain: '#domain').present?).to be(false) - - # Domains should now be added - get :export, params: { format: :csv } - expect(response).to have_http_status(200) - expect(response.body).to eq(domain_allows_csv_file) + # Header row should not be imported, but domains should + expect(DomainAllow) + .to_not exist(domain: '#domain') + expect(DomainAllow) + .to exist(domain: 'good.domain') + expect(DomainAllow) + .to exist(domain: 'better.domain') end it 'displays error on no file selected' do diff --git a/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb b/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb new file mode 100644 index 0000000000..b6d436a26f --- /dev/null +++ b/spec/controllers/admin/terms_of_service/distributions_controller_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::DistributionsController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) } + + before do + sign_in user, scope: :user + end + + describe 'POST #create' do + it 'returns http success' do + post :create, params: { terms_of_service_id: terms_of_service.id } + + expect(response).to redirect_to(admin_terms_of_service_index_path) + end + end +end diff --git a/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb new file mode 100644 index 0000000000..6c19b973d0 --- /dev/null +++ b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::DraftsController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in user, scope: :user + end + + describe 'GET #show' do + it 'returns http success' do + get :show + + expect(response).to have_http_status(:success) + end + end + + describe 'PUT #update' do + subject { put :update, params: params } + + let!(:terms) { Fabricate :terms_of_service, published_at: nil } + + context 'with publishing params' do + let(:params) { { terms_of_service: { text: 'new' }, action_type: 'publish' } } + + it 'publishes the record' do + expect { subject } + .to change(Admin::ActionLog, :count).by(1) + + expect(response) + .to redirect_to(admin_terms_of_service_index_path) + expect(terms.reload.published_at) + .to_not be_nil + end + end + + context 'with non publishing params' do + let(:params) { { terms_of_service: { text: 'new' }, action_type: 'save_draft' } } + + it 'updates but does not publish the record' do + expect { subject } + .to_not change(Admin::ActionLog, :count) + + expect(response) + .to redirect_to(admin_terms_of_service_draft_path) + expect(terms.reload.published_at) + .to be_nil + end + end + + context 'with invalid params' do + let(:params) { { terms_of_service: { text: '' }, action_type: 'save_draft' } } + + it 'does not update the record' do + subject + + expect(response) + .to have_http_status(:success) + end + end + end +end diff --git a/spec/controllers/admin/terms_of_service/generates_controller_spec.rb b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb new file mode 100644 index 0000000000..2f85fbc25f --- /dev/null +++ b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::GeneratesController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in user, scope: :user + end + + describe 'GET #show' do + it 'returns http success' do + get :show + + expect(response).to have_http_status(:success) + end + end + + describe 'POST #create' do + subject { post :create, params: params } + + context 'with valid params' do + let(:params) do + { + terms_of_service_generator: { + admin_email: 'test@host.example', + arbitration_address: '123 Main Street', + arbitration_website: 'https://host.example', + dmca_address: '123 DMCA Ave', + dmca_email: 'dmca@host.example', + domain: 'host.example', + jurisdiction: 'Europe', + }, + } + end + + it 'saves new record' do + expect { subject } + .to change(TermsOfService, :count).by(1) + expect(response) + .to redirect_to(admin_terms_of_service_draft_path) + end + end + + context 'with invalid params' do + let(:params) do + { + terms_of_service_generator: { + admin_email: 'what the', + }, + } + end + + it 'does not save new record' do + expect { subject } + .to_not change(TermsOfService, :count) + expect(response) + .to have_http_status(200) + end + end + end +end diff --git a/spec/controllers/admin/terms_of_service/histories_controller_spec.rb b/spec/controllers/admin/terms_of_service/histories_controller_spec.rb new file mode 100644 index 0000000000..d11ea2cd33 --- /dev/null +++ b/spec/controllers/admin/terms_of_service/histories_controller_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::HistoriesController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in user, scope: :user + end + + describe 'GET #show' do + it 'returns http success' do + get :show + + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/controllers/admin/terms_of_service/previews_controller_spec.rb b/spec/controllers/admin/terms_of_service/previews_controller_spec.rb new file mode 100644 index 0000000000..5d923c9f30 --- /dev/null +++ b/spec/controllers/admin/terms_of_service/previews_controller_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::PreviewsController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) } + + before do + sign_in user, scope: :user + end + + describe 'GET #show' do + it 'returns http success' do + get :show, params: { terms_of_service_id: terms_of_service.id } + + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/controllers/admin/terms_of_service/tests_controller_spec.rb b/spec/controllers/admin/terms_of_service/tests_controller_spec.rb new file mode 100644 index 0000000000..281c4d28c5 --- /dev/null +++ b/spec/controllers/admin/terms_of_service/tests_controller_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfService::TestsController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) } + + before do + sign_in user, scope: :user + end + + describe 'POST #create' do + it 'returns http success' do + post :create, params: { terms_of_service_id: terms_of_service.id } + + expect(response).to redirect_to(admin_terms_of_service_preview_path(terms_of_service)) + end + end +end diff --git a/spec/controllers/admin/terms_of_service_controller_spec.rb b/spec/controllers/admin/terms_of_service_controller_spec.rb new file mode 100644 index 0000000000..b7fdb90446 --- /dev/null +++ b/spec/controllers/admin/terms_of_service_controller_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TermsOfServiceController do + render_views + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in user, scope: :user + end + + describe 'GET #index' do + it 'returns http success' do + get :index + + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/controllers/settings/verifications_controller_spec.rb b/spec/controllers/settings/verifications_controller_spec.rb deleted file mode 100644 index 1a8df485b5..0000000000 --- a/spec/controllers/settings/verifications_controller_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::VerificationsController do - render_views - - let!(:user) { Fabricate(:user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #show' do - before do - get :show - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response) - .to have_http_status(200) - .and have_attributes( - headers: include( - 'Cache-Control' => 'private, no-store' - ) - ) - end - end -end diff --git a/spec/fabricators/status_edit_fabricator.rb b/spec/fabricators/status_edit_fabricator.rb new file mode 100644 index 0000000000..4df61dcfda --- /dev/null +++ b/spec/fabricators/status_edit_fabricator.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Fabricator(:status_edit) do + status { Fabricate.build(:status) } +end diff --git a/spec/fabricators/terms_of_service_fabricator.rb b/spec/fabricators/terms_of_service_fabricator.rb new file mode 100644 index 0000000000..2b0cfabcfb --- /dev/null +++ b/spec/fabricators/terms_of_service_fabricator.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +Fabricator(:terms_of_service) do + text { Faker::Lorem.paragraph } + changelog { Faker::Lorem.paragraph } + published_at { Time.zone.now } + notification_sent_at { Time.zone.now } +end diff --git a/spec/fixtures/files/600x400-animated.gif b/spec/fixtures/files/600x400-animated.gif new file mode 100644 index 0000000000..1a773c0af1 Binary files /dev/null and b/spec/fixtures/files/600x400-animated.gif differ diff --git a/spec/fixtures/files/600x400-animated.png b/spec/fixtures/files/600x400-animated.png new file mode 100644 index 0000000000..6430fceabb Binary files /dev/null and b/spec/fixtures/files/600x400-animated.png differ diff --git a/spec/fixtures/files/600x400.gif b/spec/fixtures/files/600x400.gif new file mode 100644 index 0000000000..bab39cb6f7 Binary files /dev/null and b/spec/fixtures/files/600x400.gif differ diff --git a/spec/fixtures/files/attachment.gif b/spec/fixtures/files/attachment.gif deleted file mode 100644 index 89dd73ad3e..0000000000 Binary files a/spec/fixtures/files/attachment.gif and /dev/null differ diff --git a/spec/lib/sanitize/config_spec.rb b/spec/lib/sanitize/config_spec.rb index b1cab85827..b4c849c427 100644 --- a/spec/lib/sanitize/config_spec.rb +++ b/spec/lib/sanitize/config_spec.rb @@ -39,15 +39,15 @@ RSpec.describe Sanitize::Config do end it 'keeps a with href' do - expect(Sanitize.fragment('Test', subject)).to eq 'Test' + expect(Sanitize.fragment('Test', subject)).to eq 'Test' end it 'keeps a with translate="no"' do - expect(Sanitize.fragment('Test', subject)).to eq 'Test' + expect(Sanitize.fragment('Test', subject)).to eq 'Test' end it 'removes "translate" attribute with invalid value' do - expect(Sanitize.fragment('Test', subject)).to eq 'Test' + expect(Sanitize.fragment('Test', subject)).to eq 'Test' end it 'removes a with unparsable href' do @@ -55,7 +55,7 @@ RSpec.describe Sanitize::Config do end it 'keeps a with supported scheme and no host' do - expect(Sanitize.fragment('Test', subject)).to eq 'Test' + expect(Sanitize.fragment('Test', subject)).to eq 'Test' end it 'sanitizes math to LaTeX' do diff --git a/spec/lib/text_formatter_spec.rb b/spec/lib/text_formatter_spec.rb index bde17bb79c..a71655ed2e 100644 --- a/spec/lib/text_formatter_spec.rb +++ b/spec/lib/text_formatter_spec.rb @@ -50,7 +50,7 @@ RSpec.describe TextFormatter do end end - context 'when given a stand-alone google URL' do + context 'when given a stand-alone Google URL' do let(:text) { 'http://google.com' } it 'matches the full URL' do @@ -280,6 +280,26 @@ RSpec.describe TextFormatter do end end + context 'when given a lengthy URL' do + let(:text) { 'lorem https://prepitaph.org/wip/web-dovespair/ ipsum' } + + it 'truncates the URL' do + expect(subject).to include '' + expect(subject).to include 'prepitaph.org/wip/web-dovespai' + expect(subject).to include '' + 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 '' + expect(subject).to include 'prepitaph.org/wip/web-devspair/' + expect(subject).to include '' + end + end + context 'when given text containing a hashtag' do let(:text) { '#hashtag' } diff --git a/spec/mailers/previews/user_mailer_preview.rb b/spec/mailers/previews/user_mailer_preview.rb index 2722538e1a..e677a24df2 100644 --- a/spec/mailers/previews/user_mailer_preview.rb +++ b/spec/mailers/previews/user_mailer_preview.rb @@ -98,4 +98,9 @@ class UserMailerPreview < ActionMailer::Preview def failed_2fa UserMailer.failed_2fa(User.first, '127.0.0.1', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0', Time.now.utc) end + + # Preview this email at http://localhost:3000/rails/mailers/user_mailer/terms_of_service_changed + def terms_of_service_changed + UserMailer.terms_of_service_changed(User.first, TermsOfService.live.first) + end end diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index 0257465817..0a128355b5 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -272,4 +272,16 @@ RSpec.describe UserMailer do .and(have_body_text(I18n.t('user_mailer.backup_ready.explanation'))) end end + + describe '#terms_of_service_changed' do + let(:terms) { Fabricate :terms_of_service } + let(:mail) { described_class.terms_of_service_changed(receiver, terms) } + + it 'renders terms_of_service_changed mail' do + expect(mail) + .to be_present + .and(have_subject(I18n.t('user_mailer.terms_of_service_changed.subject'))) + .and(have_body_text(I18n.t('user_mailer.terms_of_service_changed.changelog'))) + end + end end diff --git a/spec/models/account_pin_spec.rb b/spec/models/account_pin_spec.rb new file mode 100644 index 0000000000..b3460da2fb --- /dev/null +++ b/spec/models/account_pin_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountPin do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + it { is_expected.to belong_to(:target_account).required } + end + + describe 'Validations' do + describe 'the follow relationship' do + subject { Fabricate.build :account_pin, account: account } + + let(:account) { Fabricate :account } + let(:target_account) { Fabricate :account } + + context 'when account is following target account' do + before { account.follow!(target_account) } + + it { is_expected.to allow_value(target_account).for(:target_account).against(:base) } + end + + context 'when account is not following target account' do + it { is_expected.to_not allow_value(target_account).for(:target_account).against(:base).with_message(not_following_message) } + + def not_following_message + I18n.t('accounts.pin_errors.following') + end + end + end + end +end diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb index 18b791a73a..517cc4f6ae 100644 --- a/spec/models/custom_filter_spec.rb +++ b/spec/models/custom_filter_spec.rb @@ -7,19 +7,8 @@ RSpec.describe CustomFilter do it { is_expected.to validate_presence_of(:title) } it { is_expected.to validate_presence_of(:context) } - it 'requires non-empty of context' do - record = described_class.new(context: []) - record.valid? - - expect(record).to model_have_error_on_field(:context) - end - - it 'requires valid context value' do - record = described_class.new(context: ['invalid']) - record.valid? - - expect(record).to model_have_error_on_field(:context) - end + it { is_expected.to_not allow_values([], %w(invalid)).for(:context) } + it { is_expected.to allow_values(%w(home)).for(:context) } end describe 'Normalizations' do diff --git a/spec/models/form/import_spec.rb b/spec/models/form/import_spec.rb index 109bc88d4e..e1c1538de9 100644 --- a/spec/models/form/import_spec.rb +++ b/spec/models/form/import_spec.rb @@ -61,10 +61,7 @@ RSpec.describe Form::Import do let(:import_type) { 'following' } let(:import_file) { 'boop.ogg' } - it 'has errors' do - # NOTE: not testing more specific error because we don't know the string to match - expect(subject).to model_have_error_on_field(:data) - end + it { is_expected.to_not allow_value(data).for(:data) } end context 'when importing more follows than allowed' do diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 5f91ae0967..cce4b30479 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -90,7 +90,7 @@ RSpec.describe MediaAttachment, :attachment_processing do media.destroy end - it 'saves media attachment with correct file and size metadata' do + it 'saves metadata and generates styles' do expect(media) .to be_persisted .and be_processing_complete @@ -98,18 +98,28 @@ RSpec.describe MediaAttachment, :attachment_processing do file: be_present, type: eq('image'), file_content_type: eq(content_type), - file_file_name: end_with(extension) + file_file_name: end_with(extension), + blurhash: have_attributes(size: eq(36)) ) - # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension - expect(Rack::Mime.mime_type(extension, nil)).to eq content_type - # Strip original file name expect(media.file_file_name) .to_not start_with '600x400' + # Generate styles + expect(FastImage.size(media.file.path(:original))) + .to eq [600, 400] + expect(FastImage.size(media.file.path(:small))) + .to eq [588, 392] + + # Use extension recognized by Rack::Mime (used by PublicFileServerMiddleware) + expect(media.file.path(:original)) + .to end_with(extension) + expect(media.file.path(:small)) + .to end_with(extension) + # Set meta for original and thumbnail - expect(media.file.meta.deep_symbolize_keys) + expect(media_metadata) .to include( original: include( width: eq(600), @@ -122,6 +132,60 @@ RSpec.describe MediaAttachment, :attachment_processing do aspect: eq(1.5) ) ) + + # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension + expect(Rack::Mime.mime_type(extension, nil)).to eq content_type + end + end + + shared_examples 'animated 600x400 image' do + after do + media.destroy + end + + it 'saves metadata and generates styles' do + expect(media) + .to be_persisted + .and be_processing_complete + .and have_attributes( + file: be_present, + type: eq('gifv'), + file_content_type: eq('video/mp4'), + file_file_name: end_with('.mp4'), + blurhash: have_attributes(size: eq(36)) + ) + + # Strip original file name + expect(media.file_file_name) + .to_not start_with '600x400' + + # Transcode to MP4 + expect(media.file.path(:original)) + .to end_with('.mp4') + + # Generate static thumbnail + expect(FastImage.size(media.file.path(:small))) + .to eq [600, 400] + expect(FastImage.animated?(media.file.path(:small))) + .to be false + expect(media.file.path(:small)) + .to end_with('.png') + + # Set meta for styles + expect(media_metadata) + .to include( + original: include( + width: eq(600), + height: eq(400), + duration: eq(3), + frame_rate: '1/1' + ), + small: include( + width: eq(600), + height: eq(400), + aspect: eq(1.5) + ) + ) end end @@ -137,10 +201,10 @@ RSpec.describe MediaAttachment, :attachment_processing do it_behaves_like 'static 600x400 image', 'image/png', '.png' end - describe 'monochrome jpg' do - let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) } + describe 'gif' do + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.gif')) } - it_behaves_like 'static 600x400 image', 'image/png', '.png' + it_behaves_like 'static 600x400 image', 'image/gif', '.gif' end describe 'webp' do @@ -161,6 +225,12 @@ RSpec.describe MediaAttachment, :attachment_processing do it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg' end + describe 'monochrome jpg' do + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) } + + it_behaves_like 'static 600x400 image', 'image/png', '.png' + end + describe 'base64-encoded image' do let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" } let(:media) { Fabricate(:media_attachment, file: base64_attachment) } @@ -169,51 +239,15 @@ RSpec.describe MediaAttachment, :attachment_processing do end describe 'animated gif' do - let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.gif')) } - it 'sets correct file metadata' do - expect(media) - .to have_attributes( - type: eq('gifv'), - file_content_type: eq('video/mp4') - ) - expect(media_metadata) - .to include( - original: include( - width: eq(128), - height: eq(128) - ) - ) - end + it_behaves_like 'animated 600x400 image' end - describe 'static gif' do - fixtures = [ - { filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 }, - { filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 }, - ] + describe 'animated png' do + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.png')) } - fixtures.each do |fixture| - context fixture[:filename] do - let(:media) { Fabricate(:media_attachment, file: attachment_fixture(fixture[:filename])) } - - it 'sets correct file metadata' do - expect(media) - .to have_attributes( - type: eq('image'), - file_content_type: eq('image/gif') - ) - expect(media_metadata) - .to include( - original: include( - width: eq(fixture[:width]), - height: eq(fixture[:height]), - aspect: eq(fixture[:aspect]) - ) - ) - end - end - end + it_behaves_like 'animated 600x400 image' end describe 'ogg with cover art' do diff --git a/spec/models/mention_spec.rb b/spec/models/mention_spec.rb index 3a9b9fddf2..67c22b5d1f 100644 --- a/spec/models/mention_spec.rb +++ b/spec/models/mention_spec.rb @@ -3,8 +3,14 @@ require 'rails_helper' RSpec.describe Mention do - describe 'validations' do + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:status).required } end + + describe 'Validations' do + subject { Fabricate.build :mention } + + it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:status_id) } + end end diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index e62b2e9094..0bee7dfed1 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -105,25 +105,32 @@ RSpec.describe Report do describe 'history' do subject(:action_logs) { report.history } - let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id], created_at: 3.days.ago, updated_at: 1.day.ago) } + let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id]) } let(:target_account) { Fabricate(:account) } let(:status) { Fabricate(:status) } let(:account_warning) { Fabricate(:account_warning, report_id: report.id) } - before do - Fabricate(:action_log, target_type: 'Report', account_id: target_account.id, target_id: report.id, created_at: 2.days.ago) - Fabricate(:action_log, target_type: 'Account', account_id: target_account.id, target_id: report.target_account_id, created_at: 2.days.ago) - Fabricate(:action_log, target_type: 'Status', account_id: target_account.id, target_id: status.id, created_at: 2.days.ago) - Fabricate(:action_log, target_type: 'AccountWarning', account_id: target_account.id, target_id: account_warning.id, created_at: 2.days.ago) - end + let!(:matched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning', target_id: account_warning.id) } + let!(:matched_type_account) { Fabricate(:action_log, target_type: 'Account', target_id: report.target_account_id) } + let!(:matched_type_report) { Fabricate(:action_log, target_type: 'Report', target_id: report.id) } + let!(:matched_type_status) { Fabricate(:action_log, target_type: 'Status', target_id: status.id) } + + let!(:unmatched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning') } + let!(:unmatched_type_account) { Fabricate(:action_log, target_type: 'Account') } + let!(:unmatched_type_report) { Fabricate(:action_log, target_type: 'Report') } + let!(:unmatched_type_status) { Fabricate(:action_log, target_type: 'Status') } it 'returns expected logs' do expect(action_logs) .to have_attributes(count: 4) - .and include(have_attributes(target_type: 'Account')) - .and include(have_attributes(target_type: 'AccountWarning')) - .and include(have_attributes(target_type: 'Report')) - .and include(have_attributes(target_type: 'Status')) + .and include(matched_type_account_warning) + .and include(matched_type_account) + .and include(matched_type_report) + .and include(matched_type_status) + .and not_include(unmatched_type_account_warning) + .and not_include(unmatched_type_account) + .and not_include(unmatched_type_report) + .and not_include(unmatched_type_status) end end @@ -149,13 +156,13 @@ RSpec.describe Report do end end - describe 'validations' do + describe 'Validations' do let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } it 'is invalid if comment is longer than character limit and reporter is local' do - report = Fabricate.build(:report, comment: comment_over_limit) - expect(report.valid?).to be false - expect(report).to model_have_error_on_field(:comment) + report = Fabricate.build(:report) + + expect(report).to_not allow_value(comment_over_limit).for(:comment) end it 'is valid if comment is longer than character limit and reporter is not local' do @@ -164,16 +171,16 @@ RSpec.describe Report do end it 'is invalid if it references invalid rules' do - report = Fabricate.build(:report, category: :violation, rule_ids: [-1]) - expect(report.valid?).to be false - expect(report).to model_have_error_on_field(:rule_ids) + report = Fabricate.build(:report, category: :violation) + + expect(report).to_not allow_value([-1]).for(:rule_ids) end it 'is invalid if it references rules but category is not "violation"' do rule = Fabricate(:rule) - report = Fabricate.build(:report, category: :spam, rule_ids: rule.id) - expect(report.valid?).to be false - expect(report).to model_have_error_on_field(:rule_ids) + report = Fabricate.build(:report, category: :spam) + + expect(report).to_not allow_value(rule.id).for(:rule_ids) end def comment_over_limit diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 18dd26be94..a1cc6a064f 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -5,7 +5,39 @@ require 'rails_helper' RSpec.describe Tag do include_examples 'Reviewable' - describe 'validations' do + describe 'Validations' do + describe 'name' do + context 'with a new record' do + subject { Fabricate.build :tag, name: 'original' } + + it { is_expected.to allow_value('changed').for(:name) } + end + + context 'with an existing record' do + subject { Fabricate :tag, name: 'original' } + + it { is_expected.to_not allow_value('changed').for(:name).with_message(previous_name_error_message) } + end + end + + describe 'display_name' do + context 'with a new record' do + subject { Fabricate.build :tag, name: 'original', display_name: 'OriginalDisplayName' } + + it { is_expected.to allow_value('ChangedDisplayName').for(:display_name) } + end + + context 'with an existing record' do + subject { Fabricate :tag, name: 'original', display_name: 'OriginalDisplayName' } + + it { is_expected.to_not allow_value('ChangedDisplayName').for(:display_name).with_message(previous_name_error_message) } + end + end + + def previous_name_error_message + I18n.t('tags.does_not_match_previous_name') + end + it 'invalid with #' do expect(described_class.new(name: '#hello_world')).to_not be_valid end diff --git a/spec/models/terms_of_service_spec.rb b/spec/models/terms_of_service_spec.rb new file mode 100644 index 0000000000..d32ba4e642 --- /dev/null +++ b/spec/models/terms_of_service_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe TermsOfService do + describe '#scope_for_notification' do + subject { terms_of_service.scope_for_notification } + + let(:published_at) { Time.now.utc } + let(:terms_of_service) { Fabricate(:terms_of_service, published_at: published_at) } + let(:user_before) { Fabricate(:user, created_at: published_at - 2.days) } + let(:user_before_unconfirmed) { Fabricate(:user, created_at: published_at - 2.days, confirmed_at: nil) } + let(:user_before_suspended) { Fabricate(:user, created_at: published_at - 2.days) } + let(:user_after) { Fabricate(:user, created_at: published_at + 1.hour) } + + before do + user_before_suspended.account.suspend! + user_before_unconfirmed + user_before + user_after + end + + it 'includes only users created before the terms of service were published' do + expect(subject.pluck(:id)).to match_array(user_before.id) + end + end +end diff --git a/spec/policies/terms_of_service_policy_spec.rb b/spec/policies/terms_of_service_policy_spec.rb new file mode 100644 index 0000000000..18345d9fd0 --- /dev/null +++ b/spec/policies/terms_of_service_policy_spec.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe TermsOfServicePolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:john) { Fabricate(:account) } + + permissions :index?, :create? do + it { is_expected.to permit(admin, TermsOfService) } + it { is_expected.to_not permit(john, TermsOfService) } + end + + permissions :update?, :destroy? do + let(:terms) { Fabricate(:terms_of_service, published_at: published) } + + context 'with an unpublished terms' do + let(:published) { nil } + + it { is_expected.to permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + + context 'with a published terms' do + let(:published) { 5.days.ago } + + it { is_expected.to_not permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + end + + permissions :distribute? do + let(:terms) { Fabricate(:terms_of_service, published_at: published, notification_sent_at: notification) } + + context 'with notification already sent' do + let(:notification) { 3.days.ago } + + context 'with published true' do + let(:published) { 5.days.ago } + + it { is_expected.to_not permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + + context 'with published false' do + let(:published) { nil } + + it { is_expected.to_not permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + end + + context 'with notification not yet sent' do + let(:notification) { nil } + + context 'with published true' do + let(:published) { 5.days.ago } + + it { is_expected.to permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + + context 'with published false' do + let(:published) { nil } + + it { is_expected.to_not permit(admin, terms) } + it { is_expected.to_not permit(john, terms) } + end + end + end +end diff --git a/spec/requests/api/v1/instances/terms_of_services_spec.rb b/spec/requests/api/v1/instances/terms_of_services_spec.rb new file mode 100644 index 0000000000..5feb49f48d --- /dev/null +++ b/spec/requests/api/v1/instances/terms_of_services_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Terms of Service' do + describe 'GET /api/v1/instance/terms_of_service' do + before do + Fabricate(:terms_of_service) + end + + it 'returns http success' do + get api_v1_instance_terms_of_service_path + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + + expect(response.parsed_body) + .to be_present + .and include(:content) + end + end +end diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb index d7d0b92f11..3340e26b98 100644 --- a/spec/requests/api/v1/media_spec.rb +++ b/spec/requests/api/v1/media_spec.rb @@ -137,7 +137,7 @@ RSpec.describe 'Media' do end context 'with image/gif', :attachment_processing do - let(:params) { { file: fixture_file_upload('attachment.gif', 'image/gif') } } + let(:params) { { file: fixture_file_upload('600x400.gif', 'image/gif') } } it_behaves_like 'a successful media upload', 'image' end diff --git a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb index 95b4d7dcd2..a69e1c2776 100644 --- a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb +++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do subject { serialized_record_json(record, described_class) } - let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 } + let(:record) { Fabricate.build :account_relationship_severance_event, id: 123, created_at: DateTime.new(2024, 11, 28, 16, 20, 0) } describe 'serialization' do it 'returns expected values' do @@ -15,4 +15,10 @@ RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do ) end end + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end end diff --git a/spec/serializers/rest/account_serializer/field_serializer_spec.rb b/spec/serializers/rest/account_serializer/field_serializer_spec.rb new file mode 100644 index 0000000000..57f2b529c5 --- /dev/null +++ b/spec/serializers/rest/account_serializer/field_serializer_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AccountSerializer::FieldSerializer do + subject { serialized_record_json(field, described_class) } + + let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) } + let(:user) { Fabricate(:user) } + let(:account) { user.account } + + context 'when verified_at is populated' do + let(:field) { Account::Field.new(account, 'name' => 'Foo', 'value' => 'Bar', 'verified_at' => default_datetime) } + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['verified_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb index 7daa0796a9..37c6a776b0 100644 --- a/spec/serializers/rest/account_serializer_spec.rb +++ b/spec/serializers/rest/account_serializer_spec.rb @@ -5,6 +5,7 @@ require 'rails_helper' RSpec.describe REST::AccountSerializer do subject { serialized_record_json(account, described_class) } + let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) } let(:role) { Fabricate(:user_role, name: 'Role', highlighted: true) } let(:user) { Fabricate(:user, role: role) } let(:account) { user.account } @@ -44,4 +45,24 @@ RSpec.describe REST::AccountSerializer do expect(subject['memorial']).to be true end end + + context 'when created_at is populated' do + before do + account.account_stat.update!(created_at: default_datetime) + end + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when last_status_at is populated' do + before do + account.account_stat.update!(last_status_at: default_datetime) + end + + it 'is serialized as yyyy-mm-dd' do + expect(subject['last_status_at']).to eq('2024-11-28') + end + end end diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb index 0f335d1215..ea2e48fbb4 100644 --- a/spec/serializers/rest/account_warning_serializer_spec.rb +++ b/spec/serializers/rest/account_warning_serializer_spec.rb @@ -14,6 +14,7 @@ RSpec.describe REST::AccountWarningSerializer do 'id' => be_a(String).and(eq('123')), 'status_ids' => be_a(Array).and(eq(['456', '789'])) ) + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error end end end diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb index 58f58a997b..ac7cec0bae 100644 --- a/spec/serializers/rest/admin/account_serializer_spec.rb +++ b/spec/serializers/rest/admin/account_serializer_spec.rb @@ -5,6 +5,14 @@ require 'rails_helper' RSpec.describe REST::Admin::AccountSerializer do subject { serialized_record_json(record, described_class) } + context 'when created_at is populated' do + let(:record) { Fabricate :account, user: Fabricate(:user) } + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + describe 'created_by_application_id' do context 'when account is application-created' do let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) } diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb index ed6067c0d2..a2bd8fbfa2 100644 --- a/spec/serializers/rest/admin/cohort_serializer_spec.rb +++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb @@ -14,6 +14,8 @@ RSpec.describe REST::Admin::CohortSerializer do 'data' => be_a(Array), 'period' => /2024-01-01/ ) + expect { DateTime.rfc3339(subject['period']) }.to_not raise_error + subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error } end end end diff --git a/spec/serializers/rest/admin/domain_allow_serializer_spec.rb b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb new file mode 100644 index 0000000000..39c013d31c --- /dev/null +++ b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::DomainAllowSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate(:domain_allow) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/admin/domain_block_serializer_spec.rb b/spec/serializers/rest/admin/domain_block_serializer_spec.rb new file mode 100644 index 0000000000..5ab3ddc169 --- /dev/null +++ b/spec/serializers/rest/admin/domain_block_serializer_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::DomainBlockSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate(:domain_block) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb new file mode 100644 index 0000000000..2a1501a158 --- /dev/null +++ b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::EmailDomainBlockSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate(:email_domain_block) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/admin/ip_block_serializer_spec.rb b/spec/serializers/rest/admin/ip_block_serializer_spec.rb new file mode 100644 index 0000000000..c1239b5057 --- /dev/null +++ b/spec/serializers/rest/admin/ip_block_serializer_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::IpBlockSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate(:ip_block) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when expires_at is populated' do + let(:record) { Fabricate(:ip_block, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0)) } + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/admin/ip_serializer_spec.rb b/spec/serializers/rest/admin/ip_serializer_spec.rb new file mode 100644 index 0000000000..f93eada759 --- /dev/null +++ b/spec/serializers/rest/admin/ip_serializer_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::IpSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { UserIp.new(used_at: 3.days.ago) } + + context 'when used_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['used_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/admin/measure_serializer_spec.rb b/spec/serializers/rest/admin/measure_serializer_spec.rb new file mode 100644 index 0000000000..08c7170a4a --- /dev/null +++ b/spec/serializers/rest/admin/measure_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::MeasureSerializer do + subject { serialized_record_json(record, described_class) } + + let(:start_at) { 2.days.ago } + let(:end_at) { Time.now.utc } + let(:params) { ActionController::Parameters.new({ instance_accounts: [123] }) } + let(:record) { Admin::Metrics::Measure::ActiveUsersMeasure.new(start_at, end_at, params) } + + context 'when start_at is populated' do + it 'parses as RFC 3339 datetime' do + subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error } + end + end +end diff --git a/spec/serializers/rest/admin/report_serializer_spec.rb b/spec/serializers/rest/admin/report_serializer_spec.rb new file mode 100644 index 0000000000..c0f841d6bf --- /dev/null +++ b/spec/serializers/rest/admin/report_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::ReportSerializer do + subject { serialized_record_json(report, described_class) } + + let(:report) { Fabricate(:report) } + + context 'with created_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'with action_taken_at' do + let(:acting_account) { Fabricate(:account) } + + before do + report.resolve!(acting_account) + end + + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/announcement_serializer_spec.rb b/spec/serializers/rest/announcement_serializer_spec.rb new file mode 100644 index 0000000000..6b746e5c2f --- /dev/null +++ b/spec/serializers/rest/announcement_serializer_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AnnouncementSerializer do + subject do + serialized_record_json( + announcement, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:announcement) { Fabricate(:announcement, starts_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) } + + context 'when date fields are populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['starts_at']) }.to_not raise_error + expect { DateTime.rfc3339(subject['ends_at']) }.to_not raise_error + expect { DateTime.rfc3339(subject['published_at']) }.to_not raise_error + expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb index d7bd078e1d..dc6e86e909 100644 --- a/spec/serializers/rest/extended_description_serializer_spec.rb +++ b/spec/serializers/rest/extended_description_serializer_spec.rb @@ -5,9 +5,11 @@ require 'rails_helper' RSpec.describe REST::ExtendedDescriptionSerializer do subject { serialized_record_json(record, described_class) } + let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) } + describe 'serialization' do context 'with text present' do - let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) } + let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: default_datetime } it 'returns expected values' do expect(subject) @@ -15,19 +17,19 @@ RSpec.describe REST::ExtendedDescriptionSerializer do 'content' => eq(<<~HTML),

    Hello world

    HTML - 'updated_at' => eq('2024-01-01') + 'updated_at' => eq('2024-11-28T16:20:00+00:00') ) end end context 'with text missing' do - let(:record) { ExtendedDescription.new text: nil, updated_at: Date.new(2024, 1, 1) } + let(:record) { ExtendedDescription.new text: nil, updated_at: default_datetime } it 'returns expected values' do expect(subject) .to include( 'content' => eq(''), - 'updated_at' => eq('2024-01-01') + 'updated_at' => eq('2024-11-28T16:20:00+00:00') ) end end diff --git a/spec/serializers/rest/featured_tag_serializer_spec.rb b/spec/serializers/rest/featured_tag_serializer_spec.rb new file mode 100644 index 0000000000..883fce1aa7 --- /dev/null +++ b/spec/serializers/rest/featured_tag_serializer_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::FeaturedTagSerializer do + subject do + serialized_record_json( + featured_tag, + described_class + ) + end + + let(:featured_tag) { Fabricate :featured_tag } + + context 'when last_status_at is populated' do + before do + featured_tag.increment(DateTime.new(2024, 11, 28, 16, 20, 0)) + end + + it 'is serialized as yyyy-mm-dd' do + expect(subject['last_status_at']).to eq('2024-11-28') + end + end +end diff --git a/spec/serializers/rest/filter_serializer_spec.rb b/spec/serializers/rest/filter_serializer_spec.rb new file mode 100644 index 0000000000..c2c0e1635a --- /dev/null +++ b/spec/serializers/rest/filter_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::FilterSerializer do + subject do + serialized_record_json( + filter, + described_class + ) + end + + let(:filter) { Fabricate :custom_filter, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0) } + + context 'when expires_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/marker_serializer_spec.rb b/spec/serializers/rest/marker_serializer_spec.rb new file mode 100644 index 0000000000..8b8285c9e8 --- /dev/null +++ b/spec/serializers/rest/marker_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::MarkerSerializer do + subject do + serialized_record_json( + marker, + described_class + ) + end + + let(:marker) { Fabricate :marker } + + context 'when updated_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/muted_account_serializer_spec.rb b/spec/serializers/rest/muted_account_serializer_spec.rb new file mode 100644 index 0000000000..2a6dd9fe17 --- /dev/null +++ b/spec/serializers/rest/muted_account_serializer_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::MutedAccountSerializer do + subject do + serialized_record_json( + mutee, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:account) { current_user.account } + let(:mutee) { Fabricate(:account, username: 'mutee') } + + context 'when mute_expires_at is populated and non-nil' do + before do + account.follow!(mutee) + account.mute!(mutee, duration: 1.day) + end + + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['mute_expires_at']) }.to_not raise_error + end + end + + context 'when mute has no duration' do + before do + account.follow!(mutee) + account.mute!(mutee) + end + + it 'has a nil mute_expires_at' do + expect(subject['mute_expires_at']).to be_nil + end + end +end diff --git a/spec/serializers/rest/notification_group_serializer_spec.rb b/spec/serializers/rest/notification_group_serializer_spec.rb new file mode 100644 index 0000000000..2a1293292d --- /dev/null +++ b/spec/serializers/rest/notification_group_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationGroupSerializer do + subject do + serialized_record_json( + notification_group, + described_class + ) + end + + let(:notification_group) { NotificationGroup.new pagination_data: { latest_notification_at: 3.days.ago }, notification: Fabricate(:notification), sample_accounts: [] } + + context 'when latest_page_notification_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['latest_page_notification_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/notification_request_serializer_spec.rb b/spec/serializers/rest/notification_request_serializer_spec.rb new file mode 100644 index 0000000000..34332679d6 --- /dev/null +++ b/spec/serializers/rest/notification_request_serializer_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationRequestSerializer do + subject do + serialized_record_json( + notification_request, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:notification_request) { Fabricate :notification_request } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when updated_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/notification_serializer_spec.rb b/spec/serializers/rest/notification_serializer_spec.rb new file mode 100644 index 0000000000..7296c1b935 --- /dev/null +++ b/spec/serializers/rest/notification_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::NotificationSerializer do + subject do + serialized_record_json( + notification, + described_class + ) + end + + let(:notification) { Fabricate :notification } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/poll_serializer_spec.rb b/spec/serializers/rest/poll_serializer_spec.rb new file mode 100644 index 0000000000..71ed9deb3e --- /dev/null +++ b/spec/serializers/rest/poll_serializer_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::PollSerializer do + subject do + serialized_record_json( + poll, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:poll) { Fabricate :poll } + + context 'when expires_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/report_serializer_spec.rb b/spec/serializers/rest/report_serializer_spec.rb new file mode 100644 index 0000000000..5cbeb0fee0 --- /dev/null +++ b/spec/serializers/rest/report_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ReportSerializer do + subject do + serialized_record_json( + report, + described_class + ) + end + + let(:status) { Fabricate(:status) } + let(:report) { Fabricate(:report, status_ids: [status.id]) } + + context 'with created_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'with action_taken_at' do + let(:acting_account) { Fabricate(:account) } + + before do + report.resolve!(acting_account) + end + + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/scheduled_status_serializer_spec.rb b/spec/serializers/rest/scheduled_status_serializer_spec.rb new file mode 100644 index 0000000000..7d0d7c96bb --- /dev/null +++ b/spec/serializers/rest/scheduled_status_serializer_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ScheduledStatusSerializer do + subject do + serialized_record_json( + scheduled_status, + described_class + ) + end + + let(:account) { Fabricate(:account) } + let(:scheduled_status) { Fabricate.build(:scheduled_status, scheduled_at: 4.minutes.from_now, account: account) } + + context 'with scheduled_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['scheduled_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/status_edit_serializer_spec.rb b/spec/serializers/rest/status_edit_serializer_spec.rb new file mode 100644 index 0000000000..1f5ac54b7b --- /dev/null +++ b/spec/serializers/rest/status_edit_serializer_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::StatusEditSerializer do + subject do + serialized_record_json( + status_edit, + described_class + ) + end + + let(:status_edit) { Fabricate(:status_edit) } + + context 'when created_at is populated' do + it 'parses as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end +end diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb index e96d1fbe67..ca0591eb69 100644 --- a/spec/serializers/rest/status_serializer_spec.rb +++ b/spec/serializers/rest/status_serializer_spec.rb @@ -51,5 +51,19 @@ RSpec.describe REST::StatusSerializer do expect(subject['favourites_count']).to eq(40) end end + + context 'with created_at' do + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error + end + end + + context 'when edited_at is populated' do + let(:status) { Fabricate.build :status, edited_at: 3.days.ago } + + it 'is serialized as RFC 3339 datetime' do + expect { DateTime.rfc3339(subject['edited_at']) }.to_not raise_error + end + end end end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index df0db9149e..238c49da75 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -38,7 +38,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do let(:media_attachments) { [] } before do - mentions.each { |a| Fabricate(:mention, status: status, account: a) } + mentions.each { |(account, silent)| Fabricate(:mention, status: status, account: account, silent: silent) } tags.each { |t| status.tags << t } media_attachments.each { |m| status.media_attachments << m } stub_request(:get, bogus_mention).to_raise(HTTP::ConnectionError) @@ -324,7 +324,19 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do end context 'when originally with mentions' do - let(:mentions) { [alice, bob] } + let(:mentions) { [[alice, false], [bob, false]] } + + before do + subject.call(status, json, json) + end + + it 'updates mentions' do + expect(status.active_mentions.reload.map(&:account_id)).to eq [alice.id] + end + end + + context 'when originally with silent mentions' do + let(:mentions) { [[alice, true], [bob, true]] } before do subject.call(status, json, json) diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb index 8f9d3cdfc9..ef24362fbc 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -109,7 +109,7 @@ RSpec.describe ReblogService do Status .where(id: reblog_of_id) .where(text: 'discard-status-text') - .update_all(deleted_at: Time.now.utc) + .touch_all(:deleted_at) end end end diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index 99eddf2f88..2a2bbd68b6 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -199,6 +199,14 @@ RSpec.describe UpdateStatusService do .to eq [bob.id] expect(status.mentions.pluck(:account_id)) .to contain_exactly(alice.id, bob.id) + + # Going back when a mention was switched to silence should still be possible + subject.call(status, status.account_id, text: 'Hello @alice') + + expect(status.active_mentions.pluck(:account_id)) + .to eq [alice.id] + expect(status.mentions.pluck(:account_id)) + .to contain_exactly(alice.id, bob.id) end end diff --git a/spec/support/matchers/model/model_have_error_on_field.rb b/spec/support/matchers/model/model_have_error_on_field.rb deleted file mode 100644 index 0f9c81a475..0000000000 --- a/spec/support/matchers/model/model_have_error_on_field.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -RSpec::Matchers.define :model_have_error_on_field do |expected| - match do |record| - record.valid? if record.errors.empty? - - record.errors.key?(expected) - end - - failure_message do |record| - keys = record.errors.attribute_names - - "expect record.errors(#{keys}) to include #{expected}" - end -end diff --git a/spec/system/admin/terms_of_service_spec.rb b/spec/system/admin/terms_of_service_spec.rb new file mode 100644 index 0000000000..d6ee1469d2 --- /dev/null +++ b/spec/system/admin/terms_of_service_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Terms of services' do + describe 'Viewing terms of services index page' do + let!(:terms) { Fabricate :terms_of_service, text: 'Test terms' } + + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'allows tags listing and editing' do + visit admin_terms_of_service_index_path + + expect(page) + .to have_title(I18n.t('admin.terms_of_service.title')) + + expect(page) + .to have_content(terms.text) + end + end +end diff --git a/spec/system/log_in_spec.rb b/spec/system/log_in_spec.rb index f8765e8e1c..10869fd240 100644 --- a/spec/system/log_in_spec.rb +++ b/spec/system/log_in_spec.rb @@ -34,7 +34,7 @@ RSpec.describe 'Log in' do it 'A unconfirmed user is able to log in' do fill_in_auth_details(email, password) - expect(subject).to have_css('div.admin-wrapper') + expect(subject).to have_css('.title', text: I18n.t('auth.setup.title')) end end diff --git a/spec/system/settings/verifications_spec.rb b/spec/system/settings/verifications_spec.rb new file mode 100644 index 0000000000..75be191c83 --- /dev/null +++ b/spec/system/settings/verifications_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings verification page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'Viewing the verification page' do + it 'shows the page and updates attribution' do + visit settings_verification_path + + expect(page) + .to have_content(verification_summary) + .and have_private_cache_control + + fill_in attribution_field, with: 'host.example' + + expect { click_on submit_button } + .to(change { user.account.reload.attribution_domains_as_text }) + expect(page) + .to have_content(success_message) + end + end + + def verification_summary + I18n.t('verification.website_verification') + end + + def attribution_field + I18n.t('simple_form.labels.account.attribution_domains_as_text') + end +end diff --git a/spec/system/terms_of_service_spec.rb b/spec/system/terms_of_service_spec.rb new file mode 100644 index 0000000000..0de12bae36 --- /dev/null +++ b/spec/system/terms_of_service_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Terms of Service page' do + it 'visits the about page and renders the web app' do + visit terms_of_service_path + + expect(page) + .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') + end +end diff --git a/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb b/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb new file mode 100644 index 0000000000..27ddfb28bc --- /dev/null +++ b/spec/workers/admin/distribute_terms_of_service_notification_worker_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::DistributeTermsOfServiceNotificationWorker do + let(:worker) { described_class.new } + + describe '#perform' do + context 'with missing record' do + it 'runs without error' do + expect { worker.perform(nil) }.to_not raise_error + end + end + + context 'with valid terms' do + let(:terms) { Fabricate(:terms_of_service) } + let!(:user) { Fabricate :user, confirmed_at: 3.days.ago } + + it 'sends the terms update via email', :inline_jobs do + emails = capture_emails { worker.perform(terms.id) } + + expect(emails.size) + .to eq(1) + expect(emails.first) + .to have_attributes( + to: [user.email], + subject: I18n.t('user_mailer.terms_of_service_changed.subject') + ) + end + end + end +end diff --git a/yarn.lock b/yarn.lock index 5d4bb6d3dc..2aab09edad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,6 +1944,15 @@ __metadata: languageName: node linkType: hard +"@csstools/stylelint-formatter-github@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/stylelint-formatter-github@npm:1.0.0" + peerDependencies: + stylelint: ^16.6.0 + checksum: 10c0/2052c4e4d89656b2b4176a6d07508ef73278d33c24a7408a3555d07f26ec853f85da95525590c51751fb3150a2ebb5e3083d8200dc6597af2cd8e93198695269 + languageName: node + linkType: hard + "@csstools/utilities@npm:^2.0.0": version: 2.0.0 resolution: "@csstools/utilities@npm:2.0.0" @@ -2213,15 +2222,15 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.3.11 - resolution: "@formatjs/cli@npm:6.3.11" + version: 6.3.14 + resolution: "@formatjs/cli@npm:6.3.14" peerDependencies: "@glimmer/env": ^0.1.7 - "@glimmer/reference": ^0.91.1 || ^0.92.0 - "@glimmer/syntax": ^0.92.0 - "@glimmer/validator": ^0.92.0 + "@glimmer/reference": ^0.91.1 || ^0.92.0 || ^0.93.0 + "@glimmer/syntax": ^0.92.0 || ^0.93.0 + "@glimmer/validator": ^0.92.0 || ^0.93.0 "@vue/compiler-core": ^3.4.0 - content-tag: ^2.0.1 + content-tag: ^2.0.1 || ^3.0.0 ember-template-recast: ^6.1.4 vue: ^3.4.0 peerDependenciesMeta: @@ -2243,7 +2252,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/31d5fac85314e97591c4c6a4793abf1d9c6fbf790fbbea779b2a4c0f742f1859804f290e77be06d128274468e44bc27992196aacb4cb6f2fbd141755ca79a98d + checksum: 10c0/b4c83ed7fdc8dcd48b2f48fa9cca65b52472fb096eb028517a872f8a71ed3964f4b0a6bbc607f821a9504f396fe7341ef4d9ad44a381a37f280ed7547de66f41 languageName: node linkType: hard @@ -2841,6 +2850,7 @@ __metadata: "@babel/preset-react": "npm:^7.22.3" "@babel/preset-typescript": "npm:^7.21.5" "@babel/runtime": "npm:^7.23.7" + "@csstools/stylelint-formatter-github": "npm:^1.0.0" "@dnd-kit/core": "npm:^6.1.0" "@dnd-kit/sortable": "npm:^10.0.0" "@dnd-kit/utilities": "npm:^3.2.2" @@ -2849,7 +2859,7 @@ __metadata: "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" "@hello-pangea/dnd": "npm:^17.0.0" - "@rails/ujs": "npm:7.1.500" + "@rails/ujs": "npm:7.1.501" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -2970,9 +2980,9 @@ __metadata: sass-loader: "npm:^10.2.0" stacktrace-js: "npm:^2.0.2" stringz: "npm:^2.1.0" - stylelint: "npm:^16.0.2" + stylelint: "npm:^16.11.0" stylelint-config-prettier-scss: "npm:^1.0.0" - stylelint-config-standard-scss: "npm:^13.0.0" + stylelint-config-standard-scss: "npm:^14.0.0" substring-trie: "npm:^1.0.2" terser-webpack-plugin: "npm:^4.2.3" tesseract.js: "npm:^2.1.5" @@ -3292,10 +3302,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.500": - version: 7.1.500 - resolution: "@rails/ujs@npm:7.1.500" - checksum: 10c0/365f9a3944454d64c83463de017d9be7064494d6376c1f4d8cbff38c0f278bac7d9ab85f19b31abb70f0e775f30b64ad682fd4545bc27b5d91baef3618642b9f +"@rails/ujs@npm:7.1.501": + version: 7.1.501 + resolution: "@rails/ujs@npm:7.1.501" + checksum: 10c0/b75a30f36ff219264e0926da1ffcd14c2a5d6aee5be29da4dc81f9a45843875da79ac19cf7ed9a3f11a39084398d0ae4a75a8edb28ba94907db3081572af62b0 languageName: node linkType: hard @@ -3630,22 +3640,22 @@ __metadata: linkType: hard "@testing-library/react@npm:^16.0.0": - version: 16.0.1 - resolution: "@testing-library/react@npm:16.0.1" + version: 16.1.0 + resolution: "@testing-library/react@npm:16.1.0" dependencies: "@babel/runtime": "npm:^7.12.5" peerDependencies: "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 - "@types/react-dom": ^18.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 10c0/67d05dec5ad5a2e6f92b6a3234af785435c7bb62bdbf12f3bfc89c9bca0c871a189e88c4ba023ed4cea504704c87c6ac7e86e24a3962df6c521ae89b62f48ff7 + checksum: 10c0/8451dcc76ba0d4f3504af78f2a4aacc13117691f4b7a3c279f3e047d5ea817ff686496ad53e7f65f6183112aef2be3f318af609b1f5d666eed42b1014d1c68d5 languageName: node linkType: hard @@ -4267,10 +4277,10 @@ __metadata: languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 10c0/82824c1051ba40a00e3d47964cdf4546a224e95f172e15a9c62aa3f118acee1c7518b627a34f3aa87298a2039f982e8509f92bfcc18bea7c255c189c293ba547 +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: 10c0/77c045a98f57488201f678b181cccd042279aff3da34540ad242f893acc52b358bd0a8207a321b8ac09adbcef36e3236944390e2df4fcedb556ce7bb2a88f2a8 languageName: node linkType: hard @@ -11477,13 +11487,6 @@ __metadata: languageName: node linkType: hard -"known-css-properties@npm:^0.29.0": - version: 0.29.0 - resolution: "known-css-properties@npm:0.29.0" - checksum: 10c0/f66e9992097b8f54e97dbe729943d4a11b8d3ba15f68dbb3deb8bb0122cb89c22c90c9221ecb1e3f2e236838fe3c0faae319b43908c81b6e254ac43cafde2906 - languageName: node - linkType: hard - "known-css-properties@npm:^0.35.0": version: 0.35.0 resolution: "known-css-properties@npm:0.35.0" @@ -11948,6 +11951,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:^2.12.2": + version: 2.13.0 + resolution: "mdn-data@npm:2.13.0" + checksum: 10c0/7f4cbba78ded58d63e28b7be68dc93a97cc4859d474b08e4570a9adb6cc57106c6b860a749b465a39be18eb8b010ad3b042b5d4d475f78fe1b3ea6156926bfa0 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -14143,7 +14153,7 @@ __metadata: languageName: node linkType: hard -"postcss-resolve-nested-selector@npm:^0.1.1, postcss-resolve-nested-selector@npm:^0.1.6": +"postcss-resolve-nested-selector@npm:^0.1.6": version: 0.1.6 resolution: "postcss-resolve-nested-selector@npm:0.1.6" checksum: 10c0/84213a2bccce481b1569c595a3c547b25c6ef1cca839fbd6c82c12ab407559966e968613c7454b573aa54f38cfd7e900c1fd603f0efc9f51939ab9f93f115455 @@ -14179,7 +14189,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": version: 6.1.2 resolution: "postcss-selector-parser@npm:6.1.2" dependencies: @@ -14315,11 +14325,11 @@ __metadata: linkType: hard "prettier@npm:^3.3.3": - version: 3.4.1 - resolution: "prettier@npm:3.4.1" + version: 3.4.2 + resolution: "prettier@npm:3.4.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 languageName: node linkType: hard @@ -14797,21 +14807,21 @@ __metadata: linkType: hard "react-redux@npm:^9.0.4, react-redux@npm:^9.1.2": - version: 9.1.2 - resolution: "react-redux@npm:9.1.2" + version: 9.2.0 + resolution: "react-redux@npm:9.2.0" dependencies: - "@types/use-sync-external-store": "npm:^0.0.3" - use-sync-external-store: "npm:^1.0.0" + "@types/use-sync-external-store": "npm:^0.0.6" + use-sync-external-store: "npm:^1.4.0" peerDependencies: - "@types/react": ^18.2.25 - react: ^18.0 + "@types/react": ^18.2.25 || ^19 + react: ^18.0 || ^19 redux: ^5.0.0 peerDependenciesMeta: "@types/react": optional: true redux: optional: true - checksum: 10c0/56ac98228e011b26e0202346af9c8dd408ad5ea8235d8761c8e05ea0953b8ca801cdf9d1f481fdec7b285d7f30ceef7238b46b3df7636ef77dd5c2ea8c5be5b2 + checksum: 10c0/00d485f9d9219ca1507b4d30dde5f6ff8fb68ba642458f742e0ec83af052f89e65cd668249b99299e1053cc6ad3d2d8ac6cb89e2f70d2ac5585ae0d7fa0ef259 languageName: node linkType: hard @@ -14867,8 +14877,8 @@ __metadata: linkType: hard "react-select@npm:^5.7.3": - version: 5.8.3 - resolution: "react-select@npm:5.8.3" + version: 5.9.0 + resolution: "react-select@npm:5.9.0" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -14878,11 +14888,11 @@ __metadata: memoize-one: "npm:^6.0.0" prop-types: "npm:^15.6.0" react-transition-group: "npm:^4.3.0" - use-isomorphic-layout-effect: "npm:^1.1.2" + use-isomorphic-layout-effect: "npm:^1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/25aaf0ad964a31dcf991be8b9eb478f94b2ff5dfd2e74a894f692c6dec9247f6ded6258fbf875984d2ada5aeb0ee742b85c6a94f58fae89112e913526cfd0577 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/f21f18ca41a8c866ab69f9c65253e86dcc5323477bbfc729bf6aa9d897e04e27cfffd13c07f10b70dc554e15ad1d238c1283e05e457bf4ead8526a1dd7fbc8b0 languageName: node linkType: hard @@ -14972,15 +14982,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.4.1": - version: 8.5.5 - resolution: "react-textarea-autosize@npm:8.5.5" + version: 8.5.6 + resolution: "react-textarea-autosize@npm:8.5.6" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/d708a31b39a409d0246cd8afbd956ce51db58ce0b6411b9d4e1dc876ce93c329d20875933ce5d337662fdcd3699596966dc630149236fee2835d74e302404c98 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/652d290d316c55a253507ecf65ca27f2162801dace10c715f2241203e81d82e9de6d282095b758b26c6bc9e1af9ca552cab5c3a361b230e5fcf25bec31e1bd25 languageName: node linkType: hard @@ -15653,8 +15663,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.82.0 - resolution: "sass@npm:1.82.0" + version: 1.83.0 + resolution: "sass@npm:1.83.0" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15665,7 +15675,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/7f86fe6ade4f6018862c448ed69d5c52f485b0125c9dab24e63f679739a04cc7c56562d588e3cf16b5efb4d2c4d0530e62740e1cfd273e2e3707d04d11011736 + checksum: 10c0/4415361229879a9041d77c953da85482e89032aa4321ba13250a9987d39c80fac6c88af3777f2a2d76a4e8b0c8afbd21c1970fdbe84e0b3ec25fb26741f92beb languageName: node linkType: hard @@ -16761,75 +16771,78 @@ __metadata: languageName: node linkType: hard -"stylelint-config-recommended-scss@npm:^14.0.0": - version: 14.0.0 - resolution: "stylelint-config-recommended-scss@npm:14.0.0" +"stylelint-config-recommended-scss@npm:^14.1.0": + version: 14.1.0 + resolution: "stylelint-config-recommended-scss@npm:14.1.0" dependencies: postcss-scss: "npm:^4.0.9" - stylelint-config-recommended: "npm:^14.0.0" - stylelint-scss: "npm:^6.0.0" + stylelint-config-recommended: "npm:^14.0.1" + stylelint-scss: "npm:^6.4.0" peerDependencies: postcss: ^8.3.3 - stylelint: ^16.0.2 + stylelint: ^16.6.1 peerDependenciesMeta: postcss: optional: true - checksum: 10c0/9ddc92e7a5fa131b41cee1ab1f69251934ca35c0e2803dc613329cdead7b8b27d8457048a63db29f61a1442e7cdef14207f88a3abce00ec53fdefe0d604f7de3 + checksum: 10c0/0a1c1bb6d9f7a21acea82e12fee1b36a195181ae1dd0d8b59145a56f76232a80d5b706269bc4ca4929680d36f10371bd8a7d0aeeee468fa9119a3b56410b052f languageName: node linkType: hard -"stylelint-config-recommended@npm:^14.0.0": - version: 14.0.0 - resolution: "stylelint-config-recommended@npm:14.0.0" - peerDependencies: - stylelint: ^16.0.0 - checksum: 10c0/4ad15c36e8c03291aa7bbe4b672ebfb0f46ab698e7580a0da8d29644046d102d7f31dbf00a2a6eab94b565c390c6fb0d5d528737b83ac3acf6dc2ef085a90b11 - languageName: node - linkType: hard - -"stylelint-config-standard-scss@npm:^13.0.0": - version: 13.1.0 - resolution: "stylelint-config-standard-scss@npm:13.1.0" - dependencies: - stylelint-config-recommended-scss: "npm:^14.0.0" - stylelint-config-standard: "npm:^36.0.0" - peerDependencies: - postcss: ^8.3.3 - stylelint: ^16.3.1 - peerDependenciesMeta: - postcss: - optional: true - checksum: 10c0/d07cae806ee8b3e77684f019a8b22cc32642373da8053e6ae7ed716f8ddbe6ea1f7323633a6a1bbc9aa08c6a3dceb1dcf053d83fdd10d076b5a01da6e86801ae - languageName: node - linkType: hard - -"stylelint-config-standard@npm:^36.0.0": - version: 36.0.0 - resolution: "stylelint-config-standard@npm:36.0.0" - dependencies: - stylelint-config-recommended: "npm:^14.0.0" +"stylelint-config-recommended@npm:^14.0.1": + version: 14.0.1 + resolution: "stylelint-config-recommended@npm:14.0.1" peerDependencies: stylelint: ^16.1.0 - checksum: 10c0/1fc9adddfc5cf0a1d7a443182a0731712a3950ace72a24081b4ede2b0bb6fc1eebd003c009f1d8d06c3a64ba9b31b0ed12512db2f91c8fa549238d8341580e4b + checksum: 10c0/a0a0ecd91f4d193bbe2cc3408228f8a2d8fcb2b2578d77233f86780c9247c796a04e16aad7a91d97cb918e2de34b6a8062bab66ee017c3835d855081d94f4828 languageName: node linkType: hard -"stylelint-scss@npm:^6.0.0": - version: 6.0.0 - resolution: "stylelint-scss@npm:6.0.0" +"stylelint-config-standard-scss@npm:^14.0.0": + version: 14.0.0 + resolution: "stylelint-config-standard-scss@npm:14.0.0" dependencies: - known-css-properties: "npm:^0.29.0" + stylelint-config-recommended-scss: "npm:^14.1.0" + stylelint-config-standard: "npm:^36.0.1" + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.11.0 + peerDependenciesMeta: + postcss: + optional: true + checksum: 10c0/b885f02d955060a8e0214fd8dc30bfc6d84cbdeb870d34ce0761b258914857bd22d537ac1c8ee9755bf4cd5b1f3b94f4ad0270c2ff4362df7d5eb8d95b35db5e + languageName: node + linkType: hard + +"stylelint-config-standard@npm:^36.0.1": + version: 36.0.1 + resolution: "stylelint-config-standard@npm:36.0.1" + dependencies: + stylelint-config-recommended: "npm:^14.0.1" + peerDependencies: + stylelint: ^16.1.0 + checksum: 10c0/7f9b954694358e77be5110418f31335be579ce59dd952bc3c6a9449265297db3170ec520e0905769253b48b99c3109a95c71f5b985bf402e48fd6c89b5364cb2 + languageName: node + linkType: hard + +"stylelint-scss@npm:^6.4.0": + version: 6.10.0 + resolution: "stylelint-scss@npm:6.10.0" + dependencies: + css-tree: "npm:^3.0.1" + is-plain-object: "npm:^5.0.0" + known-css-properties: "npm:^0.35.0" + mdn-data: "npm:^2.12.2" postcss-media-query-parser: "npm:^0.2.3" - postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-selector-parser: "npm:^6.0.13" + postcss-resolve-nested-selector: "npm:^0.1.6" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: stylelint: ^16.0.2 - checksum: 10c0/f5e971d19ef6879ae5c18cb8fba8033fe7928f241178e6afd80357cc080d2feddfd6f7fe564aaa696008aa10345df5885d9a4471c926b3e266088e015927782e + checksum: 10c0/9086109bc36b46ea5e62aef5c1793debbd973aaecb28ba65cadaaf6761a295db1e52f94e1a6bae7ee884e440fc36463e9686941fc652a5ce79045ee58cae5308 languageName: node linkType: hard -"stylelint@npm:^16.0.2": +"stylelint@npm:^16.11.0": version: 16.11.0 resolution: "stylelint@npm:16.11.0" dependencies: @@ -17787,15 +17800,15 @@ __metadata: languageName: node linkType: hard -"use-isomorphic-layout-effect@npm:^1.1.1, use-isomorphic-layout-effect@npm:^1.1.2": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" +"use-isomorphic-layout-effect@npm:^1.1.1, use-isomorphic-layout-effect@npm:^1.2.0": + version: 1.2.0 + resolution: "use-isomorphic-layout-effect@npm:1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d8deea8b85e55ac6daba237a889630bfdbf0ebf60e9e22b6a78a78c26fabe6025e04ada7abef1e444e6786227d921e648b2707db8b3564daf757264a148a6e23 + checksum: 10c0/2e4bdee68d65893b37e716ebdcc111550775189c80e662eda87d6f5b54dc431d3383a18914ea01a893ee5478902a878012713eaebcacbb6611ab88c463accb83 languageName: node linkType: hard @@ -17822,12 +17835,12 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.0.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" +"use-sync-external-store@npm:^1.4.0": + version: 1.4.0 + resolution: "use-sync-external-store@npm:1.4.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/ac4814e5592524f242921157e791b022efe36e451fe0d4fd4d204322d5433a4fc300d63b0ade5185f8e0735ded044c70bcf6d2352db0f74d097a238cebd2da02 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/ec011a5055962c0f6b509d6e78c0b143f8cd069890ae370528753053c55e3b360d3648e76cfaa854faa7a59eb08d6c5fb1015e60ffde9046d32f5b2a295acea5 languageName: node linkType: hard