diff --git a/Gemfile b/Gemfile index d740603d7d2..9e9a6b0d64c 100644 --- a/Gemfile +++ b/Gemfile @@ -82,7 +82,7 @@ gem 'sidekiq', '~> 6.4' gem 'sidekiq-scheduler', '~> 4.0' gem 'sidekiq-unique-jobs', '~> 7.1' gem 'sidekiq-bulk', '~> 0.2.0' -gem 'simple-navigation', '~> 4.3' +gem 'simple-navigation', '~> 4.4' gem 'simple_form', '~> 5.1' gem 'sprockets-rails', '~> 3.4', require: 'sprockets/railtie' gem 'stoplight', '~> 3.0.0' @@ -134,7 +134,7 @@ group :development do gem 'letter_opener', '~> 1.8' gem 'letter_opener_web', '~> 2.0' gem 'memory_profiler' - gem 'rubocop', '~> 1.29', require: false + gem 'rubocop', '~> 1.30', require: false gem 'rubocop-rails', '~> 2.14', require: false gem 'brakeman', '~> 5.2', require: false gem 'bundler-audit', '~> 0.9', require: false diff --git a/Gemfile.lock b/Gemfile.lock index bd8d0f27398..5cc23646191 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -536,7 +536,7 @@ GEM redis (4.5.1) redis-namespace (1.8.2) redis (>= 3.0.4) - regexp_parser (2.4.0) + regexp_parser (2.5.0) request_store (1.5.1) rack (>= 1.4) responders (3.0.1) @@ -571,13 +571,13 @@ GEM rspec-support (3.11.0) rspec_junit_formatter (0.5.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.29.1) + rubocop (1.30.0) parallel (~> 1.10) parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.17.0, < 2.0) + rubocop-ast (>= 1.18.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) rubocop-ast (1.18.0) @@ -619,7 +619,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 5.0, < 8.0) thor (>= 0.20, < 3.0) - simple-navigation (4.3.0) + simple-navigation (4.4.0) activesupport (>= 2.3.2) simple_form (5.1.0) actionpack (>= 5.2) @@ -825,7 +825,7 @@ DEPENDENCIES rspec-rails (~> 5.1) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.5) - rubocop (~> 1.29) + rubocop (~> 1.30) rubocop-rails (~> 2.14) ruby-progressbar (~> 1.11) sanitize (~> 6.0) @@ -834,7 +834,7 @@ DEPENDENCIES sidekiq-bulk (~> 0.2.0) sidekiq-scheduler (~> 4.0) sidekiq-unique-jobs (~> 7.1) - simple-navigation (~> 4.3) + simple-navigation (~> 4.4) simple_form (~> 5.1) simplecov (~> 0.21) sprockets (~> 3.7.2) diff --git a/app/controllers/admin/webhooks/secrets_controller.rb b/app/controllers/admin/webhooks/secrets_controller.rb new file mode 100644 index 00000000000..16af1cf7b6e --- /dev/null +++ b/app/controllers/admin/webhooks/secrets_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Admin + class Webhooks::SecretsController < BaseController + before_action :set_webhook + + def rotate + authorize @webhook, :rotate_secret? + @webhook.rotate_secret! + redirect_to admin_webhook_path(@webhook) + end + + private + + def set_webhook + @webhook = Webhook.find(params[:webhook_id]) + end + end +end diff --git a/app/controllers/admin/webhooks_controller.rb b/app/controllers/admin/webhooks_controller.rb new file mode 100644 index 00000000000..d6fb1a4eaf3 --- /dev/null +++ b/app/controllers/admin/webhooks_controller.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +module Admin + class WebhooksController < BaseController + before_action :set_webhook, except: [:index, :new, :create] + + def index + authorize :webhook, :index? + + @webhooks = Webhook.page(params[:page]) + end + + def new + authorize :webhook, :create? + + @webhook = Webhook.new + end + + def create + authorize :webhook, :create? + + @webhook = Webhook.new(resource_params) + + if @webhook.save + redirect_to admin_webhook_path(@webhook) + else + render :new + end + end + + def show + authorize @webhook, :show? + end + + def edit + authorize @webhook, :update? + end + + def update + authorize @webhook, :update? + + if @webhook.update(resource_params) + redirect_to admin_webhook_path(@webhook) + else + render :show + end + end + + def enable + authorize @webhook, :enable? + @webhook.enable! + redirect_to admin_webhook_path(@webhook) + end + + def disable + authorize @webhook, :disable? + @webhook.disable! + redirect_to admin_webhook_path(@webhook) + end + + def destroy + authorize @webhook, :destroy? + @webhook.destroy! + redirect_to admin_webhooks_path + end + + private + + def set_webhook + @webhook = Webhook.find(params[:id]) + end + + def resource_params + params.require(:webhook).permit(:url, events: []) + end + end +end diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index e665f4447b2..68017a5f1ef 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -50,7 +50,7 @@ const componentMap = { }; const messages = defineMessages({ - publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, + publish: { id: 'compose_form.publish', defaultMessage: 'Publish' }, }); const shouldHideFAB = path => path.match(/^\/statuses\/|^\/@[^/]+\/\d+|^\/publish|^\/explore|^\/getting-started|^\/start/); diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index e25b0d7ee92..8d261dbbc5c 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Verwyder hierdie keuse", "compose_form.poll.switch_to_multiple": "Verander die peiling na verskeie keuses", "compose_form.poll.switch_to_single": "Verander die peiling na 'n enkel keuse", - "compose_form.publish": "Toet", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Stoor veranderinge", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 2a592ffd269..f655b694c4d 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "إزالة هذا الخيار", "compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة", "compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط", - "compose_form.publish": "بوّق", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "احفظ التعديلات", "compose_form.sensitive.hide": "{count, plural, one {الإشارة إلى الوَسط كمُحتوى حسّاس} two{الإشارة إلى الوسطان كمُحتويان حسّاسان} other {الإشارة إلى الوسائط كمُحتويات حسّاسة}}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 148527b96e7..0f18f7376eb 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Desaniciar esta escoyeta", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Barritar", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 06d4760f019..69f4796ff8b 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Премахване на този избор", "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора", "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор", - "compose_form.publish": "Раздумай", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Маркиране на мултимедията като деликатна} other {Маркиране на мултимедиите като деликатни}}", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index e89f4690b85..912a7eb7e05 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন", "compose_form.poll.switch_to_multiple": "একাধিক পছন্দ অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", "compose_form.poll.switch_to_single": "একটি একক পছন্দের অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", - "compose_form.publish": "টুট", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index cbe7fc6cb26..c5559a277fe 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -41,7 +41,7 @@ "account.statuses_counter": "{count, plural, one {{counter} Toud} other {{counter} Toud}}", "account.unblock": "Diverzañ @{name}", "account.unblock_domain": "Diverzañ an domani {domain}", - "account.unblock_short": "Unblock", + "account.unblock_short": "Distankañ", "account.unendorse": "Paouez da lakaat war-wel war ar profil", "account.unfollow": "Diheuliañ", "account.unmute": "Diguzhat @{name}", @@ -92,7 +92,7 @@ "community.column_settings.local_only": "Nemet lec'hel", "community.column_settings.media_only": "Nemet Mediaoù", "community.column_settings.remote_only": "Nemet a-bell", - "compose.language.change": "Change language", + "compose.language.change": "Cheñch yezh", "compose.language.search": "Search languages...", "compose_form.direct_message_warning_learn_more": "Gouzout hiroc'h", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Lemel an dibab-mañ", "compose_form.poll.switch_to_multiple": "Kemmañ ar sontadeg evit aotren meur a zibab", "compose_form.poll.switch_to_single": "Kemmañ ar sontadeg evit aotren un dibab hepken", - "compose_form.publish": "Toudañ", + "compose_form.publish": "Embann", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Merkañ ar media evel kizidik", @@ -191,9 +191,9 @@ "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", "explore.search_results": "Disoc'hoù an enklask", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "Evidoc'h", "explore.title": "Ergerzhit", - "explore.trending_links": "News", + "explore.trending_links": "Keleier", "explore.trending_statuses": "Posts", "explore.trending_tags": "Gerioù-klik", "follow_recommendations.done": "Graet", @@ -295,11 +295,11 @@ "navigation_bar.bookmarks": "Sinedoù", "navigation_bar.community_timeline": "Red-amzer lec'hel", "navigation_bar.compose": "Skrivañ un toud nevez", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "Kemennadoù prevez", "navigation_bar.discover": "Dizoleiñ", "navigation_bar.domain_blocks": "Domanioù kuzhet", "navigation_bar.edit_profile": "Aozañ ar profil", - "navigation_bar.explore": "Explore", + "navigation_bar.explore": "Ergerzhit", "navigation_bar.favourites": "Ar re vuiañ-karet", "navigation_bar.filters": "Gerioù kuzhet", "navigation_bar.follow_requests": "Pedadoù heuliañ", @@ -394,16 +394,16 @@ "relative_time.seconds": "{number}eil", "relative_time.today": "hiziv", "reply_indicator.cancel": "Nullañ", - "report.block": "Block", + "report.block": "Stankañ", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", "report.categories.other": "Other", "report.categories.spam": "Spam", "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Choose the best match", "report.category.title": "Tell us what's going on with this {type}", - "report.category.title_account": "profile", + "report.category.title_account": "profil", "report.category.title_status": "post", - "report.close": "Done", + "report.close": "Graet", "report.comment.title": "Is there anything else you think we should know?", "report.forward": "Treuzkas da: {target}", "report.forward_hint": "War ur servijer all emañ ar c'hont-se. Kas dezhañ un adskrid disanv eus an danevell ivez?", @@ -455,7 +455,7 @@ "status.delete": "Dilemel", "status.detailed_status": "Gwel kaozeadenn munudek", "status.direct": "Kas ur c'hemennad prevez da @{name}", - "status.edit": "Edit", + "status.edit": "Aozañ", "status.edited": "Edited {date}", "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Enframmañ", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 4ca981f4b7f..5490bb6b712 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Elimina aquesta opció", "compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre diverses opcions", "compose_form.poll.switch_to_single": "Canvia l’enquesta per permetre una única opció", - "compose_form.publish": "Publicar", + "compose_form.publish": "Publica-ho", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Desa els canvis", "compose_form.sensitive.hide": "{count, plural, one {Marca contingut com a sensible} other {Marca contingut com a sensible}}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index a642c8a8142..e7c4dab715f 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "لابردنی ئەم هەڵبژاردەیە", "compose_form.poll.switch_to_multiple": "ڕاپرسی بگۆڕە بۆ ڕێگەدان بە چەند هەڵبژاردنێک", "compose_form.poll.switch_to_single": "گۆڕینی ڕاپرسی بۆ ڕێگەدان بە تاکە هەڵبژاردنێک", - "compose_form.publish": "توت", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "پاشکەوتی گۆڕانکاریەکان", "compose_form.sensitive.hide": "نیشانکردنی میدیا وەک هەستیار", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index d2db35f16e9..9172aea2e44 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Toglie sta scelta", "compose_form.poll.switch_to_multiple": "Cambià u scandagliu per accittà parechje scelte", "compose_form.poll.switch_to_single": "Cambià u scandagliu per ùn accittà ch'una scelta", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Indicà u media cum'è sensibile} other {Indicà i media cum'è sensibili}}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1c241379384..e1602dacf5b 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Odstranit tuto volbu", "compose_form.poll.switch_to_multiple": "Povolit u ankety výběr více možností", "compose_form.poll.switch_to_single": "Povolit u ankety výběr jediné možnosti", - "compose_form.publish": "Odeslat", + "compose_form.publish": "Zveřejnit", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Uložit změny", "compose_form.sensitive.hide": "{count, plural, one {Označit média za citlivá} few {Označit média za citlivá} many {Označit média za citlivá} other {Označit média za citlivá}}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index e22abb220a8..42fef473249 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Tynnu'r dewisiad", "compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", - "compose_form.publish": "Tŵt", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Cadw newidiadau", "compose_form.sensitive.hide": "Marcio cyfryngau fel eu bod yn sensitif", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 319040804a0..537fa6af690 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Fjern denne valgmulighed", "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype", "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype", - "compose_form.publish": "Udgiv", + "compose_form.publish": "Publicér", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Gem ændringer", "compose_form.sensitive.hide": "{count, plural, one {Markér medie som følsomt} other {Markér medier som følsomme}}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 320f9fb6bc8..8a77b212cc8 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -20,11 +20,11 @@ "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following": "Folgt", "account.following_counter": "{count, plural, one {{counter} Folgt} other {{counter} Folgt}}", - "account.follows.empty": "Dieses Profil folgt noch niemandem.", + "account.follows.empty": "Diesem Profil folgt niemand", "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", "account.joined": "Beigetreten am {date}", - "account.link_verified_on": "Besitz dieses Links wurde geprüft am {date}", + "account.link_verified_on": "Diesem Profil folgt niemand", "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf „gesperrt“ gesetzt. Die Person bestimmt manuell, wer ihm/ihr folgen darf.", "account.media": "Medien", "account.mention": "@{name} erwähnen", @@ -95,7 +95,7 @@ "compose.language.change": "Sprache ändern", "compose.language.search": "Sprachen durchsuchen...", "compose_form.direct_message_warning_learn_more": "Mehr erfahren", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Beiträge von Mastodon sind nicht Ende-zu-Ende verschlüsselt. Teile keine senible Infomartionen über Mastodon.", "compose_form.hashtag_warning": "Dieser Beitrag wird nicht durch Hashtags entdeckbar sein, weil er ungelistet ist. Nur öffentliche Beiträge tauchen in Hashtag-Zeitleisten auf.", "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.", "compose_form.lock_disclaimer.lock": "gesperrt", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben", "compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben", - "compose_form.publish": "Tröt", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Änderungen speichern", "compose_form.sensitive.hide": "Medien als NSFW markieren", @@ -171,7 +171,7 @@ "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!", "empty_column.direct": "Du hast noch keine Direktnachrichten. Sobald du eine sendest oder empfängst, wird sie hier zu sehen sein.", "empty_column.domain_blocks": "Es sind noch keine Domains versteckt.", - "empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder!", + "empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!", "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.", "empty_column.favourites": "Noch niemand hat diesen Beitrag favorisiert. Sobald es jemand tut, wird das hier angezeigt.", "empty_column.follow_recommendations": "Es sieht so aus, als könnten keine Vorschläge für dich generiert werden. Du kannst versuchen nach Leuten zu suchen, die du vielleicht kennst oder du kannst angesagte Hashtags erkunden.", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index b266e2f7b7d..d1557f23c9e 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -3307,7 +3307,7 @@ { "descriptors": [ { - "defaultMessage": "Toot", + "defaultMessage": "Publish", "id": "compose_form.publish" } ], @@ -3724,4 +3724,4 @@ ], "path": "app/javascript/mastodon/features/video/index.json" } -] +] \ No newline at end of file diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 43f5087f29d..6f324860c0a 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Αφαίρεση επιλογής", "compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές", "compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή", - "compose_form.publish": "Τουτ", + "compose_form.publish": "Δημοσίευση", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Αποθήκευση αλλαγών", "compose_form.sensitive.hide": "Σημείωσε τα πολυμέσα ως ευαίσθητα", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 51f8463cd53..71874cb45e6 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 2b26a0f9793..9abba0bfa7a 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Forigi ĉi tiu elekteblon", "compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn", "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", - "compose_form.publish": "Hup", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Konservi ŝanĝojn", "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 65a7b699fa3..78d81b38f74 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Quitar esta opción", "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples", "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción", - "compose_form.publish": "Enviar", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "¡{publish}!", "compose_form.save_changes": "Guardar cambios", "compose_form.sensitive.hide": "Marcar medio como sensible", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index c58ec5aa609..4e8a3c4c6f9 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -95,7 +95,7 @@ "compose.language.change": "Cambiar idioma", "compose.language.search": "Buscar idiomas...", "compose_form.direct_message_warning_learn_more": "Aprender mas", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Las publicaciones en Mastodon no están cifradas de extremo a extremo. No comparta ninguna información sensible en Mastodon.", "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", - "compose_form.publish": "Tootear", + "compose_form.publish": "Publish", "compose_form.publish_loud": "¡{publish}!", "compose_form.save_changes": "Guardar cambios", "compose_form.sensitive.hide": "Marcar multimedia como sensible", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index a7556a56069..0befa915306 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", - "compose_form.publish": "Tootear", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Guardar cambios", "compose_form.sensitive.hide": "{count, plural, one {Marcar material como sensible} other {Marcar material como sensible}}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index d5f85c54d2c..eb3425f7974 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eemalda see valik", "compose_form.poll.switch_to_multiple": "Muuda küsitlust lubamaks mitut valikut", "compose_form.poll.switch_to_single": "Muuda küsitlust lubamaks ainult ühte valikut", - "compose_form.publish": "Tuut", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Märgista meedia tundlikuks", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 4ab0c44be0b..c8182640a3b 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Kendu aukera hau", "compose_form.poll.switch_to_multiple": "Aldatu inkesta hainbat aukera onartzeko", "compose_form.poll.switch_to_single": "Aldatu inkesta aukera bakarra onartzeko", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Gorde aldaketak", "compose_form.sensitive.hide": "Markatu multimedia hunkigarri gisa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 1d14dc63e4b..c76c596ebf2 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "برداشتن این گزینه", "compose_form.poll.switch_to_multiple": "تبدیل به نظرسنجی چندگزینه‌ای", "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", - "compose_form.publish": "بوق", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "ذخیرهٔ تغییرات", "compose_form.sensitive.hide": "{count, plural, one {علامت‌گذاری رسانه به عنوان حساس} other {علامت‌گذاری رسانه‌ها به عنوان حساس}}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 586d9858a1a..fb3725664a4 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Poista tämä valinta", "compose_form.poll.switch_to_multiple": "Muuta kysely monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta kysely sallimaan vain yksi valinta", - "compose_form.publish": "Lähetä viesti", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Tallenna muutokset", "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluontoiseksi} other {Merkitse media arkaluontoiseksi}}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 65f289a2e71..0d8759e25e3 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Supprimer ce choix", "compose_form.poll.switch_to_multiple": "Changer le sondage pour autoriser plusieurs choix", "compose_form.poll.switch_to_single": "Changer le sondage pour autoriser qu'un seul choix", - "compose_form.publish": "Pouet", + "compose_form.publish": "Publier", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Enregistrer les modifications", "compose_form.sensitive.hide": "Marquer le média comme sensible", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json new file mode 100644 index 00000000000..f8485270a55 --- /dev/null +++ b/app/javascript/mastodon/locales/fy.json @@ -0,0 +1,549 @@ +{ + "account.account_note_header": "Note", + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.badges.group": "Groep", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domein blokkearre", + "account.edit_profile": "Profyl oanpasse", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Folgje", + "account.followers": "Folgers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following": "Folget", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Folget dy", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.joined": "Registrearre op {date}", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Fermeld @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.posts": "Posts", + "account.posts_with_replies": "Posts and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel follow request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Post} other {{counter} Posts}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unblock_short": "Unblock", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Net mear folgje", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account.unmute_short": "Net mear negearre", + "account_note.placeholder": "Click to add a note", + "admin.dashboard.daily_retention": "User retention rate by day after sign-up", + "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", + "admin.dashboard.retention.average": "Gemiddelde", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "Nije brûkers", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(net ferwurke)", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Slute", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Opnij probearje", + "column.blocks": "Blokkearre brûkers", + "column.bookmarks": "Blêdwizers", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blokkeare domeinen", + "column.favourites": "Favoriten", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Listen", + "column.mutes": "Negearre brûkers", + "column.notifications": "Notifikaasjes", + "column.pins": "Fêstsette berjochten", + "column.public": "Federated timeline", + "column_back_button.label": "Werom", + "column_header.hide_settings": "Ynstellings ferbergje", + "column_header.moveLeft_settings": "Kolom nei links ferpleatse", + "column_header.moveRight_settings": "Kolom nei rjochts ferpleatse", + "column_header.pin": "Fêstsette", + "column_header.show_settings": "Ynstellings sjen litte", + "column_header.unpin": "Los helje", + "column_subheading.settings": "Ynstellings", + "community.column_settings.local_only": "Allinnich lokaal", + "community.column_settings.media_only": "Allinnich media", + "community.column_settings.remote_only": "Allinnich oare tsjinners", + "compose.language.change": "Fan taal feroarje", + "compose.language.search": "Talen sykje...", + "compose_form.direct_message_warning_learn_more": "Lês mear", + "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "Wat wolst kwyt?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Publisearje", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Save changes", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Ynhâldswarskôging fuortsmite", + "compose_form.spoiler.unmarked": "Ynhâldswarskôging tafoegje", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Ofbrekke", + "confirmations.block.block_and_report": "Blokkearre & Oanjaan", + "confirmations.block.confirm": "Blokkearre", + "confirmations.block.message": "Wolle jo {name} werklik blokkearre?", + "confirmations.delete.confirm": "Fuortsmite", + "confirmations.delete.message": "Wolle jo dit berjocht werklik fuortsmite?", + "confirmations.delete_list.confirm": "Fuortsmite", + "confirmations.delete_list.message": "Wolle jo dizze list werklik foar ivich fuortsmite?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Wolle jo werklik útlogge?", + "confirmations.mute.confirm": "Negearre", + "confirmations.mute.explanation": "Dit sil berjochten fan harren ûnsichtber meitsje en berjochen wêr se yn fermeld wurde, mar se sille jo berjochten noch immen sjen kinne en jo folgje kinne.", + "confirmations.mute.message": "Wolle jo {name} werklik negearre?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Wolle jo dit berjocht werklik fuortsmite en opnij opstelle? Favoriten en boosts geane dan ferlern, en reaksjes op it oarspronklike berjocht reitsje jo kwyt.", + "confirmations.reply.confirm": "Reagearre", + "confirmations.reply.message": "Troch no te reagearjen sil it berjocht wat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo troch gean?", + "confirmations.unfollow.confirm": "Net mear folgje", + "confirmations.unfollow.message": "Wolle jo {name} werklik net mear folgje?", + "conversation.delete": "Petear fuortsmite", + "conversation.mark_as_read": "As lêzen oanmurkje", + "conversation.open": "Petear besjen", + "conversation.with": "Mei {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Resintlik warber", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.clear": "Clear", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No matching emojis found", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "Gjin berjochten hjir!", + "empty_column.account_unavailable": "Profyl net beskikber", + "empty_column.blocks": "Jo hawwe noch gjin brûkers blokkearre.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "Der binne noch gjin blokkearre domeinen.", + "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", + "empty_column.favourited_statuses": "You don't have any favourite posts yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this post yet. When someone does, they will show up here.", + "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home.suggestions": "Suggestjes besjen", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "Jo hawwe noch gjin brûkers negearre.", + "empty_column.notifications": "Jo hawwe noch gjin notifikaasjes. Ynteraksjes mei oare minsken sjogge jo hjir.", + "empty_column.public": "Der is hjir neat! Skriuw eat publyklik, of folgje sels brûkers fan oare tsjinners om it hjir te foljen", + "error.unexpected_crash.explanation": "Troch in bug in ús koade as in probleem mei de komptabiliteit fan jo browser, koe dizze side net sjen litten wurde.", + "error.unexpected_crash.explanation_addons": "Dizze side kin net goed sjen litten wurde. Dit probleem komt faaks troch in browser útwreiding of ark foar automatysk oersetten.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "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": "Technysk probleem oanjaan", + "explore.search_results": "Search results", + "explore.suggested_follows": "Foar jo", + "explore.title": "Ferkenne", + "explore.trending_links": "Nijs", + "explore.trending_statuses": "Berjochten", + "explore.trending_tags": "Hashtags", + "follow_recommendations.done": "Klear", + "follow_recommendations.heading": "Folgje minsken wer as jo graach berjochten fan sjen wolle! Hjir binne wat suggestjes.", + "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_request.authorize": "Goedkarre", + "follow_request.reject": "Ofkarre", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Bewarre", + "getting_started.developers": "Untwikkelders", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Dokumintaasje", + "getting_started.heading": "Utein sette", + "getting_started.invite": "Minsken útnûgje", + "getting_started.open_source_notice": "Mastodon is iepen boarne software. Jo kinne sels bydrage of problemen oanjaan troch GitHub op {github}.", + "getting_started.security": "Account ynstellings", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "en {additional}", + "hashtag.column_header.tag_mode.any": "of {additional}", + "hashtag.column_header.tag_mode.none": "sûnder {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "Skriuwer beneame", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "Jo profyl iepenje", + "keyboard_shortcuts.notifications": "Notifikaasjes sjen litte", + "keyboard_shortcuts.open_media": "Media iepenje", + "keyboard_shortcuts.pinned": "Fêstsette berjochten sjen litte", + "keyboard_shortcuts.profile": "Profyl fan skriuwer iepenje", + "keyboard_shortcuts.reply": "Berjocht beäntwurdzje", + "keyboard_shortcuts.requests": "Folgfersiken sjen litte", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "CW fjild ferstopje/sjen litte", + "keyboard_shortcuts.start": "\"Útein sette\" iepenje", + "keyboard_shortcuts.toggle_hidden": "Tekst efter CW fjild ferstopje/sjen litte", + "keyboard_shortcuts.toggle_sensitivity": "Media ferstopje/sjen litte", + "keyboard_shortcuts.toot": "Nij berjocht skriuwe", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "Nei boppe yn list ferpleatse", + "lightbox.close": "Slute", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Fierder", + "lightbox.previous": "Werom", + "limited_account_hint.action": "Profyl dochs besjen", + "limited_account_hint.title": "Dit profyl is ferstoppe troch de behearders fan jo tsjinner.", + "lists.account.add": "Oan list tafoegje", + "lists.account.remove": "Ut list wei smite", + "lists.delete": "List fuortsmite", + "lists.edit": "Edit list", + "lists.edit.submit": "Titel feroarje", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "Nije list titel", + "lists.replies_policy.followed": "Elke folge brûker", + "lists.replies_policy.list": "Leden fan de list", + "lists.replies_policy.none": "Net ien", + "lists.replies_policy.title": "Reaksjes sjen litte oan:", + "lists.search": "Search among people you follow", + "lists.subheading": "Jo listen", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", + "missing_indicator.label": "Net fûn", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Notifikaasjes fan dizze brûker ferstopje?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blokkearre brûkers", + "navigation_bar.bookmarks": "Blêdwiizers", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new post", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Untdekke", + "navigation_bar.domain_blocks": "Blokkearre domeinen", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.explore": "Explore", + "navigation_bar.favourites": "Favoriten", + "navigation_bar.filters": "Negearre wurden", + "navigation_bar.follow_requests": "Folgfersiken", + "navigation_bar.follows_and_followers": "Folgers en folgjenden", + "navigation_bar.info": "Oer dizze tsjinner", + "navigation_bar.keyboard_shortcuts": "Fluchtoetsen", + "navigation_bar.lists": "Listen", + "navigation_bar.logout": "Utlogge", + "navigation_bar.mutes": "Negearre brûkers", + "navigation_bar.personal": "Persoanlik", + "navigation_bar.pins": "Fêstsette berjochten", + "navigation_bar.preferences": "Foarkarren", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.admin.sign_up": "{name} hat harren ynskreaun", + "notification.favourite": "{name} hat jo berjocht as favoryt markearre", + "notification.follow": "{name} folget jo", + "notification.follow_request": "{name} hat jo in folgfersyk stjoerd", + "notification.mention": "{name} hat jo fermeld", + "notification.own_poll": "Jo poll is beëinige", + "notification.poll": "In poll wêr jo yn stimt ha is beëinige", + "notification.reblog": "{name} hat jo berjocht boost", + "notification.status": "{name} hat in berjocht pleatst", + "notification.update": "{name} hat in berjocht feroare", + "notifications.clear": "Notifikaasjes leegje", + "notifications.clear_confirmation": "Wolle jo al jo notifikaasjes werklik foar ivich fuortsmite?", + "notifications.column_settings.admin.sign_up": "Nije ynskriuwingen:", + "notifications.column_settings.alert": "Desktop notifikaasjes", + "notifications.column_settings.favourite": "Favoriten:", + "notifications.column_settings.filter_bar.advanced": "Alle kategorien sjen litte", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show_bar": "Show filter bar", + "notifications.column_settings.follow": "Nije folgers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Fermeldingen:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New posts:", + "notifications.column_settings.unread_notifications.category": "Unread notifications", + "notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications", + "notifications.column_settings.update": "Edits:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Fermeldingen", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# persoan} other {# minsken}}", + "poll.total_votes": "{count, plural, one {# stim} other {# stimmen}}", + "poll.vote": "Stim", + "poll.voted": "Jo hawwe hjir op stimt", + "poll.votes": "{votes, plural, one {# stim} other {# stimmen}}", + "poll_button.add_poll": "In poll tafoegje", + "poll_button.remove_poll": "Poll fuortsmite", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Allinnich sichtber foar fermelde brûkers", + "privacy.direct.short": "Allinnich fermelde minsken", + "privacy.private.long": "Allinnich sichtber foar folgers", + "privacy.private.short": "Allinnich folgers", + "privacy.public.long": "Sichtber foar elkenien", + "privacy.public.short": "Iepenbier", + "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", + "privacy.unlisted.short": "Unlisted", + "refresh": "Fernije", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.full.days": "{number, plural, one {# dei} other {# dagen}} lyn", + "relative_time.full.hours": "{number, plural, one {# oere} other {# oeren}} lyn", + "relative_time.full.just_now": "no krekt", + "relative_time.full.minutes": "{number, plural, one {# minút} other {# minuten}} lyn", + "relative_time.full.seconds": "{number, plural, one {# sekonde} other {# sekonden}} lyn", + "relative_time.hours": "{number}o", + "relative_time.just_now": "no", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "hjoed", + "reply_indicator.cancel": "Ofbrekke", + "report.block": "Blokkearre", + "report.block_explanation": "Jo sille harren berjochten net sjen kinne. Se sille jo berjochten net sjen kinne en jo net folgje kinne. Se sille wol sjen kinne dat se blokkearre binne.", + "report.categories.other": "Other", + "report.categories.spam": "Spam", + "report.categories.violation": "Ynhâld ferbrekt ien of mear tsjinner regels", + "report.category.subtitle": "Selektearje wat it bêst past", + "report.category.title": "Fertel ús wat der mei dit {type} oan de hân is", + "report.category.title_account": "profyl", + "report.category.title_status": "berjocht", + "report.close": "Klear", + "report.comment.title": "Tinke jo dat wy noch mear witte moatte?", + "report.forward": "Troch stjoere nei {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.mute": "Negearre", + "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.", + "report.next": "Fierder", + "report.placeholder": "Type or paste additional comments", + "report.reasons.dislike": "Ik fyn der neat oan", + "report.reasons.dislike_description": "It is net eat wat jo sjen wolle", + "report.reasons.other": "It is wat oars", + "report.reasons.other_description": "It probleem stiet der net tusken", + "report.reasons.spam": "It's spam", + "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", + "report.reasons.violation": "It violates server rules", + "report.reasons.violation_description": "You are aware that it breaks specific rules", + "report.rules.subtitle": "Select all that apply", + "report.rules.title": "Which rules are being violated?", + "report.statuses.subtitle": "Select all that apply", + "report.statuses.title": "Are there any posts that back up this report?", + "report.submit": "Submit report", + "report.target": "Report {target}", + "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", + "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", + "report.thanks.title": "Don't want to see this?", + "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", + "report.unfollow": "Unfollow @{name}", + "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.all": "All", + "search_results.hashtags": "Hashtags", + "search_results.nothing_found": "Could not find anything for these search terms", + "search_results.statuses": "Posts", + "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detaillearre oersjoch fan petear", + "status.direct": "Direct message @{name}", + "status.edit": "Edit", + "status.edited": "Edited {date}", + "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke", + "status.embed": "Ynslute", + "status.favourite": "Favorite", + "status.filtered": "Filtere", + "status.history.created": "{name} makke dit {date}", + "status.history.edited": "{name} feroare dit {date}", + "status.load_more": "Load more", + "status.media_hidden": "Media ferstoppe", + "status.mention": "Fermeld @{name}", + "status.more": "Mear", + "status.mute": "Negearje @{name}", + "status.mute_conversation": "Petear negearre", + "status.open": "Dit berjocht útflappe", + "status.pin": "Op profyl fêstsette", + "status.pinned": "Fêstset berjocht", + "status.read_more": "Lês mear", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} hat boost", + "status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.", + "status.redraft": "Fuortsmite en opnij opstelle", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reagearre", + "status.replyAll": "Op elkenien reagearre", + "status.report": "Jou @{name} oan", + "status.sensitive_warning": "Sensitive content", + "status.share": "Diele", + "status.show_less": "Minder sjen litte", + "status.show_less_all": "Foar alles minder sjen litte", + "status.show_more": "Mear sjen litte", + "status.show_more_all": "Foar alles mear sjen litte", + "status.show_thread": "Petear sjen litte", + "status.uncached_media_warning": "Net beskikber", + "status.unmute_conversation": "Petear net mear negearre", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifikaasjes", + "tabs_bar.search": "Sykje", + "time_remaining.days": "{number, plural, one {# dei} other {# dagen}} te gean", + "time_remaining.hours": "{number, plural, one {# oere} other {# oeren}} te gean", + "time_remaining.minutes": "{number, plural, one {# minút} other {# minuten}} te gean", + "time_remaining.moments": "Noch krekt even te gean", + "time_remaining.seconds": "{number, plural, one {# sekonde} other {# sekonden}} te gean", + "timeline_hint.remote_resource_not_displayed": "{resource} fan oare tsjinners wurde net sjen litten.", + "timeline_hint.resources.followers": "Folgers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Aldere berjochten", + "trends.counter_by_accounts": "{count, plural, one {{counter} persoan is} other {{counter} persoanen binne}} yn petear", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.description_missing": "No description added", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index f56e6d5faa5..bb9c4ac1f36 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -71,7 +71,7 @@ "column.bookmarks": "Leabharmharcanna", "column.community": "Local timeline", "column.direct": "Direct messages", - "column.directory": "Browse profiles", + "column.directory": "Brabhsáil próifílí", "column.domain_blocks": "Blocked domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", @@ -165,7 +165,7 @@ "emoji_button.travel": "Taisteal ⁊ Áiteanna", "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No posts found", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "Níl an phróifíl ar fáil", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", @@ -204,7 +204,7 @@ "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", "generic.saved": "Saved", "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Eolaire na próifíle", "getting_started.documentation": "Documentation", "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", @@ -247,11 +247,11 @@ "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "Oscail liosta na n-úsáideoirí balbhaithe", - "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.my_profile": "Oscail do phróifíl", "keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned posts list", - "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.profile": "Oscail próifíl an t-údar", "keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", @@ -267,8 +267,8 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Taispeáin an phróifíl ar aon nós", + "limited_account_hint.title": "Tá an phróifíl seo curtha i bhfolach ag na modhnóra do fhreastalaí.", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -401,7 +401,7 @@ "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Choose the best match", "report.category.title": "Tell us what's going on with this {type}", - "report.category.title_account": "profile", + "report.category.title_account": "próifíl", "report.category.title_status": "post", "report.close": "Déanta", "report.comment.title": "Is there anything else you think we should know?", @@ -470,7 +470,7 @@ "status.mute": "Balbhaigh @{name}", "status.mute_conversation": "Balbhaigh comhrá", "status.open": "Expand this status", - "status.pin": "Pin on profile", + "status.pin": "Pionnáil ar do phróifíl", "status.pinned": "Pinned post", "status.read_more": "Read more", "status.reblog": "Boost", @@ -491,7 +491,7 @@ "status.show_thread": "Show thread", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Díbhalbhaigh comhrá", - "status.unpin": "Unpin from profile", + "status.unpin": "Díphionnáil de do phróifíl", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 107130011df..1910e1037ef 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Thoir an roghainn seo air falbh", "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", - "compose_form.publish": "Postaich", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Sàbhail na h-atharraichean", "compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c42f9bab30d..0a6aac28752 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.poll.switch_to_multiple": "Mudar a enquisa para permitir múltiples escollas", "compose_form.poll.switch_to_single": "Mudar a enquisa para permitir unha soa escolla", - "compose_form.publish": "Toot", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Gardar cambios", "compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 21ef7a6c207..bc2485c6f86 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "הסר בחירה זו", "compose_form.poll.switch_to_multiple": "אפשרו בחירה מרובה בסקר", "compose_form.poll.switch_to_single": "אפשרו בחירה בודדת בסקר", - "compose_form.publish": "ללחוש", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "שמירת שינויים", "compose_form.sensitive.hide": "{count, plural, one {סימון מידע כרגיש} other {סימון מידע כרגיש}}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 5c3523c2dd1..df00850670d 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "इस विकल्प को हटाएँ", "compose_form.poll.switch_to_multiple": "कई विकल्पों की अनुमति देने के लिए पोल बदलें", "compose_form.poll.switch_to_single": "एक ही विकल्प के लिए अनुमति देने के लिए पोल बदलें", - "compose_form.publish": "टूट्", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "परिवर्तनों को सहेजें", "compose_form.sensitive.hide": "मीडिया को संवेदनशील के रूप में चिह्नित करें", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 4096c98d019..1ed57960e29 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Ukloni ovu opciju", "compose_form.poll.switch_to_multiple": "Omogući višestruki odabir opcija ankete", "compose_form.poll.switch_to_single": "Omogući odabir samo jedne opcije ankete", - "compose_form.publish": "Tootni", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Označi medijski sadržaj kao osjetljiv", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index ccaf9a4820f..403e9edfeb5 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Lehetőség törlése", "compose_form.poll.switch_to_multiple": "Szavazás megváltoztatása több választásosra", "compose_form.poll.switch_to_single": "Szavazás megváltoztatása egyetlen választásosra", - "compose_form.publish": "Tülk", + "compose_form.publish": "Közzététel", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Módosítások mentése", "compose_form.sensitive.hide": "{count, plural, one {Média kényesnek jelölése} other {Média kényesnek jelölése}}", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 63309c5c518..7d80b18d8fb 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Հեռացնել այս տարբերակը", "compose_form.poll.switch_to_multiple": "Հարցումը դարձնել բազմակի ընտրութեամբ", "compose_form.poll.switch_to_single": "Հարցումը դարձնել եզակի ընտրութեամբ", - "compose_form.publish": "Հրապարակել", + "compose_form.publish": "Publish", "compose_form.publish_loud": "Հրապարակե՜լ", "compose_form.save_changes": "Պահպանել փոփոխութիւնները", "compose_form.sensitive.hide": "Նշել մեդիան որպէս դիւրազգաց", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 35fad017096..9b8b6f5fedb 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Hapus opsi ini", "compose_form.poll.switch_to_multiple": "Ubah japat menjadi pilihan ganda", "compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal", - "compose_form.publish": "Toot", + "compose_form.publish": "Terbitkan", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Simpan perubahan", "compose_form.sensitive.hide": "{count, plural, other {Tandai media sebagai sensitif}}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index fc25e931df8..4c609edb7ff 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -33,12 +33,12 @@ "account.mute_notifications": "Silencigez avizi de @{name}", "account.muted": "Silencigata", "account.posts": "Mesaji", - "account.posts_with_replies": "Toots with replies", + "account.posts_with_replies": "Posti e respondi", "account.report": "Denuncar @{name}", "account.requested": "Vartante aprobo", "account.share": "Partigez profilo di @{name}", "account.show_reblogs": "Montrez busti de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Posto} other {{counter} Posti}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Unhide {domain}", "account.unblock_short": "Derestriktez", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Efacez ca selektajo", "compose_form.poll.switch_to_multiple": "Chanjez votposto por permisar multiselektaji", "compose_form.poll.switch_to_single": "Chanjez votposto por permisar una selektajo", - "compose_form.publish": "Siflar", + "compose_form.publish": "Publikigez", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Sparez chanji", "compose_form.sensitive.hide": "{count, plural,one {Markizez medii quale privata} other {Markizez medii quale privata}}", @@ -193,7 +193,7 @@ "explore.search_results": "Trovuri", "explore.suggested_follows": "Por vu", "explore.title": "Explorez", - "explore.trending_links": "Niuz", + "explore.trending_links": "Niuzi", "explore.trending_statuses": "Posti", "explore.trending_tags": "Hashtagi", "follow_recommendations.done": "Fina", @@ -350,7 +350,7 @@ "notifications.filter.follows": "Sequati", "notifications.filter.mentions": "Mencioni", "notifications.filter.polls": "Votpostorezulti", - "notifications.filter.statuses": "Niuz de personi quon vu sequas", + "notifications.filter.statuses": "Novaji de personi quon vu sequas", "notifications.grant_permission": "Donez permiso.", "notifications.group": "{count} avizi", "notifications.mark_as_read": "Markizez singla avizi quale lektita", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 845d0f8d537..2cdf3c2c06b 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Fjarlægja þennan valkost", "compose_form.poll.switch_to_multiple": "Breyta könnun svo hægt sé að hafa marga valkosti", "compose_form.poll.switch_to_single": "Breyta könnun svo hægt sé að hafa einn stakan valkost", - "compose_form.publish": "Tíst", + "compose_form.publish": "Birta", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Vista breytingar", "compose_form.sensitive.hide": "{count, plural, one {Merkja mynd sem viðkvæma} other {Merkja myndir sem viðkvæmar}}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index b68b71115d8..d2831624227 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Rimuovi questa scelta", "compose_form.poll.switch_to_multiple": "Modifica sondaggio per consentire scelte multiple", "compose_form.poll.switch_to_single": "Modifica sondaggio per consentire una singola scelta", - "compose_form.publish": "Toot", + "compose_form.publish": "Pubblica", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Salva modifiche", "compose_form.sensitive.hide": "Segna media come sensibile", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index f87167bf708..f5bf410e7b9 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -99,7 +99,7 @@ "compose.language.change": "言語を変更", "compose.language.search": "言語を検索...", "compose_form.direct_message_warning_learn_more": "もっと詳しく", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Mastodonの投稿はエンドツーエンド暗号化に対応していません。安全に送受信されるべき情報をMastodonで共有しないでください。", "compose_form.hashtag_warning": "この投稿は公開設定ではないのでハッシュタグの一覧に表示されません。公開投稿だけがハッシュタグで検索できます。", "compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。", "compose_form.lock_disclaimer.lock": "承認制", @@ -110,7 +110,7 @@ "compose_form.poll.remove_option": "この項目を削除", "compose_form.poll.switch_to_multiple": "複数選択に変更", "compose_form.poll.switch_to_single": "単一選択に変更", - "compose_form.publish": "トゥート", + "compose_form.publish": "投稿", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "変更を保存", "compose_form.sensitive.hide": "メディアを閲覧注意にする", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 2ded9c3505d..d97673fc4c8 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "ტუტი", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 37c4c9d0bdb..b19bb8e4995 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Sfeḍ afran-agi", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Jewweq", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Sekles ibeddilen", "compose_form.sensitive.hide": "Creḍ allal n teywalt d anafri", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 659c45db4c0..1364311ac3f 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Бұл жауапты өшір", "compose_form.poll.switch_to_multiple": "Бірнеше жауап таңдайтындай қылу", "compose_form.poll.switch_to_single": "Тек бір жауап таңдайтындай қылу", - "compose_form.publish": "Түрт", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Сезімтал ретінде белгіле", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index af99045bbfd..630431d391c 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 49712f6faa0..34fabbacf60 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "이 항목 삭제", "compose_form.poll.switch_to_multiple": "다중 선택이 가능한 투표로 변경", "compose_form.poll.switch_to_single": "단일 선택 투표로 변경", - "compose_form.publish": "뿌우", + "compose_form.publish": "게시", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "변경사항 저장", "compose_form.sensitive.hide": "미디어를 민감함으로 설정하기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 8c9cf6705ea..12c15e38978 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Vê hilbijarê rake", "compose_form.poll.switch_to_multiple": "Rapirsî yê biguherînin da ku destûr bidin vebijarkên pirjimar", "compose_form.poll.switch_to_single": "Rapirsîyê biguherîne da ku mafê bidî tenê vebijêrkek", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Guhertinan tomar bike", "compose_form.sensitive.hide": "{count, plural, one {Medya wekî hestiyar nîşan bide} other {Medya wekî hestiyar nîşan bide}}", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 555b39da5d1..6a8c9933afd 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Dilea'n dewis ma", "compose_form.poll.switch_to_multiple": "Chanjya sondyans dhe asa lies dewis", "compose_form.poll.switch_to_single": "Chanjya sondyans dhe asa unn dewis hepken", - "compose_form.publish": "Tout", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Merkya myski vel tender} other {Merkya myski vel tender}}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index a37b946b4af..afff3a79ca0 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 82fc40e321a..1a981ea0e47 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Noņemt šo izvēli", "compose_form.poll.switch_to_multiple": "Maini aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Maini aptaujas veidu, lai atļautu vienu izvēli", - "compose_form.publish": "Taurēt", + "compose_form.publish": "Publicēt", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Saglabāt izmaiņas", "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt mediju kā sensitīvu} other {Atzīmēt medijus kā sensitīvus}}", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index df7d84d4b60..1b868de075f 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Избриши избор", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Тутови", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Обележи медиа како сензитивна", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 69267f652e8..674f74dd6db 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "ഈ ഡിവൈസ് മാറ്റുക", "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്‌സുകൾ ഉൾപ്പെടുതുക", "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്‌സ്‌ മാത്രം ആക്കുക", - "compose_form.publish": "ടൂട്ട്", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{പ്രസിദ്ധീകരിക്കുക}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 6728c09992d..d9dafa222a2 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "हा पर्याय काढा", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 4cb6437f435..c3ca2596516 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Buang pilihan ini", "compose_form.poll.switch_to_multiple": "Ubah kepada membenarkan aneka undian", "compose_form.poll.switch_to_single": "Ubah kepada undian pilihan tunggal", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Tandakan media sbg sensitif} other {Tandakan media sbg sensitif}}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index d367454117f..76a631b5599 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Deze keuze verwijderen", "compose_form.poll.switch_to_multiple": "Poll wijzigen om meerdere keuzes toe te staan", "compose_form.poll.switch_to_single": "Poll wijzigen om een enkele keuze toe te staan", - "compose_form.publish": "Toot", + "compose_form.publish": "Toot!", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Wijzigingen opslaan", "compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 24a4e98b71c..cd802bed032 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Ta vekk dette valet", "compose_form.poll.switch_to_multiple": "Endre avstemninga til å tillate fleirval", "compose_form.poll.switch_to_single": "Endra avstemninga til tillate berre eitt val", - "compose_form.publish": "Tut", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Merk medium som sensitivt", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 78d145f55fd..c188a868b76 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Fjern dette valget", "compose_form.poll.switch_to_multiple": "Endre avstemning til å tillate flere valg", "compose_form.poll.switch_to_single": "Endre avstemning til å tillate ett valg", - "compose_form.publish": "Tut", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Merk media som sensitivt", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 4b094bcbd78..62c64acecae 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Levar aquesta opcion", "compose_form.poll.switch_to_multiple": "Cambiar lo sondatge per permetre de causidas multiplas", "compose_form.poll.switch_to_single": "Cambiar lo sondatge per permetre una sola causida", - "compose_form.publish": "Tut", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Salvar los cambiaments", "compose_form.sensitive.hide": "Marcar coma sensible", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 7b041a2084a..658a3318ee6 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index f34fc7740af..2878f71046f 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -110,7 +110,7 @@ "compose_form.poll.remove_option": "Usuń tę opcję", "compose_form.poll.switch_to_multiple": "Pozwól na wybranie wielu opcji", "compose_form.poll.switch_to_single": "Pozwól na wybranie tylko jednej opcji", - "compose_form.publish": "Wyślij", + "compose_form.publish": "Opublikuj", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Zapisz zmiany", "compose_form.sensitive.hide": "Oznacz multimedia jako wrażliwe", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 971f8aa94b8..71a57bcb45b 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remover opção", "compose_form.poll.switch_to_multiple": "Permitir múltiplas escolhas", "compose_form.poll.switch_to_single": "Opção única", - "compose_form.publish": "TOOT", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Salvar alterações", "compose_form.sensitive.hide": "{count, plural, one {Marcar mídia como sensível} other {Marcar mídias como sensível}}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 99ab7feb0d3..90285a70fe5 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eliminar esta opção", "compose_form.poll.switch_to_multiple": "Alterar a votação para permitir múltiplas escolhas", "compose_form.poll.switch_to_single": "Alterar a votação para permitir uma única escolha", - "compose_form.publish": "Toot", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Guardar alterações", "compose_form.sensitive.hide": "Marcar media como sensível", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 0756608ab82..34328e65ba8 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Elimină acestă opțiune", "compose_form.poll.switch_to_multiple": "Modifică sondajul pentru a permite mai multe opțiuni", "compose_form.poll.switch_to_single": "Modifică sondajul pentru a permite o singură opțiune", - "compose_form.publish": "Postează", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Marchează conținutul media ca fiind sensibil} few {Marchează conținuturile media ca fiind sensibile} other {Marchează conținuturile media ca fiind sensibile}}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index badae99c039..d6927e0e486 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Убрать этот вариант", "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", - "compose_form.publish": "Запостить", + "compose_form.publish": "Опубликовать", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Сохранить", "compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index fef1913cf3b..f0861f9bc8d 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "मतमेतन्नश्यताम्", "compose_form.poll.switch_to_multiple": "मतदानं परिवर्तयित्वा बहुवैकल्पिकमतदानं क्रियताम्", "compose_form.poll.switch_to_single": "मतदानं परिवर्तयित्वा निर्विकल्पमतदानं क्रियताम्", - "compose_form.publish": "दौत्यम्", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "संवेदनशीलसामग्रीत्यङ्यताम्", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 4c3c485c6ef..202caa5ca4d 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Boga custa optzione", "compose_form.poll.switch_to_multiple": "Muda su sondàgiu pro permìtere multi-optziones", "compose_form.poll.switch_to_single": "Muda su sondàgiu pro permìtere un'optzione isceti", - "compose_form.publish": "Tut", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Marca elementu multimediale comente a sensìbile} other {Marca elementos multimediales comente sensìbiles}}", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4c63e0eb44f..4d9e0d3b5de 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "මෙම තේරීම ඉවත් කරන්න", "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.publish": "පිඹින්න", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න}}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index d69adc3bd52..bec2fae642b 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Odstráň túto voľbu", "compose_form.poll.switch_to_multiple": "Zmeň anketu pre povolenie viacerých možností", "compose_form.poll.switch_to_single": "Zmeň anketu na takú s jedinou voľbou", - "compose_form.publish": "Pošli", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Ulož zmeny", "compose_form.sensitive.hide": "Označ médiá ako chúlostivé", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 9f9ab8a1e9d..5aa5d5ef36d 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Hiqe këtë zgjedhje", "compose_form.poll.switch_to_multiple": "Ndrysho votimin për të lejuar shumë zgjedhje", "compose_form.poll.switch_to_single": "Ndrysho votimin për të lejuar vetëm një zgjedhje", - "compose_form.publish": "Mesazh", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Ruaji ndryshimet", "compose_form.sensitive.hide": "{count, plural, one {Vëri shenjë medias si rezervat} other {Vëru shenjë mediave si rezervat}}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index b4e992a07e9..498cbf96382 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Tutni", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 159628b6c7f..1e6ec208654 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Одстрани овај избор", "compose_form.poll.switch_to_multiple": "Промените анкету да бисте омогућили више избора", "compose_form.poll.switch_to_single": "Промените анкету да бисте омогућили један избор", - "compose_form.publish": "Труби", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "Означи мултимедију као осетљиву", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index eb4efbc7ae9..46baa722ec7 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Ta bort detta val", "compose_form.poll.switch_to_multiple": "Ändra enkät för att tillåta flera val", "compose_form.poll.switch_to_single": "Ändra enkät för att tillåta ett enda val", - "compose_form.publish": "Tut", + "compose_form.publish": "Publicera", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Spara ändringar", "compose_form.sensitive.hide": "Markera media som känsligt", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 7b041a2084a..658a3318ee6 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 43508be0125..68b11b61b2d 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "இந்தத் தேர்வை அகற்று", "compose_form.poll.switch_to_multiple": "பல தேர்வுகளை அனுமதிக்குமாறு மாற்று", "compose_form.poll.switch_to_single": "ஒரே ஒரு தேர்வை மட்டும் அனுமதிக்குமாறு மாற்று", - "compose_form.publish": "டூட்", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "அனைவருக்கும் ஏற்றப் படம் இல்லை எனக் குறியிடு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 2bc2a29da5c..89683cb632e 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index a25a019fb0b..c84ecd00d54 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "ఈ ఎంపికను తొలగించు", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "టూట్", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 746fc16737e..5bc08533ee5 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "เอาตัวเลือกนี้ออก", "compose_form.poll.switch_to_multiple": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตหลายตัวเลือก", "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดี่ยว", - "compose_form.publish": "โพสต์", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "บันทึกการเปลี่ยนแปลง", "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index f98574e11a2..c813ee1c262 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Bu seçeneği kaldır", "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir", "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir", - "compose_form.publish": "Tootla", + "compose_form.publish": "Yayınla", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Değişiklikleri kaydet", "compose_form.sensitive.hide": "{count, plural, one {Medyayı hassas olarak işaretle} other {Medyayı hassas olarak işaretle}}", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index e05804d93c0..862325f1c19 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 7b041a2084a..658a3318ee6 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 012f3c0b853..32d5dce848a 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Видалити цей варіант", "compose_form.poll.switch_to_multiple": "Дозволити вибір декількох відповідей", "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді", - "compose_form.publish": "Надіслати", + "compose_form.publish": "Опублікувати", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Зберегти зміни", "compose_form.sensitive.hide": "{count, plural, one {Позначити медіа делікатним} other {Позначити медіа делікатними}}", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index d5ed07a9c3f..d4daaceb392 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "یہ انتخاب ہٹا دیں", "compose_form.poll.switch_to_multiple": "متعدد انتخاب کی اجازت دینے کے لیے پول تبدیل کریں", "compose_form.poll.switch_to_single": "کسی ایک انتخاب کے لیے پول تبدیل کریں", - "compose_form.publish": "ٹوٹ", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "وسائل کو حساس نشاندہ کریں", diff --git a/app/javascript/mastodon/locales/whitelist_fy.json b/app/javascript/mastodon/locales/whitelist_fy.json new file mode 100644 index 00000000000..0d4f101c7a3 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_fy.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 02b0ed56336..c6528fbe78c 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 8511543e6a0..a7bf96f9e99 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "移除此选项", "compose_form.poll.switch_to_multiple": "将投票改为多选", "compose_form.poll.switch_to_single": "将投票改为单选", - "compose_form.publish": "Toot!", + "compose_form.publish": "发布", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "保存更改", "compose_form.sensitive.hide": "{count, plural, one {将媒体标记为敏感内容} other {将媒体标记为敏感内容}}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index dc0b794dd90..d757b9daf08 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "移除此選擇", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為限定單一選項", - "compose_form.publish": "發文", + "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "標記媒體為敏感內容", diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 26c36c8a793..1dfb3d7eeab 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -203,6 +203,14 @@ $content-width: 840px; } } + h2 small { + font-size: 12px; + display: block; + font-weight: 500; + color: $darker-text-color; + line-height: 18px; + } + @media screen and (max-width: $no-columns-breakpoint) { border-bottom: 0; padding-bottom: 0; diff --git a/app/models/admin/action_log.rb b/app/models/admin/action_log.rb index 852bff71346..401bfd9accc 100644 --- a/app/models/admin/action_log.rb +++ b/app/models/admin/action_log.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # == Schema Information # # Table name: admin_action_logs diff --git a/app/models/report.rb b/app/models/report.rb index 6d416654016..2efb6d4a776 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -55,6 +55,8 @@ class Report < ApplicationRecord before_validation :set_uri, only: :create + after_create_commit :trigger_webhooks + def object_type :flag end @@ -143,4 +145,8 @@ class Report < ApplicationRecord errors.add(:rule_ids, I18n.t('reports.errors.invalid_rules')) unless rules.size == rule_ids&.size end + + def trigger_webhooks + TriggerWebhookWorker.perform_async('report.created', 'Report', id) + end end diff --git a/app/models/user.rb b/app/models/user.rb index a68442963b5..6d2d946250e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -37,7 +37,6 @@ # sign_in_token_sent_at :datetime # webauthn_id :string # sign_up_ip :inet -# skip_sign_in_token :boolean # class User < ApplicationRecord @@ -120,6 +119,7 @@ class User < ApplicationRecord before_validation :sanitize_languages before_create :set_approved after_commit :send_pending_devise_notifications + after_create_commit :trigger_webhooks # This avoids a deprecation warning from Rails 5.1 # It seems possible that a future release of devise-two-factor will @@ -182,7 +182,9 @@ class User < ApplicationRecord end def update_sign_in!(new_sign_in: false) - old_current, new_current = current_sign_in_at, Time.now.utc + old_current = current_sign_in_at + new_current = Time.now.utc + self.last_sign_in_at = old_current || new_current self.current_sign_in_at = new_current @@ -480,4 +482,8 @@ class User < ApplicationRecord def invite_text_required? Setting.require_invite_text && !invited? && !external? && !bypass_invite_request_check? end + + def trigger_webhooks + TriggerWebhookWorker.perform_async('account.created', 'Account', account_id) + end end diff --git a/app/models/webhook.rb b/app/models/webhook.rb new file mode 100644 index 00000000000..431edd75da2 --- /dev/null +++ b/app/models/webhook.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: webhooks +# +# id :bigint(8) not null, primary key +# url :string not null +# events :string default([]), not null, is an Array +# secret :string default(""), not null +# enabled :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class Webhook < ApplicationRecord + EVENTS = %w( + account.created + report.created + ).freeze + + scope :enabled, -> { where(enabled: true) } + + validates :url, presence: true, url: true + validates :secret, presence: true, length: { minimum: 12 } + validates :events, presence: true + + validate :validate_events + + before_validation :strip_events + before_validation :generate_secret + + def rotate_secret! + update!(secret: SecureRandom.hex(20)) + end + + def enable! + update!(enabled: true) + end + + def disable! + update!(enabled: false) + end + + private + + def validate_events + errors.add(:events, :invalid) if events.any? { |e| !EVENTS.include?(e) } + end + + def strip_events + self.events = events.map { |str| str.strip.presence }.compact if events.present? + end + + def generate_secret + self.secret = SecureRandom.hex(20) if secret.blank? + end +end diff --git a/app/policies/webhook_policy.rb b/app/policies/webhook_policy.rb new file mode 100644 index 00000000000..2c55703a1e4 --- /dev/null +++ b/app/policies/webhook_policy.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class WebhookPolicy < ApplicationPolicy + def index? + admin? + end + + def create? + admin? + end + + def show? + admin? + end + + def update? + admin? + end + + def enable? + admin? + end + + def disable? + admin? + end + + def rotate_secret? + admin? + end + + def destroy? + admin? + end +end diff --git a/app/presenters/webhooks/event_presenter.rb b/app/presenters/webhooks/event_presenter.rb new file mode 100644 index 00000000000..dac14a3f018 --- /dev/null +++ b/app/presenters/webhooks/event_presenter.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Webhooks::EventPresenter < ActiveModelSerializers::Model + attributes :type, :created_at, :object + + def initialize(type, object) + super() + + @type = type + @created_at = Time.now.utc + @object = object + end +end diff --git a/app/serializers/rest/admin/report_serializer.rb b/app/serializers/rest/admin/report_serializer.rb index 74bc0c52028..237f41d8e55 100644 --- a/app/serializers/rest/admin/report_serializer.rb +++ b/app/serializers/rest/admin/report_serializer.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class REST::Admin::ReportSerializer < ActiveModel::Serializer - attributes :id, :action_taken, :category, :comment, :created_at, :updated_at + attributes :id, :action_taken, :action_taken_at, :category, :comment, + :created_at, :updated_at has_one :account, serializer: REST::Admin::AccountSerializer has_one :target_account, serializer: REST::Admin::AccountSerializer diff --git a/app/serializers/rest/admin/webhook_event_serializer.rb b/app/serializers/rest/admin/webhook_event_serializer.rb new file mode 100644 index 00000000000..fe0ac23f986 --- /dev/null +++ b/app/serializers/rest/admin/webhook_event_serializer.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class REST::Admin::WebhookEventSerializer < ActiveModel::Serializer + def self.serializer_for(model, options) + case model.class.name + when 'Account' + REST::Admin::AccountSerializer + when 'Report' + REST::Admin::ReportSerializer + else + super + end + end + + attributes :event, :created_at + + has_one :virtual_object, key: :object + + def virtual_object + object.object + end + + def event + object.type + end +end diff --git a/app/services/base_service.rb b/app/services/base_service.rb index 99e8c875f4d..b0c0f9ec4b6 100644 --- a/app/services/base_service.rb +++ b/app/services/base_service.rb @@ -5,4 +5,8 @@ class BaseService include ActionView::Helpers::SanitizeHelper include RoutingHelper + + def call(*) + raise NotImplementedError + end end diff --git a/app/services/webhook_service.rb b/app/services/webhook_service.rb new file mode 100644 index 00000000000..aafa3831817 --- /dev/null +++ b/app/services/webhook_service.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class WebhookService < BaseService + def call(event, object) + @event = Webhooks::EventPresenter.new(event, object) + @body = serialize_event + + webhooks_for_event.each do |webhook_id| + Webhooks::DeliveryWorker.perform_async(webhook_id, @body) + end + end + + private + + def webhooks_for_event + Webhook.enabled.where('? = ANY(events)', @event.type).pluck(:id) + end + + def serialize_event + Oj.dump(ActiveModelSerializers::SerializableResource.new(@event, serializer: REST::Admin::WebhookEventSerializer, scope: nil, scope_name: :current_user).as_json) + end +end diff --git a/app/validators/url_validator.rb b/app/validators/url_validator.rb index f50abbe246e..75d1edb8739 100644 --- a/app/validators/url_validator.rb +++ b/app/validators/url_validator.rb @@ -2,7 +2,7 @@ class URLValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - record.errors.add(attribute, I18n.t('applications.invalid_url')) unless compliant?(value) + record.errors.add(attribute, :invalid) unless compliant?(value) end private diff --git a/app/views/admin/webhooks/_form.html.haml b/app/views/admin/webhooks/_form.html.haml new file mode 100644 index 00000000000..c1e8f8979bd --- /dev/null +++ b/app/views/admin/webhooks/_form.html.haml @@ -0,0 +1,11 @@ += simple_form_for @webhook, url: @webhook.new_record? ? admin_webhooks_path : admin_webhook_path(@webhook) do |f| + = render 'shared/error_messages', object: @webhook + + .fields-group + = f.input :url, wrapper: :with_block_label, input_html: { placeholder: 'https://' } + + .fields-group + = f.input :events, collection: Webhook::EVENTS, wrapper: :with_block_label, include_blank: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' + + .actions + = f.button :button, @webhook.new_record? ? t('admin.webhooks.add_new') : t('generic.save_changes'), type: :submit diff --git a/app/views/admin/webhooks/_webhook.html.haml b/app/views/admin/webhooks/_webhook.html.haml new file mode 100644 index 00000000000..d94a41eb3d8 --- /dev/null +++ b/app/views/admin/webhooks/_webhook.html.haml @@ -0,0 +1,19 @@ +.applications-list__item + = link_to admin_webhook_path(webhook), class: 'announcements-list__item__title' do + = fa_icon 'inbox' + = webhook.url + + .announcements-list__item__action-bar + .announcements-list__item__meta + - if webhook.enabled? + %span.positive-hint= t('admin.webhooks.enabled') + - else + %span.negative-hint= t('admin.webhooks.disabled') + + • + + %abbr{ title: webhook.events.join(', ') }= t('admin.webhooks.enabled_events', count: webhook.events.size) + + %div + = table_link_to 'pencil', t('admin.webhooks.edit'), edit_admin_webhook_path(webhook) if can?(:update, webhook) + = table_link_to 'trash', t('admin.webhooks.delete'), admin_webhook_path(webhook), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, webhook) diff --git a/app/views/admin/webhooks/edit.html.haml b/app/views/admin/webhooks/edit.html.haml new file mode 100644 index 00000000000..3dc0ace9bfb --- /dev/null +++ b/app/views/admin/webhooks/edit.html.haml @@ -0,0 +1,4 @@ +- content_for :page_title do + = t('admin.webhooks.edit') + += render partial: 'form' diff --git a/app/views/admin/webhooks/index.html.haml b/app/views/admin/webhooks/index.html.haml new file mode 100644 index 00000000000..e4499e078bf --- /dev/null +++ b/app/views/admin/webhooks/index.html.haml @@ -0,0 +1,18 @@ +- content_for :page_title do + = t('admin.webhooks.title') + +- content_for :heading_actions do + = link_to t('admin.webhooks.add_new'), new_admin_webhook_path, class: 'button' if can?(:create, :webhook) + +%p= t('admin.webhooks.description_html') + +%hr.spacer/ + +- if @webhooks.empty? + %div.muted-hint.center-text + = t 'admin.webhooks.empty' +- else + .applications-list + = render partial: 'webhook', collection: @webhooks + + = paginate @webhooks diff --git a/app/views/admin/webhooks/new.html.haml b/app/views/admin/webhooks/new.html.haml new file mode 100644 index 00000000000..1258df74abe --- /dev/null +++ b/app/views/admin/webhooks/new.html.haml @@ -0,0 +1,4 @@ +- content_for :page_title do + = t('admin.webhooks.new') + += render partial: 'form' diff --git a/app/views/admin/webhooks/show.html.haml b/app/views/admin/webhooks/show.html.haml new file mode 100644 index 00000000000..cc450de26db --- /dev/null +++ b/app/views/admin/webhooks/show.html.haml @@ -0,0 +1,34 @@ +- content_for :page_title do + = t('admin.webhooks.title') + +- content_for :heading do + %h2 + %small + = fa_icon 'inbox' + = t('admin.webhooks.webhook') + = @webhook.url + +- content_for :heading_actions do + = link_to t('admin.webhooks.edit'), edit_admin_webhook_path, class: 'button' if can?(:update, @webhook) + +.table-wrapper + %table.table.horizontal-table + %tbody + %tr + %th= t('admin.webhooks.status') + %td + - if @webhook.enabled? + %span.positive-hint= t('admin.webhooks.enabled') + = table_link_to 'power-off', t('admin.webhooks.disable'), disable_admin_webhook_path(@webhook), method: :post if can?(:disable, @webhook) + - else + %span.negative-hint= t('admin.webhooks.disabled') + = table_link_to 'power-off', t('admin.webhooks.enable'), enable_admin_webhook_path(@webhook), method: :post if can?(:enable, @webhook) + %tr + %th= t('admin.webhooks.events') + %td + %abbr{ title: @webhook.events.join(', ') }= t('admin.webhooks.enabled_events', count: @webhook.events.size) + %tr + %th= t('admin.webhooks.secret') + %td + %samp= @webhook.secret + = table_link_to 'refresh', t('admin.webhooks.rotate_secret'), rotate_admin_webhook_secret_path(@webhook), method: :post if can?(:rotate_secret, @webhook) diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index ec3629dd848..f3ef00f9d67 100644 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -22,7 +22,10 @@ .content-wrapper .content .content-heading - %h2= yield :page_title + - if content_for?(:heading) + = yield :heading + - else + %h2= yield :page_title - if :heading_actions .content-heading-actions diff --git a/app/workers/trigger_webhook_worker.rb b/app/workers/trigger_webhook_worker.rb new file mode 100644 index 00000000000..2ffb6246f16 --- /dev/null +++ b/app/workers/trigger_webhook_worker.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class TriggerWebhookWorker + include Sidekiq::Worker + + def perform(event, class_name, id) + object = class_name.constantize.find(id) + WebhookService.new.call(event, object) + rescue ActiveRecord::RecordNotFound + true + end +end diff --git a/app/workers/webhooks/delivery_worker.rb b/app/workers/webhooks/delivery_worker.rb new file mode 100644 index 00000000000..b1e345c5efb --- /dev/null +++ b/app/workers/webhooks/delivery_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class Webhooks::DeliveryWorker + include Sidekiq::Worker + include JsonLdHelper + + sidekiq_options queue: 'push', retry: 16, dead: false + + def perform(webhook_id, body) + @webhook = Webhook.find(webhook_id) + @body = body + @response = nil + + perform_request + rescue ActiveRecord::RecordNotFound + true + end + + private + + def perform_request + request = Request.new(:post, @webhook.url, body: @body) + + request.add_headers( + 'Content-Type' => 'application/json', + 'X-Hub-Signature' => "sha256=#{signature}" + ) + + request.perform do |response| + raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) + end + end + + def signature + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @webhook.secret, @body) + end +end diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index d5f19ca6494..720b0f5e30b 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -21,6 +21,14 @@ en: username: invalid: must contain only letters, numbers and underscores reserved: is reserved + admin/webhook: + attributes: + url: + invalid: is not a valid URL + doorkeeper/application: + attributes: + website: + invalid: is not a valid URL status: attributes: reblog: diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml new file mode 100644 index 00000000000..a3398cfbab0 --- /dev/null +++ b/config/locales/activerecord.fy.yml @@ -0,0 +1,24 @@ +--- +fy: + activerecord: + attributes: + poll: + options: Karren + user: + email: E-mailadres + locale: Taal + password: Wachtwurd + user/account: + username: Brûkersnamme + user/invite_request: + text: Reden + errors: + models: + account: + attributes: + username: + invalid: mei allinnich letters, nûmers en ûnderstreekjes befetsje + user: + attributes: + email: + unreachable: liket net te bestean diff --git a/config/locales/br.yml b/config/locales/br.yml index 07e12a53127..f7c06057941 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -10,6 +10,8 @@ br: discover_users: Dizoleiñ implijer·ien·ezed learn_more: Gouzout hiroc'h privacy_policy: Reolennoù prevezded + rules: Reolennoù ar servijer + server_stats: 'Stadegoù ar servijer:' source_code: Boneg tarzh status_count_after: few: toud @@ -36,6 +38,7 @@ br: other: Heulier·ez two: Heulier·ez following: O heuliañ + media: Media posts: few: Toud many: Toud @@ -52,6 +55,7 @@ br: unfollow: Diheuliañ admin: accounts: + avatar: Avatar by_domain: Domani change_email: current_email: Postel bremanel @@ -60,6 +64,7 @@ br: submit: Kemm ar postel deleted: Dilamet domain: Domani + edit: Aozañ email: Postel enable: Gweredekaat enabled: Gweredekaet diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 461d27fa3c1..f0efd3f5038 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -428,6 +428,7 @@ ca: destroyed_msg: El bloqueig de domini s'ha desfet domain: Domini edit: Editar el bloqueig del domini + existing_domain_block: Ja s'han imposat mesures més estrictes a %{name}. existing_domain_block_html: Ja has imposat uns límits més estrictes a %{name}, l'hauries de desbloquejar-lo primer. new: create: Crea un bloqueig diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 9244ddeac31..0140d412768 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -76,7 +76,7 @@ cs: last_active: naposledy aktivní link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date} media: Média - moved_html: "%{name} se přesunul a na %{new_profile_link}:" + moved_html: 'Uživatel %{name} se přesunul na %{new_profile_link}:' network_hidden: Tato informace není k dispozici nothing_here: Nic tu není! people_followed_by: Lidé, které sleduje %{name} @@ -209,8 +209,8 @@ cs: security_measures: only_password: Pouze heslo password_and_2fa: Heslo a 2FA - sensitive: Citlivý - sensitized: označen jako citlivý + sensitive: Vynutit citlivost + sensitized: Označen jako citlivý shared_inbox_url: URL sdílené příchozí schránky show: created_reports: Vytvořená hlášení @@ -228,10 +228,10 @@ cs: unblock_email: Odblokovat e-mailovou adresu unblocked_email_msg: E-mailová adresa %{username} byla úspěšně odblokována unconfirmed_email: Nepotvrzený e-mail - undo_sensitized: Vrátit zpět citlivost + undo_sensitized: Zrušit vynucení citlivosti undo_silenced: Zrušit omezení undo_suspension: Zrušit pozastavení - unsilenced_msg: Omezení účtu %{username} úspěšně odstraněno + unsilenced_msg: Omezení účtu %{username} úspěšně zrušeno unsubscribe: Přestat odebírat unsuspended_msg: Úspěšně obnoven účet %{username} username: Uživatelské jméno @@ -279,12 +279,12 @@ cs: reopen_report: Znovu otevřít hlášení reset_password_user: Obnovit heslo resolve_report: Označit hlášení jako vyřešené - sensitive_account: Označit média ve vašem účtu jako citlivá + sensitive_account: Vynucení citlivosti účtu silence_account: Omezit účet suspend_account: Pozastavit účet unassigned_report: Zrušit přiřazení hlášení unblock_email_account: Odblokovat e-mailovou adresu - unsensitive_account: Zrušit označení médií ve vašem účtu jako citlivých + unsensitive_account: Zrušit vynucení citlivosti účtu unsilence_account: Zrušit omezení účtu unsuspend_account: Zrušit pozastavení účtu update_announcement: Aktualizovat oznámení @@ -331,12 +331,12 @@ cs: reset_password_user_html: Uživatel %{name} obnovil heslo uživatele %{target} resolve_report_html: Uživatel %{name} vyřešil hlášení %{target} sensitive_account_html: "%{name} označil média účtu %{target} jako citlivá" - silence_account_html: Uživatel %{name} ztišil uživatele %{target} + silence_account_html: Uživatel %{name} omezil účet %{target} suspend_account_html: Uživatel %{name} pozastavil účet uživatele %{target} unassigned_report_html: Uživatel %{name} odebral hlášení %{target} unblock_email_account_html: Uživatel %{name} odblokoval e-mailovou adresu %{target} unsensitive_account_html: "%{name} zrušil označení médií účtu %{target} jako citlivých" - unsilence_account_html: Uživatel %{name} zrušil ztišení uživatele %{target} + unsilence_account_html: Uživatel %{name} zrušil omezení účtu %{target} unsuspend_account_html: Uživatel %{name} zrušil pozastavení účtu uživatele %{target} update_announcement_html: Uživatel %{name} aktualizoval oznámení %{target} update_custom_emoji_html: Uživatel %{name} aktualizoval emoji %{target} @@ -443,10 +443,11 @@ cs: domain_blocks: add_new: Přidat novou blokaci domény created_msg: Blokace domény se právě vyřizuje - destroyed_msg: Blokace domény byla vrácena + destroyed_msg: Blokace domény byla odvolána domain: Doména edit: Upravit blokaci domény - existing_domain_block_html: Pro účet %{name} jste už nastavili přísnější omezení, nejprve jej odblokujte. + existing_domain_block: Pro %{name} už jste nastavili přísnější omezení. + existing_domain_block_html: Pro %{name} už jste nastavili přísnější omezení, nejprve ji odblokujte. new: create: Vytvořit blokaci hint: Blokace domény nezakáže vytváření záznamů účtů v databázi, ale bude na tyto účty zpětně a automaticky aplikovat specifické metody moderování. @@ -466,7 +467,7 @@ cs: reject_media_hint: Odstraní lokálně uložené mediální soubory a odmítne jejich stahování v budoucnosti. Nepodstatné pro pozastavení reject_reports: Odmítat hlášení reject_reports_hint: Ignorovat všechna hlášení pocházející z této domény. Nepodstatné pro pozastavení - undo: Vrátit blokaci domény + undo: Odvolat blokaci domény view: Zobrazit blokaci domény email_domain_blocks: add_new: Přidat @@ -1332,7 +1333,7 @@ cs: code_hint: Pro potvrzení zadejte kód vygenerovaný Vaší ověřovací aplikací description_html: Zapnete-li dvoufázové ověřování pomocí ověřovací aplikace, k přihlášení budete u sebe muset mít svůj mobil, který pro Vás bude generovat kódy k opsání. enable: Zapnout - instructions_html: "Naskenujte tento QR kód do Google Authenticator nebo podobné TOTP aplikace na Vašem telefonu. Následně bude tato aplikace generovat kódy, které budete zadávat při přihlašování." + instructions_html: "Naskenujte tento QR kód do Google Authenticator nebo podobné TOTP aplikace na svém telefonu. Následně bude tato aplikace generovat kódy, které budete zadávat při přihlašování." manual_instructions: 'Nemůžete-li načíst QR kód a potřebujete ho zadat ručně, zde je tajemství v textové podobě:' setup: Nastavit wrong_code: Zadaný kód je neplatný! Je čas na serveru i zařízení generujícím kód správný? @@ -1404,7 +1405,7 @@ cs: account: Veřejné příspěvky od @%{acct} tag: 'Veřejné příspěvky s hashtagem #%{hashtag}' scheduled_statuses: - over_daily_limit: Překročili jste limit %{limit} příspěvků naplánovaných na tento den + over_daily_limit: Pro dnešek jste překročili limit %{limit} naplánovaných příspěvků over_total_limit: Překročili jste limit %{limit} naplánovaných příspěvků too_soon: Plánované datum musí být v budoucnosti sessions: diff --git a/config/locales/da.yml b/config/locales/da.yml index b1c26b68b01..0195aa5a3e7 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -428,6 +428,7 @@ da: destroyed_msg: Domæneblokering er blevet fjernet domain: Domæne edit: Redigér domæneblokering + existing_domain_block: "%{name} er allerede pålagt strengere restriktioner." existing_domain_block_html: Der har allerede pålagt %{name} strengere begrænsninger, så dette kræver først en afblokering. new: create: Opret blokering diff --git a/config/locales/de.yml b/config/locales/de.yml index abe988a987e..a52841a3967 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1525,6 +1525,55 @@ de: tags: does_not_match_previous_name: entspricht nicht dem vorherigen Namen terms: + body_html: | +

Datenschutzerklärung

+

Welche Informationen sammeln wir?

+ +
+

Für was verwenden wir deine Informationen?

+

Jede der von dir gesammelten Information kann in den folgenden Weisen verwendet werden:

+ +
+

Wie beschützen wir deine Informationen?

+

Wir implementieren eine Reihe von Sicherheitsmaßnahmen, um die Sicherheit deiner persönlichen Information sicherzustellen, wenn du persönliche Informationen eingibst, übermittelst oder auf sie zugreifst. Neben anderen Dingen, wird sowohl deine Browsersitzung, als auch der Datenverkehr zwischen deinen Anwendungen und der Programmierschnittstelle (API) mit SSL gesichert, dein Passwort wird mit einem starken Einwegalgorithmus gehasht. Du kannst Zwei-Faktor-Authentifizierung aktivieren, um den Zugriff auf dein Konto zusätzlich abzusichern.

+
+

Was ist unsere Datenspeicherungsrichtlinie?

+

Wir werden mit bestem Wissen und Gewissen:

+ +

Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.

+

Es ist in den meisten Fällen möglich dein Konto jederzeit eigenmächtig unwiderruflich zu löschen.

+
+

Verwenden wir Cookies?

+

Ja. Cookies sind kleine Dateien, die eine Webseite oder ihr Serviceanbieter über deinen Webbrowser (sofern er es erlaubt) auf die Festplatte deines Computers überträgt. Diese Cookies ermöglichen es der Seite deinen Browser wiederzuerkennen und, sofern du ein registriertes Konto hast, diesen mit deinem registrierten Konto zu verknüpfen.

+

Wir verwenden Cookies, um deine Einstellungen zu verstehen und für zukünftige Besuche zu speichern.

+
+

Offenbaren wir Informationen an Dritte?

+

Wir verkaufen nicht, handeln nicht mit oder übertragen deine persönlich identifizierbaren Informationen nicht an Dritte. Dies beinhaltet nicht Dritte, die vertrauenswürdig sind und uns beim Betreiben unserer Seite, Leiten unseres Geschäftes oder dabei, die Dienste für dich bereitzustellen, unterstützen, sofern diese Dritte zustimmen, diese Informationen vertraulich zu halten. Wir können auch Informationen freigeben, wenn wir glauben, dass Freigabe angemessen ist, um dem Gesetz zu entsprechen, unsere Seitenrichtlinien durchzusetzen oder unsere Rechte, Eigentum und/oder Sicherheit oder die anderer zu beschützen.

+

Dein öffentlicher Inhalt kann durch andere Server im Netzwerk heruntergeladen werden. Deine öffentlichen und "Nur Folgende"-Beiträge werden an die Server ausgeliefert, bei denen sich deine Folgenden befinden und direkte Nachrichten werden an die Server des Empfängers ausgeliefert, falls diese Folgenden oder Empfänger sich auf einem anderen Server als diesen befinden.

+

Wenn du eine Anwendung autorisierst, dein Konto zu benutzen, kann diese – abhängig von den von dir genehmigten Befugnissen – auf deine öffentlichen Profilinformationen, deine Folgt- und Folgende-Liste, deine Listen, alle deine Beiträge und deine Favoriten zugreifen. Anwendungen können nie auf deine E-Mail-Adresse oder dein Passwort zugreifen

+
+

Webseitenbenutzung durch Kinder

+

Wenn sich dieser Server in der EU oder im Europäischen Wirtschaftsraum befindet: Unsere Website, Produkte und Dienstleistungen sind alle an Leute gerichtet, die mindestens 16 Jahre als sind. Wenn du unter 16 bist, darfst du nach den Bestimmungen der DSGVO (Datenschutz-Grundverordnung) diese Webseite nicht benutzen.

+

Wenn sich dieser Server in den USA befindet: Unsere Webseite, Produkte und Dienstleistungen sind alle an Leute gerichtet, die mindestens 13 Jahre alt sind. Wenn du unter 13 bist, darfst du nach den Bestimmungen des COPPA (Children's Online Privacy Protection Act, dt. "Gesetz zum Schutz der Privatsphäre von Kindern im Internet") diese Webseite nicht benutzen.

+

Gesetzesvorschriften können unterschiedlich sein, wenn sich dieser Server in anderer Gerichtsbarkeit befindet.

+
+

Änderung an unserer Datenschutzerklärung

+

Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wir diese Änderungen auf dieser Seite bekannt gegeben.

+

Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion.

+

Dieses Dokument ist CC-BY-SA. Es wurde zuletzt aktualisiert am 26. Mai 2022.

+

Ursprünglich übernommen von der Discourse-Datenschutzerklärung.

title: "%{instance} Nutzungsbedingungen und Datenschutzerklärung" themes: contrast: Mastodon (Hoher Kontrast) diff --git a/config/locales/devise.fy.yml b/config/locales/devise.fy.yml new file mode 100644 index 00000000000..e96c4089dc2 --- /dev/null +++ b/config/locales/devise.fy.yml @@ -0,0 +1,7 @@ +--- +fy: + devise: + failure: + inactive: Jo account is not net aktivearre. + passwords: + updated_not_active: Jo wachtwurd is mei sukses feroare. diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml new file mode 100644 index 00000000000..38527486856 --- /dev/null +++ b/config/locales/doorkeeper.fy.yml @@ -0,0 +1,23 @@ +--- +fy: + activerecord: + attributes: + doorkeeper/application: + name: Namme fan applikaasje + website: Webstee fan applikaasje + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: mei gjin fragmint befetsje. + invalid_uri: moat in jildige URI wêze. + relative_uri: moat in absolute URI wêze. + secured_uri: moat in HTTPS/SSL URI wêze. + doorkeeper: + grouped_scopes: + title: + conversations: Petearen + scopes: + write:conversations: petearen negearre en fuortsmite + write:mutes: minsken en petearen negearre diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index ff0e4872043..7f4cca82b1c 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -76,6 +76,7 @@ ru: last_used_at: Последнее использование %{date} never_used: Не использовалось scopes: Разрешения + superapp: Внутреннее title: Ваши авторизованные приложения errors: messages: diff --git a/config/locales/el.yml b/config/locales/el.yml index 47f7097e8d5..1320dcbb40e 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -340,6 +340,7 @@ el: destroyed_msg: Ο αποκλεισμός τομέα άρθηκε domain: Τομέας edit: Διαχείρηση αποκλεισμένου τομέα + existing_domain_block: Έχετε ήδη επιβάλει αυστηρότερα όρια στο %{name}. existing_domain_block_html: Έχεις ήδη επιβάλλει αυστηρότερους περιορισμούς στο %{name}, πρώτα θα πρέπει να τους αναιρέσεις. new: create: Δημιουργία αποκλεισμού diff --git a/config/locales/en.yml b/config/locales/en.yml index 6bb0cc7abcb..b73b352c702 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -852,6 +852,26 @@ en: edit_preset: Edit warning preset empty: You haven't defined any warning presets yet. title: Manage warning presets + webhooks: + add_new: Add endpoint + delete: Delete + description_html: A webhook enables Mastodon to push real-time notifications about chosen events to your own application, so your application can automatically trigger reactions. + disable: Disable + disabled: Disabled + edit: Edit endpoint + empty: You don't have any webhook endpoints configured yet. + enable: Enable + enabled: Active + enabled_events: + one: 1 enabled event + other: "%{count} enabled events" + events: Events + new: New webhook + rotate_secret: Rotate secret + secret: Signing secret + status: Status + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ en: applications: created: Application successfully created destroyed: Application successfully deleted - invalid_url: The provided URL is invalid regenerate_token: Regenerate access token token_regenerated: Access token successfully regenerated warning: Be very careful with this data. Never share it with anyone! diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index b01f983b0b8..aeba0b97d97 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -428,6 +428,7 @@ es-AR: destroyed_msg: Se deshizo el bloqueo de dominio domain: Dominio edit: Editar bloqueo de dominio + existing_domain_block: Ya impusiste límites más estrictos a %{name}. existing_domain_block_html: Ya le aplicaste límites más estrictos a %{name}, por lo que primero necesitás desbloquearlo. new: create: Crear bloqueo diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index f396d6138d0..5f9a9f5e7ee 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1525,6 +1525,54 @@ es-MX: tags: does_not_match_previous_name: no coincide con el nombre anterior terms: + body_html: | +

Política de Privacidad

+

¿Qué información recogemos?

+ +
+

¿Para qué utilizamos su información?

+

Toda la información que obtenemos de usted puede ser utilizada de las siguientes maneras:

+ +
+

¿Cómo protegemos su información?

+

Implementamos una variedad de medidas de seguridad para mantener la seguridad de su información personal cuando usted ingresa, envía o accede a su información personal. Entre otras cosas, la sesión de su navegador, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL, y su contraseña está protegida mediante un algoritmo unidireccional fuerte. Puede habilitar la autenticación de dos factores para un acceso más seguro a su cuenta.

+
+

¿Cuál es nuestra política de retención de datos?

+

Haremos un esfuerzo de buena fe para:

+ +

Puede solicitar y descargar un archivo de su contenido, incluidos sus mensajes, archivos adjuntos multimedia, foto de perfil e imagen de cabecera.

+

Usted puede borrar su cuenta de forma irreversible en cualquier momento.

+
+

¿Utilizamos cookies?

+

Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere al disco duro de su ordenador a través de su navegador web (si usted lo permite). Estas cookies permiten al sitio reconocer su navegador y, si tiene una cuenta registrada, asociarla con su cuenta registrada.

+

Utilizamos cookies para entender y guardar sus preferencias para futuras visitas.

+
+

¿Revelamos alguna información a terceros?

+

No vendemos, comerciamos ni transferimos a terceros su información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podemos divulgar su información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio, o proteger nuestros u otros derechos, propiedad o seguridad.

+

Su contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.

+

Cuando usted autoriza a una aplicación a usar su cuenta, dependiendo del alcance de los permisos que usted apruebe, puede acceder a la información de su perfil público, su lista de seguimiento, sus seguidores, sus listas, todos sus mensajes y sus favoritos. Las aplicaciones nunca podrán acceder a su dirección de correo electrónico o contraseña.

+
+

Uso del sitio por parte de los niños

+

Si este servidor está en la UE o en el EEE: Nuestro sitio, productos y servicios están dirigidos a personas mayores de 16 años. Si es menor de 16 años, según los requisitos de la GDPR (General Data Protection Regulation) no utilice este sitio.

+

Si este servidor está en los EE.UU.: Nuestro sitio, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si usted es menor de 13 años, según los requisitos de COPPA (Children's Online Privacy Protection Act) no utilice este sitio.

+

Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.

+
+

Cambios en nuestra Política de Privacidad

+

Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.

+

Este documento es CC-BY-SA. Fue actualizado por última vez el 26 de mayo de 2022.

+

Adaptado originalmente desde la política de privacidad de Discourse.

title: Términos del Servicio y Políticas de Privacidad de %{instance} themes: contrast: Alto contraste diff --git a/config/locales/es.yml b/config/locales/es.yml index fcab7856aaa..9001931341b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -428,6 +428,7 @@ es: destroyed_msg: El bloque de dominio se deshizo domain: Dominio edit: Editar nuevo dominio bloqueado + existing_domain_block: Ya impusiste límites más estrictos a %{name}. existing_domain_block_html: Ya ha impuesto límites más estrictos a %{name}, necesita desbloquearlo primero. new: create: Crear bloque diff --git a/config/locales/fy.yml b/config/locales/fy.yml new file mode 100644 index 00000000000..fa727d6fe4a --- /dev/null +++ b/config/locales/fy.yml @@ -0,0 +1,54 @@ +--- +fy: + about: + active_count_after: warber + active_footnote: Moanliks Warbere Brûkers (MWB) + accounts: + last_active: letst warber + admin: + accounts: + moderation: + active: Aktyf + security_measures: + only_password: Allinnich wachtwurd + password_and_2fa: Wachtwurd en 2FA + dashboard: + active_users: warbere brûkers + top_languages: Meast aktive talen + top_servers: Meast aktive tsjinners + instances: + confirm_purge: Wolle jo werklik alle gegevens fan dit domein foar ivich fuortsmite? + dashboard: + instance_accounts_measure: bewarre accounts + system_checks: + database_schema_check: + message_html: Der binne database migraasjes yn ôfwachting. Jo moatte dizze útfiere om der foar te soargjen dat de applikaasje wurkjen bliuwt sa as it heard + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Too many requests + '500': + '503': The page could not be served due to a temporary server failure. + filters: + contexts: + thread: Petearen + notification_mailer: + digest: + mention: "%{name} hat jo fermeld yn:" + mention: + action: Beäntwurdzje + body: 'Jo binne fermeld troch %{name} yn:' + subject: Jo binne fermeld troch %{name} + title: Nije fermelding + relationships: + last_active: Letst warber + rss: + content_warning: 'Ynhâldswarskôging:' + statuses: + content_warning: 'Ynhâldswarskôging: %{warning}' + pin_errors: + direct: Berjochten dy allinnich sichtber binne foar fermelde brûkers kinne net fêstset wurde diff --git a/config/locales/gl.yml b/config/locales/gl.yml index ba3084f907f..48435b45bbd 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -428,6 +428,7 @@ gl: destroyed_msg: Desfíxose o bloqueo de dominio domain: Dominio edit: Editar bloqueo de dominio + existing_domain_block: Xa tes establecidas restricións maiores para %{name}. existing_domain_block_html: Xa impuxeches límites máis estrictos a %{name}, precisas desbloquealo primeiro. new: create: Crear bloqueo @@ -1525,6 +1526,54 @@ gl: tags: does_not_match_previous_name: non concorda co nome anterior terms: + body_html: | +

Privacidade

+

Que información recollemos?

+ +
+

De que xeito utilizamos os teus datos?

+

Toda a información que recollemos podería ser utilizada dos seguintes xeitos:

+ +
+

Como proxetemos os teus datos?

+

Implementamos varias medidas de seguridade para protexer os teus datos persoais cando introduces, envías ou accedes á túa información persoal. Entre outras medidas, a túa sesión de navegación, así como o tráfico entre as túas aplicacións e o API están aseguradas mediante SSL, e o teu contrasinal está camuflado utilizando un algoritmo potente de unha sóa vía. Podes habilitar a autenticación por dobre factor para protexer aínda máis o acceso á túa conta.

+
+

Cal é a nosa política de retención de datos?

+

Faremos un sincero esforzo en:

+ +

Podes solicitar e descargar un ficheiro cos teus contidos, incluíndo publicacións, anexos multimedia, imaxes de perfil e imaxe da cabeceira.

+

En todo momento podes eliminar de xeito irreversible a túa conta.

+
+

Utilizamos cookies?

+

Si. As cookies son pequenos ficheiros que un sitio web ou o provedor de servizo transfiren ao disco duro da túa computadora a través do navegador web (se o permites). Estas cookies posibilitan ao sitio web recoñecer o teu navegador e, se tes unha conta rexistrada, asocialo con dita conta.

+

Utilizamos cookies para comprender e gardar as túas preferencias para futuras visitas.

+
+

Entregamos algunha información a terceiras partes alleas?

+

Non vendemos, negociamos ou transferimos de ningún xeito a terceiras partes alleas a túa información identificativa persoal. Esto non inclúe terceiras partes de confianza que nos axudan a xestionar o sitio web, a xestionar a empresa, ou darche servizo se esas partes aceptan manter esa información baixo confidencialidade. Poderiamos liberar esa información se cremos que eso da cumplimento axeitado a lei, reforza as políticas do noso sitio ou protexe os nosos, e de outros, dereitos, propiedade ou seguridade.

+

O teu contido público podería ser descargado por outros servidores na rede. As túas publicacións públicas e para só seguidoras son entregadas aos servidores onde residen as túas seguidoras na rede, e as mensaxes directas son entregadas aos servidores das destinatarias sempre que esas seguidoras ou destinatarios residan en servidores distintos de este.

+

Cado autorizas a unha aplicación a utilizar a túa conta, dependendo do ámbito dos permisos que autorices, podería acceder a información pública de perfil, á lista de seguimento, ás túas seguidoras, as túas listas, todas as túas publicacións, as publicacións favoritas. As aplicacións non poden acceder nunca ao teu enderezo de correo nin ao teu contrasinal.

+
+

Utilización do sitio web por menores

+

Se este servidor está na UE ou no EEE: a nosa web, productos e servizos están dirixidos a persoas de 16 ou máis anos. Se tes menos de 16 anos, a requerimento da GDPR (General Data Protection Regulation) non uses esta web.

+

Se este servidor está nos EEUU: a nosa web, productos e servizos están dirixidos a persoas de 13 ou máis anos. Se non tes 13 anos de idade, a requerimento de COPPA (Children's Online Privacy Protection Act) non uses esta web.

+

Os requerimentos legais poden ser diferentes se este servidor está baixo outra xurisdición.

+
+

Cambios na nosa política de privacidade

+

Se decidimos cambiar a nosa política de privacidade publicaremos os cambios nesta páxina.

+

Este documento ten licenza CC-BY-SA. Actualizouse o 26 de maio de 2022.

+

Adaptado do orixinal política de privacidade de Discourse.

title: "%{instance} Termos do Servizo e Política de Intimidade" themes: contrast: Mastodon (Alto contraste) diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 0e3ff64407f..faee9de06f7 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -430,6 +430,7 @@ hu: destroyed_msg: A domain tiltása feloldva domain: Domain edit: Domain tiltás szerkesztése + existing_domain_block: 'Már szigorúbb korlátozások vonatkoznak a következőre: %{name}.' existing_domain_block_html: A %{name} domainen már szorosabb korlátokat állítottál be, először oldd fel a tiltást. new: create: Tiltás létrehozása diff --git a/config/locales/id.yml b/config/locales/id.yml index 8b364ddc98e..c278f749f6b 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -417,6 +417,7 @@ id: destroyed_msg: Pemblokiran domain telah dibatalkan domain: Domain edit: Edit blok domain + existing_domain_block: Anda sudah menerapkan batasan ketat terhadap %{name}. existing_domain_block_html: Anda telah menerapkan batasan yang lebih ketat pada %{name}, Anda harus membuka blokirnya lebih dulu. new: create: Buat pemblokiran diff --git a/config/locales/io.yml b/config/locales/io.yml index 1d0304d0906..3649ec946b2 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -428,6 +428,7 @@ io: destroyed_msg: Domenobstrukto desagesis domain: Domeno edit: Modifikez domenobstrukto + existing_domain_block: Vu ja exekutis plu rigoroza limiti a %{name}. existing_domain_block_html: Vu ja povis plu rigoroza limiti a %{name}, vu bezonas deobstruktar unesme. new: create: Kreez obstrukto diff --git a/config/locales/is.yml b/config/locales/is.yml index 28d6914e5b3..4e3f9353eb6 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -428,6 +428,7 @@ is: destroyed_msg: Útilokun léns hefur verið aflétt domain: Lén edit: Breyta útilokun léns + existing_domain_block: Þú hefur þegar gert kröfu um strangari takmörk fyrir %{name}. existing_domain_block_html: Þú ert þegar búin/n að setja strangari takmörk á %{name}, þú þarft fyrst að aflétta útilokun á því. new: create: Búa til útilokun diff --git a/config/locales/it.yml b/config/locales/it.yml index 43fa1c07bcf..708436ee1c4 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -428,6 +428,7 @@ it: destroyed_msg: Il blocco del dominio è stato rimosso domain: Dominio edit: Modifica blocco di dominio + existing_domain_block: Hai già imposto limiti più severi a %{name}. existing_domain_block_html: Hai già impostato limitazioni più stringenti su %{name}, dovresti sbloccarlo prima. new: create: Crea blocco diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 38420d07fba..defd5ab7ca7 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1482,6 +1482,87 @@ ja: tags: does_not_match_previous_name: 以前の名前と一致しません terms: + body_html: | +

プライバシーポリシー

+

どのような情報を収集しますか?

+ + + +
+ +

情報を何に使用しますか?

+ +

収集した情報は次の用途に使用されることがあります:

+ + + +
+ +

情報をどのように保護しますか?

+ +

私たちはあなたが入力・送信する際や自身の情報にアクセスする際に個人情報を安全に保つため、さまざまなセキュリティ上の対策を実施します。特にブラウザーセッションだけでなくアプリケーションとAPI間の通信もSSLによって保護されます。またパスワードは強力な不可逆アルゴリズムでハッシュ化されます。二要素認証を有効にし、アカウントへのアクセスをさらに安全にすることができます。

+ +
+ +

データ保持方針はどうなっていますか?

+ +

私たちは次のように誠意を持って努めます:

+ + + +

あなたは投稿・添付メディア・プロフィール画像・ヘッダー画像を含む自身のデータのアーカイブを要求し、ダウンロードすることができます。

+ +

あなたはいつでもアカウントの削除を要求できます。削除は取り消すことができません。

+ +
+ +

クッキーを使用していますか?

+ +

はい。クッキーは (あなたが許可した場合に) WebサイトやサービスがWebブラウザーを介してコンピューターに保存する小さなファイルです。使用することでWebサイトがブラウザーを識別し、登録済みのアカウントがある場合関連付けます。

+ +

私たちはクッキーを将来の訪問のために設定を保存し呼び出す用途に使用します。

+ +
+ +

なんらかの情報を外部に提供していますか?

+ +

私たちは個人を特定できる情報を外部へ販売・取引・その他方法で渡すことはありません。これには当サイトの運営・業務遂行・サービス提供を行ううえで補助する信頼できる第三者をこの機密情報の保護に同意するかぎり含みません。法令の遵守やサイトポリシーの施行、権利・財産・安全の保護に適切と判断した場合、あなたの情報を公開することがあります。

+ +

あなたの公開情報はネットワーク上の他のサーバーにダウンロードされることがあります。相手が異なるサーバーに所属する場合、「公開」と「フォロワー限定」投稿はフォロワーの所属するサーバーに配信され、「ダイレクト」投稿は受信者の所属するサーバーに配信されます。

+ +

あなたがアカウントの使用をアプリケーションに許可すると、承認した権限の範囲内で公開プロフィール情報・フォローリスト・フォロワー・リスト・すべての投稿・お気に入り登録にアクセスできます。アプリケーションはメールアドレスやパスワードに決してアクセスできません。

+ +
+ +

児童によるサイト利用について

+ +

サーバーがEUまたはEEA圏内にある場合: 当サイト・製品・サービスは16歳以上の人を対象としています。あなたが16歳未満の場合、GDPR (General Data Protection Regulation - EU一般データ保護規則) により当サイトを使用できません。

+ +

サーバーが米国にある場合: 当サイト・製品・サービスは13歳以上の人を対象としています。あなたが13歳未満の場合、COPPA (Children's Online Privacy Protection Act - 児童オンラインプライバシー保護法) により当サイトを使用できません。

+ +

サーバーが別の管轄区域にある場合、法的要件は異なることがあります。

+ +
+ +

プライバシーポリシーの変更

+ +

プライバシーポリシーの変更を決定した場合、このページに変更点を掲載します。

+ +

この文章のライセンスはCC-BY-SAです。最終更新日は2021年6月1日です。

+ +

オリジナルの出典: Discourse privacy policy

title: "%{instance} 利用規約・プライバシーポリシー" themes: contrast: Mastodon (ハイコントラスト) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 538c14a91ff..630beabfbde 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -419,6 +419,7 @@ ko: destroyed_msg: 도메인 차단이 해제되었습니다 domain: 도메인 edit: 도메인 차단 수정 + existing_domain_block: 이미 %{name}에 대한 더 강력한 제한이 있습니다. existing_domain_block_html: 이미 %{name}에 대한 더 강력한 제한이 걸려 있습니다, 차단 해제를 먼저 해야 합니다. new: create: 차단 추가 @@ -525,7 +526,7 @@ ko: private_comment: 비공개 주석 public_comment: 공개 주석 purge: 제거 - purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. + purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. title: 연합 total_blocked_by_us: 우리에게 차단 됨 total_followed_by_them: 우리를 팔로우 @@ -591,7 +592,7 @@ ko: resolve_description_html: 신고된 계정에 대해 아무런 동작도 취하지 않으며, 처벌기록이 남지 않으며, 신고는 처리됨으로 변경됩니다. silence_description_html: 이미 팔로우 하고 있는 사람이나 수동으로 찾아보는 사람에게만 프로필이 보여지고, 도달 범위를 엄격하게 제한합니다. 언제든지 되돌릴 수 있습니다. suspend_description_html: 프로필과 모든 컨텐츠가 최종적으로 삭제될 때까지 접근 불가상태가 됩니다. 이 계정과의 상호작용은 불가능해집니다. 30일 이내에 되돌릴 수 있습니다. - actions_description_html: 이 보고서를 해결하기 위해 취해야 할 조치를 지정해주세요. 신고된 계정에 대해 처벌 조치를 취하면 스팸 카테고리가 선택된 경우를 제외하고 이메일 알림이 해당 계정으로 전송됩니다. + actions_description_html: 이 신고를 해결하기 위해 취해야 할 조치를 지정해주세요. 신고된 계정에 대해 처벌 조치를 취하면, 스팸 카테고리가 선택된 경우를 제외하고 해당 계정으로 이메일 알림이 전송됩니다. add_to_report: 신고에 더 추가하기 are_you_sure: 정말로 실행하시겠습니까? assign_to_self: 나에게 할당하기 @@ -618,7 +619,7 @@ ko: placeholder: 이 리포트에 대한 조치, 기타 관련 된 사항에 대해 설명합니다… title: 노트 notes_description_html: 확인하고 다른 중재자나 미래의 자신을 위해 기록을 작성합니다 - quick_actions_description_html: '보고된 콘텐츠를 보려면 빠른 조치를 취하거나 아래로 스크롤하세요:' + quick_actions_description_html: '빠른 조치를 취하거나 아래로 스크롤해서 신고된 콘텐츠를 확인하세요:' remote_user_placeholder: "%{instance}의 리모트 사용자" reopen: 리포트 다시 열기 report: '신고 #%{id}' @@ -1500,6 +1501,87 @@ ko: tags: does_not_match_previous_name: 이전 이름과 맞지 않습니다 terms: + body_html: | +

개인정보 정책

+

우리가 어떤 정보를 수집하나요?

+ + + +
+ +

우리가 당신의 정보를 어디에 쓰나요?

+ +

당신에게서 수집한 정보는 다음과 같은 곳에 사용 됩니다:

+ + + +
+ +

어떻게 당신의 정보를 보호하나요?

+ +

우리는 당신이 입력, 전송, 접근하는 개인정보를 보호하기 위해 다양한 보안 대책을 적용합니다. 당신의 브라우저 세션, 당신의 응용프로그램과의 통신, API는 SSL로 보호 되며 패스워드는 강력한 단방향 해시 알고리즘을 사용합니다. 계정의 더 나은 보안을 위해 2단계 인증을 활성화 할 수 있습니다.

+ +
+ +

자료 저장 정책은 무엇이죠?

+ +

우리는 다음을 위해 노력을 할 것입니다:

+ + + +

당신은 언제든지 게시물, 미디어 첨부, 프로필 이미지, 헤더 이미지를 포함한 당신의 컨텐트에 대한 아카이브를 요청하고 다운로드 할 수 있습니다.

+ +

언제든지 계정을 완전히 삭제할 수 있습니다.

+ +
+ +

쿠키를 사용하나요?

+ +

네. 쿠키는 (당신이 허용한다면) 당신의 웹 브라우저를 통해 서버에서 당신의 하드드라이브에 저장하도록 전송하는 작은 파일들입니다. 이 쿠키들은 당신의 브라우저를 인식하고, 계정이 있는 경우 이와 연결하는 것을 가능하게 합니다.

+ +

당신의 환경설정을 저장하고 다음 방문에 활용하기 위해 쿠키를 사용합니다.

+ +
+ +

외부에 정보를 공개하나요?

+ +

우리는 당신을 식별 가능한 개인정보를 외부에 팔거나 제공하거나 전송하지 않습니다. 이는 당사의 사이트를 운영하기 위한, 기밀 유지에 동의하는, 신뢰 가능한 서드파티를 포함하지 않습니다. 또한 법률 준수, 사이트 정책 시행, 또는 당사나 타인에 대한 권리, 재산, 또는 안전보호를 위해 적절하다고 판단되는 경우 당신의 정보를 공개할 수 있습니다.

+ +

당신의 공개 게시물은 네트워크에 속한 다른 서버가 다운로드 할 수 있습니다. 당신의 팔로워나 수신자가 이 서버가 아닌 다른 곳에 존재하는 경우 당신의 공개, 팔로워 공개 게시물은 당신의 팔로워가 존재하는 서버로 전송되며, 다이렉트메시지는 수신자가 존재하는 서버로 전송 됩니다.

+ +

당신이 계정을 사용하기 위해 응용프로그램을 승인하는 경우 당신이 허용한 권한에 따라 응용프로그램은 당신의 공개 계정정보, 팔로잉 리스트, 팔로워 리스트, 게시물, 좋아요 등에 접근이 가능해집니다. 응용프로그램은 절대로 당신의 이메일 주소나 패스워드에 접근할 수 없습니다.

+ +
+ +

어린이의 사이트 사용

+ +

이 서버가 EU나 EEA에 속해 있다면: 당사의 사이트, 제품과 서비스는 16세 이상인 사람들을 위해 제공됩니다. 당신이 16세 미만이라면 GDPR(General Data Protection Regulation)의 요건에 따라 이 사이트를 사용할 수 없습니다.

+ +

이 서버가 미국에 속해 있다면: 당사의 사이트, 제품과 서비스는 13세 이상인 사람들을 위해 제공됩니다. 당신이 13세 미만이라면 COPPA (Children's Online Privacy Protection Act)의 요건에 따라 이 사이트를 사용할 수 없습니다.

+ +

이 서버가 있는 관할권에 따라 법적 요구가 달라질 수 있습니다.

+ +
+ +

개인정보 정책의 변경

+ +

만약 우리의 개인정보 정책이 바뀐다면, 이 페이지에 바뀐 정책이 게시됩니다.

+ +

이 문서는 CC-BY-SA 라이센스입니다. 마지막 업데이트는 2012년 5월 26일입니다.

+ +

Originally adapted from the Discourse privacy policy.

title: "%{instance} 이용약관과 개인정보 취급 방침" themes: contrast: 마스토돈 (고대비) @@ -1553,7 +1635,7 @@ ko: spam: 스팸 violation: 컨텐츠가 다음의 커뮤니티 규정을 위반합니다 explanation: - delete_statuses: 귀하의 게시물 중 일부가 하나 이상의 커뮤니티 가이드라인을 위반한 것으로 확인되어 %{instance} 모더레이터에 의해 삭제되었습니다. + delete_statuses: 귀하의 게시물 중 일부가 하나 이상의 커뮤니티 가이드라인을 위반한 것으로 확인되어 %{instance}의 중재자에 의해 삭제되었습니다. disable: 당신은 더이상 당신의 계정을 사용할 수 없습니다, 하지만 프로필과 다른 데이터들은 여전히 그대로 남아있습니다. 당신의 데이터에 대한 백업을 요청하거나, 계정 설정을 변경 또는 계정을 삭제할 수 있습니다. mark_statuses_as_sensitive: 당신의 몇몇 게시물들은 %{instance}의 중재자에 의해 민감함으로 설정되었습니다. 이것은 사람들이 미리보기를 보기 전에 미디어를 한번 눌러야 함을 의미합니다. 당신은 스스로도 자신의 게시물을 작성할 때 미디어를 민감함으로 설정할 수 있습니다. sensitive: 지금부터는, 당신이 업로드한 미디어 파일들은 민감함 표시가 뜨게 되고 클릭해야만 볼 수 있다는 경고문 뒤에 가려지게 됩니다. diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 085624c54de..78d99c2e519 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -428,6 +428,7 @@ ku: destroyed_msg: Navpera asteng kirinê hat rakirin domain: Navper edit: Astengkirina navperê serrast bike + existing_domain_block: Jixwe te sînorên tundtir li ser %{name} daye kirine. existing_domain_block_html: Te bi bandorê mezin sînor danî ser %{name}, Divê tu asteng kirinê rabikî, pêşî ya . new: create: Astengkirinekê çê bike diff --git a/config/locales/lv.yml b/config/locales/lv.yml index e7882c510e7..f9d404303d9 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -437,6 +437,7 @@ lv: destroyed_msg: Domēna bloķēšana ir atsaukta domain: Domēns edit: Rediģēt domēna bloķēšanu + existing_domain_block: Tu jau esi noteicis stingrākus ierobežojumus %{name}. existing_domain_block_html: Tu jau esi noteicis stingrākus ierobežojumus %{name}, vispirms tev jāatbloķē. new: create: Izveodot bloku diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 845e0237d9e..2709572defa 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -446,6 +446,7 @@ pl: destroyed_msg: Blokada domeny nie może zostać odwrócona domain: Domena edit: Edytuj blokadę domeny + existing_domain_block: Już nałożyłeś surowsze limity na %{name}. existing_domain_block_html: Już narzuciłeś bardziej rygorystyczne limity na %{name}, musisz najpierw je odblokować. new: create: Utwórz blokadę diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 2765bf941ef..377360a9d81 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -428,6 +428,7 @@ pt-PT: destroyed_msg: Bloqueio de domínio está a ser removido domain: Domínio edit: Editar bloqueio de domínio + existing_domain_block: Já impôs limites mais rigorosos a %{name}. existing_domain_block_html: Você já impôs limites mais restritivos a %{name}, é necessário primeiro desbloqueá-lo. new: create: Criar bloqueio diff --git a/config/locales/ru.yml b/config/locales/ru.yml index c0495c3ee74..39a3b3eb7d4 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -426,6 +426,7 @@ ru: destroyed_msg: Блокировка домена снята domain: Домен edit: Редактировать блокировку + existing_domain_block: Вы уже установили более строгие ограничения для %{name}. existing_domain_block_html: Вы уже ввели более строгие ограничения на %{name}, вам нужно разблокировать его сначала. new: create: Создать блокировку @@ -495,8 +496,12 @@ ru: comment: Внутренняя заметка policies: reject_media: Отклонить медиа + silence: Лимит + suspend: Приостановить policy: Политика + reason: Публичная причина dashboard: + instance_accounts_dimension: Популярные аккаунты instance_accounts_measure: сохраненные учетные записи instance_languages_dimension: Популярные языки instance_media_attachments_measure: сохраненные медиафайлы @@ -796,6 +801,8 @@ ru: title: Издатели rejected: Отклонённые statuses: + allow: Разрешить пост + allow_account: Разрешить автора title: Популярные посты tags: current_score: Текущий счет %{score} @@ -847,6 +854,7 @@ ru: new_trending_statuses: title: Популярные посты new_trending_tags: + no_approved_tags: На данный момент популярные подтвержденные хэштеги отсутствуют. title: Популярные хэштеги aliases: add_new: Создать псевдоним @@ -1008,9 +1016,12 @@ ru: title: "%{action} от %{date}" title_actions: delete_statuses: Удаление поста + disable: Заморозка аккаунта mark_statuses_as_sensitive: Помечать посты как деликатные + none: Требующие внимания sensitive: Отметить учетную запись как деликатную silence: Ограничение учетной записи + suspend: Приостановка Аккаунта your_appeal_approved: Ваша апелляция одобрена your_appeal_pending: Вы подали апелляцию your_appeal_rejected: Ваша апелляция отклонена diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index b784b1da7b5..7e4f52849a1 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -91,6 +91,9 @@ en: name: You can only change the casing of the letters, for example, to make it more readable user: chosen_languages: When checked, only posts in selected languages will be displayed in public timelines + webhook: + events: Select events to send + url: Where events will be sent to labels: account: fields: @@ -219,6 +222,9 @@ en: name: Hashtag trendable: Allow this hashtag to appear under trends usable: Allow posts to use this hashtag + webhook: + events: Enabled events + url: Endpoint URL 'no': 'No' recommended: Recommended required: diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml new file mode 100644 index 00000000000..b568750e2cd --- /dev/null +++ b/config/locales/simple_form.fy.yml @@ -0,0 +1,6 @@ +--- +fy: + simple_form: + labels: + notification_emails: + mention: Ien hat jo fermeld diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 9d82e43a4b8..71d4058c82b 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -37,7 +37,7 @@ ko: current_password: 보안을 위해 현재 계정의 암호를 입력해주세요 current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 - discoverable: 추천, 트렌드 및 기타 기능을 통해 낯선 사람이 귀하의 계정을 찾을 수 있도록 허용합니다 + discoverable: 추천, 트렌드 및 기타 기능을 통해 낯선 사람이 내 계정을 발견할 수 있도록 허용합니다 email: 당신은 확인 메일을 받게 됩니다 fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다 header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 @@ -206,10 +206,10 @@ ko: digest: 요약 이메일 보내기 favourite: 누군가 내 상태를 마음에 들어했을 때 follow: 누군가 나를 팔로우 했을 때 - follow_request: 누군가 나를 팔로우 하길 원할 때 + follow_request: 누군가 나를 팔로우 하길 요청할 때 mention: 누군가 나를 언급했을 때 pending_account: 새 계정이 심사가 필요할 때 - reblog: 누군가 내 툿을 부스트 했을 때 + reblog: 누군가 내 게시물을 부스트 했을 때 report: 새 신고가 접수되었을 때 trending_tag: 새 트렌드에 대한 리뷰가 필요할 때 rule: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 58190e95b77..8f54e9f74f9 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -446,6 +446,7 @@ sl: destroyed_msg: Domenski blok je bil razveljavljen domain: Domena edit: Uredi domenski blok + existing_domain_block: Ste že uveljavili strožje omejitve na %{name}. existing_domain_block_html: Uvedli ste strožje omejitve za %{name}, sedaj ga morate najprej odblokirati. new: create: Ustvari blok diff --git a/config/locales/th.yml b/config/locales/th.yml index 25fc7034e52..9fd23f5b356 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -174,6 +174,7 @@ th: already_confirmed: ผู้ใช้นี้ได้รับการยืนยันอยู่แล้ว send: ส่งอีเมลยืนยันใหม่ success: ส่งอีเมลยืนยันสำเร็จ! + reset: รีเซ็ต reset_password: ตั้งรหัสผ่านใหม่ resubscribe: บอกรับใหม่ role: สิทธิอนุญาต diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 15f4bf57c73..23fe6508b95 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1525,6 +1525,86 @@ tr: tags: does_not_match_previous_name: önceki adla eşleşmiyor terms: + body_html: | +

Gizlilik Politikası

+

Hangi bilgileri topluyoruz?

+ + + +
+ +

Bilgilerinizi ne için kullanıyoruz?

+ +

Sizden topladığımız bilgilerin herhangi bir kısmı aşağıdaki şekillerde kullanılabilir:

+ + + +
+ +

Bilgilerinizi nasıl koruyoruz?

+ +

Kişisel bilgilerinizi girerken, gönderirken veya onlara erişirken kişisel bilgilerinizin güvenliğini sağlamak için çeşitli güvenlik önlemleri uyguluyoruz. Diğer şeylerin yanı sıra, tarayıcı oturumunuz ve uygulamalarınız ile API arasındaki trafik SSL ile güvence altına alınır ve şifreniz sağlam bir tek yönlü bir algoritma kullanılarak şifrelenir. Hesabınıza daha güvenli bir şekilde erişebilmek için iki adımlı kimlik doğrulamasını etkinleştirebilirsiniz.

+ +
+ +

Veri saklama politikamız nedir?

+ +

Şunları yapmak için iyi niyetli bir şekilde çalışacağız:

+ + +

Gönderileriniz, medya ekleriniz, profil fotoğrafınız ve başlık resminiz dahil, içeriğimizin arşivini talep edebilir ve indirebilirsiniz.

+ +

Hesabınızı istediğiniz zaman geri alınamaz şekilde silebilirsiniz.

+ +
+ +

Çerez kullanıyor muyuz?

+ +

Evet. Çerezler, bir sitenin veya servis sağlayıcısının Web tarayıcınız üzerinden bilgisayarınızın sabit diskine aktardığı küçük dosyalardır (eğer izin verirseniz). Bu çerezler sitenin tarayıcınızı tanımasını ve kayıtlı bir hesabınız varsa, kayıtlı hesabınızla ilişkilendirmesini sağlar.

+ +

Sonraki ziyaretlerde tercihlerinizi anlamak ve kaydetmek için çerezleri kullanıyoruz.

+ +
+ +

Herhangi bir bilgiyi dış taraflara açıklıyor muyuz?

+ +

Kişisel olarak tanımlanabilir bilgilerinizi dış taraflara satmıyor, takas etmiyor veya devretmiyoruz. Bu, taraflarımız bu bilgileri gizli tutmayı kabul ettiği sürece sitemizi işletmemize, işimizi yürütmemize veya size hizmet etmemize yardımcı olan güvenilir üçüncü tarafları içermemektedir. Ayrıca, yayınlanmanın yasalara uymayı, site politikalarımızı yürürlüğe koymayı ya da kendimizin ya da diğerlerinin haklarını, mülklerini ya da güvenliğini korumamızı sağladığına inandığımızda bilgilerinizi açıklayabiliriz.

+ +

Herkese açık içeriğiniz ağdaki diğer sunucular tarafından indirilebilir. Bu takipçiler veya alıcılar bundan farklı bir sunucuda bulundukları sürece, herkese açık ve takipçilere özel gönderileriniz, takipçilerinizin bulunduğu sunuculara, ve doğrudan mesajlar, alıcıların sunucularına iletilir.

+ +

Hesabınızı kullanması için bir uygulamayı yetkilendirdiğinizde, onayladığınız izinlerin kapsamına bağlı olarak, herkese açık profil bilgilerinize, takip ettiklerinizin listesine, takipçilerinize, listelerinize, tüm gönderilerinize ve favorilerinize erişebilir. Uygulamalar e-posta adresinize veya parolanıza asla erişemez.

+ +
+ +

Sitenin çocuklar tarafından kullanımı

+ +

Bu sunucu AB’de veya AEA’da ise: Site, ürün ve hizmetlerimizin tamamı en az 16 yaşında olan kişilere yöneliktir. Eğer 16 yaşın altındaysanız, GDPR yükümlülükleri gereği (General Data Protection Regulation) bu siteyi kullanmayın.

+ +

Bu sunucu ABD’de ise: Site, ürün ve hizmetlerimizin tamamı en az 13 yaşında olan kişilere yöneliktir. Eğer 13 yaşın altındaysanız, COPPA yükümlülükleri gereği (Children's Online Privacy Protection Act) bu siteyi kullanmayın.

+ +

Bu sunucu başka bir ülkede ise yasal gereklilikler farklı olabilir.

+ +
+ +

Gizlilik Politikamızdaki Değişiklikler

+ +

Gizlilik politikamızı değiştirmeye karar verirsek, bu değişiklikleri bu sayfada yayınlayacağız.

+ +

Bu belge CC-BY-SA altında lisanslanmıştır. En son 26 Mayıs 2022 tarihinde güncellenmiştir.

+ +

Discourse gizlilik politikasından uyarlanmıştır.

title: "%{instance} Hizmet Şartları ve Gizlilik Politikası" themes: contrast: Mastodon (Yüksek karşıtlık) diff --git a/config/locales/uk.yml b/config/locales/uk.yml index dfe25ebb2c5..aa210c980ea 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -444,6 +444,7 @@ uk: destroyed_msg: Блокування домену знято domain: Домен edit: Редагувати блокування доменів + existing_domain_block: Ви вже наклали суворіші обмеження на %{name}. existing_domain_block_html: Ви вже наклали більш суворі обмеження на %{name}, вам треба спочатку розблокувати його. new: create: Створити блокування diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 95561abb7bc..032a5c95172 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -417,6 +417,7 @@ zh-TW: destroyed_msg: 已撤銷站點封鎖 domain: 站點 edit: 更改封鎖的站台 + existing_domain_block: 您已對 %{name} 施加了更嚴格的限制。 existing_domain_block_html: 您已經對 %{name} 施加了更嚴格的限制,您需要先把他取消封鎖。 new: create: 新增封鎖 diff --git a/config/navigation.rb b/config/navigation.rb index 47993e7a6d8..2a4bf2d39d2 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -62,6 +62,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :rules, safe_join([fa_icon('gavel fw'), t('admin.rules.title')]), admin_rules_path, highlights_on: %r{/admin/rules} s.item :announcements, safe_join([fa_icon('bullhorn fw'), t('admin.announcements.title')]), admin_announcements_path, highlights_on: %r{/admin/announcements} s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis} + s.item :webhooks, safe_join([fa_icon('inbox fw'), t('admin.webhooks.title')]), admin_webhooks_path, highlights_on: %r{/admin/webhooks} s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? && !whitelist_mode? }, highlights_on: %r{/admin/relays} s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? } s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } diff --git a/config/routes.rb b/config/routes.rb index 50bbb8b5ff6..b8f908ffc78 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -256,6 +256,17 @@ Rails.application.routes.draw do resources :rules + resources :webhooks do + member do + post :enable + post :disable + end + + resource :secret, only: [], controller: 'webhooks/secrets' do + post :rotate + end + end + resources :reports, only: [:index, :show] do resources :actions, only: [:create], controller: 'reports/actions' diff --git a/db/migrate/20220606044941_create_webhooks.rb b/db/migrate/20220606044941_create_webhooks.rb new file mode 100644 index 00000000000..cca48fce653 --- /dev/null +++ b/db/migrate/20220606044941_create_webhooks.rb @@ -0,0 +1,12 @@ +class CreateWebhooks < ActiveRecord::Migration[6.1] + def change + create_table :webhooks do |t| + t.string :url, null: false, index: { unique: true } + t.string :events, array: true, null: false, default: [] + t.string :secret, null: false, default: '' + t.boolean :enabled, null: false, default: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 07dc1159229..526480df4da 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_05_27_114923) do +ActiveRecord::Schema.define(version: 2022_06_06_044941) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1038,6 +1038,16 @@ ActiveRecord::Schema.define(version: 2022_05_27_114923) do t.index ["user_id"], name: "index_webauthn_credentials_on_user_id" end + create_table "webhooks", force: :cascade do |t| + t.string "url", null: false + t.string "events", default: [], null: false, array: true + t.string "secret", default: "", null: false + t.boolean "enabled", default: true, null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["url"], name: "index_webhooks_on_url", unique: true + end + add_foreign_key "account_aliases", "accounts", on_delete: :cascade add_foreign_key "account_conversations", "accounts", on_delete: :cascade add_foreign_key "account_conversations", "conversations", on_delete: :cascade diff --git a/package.json b/package.json index ca06540182c..458c3ef6c85 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.1", - "ws": "^8.6.0" + "ws": "^8.7.0" }, "devDependencies": { "@babel/eslint-parser": "^7.18.2", diff --git a/spec/fabricators/webhook_fabricator.rb b/spec/fabricators/webhook_fabricator.rb new file mode 100644 index 00000000000..fa4f17b5546 --- /dev/null +++ b/spec/fabricators/webhook_fabricator.rb @@ -0,0 +1,5 @@ +Fabricator(:webhook) do + url { Faker::Internet.url } + secret { SecureRandom.hex } + events { Webhook::EVENTS } +end diff --git a/spec/models/webhook_spec.rb b/spec/models/webhook_spec.rb new file mode 100644 index 00000000000..60c3d9524fc --- /dev/null +++ b/spec/models/webhook_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +RSpec.describe Webhook, type: :model do + let(:webhook) { Fabricate(:webhook) } + + describe '#rotate_secret!' do + it 'changes the secret' do + previous_value = webhook.secret + webhook.rotate_secret! + expect(webhook.secret).to_not be_blank + expect(webhook.secret).to_not eq previous_value + end + end + + describe '#enable!' do + before do + webhook.disable! + end + + it 'enables the webhook' do + webhook.enable! + expect(webhook.enabled?).to be true + end + end + + describe '#disable!' do + it 'disables the webhook' do + webhook.disable! + expect(webhook.enabled?).to be false + end + end +end diff --git a/spec/validators/url_validator_spec.rb b/spec/validators/url_validator_spec.rb index a44878a44f8..85eadeb63a8 100644 --- a/spec/validators/url_validator_spec.rb +++ b/spec/validators/url_validator_spec.rb @@ -19,7 +19,7 @@ RSpec.describe URLValidator, type: :validator do let(:compliant) { false } it 'calls errors.add' do - expect(errors).to have_received(:add).with(attribute, I18n.t('applications.invalid_url')) + expect(errors).to have_received(:add).with(attribute, :invalid) end end diff --git a/yarn.lock b/yarn.lock index 0a16edc36d7..05922b4825d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11775,10 +11775,10 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.2.3, ws@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23" - integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw== +ws@^8.2.3, ws@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.7.0.tgz#eaf9d874b433aa00c0e0d8752532444875db3957" + integrity sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg== xml-name-validator@^4.0.0: version "4.0.0"